背景

TeX 中使用中文, 通常最简单的方法都是使用 CTeX 和 XeLaTeX. 只要在源文件中加上一行 \usepackage{ctex} 然后用 xelatex 编译就好.

但是古老以来就有个问题: CTeX 使用的 Fandol 字体对于生僻字支持不好. 对于名字中有生僻字的人就很不友好. 名字有时就显示为一个方框里面有一个 F.

article 解决方法

首先我们需要找一个支持生僻字的字体. Google 的 noto 字体就可以, 还算漂亮. 我觉得 Serif 比 Sans Serif 更漂亮.

Ubuntu 18.04

系统已经包含了 Noto 字体

$ fc-list | grep "Noto.*CJK SC"
/usr/share/fonts/opentype/noto/NotoSerifCJK-Bold.ttc: Noto Serif CJK SC:style=Bold
/usr/share/fonts/opentype/noto/NotoSerifCJK-SemiBold.ttc: Noto Serif CJK SC,Noto Serif CJK SC SemiBold:style=SemiBold,Regular
/usr/share/fonts/opentype/noto/NotoSansCJK-Black.ttc: Noto Sans CJK SC,Noto Sans CJK SC Black:style=Black,Regular
/usr/share/fonts/opentype/noto/NotoSerifCJK-Regular.ttc: Noto Serif CJK SC:style=Regular
/usr/share/fonts/opentype/noto/NotoSansCJK-Light.ttc: Noto Sans CJK SC,Noto Sans CJK SC Light:style=Light,Regular
/usr/share/fonts/opentype/noto/NotoSerifCJK-ExtraLight.ttc: Noto Serif CJK SC,Noto Serif CJK SC ExtraLight:style=ExtraLight,Regular
/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc: Noto Sans Mono CJK SC,Noto Sans Mono CJK SC Bold:style=Bold,Regular
/usr/share/fonts/opentype/noto/NotoSerifCJK-Light.ttc: Noto Serif CJK SC,Noto Serif CJK SC Light:style=Light,Regular
/usr/share/fonts/opentype/noto/NotoSansCJK-Thin.ttc: Noto Sans CJK SC,Noto Sans CJK SC Thin:style=Thin,Regular
/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc: Noto Sans CJK SC,Noto Sans CJK SC Bold:style=Bold,Regular
/usr/share/fonts/opentype/noto/NotoSerifCJK-Black.ttc: Noto Serif CJK SC,Noto Serif CJK SC Black:style=Black,Regular
/usr/share/fonts/opentype/noto/NotoSerifCJK-Medium.ttc: Noto Serif CJK SC,Noto Serif CJK SC Medium:style=Medium,Regular
/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc: Noto Sans CJK SC,Noto Sans CJK SC Regular:style=Regular
/usr/share/fonts/opentype/noto/NotoSansCJK-DemiLight.ttc: Noto Sans CJK SC,Noto Sans CJK SC DemiLight:style=DemiLight,Regular
/usr/share/fonts/opentype/noto/NotoSansCJK-Medium.ttc: Noto Sans CJK SC,Noto Sans CJK SC Medium:style=Medium,Regular
/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc: Noto Sans Mono CJK SC,Noto Sans Mono CJK SC Regular:style=Regular

所以在 TeX 文件中, 在

\usepackage{ctex}

之后加上

\setCJKmainfont[ItalicFont=Noto Sans CJK SC Bold, BoldFont=Noto Serif CJK SC Black]{Noto Serif CJK SC}

就好了

如果你的系统没有 noto 字体

这里 可以下载. 对于 Linux 系统, 应当下载 Subset OTF.

下载后解压, 应当看到有一堆 otf.

NotoSansSC-Black.otf  NotoSansSC-Bold.otf  NotoSansSC-DemiLight.otf  NotoSansSC-Light.otf  NotoSansSC-Medium.otf  NotoSansSC-Regular.otf  NotoSansSC-Thin.otf

假设包含生僻字的 tex 文件在 dir/, 复制这些文件到 dir/ 下 (当然, 实际上不用全部复制). 在 TeX 文件中, 在

\usepackage{ctex}

之后加上

\setCJKmainfont[BoldFont=NotoSansSC-Bold.otf]{NotoSansSC-Regular.otf}

即可.

如果你的上级对字体有要求

请 windows 或者 mac 的朋友帮你编译吧

beamer 解决方法

beamer 默认使用 sans 字体, 因此在 \usepackage{ctex} 之后加

\setCJKsansfont[BoldFont=NotoSansSC-Bold.otf]{NotoSansSC-Regular.otf}