最近帮朋友测试一个中文LaTex模版(上海交大硕士论文)的时候出现了一些中文字体的问题,总结如下。
首先是字体库的下载。由于Mac自带的中文字体并不完整,需要自己下载。在下面的第一个链接中有Adobe的四套字体和隶书,幼圆,这样就有了6套完整的中文字体。第二个链接只包括Adobe的四套字体,另外两个需要自己再到其他地方下载。
http://tinker-bot.googlecode.com/files/cfonts.tar.gz
http://ishare.iask.sina.com.cn/f/15105086.html
关于字体的安装,有以下几种方法:
- 在Mac的应用程序中选择“字体册”,点击添加即可,这样会把几种字体保存到用户的字体目录下,具体的目录是:/Users/***/Library/Fonts/
- 手动将字体文件拷贝到字体目录下,有几个选择(还有一些其他的搜索目录,这里就不一一列出了):
- /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/