
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 \phantomsection
vor einem dieser Kästchen ein / erstelle, bleibt der \phantomsection
/ \label
auf 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 \label
Befehl, 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 \nopagebreak
entfernt 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 \phantomsection
in 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.