
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 \ifx
que 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 \ifx
s são executados no branch "verdadeiro", então tudo funciona conforme o esperado.
Então, como devo proceder para lidar com usos de \newif
s que podem ter sido definidos condicionalmente?
Responder1
No segundo \ifx\entrytest\entrycurrent
,\ifsomething
é indefinido, então oprimeiro \fi
partidas \ifx
e o segundo \fi
está 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\ifsomething
faz é
\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.