Linux下Texlive的ctex包中文字体问题

不得不先赞一下现在texlive在linux上的安装已经非常方便了,刚更新2012不久
发现在2011就中一直困扰的ctex包中文字体问题还是没有解决,只好自己动手了

错误信息如下:
[shell]
Invalid fontname `[SIMKAI.TTF]/ICU’, contains ‘[‘

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! fontspec error: “font-not-found”
!
! The font “[SIMKAI.TTF]” cannot be found.
!
! See the fontspec documentation for further information.
!
! For immediate help type H <return>.
!………………………………………..
[/shell]

错误说的很清楚,字体名错误,字体找不到

解决方法如下:
修改ctex-xecjk-winfonts.def
Texlive 2012下的相对路径为 /texmf-dist/tex/latex/ctex/fontset/ctex-xecjk-winfonts.def
如果是默认安装位置,完整路径应为 /usr/local/texlive/2012/texmf-dist/tex/latex/ctex/fontset/ctex-xecjk-winfonts.def

原始文件如下:
[tex]
% ctex-xecjk-winfonts.def: Windows 的 xeCJK 字体设置,默认为六种中易字体
% vim:ft=tex

\setCJKmainfont[BoldFont={SimHei},ItalicFont={[SIMKAI.TTF]}]
{SimSun}
\setCJKsansfont{SimHei}
\setCJKmonofont{[SIMFANG.TTF]}

\setCJKfamilyfont{zhsong}{SimSun}
\setCJKfamilyfont{zhhei}{SimHei}
\setCJKfamilyfont{zhkai}{[SIMKAI.TTF]}
\setCJKfamilyfont{zhfs}{[SIMFANG.TTF]}
% \setCJKfamilyfont{zhli}{LiSu}
% \setCJKfamilyfont{zhyou}{YouYuan}

\newcommand*{\songti}{\CJKfamily{zhsong}} % 宋体
\newcommand*{\heiti}{\CJKfamily{zhhei}} % 黑体
\newcommand*{\kaishu}{\CJKfamily{zhkai}} % 楷书
\newcommand*{\fangsong}{\CJKfamily{zhfs}} % 仿宋
% \newcommand*{\lishu}{\CJKfamily{zhli}} % 隶书
% \newcommand*{\youyuan}{\CJKfamily{zhyou}} % 幼圆

\endinput
[/tex]

其中带中括号的字体名都是需要修改的,这时需运行
[shell]
fc-list :lang=zh-cn
[/shell]
来查看系统中的中文字体,记下楷体仿宋对应的名称,即显示信息中第一个英文
在我的系统中楷体是 KaiTi,仿宋是 FangSong
不过会因为安装的字体版本不同而有所差异

接下来只要将对应的字体修改即可,即
把[SIMKAI.TTF]修改为KaiTi
把[SIMFANG.TTF]修改为FangSong
需要注意不止一处

vim下的替换命令
[shell]
:%s/\[SIMKAI.TTF\]/KaiTi/g
:%s/\[SIMFANG.TTF\]/FangSong/g
[/shell]

其他一些废话:
如果自己安装过ctex包(可能安装在了texmf-local目录下),一定要删去
另一个解决方案是使用Adobe的字体,调用ctex包时增加adobefonts参数即可

关于ctex包这个错误的原因开发者在这里已经说的很清楚,也就不再赘述。
虽然作者不推荐修改,但是确实没有找到更方便的解决办法。欢迎讨论交流。

8 thoughts on “Linux下Texlive的ctex包中文字体问题”

    1. @northcamel 插件名字是 Crayon Syntax Highlighter
      很高兴我的文字能对你有帮助

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.