dmath への autoref (breqn パッケージから) が間違ったリンク テキストを生成する

dmath への autoref (breqn パッケージから) が間違ったリンク テキストを生成する

次の最小限の例では、私のdmath方程式のどこが間違っているのでしょうか? ハイパーリファレンスはこれを図と呼んでいるのに、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}

ドキュメントには、方程式へのハイパーリンクが 3 つと、図へのハイパーリンクが 1 つあります。しかし、出力には「図」が 3 回表示され、「方程式」は 1 回しか表示されません。breqn 環境へのリンクはすべて間違っています。

正しい数字が使用されていますが、間違ったテキストが組み合わされて、実際にはドキュメントに存在しない「図 2」が形成されています。

行の順序を入れ替えても\usepackage違いはありません。

奇妙な出力。3 つのリンクに「図」が含まれ、1 つのリンクに「方程式」が含まれており、ソース マテリアルとはまったく逆です。

および環境\labelでの正しい使用方法は何ですか?\begin{dmath}\begin{dgroup}

答え1

dmathパッケージの環境は、カウンターの増分にはbreqn使用されません。パッケージは、ハイパーアンカーをリンクターゲットとして追加するためにフックします。したがって、例では、() の前のアンカーを使用し、前の図をリンクターゲットとして取得します。\refstepcounterequationhyperref\refstepcounterfigure.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}

結果

関連情報