下标/上标中的 \mathchoice

下标/上标中的 \mathchoice

我尝试使用重新定义某些数学关系,\mathchoice以便它们在用作下标和上标时不需要像原来那样分组。但是,下面的 MWE 会导致错误。

\documentclass{article}

\renewcommand{\sim}{\mathchoice{\mathrel{a}}{\mathrel{b}}{\mathrel{c}}{\mathrel{d}}}

\begin{document}
$X_\sim$
\end{document}

我意识到出现此错误是因为\mathchoice{...}命令用作下标时需要分组。但是,在所有数学样式中,只需用和括住定义即可\bgroup取消\egroup\mathrel有没有一种方法可以定义\sim,使其\sim在用作下标或上标时不需要分组,同时保持其数学关系?

答案1

简短的回答:不。

障碍在哪里?当 Knuth 开发 TeX 时,他希望能够输入

f'(x)  f''(x)  f'''(x)

而不是笨拙的

f^{\prime}(x)  f^{\prime\prime}(x)  f^{\prime\prime\prime}(x)

数学活跃字符由此诞生,也是其独特特征^(也是_对称性的特征):

当 TeX 扫描^_处于数学模式(分别为 catcode 7 和 8)时,它会执行宏扩展,并在第一个不可扩展的标记处停止(并忽略\relax沿途的空格和标记);如果此标记是{(即,具有 catcode 1 的显式或隐式字符标记),则整个组将用作上标或下标;否则当前数学原子的上标或下标字段将用下一个标记填充。

^^功能在数学模式下也有效,但在这里无关紧要。

你的尝试结果如何?是的,找到的第一个不可扩展的标记是\mathchoice,但是

X_\mathchoice

除了显示之外不会做任何有用的事情

! Missing { inserted.
<to be read again>
                   \mathchoice
l.6 $X_\sim
           $

如果你试图通过以下方式规避这个问题

\renewcommand{\sim}{{\mathchoice{...}{...}{...}{...}}}

你没有得到相对原子,因为参数中声明的任何内容都会\mathchoice被外面的括号取消。

可能的策略:_使用 catcode 12,但数学活跃,定义如下

  • 检查接下来的内容
  • 如果是{,则\sb这样做,支撑组将用作下标
  • 否则,设为<token>下一个标记,删除它并调用\sb{<token>}

如果你够大胆,你可以尝试并实现它,但要小心:它可能会破坏现有的构造。

相关内容