我有以下内容:
\documentclass[leqno]{article}
\usepackage{amsthm}
\usepackage{amsmath}
\numberwithin{equation}{section}
\newtheorem{Theorem}[equation]{Theorem }
\newtheorem{Lemma}{Lemma }[equation]
\begin{document}
\section{One}
\begin{Theorem}
Theorem one.
\end{Theorem}
To prove, use the following lemma
\begin{Lemma}
Lemma
\end{Lemma}
Observe we derived the following relation
\begin{equation}
\end{equation}
\end{document}
我想要将 (1.3) 改为 (1.2.2)。该怎么做?
答案1
根据问题编辑的第二种解决方案
这里有一个简单的方法来实现你想要的效果,即定义一个名为 的新方程式环境Equation
。该环境使用Lemma
计数器对方程式进行编号:
以下是代码:
\documentclass[leqno]{article}
\usepackage{amsthm}
\usepackage{amsmath}
\numberwithin{equation}{section}
\newtheorem{Theorem}[equation]{Theorem }
\newtheorem{Lemma}{Lemma}[equation]
\makeatletter
\def\Equation{$$\refstepcounter{Lemma}}
\def\endEquation{\leqno \hbox{\normalfont \normalcolor (\theLemma)}$$\@ignoretrue}
\makeatother
\begin{document}
\section{One}
\begin{Theorem}
Theorem one.
\end{Theorem}
To prove, use the following lemma
\begin{Lemma}
Lemma
\end{Lemma}
Observe we derived the following relation
\begin{Equation}
\text{Here is an equation}
\end{Equation}
\begin{Equation}
\text{Here is a second equation}
\end{Equation}
\begin{equation}
\text{Here is a third equation}
\end{equation}
\end{document}
这几乎肯定看起来有点神秘,但事实上,如果你查看latex.ltx
其中一个乳胶源文件,你会发现方程环境的定义是:
\def\equation{$$\refstepcounter{equation}}
\def\endequation{\eqno \hbox{\@eqnnum}$$\@ignoretrue}
我所做的就是修改它以便它使用计数器Lemma
(并且它用来\leqno
将方程式放在左边,就像在 OP 中一样,它扩展了\@eqnnum
使用的定义Lemma
)。
需要注意的是,如果你使用澳大利亚阿姆斯特克斯包,那么你可能想做点不同的事情,因为它在方程开始时做了一些奇特的事情。在这种情况下,你会遇到更多的麻烦,因为你会想做一些类似的事情许多环境如gather
,,align
...
原始答案(更复杂)
我希望有一个适用于此的软件包,但是,如果我理解你的问题,这里有一种方法可以做你想做的事情:
\documentclass{article}
\usepackage{amsmath, amsthm}
\usepackage{etoolbox}
\numberwithin{equation}{section}
\newtheorem{Theorem}[equation]{Theorem}
\newcounter{subequation}
\makeatletter
\newcommand\Subequation{%
\addtocounter{equation}{-1}% undo increment of equation
\addtocounter{subequation}{1}% increment subequation
\RealEquation.\arabic{subequation}% print subequation label
\xdef\@currentlabel{\RealEquation.\noexpand\arabic{subequation}}%
}
\makeatother
\newenvironment{Proof}[1][\relax]
{\ifx#1\relax\relax\proof\else\proof[#1]\fi% start proof environment
\setcounter{subequation}{0}% reset subequation counter
\xdef\RealEquation{\theequation}% save current equation number
\let\theequation\Subequation}% hijack \theequation
{\endproof}
\begin{document}
\section{My wonderful section}
\begin{Theorem}
1+1 = 2
\end{Theorem}
\begin{Proof}
We analysize the fancy equation
\begin{equation} 1+1=2 \end{equation}\label{first}
and see that it must be true. It's so good we'll say it again:
\begin{equation}\label{second} 1+1=2 \end{equation}
\end{Proof}
Outside of the proof the equation \eqref{second} is still true:
\begin{equation} 1+1=2 \end{equation}
\end{document}
输出结果如下:
其工作方式如下。我定义了一个Proof
环境来改变 的定义\theequation
,这是 LaTeX 用来打印方程编号的方法。Proof
环境内部\theequation
变为\Subequation
。宏从计数器中\Subequation
减去(因为环境将增加此计数器),增加计数器,然后打印所需的标签,例如,并设置当前标签,以防您想使用这些方程编号。1
equation
equation
subequation
1.1.1
\label{...}
\ref{...}
因此,在Proof
启动普通proof
环境的环境中,方程编号将作为当前方程计数器的子方程进行编号。这在嵌套时效果不佳。