pdflatex 또는 latex와 dvipdf를 사용하여 아래 파일을 처리할 때 결과 PDF 파일의 1페이지에 있는 링크가 예상대로 Lemma 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}