当我使用 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 文件中可用的超链接amsart
?
我正在使用 pdfTeX 3.1415926-1.40.10-2.2(TeX Live 2009/Debian)。
答案1
为了使定理类环境的引用计数器能够被正确访问\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}