¿Por qué mis enlaces de hiperreferencia no funcionan con amsart?

¿Por qué mis enlaces de hiperreferencia no funcionan con amsart?

Cuando proceso el archivo siguiente con pdflatex o con latex y luego con dvipdf, el enlace en la página 1 del archivo PDF resultante no me lleva al Lema 1 como se esperaba.

\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}

Cuando uso pdflatex recibo una advertencia:

pdfTeX warning (dest): name
{lem.1} has been referenced but does not exist, replaced by a fixed one

Si lo reemplazo \documentclass{amsart}con \documentclass{article}, el enlace funciona como se esperaba.

¿Cómo puedo arreglar este archivo de prueba para que funcionen los enlaces de hiperreferencia en archivos PDF amsart?

Estoy usando pdfTeX 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian).

Respuesta1

Para que a pueda acceder correctamente al contador de referencia de un entorno de clase de teorema \label, algo tiene que seguir el\begin{<ambiente>}en modo horizontal. ya que lo siguiente en este ejemplo es\begin{enumerate} , nunca se ingresa al modo horizontal y la etiqueta se pierde. (no estoy seguro exactamentecómose pierde, pero ese es el efecto neto.)

Existen varios enfoques para manejar esta situación. Todos implican insertar algo en modo horizontal antes de comenzar la lista. las sugerencias que se hacen con más frecuencia (aparte de agregar texto real) son \leavevmodeo $ $; incluso un solo "espacio diagonal" funcionará. sin embargo, todo esto hará que la lista comience en la siguiente línea en lugar de ejecutarse.

Aquí hay otras dos preguntas que abordan situaciones relacionadas, aunque no la interacción con \label:

aquí hay un enfoque algo diferente que implica ingresar el número del primer elemento manualmente y comenzar la enumeración "real" con el segundo elemento; se aplica a una prueba en esta respuesta, pero funciona también con cualquier objeto de clase de teorema. ventaja: esto permite que una etiqueta destinada a señalar el teorema tenga el valor correcto; desventaja: puede que no sea posible tener una referencia cruzada al primer elemento.

Respuesta2

Agregar \leavevmodeantes de que el enumerateentorno solucione el problema.

\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}

información relacionada