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 いつもhyperref!の後にパッケージをロードする必要がある数少ない例外の 1 つです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}

関連情報