Когда я обрабатываю файл ниже либо с помощью 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}