提出空洞的论点

提出空洞的论点

我一直在使用赫伯特的答案检查空的宏参数检查参数是否为空。我想知道是否可以扩展 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不是空的。对这四个例子进行简短评论。

  1. 和预想的一样。

  2. 正如一开始所说的那样,是非空的。

  3. 你正在定义\z,其后应该是字符串% \ifempty。该定义是错误的,但从未使用过。然后是{3. empty}{3. nonempty},它被写成普通文本。

  4. 现在\z定义正确,但z当然不是空的。

如果您只想简单地比较宏的等效性,\ifx可能更适合您。

相关内容