使用任何一种语言,Latex都必须处理两个基本问题:
- 将输入字节映射为所使用语言的字符
- 将字符映射为所使用字体的字形
使用xelatex可以帮助我们处理这些问题。对于xelatex,输入文件默认为UTF-8格式,引擎自动将字符映射为TrueType或OpenType字体的字形。当然,我们必须保证所使用的字体支持所用语言。
当是使用Latex或pdflatex时,必须告诉Latex输入文件的编码格式。一般来说,UTF-8是最好的输入编码方式,可以使用下面的方式设置
\usepackage[utf8]{inputenc}
我们还要指定使用什么样的输出编码方式将字符映射为字体中的字形,对于大部分啦拉丁语系的语言,可使用T1输出编码。使用如下方式设置
\usepackage[T1]{fontenc}
但对于其他语言,必须指定特定的编码方式。xeCJK包提供了很好的中文支持,
\usepackage{xeCJK}
当前有两个可以提供国际化的语言支持,即Polyglossia和Babel。Polyglossia主要和XeTex一起使用,Babel和pdfTex、LuaTex一起使用。这两个包完成下列任务:
当使用XeLatex 和 LuaLatex时,polyglossia提供了国际化支持。使用这个包,可以指定使用的语言和语言特定的选项。例如,文档中包含了美国英语和法语,可以使用下面的设定
\usepackage{polyglossia}
\setdefaultlanguage[variant=american]{english}
\setotherlanguage{french}
当使用latex或pdflatex时,babel包可提供国际化支持。这个包也可以用于LuaLatex和XeLaTex。可以在包参数中指定语言。
\usepackage[language]{babel}
这个包应该紧跟在\documentclass
,使后面载入的包能够知道你所所以用的语言。加载babel包时可以指定多种语言
\usepackage[languageA, languageB]{babel}
参数列表中的最后一种语言是当前激活的语言。可以使用命令改变当前激活语言
\selectlanguage{languageA}
当文档中包含多种语言时,可以使用babel提供的命令方便地在不同语言间切换。babel提供了定义语言名字的方式
\babeltags{de = german}
文档可以写为
text \textde{German text} text
\begin{de}
German text
\end{de}
xeCJK主要功能包括:
- 分别设置CJK和英文字体
- 自动忽略中文文字间的空格而保留其他空格,允许在非标点汉字和英文字母间断行
- 调整中英文间的空白
xeCJK包提供了许多选项,可以在调用宏包时直接设置,也可以使用\xeCJKsetup
设置这些选项。xeCJK内部使用fontspec宏包,在调用xeCJK宏包时,也可以使用fontspec宏包中的选项。
加载xeCJK包之后,只要设置CJK文字的字体,就可以使用中文了。例如,中文字体要使用SimSun(宋体)。这里,假设系统安装了需要的字体。
\usepackage{xeCJK}
\setCJKmainfont{SimSum}
字体族(font families)有很多,如Times, Courier, Helvetica。它们一般可以分为三类:serif, sans serif 和 monospaced。在Latex中,分别用简写rm, sf, tt表示。
字体族通常包含不同的风格,如斜体(italic)或加粗(bold)。
\setmainfont{}
设置西文正文默认罗马类字体。在Word中,默认字体通常是”Times New Roman”。setsansfont{}
设置西文默认无衬线字体。一般出现在大标题等显眼的位置。这一部分常见的字体是Helvetica/Arial。\setmonofont{}
设置西文默认等宽字体,一般用于排版程序代码。常见的字体是Courier或者Courier New。xeCJK中提供了相似的三个命令设置对应的中文字体:
\setCJKmainfont[BoldFont={}, ItalicFont={}]{}
设置中文正文罗马类字体。大部分中文文档使用宋体排版 ,实际上就是Simsun。Linux下可能用文鼎宋体代替。与西文不同的是,这里允许我们指定粗体和斜体使用何种字体代替。之所以有这个区别,是因为中文不使用粗体表示强调,也不使用斜体表示引文或书名号。可指定BoldFont 和 ItalicFont 为某种黑体,Windows 环境下用SimHei,Linux 下用文泉驿正黑避免版权问题。\setCJKsansfont{}
设置中文正文无衬线的CJK字体,影响\sffamily
和\textsf
的字体。可以设为宋体。setCKJmonofont{}
设置中文正文等宽族的CJK字体,影响\ttfamily
和\texttt
的字体。可以设为宋体。xeCJK包仅提供的中文字体。中文文档的排版习惯和英文文档不同。为了排版中文文档,使用CTex工具集是最方便的方法。CTex的使用方法可以参考其文档。
[1] https://en.wikibooks.org/wiki/LaTeX/Internationalization
[2] https://www.zhihu.com/question/20563044