处理嵌套在 ifx 条件中的条件定义的 newif?

处理嵌套在 ifx 条件中的条件定义的 newif?

考虑一下这个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 都在“真实”分支中运行,那么一切都会按预期工作。

那么我应该如何处理\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

但一开始就不清楚你为什么要这样做。

相关内容