考虑一下代码
\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
您真的在手动填写目录数据吗?
在开始寻找解决方案之前,让我们先修复您真正错误的部分:
\protect{
完全没用\par
之后\vskip
完全没用- 你应该
\centering
使用\hfil
\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}]
产生类似这样的结果(例如在您的例子中,罗马数字应该与相应的标题放在同一页面上):