
나는 Herbert의 답변을 사용하고 있습니다.빈 매크로 인수가 있는지 확인하세요.인수가 비어 있는지 확인합니다. 매크로 인수가 있는지 감지하기 위해 Herbert의 솔루션을 확장할 수 있는지 궁금합니다 \empty
. 이것이 실패하면 \ifempty
내가 원하는 대로 작동하도록 매크로를 설정하는 방법을 배우고 싶었습니다 . 다음 코드는 \ifempty
빈 매크로 인수를 올바르게 감지하지만 \empty
빈 인수로 간주하지 않는 것을 보여줍니다. 그런 다음 빈 매크로를 정의하려는 시도가 몇 번 실패했습니다.
\documentclass{article}
\makeatletter
\def\ifempty#1{%
\if\relax\detokenize{#1}\relax%
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi}
\makeatother
\begin{document}
\ifempty{}{1. empty}{1. nonempty}
\ifempty{\empty}{2. empty}{2. nonempty}
\def\z%
\ifempty{\z}{3. empty}{3. nonempty}
\def\z{}%
\ifempty{\z}{4. empty}{4. nonempty}
\end{document}
답변1
\empty
물론 탈토큰화된 것은 비어 있지 않습니다. 네 가지 예에 대한 간단한 설명입니다.
예상대로입니다.
처음에 말했듯이 비어 있지 않습니다.
을 정의하고 있으며
\z
그 뒤에는 string 이 있어야 합니다% \ifempty
. 정의가 잘못되었지만 결코 사용되지 않았습니다. 그런 다음{3. empty}{3. nonempty}
일반 텍스트로 작성됩니다.Now는
\z
적절하게 정의되어 있지만z
물론 비어 있지는 않습니다.
단순히 매크로의 동등성을 비교하고 싶다면 \ifx
매크로가 더 적합할 수 있습니다.