我有一些宏,它们的扩展会产生类似如下的结果:
\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}
没有)。