當我使用 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}