MacTex 里直接用 CTeX 文类的 \fangsong 命令的话,会默认使用华文仿宋字体(STFangsong)。
这样的文件用 latexmk 编译得到的 pdf 会在 windows 里乱码,不能显示其中的仿宋字体。
但直接用 xelatex 编译并不会如此。
经 @johannes_gutenberg 告知,实际上 latexmk 在编译时有两步:
1. tex -> xdv
xelatex -no-pdf [...] input.tex
可能编译多次
2. xdv -> pdf
xdvipdfmx input.xdv
而第二步中,这个华文仿宋字体由于版权(?)原因,不会被嵌入到 pdf 内。
可以显示使用 -E 选项要求 xdvipdfmx 嵌入字体。
对于 latexmk,则可以如下操作:
1. 工作目录新建空文件 latexmkrc
2. 其中内容写上 $xdvipdfmx="xdvipdfmx -E -o %D %O %S"
就可以让 latexmk 生成 pdf 时总嵌入字体。
2018年4月3日星期二
2017年8月17日星期四
让 LG KBB-710 键盘支持 iOS 10
大约去年暑期时,冲动购物买了 LG 的 KBB-710 键盘。买回来试了下感觉不错,但平时也不怎么需要用,就收起来没再试过。
等这几天翻出来想用时,发现一个奇怪的问题:与 iOS 设备配对成功之后,想要再次从断开状态恢复连接就会失败,提示找不到设备。断开包括 iOS 锁屏、键盘卷起、键盘切换连接设备等。
网上搜了下,发现大量用户都表示 iOS 10 之后遇到了类似的问题。而 LG 官方也直接宣布这键盘不支持 iOS 10了。
LG 给了个临时解决方案,让每次需要使用时都忽略设备然后重新配对。但是在我这里,重新配对时需要等超长的设备搜索时间。
网上搜索一番无果之后,倒是让我试出来一个临时解决方案:
等这几天翻出来想用时,发现一个奇怪的问题:与 iOS 设备配对成功之后,想要再次从断开状态恢复连接就会失败,提示找不到设备。断开包括 iOS 锁屏、键盘卷起、键盘切换连接设备等。
网上搜了下,发现大量用户都表示 iOS 10 之后遇到了类似的问题。而 LG 官方也直接宣布这键盘不支持 iOS 10了。
LG 给了个临时解决方案,让每次需要使用时都忽略设备然后重新配对。但是在我这里,重新配对时需要等超长的设备搜索时间。
网上搜索一番无果之后,倒是让我试出来一个临时解决方案:
- 每当需要恢复连接键盘时,把键盘展开,把 iOS 的蓝牙设置打开。这时设置里应该会显示一个未找到的键盘。
- 按住 KBB-710 上你上次进行匹配的蓝牙数字键两秒,进入重新匹配模式。
- 在 iOS 蓝牙设置里点击你的键盘。
2017年3月24日星期五
配置群晖支持 python 版 shadowsocks
问题描述
直接使用 pip 安装 shadowsocks,启动时可能卡在RuntimeError: can not find library crypto 这一步。这里是在使用 ctypes 查找 libcrypto.so,而群晖自带的 python 里,ctypes 版本太老,不支持 armv7,以至于
ctypes.util.find_library()实际上找不到任何可用的库。解决方案
去新一点的 Linux 发行版上,拷一个/usr/lib/python2.7/ctypes/util.py 回来,替换掉群晖自己这个文件即可。我找了个 Ubuntu14 就解决问题了。
消息来源:https://forum.synology.com/enu/viewtopic.php?t=84921
2016年10月23日星期日
让 Windows 中的 LaTeXTools 支持中文目录
LaTeXTools 是 Sublime Text 的一个插件,可以用来方便地在 Sublime Text 中处理 LaTeX 文件。
我目前所使用的 v3.11.2 版稍有问题,无法正确处理中文目录,原因是其 makepdf.py 文件使用 subprocess.Popen 调用 Latex 的外部指令时,对传入的工作目录 cwd 没有进行特殊字符判断,直接给了 Popen。如果工作目录含有中文字符的话,就会报一个
解决方案:
自己 encoding 一下 cwd,再传给 Popen。
在第 142 行,
将紧随其后的
参阅
1. Sublime Text 2的Tortoise插件中文路径问题
2. subprocess.call fails with unicode strings in command line - Python tracker
我目前所使用的 v3.11.2 版稍有问题,无法正确处理中文目录,原因是其 makepdf.py 文件使用 subprocess.Popen 调用 Latex 的外部指令时,对传入的工作目录 cwd 没有进行特殊字符判断,直接给了 Popen。如果工作目录含有中文字符的话,就会报一个
UnicodeEncodeError: 'ascii' codec can't encode characters in position xx-xx: ordinal not in range(128)的错误。
解决方案:
自己 encoding 一下 cwd,再传给 Popen。
在第 142 行,
if self.caller.plat == "windows":之后另起一行,缩进并加入下列内容
fixed_tex_dir = self.caller.tex_dir
if isinstance(fixed_tex_dir, unicode):
fixed_tex_dir = fixed_tex_dir.encode(sys.getfilesystemencoding())
将紧随其后的
cwd=self.caller.tex_dir替换为
cwd=fixed_tex_dir注意上述内容中,所有四个空格都要替换为 tab 缩进。
参阅
1. Sublime Text 2的Tortoise插件中文路径问题
2. subprocess.call fails with unicode strings in command line - Python tracker
2016年6月27日星期一
Minecraft 开服指导:同时兼容 Forge 和 Essentials 类插件
本文为截止当前( 2016年06月27日)对 Minecraft 开服方式的小结
主要目标是:同时兼容 Forge 和 Essentials 类插件
主要目标是:同时兼容 Forge 和 Essentials 类插件
- 对于 1.7.10
- 对于早于 forge1403 的版本:直接使用 Cauldron
- 对于后续版本
- 考虑使用 Kcauldron
- 考虑使用 Thermos
- 上述都直接支持标准 essentials 插件
- 使用 forge + forge essentials
- 代价是禁怪不如原始 essentials 方便,但有其它功能
- http://files.minecraftforge.net/
- http://minecraft.curseforge.com/projects/forge-essentials-74735/files
- 对于 1.8
- 使用 spigot + 相关 essentials
- 使用 forge + forge essentials
- 同1.7.10
- 但暂无1.8.9编译版本?
- 使用 forge + sponge + sponge essentials
- 对于 1.9
- 使用 spigot + essentials
- 没 mod
- 使用 forge + sponge + sponge essentials
- 使用 spigot + essentials
- 对于 1.10
- 使用 forge
- 没插件
- 使用 spigot
- 没 mod
- 使用 forge
2015年3月15日星期日
在Abaqus中使用c++写用户子程序
Abaqus 6.13之后的版本多了一个功能,可以用c++或者c来写用户子程序了;之前的版本中只支持使用fortran语言。
网上在这方面的资料太少,因此把我的折腾过程记录一下。
从c++调用fortran的函数,其参数列表中含有字符串时
——关于fortran 中的character*
http://www.yolinux.com/TUTORIALS/LinuxTutorialMixingFortranAndC.html
https://computing.llnl.gov/tutorials/bgq/ 中的 Miscellaneous 一节
http://arnholm.org/software/cppf77/cppf77.htm
网上在这方面的资料太少,因此把我的折腾过程记录一下。
- 在abaqus中加载编译环境用和fortran相同的方法(不过我试的时候没需要,应该是ifortvar带进去了)
- abaqus_v6.env里没什么要改的
- 在cpp文件中如下修改
- 要先#include <aba_for_c.h>
- 这会带进来个FOR_NAME宏,所有从abaqus调用的函数,以及调用abaqus的函数,都用类似下面的方法声明
- extern "C" 是让cpp用c的方法声明符号——即符号名称中不包含变量类型,不知重载是怎么解决的。
- 就算不能重载也没关系,只有和abaqus通信的函数要这么处理
- 例子
- extern "C" void FOR_NAME(xit)();
- 这个是abaqus提供的函数
- 对于需要传入的参数中包含字符串的,见文末说明。
- extern "C" void FOR_NAME(umat)(double* STRESS,void* STATEV,double*DDSDDEori,void* SSE,void* SPD,void* SCD,void* RPL,void* DDSDDT,void* DRPLDE,void* DRPLDT,void* STRAN,double* DSTRAN,void* TIME,void* DTIME,void* TEMP,void* DTEMP,void* PREDEF,void* DPRED,void* CMNAME,int& NDI,int& NSHR,int& NTENS,void* NSTATV,double* PROPS,void* NPROPS,void* COORDS,void* DROT,void* PNEWDT,void* CELENT,void* DFGRD0,void* DFGRD1,void* NOEL,void* NPT,void* LAYER,void* KSPT,void* KSTEP,void* KINC){ }
- 这里的void*都是偷懒了,只声明对自己要用的变量就行
- 对于二维数组,fortran是列优先的,cpp是行优先的
- fortran是1开始数的,cpp是0开始数的
- DDSDDE这个二维数组,有两种办法
- 如果你确信你只对3维问题跑,则它一定是6*6的,可以把DDSDDE在函数头里声明为 double DDSDDE[][6],或者double (*DDSDDE)[6]
- 否则的话,开头声明为double* DDSDDEori
- double** DDSDDE=new double*[NTENS];
- for(int i=0;i<NTENS;i++) DDSDDE[i]=DDSDDEori+NTENS*i;
- 这个方法略占行数,不过并没有效率下降。
- 调用外部库
- 如armadillo
- 正常安装armadillo库之后即可使用
- 如果要矩阵乘法,就要BLAS;要解方程,就要LAPACK
- 他俩的lib应当从链接器中提供,这意味着——
- 修改abaqus_v6.env中的link_sl,在末尾添加'blas_win64_MT.lib' , 'lapack_win64_MT.lib' ,并将两个文件拷贝到vs的cpp库中(选择amd64)目录
- 在我的机子上是 C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\amd64
- 将对应的两个dll拷到system32里
- 否则程序运行中会报错弹框退出
- 可以用mat ddsddeMat=mat(DDSDDEori,NTENS,NTENS,false,true);直接构建对应 的矩阵或列向量
- 开头把DDSDDE声明为double*或者void*
- 第一个false为不拷贝数据,直接用原始位置
- 第二个true为strict,即不添加空间,保证总是用这一段
- 要注意这里不用转置。
- 二维数组中,fortran是列优先的,c++是行优先的,但arma使用一维数组初始化矩阵时,是列优先的(至少在armadillo-4.650.3中是)。
- abaqus 6.13或更高版本支持在standard或者explicit中用c或cpp
- abaqus 6.14-2中仍然不支持直接用cae来指定cpp后缀的用户子程序,只能用命令行的user=xxxxx.cpp来指定。因此要用cae生成input文件,用命令行计算,最后可以用cae查看计算结果
从c++调用fortran的函数,其参数列表中含有字符串时
——关于fortran 中的character*
fortran中的字符串是自知长度的,可以通过len()访问
在c++中无法产生这一类
在向subroutine传递字符串时,具体行为是编译器相关的
- 有的编译器会传递一个结构体,其中包含1个char*指针,和一个size_t的值
- 有的编译器在整个函数的参数列表末尾按顺序依次再传递各个字符串的长度
intel fortran 是第二种
对于第一种情况,可以构造一个类CHARACTER来模拟行为
这里有个写好的
对于第二种情况,在c++中声明函数就要考虑到末尾的整形变量,调用时也要如此考虑
- 声明 extern "C" void FOR_NAME(getoutdir) (char* outdir, int* lenoutdir, int len);
- 调用 getoutdir(temp, &len, 200);
- 其中200为char temp[200];
http://www.yolinux.com/TUTORIALS/LinuxTutorialMixingFortranAndC.html
https://computing.llnl.gov/tutorials/bgq/ 中的 Miscellaneous 一节
http://arnholm.org/software/cppf77/cppf77.htm
2013年9月12日星期四
在Airmail中使用QQ邮箱
2013年2月4日星期一
在Win7 x64下安装AutoCAD 2002
作为一个早于Windows XP出生的软件,这几天真是让我见识到AutoCAD2002的各种奇葩之处。
它使用了一个叫做C-Dilla的反盗版组件。我没有找到它的官网,从这里的描述来看,它目前的最新版本3.27发布于2002年11月。
C-Dilla这个组件,自始至终,没有兼容过64位系统。
AutoCAD2002的原始安装盘中自带的C-Dilla组件版本号为3.24,它甚至还不支持XP系统……因而网上有大把的文章教你去安装C-Dilla3.25以在Windows XP中正常使用AutoCAD2002。
我天朝人民为了免费使用AutoCAD2002,发明了一种修改acad.exe来绕开C-Dilla组件的方法。这种方法正好可以让我们在64位操作系统下使用AutoCAD2002。(AutoCAD2002的其他部分都可以正常运行在WoW64环境下)
比如说,你可以在这里获取一个绕开C-Dilla的盗版AutoCAD。
虽说到这里为止问题似乎已经解决了,但遗憾的是这个精简的破解版去掉的功能实在太多,满足不了母上的正常工作需要,因而只能用下面这种比较绕远的方法了。
先正常安装一份原版的AutoCAD,这时它是打不开的。
更新: 直接用破解版压缩包中的 acad.exe 替换掉原版的 acad.exe 即可。
嘛这样就基本搞定了,如果你接下来发现DWG文件图标错误,可以参考这篇文章。
修复win7 x64下AutoCAD 2002 *.dwg文件的图标
给老妈装机子时遇到的莫名其妙的问题。
AutoCAD 2002发布时XP还没面世,因此你要是想在更新的win7环境中使用,有可能遇到各种莫名其妙的问题。
这是其中之一,安装完成后DWG文件的图标会变成下面这种样子。
Win7里去掉了详细的文件关联管理器,新的文件关联系统虽然对用户友好了不少,但很多功能都消失了,得自己去注册表修改。
dwg文件关联的详细信息在这里:
AutoCAD 2002发布时XP还没面世,因此你要是想在更新的win7环境中使用,有可能遇到各种莫名其妙的问题。
这是其中之一,安装完成后DWG文件的图标会变成下面这种样子。
Win7里去掉了详细的文件关联管理器,新的文件关联系统虽然对用户友好了不少,但很多功能都消失了,得自己去注册表修改。
dwg文件关联的详细信息在这里:
HKEY_CLASSES_ROOT\AutoCAD.Drawing.15\
它的默认图标在下属的DefaultIcon子键里,如果你的图标和我的相似,这个子键的“默认”键值很有可能如下:
C:\WINDOWS\system32\acadficn.dll,37
直接查找这个文件(当然我更推荐你使用everything),发现它在64位win7中保存在这个位置
C:\WINDOWS\SysWOW64\acadficn.dll,37
把它直接改对就行了
WoW64是64位Windows系统针对32位程序的虚拟层。
正常的安装程序注册图标时应该使用合适的方法来得到自己组件的位置,但看起来AutoCAD2002想当然地指定了文件的位置。
// 作为一个老软件,AutoCAD 2002还有许多其他在Win7 x64下表现奇葩的地方,这几天打算再写一篇描述一下
2012年10月20日星期六
如何在Word中快速地敲公式
本文主讲公式,其他排版信息可以戳这里→ http://zhi.hu/Jseg
这篇文最早发在知乎上,后来被我发在了renren。放在这里只是为了存档。
http://www.zhihu.com/question/20541531/answer/15430126
word的公式模式支持大多数LaTeX的数学模式写法。
word使用 Alt+= 插入一个新公式。
(为了方便说明,下面使用【空格】代指按一下键盘的空格键)
(可能看不清,在【】的前后都没有空格符号)
在公式模式下使用【空格】来完成对一段记号的确认。例如 \alpha【空格】 即可输入一个alpha字母
不过,在某些时候当你按下=或者*这种运算符时,word会默认在这些符号前插入一个【空格】效果,你可以直接按ctrl+z取消这个【空格】
和LaTeX公式的一个显著区别是,分数线不使用frac{}{}了,而是a/b【空格】的形式来输入,我觉得这比LaTeX要舒服。
另一个显著区别是,TeX使用{}作为定界符,而word一般使用()或者空格,这可能会让你有意外的结果……
下面来举几个例子吧~(在word2010中测试通过)
是的,这个例子中【空格】意外地少,因为在大多时候word自动补完了这个【空格】功能。此外C_(pI)被转化为下标时,两个用作定界的()也自动消失了
这里主要是想描述下大括号和并联的公式【shift+enter】可以插入一个空符在当前位置之下。此外\Delta和\delta是不同的符号,分别对应大小写。
实际操作时你就会发现,最后这个【空格】操作会使左边这个记号变成右边这样。当你按【空格】时,word会自动调整()的大小。
呃一时再想不起有趣的公式了……
谁有想打的公式可以在下面回复我,我来试试看word能否做到~
PS:word的公式自动编号我一直很头疼,不知谁有好办法实现没……
这篇文最早发在知乎上,后来被我发在了renren。放在这里只是为了存档。
http://www.zhihu.com/question/20541531/answer/15430126
word的公式模式支持大多数LaTeX的数学模式写法。
word使用 Alt+= 插入一个新公式。
(为了方便说明,下面使用【空格】代指按一下键盘的空格键)
(可能看不清,在【】的前后都没有空格符号)
在公式模式下使用【空格】来完成对一段记号的确认。例如 \alpha【空格】 即可输入一个alpha字母
不过,在某些时候当你按下=或者*这种运算符时,word会默认在这些符号前插入一个【空格】效果,你可以直接按ctrl+z取消这个【空格】
和LaTeX公式的一个显著区别是,分数线不使用frac{}{}了,而是a/b【空格】的形式来输入,我觉得这比LaTeX要舒服。
另一个显著区别是,TeX使用{}作为定界符,而word一般使用()或者空格,这可能会让你有意外的结果……
下面来举几个例子吧~(在word2010中测试通过)
是的,这个例子中【空格】意外地少,因为在大多时候word自动补完了这个【空格】功能。此外C_(pI)被转化为下标时,两个用作定界的()也自动消失了
这里主要是想描述下大括号和并联的公式【shift+enter】可以插入一个空符在当前位置之下。此外\Delta和\delta是不同的符号,分别对应大小写。
实际操作时你就会发现,最后这个【空格】操作会使左边这个记号变成右边这样。当你按【空格】时,word会自动调整()的大小。
呃一时再想不起有趣的公式了……
谁有想打的公式可以在下面回复我,我来试试看word能否做到~
PS:word的公式自动编号我一直很头疼,不知谁有好办法实现没……
2012年3月6日星期二
在firefox中添加自定义的协议链接方式
在firefox的“设置- 应用程序”中可以管理已有的各种协议及其打开方式,但无法自定义一个新的协议。
在打开一个未知的协议时,firefox会弹个框,询问你是否调用某个程序打开,你可以选择某个程序然后勾上以后不再询问。这时就添加了一个新的协议到“应用程序”列表里了。
但仅当这个协议是“未知”的时,firefox才会弹这个框。如果你的系统已经描述了这种协议如何打开,firefox就不会再询问你了。
前几天重做了个新的firefox配置文件,结果发现在点击itunes链接时,没有询问,直接启动了itunes。(itunes的链接开头是 itms://)
实际上正是因为windows里的itms协议已经关联了itunes的关系。
不过我的习惯是不默认打开itunes的协议,因为itunes启动太慢了……不小心误点会卡很久……
同样的,他也不在“选项-应用程序”选项卡里显示itms协议。
本来我的想法是,在“应用程序”选项卡里新建个itms协议,把打开方式选成“总是询问”就行了……结果firefox它居然不能在这里直接新建内容类型…………
在about:config里翻了一会mailto协议的描述,找到了个解决方法
在about:config里新建下面两个bool值
network.protocol-handler.external.itms 值为 true
network.protocol-handler.warn-external.itms 值为 true
搞定》《
-----------------
在我之前的那个配置文件里,是能在“应用程序”里找到itms协议的,因为我第一次点击这个协议的时候还没装itunes……
PS: 使用这个方法新建的协议,在“应用程序”里看不到。
在打开一个未知的协议时,firefox会弹个框,询问你是否调用某个程序打开,你可以选择某个程序然后勾上以后不再询问。这时就添加了一个新的协议到“应用程序”列表里了。
但仅当这个协议是“未知”的时,firefox才会弹这个框。如果你的系统已经描述了这种协议如何打开,firefox就不会再询问你了。
前几天重做了个新的firefox配置文件,结果发现在点击itunes链接时,没有询问,直接启动了itunes。(itunes的链接开头是 itms://)
实际上正是因为windows里的itms协议已经关联了itunes的关系。
不过我的习惯是不默认打开itunes的协议,因为itunes启动太慢了……不小心误点会卡很久……
同样的,他也不在“选项-应用程序”选项卡里显示itms协议。
本来我的想法是,在“应用程序”选项卡里新建个itms协议,把打开方式选成“总是询问”就行了……结果firefox它居然不能在这里直接新建内容类型…………
在about:config里翻了一会mailto协议的描述,找到了个解决方法
在about:config里新建下面两个bool值
network.protocol-handler.external.itms 值为 true
network.protocol-handler.warn-external.itms 值为 true
搞定》《
-----------------
在我之前的那个配置文件里,是能在“应用程序”里找到itms协议的,因为我第一次点击这个协议的时候还没装itunes……
PS: 使用这个方法新建的协议,在“应用程序”里看不到。
订阅:
博文 (Atom)