![章节和小节中的编号方程式](https://linux22.com/image/306994/%E7%AB%A0%E8%8A%82%E5%92%8C%E5%B0%8F%E8%8A%82%E4%B8%AD%E7%9A%84%E7%BC%96%E5%8F%B7%E6%96%B9%E7%A8%8B%E5%BC%8F.png)
一般来说,我希望使用子节编号来对方程式进行编号,例如,如果我在子节 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
包含分区单元名称(请参阅在哪里可以找到类似\@startsection
LaTeX 的命令的帮助文件或文档?)。
我们修补这个宏以用作#1
计数器更新的一部分,将前缀添加\csname the#1\endcsname.
到方程式编号。