Обработка условно определенного newif, вложенного в условный оператор ifx?

Обработка условно определенного newif, вложенного в условный оператор ifx?

Рассмотрим этот 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}

В данном случае я бы ожидал, что он \ifsomething\typeout...будет «защищен» оборачивающей \ifxего конструкцией; но что-то не так, потому что код останавливается на:

...
No
! Extra \fi.
l.15 \fi

? 

Конечно, если \def\entrycurrent{WORD}все \ifxs выполняются в ветке «true», то все работает так, как и ожидалось.

Так как же мне следует поступить с использованием \newifs, которые сами по себе могли быть условно определены?

решение1

Во втором случае \ifx\entrytest\entrycurrentне \ifsomethingопределено, поэтомупервый \fiсовпадает \ifx, а второй \fiне на своем месте.

Не имя макроса делает что-то условным; только токен, который являетсяопределенныйи эквивалентно одному из примитивных условных подсчетов.

Что \newif\ifsomethingделает это

\let\ifsomething\iffalse
\def\somethingtrue{\let\ifsomething\iftrue}
\def\somethingfalse{\let\ifsomething\iffalse}

Вы, вероятно, хотите что-то вроде

\newif\ifsomething
\somethingtrue

\ifx\entrytest\entrycurrent
  \somethingfalse
\fi

\ifx\entrytest\entrycurrent
  \ifsomething\typeout{Yes}\else\typeout{No}\fi
\fi

но непонятно, зачем вы это делаете.

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