IBM Plex 文本分数与 ConTeXt

IBM Plex 文本分数与 ConTeXt

我想用任意文本(而不仅仅是数字)来排版文本分数。提出了一个解决方案这里这是我的 ConTeXt 实现:

\usetypescriptfile[ibmplex]
\setupbodyfont[ibmplex, 12pt]
\definefontfeature[numr][default][numr=yes]
\definefontfeature[dnom][default][dnom=yes]
\definehighlight[textnumr][default][style={\feature[+][numr]}]
\definehighlight[textdnom][default][style={\feature[+][dnom]}]

\definefontfeature[frac][default][frac=yes]
\definehighlight[textfrac][default][style={\feature[+][frac]}]

\def\fancyfrac#1#2{\textnumr{#1} \Uchar"2044 \textdnom{#2}}

\starttext
\fancyfrac{1}{8} % The 1 is not properly kerned
\textfrac{1/8} % Proper kerning
\stoptext

但是,该功能似乎numr无法正常工作。日志中有一行内容:

system          > error: invalid parent default for textnumr, default defined too (best check it)

顺便说一下,我在 Ubuntu 18.04 上使用最新版本lmtx。有人知道这里的问题是什么吗?

[编辑]:我根据 Wolfgang 提供的答案想出了一个解决方案,该解决方案似乎非常有效(尽管我不知道为什么):

\setupbodyfont [ibmplex]

\definefontfeature [f:numr] [numr=yes]
\definefontfeature [f:dnom] [dnom=yes]
\definefontfeature [f:frac] [frac=yes]
\define[2]\AugmentedVulgarFraction{\feature[+][f:frac]\vulgarfraction{{\feature[+][f:numr]#1}\:}{\:\feature[+][f:dnom]#2}}

[编辑2]:经过与 Wolfgang 进一步讨论,我最终使用了以下宏:

\definesymbol[vulgarfraction][\textfraction]
\define[2]\TextFraction{\chardef\vulgarfractionmethod2\vulgarfraction{#1}{#2}}

答案1

分子和斜线之间出现小空格是因为在命令定义中那里有一个空格\fancyfrac

\def\fancyfrac#1#2{\textnumr{#1} \Uchar"2044 \textdnom{#2}}

当你移除空间时,间隙就会消失。

\def\fancyfrac#1#2{\textnumr{#1}\textfraction\textdnom{#2}}

出现错误消息是因为您的highlight定义从实例继承了它的值default,但是当您将其更改为时,不存在具有此名称的实例

\definehighlight [textnumr] [..,..=..,..]

消息消失。

当您删除命令并应用分数命令中的功能时,您可以节省几行highlight,也不需要继承default分子和分母的功能。

\setupbodyfont [ibmplex]

\definefontfeature [f:numr] [numr=yes]
\definefontfeature [f:dnom] [dnom=yes]

\define[2]\TextFraction
  {{\feature[+][f:numr]#1}%
    \textfraction
   {\feature[+][f:dnom]#2}}

\starttext

0123456789/0123456789

{\setfractions 0123456789/0123456789}

\TextFraction{1}{2}

\stoptext

相关内容