我正在尝试设置计数器,以便方程和定理按节递增,并且方程和定理编号之间没有重叠。我还希望能够将定理中的方程编号为定理编号的子编号。
例如在第 2 节中,我可能首先有一个方程,将其标记为 (2.1),然后有一个定理,标记为 2.2,其中定理内部有一个方程,我希望将其标记为 2.2.1。
答案1
在下面的解决方案中我使用了
\numberwithin{equation}{section} % (1.1), (1.2), etc
\newtheorem{mytheorem}[equation]{Theorem} % Theorems share equation numbers
获取编号(1.1)
、(1.2)
等,然后mytheorem
获取与相同的数字equations
。
我从中借用了一些重要的代码命令行为取决于当前环境这样我的newcounter
subequations
就可以增加,但是仅有的当在内mytheorem
。
我用过etoolbox
因为它的重要\appto
命令。
完成 MWE:
% arara: pdflatex
\documentclass{article}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{etoolbox}
\numberwithin{equation}{section} % (1.1), (1.2), etc
\newtheorem{mytheorem}[equation]{Theorem} % Theorems share equation numbers
% https://tex.stackexchange.com/questions/39738/command-behavior-depending-on-current-environment
\makeatletter
\def\Mycurrentvir{document}
\def\ifenv#1{
\def\@tempa{#1}%
\ifx\@tempa\Mycurrentvir
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
}
\makeatother
\newcounter{subequation}
\appto\mytheorem{\setcounter{subequation}{0}%
\def\Mycurrentvir{mytheorem}%
\renewcommand{\theequation}{\arabic{section}.\arabic{equation}.\arabic{subequation}}}
\AtBeginEnvironment{equation}{\ifenv{mytheorem}{\refstepcounter{subequation}\addtocounter{equation}{-1}}{}}
\begin{document}
\section{My section}
\begin{equation}\label{eq:first}
y=mx+b
\end{equation}
\begin{mytheorem}\label{thm:test}
\begin{equation}\label{eq:test}
y=ax^2+bx+c
\end{equation}
Another equation
\begin{equation}
y=ax^2+bx+c
\end{equation}
\end{mytheorem}
\begin{equation}
y=x^3
\end{equation}
\begin{itemize}
\item First equation: \eqref{eq:first}
\item Equation within theorem: \eqref{eq:test}
\item Theorem reference: \ref{thm:test}
\end{itemize}
\section{another section}
\begin{equation}
y=mx+b
\end{equation}
\begin{mytheorem}
\begin{equation}
y=ax^2+bx+c
\end{equation}
Another equation
\begin{equation}
y=ax^2+bx+c
\end{equation}
\end{mytheorem}
\begin{equation}
y=x^3
\end{equation}
\end{document}