以下のファイルを 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}