[转]在Mac OS X上使用中文Latex

在 MacOS X 上配置中文 LaTeX 环境
阅读此文档之前,我假设你已经比较了解如何使用 MacOS X 下的终端,并了解一些基本的 bash 命令,比如 mv, ls, cp, cd 等。如果你还不太了解,请搜索相应的文档。

在 MacOS X 上有多种 TeX/LaTeX 的实现程序,比如 teTeX (可以通过 Darwinports、Fink、i- Installer 或者 Gentoo MacOS 来安装)、CMacTeX、FasTeX、OzTeX 等,另外还有各种丰富的工具可供选择,你可 以到 MacOS X TeX/LaTeX Web Site 或者 TeX on MacOS X 上去找到它们。如果你只用 TeX/LaTeX  (后面用 LaTeX 来代替)来写英文文档,你安装完之后即可以进行使用了。

目前为止,LaTeX 在处理非罗马字符(包括斯拉夫字符、阿拉伯字母、印地文等)方面还很欠缺,尤其是 CJK 字符(即 Chinese,  Japanese, Korean 的缩写,通常称为远东字符集),它们占了 16 位 Unicode 字符的 60%,巨大数量的字符导致原先  8 位的 TeX 系统无法满意地处理它们。目前 TeX 世界里有三种方法来处理 CJK 字符:
其一,称之为 subfont scheme,将 CJK 字符映射到 256 个或者更少的字符上,然后可以使用原先 8 位的 TeX 系统对其进行 处理。许多包都是基于这种方式来处理 CJK 字符的,比如 CJK-LaTeX (Werner Lemberg,在 CTAN 中的位置 —  language/chinese/CJK/)、HLaTeX (Koaunghi Un,在 CTAN 中的位置 —  language/korean/HLaTeX)和 ConTeXt 中的中文模块(Hans Hagen,在 CTAN 中的位置 —  macros/context)。
其二,改写 TeX 系统,使之支持本地字符集。在中国大陆,比较流行的是 CCT (中国科学院数学与系统科学研究院,张林波);在台湾,能够处理  big5 编码的有 PUTeX (台湾静宜大学资管系,蔡奇伟)、 ChiTeX (台湾中央大学数学系,陈弘毅)等。
其三,Omega,TeX 的 16 位 Unicode 扩展,其内部处理的字符默认为 16 位的 Unicode 。目前, Omega 还处于开发阶段。

在中国大陆,比较流行的是 CCT 和 CJK-LaTeX,其中 CTeX 网站上提供的 CTeX 套件大大方便了大家使用 LaTeX 来处理中 文。但遗憾的是,CCT 只支持 Windows 和 Linux 平台,其它改写后可支持中文的 TeX 系统也都不支持 MacOS X 。目前,在  OS X 上只有使用 CJK-LaTeX 来处理中文了(就我所知,如果谁知道有其它的方法,比如移植后的 Mac CCT 系统之类的,希望能够告 诉我: Exaos.Lee@gmail.com )。本文简单谈谈我在 MacOS X 上配置 CJK-LaTeX 的一点经验,希望对同好有所帮 助。(此文档的内容稍做修改,也应该适用于 Linux/FreeBSD 等平台。)

测试平台: MacOS 10.3 (Panther) , Fink-CVS, teTeX 2.0.2, CJK 4.5.2

一、 TeX/LaTeX 系统的安装

在 MacOS X 下有多种方式可以安装使用 TeX/LaTeX,也有多种 TeX 系统可用,我使用的是 teTeX,也推荐你使用 teTeX, 因为这可能是在 Unix 平台上使用最广泛的 TeX 系统了,资源也相对丰富很多。你可以通过 Darwinports, Fink, i- Installer 或者 Gentoo MacOS 等各种方式安装 teTeX 系统,这里只简单谈谈使用 Fink 和  Gentoo MacOS 来安装 teTeX ,其余的方法请参见相应的包管理工具的使用说明。

1. 使用 Fink-teTeX

