我有:
\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}
但这违反了可选参数仅应修改命令的默认行为而不应将其更改为完整其他命令的原则。所以我不建议这样做。