因此,我创建了一个新的方程式环境,并带有相关计数器来跟踪我在文档中引入的一组特定的定义:
\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
。这种方法的步骤如下:defcounter
equation
defcounter
equation
\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}