双下标

双下标

我有一些宏,它们的扩展会产生类似如下的结果:

\documentclass{amsart}
\begin{document}
\({T_2}_k\)
\end{document}

编译没问题;从技术上讲,这是一个双下标,但括号将其隐藏在 TeX 中。然而,在某些情况下,宏会生成类似以下内容:

\documentclass{amsart}
\begin{document}
\({\widetilde T_2}_k\)
\end{document}

这会产生错误

! Double subscript.
l.3 \({\widetilde T_2}_
                       k\)
? 

如果我直接生成文本,我可以执行\(\widetilde T_{2k}\)或类似操作,但这不是一个选项。

问题 1。为什么第一个文档可以编译,而第二个文档却产生错误?

问题2如果不改变宏的定义,有没有办法

\documentclass{amsart}
\newcommand\macroa{\widetilde T_2}
\newcommand\macrob[1]{#1_k}
\begin{document}
\(\macrob\macroa\)
\end{document}

编译——例如,通过添加括号,如果第一个定义是这样的:

\documentclass{amsart}
\newcommand\macroa{T_2}
\newcommand\macrob[1]{#1_k}
\begin{document}
\(\macrob{{\macroa}}\)
\end{document}

编辑:现在我意识到这是一个 mathaccents 的错误,而不仅仅是 的错误\widetilde,我看到了一个很好的扩展@HendrikVogt的答案@egreg对 TeX 的内部进行必要的挖掘,以了解发生了什么。特别是,

\documentclass{amsart}
\newcommand\macroa{\widetilde T_2}
\newcommand\macrob[1]{#1_k}
\begin{document}
\(\macrob{{{}\macroa}}\)
\end{document}

作品(虽然显然更自然

\documentclass{amsart}
\newcommand\macroa{\widetilde T_2}
\newcommand\macrob[1]{#1_k}
\begin{document}
\(\macrob{{}\macroa}\)
\end{document}

没有)。

相关内容