autoref в dmath (из пакета breqn) генерирует неправильный текст ссылки

autoref в dmath (из пакета breqn) генерирует неправильный текст ссылки

В следующем минимальном примере, что не так с моим dmathуравнением? Почему hyperref называет его Figure, в то время как 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}

Результат

Связанный контент