\iftrue 和 \iffalse 还有更多应用吗?

\iftrue 和 \iffalse 还有更多应用吗?

在阅读“TeX for the impatient”中有关 iftrue 和 iffalse 的主题时,我遇到了这个例子,

\def\isbigger{\let\bigger=\iftrue}
\def\isnotbigger{\let\bigger=\iffalse}
\def\test#1#2{\ifnum #1>#2 \isbigger \else \isnotbigger \fi}

\test{3}{6} \bigger$3>6$\else$3\le6$\fi \par

我认为我可以做得更好,如下所示

\def\true#1#2{$#1>#2$}
\def\false#1#2{$#1\le#2$}
\def\test#1#2{\ifnum #1>#2 \true#1#2 \else \false#1#2 \fi}

\test{3}{6} \par
\test{6}{3} \par.

但是等等,我怀疑书中的例子可能隐藏着我没有注意到的不健全的信号。所以我探索并找到了这个(iffalse 是什么\iffalse 是做什么的?),以找到通向 newif 命令的方向,从而继续我的后续尝试

\newif\ifbigger
\def\test#1#2{\ifnum #1>#2 \biggertrue \else \biggerfalse \fi
\ifbigger$3>6$\else$3\le6$\fi}
\test{3}{6} \par
\test{6}{3} \par.

对尝试过的练习感到满意,但我仍然有些担心。这是我正在寻找的隐藏信号吗?书中展示的编程技术是否还有其他有用/关键的方向?

答案1

您的原始示例有些奇怪。其背后的想法是定义一个新命令\bigger,您可以在后续测试中使用它。整个点\bigger与 分开的\test,所以你的第二个例子没有复制它的功能。我称它为“奇怪”的原因是代码

\bigger
  % true code
\else
  % false code
\fi

对我来说不太正确——但我早已习惯看到此类条件以 开头\if…

定义\bigger代码是\newif内部如何工作的,您现在已经发现了这一点。对于您感兴趣的事情,这是一种合理的方法。但是,您可能对替代方法感兴趣(https://tex.stackexchange.com/a/5896/179)。至于需要注意的陷阱,最好避免使用\iftrue\iffalse一般来说(https://tex.stackexchange.com/a/2951/179)。

相关内容