我一直在使用赫伯特的答案检查空的宏参数检查参数是否为空。我想知道是否可以扩展 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
,其后应该是字符串% \ifempty
。该定义是错误的,但从未使用过。然后是{3. empty}{3. nonempty}
,它被写成普通文本。现在
\z
定义正确,但z
当然不是空的。
如果您只想简单地比较宏的等效性,\ifx
可能更适合您。