如何使用 chngcntr 和带有简历的 enumitem newlist?

如何使用 chngcntr 和带有简历的 enumitem newlist?

对于以下 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”片段。

相关内容