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