使用 hyperref 定义多个标签

使用 hyperref 定义多个标签

我使用 stackrel 命令来指示公式转换中的重要步骤。例如,我会写:A\stackrel{(!)}{=}B以便我稍后可以在文本中解释为什么完全A相等B

\refeq{foo}现在已经编写了一个可以帮我完成此操作的命令。这样我\eqqref{foo}稍后可以在文本中使用,它会自动显示文本中正确等号的正确数字(与使用\label{foo}and相同ref{foo})。

我只有一个问题:当我有一个想要标记的方程式时;并且这个方程式中还有一个我想要引用的等号,我得到了错误

Package amsmath Error: Multiple \label's: label 'rom' will be lost.

我该怎么做才能克服这个问题?我希望能够引用一个等式以及该等式中的任何等号。

这是我的工作副本:

\documentclass{article}

\usepackage{hyperref}
\usepackage{amsmath}

\def\clap#1{\hbox to 0pt{\hss#1\hss}}
\def\mathllap{\mathpalette\mathllapinternal} \def\mathrlap{\mathpalette\mathrlapinternal} \def\mathclap{\mathpalette\mathclapinternal}
\def\mathllapinternal#1#2{\llap{$\mathsurround=0pt#1{#2}$}}
\def\mathrlapinternal#1#2{\rlap{$\mathsurround=0pt#1{#2}$}}
\def\mathclapinternal#1#2{\clap{$\mathsurround=0pt#1{#2}$}}

\newcounter{qc}
\setcounter{qc}{2}
\usepackage{refcount,makerobust}

\newcommand{\refeq}[1]{%
 \refstepcounter{qc}\label{#1}%
 \stackrel{
  \stackrel{
   {\text{\tiny $\mathclap{\roman{qc}}$}}
  }{\text{$\downarrow$}}
 }{=}%
}


\newcounter{refeqc}
\setcounter{refeqc}{0}

\newcommand{\eqqref}[1]{%
 \setcounterref{refeqc}{#1}%
 $(\roman{refeqc})$
}


\begin{document}



\begin{equation}A\refeq{AB}B\label{romeo} \end{equation}
\begin{equation}R=B\refeq{BC} C\end{equation}

\eqqref{AB} in equation \ref{romeo} is the same as \eqqref{BC}

\end{document}

任何关于该做什么的帮助都将非常有用!

我尝试过使用protectmbox,但没有任何效果!

答案1

我尝试过使用 protect 和 mbox,但是没有任何作用!

两者都无济于事,因为它们与参考文献无关。

您的文档中的数学模式\label定义如下(最有可能的是amsmath):

\ifx \df@label \@empty \else \@amsmath@err {Multiple \string \label 's: label
 '\df@label ' will be lost}\@eha \fi \gdef \df@label

也就是说,它只是存储标签,\df@label但首先检查它是否仍为空。然后,在等式结束时,最终使用它。

在我看来,您需要的额外标签是 textmode \label。以下代码似乎有效。请注意,我保存了 to\label\textlabel使用组将更改保留为\@currentlabel本地。(不要为此使用{ }or ,\bgroup \egroup因为它们会在数学模式中创建一个新的数学原子。)如果没有组,两个实际上独立的标签将相互影响,即在您的示例中,标签romeo也将具有数字 3,而不是 1。

\let\textlabel\label
\newcommand{\refeq}[1]{%
 \begingroup
 \refstepcounter{qc}\textlabel{#1}%
 \stackrel{
  \stackrel{
   {\text{\tiny $\mathclap{\roman{qc}}$}}
  }{\text{$\downarrow$}}
 }{=}%
 \endgroup
}

只需用这个替换你的定义\refeq即可。你也可以查看\hyperlink\hypertarget(如果我没记错的话)以手动添加超链接。

相关内容