Wednesday, September 20, 2006

Latex and Unicode

终于将Latex + CJK + Unicode搞定,在Dapper下安装latex和CJK后(简单的安装可以参考http://my.opera.com/yonsan/blog/show.dml/96883),你有可能发现竟然无法处理如下文本:
\documentclass{article}
\usepackage{CJK}
\begin{CJK}{GBK}{song}
\begin{document}
我想输出中文!
\end{CJK}
\end{document}

郁闷了吧,你按照安装指南一步一步安装下来却还是不能处理中文,怪?不急,你需要检查一下你的文件的编码,因为Latex缺省是不能理UTF-8编码的,可以检查一下你的文件编码(用GEDIT就可以看了),如果是UTF-8的,则需要将其转换了GBK或GB,这样你再执行latex x.tex就可得到你想要的x.dvi;但是如果你的native编码是utf8的话,那么你将非常不方便,怎么办呢?在tex中是通过宏来扩展功能的,例如CJK就是用来处理亚系双字节语言的宏包,tex和emacs一样也是暂时独立支持utf8的(不过有一个好消息,听说emacs马上来出utf8版本了),在tex中有一个叫做ucs(http://www.unruh.de/DniQ/latex/unicode/)的包,就是用来支持utf-8编码的,你可以按照它提供的线路去安装这个包,在安装的过程中会用到freetype(www.freetype.org)提供的FreeType字体及其工具,你可能会无法找到ttf2tfm这一个工具,原因是它是freetype1中的字体工具,在Dapper下是无法找到的,我几乎找遍了相关网站想要找到它的源代码,但是没有办法找到,最后在http://packages.debian.org上找到了,在debain上查找的时候记得要找freetype1这个关键字才能找到。好了,你终于可以安装好utf8支持了(其中还有许多东东,自己慢慢搞,搞多了,tex的工作原理就出来了)。同时你也需要改一下你的源文件了,如下:

\documentclass{article}
\usepackage{CJK}
\begin{CJK}{UTF8}{song}
\begin{document}
我想输出中文!
\end{CJK}
\end{document}

记得将文件保存成utf8的格式,源文件只改了一个地方即引用了一个CJK下的叫做UTF8的宏,哦,原来CJK被用来设计支持UTF8的,只是真正的UTF8支持功能并不是CJK来实现的,这就是你为什么要安装ucs包的原因了,更进一步,你去查看CJK下UTF8中的相关文件,你会发现,它将song/kai/hei等中文字体都映像成了名为cyberbit的UTF8字体,这就是我们在安装ucs后为什么要安装cyberbit字体的原因了,当然,你如果有兴趣的话,你就可以去改动这些字体了(不过tex的字体与OS的字体不同一体系,在恶搞的过程中需要花些功夫了)。

No comments: