Handhabung eines bedingt definierten Newif, verschachtelt in einer IFX-Bedingung?

Handhabung eines bedingt definierten Newif, verschachtelt in einer IFX-Bedingung?

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 \ifxim „wahren“ Zweig ausgeführt werden, funktioniert natürlich alles wie erwartet .

Wie gehe ich also mit Verwendungen von \newifs um, die möglicherweise selbst bedingt definiert wurden?

Antwort1

Im zweiten \ifx\entrytest\entrycurrentist \ifsomethingundefiniert, alsoErste \fipasst \ifxund das zweite \fiist 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\ifsomethingbedeutet

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

verwandte Informationen