我想用任意文本(而不仅仅是数字)来排版文本分数。提出了一个解决方案这里这是我的 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