Почему мои гиперссылки не работают с amsart?

Почему мои гиперссылки не работают с amsart?

Когда я обрабатываю файл ниже либо с помощью pdflatex, либо с помощью latex, а затем dvipdf, ссылка на странице 1 полученного PDF-файла не приводит меня к Лемме 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

для того, чтобы счетчик ссылок среды класса теорем был правильно доступен для 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}

Связанный контент