
私が持っている:
\newcommand{\test}[1]{\renewcommand{\test}{#1}}
クラス ファイルで、ドキュメント自体でコマンドをよりきれいに設定できるようにします。
ドキュメントに次の内容が含まれている場合、これはすべて機能します。
\test{some content}
\test
文書内で が使用されている場合は、「some content」を出力します。
\test
しかし、新しい値に設定しようとすると
\test{some other content}
後で、 の値\test
と「その他のコンテンツ」を出力するだけのようです。
\test
LaTeX が を展開して、実際に を呼び出して\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}
しかし、これは、オプションの引数はコマンドのデフォルトの動作を変更するだけで、完全に別のコマンドに変更してはならないという原則に反します。したがって、これを行うことはお勧めしません。