LuaLaTeX 在字体的字形之间添加空格,而 XeLaTeX 则不会

LuaLaTeX 在字体的字形之间添加空格,而 XeLaTeX 则不会

使用IM Fell Type 字体我在处理文档时遇到了一个问题:使用这些字体,生成的 PDF 在用 LuaLaTeX 编译时,字形之间会有多余的空格。(我还发现我必须使用 FontForge 重新生成字体文件;我有一个相同字体的旧文件 FePIrm27C,我不需要重新生成字体文件。它仍然可以在上述网站的存档版本.) 使用 XeLaTeX 编译我的 MWE 将生成一个包含我期望的字符串的 pdf。我目前正在使用 TeXlive2023,并于今天更新了所有软件包。

妇女权利委员会:

\documentclass{standalone}
\usepackage{fontspec} 
\setmainfont{IMFePIrm29C.otf} % May require re-generating the font with FontForge
%\setmainfont{FePIrm27C.otf} % For a the archived version which requires less font magic
\begin{document}
    This is a minimal test. fi fi fi fififififi ſſ ſi ſm
\end{document}

生成的 PDF 看起来一样,但编码的文本不一样:复制 PDF 文本时可以看到问题只存在于字形之间。连字符出现时没有额外的空格:

这是最低限度的测试。 fi fi fi fi fi fi fi ſſ ſi ſ m

同时,使用 XeLaTeX,字符串将是:

这是一个最小测试。fi fi fi fifififififi ſſ ſi ſm

由于我现在已经使用 LuaLaTeX 完成了几个较大的项目,我更愿意继续使用它。同样,我非常喜欢这个字体,不想替换它。有没有办法以某种方式摆脱这些空格?不太重要,但出于好奇:这里发生了什么?

答案1

更新答案

感谢 Marcel 指出我下面的回答在事实上是错误的(人们也许仍然可以将其作为一种解决方法,我让它代表完整性)。我对此表示歉意。

我的系统上的所有 OTF(CFF)字体(现在除了这个)都将“每 em 单位数”设置为 1000,并且到处读取一点,这似乎是大多数人使用的,但是,正如 Marcel 指出的那样,不受字体格式的限制。

在 FontForge 中打开字体并重新生成,确实会出现以下警告:

FF 警告,unitsperem 是 2048,而不是 1000

因此甚至 FontForge 也建议使用 1000(可能是因为其他值会给查看器和打印机带来问题)。

也许 luatex(的字体加载器)中确实有一些需要修复,但在这种情况下,我只会使用 TTF。

旧答案

通过您更新的问题,似乎复制和粘贴时确实存在问题(从我尝试过的大多数查看器来看,但不是全部),但这似乎不是 luatex 的错。

OTF 字体已损坏。

问题(或至少有一个)是 OTF 版本生成的 em 大小为 2048,而 OTF 字体的 em 大小应该是 1000。您可以在 Fontforge 中打开 OTF 字体,转到

Element -> Font info -> General

并将 Em Size 从 2048 更改为 1000,然后单击“确定”。 (保持标记“Scale Outlines”。)

然后,生成的字体似乎在这里工作正常,至少在您的小测试中是这样。您可能还会对字体的大小不同而感到好笑:

新输出

顶部是旧的 OTF 字体,中间是新生成的 OTF 字体,底部是 TTF 字体。

事实上,该字体似乎是为 TTF 设计的,所以最安全的做法可能是使用这些版本而不是 OTF。如果该字体仍在维护,您可以提交错误报告。

相关内容