LaTeX 调用发行版本的字体

曾经在 win 上面用 xelatex 编译文档时,并没有太在意它不仅能通过 fontspec 宏包调用系统字体,还能调用发行版本带有的字体。后来才知道在 Linux 和 Mac 上却并不是这样,它们只能通过文件名来调用发行版本的字体,而不能通过字体名调用发行版本的字体。


最初是在编译如下的简单示例发现的

1
2
3
4
5
\documentclass{ctexart}
\setmainfont{TeX Gyre Termes}
\begin{document}
test
\end{document}

编译时报错说找不到 TeX Gyre Termes 字体。这个字体在 TeX 里是多种安装方案下都是默认安装的。这时我猜想发行版本会不会缺字体,因为我起初是装的 basic-scheme。打开 $TEXMFDIST/fonts/opentype/public 下面是能找到 TeX Gyre Termes 字体的。进而尝试用 \setmainfont{texgyretermes-regular.otf} 进行设置字体,成功了。但是这样我并不满意。因为用文件名设置字体很麻烦,不会自动设定粗体斜体等。经过一些搜索,发现 慕子在知乎上写的文章 有详细讲到这个问题,并且给出了直接的解决方案。

他提供的是 Mac 上的解决方案。方案二 Linux 可以稍作修改就能用,也就是

1
2
ln -s `kpsewhich -var-value TEXMFDIST`/fonts/truetype ~/.local/share/fonts/texlive-truetype
ln -s `kpsewhich -var-value TEXMFDIST`/fonts/opentype ~/.local/share/fonts/texlive-opentype

可能 ~/.local/share/fonts 不存在,可以建立一个。注意里面值的替换。这个是单用户的解决方案。如果想装到系统里,就把 ~/.local/share/fonts 改成 /usr/share/fonts 。创建好上面的软链接后,手动刷新字体缓存 fc-cache -fsv 就可以了。

他提到的方法一在 install-latex 中有提到 Linux 上的具体解决手段。

1
sudo cp /usr/local/texlive/2020/texmf-var/fonts/conf/texlive-fontconfig.conf /etc/fonts/conf.d/09-texlive.conf

其实这里我更喜欢创建软链接,改进的版本如下
1
sudo ln -s `kpsewhich -var-value TEXMFVAR`/fonts/conf/texlive-fontconfig.conf /etc/fonts/conf.d/09-texlive.conf

创建软链接的好处是一边的更改可以影响另一边。不过这里直接复制也可以。

Welcome to my other publishing channels