定义特殊计数器

定义特殊计数器

定理计数器可以在章节、节或小节发生变化时自动设置为零,方法是使用第二个可选参数\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}}

相关内容