我以为 TeX 计数是局部定义,但这不是我看到的。我原本以为如果我\newcount
在组中使用,那么etoolbox
\ifdefcounter
会说计数器未在组外定义。以下代码产生:
\documentclass{minimal}
\usepackage{etoolbox}
\begin{document}
\ifdefcounter{\mycount}{The counter is defined}{The counter is NOT defined}
\begingroup
\newcount\mycount
\endgroup
\ifdefcounter{\mycount}{The counter is defined}{The counter is NOT defined}
\end{document}
计数器未定义
计数器定义
这表明计数器在开始时不是定义的,而是它的存在持久性在组之外,因此不是局部的。
答案1
如果您想分配本地计数器,那么您可以使用etex.sty
:
\documentclass{article}
\usepackage{etex}
\usepackage{etoolbox}
\begin{document}
\ifdefcounter{\mycount}{The counter is defined}{The counter is NOT defined}
\begingroup
\loccount\mycount
\advance\mycount 42
\the\mycount
\texttt{\meaning\mycount}
\endgroup
\ifdefcounter{\mycount}{The counter is defined}{The counter is NOT defined}
\end{document}
当然,使用类似 LaTeX 的语法\stepcounter
是不可能的,因为这些命令是全局的。可能定义它们的本地版本,但我怀疑它们的实用性。
答案2
Plain 和 LaTeX 寄存器分配是全局的。您应该在开始时全局分配几个寄存器,并根据需要重新使用它们,而不是在本地组中分配它们。