上下文:在 Computer Modern Math Extension 字体 (cmex) 中,基线似乎穿过每个字符的顶部。我在开发的 Windows 应用程序中显示 Computer Modern 集合中的各种字符时意识到了这一点:症状是 cmex 字符位于基线下方。您还可以从 CTAN 下载文件 cmex10.pfb 并使用 FontForge 打开它,以查看所有字形是否相对于其顶部对齐。
有没有办法(例如字体度量信息)来纠正这种对齐?
TeX 能够执行这种对齐,但到目前为止我还不知道如何进行。
答案1
TeX 数学扩展字体确实非常奇特。Knuth 试图在开发 TeX 时可用的稀缺计算资源中打包尽可能多的信息。
因此,Knuth 没有定义部首连线粗细的参数,而是决定从数学扩展字体度量文件中获取信息,确切地说是部首符号的高度。因此,所有部首符号似乎都悬挂在基线以下:
\noindent\rlap{\vrule height 0.1pt depth 0.1pt width \hsize} % the baseline
{\tenex\char"70}
{\tenex\char"71}
{\tenex\char"72}
{\tenex\char"73}
{\tenex\char"74}
{\tenex\char"75}
{\tenex\char"76}
\bye
最右边的三个字形用于构建更大的部首:主要部分、重复条和顶部。
TeX 的规则指定使用所选字形的高度(基于部首下方材料的大小)来绘制作为连字符的规则。之后,包括部首在内的所有材料都会向上移动,以便相对于公式轴对称放置(公式轴的高度也是符号字体度量文件中的参数,该文件是为数学系列 2 加载的)。
其他“优化”针对数学扩展字体中的几乎所有字符进行,用于打包构建更大符号所需的信息;基本上所有字形都位于基线以下这一事实并不重要,因为当涉及数学扩展字体时,公式部分无论如何都会发生移动。
TeXbook 的附录 G 详细描述了这个过程。不幸的是,这使得这些字体无法在其他应用程序中使用。较新的引擎(如 XeTeX 和 LuaTeX)引入了几个新参数,使这些“优化”变得无关紧要,因此 Unicode 数学字体可以将符号放置在它们应该在的位置,以便在任何文本处理应用程序中使用。