Stellen Sie sicher, dass am Ende einer Seite kein Phantomabschnitt erscheint.

Stellen Sie sicher, dass am Ende einer Seite kein Phantomabschnitt erscheint.

In meinem Dokument habe ich Kästchen, die nicht auf mehrere Seiten aufgeteilt werden können und deshalb auf den vorhergehenden Seiten oft Leerraum lassen. Wenn ich \phantomsectionvor einem dieser Kästchen ein / erstelle, bleibt der \phantomsection/ \labelauf der ersten Seite und wird nicht oben auf der neuen Seite platziert. Gibt es eine Möglichkeit, es auf die zweite Seite zu bekommen?

\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}

Antwort1

Die Ursache für den möglichen Seitenumbruch ist der \labelBefehl, der zwischen Anker und Box ein Dingsbums einfügt.

Wenn ich das folgende Beispiel kompiliere

\documentclass{article}
\usepackage{hyperref}
\begin{document}
\hyperref[target]{My link}   

\phantomsection\label{target}\nopagebreak% this stays on page 1
\vbox{bbb}
\showoutput
\end{document}

Der relevante Teil der Protokolldatei ist

....\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

Wir sehen, dass vor dem Kleber eine unendliche Strafe hinzugefügt wird (die in Ihrem Fall wahrscheinlich von kommt \lineskip, aber das ist irrelevant), wodurch verhindert wird, dass dieser Kleber als Seitenumbruchpunkt verwendet wird.

Wenn \nopagebreakentfernt wird, erhalten wir

....\penalty 10000
....\write1{\newlabel{target}{{}{\thepage }{}{section*.1}{}}}
....\glue(\baselineskip) 3.11111
....\vbox(6.94444+0.0)x345.0

Das Dingsbums ( \write1) ist kein Wegwerfartikel, also der Kleberdürfenals Seitenumbruchpunkt verwendet werden.

Also

\phantomsection\label{target}\nopagebreak

tun sollte.

Antwort2

\documentclass{article}
\usepackage{lipsum,hyperref}
\begin{document}
\hyperref[target]{My link}
\lipsum[1-4]
\filbreak\phantomsection\label{target}\nopagebreak % 
\vbox{\lipsum[1]}
\end{document}

Antwort3

Um das zu vermeiden, können Sie das \phantomsectionin die Box legen, d.h.

\vbox{\phantomsection\label{target}\lipsum[1]}

anstatt

\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} 

Jetzt zeigt der Link an die richtige Stelle.

verwandte Informationen