TeX 计数和 LaTeX 计数器之间有什么区别?

TeX 计数和 LaTeX 计数器之间有什么区别?

标题已经说明了整个问题。Joseph Wright 已在http://www.texdev.net/2009/11/17/tex-counts-and-latex-counters/,但我还没有看到相应的答案在这里tex.stackexchange.com然而。

答案1

在 LaTeX 级别,计数器使用以下方式创建

\newcounter{mycounter}

这将创建一个初始化为零的计数器,然后可以使用

\setcounter{mycounter}{4} % Or whatever

或使用\stepcounter和操纵\addtocounter

\setcounter{mycounter}{0}    % Value is 0
\stepcounter{mycounter}      % Value is 1
\stepcounter{mycounter}      % Value is 2
\addtocounter{mycounter}{3}  % Value is 5

然后有一些方法可以取回计数器值。LaTeX\the...为每个计数器创建一个函数,它将打印当前值。在 TeX 需要数字的地方,还有这个\value函数:

\themycounter % Prints the current value
\ifnum\value{mycounter} > \value{myothercounter}%
  % Do stuff!
\fi

LaTeX 的计数器是全局设置的。这使得它们适合跟踪覆盖整个文档的内容,但不适合进行局部计算。

使用以下方式创建 TeX 计数

\newcount\mycount

其中 name 是包含反斜杠的名称。设置计数非常简单:没有 set 函数

\mycount 4\relax

注意\relax这里的 。如果没有它,TeX 将继续在它找到的下一个东西中寻找数字。这可能会产生一些奇怪的效果,最好避免。然后可以使用\advance

\mycount 0\relax         % Value is 0
\advance\mycount 1\relax % Value is 1
\advance\mycount 1\relax % value is 2
\advance\mycount 3\relax % Value is 5

类似的终止方式是,在数字后加一个空格

\mycount 4 % Comment used to show that there is a deliberate space

\the可以使用或恢复计数寄存器的值\number,并且可以在 TeX 需要数字的地方使用名称本身。

\the\mycount   % Prints the current value
\number\mycount % The same result
\ifnum\mycount > \myothercount
  % Do stuff!
\fi

最大的区别在于 TeX 在本地设置计数寄存器。因此,要进行全局分配,你必须刻意这样做

\global\mycount 3\relax

由于 LaTeX 是基于 TeX 构建的,您可能会猜测 LaTeX 的计数器是 TeX 计数寄存器的接口,但目前还不清楚这是如何实现的。其工作原理是,LaTeX 在所有计数器名称前加上前缀c@,因此如果我这样做

\newcount\c@mycounter
\newcounter{mycounter}

LaTeX 会发出一条错误消息:计数器已定义。然后其他 LaTeX 函数在此基础上构建,以便操作内部计数器。这一切都是全局完成的,并进行了一些错误检查。例如,的定义\addtocounter

\def\addtocounter#1#2{%
  \@ifundefined{c@#1}%
    {\@nocounterr{#1}}%
    {\global\advance\csname c@#1\endcsname #2\relax}}

这将检查计数器是否存在,如果存在则全局推进它。

相关内容