為什麼我的 hyperref 連結不能與 amsart 配合使用?

為什麼我的 hyperref 連結不能與 amsart 配合使用?

當我使用 pdflatex 或使用 Latex 然後使用 dvipdf 處理下面的文件時,生成的 PDF 文件第 1 頁上的鏈接不會按預期將我帶到引理 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 文件中的有效 hyperref 連結amsart

我正在使用 pdfTeX 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian)。

答案1

為了使 a 正確存取定理類別環境的引用計數器\label,必須遵循以下規則\begin{<環境>}在水平模式下。因為這個例子中的下一件事是\begin{enumerate},因此永遠不會進入水平模式,並且標籤會遺失。 (我不確定如何它會丟失,但這就是最終效果。

有多種方法可以處理這種情況。所有這些都涉及在開始清單之前以水平模式插入一些內容。最常提出的建議(除了添加實際文本)是\leavevmode$ $;即使是一個「斜線空格」也可以。然而,所有這些都將導致清單在下一行開始而不是運行。

這裡還有兩個解決相關情況的問題,儘管不是與 的互動\label

這是一種稍微不同的方法,涉及手動輸入第一個項目的編號,並從第二個項目開始「真實」枚舉;它應用於本答案中的證明,但也適用於任何定理類別物件。優點-這使得旨在指向定理的標籤具有正確的值;缺點-可能無法交叉引用第一項。

答案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}

相關內容