명령을 사용하여 명령 갱신

명령을 사용하여 명령 갱신

나는 가지고있다 :

\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}

그러나 이는 선택적 인수가 명령의 기본 동작만 수정해야 하며 이를 완전한 다른 명령으로 변경해서는 안 된다는 원칙에 위배됩니다. 그래서 나는 이것을 권장하지 않습니다.

관련 정보