真正的Linux下的中文LATEX解决方案: CTeX + xeCJK + XeTEXlins05 August 6, 2011 摘要 Linux下用LaTeX很方便,但是要解决中文的问题就不怎么方便,因 为TeX的字体系统很难自己解决。 Windows下可以使用配置好的CTeX套装1 , 现在本文中就简介如何在Linux下配置CTeX,以方便写中文文档。 目录1 老的方法 1 老的方法LATEX的CJK宏包,经过实践证明,确实是一个可行且实用的中文LATEX解决方 案。但是它有几点不足: 1.1 缺乏可用的字体LATEX下的中文字体很少,Linux下的字体更少。因为TEX的字体系统比较复杂,使 得用户想自己生成字体非难困难,门槛很高,并且管理不方便。 1.2 默认的格式不符合中文排版要求CJK宏包仅仅解决了中文字体的问题,但是它默认的格式是英文的排版方式(CJK的 作者是德国人)。 因此,一般用户都需要自己设置种种版式:首先缩进,行距和段距。中英文混排 时的字距,等等。 1.3 不能满足中文的其他要求比如生成目录时,中文文档应该叫“目录”,而不是”CONTENTS”。类似的还有“ 附录”、“表格索引”等等。 CTeX宏包和xeCJK宏包的组合相当完美的解决了这些问题。 2 CTeX和xeCJK2.1 字体xeCJK宏包所使用的XeTeX引擎,是从MacOS移植到Linux和Windows上的。它最大 的特点是从底层就具备对unicode的支持,以及可以直接调用系统中已有的字 体。 这意味着将LaTeX用户从和字体相关的一大推问题中解决出来了。只要系统中安装 了中文字体,那么使用XeTeX就能使用这些字体。 xeCJK是必须使用XeTeX引擎的,这也是为什么标题叫做CTeX + xeCJK + XeTeX的原因。 2.2 中文版式CTeX的开发者们是值得所有的LaTeX用户感激的。使用CTeX的各个documentclass, 我们就无须再手动地设置版式,因为CTeX的默认设置就是最适合中文文档的:行首 缩进两个汉字;行距和段距的适当调整,中英文的混排时的字距,都是适合中文版式 的。 此外,CTeX将其他应该为中文文档考虑的地方大都包括了进去:”CONTENTS”改为 了“目录”,”Index”改为了”索引“,等等。 2.3 CTeX和xeCJK的关系二者都是宏包,但是,CTeX是一个上层的中文LaTeX宏包。它的下层是可选的,可 以支持xeCJK、CJK,甚至更老的CCT宏包。对于不同的下层宏包它进行不同的设 置。xeCJK完全可以脱离CTeX使用,但是这样你虽然不用担心字体,同样也不能享 受到CTeX的中文版式。 3 简单的例子例子总是最直观的。我们以一个最简单的例子来说明。 %--------------------------------------- Figure 1: 小明的日记 4 注意事项4.1 如何安装Linux下安装这三者的最方便的方法是安装texlive系列。texlive是一整套TEX工具和引 擎的集合,包括了LaTeX等种种工具和一些相关的程序、宏包,不同的发行版里会把 整个texlive分为不同的软件包,诸如texlive-xetex、texlive-xecjk、texlive-ctex。用包 管理软件进行搜索,不难找到应该安装的软件包。 当然另一种方式是使用texlive的安装DVD或者在线安装 工具。笔者使用的slackware发行版里没有提供texlive的软件 包2 ,因此是从中科 大的CTAN镜像3 下 载的texlive2011DVD进行安装的。具体的安装过程可以读光盘里的README文 件。 由于texlive是一个TeX软件的大集合。因此它有一个专门的包管理程序:tlmgr。 这个程序类似debian下的apt-get,提供了搜索、查询、安装、卸载、升级各个tex软件 包的功能。在DVD安装版中有这个软件,一般的发行版应该不会提供这个程 序4 。 4.2 推荐字体一般使用的字体有三套。 一是在Linux下常用的文泉驿字体,但它不适合写正式的文档。 二是在网上下载Adobe的四套字体,分别是宋体、仿宋、黑体和楷体。 三是可以拷贝Window下的字体。但是这涉及到版权问题。如果确实想用,可以在 百度上搜索“方正楷体”、“方正宋体”,等等。 使用字体的方法如下: 先拷贝字体到/usr/share/fonts/下的相应的子目录中,然后运行"fc-cache"更 新系统的字体缓存。 在xeCJK中,设置主字体是使用\setCJKmainfont命令(因为我们的CTeX会调 用xeCJK,因此可以使用xeCJK中的命令)。 具体的字体名字可以用"fc-list :zh-cn"命令来查看。 4.3 其他设置1 如果你的系统中没有CTeX要求的全套六种字 体5 , 那么,一定要在\usepackage{ctex}的选项中加上adobefonts这一条。 这样一来CTeX会用相应的Adobe字体去代替它要求的六套字体。不然有时会出现 找不到字体的现象,尤其是使用特殊字体的时候,比如在verbtim环境中。 2 一般情况下,中文文档中是不使用斜体的。因此在CTeX调用xeCJK时,默认是 不使用斜体的,所以你就算在文档中使用\textsl{},最终也不会产生任何斜体效 果。 如果你真的要用,就要修 改/ctex/engine/ctex-xecjk-engine.def6 中 的一行: \RequirePackage[BoldFont,normalindentfirst]{xeCJK} 改为: \RequirePackage[BoldFont,slantfont,normalindentfirst]{xeCJK} 3 使用CTeX的两种方法 第一种是直接使用CTeX的文档类。 \documentclass[adobefonts]{ctexart} 第二种是使用CTeX包。 \usepackage[adobefonts]{ctex} 二者的区别是:当通过\usepackage来使用CTeX包时,产生的仍然 是”CONTENTS”、”INDEX”,而不是“目录”、“索引”。 当然,如果要用其他类作为文档类,就必须使用第二种方式了,最典型就是 用beamer类做幻灯片的时候了。 这时,如果要使用中文的“目录”、“摘要”等样式,可以使用这两条命 令: \renewcommand*\contentsname{目录} 还有一个更折腾的方法。修改一下ctex/ctex.sty文件,在其中添加一 句 \input{ctex-caption.def} 这样就一直保持中文的名称了。 |
|