![如何重新定义命令以在保持其语法不变的情况下包含其自身](https://linux22.com/image/378346/%E5%A6%82%E4%BD%95%E9%87%8D%E6%96%B0%E5%AE%9A%E4%B9%89%E5%91%BD%E4%BB%A4%E4%BB%A5%E5%9C%A8%E4%BF%9D%E6%8C%81%E5%85%B6%E8%AF%AD%E6%B3%95%E4%B8%8D%E5%8F%98%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E5%8C%85%E5%90%AB%E5%85%B6%E8%87%AA%E8%BA%AB.png)
我需要使用\ae
等式中的命令作为变量,以便将其放在数学环境中,尽管我被迫使用\textit{\ae}
。
有没有办法只\ae
在数学环境中写入并获取所写结果\textit{\ae}
?
感谢您的时间。
答案1
保存 的定义\ae
并重新使用名称。必须使用\LetLtxMacro
来避免无限循环。
\documentclass{article}
\usepackage{amsmath,letltxmacro}
\makeatletter
% \serra@ae is the same as \ae
\LetLtxMacro\serra@ae\ae
\let\ae\relax % remove the definition for \ae
\DeclareRobustCommand{\ae}{%
\TextOrMath{\serra@ae}{\text{\normalfont\itshape\serra@ae}}%
}
\makeatother
\begin{document}
Here is \ae{} in text mode.
Here is $\ae$ in math mode. Also in subscripts: $X_{\ae}$
\end{document}
不过我更愿意
\newcommand{\mae}{\text{\normalfont\itshape\ae}}
\mae
并在数学模式下使用。
答案2
我不建议这样做,因为我认为更好的做法是使用\textit{\ae}
或定义另一个宏,例如
\newcommand*\mae{\textit{ae}}
但下面使用 进行了重新定义,将宏定义为后面的扩展内容。使用 禁止\edef
扩展其中的所有内容,但使用 扩展一次的除外。\edef
\noexpand
\ae
\unexpanded\expandafter{\ae}
\documentclass[]{article}
\edef\ae
{%
\relax\noexpand\ifmmode
\noexpand\textit{\unexpanded\expandafter{\ae}}%
\noexpand\else
\unexpanded\expandafter{\ae}%
\noexpand\fi
}
\begin{document}
\begin{equation}
\ae = \textit{\ae}
\end{equation}
\end{document}