なぜハイパーリファレンスリンクが amsart で機能しないのですか?

なぜハイパーリファレンスリンクが amsart で機能しないのですか?

以下のファイルを pdflatex で処理するか、latex で処理してから dvipdf で処理すると、結果の PDF ファイルの 1 ページ目のリンクから、予想どおり Lemma 1 に移動できません。

\documentclass{amsart}

\usepackage{hyperref}
\newtheorem{lem}{Lemma}

\begin{document}

See Lemma~\ref{testlemma} below.
\pagebreak

\begin{lem}\label{testlemma}
  \begin{enumerate}
  \item Testing!
  \end{enumerate}
\end{lem}

\end{document}

pdflatex を使用すると警告が表示されます:

pdfTeX warning (dest): name
{lem.1} has been referenced but does not exist, replaced by a fixed one

\documentclass{amsart}を に置き換えると\documentclass{article}、リンクは期待どおりに機能します。

このテスト ファイルを修正して、PDF ファイル内のハイパー参照リンクを機能させるにはどうすればよいですかamsart?

私はpdfTeX 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian)を使用しています。

答え1

定理クラス環境の参照カウンタが適切にアクセスされるためには\label\begin{<環境>}水平モードの場合。この例の次の部分は なので\begin{enumerate}、水平モードに入ることはなく、ラベルは失われます。(正確にはわかりませんどうやって失われてしまいますが、それが最終的な効果です。

この状況に対処するにはさまざまな方法があります。いずれも、リストを開始する前に水平モードで何かを挿入します。最もよく提案されるのは (実際のテキストを追加する以外では)\leavevmodeまたは です$ $。単一の「スラッシュ スペース」でも機能します。ただし、これらすべての結果、リストは実行されずに次の行から開始されます。

とのやり取りではありませんが、関連する状況に対応する他の 2 つの質問があります\label

ここでは、最初の項目の番号を手動で入力し、2 番目の項目から「実際の」列挙を開始するという、多少異なるアプローチを紹介します。この回答では証明に適用されていますが、任意の theorem-class オブジェクトでも同様に機能します。利点 - これにより、定理を指すラベルに正しい値を設定できます。欠点 - 最初の項目への相互参照が不可能になる場合があります。

答え2

\leavevmode環境の前に追加するとenumerate、問題が解決します。

\documentclass{amsart}
\newtheorem{lem}{Lemma}

\usepackage{hyperref}

\begin{document}

\section{test}\label{sec:1}

See Lemma~\ref{testlemma} or rather Lemma~\ref{testlemma2} below.

\begin{lem}
\label{testlemma}
  \begin{enumerate}
  \item Testing!
  \end{enumerate}
\end{lem}

\begin{lem}
\label{testlemma2}
\leavevmode
  \begin{enumerate}
  \item Testing!
  \end{enumerate}
\end{lem}

\begin{lem}
\label{testlemma3}
\leavevmode  
  \begin{enumerate}
  \item Testing!
  \end{enumerate}
\end{lem}

lemma \ref{testlemma2}

section \ref{sec:1}

lemma \ref{testlemma3}

reference to lemma \ref{testlemma} does not work.
\end{document}

関連情報