交错子方程环境

交错子方程环境

我希望使用方程环境来获得以下输出:

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}

在此处输入图片描述

相关内容