纯 TeX 中的计数器范围

纯 TeX 中的计数器范围

在下面的代码中,我打算实现一个循环,该循环调用一个宏,该宏在每次传递时增加计数寄存器,然后显示两者和循环控制变量\a的值。\a

\newcount\a\newcount\counter
\def\test{\advance\a by 2 \the\a \quad\the\counter\par}
\loop\advance\counter by 1\ifnum\counter<20 {\test}\repeat
\bye

结果(如下)显示,宏始终被视为\a之前未定义。如何在宏中更新全局计数器(以使输出读取(2 1, 4 2, 6 3,...))?

2 1
2 2
2 3
2 4
2 5 
...

答案1

您需要,\global因为普通的 TeX 计数器是group安全的。您的\test宏在这里的组中运行(没有必要!)(只需删除{...}

\newcount\a\newcount\counter
\def\test{\global\advance\a by 2 \the\a \quad\the\counter\par}
\loop\advance\counter by 1\ifnum\counter<20 {\test}\repeat
\bye

在此处输入图片描述

答案2

答案是调用\test时不要将其括在括号中。

相关内容