首先,到 Fink 的主页去下载最新的 Fink 发行版本,按照说明安装好 Fink 系统;如果你已经安装好了 Fink ,可以用命令 fink selfupdate 及 fink update-all 来更新你的系统。照说明进行即可,不赘述。

如果你想自己从头编译,使用命令:

————–
fink install tetex
————–

如果想安装已经编译好的版本,使用命令:

————–
sudo apt-get install tetex
————–

2. 使用 Gentoo MacOS

首先,到 Gentoo MacOS 的主页下载最新的 Gentoo MacOS 的包,按照说明安装好 Gentoo MacOS 系统。然后,使用命令 emerge sync 更新你的 Gentoo 系统。使用如下命令安装 teTeX :

————–
emerge tetex
————–

(我希望自己能有时间写写 Gentoo MacOS 的使用说明。:-) )

注意:我没有使用 Gentoo MacOS 的 teTeX,因为我已经安装了 Fink-teTeX ,如后叙述也都是在 Fink-teTeX 上 进行的。如果你使用的是 Gentoo-teTeX,比如 Gentoo-teTeX 的安装目录在 /usr/share/texmf ,而 Fink -teTeX 在 /sw/share/texmf 下,后文请自己作相应的修改。

建议你安装 teTeX 的时候,同时安装如下软件包:
1. Ghostscript 8
2. FreeType 和 FreeType 2
3. wmf and iconv conversion support
4. ImageMagick

二、安装 CJK 包

如果你已经对 TDS (the TeX Directory Structure) 比较了解,可以略去此段。

teTeX 以树状目录来组织字体、宏、文档和其它的文件(称之为主 texmf 树),这个树状目录结构称之为 TDS,这是 TUG  (TeX User Group) 的 TWG (Technical Working Group) 的开发标准。TeX 包的安装一般放在相应的  TDS 目录下即可。TDS 的根目录可以有多个,这由变量 $TEXMF 来表示, TEXMF 是 ”TeX and METAFONT” 的缩 写。打开一个终端,使用命令 kpsewhich -expand-var=’$TEXMF’ ,就可以看到你的 TeX 系统中有哪些 texmf 目 录树是可用的。比如在我的系统中是这样的:

———–
/sw/share/texmf/doc/tetex>$ kpsewhich -expand-var=’$TEXMF’
{/Users/exaos/Library/texmf,!!/sw/share/texmf-local,!!/sw/var/lib/texmf,!!/sw/share/texmf}
———–

Fink-teTeX 系统的主 TDS 目录在 /sw/share/texmf 下(如无特别说明,后面的 $TEXMFMAIN 即指代此目录,而  $TEXMF 指代任意一个 texmf 树)。由于 texmf 的树目录可能非常大,在每个 texmf 的主目录下都有一个文件 ls-R,这是 一个文件名数据库,用来加速文件的搜索。你可以用命令 sudo mktexlsr 或者 sudo texhash 来更新各个 texmf 树下的  ls-R 文件名数据库。更详细内容参见 TDS 的说明:”A Directory Structure for TeX Files”,即文件 $ TEXMFMAIN/doc/help/tds.dvi (对于安装好的 teTeX 系统,你可以用命令 dvipdf tds.dvi 来生成  pdf 文档,�
缓笫褂妹� open tds.pdf 来打开阅读)。

LaTeX 宏包的安装很简单,一般先将宏包放到 $TEXMF/tex/latex/ 目录下,然后用命令 sudo texhash 或 sudo mktexlsr 更新所有的 texmf 树下的 ls-R 即可。

在 $TEXMFMAIN/web2c/texmf.cnf 中有这样的几行:

———–

HOMETEXMF = $HOME/Library/texmf

TEXMF = {$HOMETEXMF,!!$TEXMFLOCAL,!!$VARTEXMF,!!TEXMFMAIN}
———–

这意味着你的用户目录下的 Library/texmf 就是一个 TDS 的结构,不需要修改系统的 TDS,只需要将你需要的 TeX 包安装在 Library/texmf 下即可。

