添加 \usepackage[pdfpagelabels]{hyperref} 后出现空白页

添加 \usepackage[pdfpagelabels]{hyperref} 后出现空白页

我已经index.tex复制了它。将副本重命名为index_bad.tex,并添加了行

\usepackage[pdfpagelabels]{hyperref}

到其序言部分。因此,除了这一处更改外,这两个文件是相同的。

然后编译index.tex3pdflatex次并查看 index.pdf,一切正常。(即没有空白页)。

编译了index_bad.tex3pdflatex次。现在index_bad.pdf在第一部分和第二部分之间插入了一个额外的空白页。

这是该文档的总体布局:

\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{fancyvrb}
\usepackage{graphicx}
\usepackage[left=.7in,right=.5in,top=.7in,bottom=.9in]{geometry}
\usepackage[pdfpagelabels]{hyperref}
\begin{document}
....
\section{....}
\subsection{...}
\begin{Verbatim}[frame=single,framesep=1mm,samepage=true,fontsize=\footnotesize]
.....
\begin{Verbatim}[frame=single,framesep=1mm,samepage=true,fontsize=\footnotesize]
....
\end{document}

包含时hyperref,第一部分和第二部分之间会出现一个空白页。不包含此包时不会出现空白页。

问题是为什么会发生这种情况? 以及如何解决?

由于该文档包含 2 张图片和大量逐字记录,我已压缩整个文件夹,因此它是完整的。

解压 zip 文件将创建一个文件夹。文件夹内有index.texindex_bad.tex以及使用的 2 张图片。运行pdflatex文件将显示上述问题。

该 zip 文件是http://12000.org/tmp/072113/latex_problem.zip

在 Windows 上托管的 Linux mint 虚拟机上使用 TL 2013。

在此处输入图片描述

答案1

正如 Werner 所注意到的,你的页面过大了。如果当前页面是不是hyperref为空。这就是这里发生的事情。如果包已加载,则页面不为空。

hyperref必须为\section命令添加锚点(否则链接将没有要跳转的目标)。它挂钩\refstepcounter以设置锚点。因此,示例可以简化为:

\documentclass[12pt]{article}

\usepackage{hyperref}

\showboxdepth=\maxdimen
\showboxbreadth=\maxdimen
\tracingonline=1

\begin{document}

Dummy page
\newpage  

\refstepcounter{section}% anchor setting with hyperref
\showlists
\rule{1pt}{1.1\textheight}

\end{document}

确保\rule页面过大:

Overfull \vbox (54.85335pt too high)

如果没有,hyperref则有两页,并且页面为空\refstepcounter{section}

### vertical mode entered at line 0
prevdepth 2.33331, prevgraf 1 line

! OK.
l.15 \showlists

结果hyperref是三页,之后的页面开始\refstpecounter不为空,并且可以看到锚点/链接目的地(驱动程序pdftex):

### vertical mode entered at line 0
### current page:
\pdfdest name{section.1} xyz

prevdepth 2.33331, prevgraf 1 line

! OK.
l.15 \showlists

因此唯一不开心的是页面在目标和部分标题之间被破坏了。修复这个问题意味着需要对内部进行更多的挖掘/处理,从而导致其他不兼容问题。

顺便说一句,您可以使用其他“whatits”获得相同的行为,例如索引命令:

\documentclass[12pt]{article}

\usepackage{makeidx}
\makeindex

\showboxdepth=\maxdimen
\showboxbreadth=\maxdimen
\tracingonline=1

\begin{document}

Dummy page
\newpage

\index{foo}
\showlists
\rule{1pt}{1.1\textheight}

\end{document}

结果三页如下:

### vertical mode entered at line 0
### recent contributions:
\write3{\indexentry{foo}{\thepage }}
prevdepth 2.33331, prevgraf 1 line

! OK.
l.16 \showlists

解决方案

overfull \vbox需要解决的问题。一个肮脏的方法是:

\newpage
\enlargethispage{24.7852pt}
\section{Tikz solution}

相关内容