和
\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{..}