创建你的本地 texmf 树目录 $HOMETEXMF,即 $HOME/Library/texmf 。后面所有的配置将根据此目录进行,如果你更换目录,请自行做相应的修改。同样,如果后面提到的目录不存在,请自行创建相应的目录。

小技巧:在终端下创建带有子目录结构的目录时,可以用命令 mkdirhier ,比如你需要创建目录 pdftex/config ,你不需要先创建  pdftex 然后进入此目录后再创建 config ,直接用命令 mkdirhier pdftex/config 即可。 mkdirhier  相当于 mkdir -p 。

到 CJK package for LaTeX 或者任何其它的地方去下载最新的 CJK-LaTeX 包,目前最新版本为 4.5.2 。CJK 的 安装很简单,解压后,将整个目录移到你的本地 TeX 目录树中,即 $HOMETEXMF/tex/latex ,然后更新 ls-R :  sudo texhash 。

这样,你已经安装好了 CJK-LaTeX ,但你还不能它来处理中文,因为你还需要相应的中文字体和字符映射表,否则 TeX 无法识别你文件中的中文字符。

三、安装相应的编码支持和字库

[1]. 处理使用 Unicode 编码的中文 LaTeX 文档

Pai H. Chou 在他的个人主页上提供了一份配置文档:How to make LaTeX(teTeX)  handle unicode and CJK in MacOS X 。这儿的说明即根据这份指南修改而来。在此向 Pai H. Chou 表示感 谢。

在你已经安装完 teTeX 和 CJK-LaTeX 之后,你需要按照如下的步骤配置你的 TeX 系统,使之能够处理 Unicode 的 CJK LaTeX 文档。

1. 安装 UCS 包

UCS 包使 LaTeX 文档支持 UTF-8 字符的处理。
a. 下载 UCS 包:http://www.unruh.de/DniQ/latex/unicode/unicode.tgz
b. 用命令 tar zxvf unicode.tgz 来解压这个文件包
c. 将解压后的 ucs 目录移动到 $HOMETEXMF/tex/latex 下
假如你下载的文档在 $HOME/Temp 下,你进入终端后,可以这样操作:

————
$ cd ~/Temp
$ tar zxvf unicode.tgz
$ mv ucs ~/Library/texmf/tex/latex
————

2. 安装 Unicode TrueType 字体(Cyberbit)

a. 下载 Cyberbit.ZIP 文件: ftp://ftp.netscape.com/pub/communicator/extras/fonts/windows/Cyberbit.ZIP
解压后,会产生相应的 .ttf 字体。将文件 Cyberbit.ttf 重新命名为 cyberbit.ttf (注意,是小写字体,因为 LaTeX 对大小写敏感)。

b. 安装 .tfm 和 .enc 文件
(i) 有两种方法得到这些文件
(i.1) 自己生成
(a). 下载 Unicode.sfd 文件: http://delloye.free.fr/Unicode.sfd
(b). 将 cyberbit.ttf 和 Unicode.sfd 放在同一个目录下,比如 ~/Temp
(c). 在终端下进入此目录,运行命令产生所需要文件:

————-
$ ttf2tfm cyberbit.ttf -w cyberbit@Unicode@
————-

(i.2) 如果你没有 ttf2tfm ,下载 Pai H. Chou 生成的.tfm 和 .enc 文件。
(ii) 将所有的 .tfm 文件移动到相应的位置。按照上面的规则,应该放在 $HOMETEXMF/fonts/tfm/bitstream/cyberbit/ 下。
(iii) 将所有的 .enc 文件移动到相应的位置。同上,应该放在 $HOMETEXMF/pdftex/enc/cyberbit/ 下。

c. 安装 cyberbit.map 文件
(i) 下载文件: http://delloye.free.fr/cyberbit.map
(ii) 将该文件移动到相应的位置。同上规则,应该放在 $HOMETEXMF/pdftex/config/ 下。

