早先 Knuth 设计的 TeX 只是支持英文, 以后慢慢发展的 LaTeX 支持多国语言的原生输入和编译. 尤其是关于西里尔字母系列 (如 俄语, 塞尔维亚语, 乌克兰语等) 和希腊字母. 这里给出的以俄语, 塞尔维亚语西里尔字母, 希腊字母为例, 编译环境为 Ubuntu 20.04 + TeX Live 2020 + XeLaTeX + UTF8, 其他环境并未测试, 但是 XeLaTeX + UTF8 是必须的, LaTeX 版本应该不能太旧. 下面先给出一个完整例子.
%!TeX encoding = utf8
%!TEX TS-program = xelatex
\documentclass{article}
\usepackage{fontspec} %%使用该宏包设置字体
\begin{document}
%%以下三行设置字母文字字体, 建议放在文档开头, 以免修改数学字体
\setmainfont{Libertinus Serif} %%设置主体字体, 简单一点说就是默认的字体, 前提就是要包括所需的语言, 以下两个同理
\setsansfont{Libertinus Sans} %%设置 Sans 模式调用的字体, 类似于汉语中的 黑体
\setmonofont{Fira Code Retina} %%设置等款字体, 类似于汉语中的 仿宋
Libertinus Serif %%默认
ё йцукенгшщзхъ фывапролджэ ячсмитьбю
Ё ЙЦУКЕНГШЩЗХЪ ФЫВАПРОЛДЖЭ ЯЧСМИТЬБЮ
љњертзуиопшђ асдфгхјклчћ жџцвбнм
ЉЊЕРТЗУИОПШЂ АСДФГХЈКЛЧЋ ЖЏЦВБНМ
;ςερτυθιοπ ασδφγηξκλ ζχψωβνμ
;ςΕΡΤΥΘΙΙΟΠ ΑΣΔΦΓΗΞΚΛ ΖΧΨΩΒΝΜ
{\sffamily \verb|\sffamily| %%修改了一种模式, 不换段时可以 \textsf{some texts}
ё йцукенгшщзхъ фывапролджэ ячсмитьбю
Ё ЙЦУКЕНГШЩЗХЪ ФЫВАПРОЛДЖЭ ЯЧСМИТЬБЮ
љњертзуиопшђ асдфгхјклчћ жџцвбнм
ЉЊЕРТЗУИОПШЂ АСДФГХЈКЛЧЋ ЖЏЦВБНМ
;ςερτυθιοπ ασδφγηξκλ ζχψωβνμ
;ςΕΡΤΥΘΙΙΟΠ ΑΣΔΦΓΗΞΚΛ ΖΧΨΩΒΝΜ
}
{\ttfamily \verb|\ttfamily| %%等宽样式, 同样, 不换段的时候可以 \texttt{some texts}
ё йцукенгшщзхъ фывапролджэ ячсмитьбю
Ё ЙЦУКЕНГШЩЗХЪ ФЫВАПРОЛДЖЭ ЯЧСМИТЬБЮ
љњертзуиопшђ асдфгхјклчћ жџцвбнм
ЉЊЕРТЗУИОПШЂ АСДФГХЈКЛЧЋ ЖЏЦВБНМ
;ςερτυθιοπ ασδφγηξκλ ζχψωβνμ
;ςΕΡΤΥΘΙΙΟΠ ΑΣΔΦΓΗΞΚΛ ΖΧΨΩΒΝΜ
}
{
\fontspec{Fira Sans} %%中途某一部分直接修改为另一种 main font, 只在这一个范围内有效. 若只是文中某个小地方出现一点西里尔字母或者希腊字母, 建议采取这种操作方式, 不用改动其他的字体, 但是 fontspec 还是必须的
Fira Sans
ё йцукенгшщзхъ фывапролджэ ячсмитьбю
Ё ЙЦУКЕНГШЩЗХЪ ФЫВАПРОЛДЖЭ ЯЧСМИТЬБЮ
љњертзуиопшђ асдфгхјклчћ жџцвбнм
ЉЊЕРТЗУИОПШЂ АСДФГХЈКЛЧЋ ЖЏЦВБНМ
;ςερτυθιοπ ασδφγηξκλ ζχψωβνμ
;ςΕΡΤΥΘΙΙΟΠ ΑΣΔΦΓΗΞΚΛ ΖΧΨΩΒΝΜ
}
\end{document}
代码中每一部分主体只有六行, 是三种语言的大小字母, 顺序依次为 俄语字母, 塞尔维亚语西里尔字母和希腊字母, 按键顺序为普通的键盘依次敲击, 除了俄语字母开头那个是 ~ 键之外. 操作说明已加了注释. 效果如下
至于其他不少的欧洲语言字母, 少量的时候除了个别字母需要单独命令 (如 \ss
, \ae
之类) 之外, 可以通过加重音的方式得到, 如 \v{C}
, \u{C}
, \"{O}
, \H{o}
等, 较多时还是建议采用上述方式.
对于中日朝文字, 推荐用开源的思源字体显示, 代码如下:
%!TeX encoding = utf8
%!TEX TS-program = xelatex
\documentclass{article}
\usepackage{ctex} %%ctex 宏集已经调用了 fontspec 宏包
%\usepackage{fontspec} %%使用该宏包设置字体
%%以下三行设置中日朝文字字体, 这还只能放在导言区
\setCJKmainfont{Noto Serif CJK SC} %%思源宋体在 Ubuntu 中的名称
\setCJKsansfont{Noto Sans CJK SC} %%思源黑体在 Ubuntu 中的名称
\setCJKmonofont{FZFangSong-Z02} %%方正仿宋
\begin{document}
测试几个汉字, \textsf{这是汉字的黑体}, \texttt{这实际上就是仿宋}
にほんご, \textsf{にほんご 的黑体}
조선어, \textsf{조선어 的黑体}
\end{document}
可惜思源只有宋体和黑体, 没有楷体, 仿宋之类, 所以就只能用其他的代替. 另外 ctex 宏集还定义了几种字体命令, \sonti
, \heiti
, \kaishu
, \fangsong
等. 利用上述代码修改字体时, 还可以加不少的参数, 比如
\setCJKmainfont[ItalicFont = TW-Kai, BoldFont = Noto Serif CJK SC Bold]{Noto Serif CJK SC}
ItalicFont
设置 斜体字体; 对于没有粗体字型的字体, BoldFont
设置粗体字体, 这条对于思源字体实际上是多余的, 这里只是为了举例.
需要说明的是, 由于个别数学命令 (如 \mathrm
) 使用的是正文字体, 故会随着通过 fontspec
修改的主字体, 这时候如果想要原来的字体, 给 fontspec
宏包加上选项 [no-math]
. 对于中日朝文字字体的进一步问题, 欢迎访问
https://www.qinxu.net/latex/2020/0525160.