当我做
\documentclass[12pt]{article}
\usepackage{amsmath}
\begin{document}\setcounter{equation}{10}
\begin{subequations}
\begin{align}
a = b,\\
a = c,\\
a = d,\\
a = e.
\end{align}
\end{subequations}
\end{document}
我得到
这是意料之中的。
按照我的口味,我发现数字的重复有点分散注意力:太多信息是多余的(既然它显然与上面的相同,为什么要重复方程式编号?)。
我想知道是否有人可以建议一种减少冗余信息量的好方法以及如何获得效果。确切地说,如果解决方案仅适用于唯一环境(如上例所示),而不适用于多个环境,我会 100% 满意。
答案1
您可以按如下方式操作,但我发现这会分散注意力。
\documentclass{article}
\usepackage{amsmath,xpatch}
\makeatletter
% detach \eqref and \tag making
\let\tagform@@\tagform@ % keep a copy
\renewcommand{\eqref}[1]{\textup{\eqreftagform@{\ref{#1}}}}
\let\eqreftagform@\tagform@@
\xpatchcmd{\subequations}
{\ignorespaces}
{\let\tagform@\subequationstagform@\ignorespaces}
{}{}
\def\subequationstagform@#1{%
\check@parentequation{#1}{%
\ifnum\value{equation}=\@ne
\tagform@@{#1}%
\else
\tagform@@{\alph{equation}}%
\fi
}{%
\tagform@@{#1}%
}%
}
\def\check@parentequation#1{%
\expandafter\check@@parentequation#1\@nil
}
\def\check@@parentequation#1#2\@nil{%
\ifx#1\theparentequation
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
}
\makeatother
\begin{document}
\setcounter{equation}{10}
\begin{subequations}
\begin{align}
a = b, \label{b} \\
a = c, \label{c} \\
a = d, \label{d} \\
a = e. \label{e} \\
a = f\tag{*} \label{f}
\end{align}
\end{subequations}
\eqref{b}, \eqref{c}, \eqref{d}, \eqref{e}, \eqref{f}
\end{document}
答案2
equation
您可以通过修改计数器的显示方式(如中定义)来更改方程式数字的外观\theequation
。
该宏在环境中的正常定义subequations
是\theparentequation \alph{equation}
。您可以添加一个条件,以便仅当子方程编号为 1 时才添加父方程编号。
请注意,方程编号也用于参考文献中显示的编号,因此此解决方案需要手动添加对主方程的参考。
梅威瑟:
\documentclass[12pt]{article}
\usepackage{amsmath}
\begin{document}\setcounter{equation}{10}
\begin{subequations}
\def\theequation{%
\ifnum\value{equation}=1 \theparentequation\fi%
\alph{equation}}%
\label{aismain}
\begin{align}
a = b,\\
a = c,\label{aisc}\\
a = d,\\
a = e.
\end{align}
\end{subequations}
See subequation \ref{aisc} which is actually \ref{aismain}\ref{aisc}.
\end{document}
结果:
此解决方案仅适用于单个subequations
环境。使用etoolbox
包,您可以尝试使用钩子将的重新定义挂接到环境本身\theequation
的定义上。但是,在这种情况下,钩子似乎有点太早了(即,它不能正常工作)。当您挂接到时,它确实有效,但是当您在环境之外使用时,这可能会导致问题。subequations
\AtBeginEnvironment
align
align
subequations
代码:
\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{etoolbox}
\AtBeginEnvironment{align}{%
\def\theequation{%
\ifnum\value{equation}=1 \theparentequation\fi%
\alph{equation}}%
}