
내 문서에 '요구사항'을 적는 명령을 정의했습니다. 자동으로 스타일을 지정하고 번호를 매기고 번호를 얻기 위해 참조할 수 있는 레이블을 생성합니다. 정말 훌륭합니다. 그러나 때로는 요구사항을 참조할 때 요구사항의 전체 텍스트를 반복하여 독자가 문서로 돌아갈 필요가 없도록 하고 싶습니다. 물론 다시 작성하고 싶지는 않습니다. 왜냐하면 한 곳에서 변경하면 오류가 발생하기 쉽기 때문입니다. 명령을 사용하여 텍스트를 어떻게 반복합니까?
내 명령 정의의 현재 형식은 다음과 같습니다.
\newcommand{\requirement}[2]{
\vspace{10pt}
\noindent
\textbf{
\refstepcounter{reqnum}
\label{req:#2}
R\thereqnum: #1
}
}
나는 다음 시도의 다양한 변형을 시도했지만 소용이 없었습니다.
\newcommand{\requirement}[2]{
\vspace{10pt}
\noindent
\textbf{
\refstepcounter{reqnum}
\label{req:#2}
R\thereqnum: #1
}
\newcommand{\req{#2}}{#1}
}
답변1
\csname <string>\endcsname
명령을 내리는 가 있습니다 \<string>
. 또한 사용하기 매우 편리한 etoolbox의 매크로를 사용할 수도 있습니다.
\newcommand{\req{#2}}{#1}
으로 바꾸면 \expandafter\def\csname req#2\endcsname {#1}
작동합니다.
\def\name
매크로를 정의합니다 \name
. 와는 반대로 \newcommand
이미 존재하는지 묻지 않습니다 . 따라서 이미 존재 \name
하는 경우 덮어씁니다 \name
. 이는 유용할 수 있지만 일반적으로 해롭습니다.
just 를 쓰면 lonesome (및 누락 ) 이 있기 때문에 \def\csname req#2\endcsname {<definition>}
재정의를 시도하고 오류가 발생합니다 .\csname
\endcsname
\
\expandafter
앞에 넣으면 \def
,
\expandafter\def\csname req#2\endcsname {<definition>}
된다
\def\req<argument2> {<definition>}
그리고 짜잔, 그것은 정의되었습니다. \expandafter
다음 토큰의 확장을 지연합니다(명령 시퀀스일 수 있음). 두 사이클 동안 두 개의 확장 후 지연이 발생합니다.