不同章节中的子章节使用相同的主编号进行分隔

不同章节中的子章节使用相同的主编号进行分隔

问题是我想将一组方程式放在文章的不同部分,并在\subequations环境中用相同的主数字标记它们。

正如我在相关问题中发现的那样,我可以将文本放在\intertext数学模式的块中,以获得由标有相同主数字的文本分隔的子方程式。

但如果我有方程式,例如

a=b (2a)
b=c (2b)
c=d (2c)
d=e (2d)

我在一个部分中写了 (2a)、(2b)。然后我写了一些其他带有标签的方程式,如 (3)、(4)。最后,我将 (2c)、(2d) 放在下一节中。那么我该怎么做才能确保c=d下一节d=e中的主编号为 (2),子方程编号为 (2c)、(2d),而不是 (5a) 和 (5b)?

\section{A}
Text Text
\begin{subequations}
\begin{align)
   a &= b \\ % want to labeled by (2a)
   b &= c \\ % want to labeled by (2c)
\end{align}
\end{subequations}

Text Text
\begin{equation}
   3=3 % labeled by (3)
\end{equation}

Text Text
\begin{equation}
   4=4 % labeled by (4)
\end{equation}

Text Text

\section{B}
Text Text
\begin{subequations}
\begin{align}
   c &= d \\ % want to labeled by (2c)
   d &= e \\ % want to labeled by (2d)
\end{align}
\end{subequations}

或者是否有其他解决方案subequations

答案1

这是一个涉及新环境的解决方案。每当您计划拆分子方程编号时,请使用longsubequation可以

label=<string>

或者

continue=<string>

