实现中英文混排

最后更新于:2022-04-01 01:07:02

除掉成功生成第一个文档,实现中文输出(或者说是中英文混排)恐怕是困扰中国的 TeX 使用者的第二个普遍问题。众所周知,TeX 系统是高教授开发的,当初并没有考虑到亚洲文字的问题。因此早期的 TeX 系统并不能直接支持中文,必须要用其他工具先处理一下(或者是一些宏包之类的)。 但是现在,XeTeX 原生支持 Unicode,并且可以方便地调用系统字体。可以说解决了困扰中国 TeX 使用者多年的大问题。 此外,除去中文支持,中文的版式处理和标点禁则也是不小的挑战。好在由吴凌云和江疆牵头,现在主要由刘海洋和李清(还有我打个酱油)维护的 `ctex` 宏包 / 文档类一次性解决了这些问题。`ctex` 宏包和文档类的优势在于,它适用于多种编译方式;在内部处理好了中文和中文版式的支持,隐藏了这些细节;并且,提供了不少中文用户需要的功能接口。 为了和原有的日志对接,这里分别用两种方法来介绍中英文混排。当然,老方法只是为了「兼容性」存在的,推荐使用新方法。 ## 新方法——使用 `ctex` 文档类 在 TeXworks 编辑框中输入以下内容,保存,使用 XeLaTeX 编译: ~~~ \documentclass[UTF8]{ctexart} \begin{document} 你好,world! \end{document} ~~~ 如果没有意外,你将会看到类似下图的输出结果。 [![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-07-07_559b4726960a9.jpg)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-07-07_559b472676c29.jpg) 相较于之前的例子,这份代码只有细微的差异: 1. 文档类从 `article` 变为 `ctexart`; 2. 增加了文档类选项 `UTF8`。 新版 `ctex` 宏包和文档类的默认能够自动检测用户的操作系统,并为之配置合适的字库。对于 Windows 用户、Mac OS X 用户和 Linux 用户,都无需做任何配置,就能使用 `ctex` 宏包和文档类来排版中文。[2015-05-20 更新] ## 老方法——直接调用 xeCJK 宏包 在 TeXworks 编辑框中输入以下内容,保存,使用 XeLaTeX 编译: ~~~ \documentclass{article} \usepackage{xeCJK}% 调用 xeCJK 宏包 \setCJKmainfont{SimSun}% 设置 CJK 主字体为 SimSun (宋体) \begin{document} 你好,world! \end{document} ~~~ 如果一切顺利,你将会在屏幕右边的窗口,看见类似下图的输出结果。 [![](http://ww2.sinaimg.cn/large/818901c1jw1e44g5azwaej20j00kimy3.jpg)](http://ww2.sinaimg.cn/large/818901c1jw1e44g5azwaej20j00kimy3.jpg) 如果你的 TeX 系统提示找不到字体,请换用你的操作系统中可用的中文字体。关于如何寻找你的操作系统中可用的中文字体,请参考本章最后一小节。 除了 “document” 环境中同时出现了中文和英文,和最原始的 Hello, world! 不同点在于,导言区中多出了两条控制序列。他们的作用我已经用注释标出了。 所谓的宏包,就是一系列控制序列的合集。这些控制序列太常用,以至于人们会觉得每次将他们写在导言区太过繁琐,于是将他们打包放在同一个文件中,成为所谓的宏包(台湾方面称之为“巨集套件”)。`\usepackage{·}`可以用来调用宏包。 `\setCJKmainfont{·}`是定义在 “xeCJK” 宏包中的控制序列,它可以用来设置 CJK 主字体。 _请注意,TeX 系统对宏包名称和控制序列的大小写是敏感的_ ## 查看当前操作系统中的字体 ### Mac OS X 用户 请参照 [这篇博客](http://liam0205.me/2014/11/02/latex-mactex-chinese-support/) 中的方法,使用系统自带的字体册程序来查看系统字体。 ### 非 Mac OS X 用户 按照如下步骤打开系统命令行(*nix 系统请打开终端): * 按下` + R`; * 键入`cmd`, 回车。 在系统命令行中输入如下命令: ~~~ fc-list :lang=zh-cn > C:\font_zh-cn.txt ~~~ (相信使用 *nix 的你,一定知道如何修改上述命令达到你想要的效果) 打开 C 盘根目录下的 `C:\font_zh-cn.txt` 纯文本文档,里面的内容就是你当前系统可用的全部中文字体,形如: [![](http://ww1.sinaimg.cn/large/818901c1jw1e44gmvz7yuj20i40actcb.jpg)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-07-07_559b4726ea247.jpg) 每一个小黑框之间的内容,就对应着一个可用的字体。这些小黑框实际上是换行符,但是由于 Windows 系统的原因,他们没有被正常显示。如果看着不爽,你可以尝试用 TeXworks 打开这个文件查看(放心,能够打开的)。以下是我用 gVim 打开的效果: [![](http://ww2.sinaimg.cn/large/818901c1jw1e44gpsi9fpj20km0f478v.jpg)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-07-07_559b472739ae4.jpg) 其中的每一行,都代表着一个可用的字体。其形式如下: ~~~ <字体文件路径>: <字体标示名 1>, <字体表示名 2>:Style=<字体类型> ~~~ 我们可以看到图中的倒数第四行 ~~~ C:/WINDOWS/fonts/simsun.ttc: 宋体,SimSun:style=Regular ~~~ 出现了之前文档里调用的字体`SimSun`,此处表明该字体有两个表示名:`宋体`和`SimSun`,我们在`\setCJKmainfont{·}`中填入任意一个都有同样的效果。 因此,如果之前的文档无法编译通过,请在你的操作系统字体中,选取一个自己喜欢的,将它的字体表示名填入到`\setCJKmainfont{·}`中去。
';