If 문과 변수

If 문과 변수

if 문을 이해하는 데 도움이 필요합니다.

LaTeX에서 다음 의사코드를 어떻게 만드나요?

\newcommand{\@leader}{}
\newcommand{\leader}[1]{\renewcommand\@leader{#1}}

\newcommand{\donow}{
    \if \@leader == {}        %aka blank, null, empty
        this is the false     %do false
    \else   
        \@leader              %do leader
    \fi
}

사용자가 문서에 다음을 추가하면

\leader{
    \begin{itemize}
        \item this is an item
        \item this is also an item
    \end{itemize}
}

\donow

\leader{}

\donow

다음을 인쇄하세요

*This is an item

*this is also an item

this is the false

변수에 대한 유일한 질문은 내가 가지고 있는 솔루션이 실제로 변수를 만드는 가장 좋은 방법인가 하는 것입니다.

답변1

를 사용하여 매크로 간을 테스트할 수 있습니다 \ifx. 즉, 의 정의가 및 실행의 정의 와 일치하는지 \ifx<csA><csB><true>\else<false>\fi여부를 테스트합니다 .<csA><csB><true><false>

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

\documentclass{article}

\makeatletter
\newcommand{\@emptymacro}{}% Used to test against an empty macro
\newcommand{\@something}{}
\newcommand{\something}[1]{\renewcommand\@something{#1}}

\newcommand{\donow}{%
  \ifx\@something\@emptymacro %aka blank, null, empty
    this is the false     %do false
  \else
    \@something           %do something
  \fi
}
\makeatother

\begin{document}
\something{%
  \begin{itemize}
    \item this is an item
    \item this is also an item
  \end{itemize}
}

\donow

\something{}

\donow

\end{document}

etoolbox유사한 검사 메커니즘을 제공합니다.

\usepackage{etoolbox}
\makeatletter
\newcommand{\@something}{}
\newcommand{\something}[1]{\renewcommand\@something{#1}}

\newcommand{\donow}{%
  \ifdefempty{\@something}{%aka blank, null, empty
    this is the false     %do false
  }{%
    \@something           %do something
  }%
}
\makeatother

답변2

주어진 작업에 대한 표준 TeX 코드는 다음과 같습니다:

\def\something#1{\def\internal{#1}%
   \ifx\internal\empty the parameter is empty.\else it is nonempty.\fi
}

위 코드의 문제점은 할당이 \something포함되어 있기 때문에 매크로를 확장할 수 없다는 것입니다 \def. 동일한 테스트로 확장 가능한 매크로가 필요한 경우 매개 변수의 첫 번째 토큰으로 사용되지 않은 토큰을 선택해야 하며(예: ?예) 다음과 같이 작성할 수 있습니다.

\def\something#1{\ifx?#1?the parameter is empty.\else it is nonempty.\fi}

매개변수의 첫 번째 토큰으로 절대 발생하지 않는 토큰이 무엇인지 모른다면 \detokenize예를 들어 eTeX에서 확장 가능한 기본 요소를 사용할 수 있습니다.

\if\penalty\detokenize{#1}\penalty the parameter empty.\else non-empty.\fi

관련 정보