如何全局恢复枚举计数器但按章节重新启动?

如何全局恢复枚举计数器但按章节重新启动?

我尝试让枚举恢复其编号,但每章都重新开始。我找到了一种在这里重新启动计数器的方法:

https://tex.stackexchange.com/a/348942

然而,当涉及到某些环境(例如证明)时,该解决方案不会恢复计数器。

这是我目前所得到的(但在证明之后它没有恢复计数器):

\documentclass{book}

\usepackage{enumitem}
\usepackage{etoolbox}
\usepackage{amsthm}

% include the chapter number
\setlist[enumerate]{label=\thechapter.\arabic{*},resume}

% restart the enumerate list every chapter
\preto\chapter{%
  \restartlist{enumerate}%
}

\begin{document}

\chapter{one}

\begin{enumerate}
  \item first
  \item second
\end{enumerate}
more
\begin{proof}
  \begin{enumerate}
    \item third
    \item fourth
  \end{enumerate}
\end{proof}
more
\begin{enumerate}
  \item fifth
  \item sixth
\end{enumerate}

\chapter{two}
\begin{enumerate}
  \item first
  \item second
\end{enumerate}
more
\begin{enumerate}
  \item third
  \item fourth
\end{enumerate}

\end{document}

答案1

看起来像enumitem在本地保存恢复数据(计数器等),并LaTeX在当前组结束后忘记这些保存的数据。您可以修补命令\enit@setresumekeys并在其中替换\def\gdef。由于有两个\def条目,我不得不使用两次(它在类似\patchcmd中定义。更改后的代码:etoolbox\preto

\documentclass{book}

\usepackage{enumitem}
\usepackage{etoolbox}
\usepackage{amsthm}

% include the chapter number
\setlist[enumerate]{label=\thechapter.\arabic{*},resume}

% restart the enumerate list every chapter
\preto\chapter{%
  \restartlist{enumerate}%
}

\makeatletter
\patchcmd{\enit@setresumekeys}{\def}{\gdef}{}{}
\patchcmd{\enit@setresumekeys}{\def}{\gdef}{}{}
\makeatother

\begin{document}
\chapter{one}

\begin{enumerate}
  \item first
  \item second
\end{enumerate}
more
\begin{proof}
  \begin{enumerate}
    \item third
    \item fourth
  \end{enumerate}
\end{proof}
more
\begin{enumerate}
  \item fifth
  \item sixth
\end{enumerate}

\chapter{two}
\begin{enumerate}
  \item first
  \item second
\end{enumerate}
more
\begin{enumerate}
  \item third
  \item fourth
\end{enumerate}
\end{document}

第一页:

在此处输入图片描述

相关内容