24 LATEX 版本 2014/05/01 和 2015/01/01 之间的变化

24 LATEX 版本 2014/05/01 和 2015/01/01 之间的变化

\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,或者——更好的方法是——避免在\subsectionif之外使用方程式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,即使这意味着其中一些重置可能会不必要地发生几次。


相关内容