Производство пустого аргумента

Производство пустого аргумента

Я использовал ответ Герберта вПроверьте наличие пустого аргумента макросадля проверки, является ли аргумент пустым. Мне было интересно, можно ли расширить решение Герберта, чтобы также определить, является ли аргумент макроса \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, после которого должна быть строка % \ifempty. Определение ошибочное, но никогда не использовалось. Затем есть {3. empty}{3. nonempty}и оно написано как обычный текст.

  4. Сейчас \zопределено правильно, но z, конечно, не пусто.

Если вы просто хотите сравнить эквивалентность макросов, \ifxвозможно, это вам больше подойдет.

Связанный контент