
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 \ifempty
se comportara como quiero. El siguiente código muestra que \ifempty
detecta correctamente un argumento de macro vacío, pero no \empty
lo 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
\empty
Por supuesto, Detokenized no está vacío. Breve comentario a los cuatro ejemplos.
Es como se esperaba.
No está vacío como se dijo al principio.
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.Now
\z
está correctamente definido, peroz
por supuesto no está vacío.
Si simplemente desea comparar la equivalencia de macros, \ifx
puede ser más adecuado para usted.