答案1
将我的评论更改为带有附加内容的答案。尝试:
...
\addtocontents{toc}{\protect\enlargethispage*{3\baselineskip}}
\chapter{Preliminaries} % your second chapter
...
这将增加目录中特定页面的文本高度,其中章节准备工作发生。您也可以尝试无星号版本\enlargethispage
并更改放大量。
正如您在评论中所说,上面的内容在文档的最后一个目录条目和页码之间留出了很小的空间。您可以按照以下方式减少目录标题和第一个条目之间的空间量:
\documentclass{book}
\begin{document}
\tableofcontents
%...
\addtocontents{toc}{\protect\vspace{-4em}}
\chapter{One}
%
\addtocontents{toc}{\protect\enlargethispage*{3\baselineskip}}
\chapter{Preliminaries}
%
\end{document}
您需要选择最适合您的文档的长度。
但也许您试图在页面上挤入太多内容。
答案2
要获得更自动化的解决方案,请尝试
% prevent page breaks before a subsection
\let\oldsubsection\subsection
\renewcommand{\subsection}{%
\addtocontents{toc}{\penalty10000}%
\oldsubsection%
}
% prevent page breaks before a section
\let\oldsection\section
\renewcommand{\section}{%
\addtocontents{toc}{\penalty10000}%
\oldsection%
}
您可以优化惩罚值(10000=永不中断,1=稍微降低此处中断的可能性)。请注意,这会使目录延伸很多。如果您想要页面底部的额外垂直空间,请尝试:
{\raggedbottom\tableofcontents}
如果您想要章节之间有额外的垂直空间,请尝试:
\let\oldchapter\chapter
\renewcommand{\chapter}{%
\addtocontents{toc}{\vfil}%
\oldchapter%
}
[...]
\tableofcontents
\vfill