Por que meus links hiperref não funcionam com o amsart?

Por que meus links hiperref não funcionam com o amsart?

Quando processo o arquivo abaixo com pdflatex ou com latex e depois com dvipdf, o link na página 1 do arquivo PDF resultante não me leva ao Lema 1 como esperado.

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

Quando uso o pdflatex, recebo um aviso:

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

Se eu substituir \documentclass{amsart}por \documentclass{article}, o link funcionará conforme o esperado.

Como posso corrigir esse arquivo de teste para que links de hiperref funcionem em arquivos PDF amsart?

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

Responder1

para que o contador de referência de um ambiente de classe de teorema seja acessado corretamente por a \label, algo deve seguir o\begin{<ambiente>}no modo horizontal. já que a próxima coisa neste exemplo é \begin{enumerate}, o modo horizontal nunca é inserido e o rótulo é perdido. (não tenho certeza exatamentecomoele se perde, mas esse é o efeito líquido.)

existem várias abordagens para lidar com esta situação. todos envolvem a inserção de algo no modo horizontal antes de iniciar a lista. as sugestões feitas com mais frequência (além da adição de texto real) são \leavevmodeou $ $; até mesmo uma única "barra de espaço" funcionará. no entanto, tudo isso resultará no início da lista na próxima linha, em vez de na execução.

aqui estão duas outras questões que abordam situações relacionadas, embora não a interação com \label:

aqui está uma abordagem um pouco diferente que envolve inserir manualmente o número do primeiro item e iniciar a enumeração "real" com o segundo item; é aplicado a uma prova nesta resposta, mas também funciona com qualquer objeto da classe de teorema. vantagem - permite que um rótulo destinado a apontar para o teorema tenha o valor correto; desvantagem - pode não ser possível ter uma referência cruzada para o primeiro item.

Responder2

Adicionar \leavevmodeantes do enumerateambiente corrige o 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}

informação relacionada