\documentclass[a4paper,oneside,12pt]{book}
\usepackage[left=3cm,right=2cm,top=2cm,bottom=2cm]{geometry}
\begin{document}
\edef\var{1}
\if \var= 1
{var equal one}
\else
{var not equal one}
\fi
\end{document}
我尝试定义一个新变量,\var
其值为1
。然后我尝试按照上面的代码创建 if 语句。但结果是 var not equal one
,而不是var equal one
。为什么会发生这种情况?
答案1
除非真的需要,否则不要使用“原始” TeX\if...
测试。它们非常复杂,难以理解。
例如,即使@gz839918 的解决方案 做工作,在这种情况下,它可以相当...令人惊讶的输出
\edef\var{12}
\if\var12
{var equal twelve}
\else
{var not equal twelve}
\fi
看
答案2
条件\if
比较两个宏在扩展后是否相同。因此,通过删除等号并使用
\if\var1
{var equal one}
\else
{var not equal one}
\fi
你会得到你想要的输出,var 等于一。
答案3
抱歉,但您误解了它的\if
含义。
当 TeX 找到 时\if
,它开始扩展下一个标记,直到找到两个最终进行比较的不可扩展的标记。
因此,\if \var= 1
比较是介于1
和之间的=
,就 而言,它们是不同的\if
。1
后面的=
会作为虚假文本的一部分消失。
你可能想要的是\ifnum
再次进行完全扩展,直到找到类似的东西
<number><relation><number>
其中<number>
是 TeX 可以解释为数字的任何东西,并且是、或<relation>
之一。<
=
>
如果你替换\if
为,\ifnum
你就会得到你想要的结果。但你需要非常小心。
顺便说一下,\edef\var{1}
做\def\var{1}
完全一样的事情。
\documentclass{article}
\def\var{1}
\newcommand{\foo}{%
\ifnum\var=1
this is the one case%
\else
this is the not one case%
\fi
}
\begin{document}
\foo\ and some text follows.
\def\var{0}
\foo\ and some text follows.
\end{document}
请注意%
,防止尾线被视为空格。不放在第一行的%
后面。1
练习:猜测以下代码哪里失败了。
\documentclass{article}
\def\var{1}
\newcommand{\foo}{%
\ifnum\var=1%
123%
\else
789%
\fi
}
\begin{document}
\foo\ and some text follows.
\def\var{0}
\foo\ and some text follows.
\end{document}