为什么我的动词宏在数学模式下需要花括号?

为什么我的动词宏在数学模式下需要花括号?

谢谢这个答案,我写了这样的代码:

\documentclass{article}
\NewDocumentCommand\foo{v}{\texttt{#1}}
\catcode`\|\active
\AtBeginDocument{\catcode`\|\active\def|{\foo|}}
\catcode`\| 12 %
\begin{document}
$a_|b|$
\end{document}

我越来越:

! Missing { inserted.
<to be read again>
                   \tex_let:D
l.15 $a_|
         b|$.

但是,$a |b|$运行正常。也$a_{|b|}$可以运行。是否可以修复此问题并使其可以使用$a_|b|$(没有花括号|b|)?

答案1

事实上,一些命令(作为未记录的扩展的偶然序列)不会对可怕的输入结构(例如x_\text{foo}或)产生错误,但这x^\frac12 并不意味着需要将此类内容复制到其他地方。记录的 latex 语法始终用括号括住下标。

话虽如此,假设您想忽略此建议……

\documentclass{article}
\NewDocumentCommand\foox{v}{\texttt{#1}\egroup}
\catcode`\|\active
\def\foo{\bgroup\foox}
\AtBeginDocument{\catcode`\|\active\def|{\bgroup\foox|}}
\catcode`\| 12 %
\begin{document}
$a_|b|$
\end{document}

相关内容