我正在处理一份较长的文档,经常处理中间的部分,因此在编译后我必须进行大量挖掘才能找到我正在处理的部分。一段时间后,这会变得非常令人厌烦,尤其是那些需要多次编译才能追踪细节的棘手部分。
我正在使用该hyperref
包,并且我知道我可以使用类似以下序列来设置起始页
\usepackage[pdfstartpage=7]{hyperref}.
虽然这可行,但我想要一种方法,让我可以不改变序言,然后只移动一些标签,比如说
\label{startviewinghere}.
这可能吗?第二个问题是:是否可以控制此锚点在起始视图中出现的位置(即在顶部还是在底部)?
答案1
例子:
\documentclass{book}
\usepackage{zref-abspage,zref-user}
\makeatletter
\AtBeginDocument{%
\zref@refused{chap:intro}%
\hypersetup{%
pdfstartpage=\zref@extractdefault{chap:intro}{abspage}{1}%
}%
}
\makeatother
\usepackage{hyperref}
\usepackage{bookmark}
\begin{document}
\frontmatter
\tableofcontents
\chapter{Preface}
\mainmatter
\chapter{Introduction}
\zlabel{chap:intro}
\end{document}
顺序很重要。hyperref
在 中设置起始页\AtBeginDocument
,因此pdfstartpage
必须在 之前进行设置。但不能在序言中完成,因为文件.aux
尚未读取。
答案2
这是一个版本,它将屏幕方便地放置在参考之上,应给出如下内容
\zlabel{startpoint}
\zsavepos{here}
然后,将 Heiko 的答案中的相应代码更改为
\usepackage{fp}
\usepackage[abspage,user,savepos]{zref}
\makeatletter
\AtBeginDocument{%
\zref@refused{startpoint}%
\FPmul\p{\zposy{here}}{1}
\FPdiv\p{\p}{65536}
\FPadd\pointoffset{\p}{350}
\hypersetup{%
pdfstartpage=\zref@extractdefault{startpoint}{abspage}{1},%
pdfstartview={XYZ 0 \pointoffset 1}
}%
}
\makeatother
运行良好。我意识到,未来更新中存在许多技术难题,我正在努力解决这些问题(尤其是“此处”可能未定义,以及需要两个不同的标签)。