语法应该很明显。也可以在或<string>中使用来引用全局方程编号。\ref\eqref

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentEnvironment{longsubequations}{m}
 {
  \keys_set:nn { wutuku/subeqn } { #1 }
  \bool_if:NT \l__wutuku_subeqn_continue_bool
   {
    \tl_gset:Nx \g__wutuku_subeqn_save_tl { \the\value{equation} }
    \setcounter{equation}{ \tl_use:c { g__wutuku_subeqn_eqn_ \l__wutuku_subeqn_label_tl _tl } }
    \addtocounter{equation}{-1}
   }
  \begin{subequations}
  \bool_if:NTF \l__wutuku_subeqn_continue_bool
   {
    \setcounter{equation}{ \tl_use:c { g__wutuku_subeqn_subeqn_ \l__wutuku_subeqn_label_tl _tl } }
   }
   {
    \label{ \l__wutuku_subeqn_label_tl }
   }
 }
 {
  \tl_gset:cx { g__wutuku_subeqn_subeqn_ \l__wutuku_subeqn_label_tl _tl } { \the\value{equation} }
  \end{subequations}
  \bool_if:NTF \l__wutuku_subeqn_continue_bool
   {
    \setcounter{equation}{ \tl_use:N \g__wutuku_subeqn_save_tl }
   }
   {
    \tl_gset:cx { g__wutuku_subeqn_eqn_ \l__wutuku_subeqn_label_tl _tl } { \the\value{equation} }
   }
 }

\keys_define:nn { wutuku/subeqn }
 {
  label .code:n =
   {
    \tl_set:Nn \l__wutuku_subeqn_label_tl { #1 }
    \tl_new:c { g__wutuku_subeqn_eqn_#1_tl }
    \tl_new:c { g__wutuku_subeqn_subeqn_#1_tl }
   },
  continue .code:n =
   {
    \tl_set:Nn \l__wutuku_subeqn_label_tl { #1 }
    \bool_set_true:N \l__wutuku_subeqn_continue_bool
   },
 }
\bool_new:N \l__wutuku_subeqn_continue_bool
\tl_new:N \g__wutuku_subeqn_save_tl
\ExplSyntaxOff

\begin{document}

\section{A}
Text Text
\begin{equation}
   1=1 \label{eq:1}
\end{equation}

Text Text
\begin{longsubequations}{label=foo}
\begin{align}
   a &= b \label{eq:2a} \\
   b &= c \label{eq:2b}
\end{align}
\end{longsubequations}

Text Text
\begin{equation}
   3=3 \label{eq:3}
\end{equation}

Text Text
\begin{equation}
   4=4 \label{eq:4}
\end{equation}

Text Text

\section{B}
Text Text
\begin{longsubequations}{continue=foo}
\begin{align}
  c &= d \label{eq:2c} \\
  d &= e \label{eq:2d} 
\end{align}
\end{longsubequations}

Text Text
\begin{equation}
   5=5 \label{5}
\end{equation}

Text Text
\begin{longsubequations}{continue=foo}
\begin{align}
  c &= d \label{eq:2e} \\
  d &= e \label{eq:2f}
\end{align}
\end{longsubequations}

Text Text
\begin{equation}
   6=6 \label{6}
\end{equation}

\eqref{foo} should be 2

\eqref{eq:1} \eqref{eq:2a} \eqref{eq:2e}

\clearpage

\section{C}
Text Text
\begin{equation}
   1=1
\end{equation}

Text Text
\begin{longsubequations}{label=baz}
\begin{align}
   a &= b \\
   b &= c
\end{align}
\end{longsubequations}

Text Text
\begin{equation}
   3=3
\end{equation}

Text Text
\begin{equation}
   4=4
\end{equation}

Text Text

\section{D}
Text Text
\begin{longsubequations}{continue=baz}
\begin{align}
  c &= d \\
  d &= e
\end{align}
\end{longsubequations}

Text Text
\begin{equation}
   5=5
\end{equation}

Text Text
\begin{longsubequations}{continue=foo}
\begin{align}
  c &= d \\
  d &= e
\end{align}
\end{longsubequations}

Text Text
\begin{equation}
   6=6
\end{equation}

\end{document}

正如你从例子中看到的,longsubequations甚至可以交织在一起。

enter image description here

答案2

如果您想更改自动方程编号,您可以手动设置方程和子方程计数器。环境subequations内部将当前方程编号复制到变量中,并使用主计数器作为子计数器。因此,更改subequations环境外部的主计数器会更改方程编号,而更改环境内部的主计数器会更改子方程编号。环境将增加两个计数器,因此请将其设置为您想要的数字减 1。

请注意,之后您应该重置计数器以恢复文档中的编号。在下面的 MWE 中,先前的值存储在临时计数器中,因此中间有多少个方程式并不重要。


编辑与@egreg 的回答一致,自动化程度更高,需要继续的计数器也会被存储,因此您不必手动设置数字。请注意,对于这种方法,您只能保存一组计数器 - 但是,如果您想继续不同的方程组,您可以引入额外的计数器。

梅威瑟:

\documentclass{article}
\usepackage{amsmath}
\newcounter{tmpcount} % temporary counters
\newcounter{continuemain}
\newcounter{continuesub}

\begin{document}
\begin{equation}
   1=1 % labeled by (1)
\end{equation}

\setcounter{continuemain}{\value{equation}}
\begin{subequations}
\begin{align}
   a &= b \\ % want to labeled by (2a)
   b &= c % want to labeled by (2c)
\end{align}
\setcounter{continuesub}{\value{equation}}
\end{subequations}
\begin{equation}
   3=3 % labeled by (3)
\end{equation}
\begin{equation}
   4=4 % labeled by (4)
\end{equation}

% store current equation counter
\setcounter{tmpcount}{\value{equation}} 
% set main equation counter
\setcounter{equation}{\value{continuemain}}
\begin{subequations}
% set subequation counter
\setcounter{equation}{\value{continuesub}}
\begin{align}
   c &= d \\ % want to labeled by (2c)
   d &= e % want to labeled by (2d)
\end{align}
% update sub-counter for continuation in next set of subequations
\setcounter{continuesub}{\value{equation}}    
\end{subequations}
% reset equation counter to previous value
\setcounter{equation}{\value{tmpcount}} 
\begin{equation}
   5=5 % labeled by (5)
\end{equation}
\end{document}

结果:

enter image description here

相关内容