잘 작동하는 다음 명령 정의(항목 목록의 항목)가 있습니다.
\newcommand{\entry}[4]{%
#1&\parbox[t]{11.2cm}{%
#2%
\hfill%
#3%
\\#4%
}\\}
이제 네 번째 매개변수가 비어 있을 수 있는 테스트 사례가 있습니다. 이 경우 이전에 정의된 새 줄을 표시하고 싶지 않습니다. 나는 다음 접근 방식을 시도했습니다.
\newcommand{\entry}[4]{%
#1&\parbox[t]{11.2cm}{%
#2%
\hfill%
#3%
\ifthenelse{\isempty{#4}}{}{\\#4}%
}\\}
하지만 나에게 오류가 발생합니다.
Undefined control sequence. ^^I{test test2}
Missing number, treated as zero. ^^I{test test2}
Missing = inserted for \ifnum. ^^I{test test2}
Missing number, treated as zero. ^^I{test test2}
도와주시겠어요?
답변1
댓글에서 문제가 해결된 것으로 보이지만 두 가지 다른 접근 방식을 제안하고 싶습니다.
첫째, \newcommand
첫 번째 인수인 경우 하나의 선택적 인수가 있는 명령을 쉽게 정의할 수 있습니다. 이 기능을 사용하면 매크로를 다음과 같이 다시 작성할 수 있습니다.
\newcommand{\entry}[4][]{%
#2&\parbox[t]{11.2cm}{%
#3%
\hfill%
#4%
\if\relax\detokenize{#1}\relax\else\\#1\fi
}\\}
[]
기본적으로 비어 있다고 말합니다 #1
. 이 매크로는 매개변수 번호를 변경했다는 점을 제외하면 본질적으로 귀하의 매크로와 동일합니다. 주요 차이점은 매크로를 사용하는 방법에 있습니다.
\entry{second}{third}{fourth}
선택적 매개변수가 없거나 선택적 매개변수를 제공하려는 경우:
\entry[first]{second}{third}{fourth}
두 번째 대안 \NewDocumentCommand
은xparse패키지. 의 장점 \NewDocumentCommand
은 끝 부분을 포함하여 원하는 위치에 선택적 인수를 넣을 수 있다는 것입니다.
\NewDocumentCommand{\entry}{ mmmo }{%
#1&\parbox[t]{11.2cm}{%
#2%
\hfill%
#3%
\IfNoValueF{#4}{\\#4}% print #4 when it is given
}\\}
mmmo
3가지가 있다고 하네요중부수적인 주장과 하나영형선택적 인수. 다시 말하지만, 코드와의 유일한 실제 차이점은 매크로가 사용되는 방식입니다.
\entry{first}{second}{third}% without optional argument
\entry{first}{second}{third}[fourth]% with optional argument