错误的文本层。fontforge 和 {xe|lua}latex 中的字距不匹配

错误的文本层。fontforge 和 {xe|lua}latex 中的字距不匹配

在输入上运行xelatex(或)lualatex

\documentclass{standalone}
\usepackage{unicode-math}
\setmathfont[Ligatures=TeX]{texgyretermes-math.otf}
\begin{document}
\(\{f\}\)
\end{document}

应该产生某种形式的

{F}

在 PDF 的文本层中。但它会产生

{F }

f 和 } 之间有一个空格。这个空格不应该存在。如何去掉它?

至于可见的输出,它如下:

在此处输入图片描述

如您所见,PDF 中的左括号和 f 重叠。但是,当您使用 fontforge 打开字体,并将左括号和 florin 放入度量窗口时,它们不会重叠!输出不一致。我遗漏了什么?如何一劳永逸地正确增加“{F“在我的大型文档(不是 MWE)中?我试图自己改进字体(开发人员过去没有对类似请求做出反应),但迄今为止没有任何结果......

答案1

PDF 的“文本层”中的空格是由 PDF 查看器的启发式方法插入的,因为 和 之间有一段距离f}从长远来看,带标签的 PDF 文件应该可以解决这个问题,但对于数学公式,我不会坚持下去。因此,从短期来看,您要么使用 eg 为每个数学公式指定替换文本,repltext要么忍受这个空格。

关于 FontForge 中的“不一致”:florin 符号 (U+0192) 和数学斜体小写字母 f (U+1D453) 不是相同的字形。在 FontForge 中比较两者,会显示与 TeX 中相同的外观:

(首先是数学斜体小写 F,其次是弗罗林)

在此处输入图片描述

但一般来说,我不推荐使用 FontForge 的度量窗口来输出数学,因为数学的格式与普通文本不同。尤其是像本例这样的“经典字距调整”实际上并不存在,因为{f是独立的对象,也不是单词的一部分。

当然,如果你更喜欢弗罗林符号而不是数学上的 f,你可以使用

\Umathcode`\f 7 0 "192

之后\begin{document},LaTeX 会在数学模式中用弗罗林符号代替 U+1D453 来表示“f”。一个缺点是文本层也会包含弗罗林符号。您也可以U+1D453直接在 FontForge 中修改。

相关内容