我使用 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}
任何关于该做什么的帮助都将非常有用!
我尝试过使用protect
和mbox
,但没有任何效果!
答案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
(如果我没记错的话)以手动添加超链接。