d. 安装 c70cyberbit.fd (可选择安装 .fdv 文件)
(i) 下载文件:http://delloye.free.fr/c70cyberbit.fd
如果你想坚排版文档,你需要文件 c70cyberbit.fdv 。不过,出了问题要自己负责,此文件是 Pai 由 c00bsmi.fdv 生成的。
(ii) 将文件移动到相应的位置。同上规则,应该放在 $HOMETEXMF/tex/misc/ 下。

e. 将字体 cyberbit.ttf 移动到相应的位置。同上规则,应该在 $HOMETEXMF/fonts/truetype 下。(如果字体放 到指定位置后,后面的测试不通过,可以检查一下你的 $TEXMFMAIN/web2c/texmf.cnf 文件,其中的 TTFONTS 变量应该指 向相应的路径。不过,一般不用担心,只是在出问题的时候再检查。)

3. 配置 pdfTeX,使它能够找到新字体

这时候,你的 $HOMETEXMF 下应该除了目录 tex/, pdftex/, fonts/ 之外,什么都没有。打开终端,进入 $HOMETEXMF/pdftex/config/ (如果没有此目录,创建一个)下:

————-
$ cd ~/Library/texmf/pdftex/config/
$ cp /sw/share/texmf/pdftex/config/pdftex.cfg .
$ echo ”map +cyberbit.map” >> pdftex.cfg
————-

然后,更新一下 texmf 树文件名数据库:

————-
$ sudo mktexlsr
————-

这样,你的 LaTeX 已经可以支持 Unicode 编码的中文文件了。

4. 测试

把下面一段文字拷贝到 test-CJK-ucs.tex 文件中(注意,一定要以 UTF-8 编码格式保存):

