具有单个计数器的全新收集和方程环境

具有单个计数器的全新收集和方程环境

因此,我创建了一个新的方程式环境,并带有相关计数器来跟踪我在文档中引入的一组特定的定义:

\newcounter{defcounter}
\newenvironment{defeq}{%
\refstepcounter{defcounter}
\renewcommand\theequation{D.\thedefcounter}
\begin{equation}}
{\end{equation}}

这产生了所需的结果:一个defeq就像的新环境equation,但有自己的计数器和自己的标签格式(例如,(D.1))。

但偶尔我会连续使用多个定义,并希望使用gather环境来避免连续环境导致的难看的垂直间距equation。对上面的代码进行轻微修改作品种类

\newenvironment{defgather}{%
\refstepcounter{defcounter}
\renewcommand\theequation{D.\thedefcounter}
\gather}
{\endgather}

但是,换行\\似乎不会影响新创建的计数器。以下 MWE 说明了这个问题:

\documentclass{article}
\usepackage{amsmath}
    \newcounter{defcounter}
    \newenvironment{defeq}{%
    \refstepcounter{defcounter}
    \renewcommand\theequation{D.\thedefcounter}
    \begin{equation}}
    {\end{equation}}

    \newenvironment{defgather}{%
    \refstepcounter{defcounter}
    \renewcommand\theequation{D.\thedefcounter}
    \gather}
    {\endgather}
\begin{document}

\begin{defeq}
    1
\end{defeq}

Text text text text.

\begin{defgather}
    2 \\
    3
\end{defgather}

\end{document}

包含“1”和“2”的行被正确标记为——(D.1)和(D.2)。但是,包含“3”的行被标记为(D.2),这表明没有\\defcounter默认收集器那样对equation计数器进行步进。

我怎样才能修复我的新收集环境以便\\采取新的措施?

答案1

最简单的方法是在您的环境中使用\let。这种方法的步骤如下:defcounterequationdefcounterequation

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}
\newcounter{defcounter}

\makeatletter
\newenvironment{defeq}{%
  \let\c@equation\c@defcounter% equation is equivalent to defcounter
  \renewcommand\theequation{D.\arabic{equation}}
  \begin{equation}}
  {\end{equation}}

\newenvironment{defgather}{%
  \let\c@equation\c@defcounter% equation is equivalent to defcounter
  \renewcommand\theequation{D.\arabic{equation}}
  \gather}
  {\endgather}
\makeatother

\begin{document}

\begin{equation}
  abc \label{eq:first}
\end{equation}

\begin{defeq}
  1 \label{deq:first}
\end{defeq}

There is~\eqref{eq:first}, \eqref{deq:first}, \eqref{deq:second},~\eqref{deq:third} 
and~\eqref{eq:second}.

\begin{defgather}
  2 \label{deq:second} \\
  3 \label{deq:third}
\end{defgather}

\begin{equation}
  abc \label{eq:second}
\end{equation}

\end{document}

相关内容