Befehlsaufruf im Argument „ifnum“ ignorieren

Befehlsaufruf im Argument „ifnum“ ignorieren

Ich habe einen Befehl , der entweder oder als Argument \yesifoneannehmen soll und sich in beiden Fällen unterschiedlich verhält. Ich möchte ihm die Ausgabe eines Befehls übergeben . Es basiert jedoch auf einem anderen Befehl , der keine Ausgabe erzeugt (in meinem konkreten Fall setzt es eine Variable). Mein aktueller Versuch, dies zum Laufen zu bringen, schlägt fehl, vermutlich weil es in den Vergleich einbezieht und nicht nur die Zahl . Wie kann ich dies zum Laufen bringen, z. B. indem ich den Aufruf ignoriere und nur den Ausgabetext überprüfe?10\one\one\blahifnum\blah{}1\blah{}

Mit anderen Worten, ich möchte Folgendes ausgeben yes.

\documentclass{minimal}

\begin{document}

\newcommand{\blah}{}

\newcommand{\one}{
\blah{}
1
}

\newcommand{\yesifone}[1]{%
    \ifnum1=#1\relax{yes}\else{no}\fi
}

\yesifone{\one} % error: Missing number, treated as zero.

\end{document}

Antwort1

Mit Ihrem Code \yesifone{\one}erhalten Sie die Token
\yesifone{1\one}2

Dies wird erweitert auf .
\ifnum112=12\one\relax{1y11e11s11}2\else{1n11o11}2\fi

Zum Zeitpunkt des Sammelns von Token, die zum \ifnumzweiten TeX-⟨ gehörenNummer⟩-Menge, also die Zahl hinter , das Token wird erweitert, man hat also so etwas wie=12\one

\ifnum112=1210\blah{1}21011210\relax{1y11e11s11}2\else{1n11o11}2\fi.

Die Leerzeichen direkt dahinter werden entfernt und erweitert und verschwinden einfach, da der Ersatztext leer ist. Somit haben Sie etwas wie:10=12\blah

\ifnum112=12{1}21011210\relax{1y11e11s11}2\else{1n11o11}2\fi.

Zum Zeitpunkt des Sammelns von Token, die zum \ifnumzweiten TeX-⟨ gehörenNummer⟩-Menge, also die Zahl hinter , findet TeX eine leere Klammern-Gruppe, also explizite Zeichen-Token und , die definitiv nicht den Anfang einer Token-Folge bilden, die ein gültiges TeX-⟨ bildet.=12{1}2Nummer⟩-Menge.


Denken Sie an Knuths Analogie, dass TeX ein Tier mit Augen und einem Verdauungstrakt sei.

  • Die Erweiterung erweiterbarer Token erfolgt im Schlund in einer Art Wiederaufstoßungsprozess, sofern die Erweiterung nicht unterdrückt wird, wie dies z. B. bei den Token der Fall ist, die den Parametertext oder den Ersetzungstext einer -Zuweisung bilden \def. (LaTeX \newcomandusw. \NewDocumentCommandsind ausgefeilte Wrapper für den Aufruf von \def.)
  • Die Einsätze finden im Magen statt.

Trennen Sie also Aufgaben wie das Zuweisen von Werten zu „Variablen“, bei denen der Magen für nicht mit dem Satz zusammenhängende Arbeiten beteiligt ist, von Aufgaben, bei denen die Speiseröhre/Ausdehnung ausdehnbarer Token ausreicht und bei denen die Verdauungsorgane hinter der Speiseröhre nur für den Satz beteiligt sind:

\documentclass{minimal}

% Introduce/initialize things used as variable whose value is
% to be set via assignments that take place in the stomach:
\newcommand\VariableRelatedToBlah{}

% Define macros for tasks that involve digestive organs behind the gullet for 
% for non-typesetting-tasks, e.g.,_setting_ values of variables via assignments:
\newcommand\SetValueOfVariableRelatedToBlah[1]{%
  \def\VariableRelatedToBlah{#1}%
}

% Define macros for tasks that involve only the gullet, e.g., 
% _retrieving_ values of variables, or additionally to the gullet
% involve digestive organs behind the gullet only for typesetting:
\newcommand\RetrieveValueOfVariableRelatedToBlah{%
  \VariableRelatedToBlah
}
\newcommand\firstofone[1]{#1}%
\newcommand{\yesifone}[1]{%
  \ifnum1=\expandafter\firstofone\expandafter{\number#1} yes\else no\fi
}

\begin{document}

% Now you can keep work that involves the stomach for non-typesetting
% separated from work where the gullet is sufficient/where tokens
% delivered by the gullet can directly be used for typesetting:

\SetValueOfVariableRelatedToBlah{0}%
\yesifone{\RetrieveValueOfVariableRelatedToBlah}

\SetValueOfVariableRelatedToBlah{1}%
\yesifone{\RetrieveValueOfVariableRelatedToBlah}

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen