尝试使用条件表达式,即使用这个简单的 if...
\def\testvar{testvalue}
\if\testvar{testvalue}{istrue}\else{isfalse}\fi
我总是isfalse
……我认为我已经做了我应该做的一切,但我就是无法做到。
我看错了什么?
答案1
抱歉,但是你的语法和工作原理\if
完全错误。
当 TeX 发现\if
它开始扩展后面的 token 直到找到两个不可扩展的 token。然后它根据它们的字符代码比较这两个 token(控制序列被认为有自己的字符代码)。
因此你的\if\testvar
立即变成\if testvar
并且 TeXt
与进行比较e
,它们有不同的字符代码。
使用传统的 TeX 编程,您可以比较意义和\ifx
:
\def\fixedvalue{testvalue}% for following comparisons
\def\testvar{testvalue}
% this will return true
\ifx\testvar\fixedvalue
something (not in braces)%
\else
something else (not in braces)%
\fi
\def\testvar{whatever}
% this will return false
\ifx\testvar\fixedvalue
something (not in braces)%
\else
something else (not in braces)%
\fi