为什么我的超链接不能与 amsart 一起使用?

为什么我的超链接不能与 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 文件中可用的超链接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}

相关内容