
Рассмотрим этот 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}
все \ifx
s выполняются в ветке «true», то все работает так, как и ожидалось.
Так как же мне следует поступить с использованием \newif
s, которые сами по себе могли быть условно определены?
решение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
но непонятно, зачем вы это делаете.