newcommand - 매개변수가 비어 있을 때 조건부 실행

newcommand - 매개변수가 비어 있을 때 조건부 실행

잘 작동하는 다음 명령 정의(항목 목록의 항목)가 있습니다.

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

두 번째 대안 \NewDocumentCommandxparse패키지. 의 장점 \NewDocumentCommand은 끝 부분을 포함하여 원하는 위치에 선택적 인수를 넣을 수 있다는 것입니다.

\NewDocumentCommand{\entry}{ mmmo }{%
  #1&\parbox[t]{11.2cm}{%
    #2%
    \hfill%
    #3%
    \IfNoValueF{#4}{\\#4}% print #4 when it is given
  }\\}

mmmo3가지가 있다고 하네요부수적인 주장과 하나영형선택적 인수. 다시 말하지만, 코드와의 유일한 실제 차이점은 매크로가 사용되는 방식입니다.

\entry{first}{second}{third}% without optional argument
\entry{first}{second}{third}[fourth]% with optional argument

관련 정보