TeX 作用域问题

TeX 作用域问题

如果我使用

\global\advance\itemno by 1%
\ifnum\itemno=4\the\itemno\fi

我得到 5。如果我使用

\global\advance\itemno by 1%
\itemno=\itemno%
\ifnum\itemno=4\the\itemno\fi

我得到了预期的 4。为什么这是必要的?

答案1

你的第一个例子

\newcount\itemno
\global\advance\itemno by 1%
\ifnum\itemno=4\the\itemno\fi

由 TeX 解释:\global\advance\itemno by 1...

\ifnum因为数字扫描尚未完成,所以会扩展:会\ifnum\itemno=4...扩展\the\itemno0,所以\ifnum\itemno=40\fi。因为\itemno不是40,所以\ifnum会扩展为空,所以\global\advance\itemno by 1<empty>现在执行,这意味着\itemno增量。仅此而已。恕我直言,这不是作者的本意。第二个例子类似。

锻炼:当你输入以下内容时会发生什么:

\newcount\itemno
\global\advance\itemno by 1%
\ifnum\itemno=4\the\itemno\fi
5

答案:\itemno增量为15。

答案2

您需要一个逆向方程:不要放%在线的末尾。

\global\advance\itemno by 1
\ifnum\itemno=4 \the\itemno\fi

否则,在分配完成之前\ifnum寻找以 开头的数字的结尾时会扩展。1

此外,

\ifnum\itemno=4\the\itemno\fi

永远不会为真,因为如果\itemno 是 4,那么它相当于

\ifnum\itemno=44\fi

4这当然是错误的。因此上面后面有空格。

相关内容