
我一直在使用赫伯特的答案檢查巨集參數是否為空檢查參數是否為空。我想知道是否可以擴展赫伯特的解決方案來檢測宏參數是否為\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
當然不是空的。對四個例子的簡短評論。
正如預期的那樣。
正如一開始所說的那樣,它是非空的。
您正在定義
\z
,之後應該是 string% \ifempty
。該定義是錯誤的,但從未使用過。然後就有了{3. empty}{3. nonempty}
,它被寫成普通的文字。Now
\z
已正確定義,但z
當然不是空的。
如果您想簡單地比較巨集的等效性,\ifx
可能更適合您。