如何制作数学模式非 Ord 宏?

如何制作数学模式非 Ord 宏?

我想创建一个新的宏,它的作用就像它自己的字符一样。具体来说,我想\macro扩展到a\kern0.5em b,但仍然充当Rel字符(即1\macro1在 周围留出一个小空格,a b类似于=中的1=1空格)。

我试过\def\macro{\mathrel{a\kern0.5em b}},但当它用作指数时会出现问题:x^\macro扩展为x^\mathrel{ ... },TeX 不喜欢它并会抛出错误。我知道我可以像 一样将它括起来x^{\macro},但我正在寻找一种不必每次都用括号括起来的方法。我还知道Rel当用作单独指数时它是否是原子并不重要,但我希望它在所有情况下都能工作,无论是否是指数。

有没有办法制作一个宏(带有类似{组)而不被视为字符}{a\kern0.5em b}Ord当用作指数或下标时有效吗?

答案1

不,这是不可能的。只要你将某个东西括在括号组中,它就会变成 Ord 原子。TeXbook 第 26 章“数学模式摘要”对此有非常具体的说明:

{<数学模式材料> }。类别 1 的字符标记或与此类字符标记相等的控制序列会导致 TeX 开始新的分组级别,并开始处理新的数学列表。当这样的组以 ' ' 结尾时,\bgroupTeX将使用生成的数学列表作为新 Ord 原子的核心,并将其附加到当前列表中。但是,如果生成的数学列表是单个 Acc 原子(即重音量),则将附加该原子本身。\let}

为了使语法x^\macro起作用,内容\macro必须是数学字段。

<superscript><math field>。<superscript> 命令是类别 7 的显式或隐式字符标记。如果当前列表未以原子结尾,则将附加一个所有字段均为空的新 Ord 原子;因此,在所有情况下,当前列表都将以原子结尾。此原子的上标字段应为空;通过将其更改为指定 <math field> 的结果,可使其变为非空。

然而,数学字段要么是单个符号,要么是括号组

<数学字段>用于指定原子的原子核、上标或下标。当<数学字段>为<数学符号>时,FA该符号的数字进入原子域。否则 <math field> 以 ' {' 开头,这会导致 TeX 进入新的分组级别并开始新的数学列表;随后的 <math modematerial> 以 ' }' 结尾,此时组结束,生成的数学列表进入原子域。如果数学列表结果只是一个没有下标或上标的 Ord 原子,或者是一个核心是 Ord 的 Acc,则括号会被有效删除。


然而,你可以简单地利用脚本样式中 Rel 原子周围的间距为零这一事实,并使用以下定义

\def\macro{{{}\mathrel{a\kern0.5em b}{}}}

$x \macro y$

$z^{x \macro y}$

$z^\macro$ % Brrr...

\bye

在此处输入图片描述

相关内容