Produzindo um argumento vazio

Produzindo um argumento vazio

Tenho usado a resposta de Herbert emVerifique se há argumento de macro vaziopara verificar se um argumento está vazio. Fiquei me perguntando se é possível expandir a solução de Herbert para detectar também se um argumento macro é \empty. Se isso falhar, eu esperava aprender uma maneira de definir uma macro para que ela \ifemptyse comportasse como eu quero. O código a seguir mostra que \ifemptydetecta corretamente um argumento de macro vazio, mas não o considera \emptyum argumento vazio. Em seguida, faço algumas tentativas malsucedidas de definir uma macro vazia.

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

Responder1

É claro que destokenizado \emptynão está vazio. Breve comentário aos quatro exemplos.

  1. Está como esperado.

  2. Não é vazio como foi dito no início.

  3. Você está definindo \z, após o qual deve ser string % \ifempty. A definição é errônea, mas nunca usada. Depois existe {3. empty}{3. nonempty}e está escrito como um texto comum.

  4. Agora \zestá devidamente definido, mas zé claro que não está vazio.

Se você quiser simplesmente comparar equivalência de macros, \ifxpode ser mais adequado para você.

informação relacionada