![hyperref 错误地放置了 \label 的目标](https://linux22.com/image/445787/hyperref%20%E9%94%99%E8%AF%AF%E5%9C%B0%E6%94%BE%E7%BD%AE%E4%BA%86%20%5Clabel%20%E7%9A%84%E7%9B%AE%E6%A0%87.png)
我有一行像' \begin{thm}\label{tPrimes}
',其中thm
使用来定义\newtheorem
。
它生成一行以粗体“定理 1.2”开头的行。似乎定义的目标\label
总是在“定理”一词上方一行。这不是我所期望的,但在很多情况下是可以接受的。
但是,如果 LaTeX 将“定理 1.2”放在第 N 页的顶部,则单击\ref{tPrimes}
第 N+1 页上由 生成的文本会转到第 N-1 页的底部,这是一个问题:读者看到的不是定理。我尝试\label
与结合\phantomsection
。然后目标就在正确的行中,但位于其中的某个地方,确切地说是\label was used
。
有没有一种方法可以将目标放在“定理”一词的左边,无论它是否打开页面?
我正在使用 MikTeX 2.9、LaTeX2e <2015/10/01> hyperref[dvipdfm]
。谢谢,Vitek Svejdar
\documentclass[10pt,a5paper,twoside]{article}%
\usepackage{blindtext}%
\title{Experiments with labels and hyperref}\author{V.\v S.}
\newtheorem{thm}{Theorem}[section]
\usepackage[dvipdfm,colorlinks=true]{hyperref}
\hypersetup{%
%hypertexnames=false,
pdfpagelayout=TwoPageRight,%
pdfpagemode=UseNone,%
pdftoolbar=false,%
pdfmenubar=false}%
\begin{document}
\maketitle
\section{First section}
\blindtext
% Theorem 1.1 in the very bottom of page 1:
\begin{thm}\label{tPrimes}
If a prime\/ $p$ is a divisor of a product\/ $a\cdot b$, then it is
a divisor of one of the numbers\/ $a$~and\/~$b$.
\end{thm}
% Theorem 1.2 opens page 2. However, \label places its anchor on page 1:
\begin{thm}\label{tEuclid}
Euclid's group\/ $\Phi(p)$ of every prime\/~$p$ is cyclic.
\end{thm}
% Blind text whose purpose is to get to page 3
\par\blindtext\par\blindtext\par\blindtext
\par
See Theorem \ref{tPrimes} on page~\pageref{tPrimes}.
% \ref correctly generates '1.2', \pageref correctly generates '2',
% but a click on '1.2' takes me to the bottom of page 1:
Theorem~\ref{tEuclid} on page~\pageref{tEuclid} plays a role in the following proof.
\end{document}
答案1
发生这种情况的原因是,的原始设计\label
早于互联网,并且不是为提供链接锚点的位置而设计的。hyperref
它会尽可能多地修补问题,所以通常可以正常工作,但定理布局很棘手,并且在包中有许多不同的定义形式,因此很难全部捕捉到它们。
如果发生这种情况,您可以随时通过在定理之前(在自动分页发生的同一位置)放置来强制获得更好的结果\clearpage
,这将确保分页发生在链接锚点生成之前,因此锚点最终会出现在下一页的顶部。
答案2
因此,很明显,与原始 LaTeX 的 不同\newtheorem
,amsthm
定义具有正确放置锚点的环境。如果原始的视觉形式\newtheorem
(定理编号后没有句点,并且可选参数以粗体显示)是可取的,则amsthm
可以使用以下设置:
\newtheoremstyle{ltxtheorem}{9.5pt plus 3pt minus 4pt}{9.5pt plus 3pt minus 4pt}%
{\itshape}{}% Body font, no indentation
{\bfseries}{}% Head font, no punctuation. Space after the head and the head shape:
{.5em}{\thmname{#1}\thmnumber{\hspace{.33333em}#2}\thmnote{\hspace{.33333em}(#3)}}%
长度是通过实验发现的,但或多或少是有效的。