我想实现一种一致的方法来标记我的方程式,如下所示:
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:a
,#1:b
依此类推。 - 子方程的数量。
\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”的情况。我仍在寻找一种更通用、更优雅的解决方案。