改变命令的行为

改变命令的行为

如果\foo{Complete}编译为

状态:完成

我怎样才能更改我的 LaTeX 代码以便\foo{Complete}编译为

状态:完成

只需在一个地方进行更改。我无法使用 renewcommand 执行此操作。有人知道正确的工具吗?

答案1

\renewcommand尊重分组:

\documentclass{article}

\newcommand{\foo}[1]{The Status: #1} % define \foo

\begin{document}

Some text, \foo{Complete}

More text, {\renewcommand{\foo}[1]{Status: #1}\foo{Complete}}

Some text, \foo{Complete}

\end{document}

在此处输入图片描述

更好的解决方案可能是定义一个 *-variant,它提供了更多的灵活性、控制力和代码维护的简易性。

\documentclass{article}
\usepackage{xparse}

\NewDocumentCommand{\foo}{sm}{%
  \IfBooleanTF{#1}{S}{The s}tatus: #2%
}

\begin{document}

Some text, \foo{Complete}

More text, \foo*{Complete}

Some text, \foo{Complete}

\end{document}

在此处输入图片描述

答案2

怎么样:

\documentclass{article}
\newcommand{\foo}[1]{The Status: #1} % define \foo
\begin{document}
Some text, \foo{Complete}

\let\oldfoo\foo % save \foo as \oldfoo
\renewcommand{\foo}[1]{Status: #1} % renew \foo
More text, \foo{Complete}

\let\foo\oldfoo % revert \foo to its original definition
and so on
\end{document}

相关内容