在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}