多个对齐的方程式,带有一个紧凑标签

多个对齐的方程式,带有一个紧凑标签

我想实现一种一致的方法来标记我的方程式,如下所示:

a=a,    b=b,    c=c    (1a,b,c)

并能够独立引用每一个方程式,例如:

Equations (1) including Equation (1.b).

到目前为止,我有这个 MWE:

\documentclass[12pt, twoside, titlepage, a4paper]{book}
\usepackage{amsmath}
\begin{document}
\begin{equation} \label{eq:test}
    a=a,\quad b=b,\quad c=c \tag{\theequation a,b,c}
\end{equation}
Equations \eqref{eq:test} including \eqref{eq:test:b}
\end{document}

全球指数与全球方程等式:文本效果很好,但显然我不能使用每个子方程的引用。我认为这不是解决问题的办法,所以我愿意接受任何建议。

答案1

我尝试了一些方法。似乎可行,但我不是专家,因此我不认为这个解决方案是最好的。基本上,我定义了一个multequation环境,它本质上是一个equation带有修改标签的环境。它需要两个参数:

  1. (可选)方程的标签。这也用于定义子方程的标签:如果#1是标签,则子方程标记为#1:a#1:b依此类推。
  2. 子方程的数量。
\documentclass{book}
\usepackage{amsmath}
\makeatletter
\newcounter{multeqlength}
\newcounter{multeqcntr}
\def\make@multeq@tagandlabels{%
    \edef\eq@tag{\alph{multeqcntr}}
    \ifnum\value{multeqcntr}<\value{multeqlength}
        \expandafter\g@addto@macro\expandafter\multeqtag\expandafter{\eq@tag,\,}
        \expandafter\g@addto@macro\expandafter\multeqlabels\expandafter{\eq@tag,}
        \stepcounter{multeqcntr}
        \make@multeq@tagandlabels
    \else
        \expandafter\g@addto@macro\expandafter\multeqtag\expandafter{\eq@tag}
        \expandafter\g@addto@macro\expandafter\multeqlabels\expandafter{\eq@tag}
    \fi%
}
\newenvironment{multequation}[2][]{%
    \setcounter{multeqlength}{#2}
    \setcounter{multeqcntr}{1}
    \def\multeqtag{\theequation}
    \def\multeqlabels{}
    \make@multeq@tagandlabels
    \begin{equation}
    \refstepcounter{equation}
    \tag{\multeqtag}
    \def\temp{#1}
    \ifx\temp\empty\else
        \label{#1}
        \@for\next:=\multeqlabels\do{%
            \protected@write\@auxout{}{%
                \string\newlabel{#1:\next}{{\theequation\next}{\thepage}}%
            }%
        }
    \fi%
}{
    \end{equation}%
}
\makeatother
\begin{document}
\begin{multequation}[eq:test]{3}
    a=a,\quad b=b,\quad c=c
\end{multequation}
Equations \eqref{eq:test} including \eqref{eq:test:b}

\begin{multequation}{2}
    d=d, \quad e=e
\end{multequation}
\end{document}

答案2

我回来后似乎找到了可以解决我的问题的方法。这是我的 MWE:

\documentclass{book}
\usepackage{amsmath}

\makeatletter
\newcommand{\advancethree}[3]{%
    \stepcounter{equation}%
    \edef\@currentlabel{\theequation}\label{#1}%
    \edef\temp{\theequation,}%
    %
    \stepcounter{equation}%
    \edef\@currentlabel{\theequation}\label{#2}%
    \edef\hehe{b}
    \edef\temp{\temp\hehe,}%
    %
    \stepcounter{equation}%
    \edef\@currentlabel{\theequation}\label{#3}%
    \edef\hehe{c}
    \edef\temp{\temp\hehe}%
    %
    \renewcommand{\theequation}{\temp}%
}
\let\ORItheequation\theequation
\newcommand{\restore}{\addtocounter{equation}{-1}\let\theequation\ORItheequation}
\newenvironment{supermega}[2][]{
    \subequations
    \label{#1}
    \advancethree{#1:a}{#1:b}{#1:c}%
    \begin{equation}
}{
    \end{equation}\restore
    \endsubequations
}
\makeatother

\begin{document}
\begin{supermega}[eqq:test]{3}
    a=a,\quad b=b,\quad c=c, 
\end{supermega}
equation \eqref{eqq:test}, including \eqref{eqq:test:b}
\end{document}

我改编了一个例子这里。这只是一个勉强凑合过的工作解决方案,而且只适用于“a、b、c”的情况。我仍在寻找一种更通用、更优雅的解决方案。

相关内容