在我的文档中,有些框不能跨页拆分,因此经常会在前面的页面上留下空白。当我在\phantomsection
其中一个框之前创建一个时,\phantomsection
/\label
会留在第一页上,而不是放在新页面的顶部。有没有办法将它放到第二页上?
\documentclass{article}
\usepackage{lipsum,hyperref}
\begin{document}
\hyperref[target]{My link}
\lipsum[1-4]
\phantomsection\label{target} % this stays on page 1
\vbox{\lipsum[1]}
\end{document}
答案1
可能出现分页符的原因是\label
在锚点和框之间插入内容的命令。
如果我编译以下示例
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\hyperref[target]{My link}
\phantomsection\label{target}\nopagebreak% this stays on page 1
\vbox{bbb}
\showoutput
\end{document}
日志文件的相关部分是
....\pdfdest name{section*.1} xyz
....\penalty 10000
....\write1{\newlabel{target}{{}{\thepage }{}{section*.1}{}}}
....\penalty 10000
....\glue(\baselineskip) 3.11111
....\vbox(6.94444+0.0)x345.0
我们看到,在粘连之前添加了一个无限的惩罚(在您的情况下,它可能来自\lineskip
,但这并不相关),从而禁止将此粘连用作分页点。
如果\nopagebreak
删除,我们得到
....\penalty 10000
....\write1{\newlabel{target}{{}{\thepage }{}{section*.1}{}}}
....\glue(\baselineskip) 3.11111
....\vbox(6.94444+0.0)x345.0
这个东西(\write1
)不是可丢弃的物品,所以胶水能用作分页点。
所以
\phantomsection\label{target}\nopagebreak
应该做。
答案2
\documentclass{article}
\usepackage{lipsum,hyperref}
\begin{document}
\hyperref[target]{My link}
\lipsum[1-4]
\filbreak\phantomsection\label{target}\nopagebreak %
\vbox{\lipsum[1]}
\end{document}
答案3
你可以把它放在\phantomsection
盒子里面以避免这种情况,即
\vbox{\phantomsection\label{target}\lipsum[1]}
代替
\phantomsection\label{target}
\vbox{\lipsum[1]}
平均能量损失
\documentclass{article}
\usepackage{lipsum,hyperref}
\begin{document}
\hyperref[target]{My link}
\lipsum[1-4]
\vbox{\phantomsection\label{target}\lipsum[1]}
\end{document}
现在链接指向了正确的位置。