\numberwithin{equation}{subsection}
在 的序言中article
。该节第 1 小节之前的各节中的方程式以 x.0.y+1 开始编号,其中“y”是前一节最后一小节的最后一个方程式的编号。(小节中的数字是可以的,如 2.1.1 等。)我看不出这种行为有什么可取之处。示例:
\documentclass[12pt]{article}
\usepackage{amsmath}
\numberwithin{equation}{subsection}
\begin{document}
\section{1}
\begin{equation}
1
\end{equation}
\subsection{1}
\begin{equation}
1
\end{equation}
\subsection{1}
\begin{equation}
1
\end{equation}
\begin{equation}
1
\end{equation}
\section{1}
\begin{equation}
1
\end{equation}
\subsection{1}
\begin{equation}
1
\end{equation}
\section{1}
\begin{equation}
1
\end{equation}
\subsection{1}
\begin{equation}
1
\end{equation}
\end{document}
产生编号为 (1.0.1)、(1.1.1)、(1.2.1)、(1.2.2)、(2.0.3)、(2.1.1)、(3.0.2)、(3.1.1) 的方程。
答案1
更新
自 2018/04/01 发布 LaTeX 以来,上述软件包chngcntr
现在已成为 LaTeX 内核的一部分——无需单独加载它。
使用\numberwithin{equation}{subsection}
改变计数器输出格式,并将方程计数器的重置从部分转移到子部分级别(即每次\stepcounter{subsection}
使用。然而,这意味着孤儿\section
在 a 之后但之前的等式\subsection
将仅使用来自前一个等式的旧计数器值。
每次使用新的时,都会重置方程式编号的计数器\section
,但不会改变\theequation
命令(即计数器格式化宏)
\makeatletter
\@addtoreset{equation}{section}
\makeatother
作为此低级变体的替代方案,可以使用
\usepackage{chngcntr}
\counterwithin{equation}{section}
在序言中。
0
但是,如果子节号为,这不会解决尾随问题0
。可以使用条件来解决这个问题\theequation
,或者——更好的方法是——避免在\subsection
if之外使用方程式subsection
。
\documentclass[12pt]{article}
\usepackage{amsmath}
\makeatletter
\@addtoreset{equation}{section}
\makeatother
\numberwithin{equation}{subsection}
\begin{document}
\section{1}
\begin{equation}
1
\end{equation}
\subsection{1}
\begin{equation}
1
\end{equation}
\subsection{1}
\begin{equation}
1
\end{equation}
\begin{equation}
1
\end{equation}
\section{1}
\begin{equation}
1
\end{equation}
\subsection{1}
\begin{equation}
1
\end{equation}
\section{1}
\begin{equation}
1
\end{equation}
\subsection{1}
\begin{equation}
1
\end{equation}
\end{document}
答案2
我看不出使用如此复杂的方程编号有什么好处。在我看来,在章节内对方程进行编号已经足够了。
尽管如此,如果子段计数器为零,则可以抑制额外的级别。
也\numberwithin
没有定义传递闭包。因此,每个 的方程编号也需要重置\section
。
\documentclass[12pt]{article}
\usepackage{amsmath}
\numberwithin{equation}{section}% reset equation counter for sections
\numberwithin{equation}{subsection}
% Omit `.0` in equation numbers for non-existent subsections.
\renewcommand*{\theequation}{%
\ifnum\value{subsection}=0 %
\thesection
\else
\thesubsection
\fi
.\arabic{equation}%
}
\begin{document}
\section{1}
\begin{equation}
1
\end{equation}
\subsection{1}
\begin{equation}
1
\end{equation}
\subsection{1}
\begin{equation}
1
\end{equation}
\begin{equation}
1
\end{equation}
\section{1}
\begin{equation}
1
\end{equation}
\subsection{1}
\begin{equation}
1
\end{equation}
\section{1}
\begin{equation}
1
\end{equation}
\subsection{1}
\begin{equation}
1
\end{equation}
\end{document}
答案3
这种行为实际上在 2014 年的某个时候就发生了变化(有趣的是,就在提出这个问题之前不久)。当计数器递增时,下属(“内部”)计数器现在会递归重置。(这是通过首先将从属计数器设置为 -1,然后增加它们来实现的。)
使用最新版本的 LaTeX 内核,问题中的 MWE 现在可以生成标记为“(1.0.1)”、“(1.1.1)”、“(1.2.1)”、“(1.2.2)”、“(2.0.1)”、“(2.1.1)”、“(3.0.1)”和“(3.1.1)”的方程,正如人们所预料的那样。
以下内容摘自更改日志对于 LaTeX2ε:
24 LATEX 版本 2014/05/01 和 2015/01/01 之间的变化
[…]
24.12 计数器内仅重置下一级(pr4393)
这实际上是 LATEX 手册中隐含记录的行为,指出
\stepcounter
重置所有标记为“within”的计数器。但是,这意味着,例如,如果定理在章节内编号,并且您在书中开始新的章节,则章节计数器将重置为零,但定理计数器直到第一节出现才会重置。因此,直接在章节主体内(没有新章节)的定理将显示相对于上一章的最后一个定理递增的数字。出于这个原因,我们现在一次性重置所有级别的 within,即使这意味着其中一些重置可能会不必要地发生几次。