\documentclass[12pt,a4paper]{mwrep}
\usepackage{lipsum}
\usepackage[nodisplayskipstretch]{setspace} \setstretch{1.3}
\usepackage[hidelinks,unicode,pdfencoding=auto]{hyperref}
\usepackage[all]{hypcap}
\begin{document}
\tableofcontents
\chapter{Chapter A}
\section{Section AA}
\lipsum
\section{Section AB}
\lipsum
Text
Text
Text
Text
Text
Text
\subsection{Subsection ABA}
\lipsum
\chapter{Chapter B}
\section{Section BA}
\lipsum
\subsection{Subsection BAA}
\lipsum
\end{document}
尝试单击目录中的 PDF 书签或超链接(章节 AB、子章节 ABA、子章节 BAA)。如果相应的 [子] 章节标题位于页面顶部,则它会转到上一页的底部。在“全页模式”下阅读 PDF 文档时,这很烦人,因为它会转到错误的页面(上一页)。出于某种原因,该问题不会影响章节标题。如何修复?
答案1
这是一个使用黑客我之前评论过使用包裹needspace
。该\section
命令被重新定义为\needspace{3\baselineskip}
在每个部分之前插入。这确保至少有三行可用,否则该部分将从新页开始。我认为三行应该足够了,但如果不够,可以增加。
因此,将其添加到序言中可以解决 MWE 的问题:
\usepackage{needspace}
\let\OldSection\section%
\renewcommand{\section}{\needspace{3\baselineskip}\OldSection}%
以下是完整的 MWE:
\documentclass[12pt,a4paper]{mwrep}
\usepackage{lipsum}
\usepackage[nodisplayskipstretch]{setspace} \setstretch{1.3}
\usepackage[hidelinks,unicode,pdfencoding=auto]{hyperref}
\usepackage[all]{hypcap}
\usepackage{needspace}
\let\OldSection\section%
\renewcommand{\section}{\needspace{3\baselineskip}\OldSection}%
\begin{document}
\tableofcontents
\chapter{Chapter A}
\section{Section AA}
\lipsum
\section{Section AB}
\lipsum
Text
Text
Text
Text
Text
Text
\subsection{Subsection ABA}
\lipsum
\chapter{Chapter B}
\section{Section BA}
\section*{Section BB}
\lipsum
\subsection{Subsection BAA}
\lipsum
\end{document}
答案2
一个更简单的解决方案,它还处理了带星号的变体\section
或\chapter
使用包\pretocmd
的命令etoolbox
。因此,你可以写
\usepackage{etoolbox} \usepackage{需要空间} \pretocmd{\chapter}{\needspace{3\baselineskip}}{}{} \pretocmd{\section}{\needspace{3\baselineskip}}{}{} \pretocmd{\subsection}{\needspace{3\baselineskip}}{}{} \pretocmd{\subsubsection}{\needspace{3\baselineskip}}{}{}
得到所需的解决方案。
最初问题的原因可能是该\hyperref
软件包与其他软件包不兼容。就我而言,问题出在\titlesec
必须先安装的软件包。更改顺序后,上述命令就不再需要了。