변수가 정의된 경우 문자열을 포함하고, 그렇지 않으면 공백으로 둡니다.

변수가 정의된 경우 문자열을 포함하고, 그렇지 않으면 공백으로 둡니다.

나는 인수가 주어졌을 때 어떤 것이 조건부로 나타나도록 노력하고 있습니다.

내 문서의 시작 부분에 두 가지 데이터를 채우고 싶습니다.

% Pre or Post epoxy?
\epoxy{pre}
% Checklist ID number
\idnum{123456}

그런 다음 이 형식으로 표시되도록 하세요.

(\@epoxy-epoxy -- \@idnum)

주어진 경우 문서의 다양한 위치에 있고 그렇지 않은 경우 해당 줄을 완전히 공백으로 둡니다.

수업 문서를 이렇게 설정했습니다.

\def\epoxy#1{\gdef\@epoxy{#1}}
\def\idnum#1{\gdef\@idnum{#1}}

문서 헤더를 다음 중 하나로 정의하고 싶습니다.

\AtBeginDocument {\listtitle \newline (\@epoxy-epoxy -- \@idnum) \newline \header \begin{checklist}}

또는

\AtBeginDocument {\listtitle \newline \newline \header \begin{checklist}}

idnum 및 Epoxy 인수가 제공되는지 여부에 따라 다름

제가 할 수 있는 방법이 있나요?

답변1

초기화 \@epoxy하고 \@idnum수정된 항목으로; 그런 다음 매크로를 정의하십시오 \@print@epoxy@idnum.

\let\@epoxy\hfuzz % initialize
\let\@idnum\vfuzz % initialize
\def\epoxy#1{\gdef\@epoxy{#1}}
\def\idnum#1{\gdef\@idnum{#1}}
\def\@print@epoxy@idnum{%
  \ifx\@epoxy\hfuzz
    \expandafter\@gobble
  \else
    \expandafter\@firstofone
  \fi
  {\ifx\@idnum\vfuzz
     \expandafter\@firstoftwo
   \else
     \expandafter\@secondoftwo
   \fi
   {\mbox{}}{(\@epoxy--epoxy -- \@idnum)}%
  }%
}

답변2

조건문을 사용할 필요는 없으며 두 명령을 모두 사용하지 않는 한 내부 매크로가 아무것도 생성하지 않도록 조정하면 됩니다. 따라서 여기서 버전 1-3은 빈 줄을 생성하지만 4와 5는 두 용어를 표시합니다.

여기에 이미지 설명을 입력하세요

\documentclass{article}

\def\inittitle{%
\def\stuff{\mbox{}}%
\def\xidnum##1{}%
\def\epoxy##1{\def\stuff{\xidnum{##1-epoxy -- }}}%
\def\idnum##1{\def\xidnum####1{####1##1}}%
}


\setlength\parskip{20pt}


\begin{document}

\inittitle
1title \newline \stuff  \newline zzz


\inittitle
\epoxy{pre}
2title \newline \stuff  \newline zzz


\inittitle
\idnum{123456}
3title \newline \stuff  \newline zzz



\inittitle
\epoxy{pre}
\idnum{123456}
4title \newline \stuff  \newline zzz


\inittitle
\idnum{123456}
\epoxy{pre}
5title \newline \stuff  \newline zzz

\end{document}

답변3

각각에 대해 부울 조건을 설정한 다음 할당 시 true로 설정할 수 있습니다. 항상 아무것도 없거나 둘 다 있는 경우 하나의 조건으로 충분합니다. 여기에 정의된 내용이 기록됩니다.

\documentclass{article}
\newif\ifepoxy\epoxyfalse
\newif\ifidnum\idnumfalse
\makeatletter
\def\epoxy#1{\gdef\@epoxy{#1}\epoxytrue}
\def\idnum#1{\gdef\@idnum{#1}\idnumtrue}
\def\writeStuff{%
  \ifepoxy
  \@epoxy-epoxy
  \fi
  \ifidnum
  -- \@idnum
  \fi}
\makeatother
\begin{document}
Test1: \writeStuff

\epoxy{pre}
Test2: \writeStuff

\idnum{123456}
Test3: \writeStuff

\end{document}

여기에 이미지 설명을 입력하세요


편집 - 단순화

명령이 정의되었는지 여부를 테스트하려면 를 사용할 수 있습니다 \@ifundefined. 정의를 별도로 테스트하려면 다음과 같이 이전 답변을 단순화할 수 있습니다.

\documentclass{article}
\makeatletter
\def\epoxy#1{\gdef\@epoxy{#1}}
\def\idnum#1{\gdef\@idnum{#1}}
\def\writeStuffII{%
  \@ifundefined{@epoxy}{}{\@epoxy-epoxy}%
  \@ifundefined{@idnum}{}{ -- \@idnum}
}
\makeatother
\begin{document}

대신에 무엇이든 작성하기 위해 둘 다 정의해야 하는 경우 조건을 중첩할 수 있습니다.

\def\writeStuffIII{%
  \@ifundefined{@epoxy}{}{%
    \@ifundefined{@idnum}{}{\@epoxy-epoxy -- \@idnum}}
}

관련 정보