为什么 \setcounter 和 \addtocounter 命令具有全局效果,而 \setlength 和 \addtolength 命令遵循正常的作用域规则?

为什么 \setcounter 和 \addtocounter 命令具有全局效果,而 \setlength 和 \addtolength 命令遵循正常的作用域规则?

\setcounter命令\addtocounter具有全局效果,而\setlength\addtolength命令遵循正常的作用域规则。

为什么它们要这样设计?为什么\setcounter\addtocounter不遵循正常的作用域规则?

答案1

这是设计使然,并在 LaTeX 核心源代码中进行了相应的编码。LaTeX 中的计数器通常计算独立于本地组的内容。例如,figure标题包含在figure环境添加的组中,并且对标题使用的计数器的任何更改figure都会在之后丢失。这将使计数器几乎毫无用处。

如果要在本地设置计数器,请使用\c@<counter name>=value。要向其中添加内容,请使用\advance\c@<counter name> by value。要构建计数器宏,您可以使用\csname name\endcsname或(误)使用\value{name},它也适用于赋值的左侧。

您还可以使用 TeX 宏定义自己的计数器\newcount\yourcounter,然后使用等。但是,如果需要,\yourcounter=<value>您需要自己定义宏,而不能使用正常的计数器格式化宏(如或)。\theyourcounter\arabic{..}\roman{..}

相关内容