
私の文書には、ページをまたいで分割できないボックスがあり、そのため前のページに空白が残ることがよくあります。\phantomsection
これらのボックスの前に を作成すると、\phantomsection
/\label
は新しいページの先頭に配置されず、最初のページに残ります。これを 2 ページ目に配置するにはどうすればよいですか?
\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}
これでリンクは正しい場所を指すようになりました。