章节和小节中的编号方程式

章节和小节中的编号方程式

一般来说,我希望使用子节编号来对方程式进行编号,例如,如果我在子节 2.3 中,那么它应该对本节中的第一个方程式 (2.3.1) 进行编号。为此,我尝试将其简单地放在\numberwithin{equation}{subsection}序言中。然而,这样做的“问题”(或者说,不受欢迎的行为) 是,当我只进入一个节而没有进入子节时,它会将子节编号列为 0,而我更希望它只是抑制这一点。

例如,参见以下 MWE。第二个方程的编号“正确”,而我更希望第一个方程的编号简单(1.1)。

\documentclass{article}

\usepackage{amsmath}

\numberwithin{equation}{subsection}

\begin{document}

\section{Section}

\begin{equation}
E=mc^2.
\end{equation}

\subsection{Sub-section}

\begin{equation}
E=\hbar \omega .
\end{equation}

\end{document}

平均能量损失

答案1

对于一次性调整,您可以添加

\let\oldsection\section% Store \section
\renewcommand{\section}{% Update \section
  \renewcommand{\theequation}{\thesection.\arabic{equation}}% Update equation number
  \oldsection}% Regular \section
\let\oldsubsection\subsection% Store \subsection
\renewcommand{\subsection}{% Update \subsection
  \renewcommand{\theequation}{\thesubsection.\arabic{equation}}% Update equation number
  \oldsubsection}% Regular \subsection

到您的序言。上述命令更新\section\subsection调整\theequation- 方程编号打印机制 - 以插入\thesection\thesubsection作为方程编号的一部分。

在此处输入图片描述

\documentclass{article}

\usepackage{amsmath}

\numberwithin{equation}{subsection}

\let\oldsection\section% Store \section
\renewcommand{\section}{% Update \section
  \renewcommand{\theequation}{\thesection.\arabic{equation}}% Update equation number
  \oldsection}% Regular \section
\let\oldsubsection\subsection% Store \subsection
\renewcommand{\subsection}{% Update \subsection
  \renewcommand{\theequation}{\thesubsection.\arabic{equation}}% Update equation number
  \oldsubsection}% Regular \subsection

\begin{document}

\section{Section}

\begin{equation}
E=mc^2.
\end{equation}

\subsection{Sub-section}

\begin{equation}
E=\hbar \omega .
\end{equation}

\end{document}

对于更通用的方法(每个部分类型的方程编号),您可以\@startsection直接使用etoolbox

\usepackage{etoolbox}
\makeatletter
\patchcmd{\@startsection}% <cmd>
  {\if@noskipsec}% <search>
  {\csgdef{theequation}{\csname the#1\endcsname.\arabic{equation}}\if@noskipsec}% <replace>
  {}{}% <success><failure>
\makeatother

\@startsection被每个分区命令(当不使用由某些包引起的调整时)用来设置分区标题。此外,第一个参数#1包含分区单元名称(请参阅在哪里可以找到类似\@startsectionLaTeX 的命令的帮助文件或文档?)。

我们修补这个宏以用作#1计数器更新的一部分,将前缀添加\csname the#1\endcsname.到方程式编号。

相关内容