使用命令来更新命令

使用命令来更新命令

我有:

\newcommand{\test}[1]{\renewcommand{\test}{#1}}

在类文件中,以便在文档本身中更清晰地设置命令。

如果文档包含以下内容,那么这一切都有效:

\test{some content}

\test并在文档中使用时输出“一些内容” 。

但当我尝试使用设置\test一个新值时

\test{some other content} 

后来,它似乎只是输出值\test,然后输出“其他一些内容”。

我如何停止 LaTeX 扩展\test并实际调用来\renewcommand更新值?

答案1

第一次使用\test将重新定义\test为不带参数的命令,该命令仅输出第一次调用的参数。因此您的建议不起作用。您必须使用类似以下内容:

\newcommand{\test}{}
\newcommand{\settest}[1]{\renewcommand{\test}{#1}}

然后你可以使用

\settest{some content}
\test, \test, \test% shows "some contents" three times
\settest{some other content}
\test, \test% shows "some other contents" two times

您可以使用可选参数,例如,用来xparse区分存储参数和参数的输出:

\documentclass{article}
\usepackage{xparse}

\newcommand*{\testvalue}{}
\NewDocumentCommand{\test}{o}{%
  \IfNoValueTF{#1}{\testvalue}{\def\testvalue{#1}}%
}

\begin{document}
  Define: \test[some content]

  Show: \test, \test

  Define: \test[some other contents]

  Show: \test, \test.
\end{document}

但这违反了可选参数仅应修改命令的默认行为而不应将其更改为完整其他命令的原则。所以我不建议这样做。

相关内容