Lidando com um newif definido condicionalmente, aninhado em uma condicional ifx?

Lidando com um newif definido condicionalmente, aninhado em uma condicional ifx?

Considere este 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}

No caso atual, eu esperava que isso \ifsomething\typeout...fosse "protegido" pelo \ifxque o envolve; mas algo não está certo, porque o código para com:

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

? 

É claro que, se \def\entrycurrent{WORD}assim for, todos os \ifxs são executados no branch "verdadeiro", então tudo funciona conforme o esperado.

Então, como devo proceder para lidar com usos de \newifs que podem ter sido definidos condicionalmente?

Responder1

No segundo \ifx\entrytest\entrycurrent,\ifsomething é indefinido, então oprimeiro \fipartidas \ifxe o segundo \fiestá fora de lugar.

Não é o nome da macro que torna algo condicional; apenas um token que édefinirame é equivalente a uma das contagens condicionais primitivas.

O que \newif\ifsomethingfaz é

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

Você provavelmente quer algo como

\newif\ifsomething
\somethingtrue

\ifx\entrytest\entrycurrent
  \somethingfalse
\fi

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

mas não está claro por que você faria isso para começar.

informação relacionada