定理计数器可以在章节、节或小节发生变化时自动设置为零,方法是使用第二个可选参数\newtheorem
(例如,\newtheorem{foo}{Foo}[section]
生成一个定理 foo,其计数器foo
在每次章节或节发生变化时归零)。我想在不经过定理的情况下做到这一点,并避免将归零添加到\chapter
等宏中。有办法吗?
答案1
如果我理解你的问题,
\newcounter{foo}[chapter]
满足您的要求。如果您希望章节编号成为 表示的一部分foo
,请添加
\renewcommand{\thefoo}{\thechapter.\arabic{foo}}
如果foo
是已由包定义的计数器并且您无法控制其定义,则添加
\usepackage{chngcntr}
并做
\counterwithin{foo}{chapter}
如果您希望foo
以章节号开头或
\counterwithin*{foo}{chapter}
否则。
随着\newcounter{foo}[chapter]
柜台foo
边界到chapter
,这意味着每次chapter
步进时都会重置(使用\stepcounter
)。没有记录给定计数器绑定到哪个计数器。当然,有一个与给定计数器绑定的计数器列表。例如,\cl@<counter>
在\cl@chapter
类中列表book
为 扩展为
\@elt{section}\@elt{equation}\@elt{figure}\@elt{table}\@elt{footnote}
该\@elt
宏用于\stepcounter
重置作为参数给出的计数器\@elt
。我们可以以各种方式使用它,例如检查列表。以下代码将显示计数器的状态:
\documentclass{book}
\makeatletter
\newcommand{\showcounter}[1]{%
\@ifundefined{c@#1}
{\@latex@error{No counter `#1'}{}}
{\typeout{`#1' is a defined counter
with bound counters:}%
\show@bound@counters{#1}%
\typeout{===}}%
}
\newcommand{\show@bound@counters}[1]{%
\begingroup % redefine \@elt in a group
\def\@elt##1{\typeout{##1}}\@nameuse{cl@#1}%
\endgroup
}
\makeatother
\showcounter{foo}
\showcounter{chapter}
\newcounter{foo}[section]
\showcounter{section}
如果我们通过 LaTeX 运行它,我们将在终端和日志文件中得到以下输出:
! LaTeX Error: No counter `foo'.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.19 \showcounter{foo}
?
`chapter' is a defined counter with bound counters:
section
equation
figure
table
footnote
===
`section' is a defined counter with bound counters:
subsection
foo
===
答案2
您有(至少)两个选项(输入序言中的说明):
\numberwithin{foo}{section}
(需要amsmath
包)。环境实例
foo
将被编号为“1.1”,“1.2”等。\makeatletter \@addtoreset{foo}{section} \makeatother
环境实例
foo
将在每个部分内被编号为“1”,“2”等,除非您执行类似的操作\renewcommand\thefoo{\thesection.\arabic{foo}}
。