TeX Gyre Termes 的连字在 LuaLaTeX 中有效,但在 XeLaTeX 中失败

TeX Gyre Termes 的连字在 LuaLaTeX 中有效,但在 XeLaTeX 中失败

我最近安装了 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}

XeLaTeX:fi ff fl ffi

LuaLaTeX:连字符正确呈现

小型大写字母也会出现同样的问题 - 在 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并检查日志文件,以确认这个猜测。

相关内容