我想给一个方程式赋予两个单独的标签;我可以这样做吗?这样做的目的是为了有一个很长的部分,在其中给出一个很长的方程式列表,并在过程中解释它们。然后我对它们进行去维,为此我需要说类似“去维方程式 (1) 至 (20) 得到...”。因此,我需要能够两次引用标签方程式 (1),一次作为列表中的第一个方程式,第二次作为我想要讨论的方程式。当然,我可以只给它一个标签,但给它两个标签会很方便,这样如果我重新排序/添加方程式,我可以移动“第一个方程式”标签,然后一切仍然有意义。
举一个简洁的例子,我想要做的是
\begin{equation}
\label{first_equation} \label{special_equation}
a=b
\end{equation}
编辑:上面的代码确实可以编译,但是包含包amsmath
会阻止它编译。有没有办法使用此包中的功能并具有多标签功能?
答案1
是的。在同一个对象上放置多个\label
s 只会给你提供不同的名称来引用它:
\documentclass{article}
\begin{document}
\begin{equation}
\label{eq:ab}\label{eq:equality}
a = b.
\end{equation}
The relation between \( a \) and \( b \) is given by~(\ref{eq:ab}).
Using the equality~(\ref{eq:equality}), we see\dots
\end{document}
数学
正如 Mico 正确指出的那样,如果您加载amsmath
。他的回答(https://tex.stackexchange.com/a/40185/15925) 提供了一种定义新命令的方法\ltxlabel
,该命令在 AmSmathequation
环境中可以正常工作。但是,它在gather
和朋友中失败了。这里有一个解决方法,定义一个\clonelabel
可以在环境之外使用的命令。现在已更新以与 配合使用hyperref
,并进一步更新以与 配合使用cleveref
:
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\newcommand{\clonelabel}[2]{\@bsphack
\expandafter\ifx\csname r@#2\endcsname\relax
\else\protected@write\@auxout{}{\string\newlabel{#1}%
{\csname r@#2\endcsname}}%
\fi
\expandafter\ifx\csname r@#2@cref\endcsname\relax
\else\protected@write\@auxout{}{\string\newlabel{#1@cref}%
{\csname r@#2@cref\endcsname}}%
\fi
\@esphack}
\makeatother
\usepackage{hyperref}
\usepackage{cleveref}
\begin{document}
\begin{equation}
\label{eq:equality}
a = b.
\end{equation}\clonelabel{eq:ab}{eq:equality}
The relation between \( a \) and \( b \) is given by~\eqref{eq:ab}.
Using the equality~\eqref{eq:equality}, we see\dots
\begin{gather}
\label{eq:inequality}
p \ge q\\
\label{eq:ratio}
r/s = 20
\end{gather}
\clonelabel{eq:pq}{eq:inequality}
\clonelabel{eq:rs}{eq:ratio}
We refer to \eqref{eq:pq}, \eqref{eq:inequality}, \eqref{eq:rs} and
\eqref{eq:ratio}.
We think \cref{eq:pq} is as interesting as \cref{eq:inequality}.
\end{document}