当我使用时,\tableofcontents
我将所有内容都放在一个页面中,除了另一页上的一行,我怎样才能将所有内容都放在同一页面中?
答案1
添加以下代码行在正文中紧接着开始新的目录页的章节/部分条目之前:
\addtocontents{toc}{\protect\enlargethispage{\baselineskip}}
这会将第一个 ToC 页放大 (即一行) 的值\baselineskip
,以使最后一个 ToC 条目适合此页面。
编辑:对于在各自的 ToC 条目之前添加一些垂直空间的顶级条目(例如书中的章节),2\baselineskip
可能需要更大的值(例如)。
编辑 2:对于页码为何仍按原样放置,我没有令人满意的答案,但有一个解决方法。忽略我的第一个答案,而是将以下内容添加到您的序言中:
\usepackage{etoolbox}
\makeatletter
\patchcmd{\l@chapter}{1.0em}{0.8em}{}{}
\makeatother
这会将章节目录条目之间的垂直空间从 1.0em 减少到 0.8em,希望这足以使您的目录适合一页。
编辑 3:以下是针对我的第一个解决方案观察到的行为的“令人满意”的答案 - 引用自来源2e:
\enlargethispage{<dim>}
[a]<dim>
仅增加当前列的高度。在打印的页面上,此列的底部向下延伸恰好,<dim>
但不会影响页脚的放置;这可能会导致过度打印。
答案2
您可以尝试使用稍微小一点的字体制作目录:
{\small\tableofcontents}
或者,如果某些内容条目的名称很长并且要分到第二行,那么您可以为它们指定一个出现在内容中的较短的可选名称:
\section[short name]{The longer name that appears only where the section heading goes}
还有一个选项可以尝试将内容设为两列。有几个软件包可以做到这一点(例如 biblatex 的文档就是这样的),但我记不清如何做到这一点了。
答案3
强制将 ToC 放入一页的另一种方法是
\addtocontents{toc}{~\vspace{-3\baselineskip}}
紧接着该\tableofcontents
命令。这将使标题(即“目录”)和 ToC 中第一个条目之间的垂直间距减少 3\baselineskip,从而为发送到下一页的行腾出空间。
这可能不够优雅,但必须有所取舍,而这是另一个选择。优点是您不会减少文本和页脚之间的垂直空间,在大多数情况下,该空间比标题和第一个条目之间的空间要小(因此更改起来不太灵活)。希望对您有所帮助!
答案4
另一种可能性是更改目录的行距。
只需将以下包添加到您的序言中:
\usepackage{setspace}
然后将您的替换\tableofcontent
为:
\begin{spacing}{0.95}
\tableofcontents
\end{spacing}
0.95
您可以尝试根据需要调整间距( )。