纯 TeX 中的 If 语句

纯 TeX 中的 If 语句

在纯 TeX 中,代码如下:

\def\ver{a}

\if\ver{a}{yes}\else{no}\fi  

\ifx\ver{a}{yes}\else{no}\fi

返回

no

no

是否有“if”和“ifx”的变体会返回“yes”?如果没有,是否有其他方法可以进行等效的逻辑测试?使用代替\let似乎\def没有帮助。

答案1

TeX 中没有原始条件来解释括号参数。无论真假文本都不要加括号。

对于\if,TeX 会执行完整的宏扩展,直到找到两个不可扩展的标记。在您的例子中,\ver被扩展为a,而后面的标记是{,它是不可扩展的。

因此,字符代码的比较返回 false,并且\else跳过之前的文本,而您仍然使用

\else{no}\fi

所以最后你会得到{no}打印“no”的结果。

相反,\ifx不进行扩展并比较以下两个标记,在本例中为\ver{

考试

\if a\ver yes\else no\fi

将打印“yes”。

答案2

在 Plain TeX 中(\def不可扩展):

\def\tmp{a}
\ifx\tmp\ver Yes\else No\fi

在 Optex 中(可扩展):

\ismacro \ver{a}\iftrue Yes\else No\fi

相关内容