如何重新定义命令以在保持其语法不变的情况下包含其自身

如何重新定义命令以在保持其语法不变的情况下包含其自身

我需要使用\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}

相关内容