
Betrachten Sie dieses MWE:
\documentclass[11pt]{book}
\def\entrytest{WORD}
\def\entrycurrent{NOWORD}
% \def\entrycurrent{WORD}
\ifx\entrytest\entrycurrent
\newif\ifsomething
\somethingfalse
\fi
\ifx\entrytest\entrycurrent
\ifsomething\typeout{Yes}\else\typeout{No}\fi
\fi
\begin{document}
\end{document}
Im aktuellen Fall hätte ich erwartet, dass es \ifsomething\typeout...
durch das , das es umschließt, „geschützt“ wäre \ifx
; aber irgendetwas stimmt nicht, denn der Code wird mit Folgendem angehalten:
...
No
! Extra \fi.
l.15 \fi
?
\def\entrycurrent{WORD}
Wenn also alle s \ifx
im „wahren“ Zweig ausgeführt werden, funktioniert natürlich alles wie erwartet .
Wie gehe ich also mit Verwendungen von \newif
s um, die möglicherweise selbst bedingt definiert wurden?
Antwort1
Im zweiten \ifx\entrytest\entrycurrent
ist \ifsomething
undefiniert, alsoErste \fi
passt \ifx
und das zweite \fi
ist fehl am Platz.
Es ist nicht der Makroname, der etwas zu einer Bedingung macht; nur ein Token, dasdefiniertund ist gleichbedeutend mit einer der primitiven Bedingungszählungen.
Was \newif\ifsomething
bedeutet
\let\ifsomething\iffalse
\def\somethingtrue{\let\ifsomething\iftrue}
\def\somethingfalse{\let\ifsomething\iffalse}
Sie möchten wahrscheinlich so etwas wie
\newif\ifsomething
\somethingtrue
\ifx\entrytest\entrycurrent
\somethingfalse
\fi
\ifx\entrytest\entrycurrent
\ifsomething\typeout{Yes}\else\typeout{No}\fi
\fi
aber es ist unklar, warum Sie das überhaupt tun würden.