Technical Blog‎ > ‎

texlive 中文字体配置

posted Sep 21, 2013, 11:16 PM by Jingshan Du   [ updated Nov 6, 2013, 1:21 AM ]
【This post is for Chinese TeX users.】

texlive 的中文配置问题可以在网上搜到许多贴子,但是大部分只讨论了XeCJK方式,像我这种一直用CJK+LaTeX的就遇到了问题,最后翻 google code 上 ctex 的wiki才找到解决方案……

ctex两种工作模式
实际上ctex包提供了很多种模式,不过像CCT这种老古董应该没有什么人用了吧。(国内个别学报除外……)目前主流的两种:CJK+LaTeX/pdfLaTex 以及 XeCJK + XeTex。据说后者是未来发展方向……

中文字体问题
在Windows下大家安装ctex中文套装(www.ctex.org)时,自动会把中文字体给配置好。但是要记得,我们常用的宋体啊,黑体啊这些字体,都是有版权,非自由的。在Linux下自然不可能在发行版的repo里找到。但是购买了Windows的同学相应地也已经获得了这些字体的使用权,所以可以把它们copy进Linux里使用。

ctex默认使用以下六种中文字体(中易字体):宋体,黑体,楷体,仿宋,隶书,幼圆。所以进入Windows中把C:/Windows/fonts里的simsong simhei之类的ttf字体文件统统拷贝出来,安装进Linux中。如果只是给当前用户使用,一般Linux发行版也会自带字体管理器,双击字体打开,install即可。如果要安装成全局字体,把它们统统copy到/usr/share/下新建的文件夹(如/usr/share/MSfonts),chmod 664该文件夹,然后进入该文件夹,分别执行:mkfontscalemkfontdirfc-cache -fv 即可。别忘了root权限哦。

安装好以后,用fc-list :lang=zh-cn命令可以罗列当前安装的所有中文字体,如果出现了新安装的字体就大功告成了。

打补丁(1 - XeCJK方式)
如果此时用XeCJK方式编译中文文档提示找不到某些字体,可能是默认的XeCJK字体定义和文件名对不上号。据开发者解释(在ctex论坛里有个帖子的回复里,忘记在哪儿了……),这是因为WinXP和新版本Windows中有几个字体的字体名发生了变化(例如,用Windows+Office的同学可能有印象,仿宋字体从“仿宋_GB2312”变成了“仿宋”),但字体文件名未变。为了照顾Windows用户,在字体定义文件中对这几个字体采用了文件名定义而非字体名。但是这有可能造成Linux下找不到字体,原因是文件名大小写可能对不上号,而Linux文件名是大小写敏感的。

解决方法 1:把字体文件名改成全小写(例如simsong.ttf)

解决方法 2:找到/usr/share/texlive/textmf-dist/tex/latex/ctex/fontset/ctex-xecjk-winfonts.def,把其中用文件名定义的部分统统改成你在fc-list中看到的字体名。例如,把
\setCJKfamilyfont{zhkai}{[simkai.ttf]}
改成
\setCJKfamilyfont{zhkai}{SimKai}
(注意)带方括号表示用文件名定义,否则表示用字体名定义。

打补丁(2 - CJK+LaTeX方式)
查看/usr/share/texlive/下有没有 texmf.cnf文件,没有的话新建一个。加入如下语句:
OSFONTDIR = ~/.local/share/fonts//;/usr/share/fonts//;/usr/local/share/fonts//
注意,因为fedora下默认把用户自定义字体安装在~/.local/share/fonts中,所以如上设置。如果你安装在其他位置,就填入相应的文件夹名。
猜测要么是texlive默认不找主文件夹下的字体,要么是因为fedora下安装位置和其他发行版不一样……
Comments