페이지 하단에 가상 섹션이 발생하지 않는지 확인하세요.

페이지 하단에 가상 섹션이 발생하지 않는지 확인하세요.

내 문서에는 여러 페이지에 걸쳐 나눌 수 없는 상자가 있어서 종종 이전 페이지에 공백이 남게 됩니다. \phantomsection이 상자 중 이전 상자 를 만들면 \phantomsection/가 \label새 페이지의 상단에 배치되지 않고 첫 번째 페이지에 남습니다. 두 번째 페이지에 넣을 수 있는 방법이 있나요?

\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

Whatsit ( \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]}

MWE

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

이제 링크가 올바른 위치를 가리킵니다.

관련 정보