我希望使用方程环境来获得以下输出:
Some text...
a &= b \\ (A.1a)
c &= d (A.2a)
and some more text...
a' &= b' \\ (A.1b)
c' &= d' (A.2b)
我希望能够将 (A.1) 标记为\label{eq1}
并将 (A.2) 标记为\label{eq2}
;也就是说,我希望\eqref{eq1}
生成“(A.1)”并\eqref{eq2}
生成“(A.2)”。我正在使用amsmath
。
如果这些方程的顺序不同——也就是说,如果中间两个方程互换——那么这将很容易。然而,我正在努力用上面顺序的方程来做到这一点……
我可以做出这些方程式单独地可引用,通过使用诸如 和 之类的东西\addtocounter
,\refstepcounter
但\tag
只能以产生“(A.1a)”的方式\label{eq1a}
;我无法做到“组合”(A.1)。
答案1
在这个解决方案中,mixedsubequations
环境可以将各种方程的标签作为可选参数;我称之为主要的。如果没有指定可选参数,则环境为下属。
在主环境中,子方程计数器重置为 1,为了产生“a”,在从属环境中则是分步进行。
请注意,这仅当主环境和从属环境都具有相同数量的方程式(不一定align
每个环境都位于单个环境中)时才有效。还请注意,主环境的可选参数中的标签数量用于确定方程式的数量。
\documentclass{book}
\usepackage{amsmath}
\usepackage{xparse}
\newcounter{mixedsubequations}
\renewcommand{\themixedsubequations}{\alph{mixedsubequations}}
\ExplSyntaxOn
\int_new:N \g_samt_mixedsubeq_int
\NewDocumentEnvironment{mixedsubequations}{o}
{
\IfNoValueTF { #1 }
{
\addtocounter{equation}{-\g_samt_mixedsubeq_int}
\stepcounter{mixedsubequations}
}
{
\int_gset:Nn \g_samt_mixedsubeq_int { \clist_count:n { #1 } }
\clist_map_inline:nn { #1 }
{
\refstepcounter{equation}\label{##1}
}
\addtocounter{equation}{-\g_samt_mixedsubeq_int}
\setcounter{mixedsubequations}{1}
}
\domixedsubequations
}
{\ignorespacesafterend}
\NewDocumentCommand{\domixedsubequations}{}
{
\cs_set:Npx \theequation
{
\exp_not:o { \theequation }
\exp_not:n { \alph{mixedsubequations} }
}
\ignorespaces
}
\ExplSyntaxOff
\begin{document}
\appendix
\chapter{Title}
Some text
\begin{mixedsubequations}[eq1,eq2]
\begin{align}
a &= b \label{eq1a}\\
c &= d \label{eq2a}
\end{align}
\end{mixedsubequations}
Some more text
\begin{mixedsubequations}
\begin{align}
a' &= b' \label{eq1b}\\
c' &= d' \label{eq2b}
\end{align}
\end{mixedsubequations}
\eqref{eq1} \eqref{eq1a} \eqref{eq1b}
\eqref{eq2} \eqref{eq2a} \eqref{eq2b}
\end{document}