在阅读“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)。