2013年11月23日星期六

LaTex中文字体库的添加


最近帮朋友测试一个中文LaTex模版(上海交大硕士论文)的时候出现了一些中文字体的问题,总结如下。

首先是字体库的下载。由于Mac自带的中文字体并不完整,需要自己下载。在下面的第一个链接中有Adobe的四套字体和隶书,幼圆,这样就有了6套完整的中文字体。第二个链接只包括Adobe的四套字体,另外两个需要自己再到其他地方下载。

http://tinker-bot.googlecode.com/files/cfonts.tar.gz

http://ishare.iask.sina.com.cn/f/15105086.html

关于字体的安装,有以下几种方法:

  1. 在Mac的应用程序中选择“字体册”,点击添加即可,这样会把几种字体保存到用户的字体目录下,具体的目录是:/Users/***/Library/Fonts/
  2. 手动将字体文件拷贝到字体目录下,有几个选择(还有一些其他的搜索目录,这里就不一一列出了):
    • /Library/Fonts/
    • /usr/share/fonts

建议把中文6种基础字体都放在系统默认的字体目录下,即采取第二种方法,不然的话如果采用Tex源文件采用下面的开头:

\documentclass{ctexart} % 采用Mac字体
\documentclass[adobefonts]{ctexart} % 采用Adobe字体

会得到类似这样的报错:

...Font \@tempfontb="Adobe Heiti Std/ICU" at 10.54pt not loadable: Metric (TFM) file or installed font not found....

具体原因不知,个人猜测这是因为Texlive不在系统默认字体文件夹外寻找基本字体。

下面的步骤是在Texlive中对中文字库进行更新。由于Texlive默认的中文字体并不在Mac系统中(如“SimSun”),现在安装的新字体名称(如“STSong”)和原来的并不匹配。所以需要手动更改Texlive中win和adobe字体的名称:

win字体:以管理者的身份修改这个文件

/usr/local/texlive/2011/texmf-dist/tex/latex/ctex/fontset/ctex-xecjk-winfonts.def

更新内容如下:

\setCJKmainfont[BoldFont={STHeiti},ItalicFont=STKaiti]
  {STSong}
\setCJKsansfont{STHeiti}
\setCJKmonofont{STFangsong}

\setCJKfamilyfont{zhsong}{STSong}
\setCJKfamilyfont{zhhei}{STHeiti}
\setCJKfamilyfont{zhkai}{STKaiti}
\setCJKfamilyfont{zhfs}{STFangsong}
\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

对于adobe字体:以管理者的身份修改这个文件:

/usr/local/texlive/2011/texmf-dist/tex/latex/ctex/fontset/ctex-xecjk-adobefonts.def

更新内容如下:

\setCJKmainfont[BoldFont=Adobe Heiti Std,ItalicFont=Adobe Kaiti Std]
  {Adobe Song Std}
\setCJKsansfont{Adobe Heiti Std}
\setCJKmonofont{Adobe Fangsong Std}

\setCJKfamilyfont{zhsong}{Adobe Song Std}
\setCJKfamilyfont{zhhei}{Adobe Heiti Std}
\setCJKfamilyfont{zhfs}{Adobe Fangsong Std}
\setCJKfamilyfont{zhkai}{Adobe Kaiti Std}
\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

由上面的代码可知,两套字体的隶书和幼圆是公用的,其他的四类基本字体各有不同。这样修改过系统便会寻找到对应的字体,不再报错了。

最后打开一个Terminal窗口,用下面的命令刷新一下字体库:

sudo  mkfontscale
sudo mkfontdir
sudo fc-cache -fsv

然后通过fc-list命令就可以检测系统中所有的字体了。如果上面的步骤都操作正确的话,新字体会显示在列表中。使用XeLaTex编译的时候,如果按照前一篇文章介绍的方法,只要调用字体的时候使用正确的名称即可。如果直接用“ctexart”文件类的话,可以参考下面的例子:

\documentclass[UTF8]{ctexart} % 采用Mac字体
%\documentclass[UTF8,adobefonts]{ctexart} % 采用Adobe字体

%以上两行分别测试华文字体和Adobe字体,请交替使用(月下独酌 注)

\title{\LaTeX 中文设置之高层方案}
\author{xiaoyong}
\date{\today}

\begin{document}
\maketitle

\begin{center}
  1. 字体示例:\\
  \begin{tabular}{c|c}
    \hline
    \textbf{\TeX 命令} & \textbf{效果}\\
    \hline
    \verb|{\songti 宋体}| & {\songti 宋体}\\
    \hline
    \verb|{\heiti 黑体}| & {\heiti 黑体}\\
    \hline
    \verb|{\fangsong 仿宋}| & {\fangsong 仿宋}\\
    \hline
    \verb|{\kaishu 楷书}| & {\kaishu 楷书}\\
    \hline
    \verb|{\lishu 隶书}| & {\lishu 隶书}\\
    \hline
    \verb|{\youyuan 幼圆}| & {\youyuan 幼圆}\\
    \hline
  \end{tabular}
\end{center}

\begin{center}
  2. 字号示例:\\
  {\zihao{0}初号}
  {\zihao{1}一号}
  {\zihao{2}二号}
  {\zihao{3}三号}
  {\zihao{4}四号}
  {\zihao{5}五号}
  {\zihao{6}六号}
  {\zihao{7}七号}
  {\zihao{8}八号}
\end{center}

\end{document}

以上所有例子都在Mac下测试成功,使用的界面TexShop Version 2.29 (2.29)。



Reference:

http://bbs.stuhome.net/thread-1306061-1.html
http://kqwd.blog.163.com/blog/static/4122344820117725633776/