第1章

第1章

memoir课堂上,我希望我的定理按照章节进行标记,例如定理 1.2.3。

但是,有时我会在章节的第一节声明之前在章节开头列出定理。在这种情况下,LaTeX 似乎错误地处理了定理的编号,并且似乎不会在声明新章节时重置定理计数器。例如

\documentclass{memoir}
\newtheorem{theorem}{Theorem}[section]
\begin{document}
\chapter{One}
\section{A}
\begin{theorem} OneA \end{theorem}
\chapter{Two}
\begin{theorem} Two \end{theorem}
\section{B}
\begin{theorem} TwoB \end{theorem}
\end{document}

得到我:

第1章

1.1

定理 1.1.1 一A

第2章 一

定理 2.0.2

2.1B

定理2.1.1 双B

这将定理二的编号错误地算成 2.0.2(而它应该是 2.0.1),因为计数器仍然从上一章的最后一节开始运行。

我该如何解决?

答案1

在此处输入图片描述

这在 LaTeX 的下一个版本中已修复(以上内容是使用预发布代码生成的),但同时您可以在以下位置回复 latex 错误报告中使用该代码:

http://www.latex-project.org/cgi-bin/ltxbugs2html?pr=amslatex/4393


\makeatletter
\def\@stpelt#1{\global\csname c@#1\endcsname \m@ne\stepcounter{#1}}
\makeatother

答案2

此类memoir已经提供了此机制:

\documentclass{memoir}

\newtheorem{theorem}{Theorem}[section]
\counterwithin*{theorem}{chapter}

\begin{document}
\chapter{One}
\section{A}
\begin{theorem} OneA \end{theorem}
\chapter{Two}
\begin{theorem} Two \end{theorem}
\section{B}
\begin{theorem} TwoB \end{theorem}
\end{document}

该命令\counterwithin*{theorem}{chapter}告诉 LaTeX 在步进时重置定理编号chapter,但不修改其表示(因为*)。

在此处输入图片描述

如果你想删除0,这里有一个技巧:

\documentclass{memoir}
\newtheorem{theorem}{Theorem}[section]
\counterwithin*{theorem}{chapter}
\renewcommand{\thetheorem}{%
  \ifnum\value{section}>0
    \thesection.%
  \else
    \thechapter.%
  \fi
  \arabic{theorem}%
}

\begin{document}
\chapter{One}
\section{A}
\begin{theorem} OneA \end{theorem}
\chapter{Two}
\begin{theorem} Two \end{theorem}
\section{B}
\begin{theorem} TwoB \end{theorem}
\end{document}

在此处输入图片描述

答案3

您可以在每章开始时加载etoolbox包并重置计数器。theorem

\usepackage{etoolbox}
\pretocmd{\chapter}{\setcounter{theorem}{0}}{}{}

平均能量损失

\documentclass{memoir}
\newtheorem{theorem}{Theorem}[section]

\usepackage{etoolbox}
\pretocmd{\chapter}{\setcounter{theorem}{0}}{}{}

\begin{document}
\chapter{One}
\section{A}
\begin{theorem} OneA \end{theorem}
\chapter{Two}
\begin{theorem} Two \end{theorem}
\section{B}
\begin{theorem} TwoB \end{theorem}
\end{document} 

在此处输入图片描述

答案4

您也可以使用内部\@addtoreset命令重置章节边界的数字

\makeatletter\@addtoreset{theorem}{chapter}\makeatother

在你声明了你的定理之后。

示例输出

\documentclass{memoir}
\newtheorem{theorem}{Theorem}[section]
\makeatletter\@addtoreset{theorem}{chapter}\makeatother
\begin{document}
\chapter{One}
\section{A}
\begin{theorem} OneA \end{theorem}
\chapter{Two}
\begin{theorem} Two \end{theorem}
\section{B}
\begin{theorem} TwoB \end{theorem}
\end{document}

相关内容