Странный побочный эффект между amsmath, hyperref и cleveref

Странный побочный эффект между amsmath, hyperref и cleveref

Эта проблема кажется довольно экзотической, но я столкнулся с ней в документе среднего размера, и мне потребовалось некоторое время, чтобы определить, какая именно комбинация пакетов была ответственна за это.

Когда я загружаю amsmath, cleverefи hyperref(неявночерез pdfcomment), ref/ autorefк уравнению больше не работает, т.е. LaTeX выдает ошибку Reference ... on page 1 undefined. Смотрите следующий MWE:

\documentclass[12pt]{scrartcl}

\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenx}
\usepackage[T1]{fontenc}
\usepackage{lmodern}

\usepackage{amsmath}

%% Hyperlinks
%\usepackage[breaklinks]{hyperref}
\usepackage{cleveref}
%% implicitly loads `hyperref`
\usepackage{pdfcomment}

\begin{document}

\section{Test}
Etwas Fülltext, bevor die Gleichung kommt:
\begin{equation}
E_\mathrm{kin} = \frac{m}{2} v^2 \label{eq:kinErg}
\end{equation}
Jemand fand heraus, dass \autoref{eq:kinErg} gilt.

\end{document}

Если я включуhyperref явно, то все работает, за исключением того, что я получаюэто предупреждение. Не критично, но я бы предпочел этого избежать и просто использовать hypersetupдля дополнительных опций hyperref.

Также, если я опускаю amsmath, все работает тоже. Я предполагаю, что каждый пакет частично перезаписывает настройки друг друга...

Если это ошибка, то куда мне следует сообщить о ней?

решение1

Нагрузкаcleveref всегдаafter hyperrefкак одно из немногих исключений, когда пакеты должны быть загружены после hyperref!

Если сделать это в неправильном порядке, counterинформация будет перезаписана и \autorefне сможет попасть в счетчик, т.е. метка будет «неопределенной», что приведет к неправильным ссылкам или ??выходным данным.

\documentclass[12pt]{scrartcl}

\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenx}
\usepackage[T1]{fontenc}
\usepackage{lmodern}

\usepackage{amsmath}

%% Hyperlinks
%\usepackage[breaklinks]{hyperref}
%% implicitly loads `hyperref`
\usepackage{pdfcomment}

\usepackage{cleveref}


\begin{document}

\section{Test}
Etwas Fülltext, bevor die Gleichung kommt:
\begin{equation}
  E_\mathrm{kin} = \frac{m}{2} v^2 \label{eq:kinErg}
\end{equation}
Jemand fand heraus, dass \autoref{eq:kinErg} gilt.

\end{document}

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