amsmath、hyperref 和 Cleveref 之間的奇怪副作用

amsmath、hyperref 和 Cleveref 之間的奇怪副作用

這個問題看起來相當奇怪,但我在一個中等大小的文檔中遇到了它,我花了一段時間才確定是哪個特定的包組合造成的。

當我加載amsmath,cleverefhyperref(隱含地透過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 總是afterhyperref作為少數例外之一,應該在之後加載包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}

相關內容