產生一個空參數

產生一個空參數

我一直在使用赫伯特的答案檢查巨集參數是否為空檢查參數是否為空。我想知道是否可以擴展赫伯特的解決方案來檢測宏參數是否為\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

Detokenized\empty當然不是空的。對四個例子的簡短評論。

  1. 正如預期的那樣。

  2. 正如一開始所說的那樣,它是非空的。

  3. 您正在定義\z,之後應該是 string % \ifempty。該定義是錯誤的,但從未使用過。然後就有了{3. empty}{3. nonempty},它被寫成普通的文字。

  4. Now\z已正確定義,但z當然不是空的。

如果您想簡單地比較巨集的等效性,\ifx可能更適合您。

相關內容