Keywords: 中文字体设置; LaTeX; XeTeX; Chinese character; 楷体; 宋体; 仿宋; 隶书; 黑体; 幼圆; 行楷;

这里主要介绍两种方式来实现 TeX 中中文兼容。 第一种是 ctex (Chinese TeX); 第二种是使用 CJK 包。

1. ctex

ctex简单介绍:

  • ctex 宏包提供有3个 options (nofonts, adobefonts, and winfonts respectively), 默认使用的是winfonts 选项。
  • 如果使用 nofonts 选项, 则需要通过 CJK package 中文方案将 OS (in my case, Ubuntu) 自带的中文字体设置成中文默认字体。
  • 若使用 adobefonts 选项, 则需要操作系统中安装有 Adobe 公司的四个 OpenType 字体: Adobe宋体、 Adobe黑体、 Adobe仿宋、 Adobe楷体。你若不肯定 adobefonts 是安装,可以查看 fontset directory of the local path of ctex (in my case),
 /usr/share/texlive/texmf-dist/tex/latex/ctex/fontset/ctex-xecjk-adobefonts.dev 
  • 这里侧重讲 winfonts 的使用。 一般的, OS 中安装有中文 Windows OS 自带的四种 TureType 字体:宋体、黑体、仿宋体、楷体。而隶书和幼圆字体是被 disabled or deactivated。需要激活时直接在 ctex-xecjk-winfonts.def 中 uncomment 他们,
 %\setCJKfamilyfont{zhli}{LiSu}

%\setCJKfamilyfont{zhyou}{YouYuan}

%\newcommand*{\lishu}{\CJKfamily}{zhli}

%\newcommand*{\youyuan}{\CJKfamily}{zhyou} 
  • 但是这是基于一个前提的,就是你系统中安装有这些字体。请在terminal 中输入
 fc-lish :lang-zh-cn 

或者

 fc-lish :lang=zh-cn | grep Sim 

来查看是否有隶书、楷体、仿宋、宋体、黑体、幼圆 6个默认字体。

测试:

 xelatex example.tex 

编译一下example.tex,

\documentclass{ctexart}
\begin{document}
您好,\TeX!

ctex 宏包提供了三个字体选项: nofonts、adobefonts 和 winfonts,默认使用的是 winfonts。如果在 tex 源文件中没有使用其他选项修改字体配置, 则需要操作系统中安装有中文 Windows 操作系统自带的四种 TrueType 字体: 宋体(SimSun)、黑体(SimHei)、仿宋体(FangSong)、楷体(KaiTi)。 其余字体比如隶书(LiShu)、新宋体(NSimSun)、幼圆(YouYuan)、行楷(STXingkai)可以自行安装。

如果使用 adobefonts 选项,则需要操作系统中安装有 Adobe 公司的四款 OpenType 字体:Adobe 宋体、Adobe 黑体、Adobe 仿宋、Adobe 楷体。

此处我们打算使用 nofonts 选项,然后通过 CJK 中文方案将 ubuntu自带的中文字体设置成中文的默认字体。

\end{document} 

注意,这里我们使用了 ctex 自带的 documentclass, ctexart (其他格式, ctexbeamer 等请自行阅读 ctex 的 documentation。)

如果得到 error, “font-not-found”, 进入下面的设置部分。

设置:

让系统可以使用 texlive 的字体,请

 cd /etc/fonts/conf.d

sudo ln -s /usr/share/texlive/texmf-dist/tex/latex/ctex/fontset/ctex-xecjk-winfonts 09-texlive.conf 

然后将下载的字体(链接 or my google drive if possible)解压后,拷贝到新建 winfonts 目录下,然后修改权限和刷新字体库

 cd /usr/share/fonts

sudo mkdir winfonts && cd winfonts

sudo chmod 644 *

sudo mkfontscale

sudo mkfontdir

sudo fc-cache -fsv 

打开 ctex-xecjk-winfonts.def 文件 (在路径 /usr/share/texlive/texmf-dist/tex/latex/ctex /fontset/ 下)

 vim /usr/share/texlive/texmf-dist/tex/latex/ctex/fontset/ctex-xecjk-winfonts.def 

内容如下:

% 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 

如上所述, 先 uncomment 你想要的字体。最后一步,将此文件中的字体名匹配成你电脑有的文字名, 用

 fc-list :lang=zh-cn | grep Sim 

来查看字体名,输入大致如下:

$PATH: LiSu, 隶书: style=Regular
$PATH: KaiTi, 楷体: style=Regular, Normal
$PATH: FangSong, 仿宋: style=Regular, Normal
$PATH: SimSun, 宋体: style=Regular
$PATH: SimHei, 黑体: style=Regular, Normal
$PATH: YouYuan, 幼圆: style=Regular 

所以, in my case, 修改 SIMKAI.TTF 为 KaiTi; 修改SIMFANG.TTF 为 FangSong; 如果需要行楷字体,也可以增加相应的命令行:


% ctex-xecjk-winfonts.def: Windows 的 xeCJK 字体设置,默认为六种中易字体
% vim:ft=tex

\setCJKmainfont[BoldFont={SimHei},ItalicFont={KaiTi}]
 {SimSun}
\setCJKsansfont{SimHei}
\setCJKmonofont{FangSong}

\setCJKfamilyfont{zhsong}{SimSun}
\setCJKfamilyfont{zhhei}{SimHei}
\setCJKfamilyfont{zhkai}{KaiTi}
\setCJKfamilyfont{zhfs}{FangSong}
\setCJKfamilyfont{zhli}{LiSu}
\setCJKfamilyfont{zhyou}{YouYuan}
\setCJKfamilyfont{zhxkai}{STXingkai}

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

重新执行编译后

 xelatex example.tex 

,应该可以看到通过的pdf文件。

 

2. CJK 包

ctex 主要是一个以中文为导向的宏包。比如, 在你写书的时候,如果使用了 ctexbook 的 documentclass, 在用 xelatex 编译后, 『chapter 1』 会主动被翻译为『第一章』。 除此之外,一些字体, 间距, 对齐,字号等也会有新的对应。

CJK 包和 ctex 的主要区别就是, 格式完全不改变,变动的只是你需要显示中文的地方。 同时, 也需要你自己指定字体类型, 比如,什么时候用宋体,什么时候用楷体。

\documentclass{article}
\usepackage{xeCJK} % 记得加载 xeCJK 包

\setCJKmainfont{SimSun}   % 宋体
\setCJKsansfont{KaiTi}    % 楷体
\setCJKmonofont{FangSong} % 仿宋体

\begin{document}
您好,\TeX!
\end{document} 

注意, 这里的 documentclass 是 article 而不是 ctex 中的 ctexart。 编译的方式和上面一样。

 

所以, 我的个人建议是: 如果你要用 TeX 写一本中文书, 直接使用 ctex 宏包会比较便捷; 如果你还是用 TeX 写外文文章,只是有些地方要使用中文做批注或者引用, 那么CJK 包应该足够了。

 

 

 

Advertisements

4 thoughts on “如何在Latex中输入中文

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s