问题是我想将一组方程式放在文章的不同部分,并在\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
甚至可以交织在一起。
答案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}
结果: