创建从属于另一个的计数器

创建从属于另一个的计数器

我有以下内容:

\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减去(因为环境将增加此计数器),增加计数器,然后打印所需的标签,例如,并设置当前标签,以防您想使用这些方程编号。1equationequationsubequation1.1.1\label{...}\ref{...}

因此,在Proof启动普通proof环境的环境中,方程编号将作为当前方程计数器的子方程进行编号。这在嵌套时效果不佳。

相关内容