如何在目录中引起一次性分页符

如何在目录中引起一次性分页符

考虑一下代码

\documentclass{book}
\usepackage{tocloft}
%\usepackage{xcolor}

\let\cleardoublepage\clearpage  
\renewcommand{\cftchapfont}{\large} 
\renewcommand\cftchapafterpnum{\vspace{5pt}} 
%\renewcommand{\cftchapleader}{\dotfill}

\begin{document}
\thispagestyle{empty}
\tableofcontents

\addtocontents{toc}{\hfil\protect {\Large{\textbf{PART I.}}} \hfil}
\addtocontents{toc}{\vskip 12pt \par}
\addtocontents{toc}{\hfil\protect {\Large{\textbf{\emph{SUBTITLE}.}}} \hfil}
\addtocontents{toc}{\vskip 8pt \par}

\addtocontents{toc}{\vskip 36pt \par}
\addtocontents{toc}{\hfil\protect {\Large{\textbf{PART II.}}} \hfil}
\addtocontents{toc}{\vskip 12pt \par}
\addtocontents{toc}{\hfil\protect {\Large{\textbf{\emph{SUBTITLE}.}}} \hfil}
\addtocontents{toc}{\vskip 8pt \par}

\addtocontents{toc}{\vskip 36pt \par}
\addtocontents{toc}{\hfil\protect {\Large{\textbf{PART III.}}} \hfil}
\addtocontents{toc}{\vskip 12pt \par}
\addtocontents{toc}{\hfil\protect {\Large{\textbf{\emph{SUBTITLE}.}}} \hfil}
\addtocontents{toc}{\vskip 8pt \par}

\addtocontents{toc}{\vskip 36pt \par}
\addtocontents{toc}{\hfil\protect {\Large{\textbf{PART IV.}}} \hfil}
\addtocontents{toc}{\vskip 12pt \par}
\addtocontents{toc}{\hfil\protect {\Large{\textbf{\emph{SUBTITLE}.}}} \hfil}
\addtocontents{toc}{\vskip 8pt \par}

\addtocontents{toc}{\vskip 36pt \par}
\addtocontents{toc}{\hfil\protect {\Large{\textbf{PART V.}}} \hfil}
\addtocontents{toc}{\vskip 12pt \par}
\addtocontents{toc}{\hfil\protect {\Large{\textbf{\emph{SUBTITLE}.}}} \hfil}
\addtocontents{toc}{\vskip 8pt \par}

\addtocontents{toc}{\vskip 36pt \par}
\addtocontents{toc}{\hfil\protect {\Large{\textbf{PART VI.}}} \hfil}
\addtocontents{toc}{\vskip 12pt \par}
\addtocontents{toc}{\hfil\protect {\Large{\textbf{\emph{SUBTITLE}.}}} \hfil}
\addtocontents{toc}{\vskip 8pt \par}
\end{document}

产生

在此处输入图片描述

我想在目录中第 VI 部分之前强制分页,以便标题“第 VI 部分”(及其副标题)都出现在目录中新页面的顶部。我该怎么做?

谢谢。

答案1

您真的在手动填写目录数据吗?

在开始寻找解决方案之前,让我们先修复您真正错误的部分:

  1. \protect{完全没用
  2. \par之后\vskip完全没用
  3. 你应该\centering使用\hfil
  4. \Large{\textbf{\emph{SUBTITLE}.应该更好
    \Large\bfseries\itshape SUBTITLE
    
    (我会删除句号)

当然,你应该定义一个执行该任务的命令。关键是\nopagebreak\par命令的顶部添加结束行。

\documentclass{book}

\newcommand{\parttocentry}[2]{%
  \addtocontents{toc}{%
    % top line
    {\centering\Large\bfseries PART #1\par\nopagebreak}%
    % space
    \vspace{12pt}%
    % bottom line
    {\centering\Large\bfseries\itshape #2\par}%
    % space
    \protect\addvspace{46pt plus 20pt}%
  }%
}

\begin{document}
\thispagestyle{empty}
\tableofcontents

\parttocentry{I}{SUBTITLE}
\parttocentry{II}{SUBTITLE}
\parttocentry{III}{SUBTITLE}
\parttocentry{IV}{SUBTITLE}
\parttocentry{V}{SUBTITLE}
\parttocentry{VI}{SUBTITLE}

\end{document}

我使用 46pt 来表明,如果\nopagebreak删除,第 V 部分的条目将会分成多页。

条目后面的垂直空间应为橡胶,以便填充页面(因为book使用\flushbottom)。您还可以添加少量的可收缩性。

在此处输入图片描述

请注意,\centering \Large \bfseries \itshape \vspace是强命令,但\addvspace不是,所以\protect在它前面需要。

答案2

假设这是您对实际目录的手动模拟。为了防止PART xx和标题之间出现分页符,您可以\nopagebreak在必要时添加一个(有时是几个),如下所示:

\addtocontents{toc}{\vskip 36pt \par}
\addtocontents{toc}{\hfil\protect {\Large{\textbf{PART VI.}}} \nopagebreak\hfil}
\addtocontents{toc}{\vskip 12pt \par}
\addtocontents{toc}{\hfil\protect {\Large{\textbf{\emph{SUBTITLE}.}}} \hfil}
\addtocontents{toc}{\vskip 8pt \par}

那么当上一页没有足够的空间时,您的整个标题将被放置在下一页。

在此处输入图片描述

您可能需要将其添加到 ToC 的配置中。例如,在我自己的文档类中,使用titletoc,我有以下代码:

\titlecontents{part}
  [0em]
  {\addvspace{1.5pc}\filcenter\normalfont}
  { \minimalist_apply_title_numbering_style_static:n { \thecontentslabel } \nopagebreak\\\nopagebreak\uppercase}
  {}
  {} % without page number
  [\addvspace{.5pc}]

产生类似这样的结果(例如在您的例子中,罗马数字应该与相应的标题放在同一页面上):

在此处输入图片描述

相关内容