
En mi documento tengo cuadros que no se pueden dividir en páginas y que, por lo tanto, a menudo dejan espacios en blanco en las páginas anteriores. Cuando creo un \phantomsection
cuadro antes de uno de estos cuadros, \phantomsection
/ \label
se deja en la primera página en lugar de colocarse en la parte superior de la nueva página. ¿Hay alguna manera de incluirlo en la 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}
Respuesta1
La causa del posible salto de página es el \label
comando que inserta un whatsit entre el ancla y el cuadro.
Si compilo el siguiente ejemplo
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\hyperref[target]{My link}
\phantomsection\label{target}\nopagebreak% this stays on page 1
\vbox{bbb}
\showoutput
\end{document}
la parte relevante del archivo de registro es
....\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 se agrega una penalización infinita antes del pegamento (que en su caso probablemente provendrá de \lineskip
, pero esto es irrelevante), inhibiendo así que este pegamento se use como punto de salto de página.
Si se \nopagebreak
elimina, obtenemos
....\penalty 10000
....\write1{\newlabel{target}{{}{\thepage }{}{section*.1}{}}}
....\glue(\baselineskip) 3.11111
....\vbox(6.94444+0.0)x345.0
El whatsit ( \write1
) no es un elemento descartable, por lo que el pegamentopoderutilizarse como punto de salto de página.
Entonces
\phantomsection\label{target}\nopagebreak
debería hacer.
Respuesta2
\documentclass{article}
\usepackage{lipsum,hyperref}
\begin{document}
\hyperref[target]{My link}
\lipsum[1-4]
\filbreak\phantomsection\label{target}\nopagebreak %
\vbox{\lipsum[1]}
\end{document}
Respuesta3
Puedes poner el \phantomsection
interior de la caja para evitar eso, es decir
\vbox{\phantomsection\label{target}\lipsum[1]}
en lugar 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}
Ahora el enlace apunta al lugar correcto.