![autoref 到 dmath(来自 breqn 包)生成错误的链接文本](https://linux22.com/image/310318/autoref%20%E5%88%B0%20dmath%EF%BC%88%E6%9D%A5%E8%87%AA%20breqn%20%E5%8C%85%EF%BC%89%E7%94%9F%E6%88%90%E9%94%99%E8%AF%AF%E7%9A%84%E9%93%BE%E6%8E%A5%E6%96%87%E6%9C%AC.png)
在以下最小示例中,我的dmath
方程式有什么问题?为什么 hyperref 将其称为图,而autoref
对于使用以下公式定义的方程式,链接文本却正确无误\begin{equation}
\documentclass{amsart}
\usepackage{breqn}
\usepackage[colorlinks]{hyperref}
\begin{document}
\begin{equation}
\label{multiplication}
2 * 1 = 2
\end{equation}
\begin{figure}
\caption{Something strange}
\label{fig}
\end{figure}
\begin{dmath}\label{addition}
1 + 1 = 2
\end{dmath}
I want to talk about \autoref{addition}, not \autoref{fig}.
\begin{equation}
\label{subtraction}
2 - 1 = 1
\end{equation}
And \autoref{multiplication} is not very interesting. Let me speak of \autoref{addition}.
\end{document}
文档中有三个指向方程的超链接和一个指向图形的超链接。但输出显示“图形”三次,而“方程”仅一次。指向 breqn 环境的所有链接都是错误的。
它使用了正确的数字,但使用了错误的文本,组合形成了文档中实际上不存在的“图 2”。
交换行的顺序\usepackage
没有什么区别。
\label
在\begin{dmath}
和环境下正确的使用方法是什么\begin{dgroup}
?
答案1
dmath
包的环境breqn
不用于\refstepcounter
计数器的递增equation
。包hyperref
挂钩\refstepcounter
以添加超锚点作为链接目标。因此,您的示例使用 () 之前的锚点figure.1
,并且您将上图作为链接目标。
\eq@setnumber
解决方法:使用以下示例补丁程序\refstepcounter
来代替\stepcounter
:
\documentclass{amsart}
\usepackage{breqn}
\usepackage{etoolbox}
\usepackage[colorlinks]{hyperref}
\makeatletter
\patchcmd\eq@setnumber{\stepcounter}{\refstepcounter}{}{%
\errmessage{Patching \noexpand\eq@setnumber failed}%
}
\makeatother
\begin{document}
\begin{figure}
\caption{Something strange}
\label{fig}
\end{figure}
\begin{figure}
\caption{Something strange}
\label{fig2}
\end{figure}
\begin{dmath}\label{addition}
1 + 1 = 2
\end{dmath}
I want to talk about \autoref{addition}, not \autoref{fig}.
\begin{equation}
\label{subtraction}
2 - 1 = 1
\end{equation}
And \autoref{subtraction} is not very interesting. Let me speak of
\autoref{addition}.
\end{document}