我有以下一段代码,用于实现 2 个计数器。目前两个计数器均等增加,但我希望每次第一个计数器自动增加时第二个计数器都会重置。
目前计数器的工作原理如下:
00001.001
00002.002
00003.003
我希望它像这样工作:
00001.0001
00001.0002
00001.0003
00002.0001
00002.0002
00002.0003
00003.0001
00003.0002
00003.0003
另外,除了将两个计数器并排放置并在中间有一个点之外,我不知道是否还有其他更好的实现方式,但如果有的话,我希望您提一下。
我想说的是,计数器的代码不是我的。它是作为我在这里的一个问题的答案提交的。
\documentclass{article}
\newcounter{Counter}
\newcommand{\Counter}
{%
\textbf
{%
\ifnum\value{Counter}<10000 0\fi
\ifnum\value{Counter}<1000 0\fi
\ifnum\value{Counter}<100 0\fi
\ifnum\value{Counter}<10 0\fi
\arabic{Counter}%
}%
}
\newcounter{InCounter}
\newcommand{\InCounter}
{%
\textbf
{%
\ifnum\value{InCounter}<100 0\fi
\ifnum\value{InCounter}<10 0\fi
\arabic{InCounter}%
}%
}
\newcommand{\Num}
{
\refstepcounter{Counter}\Counter.\refstepcounter{InCounter}\InCounter
}
\begin{document}
\Num
Text
\Num
Text
\Num
Text
\end{document}
答案1
将第二个计数器定义为与第一个计数器绑定,并正确设置其表示。
\documentclass{article}
\newcounter{maincounter}
\newcounter{childcounter}[maincounter]
\renewcommand{\themaincounter}{%
\ifnum\value{maincounter}<10000 0\fi
\ifnum\value{maincounter}<1000 0\fi
\ifnum\value{maincounter}<100 0\fi
\ifnum\value{maincounter}<10 0\fi
\arabic{maincounter}%
}
\renewcommand{\thechildcounter}{%
\themaincounter.%
\ifnum\value{childcounter}<1000 0\fi
\ifnum\value{childcounter}<100 0\fi
\ifnum\value{childcounter}<10 0\fi
\arabic{childcounter}
}
\newcommand{\stepmain}{\stepcounter{maincounter}}
\newcommand{\stepchild}{\refstepcounter{childcounter}}
\newcommand{\num}{\stepchild\thechildcounter}
\begin{document}
\stepmain
\num
\num
\num
\stepmain
\num
\num
\stepmain
\num
\num
\end{document}
每次\stepmain
主计数器都会步进,子计数器会重置;\num
只会步进子计数器并打印值。我\refstepcounter
在这里使用 so\label
将指向正确的值。
答案2
标准方式是这样的:
\newcounter {secondcounter} [firstcounter]
并且secondcounter
每次firstcounter
增加都会自动重置。