amsmath、hyperref 和 cleveref 之间的奇怪副作用

amsmath、hyperref 和 cleveref 之间的奇怪副作用

这个问题看起来很奇怪,但我在一份中等大小的文档中遇到了它,我花了一段时间才确定哪个特定的包组合导致了这个问题。

当我加载时amsmathcleveref并且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 总是作为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}

相关内容