我无法将 Opentype 功能“cvNN”和“ssty”结合起来

我无法将 Opentype 功能“cvNN”和“ssty”结合起来

在我维护的数学字体中,我使用CharacterVariant功能来切换数学中的希腊语变体,因为该cv06功能使\phi输出 mitvarphi(U+1D711) 而不是mitphi(U+1D719) 成为默认输出。它有效,但我最近注意到这些变体的上标存在问题:当未启用该功能时,将使用加粗的字形mitphi.st(和mitphi.sst)(如果可用)表示上标cv06,但字形 mitvarphi.st(和mitvarphi.sst) 是不曾用过是否cv06已启用。

Fontforge 内部结构:

  • 在 GSUB 查找ssty功能中,所有cvNN; 两行 mitphi mitphi.st mitphi.sstmitvarphi mitvarphi.st mitvarphi.sst 都在那里。
  • 我尝试在功能中添加线条mitphi.st mitvarphi.st和 ,但即使颠倒和功能的顺序也无济于事。mitphi.sst mitvarphi.sstcv06sstycv06

下面是用 LuaLaTeX 编译的示例文件 [我在mitphi.stmitvarphi.st字形上都添加了一个水平小条,以使问题更加明显]:

\documentclass{article}
\usepackage{unicode-math}

\begin{document}
\setmathfont{XCharter-Math.otf}
\[a^{φ + c^{φ}} + φ\]
\[a^{\phi + c^{\phi}} + \phi\]
\setmathfont{XCharter-Math.otf}[CharacterVariant={6}]
\[a^{\phi + c^{\phi}} + \phi\]
\end{document}

和输出(最新的 TEXLive2023):

在此处输入图片描述

横线出现在mitvarphi.st(第一行)和mitphi.st(第二行)上,但没有出现在第三行。在第三行上,上标和的上标mitvarphi是通过缩减从基本mitvarphi字形绘制的,因此上标与第一行相比看起来太细了。

更糟糕的是:使用 XeLaTeX 编译时,最后一行如下所示:

在此处输入图片描述

这意味着该cv06功能对于 XeLaTeX 的上标根本不起作用。

我错过了什么?

@mickep 评论后更新(2023/10/18)

反转特征的顺序(cvNN ssty) 看起来是正确的做法。通过此设置,XeLaTeX 可以按预期工作,luametatex 也是如此(根据@mickep):第一行和最后一行相同。剩下的问题是 LuaTeX 打印为第三行:

在此处输入图片描述

cv06不适用于上标)。

这是否意味着 LuaTeX 或 unicode-math 中存在错误?

更新(2024/02/17)

最后,此问题需要两项修复:

  1. 在字体方面:调用该ssty功能。这在、、和的cvNN当前版本中已经完成。这对于 XeLaTeX 来说已经足够了。XCharter-MathErewhon-MathConcrete-MathEuler-MathKPfonts
  2. LuaTeX 需要 3.27 版luaotfload。感谢 Marcel Krüger 和 LaTeX3 团队,上标的输出现在与 LuaLaTeX 的预期一致!

相关内容