Эта проблема кажется довольно экзотической, но я столкнулся с ней в документе среднего размера, и мне потребовалось некоторое время, чтобы определить, какая именно комбинация пакетов была ответственна за это.
Когда я загружаю 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}