将章节和子章节放在内容表中

将章节和子章节放在内容表中

我有一份由软件包提供的长目录tocloft。它足够长,可以延伸到第二页。那么我得到的是(例如)第 2 节位于第一页的末尾,第 2.1 节位于第二页的开头。

理想情况下,我希望将目录中的章节和子章节分组,这样如果它们被这样的页面拆分,那么它将被推送到新页面。最终结果是第一页以第 1.X 节结束,第二页以第 2 节开始(依此类推...)。

有办法配置这个吗?


MWE 说明了这个问题。

\documentclass{article}
\usepackage{tocloft}

\begin{document}

\tableofcontents
\clearpage

\section{Section 1}
\subsection{A subsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsection{A subsection}
\subsection{A subsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsection{A subsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}

\section{A Second Section}
\subsection{A subsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}

\section{A Third Section}
\subsection{A subsection}
\subsubsection{A subsubsection}

\end{document}

MWE插图

答案1

以下是该包的用户指南第 6 页的摘录tocloft

目录中可能会出现不想要的分页符。例如,您可能有一个较长的多行章节标题,而目录中的行与行之间有分页符。文档稳定后,您可以\addtocontents在文档正文中的适当位置使用来调整目录中的分页符。例如:

  • \addtocontents{toc}{\protect\newpage}强制分页。

  • \addtocontents{toc}{\protect\enlargethispage{2\baselineskip}} 使页面更长。

  • \addtocontents{toc}{\protect\needspace{2\baselineskip}}指定如果页面上没有剩余两个基线的垂直空间,则开始新的页面。(该\needspace宏在包中定义needspace 。)

顺便注意,这些建议并不依赖于tocloft正在加载的包。

那么,对于您的文档,最佳操作是插入指令

\addtocontents{toc}{\protect\newpage}

就在之前

\section{A Second Section}

在文档正文中。

最后,一定要注意“文档稳定后”这个限定词。当然,除非文档基本完成,否则不要进行这些微调操作。

答案2

另一个不太复杂的版本不需要完成文档设置,就是\nopagebreak在节标题后添加一个。tocloft可以通过以下方式完成

\renewcommand{\cftsecafterpnum}{\nopagebreak}

(如果您想手动将其添加到单个部分,则需要添加\protect\nopagebreak

在您的示例中,它按预期工作:

在正确的位置设置了 break 的 toc

答案3

在...的帮助下土拨鼠,我能够使用一个简单的命令将标题推送到下一页\enlargethispage{-0.5cm}。这不是最理想的解决方案,因为它非常手动且针对具体问题,但至少它确实有效。

从上面的 MWE,我交换了

\tableofcontents

{%
    \enlargethispage{-0.5cm}
    \tableofcontents
}

产生下面的输出。

固定 ToC 示例

相关内容