CONTEXT 中数学字体的 OpenType 功能

CONTEXT 中数学字体的 OpenType 功能

使用 CONTEXT MkIV,是否可以向数学模式中使用的字体添加自定义/虚拟 OTF 功能?以下是我想要执行的操作的简化版本。我想将1.2数学模式中的所有 更改为1/2,也就是说,当句点出现在数字 1 和 2 之间时,句点应更改为正斜杠。(我的最终目标是将夹在任意两个数字之间的句点 U+2E 更改为 U+66B。)

以下是我尝试实现这一目标的方法。

\startluacode
digits = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39 }
replacements = { [0x2E] = { 0x2F } }
fonts.handlers.otf.addfeature {
  name = "mpf",
  type = "chainsubstitution",
  lookups = { {
    type = "multiple",
    data = replacements,
  } },
  data = {
    rules = {
      {
        current = { { 0x2E } },
        after   = { digits },
        before  = { digits },
        lookups = { 1 },
      }
    }
  }
}
\stopluacode

\definefontfeature[mathperiod][mpf=yes]

\starttypescript[math][xits][name]
\definefontsynonym[MathRoman][file:xits-math.otf][features=mathperiod,goodies=xits-math]
\stoptypescript

\setupbodyfont[xits]

\starttext
\startformula
  1.2.  %% does not work here
\stopformula
\addff{mathperiod}
1.2.    %% but works here
\stoptext

这在数学模式下不起作用。但是,相同的字体功能在文本模式下有效。

如果我mps=yes用替换ss08=yes,我会得到直立的积分,表明功能列表确实应用于数学字体,并表明问题在于在数学模式下的mps序列不会触发。1.2

数学字体使用扩展编码,但是,我的调查显示,普通数字仍然占据 0x30-0x39 范围,而句点的代码为 0x2E(更准确地说\Umathchar"0"0"002E)。对吗?

我猜想 OpenType 特性只适用于mode=node。将其添加到字体特性定义中不仅不能解决问题,而且还会使直立积分特性无效。(目前我不太关心直立积分,但另一个问题是如何让mode=basemode=node特性协同工作。)

相关内容