![OpenType MATH 表常量](https://linux22.com/image/347829/OpenType%20MATH%20%E8%A1%A8%E5%B8%B8%E9%87%8F.png)
我正在开发一个方程式渲染器,使用 Win32 API 和数学表。我理解数学表中定义的大多数常量,除了几个。由于微软的大部分想法都来自 TeX,我认为这是询问的最佳地点。如果有人能帮助我理解以下常量的含义,那就太好了:
LuaTeX 或 XeTeX 在使用 OpenType 数学字体设置数学时如何使用 MATH 表的以下条目?
数学领先数学公式之间应留有空白,以确保适当的行距。
DelimitedSubFormulaMinHeight将分隔表达式视为子公式所需的最小高度。建议值:正常行高 ×1.5。
重点基座高度不需要提高重音的重音基座的最大(墨水)高度。建议:字体的 x 高度(os2.sxHeight)加上任何可能的超出部分。
扁平化重点基座高度不需要压平重音的重音基座的最大(墨水)高度。建议:字体的大写字母高度(os2.sCapHeight)。
另外,我没有在 MATH 表中找到任何定义矩阵环境中的水平/垂直间隙的常量,这些空间是否由 luatex 或 xetex 设置时的字体表条目控制?
答案1
降调重音符是指在大写字母上使用不太陡的重音符的做法(例如,在 TS1 编码中,\DeclareTextAccent{\capitalgrave}{TS1}{0}
为大写字母设计了重音符)。Ulrik Vieth 在他的优秀但现在有点过时的MAPS 论文说
除此之外,OpenType 还引入了另一种机制,即如果基本字形的大小超过一定大小,则用扁平重音符号替换重音符号,这很可能与大写字母的高度有关。在撰写本文时,新的 TeX 引擎尚未实现对扁平重音符号的支持,但正在考虑在 LuaTeX 0.40 版中实现该功能。
查看 luatex ( mlist.w
) 的开发来源,我发现
FlattenedAccentBaseHeight:
This is based on the 'flac' GSUB feature. It would not be hard
to support that, but proper math accent placements cf. MATH
needs support for MathTopAccentAttachment table to be
implemented first
所以我认为这实际上并没有在任何地方使用。(尽管如果字体有这些条目,字体加载器将向 Lua 提供信息)
相同的mlist.w
文件MathLeading
MathLeading:
LuaTeX does not currently handle multi-line displays, and
the parameter does not seem to make much sense elsewhere
并DelimitedSubFormulaMinHeight
作为
DelimitedSubFormulaMinHeight:
This is perhaps related to word's natural math input? I have
no idea what to do about it
剩下的一个AccentBaseheight
是字体中重音符号的“自然”高度。这个高度的基字符可以简单地用重音符号覆盖,更高的字符需要排版引擎来提高重音符号。正如 Ulrik 在上面引用的论文中评论的那样,这实际上是 TeX 重音符号定位逻辑的概括,它假设默认情况下重音符号可以放置在字体高度 x 高度(fontdimen 5)的基字符上。