LaTeX 中 if 语句的结果不正确

LaTeX 中 if 语句的结果不正确
\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和之间的=,就 而言,它们是不同的\if1后面的=会作为虚假文本的一部分消失。

你可能想要的是\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}

在此处输入图片描述

相关内容