————————————————————————————–
\documentclass[a4,11pt]{article}
\usepackage[encapsulated]{CJK}
\usepackage{ucs}
\usepackage[utf8]{inputenc}
\newcommand{\cntext}[1]{\begin{CJK}{UTF8}{cyberbit}#1\end{CJK}}

\begin{document}
\cntext{在这儿输入的是 UTF-8 编码的中文字符,使用的是 cyberbit 字体。你可以任意修改。}
\end{document}
————————————————————————————–

然后使用命令 pdflatex test-CJK-ucs.tex ,将会生成 test-CJK-ucs.pdf 文件。试试吧。

[注意:2004年8月之前版本的 ucs 使用 \usepackage[utf8]{inputenc},之后应该改为 \usepackage[utf8x]{inputenc} 。]

5. 常见问题

问:我遇到了这样的错误信息——“

mktexpk: don’t know how to create bitmap font for cyberbit59.

”(或其它类似的信息),怎么办?
答:很可能是你的 $HOMETEXMF/pdftex/config/pdftex.cfg 文件没有修改正确,或者你的 cyberbit.map 文件没有放在指定的位置上。重新检查文件是都都在相应的位置并检查修改 pdftex.cfg 文件。

6. 最简单的安装办法

我已经将上述安装中所有需要的文件打成了一个包,你可以到这里下载:
http://exaos.spymac.net/archive/CJK-ucs-archive.tar.gz
然后按照上述的步骤一步步进行即可。

当然,最简单的安装办法是到这儿下载我已经配置好的 texmf 压缩包:
http://exaos.spymac.net/archive/texmf-CJK-ucs.tar.gz
解压后,将目录 texmf 移动到 ~/Library 下,然后在终端里执行命令 sudo texhash ,你就可以使用  Unicode Cyberbit 字体处理 UTF-8 编码的中文 LaTeX 文件了!简单吧?不过遗憾的是,只有一种字体  Cyberbit ,我没有找到其它的中文 UTF-8 字体。所以,我不得不配置了后面支持 GBK 编码的中文 LaTeX 系统,唯一的好处就是 字体花样多了许多。

[2]. 处理使用 GBK 编码的中文 LaTeX 文档

处理 GBK 编码的 LaTeX 文件,其实安装完 CJK 之后只差一步了,就是根据要使用的中文 TrueType 字体生成相应的 .tfm 和 .enc 文件了。这一步其实是出问题最多的地方。

1. 准备好 TrueType 中文字体

在 MacOS X 系统中有默认的简体中文字体。将 /Library/Fonts 目录下的这些中文字体文件链接(ln -s)到 $HOMETEXMF/fonts/truetype 目录下:

————————————
stsong.ttf     (华文宋体)
stfangso.ttf   (华文仿宋)
stkaiti.ttf    (华文楷体)
sthei.ttf      (华文黑体)
stzhongs.ttf   (华文中宋)
sthupo.ttf     (华文琥珀)
stliti.ttf     (华文隶书)
stxingka.ttf   (华文行楷)
stcaiyun.ttf   (华文彩云)
stxinwei.ttf   (华文新魏)
————————————

2. 准备生成 .tfm 和 .enc 文件

生成 .tfm 和 .enc 文件是配置中文 LaTeX 系统最繁的一步,也最容易出错。你可以使用 FreeType 提供的工具自己一步步来进 行,但其中的麻烦你自己去享受好了。很感谢 energy 和王垠,由他们开发和修改的程序 gbkfonts (见王垠的主页)大大方便了这一过程。

(1). 下载 gbkfonts 程序

你可以到王垠的主页上去下载 gbkfonts-linux 那个源码包,然后稍作修改,即可编译使用。你也可以到这儿下载我修改后可以直接在 Fink 下编译的源码包:
http://exaos.spymac.net/archive/gbkfonts-osx-0.3.tar.gz
解包后,按命令 make 即可进行编译。不过,该包中已经包含了一个可执行有 Mach-O 程序 gbkfonts,那是我编译好了的。你可以在自己的机器上试试能不能执行,如果不能,再自己编译。注意,你必须已经安装了 FreeType 程序。

(2). 用 gbkfonts 生成 .tfm 和 .enc 文件

a. 有了 gbkfonts ,后面的步骤就简单多了。比如我想把 stsong.ttf (华文宋体)对应为 song ,把 gbkfonts 拷贝到 $HOMETEXMF/ 下,运行命令

————————-
./gbkfonts /Library/Fonts/stsong.ttf song
————————-

则会在当前目录下自动生成各种 TeX 配置文件:

————————-
cid-x.map
cjk.map
dvipdfm/config/gbksong.map
dvips/chinese/gbksong/*.enc
fonts/[afm, tfm, type1]/chinese/gbksong/*
pdftex/config/gbksong.map
tex/latex/CJK/GB/c19song.df
pdftex.cfg
ttfonts.map
————————-

b. 把 cjk.map 移动到 $HOMETEXMF/dvips/config 下,然后在文件 $ HOMETEXMF/dvips/config/config.ps (如果没有这个文件,把 $ TEXMFMAIN/dvips/config/config.ps 拷贝过来)的末尾加上

————————-
p +cjk.map
————————-

c. 再在 $HOMETEXMF/pdftex/config/pdftex.cfg 的末尾加上

————————-
map +gbksong.map
————————-

d. 将 cid-x.map 移动到 dvipdfm/config/ 下。其余的文件,比如 pdftex.cfg, ttfonts.map 都可以删除了。

e. 执行 sudo texhash ,刷新一下 ls-R 数据,就可以在 CJK 中使用宋体字了。

注意,gbkfonts 生成的目录是 tex/latex/CJK/GB ,由于 TeX 是大小写敏感的,如果你的 CJK 安装在 $ TEXMF/tex/latex/cjk 下,不妨将其目录改为大写名称。(HFS+ 文件系统是大小写不敏感的,因此 cjk 和 CJK 是相同的, 但我还是有点不明白,为什么 TeX 还能够区别出来呢?)

如果你有许多字体,执行 gbkfonts 会费很长时间。那么,不妨把一批字体写在一个 bash 脚本中,比如 generate-confgs.sh :

————————-
$!/bin/sh

./gbkfonts fonts/truetype/stsong.ttf    song
./gbkfonts fonts/truetype/stkaiti.ttf   kai
./gbkfonts fonts/truetype/stfangso.ttf  fang
./gbkfonts fonts/truetype/stliti.ttf    li
./gbkfonts fonts/truetype/stzhongs.ttf  zhsong
./gbkfonts fonts/truetype/stxingka.ttf  xingkai
./gbkfonts fonts/truetype/stxinwei.ttf  xinwei
./gbkfonts fonts/truetype/stcaiyun.ttf  caiyun
./gbkfonts fonts/truetype/sthupo.ttf    hupo
./gbkfonts fonts/truetype/sthei.ttf     hei

# ./appendconf ~/Library/texmf

# sudo texhash
————————-

按一个命令 sh ./generate-configs.sh ,然后到外面慢慢地品上一杯咖啡,聊聊天,回来后差不多应该完成了。在  gbkfonts-osx-0.3.tar.gz 包里有一个 bash 脚本 appendconf 。执行完上面命令后,再命令  appendconf $HOME/Library/texmf ,对相应的配置文件进行修改。最后,再执行一个命令 sudo texhash (执 行了好多次喽,呵呵),你的中文 TeX 就配置好啦!

3. 测试

我把自己的测试文件打成了一个包:http://exaos.spymac.net/archive/CJK-samples.tar.gz
你下载解包后就可以测试啦。注意,如果你使用了不同的字体,自行修改即可。

4. 常见问题

如果你使用 simsun.ttf ,在执行 pdflatex 时会出现诸如找不到字体等问题,那是 simsun 的问题,不是你的。这时候,你先用 latex 产生 .dvi 文件,然后用 dvipdf 就可以生成 pdf 了。

[3]. 写给那些“懒人”

这一段是写给那些所谓的“懒人”的啦。你只要按照下面的步骤进行,基本上不会太大问题的:
1. 安装 Fink、teTeX、freetype
2. 下载
a. http://exaos.spymac.net/archive/texmf-CJK-ucs.tar.gz
b. http://exaos.spymac.net/archive/gbkfonts-osx-0.3.tar.gz
或者 http://exaos.spymac.net/archive/CJK-GBK-execs.tar.gz
c. http://exaos.spymac.net/archive/CJK-samples.tar.gz
3. 解压 texmf-CJK-ucs.tar.gz 后,将 texmf 目录移到 ~/Library/ 下,然后执行 sudo texhash 即完成 CJK-UCS 的配置。
4. 解压 gbkfonts-osx-0.3.tar.gz 或者 CJK-GBK-execs.tar.gz ,然后将可执行文件  appendconf, gbkfonts 拷贝到 ~/Library/texmf/ 下。如果你解压的是 CJK-GBK- execs.tar.gz ,其中还包括一个 bash 脚本 generate-GBK-fonts.sh ,你可以参照它修改执行后,即完成了  CJK-GBK 的配置。
5. 解压 CJK-samples.tar.gz 文件,然后,看看这些示例能不能编译成功。当然,如果你的字库和我的不同的话,自行修改哦。

四、其它的工具

[1]. 文档编辑器

1. Emacs + aucTeX

你可以使用 X11 下的 Emacs + aucTeX 来编辑中文 LaTeX,使用 fcitx 来输入中文。Linux 下的 fcitx 输入 法可以在 OS X 上安装,但无法与 Apple X11 一起使用。你可以安装 XDarwin 或者 Fink-XFree86 ,然后到渤麦堂去 下载 fcitx info 或者编译好的版本。
不过,我推荐使用 Carbon Emacs ,你可以到这里下载,它比 X11 Emacs 更方便。 Carbon Emacs 的中文配置可以参见我的 blog 09 月 30 日的 条目。
2. iTeXmac 和 TeXshop

虽然很好,但对中文编码的支持不是很好,很遗憾。如果你不使用中文也就无所谓了。
3. 其它的编码器

就看你的喜好了。

[2]. 拼写检查

1. Excalibur

作者: Rick Zaccone
主页: http://www.eg.bucknell.edu/~excalibr/excalibur.html

[3]. BibTeX 的处理工具

1. BibDesk

我比较喜欢它
主页: http://bibdesk.sf.net
2. JabRef

用 Java 写的跨平台的 BibTeX 工具
主页: http://jabref.sf.net