对于以下 M(ish)WE,我期望在第二章开头重置示例列表的编号,但事实并非如此。
\documentclass{book}
\usepackage{chngcntr}
\usepackage{enumitem}
\newlist{examples}{enumerate}{1}
\setlist[examples,1]{label=(\arabic*),resume,}
\begin{document}
\chapter{Foo}
\counterwithin{examplesi}{chapter}
\counterwithin{enumii}{chapter}
\begin{examples}
\item One
\end{examples}
\begin{examples}[resume]
\item Two
\end{examples}
\begin{enumerate}
\item One
\end{enumerate}
\begin{enumerate}[resume]
\item Two
\end{enumerate}
\chapter{Bar}
\begin{examples}
\item One expected; three employed
\item Two expected; four employed
\end{examples}
\begin{enumerate}[resume]
\item One expected; three employed
\end{enumerate}
\begin{enumerate}[resume]
\item Two expected; four employed
\end{enumerate}
% The problem is exhibited above.
% Here on additional is material that might shed some light.
\counterwithin{enumi}{page}
\begin{enumerate}[resume]
\item repeat enough to consume an entire page
\item on compile, enumerate is reset (several lines after) page break
\item The several lines after is a puzzle, but not my present concern
\item It suffices to show chngcntr has effect in
presence of enumitem and \verb|[resume]|
\end{enumerate}
\begin{examples}
\item I would never want \emph{this}
\item But, it seems to show that
\chapter{Baz}
\item chngcntr can reset the examplesi counter
\item but only in examples enviros with embedded chapter commands.
\end{examples}
\end{document}
当前的问题是我怎样才能达到预期的效果?
我确实尝试在命令\setcounter{examplesi}{0}
后面添加一个\chapter
,但这没有帮助。
为了避免 XY 问题,我的动机如下:
我正在编写一本教科书,希望使用编号示例句子,并且连续编号,独立于文档中的所有其他编号,但我希望每个新章节的编号都重置。最终,我希望每个章节内的交叉引用仅使用示例编号,而从一个章节到另一个章节中的示例使用格式。一旦\thechapter.\theexamplesi
我对编号进行排序,我就会担心章节间和章节内引用之间的差异;我在这里提到它主要是为了避免(如果可能的话)解决当前问题,因为这会使第二阶段复杂化。
答案1
您可以将本章开头的enumitem
命令与 etoolbox 结合使用:\restartlist
\usepackage{etoolbox}
\preto\chapter{%
\restartlist{examples}%
}
答案2
ntheorem
和包amsthm
允许您定义一个名为 的环境example
。如果您在文档中提供以下代码
\usepackage{amsmath,ntheorem}
\makeatletter
\newtheoremstyle{example}%
{\item[\hskip\labelsep \theorem@headerfont ##1 ##2\theorem@separator]}%
{\item[\hskip\labelsep \theorem@headerfont ##1 ##2: ##3\theorem@separator]}
\makeatother
\theoremstyle{example}
\theoremheaderfont{\itshape}
\theorembodyfont{\upshape}
\theoremseparator{.}
\theoremnumbering{arabic}
\newtheorem{example}{Example}
\numberwithin{example}{chapter} % the \numberwithin command is provided by amsmath package
例如,您可以使用命令\begin{example}
...\end{example}
来开始和结束每个示例。例如,文档第 3 章中的第二个和第三个示例使用命令进行编码
\begin{example}
This is just an example.
\end{example}
\begin{example}[How to get stuff done]
This is yet another example.
\end{example}
将生成以下输出:
当然,您可以自由更改\theoremheaderfont
、、\theorembodyfont
等的定义\theoremseparator
。
如果希望在“Example xy”行后自动换行,可以使用以下命令设置\newtheoremstyle
:
\makeatletter
\newtheoremstyle{example}%
{\item[\rlap{\vbox{\hbox{\hskip\labelsep \theorem@headerfont
##1 ##2\theorem@separator}\hbox{\strut}}}]}%
{\item[\rlap{\vbox{\hbox{\hskip\labelsep \theorem@headerfont
##1 ##2: ##3\theorem@separator}\hbox{\strut}}}]}
\makeatother
最后但并非最不重要的,如果您只想要示例的编号而不是字符串“Example”来开始每个示例,那么您只需从 theoremstyle 定义中删除“##1”片段。