我最近安装了 TeX Gyre Termes,我注意到使用 LuaLaTeX 编译时存在连字,但使用 XeLaTeX 编译时不存在:
% !TeX program = XeLaTeX
\documentclass{article}
\usepackage{fontspec}
\setromanfont{TeXGyreTermes} % no spaces in name
\begin{document}
fi ff fl ffi
\end{document}
小型大写字母也会出现同样的问题 - 在 LuaLaTeX 中,一切都运行良好,但切换到 XeLaTeX 后,小型大写字母就消失了,XeLaTeX 警告我,它必须用普通的 TeX Gyre Termes 代替小型大写字母。我怀疑这个问题与我安装的 TeX Gyre Termes 有关,因为使用其他字体时会出现连字。然而,我尝试多次重新安装 TeX Gyre Termes,但这个问题仍然存在。
因此,我的问题是:因为我无法使用 TeX Gyre Termes 的功能副本,并且 XeLaTeX 的编译速度比 LuaLaTeX 更快,我该怎么做才能确保使用 XeLaTeX 编译时出现连字?
(我不想用另一种类似 Times 的字体替换 TeX Gyre Termes,因为我更喜欢它的斜体。不过,我不在乎是否使用了该字体的 OpenType 版本。)
这个问题似乎相关: pdftex、xetex 和 luatex 有哪些不兼容性? 但是,它并没有讨论这种差异背后的原因以及如何解决这一差异。
答案1
xelatex 和 lualatex 使用不同的方法来搜索字体。xelatex 使用 fontconfig,lualatex(或者更准确地说是用于加载字体的包 luaotfload)有自己的数据库。
这意味着有时一个引擎能找到一种字体,但另一个引擎找不到,例如取决于空格或大写字母(lualatex 不在乎,而 xelatex 相当挑剔)。
我猜想,当您使用不带空格的名称时,您的系统 xelatex 会找到 type1 字体。您可以添加\XeTeXtracingfonts=1
并检查日志文件,以确认这个猜测。