Ein leeres Argument produzieren

Ein leeres Argument produzieren

Ich habe Herberts Antwort verwendet inAuf leere Makroargumente prüfenum zu prüfen, ob ein Argument leer ist. Ich habe mich gefragt, ob es möglich ist, Herberts Lösung zu erweitern, um auch zu erkennen, ob ein Makroargument leer ist \empty. Wenn dies nicht klappt, wollte ich eine Möglichkeit finden, ein Makro so einzustellen, dass es \ifemptysich wie gewünscht verhält. Der folgende Code zeigt, dass \ifemptyein leeres Makroargument korrekt erkannt wird, aber nicht \emptyals leeres Argument betrachtet wird. Dann gebe ich ein paar erfolglose Versuche an, ein leeres Makro zu definieren.

\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}

Antwort1

Detokenisiert \emptyist natürlich nicht leer. Kurzer Kommentar zu den vier Beispielen.

  1. Ist wie erwartet.

  2. Ist nicht leer, wie am Anfang gesagt wurde.

  3. Sie definieren \z, wonach string folgen sollte % \ifempty. Die Definition ist falsch, wird aber nie verwendet. Dann gibt es {3. empty}{3. nonempty}und es wird als normaler Text geschrieben.

  4. Jetzt \zist richtig definiert, aber znatürlich nicht leer.

Wenn Sie einfach die Äquivalenz von Makros vergleichen möchten, \ifxist dies möglicherweise besser für Sie geeignet.

verwandte Informationen