TeX Live 2009 的 LaTeX 中文支持

最近刚发布的 [TeX Live 2009](http://www.tug.org/texlive/) 是对中文支持有较大改进的一个版本,这里简单介绍一下。

首先,一如 2007, 2008 版本,TeX Live 2009 有中文版本的[安装使用指南](http://www.tug.org/texlive/doc/texlive-zh-cn/texlive-zh-cn.pdf),强烈建议在提问前把相关章节好好看看,这份指南主要叙述的是和中文无关的一些通用的问题。

然后 TeX Live 2009 的中文支持主要分为两部分,基于 XeTeX 的,和基于传统 CJK 宏包的。(我这里只讨论 LaTeX 的,如果你希望尝试 ConTeXt 和 luatex,可以参考 Li Yanrui 的 [blog](http://liyanrui.is-programmer.com/),他有很详细的介绍。)

#### 基于 XeTeX 的方案

这是我们推荐的方案,又可分为高层与低层两种,分别适用于不同需求的用户。

首先,安装所需的宏包:

sudo tlmgr install xecjk ctex

高层的方案是使用 ctex 宏包自带的文档类,例如原来用 article 文档类的就改用 ctexart 文档类,原来用 book 文档类的就改用 ctexbook 文档类,这样绝大部分你会遇到的中文问题,比如字体设置、hyperref 的调用、章节标题的设置等等,都自动为你解决了。详情可以看 ctex 宏包的[文档](http://tug.ctan.org/tex-archive/language/chinese/ctex/doc/ctex.pdf)。下面是一个小例子:

\documentclass{ctexart}
\begin{document}
你好,TeX Live 2009!
\end{document}

默认情况 (winfonts) 下,你需要宋体 (SimSun)、仿宋 (simfang)、黑体 (simhei)、楷体 (simkai)、隶书 (LiSu)、幼圆 (YouYuan) 这六套 Windows 字体,如果你的字体不全,可以编辑 `ctex-xecjk-winfonts.def` 文件 (用 `kpsewhich` 来找) 来修改设置,也可以选择 Adobe Reader 等软件所带的 Adobe Song Std, Adobe Heiti Std, Adobe Kaiti Std, Adobe Fangsong Std 四款字体,这时需要给 ctexart 加上 `[adobefonts]` 选项。又或者,你可以不用这些预置的字体,使用 `[nofonts]` 选项,然后参考 `ctex-xecjk-winfonts.def` 文件,自己定义对应各个 CJK 字体族的字体。

低层的方案则是用原来你自己的宏包,结合 xeCJK 宏包来配置字体,下面是一个小例子:

\documentclass{article}
\usepackage{xeCJK}
\setCJKmainfont{SimSun}
\begin{document}
你好,TeX Live 2009!
\end{document}

当然,你得有 SimSun 这个字体。

不管选用高层的还是低层的,都可以直接用 `xelatex` 命令直接编译你的文档。

#### 传统 CJK 方案

传统 CJK 方案主要是为了方便使用以前的文档存在的。也分为两种,高层方案也是使用 ctex 宏包,低层方案和原来的文档一样,直接用 CJK 宏包。

使用 ctex 宏包的例子和前面用 ctexart 的那个完全一样:

\documentclass{ctexart}
\begin{document}
你好,TeX Live 2009!
\end{document}

不过需要注意的是,你还得安装 `zhmetrics` 宏包。另外,如果文档保存的编码是 GBK,必须添加 `[GBK]` 选项,否则用 UTF-8 编码的也建议用 `[UTF8]` 选项。

可以看出,用高层方案最大的好处是文档代码可以最大限度地不修改就能换用不同的 TeX 引擎。

低层方案与原来的做法的区别是,需要载入 zhwinfonts,使用 zhwinfonts 定义的字体,而不是原来自己去生成字体的映射文件,这样要简便很多:

\documentclass{article}
\usepackage{CJK}
\input zhwinfonts
\begin{document}
\begin{CJK}{GBK}{zhsong}
你好,TeX Live 2009!
\end{CJK}
\end{document}

注意,这里用了 `zhsong` 这个字体族而不是 `song`,为了避免和 CJK 宏包原来定义的冲突,我们定义的所有字体族都带 `zh` 前缀。

对于上述这两种情况,你都可以使用 `latex` 编译,用 `dvipdfmx` 生成 pdf。

除了上述的 `zhmetrics`, `ctex`, `xeCJK` 宏包以外,我们还在 CTAN/TeX Live 中提交了 `zhspacing`, `CJKpunct`, `zh-luatex` 等宏包,`ctex-faq`, lshort 中文翻译等文档,以上工作都需要感谢参与维护 [ctex-kit](http://code.google.com/p/ctex-kit) 的全体开发者,为 [ctex-doc](http://code.google.com/p/ctex-doc) 贡献内容的全体作者,也欢迎你参加到我们的工作中来,帮助进一步改进 TeX 的中文支持。

Author: Jiang Jiang

A software engineer from China, working on some OS for a fruit company. Interested in typography and science fiction.

5 thoughts on “TeX Live 2009 的 LaTeX 中文支持”

  1. 很好的文章啊,支持。
    传统CJK低层方案的那个代码,似乎要用 \begin{CJK}{GBK}{zhsong} 这样的来代替 \begin{CJK}{zhsong} 才能得到正确的中文

Leave a Reply

Your email address will not be published. Required fields are marked *