Producir un argumento vacío

Producir un argumento vacío

He estado usando la respuesta de Herbert enCompruebe si hay un argumento de macro vacíopara comprobar si un argumento está vacío. Me preguntaba si es posible ampliar la solución de Herbert para detectar también si un argumento macro es \empty. De no ser así, esperaba aprender una forma de configurar una macro para que \ifemptyse comportara como quiero. El siguiente código muestra que \ifemptydetecta correctamente un argumento de macro vacío, pero no \emptylo considera un argumento vacío. Luego, hago un par de intentos fallidos para definir una macro vacía.

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

Respuesta1

\emptyPor supuesto, Detokenized no está vacío. Breve comentario a los cuatro ejemplos.

  1. Es como se esperaba.

  2. No está vacío como se dijo al principio.

  3. Estás definiendo \z, después del cual debería estar la cadena % \ifempty. La definición es errónea, pero nunca se utiliza. Luego existe {3. empty}{3. nonempty}y está escrito como un texto ordinario.

  4. Now \zestá correctamente definido, pero zpor supuesto no está vacío.

Si simplemente desea comparar la equivalencia de macros, \ifxpuede ser más adecuado para usted.

información relacionada