
No meu documento, tenho caixas que não podem ser divididas entre páginas e que, portanto, muitas vezes deixam espaços em branco nas páginas anteriores. Quando eu crio um \phantomsection
antes de uma dessas caixas, o \phantomsection
/ \label
é deixado na primeira página em vez de ser colocado no topo da nova página. Existe uma maneira de colocá-lo na segunda página?
\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}
Responder1
A causa da possível quebra de página é o \label
comando que insere um whatsit entre a âncora e a caixa.
Se eu compilar o seguinte exemplo
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\hyperref[target]{My link}
\phantomsection\label{target}\nopagebreak% this stays on page 1
\vbox{bbb}
\showoutput
\end{document}
a parte relevante do arquivo de log é
....\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
Vemos que uma penalidade infinita é adicionada antes da cola (que no seu caso provavelmente virá de \lineskip
, mas isso é irrelevante), inibindo assim que essa cola seja usada como ponto de quebra de página.
Se for \nopagebreak
removido, obtemos
....\penalty 10000
....\write1{\newlabel{target}{{}{\thepage }{}{section*.1}{}}}
....\glue(\baselineskip) 3.11111
....\vbox(6.94444+0.0)x345.0
O whatsit ( \write1
) não é um item descartável, então a colapodeser usado como um ponto de quebra de página.
Então
\phantomsection\label{target}\nopagebreak
deveria fazer.
Responder2
\documentclass{article}
\usepackage{lipsum,hyperref}
\begin{document}
\hyperref[target]{My link}
\lipsum[1-4]
\filbreak\phantomsection\label{target}\nopagebreak %
\vbox{\lipsum[1]}
\end{document}
Responder3
Você pode colocar \phantomsection
dentro da caixa para evitar isso, ou seja
\vbox{\phantomsection\label{target}\lipsum[1]}
em vez de
\phantomsection\label{target}
\vbox{\lipsum[1]}
MWE
\documentclass{article}
\usepackage{lipsum,hyperref}
\begin{document}
\hyperref[target]{My link}
\lipsum[1-4]
\vbox{\phantomsection\label{target}\lipsum[1]}
\end{document}
Agora o link aponta para o lugar certo.