如何在没有花括号的上标中展开宏?

如何在没有花括号的上标中展开宏?

假设我们有

\newcommand{\inv}{-1}

我们希望能够用 来$A^\inv$代替,$A^{\inv}$但这样做不行——只有减号是上标。

无意中我发现了一个可能的解决方案,即将宏定义为

\newcommand{\inv}{\kern0pt\relax -1}

但由于我不知道为什么这有效或者这是否是一个好的解决方案,所以我决定无论如何都要问一下。

\documentclass{article}
\newcommand{\inv}{\kern0pt\relax -1}
\begin{document}
$A^\inv$ $A^{-1}$.
\end{document}

答案1

在定义中添加一对括号\inv就可以了。

 \newcommand{\inv}{{-1}}

现在,当您执行 时A^\inv,它将扩展为A^{-1}而不是A^-1

答案2

我认为,在这种情况下,最好让命令“主动”控制输出。所以我会使用\inv{A},读作的逆A.这样你就有满的控制输出。

\newcommand*\inv[1]{#1^{-1}}
$\inv{A}$

A^\inv和之间的区别\inv{A}在于,在第一种情况下,您必须进行调整\inv才能正确使用^,而在第二种情况下,您需要\inv全力以赴。

只有在有利于代码的可读性(并且不损害维护性)的情况下,我才会考虑“被动”方法。考虑一下这个荒谬的例子

a + b % preferred
\add{a}{b} % easily to manage, but far less readble

在这种情况下,\inv{A}我认为不会损害可读性/易理解性,所以我会选择这样做。

相关内容