コマンドを使用してコマンドを更新する

コマンドを使用してコマンドを更新する

私が持っている:

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

クラス ファイルで、ドキュメント自体でコマンドをよりきれいに設定できるようにします。

ドキュメントに次の内容が含まれている場合、これはすべて機能します。

\test{some content}

\test文書内で が使用されている場合は、「some content」を出力します。

\testしかし、新しい値に設定しようとすると

\test{some other content} 

後で、 の値\testと「その他のコンテンツ」を出力するだけのようです。

\testLaTeX が を展開して、実際に を呼び出して\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}

しかし、これは、オプションの引数はコマンドのデフォルトの動作を変更するだけで、完全に別のコマンドに変更してはならないという原則に反します。したがって、これを行うことはお勧めしません。

関連情報