实现中英文混排

2018-02-24 16:13 更新

除掉成功生成第一个文档,实现中文输出(或者说是中英文混排)恐怕是困扰中国的 TeX 使用者的第二个普遍问题。众所周知,TeX 系统是高教授开发的,当初并没有考虑到亚洲文字的问题。因此早期的 TeX 系统并不能直接支持中文,必须要用其他工具先处理一下(或者是一些宏包之类的)。

但是现在,XeTeX 原生支持 Unicode,并且可以方便地调用系统字体。可以说解决了困扰中国 TeX 使用者多年的大问题。

此外,除去中文支持,中文的版式处理和标点禁则也是不小的挑战。好在由吴凌云和江疆牵头,现在主要由刘海洋和李清(还有我打个酱油)维护的 ctex 宏包 / 文档类一次性解决了这些问题。ctex 宏包和文档类的优势在于,它适用于多种编译方式;在内部处理好了中文和中文版式的支持,隐藏了这些细节;并且,提供了不少中文用户需要的功能接口。

为了和原有的日志对接,这里分别用两种方法来介绍中英文混排。当然,老方法只是为了「兼容性」存在的,推荐使用新方法。

新方法——使用 ctex 文档类

在 TeXworks 编辑框中输入以下内容,保存,使用 XeLaTeX 编译:

\documentclass[UTF8]{ctexart}
\begin{document}
你好,world!
\end{document}

如果没有意外,你将会看到类似下图的输出结果。

相较于之前的例子,这份代码只有细微的差异:

  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}

如果一切顺利,你将会在屏幕右边的窗口,看见类似下图的输出结果。

如果你的 TeX 系统提示找不到字体,请换用你的操作系统中可用的中文字体。关于如何寻找你的操作系统中可用的中文字体,请参考本章最后一小节。

除了 “document” 环境中同时出现了中文和英文,和最原始的 Hello, world! 不同点在于,导言区中多出了两条控制序列。他们的作用我已经用注释标出了。

所谓的宏包,就是一系列控制序列的合集。这些控制序列太常用,以至于人们会觉得每次将他们写在导言区太过繁琐,于是将他们打包放在同一个文件中,成为所谓的宏包(台湾方面称之为“巨集套件”)。\usepackage{·}可以用来调用宏包。

\setCJKmainfont{·}是定义在 “xeCJK” 宏包中的控制序列,它可以用来设置 CJK 主字体。

请注意,TeX 系统对宏包名称和控制序列的大小写是敏感的

查看当前操作系统中的字体

Mac OS X 用户

请参照 这篇博客 中的方法,使用系统自带的字体册程序来查看系统字体。

非 Mac OS X 用户

按照如下步骤打开系统命令行(*nix 系统请打开终端):

  • 按下+ R
  • 键入cmd, 回车。

在系统命令行中输入如下命令:

fc-list :lang=zh-cn > C:\font_zh-cn.txt

(相信使用 *nix 的你,一定知道如何修改上述命令达到你想要的效果)

打开 C 盘根目录下的 C:\font_zh-cn.txt 纯文本文档,里面的内容就是你当前系统可用的全部中文字体,形如:

每一个小黑框之间的内容,就对应着一个可用的字体。这些小黑框实际上是换行符,但是由于 Windows 系统的原因,他们没有被正常显示。如果看着不爽,你可以尝试用 TeXworks 打开这个文件查看(放心,能够打开的)。以下是我用 gVim 打开的效果:

其中的每一行,都代表着一个可用的字体。其形式如下:

<字体文件路径>: <字体标示名 1>, <字体表示名 2>:Style=<字体类型>

我们可以看到图中的倒数第四行

C:/WINDOWS/fonts/simsun.ttc: 宋体,SimSun:style=Regular

出现了之前文档里调用的字体SimSun,此处表明该字体有两个表示名:宋体SimSun,我们在\setCJKmainfont{·}中填入任意一个都有同样的效果。

因此,如果之前的文档无法编译通过,请在你的操作系统字体中,选取一个自己喜欢的,将它的字体表示名填入到\setCJKmainfont{·}中去。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号