数学

数学

我想给一个方程式赋予两个单独的标签;我可以这样做吗?这样做的目的是为了有一个很长的部分,在其中给出一个很长的方程式列表,并在过程中解释它们。然后我对它们进行去维,为此我需要说类似“去维方程式 (1) 至 (20) 得到...”。因此,我需要能够两次引用标签方程式 (1),一次作为列表中的第一个方程式,第二次作为我想要讨论的方程式。当然,我可以只给它一个标签,但给它两个标签会很方便,这样如果我重新排序/添加方程式,我可以移动“第一个方程式”标签,然后一切仍然有意义。

举一个简洁的例子,我想要做的是

\begin{equation}
\label{first_equation} \label{special_equation}
a=b
\end{equation}

编辑:上面的代码确实可以编译,但是包含包amsmath会阻止它编译。有没有办法使用此包中的功能并具有多标签功能?

答案1

是的。在同一个对象上放置多个\labels 只会给你提供不同的名称来引用它:

示例输出

\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}

相关内容