使用带有标题选项的 tocloft 在目录标题后垂直跳过

使用带有标题选项的 tocloft 在目录标题后垂直跳过

我用它来控制大型文档中titlesec标题(及其相关内容)的外观,现在我正在研究如何调整目录 (ToC) 的外观。由于我希望 ToC 自己的标题使用与其余部分相同的样式,因此我加载了该选项。\sectiontoclofttoclofttitles

这工作得很好,但现在我发现自己想在目录标题后添加一些垂直空间(并且仅有的之后);为了论证的目的,假设它是一个\bigskip。通常(即没有titles),人们可以\cftaftertoctitle以适当的方式更新;但是使用此titles选项,tocloft会将 ToC 标题的格式完全卸载到 LaTeX,因此这是一个无操作。

这是一个 FMWE(相当最小的工作示例),其中更复杂的\section格式已被非常简单的内容所取代:

\documentclass{article}
\usepackage{lipsum}
\usepackage{polyglossia}
\usepackage[rigidchapters,explicit]{titlesec}
\usepackage[titles]{tocloft}
\setmainfont{Libertinus Serif}
\titleformat{\section}[block]{\filcenter}{}{0pt}{{\LARGE\bfseries\scshape #1}}[\filcenter]
\setcounter{secnumdepth}{1}
\setcounter{tocdepth}{1}

% ToC customization
\makeatletter
\renewcommand{\cftsecpresnum}{\begin{lrbox}{\@tempboxa}}
\renewcommand{\cftsecaftersnum}{\end{lrbox}}
\makeatother
\renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}}
\setlength\cftbeforesecskip{0.75em}
\cftsetindents{section}{0pt}{0pt}
\renewcommand{\cftsecfont}{\large\bfseries}
\setlength\cftsecindent{3.3em}
\renewcommand{\cftsecafterpnum}{\hspace*{3.3em}}
\renewcommand{\cftaftertoctitle}{\bigskip}

\begin{document}
    \tableofcontents
    \section{This}
    \lipsum[1]
    \section{That}
    \lipsum[2]
    \section{Something completely different}
    \lipsum[3]
\end{document}

这里没有按预期运行的代码是

\renewcommand{\cftaftertoctitle}{\bigskip}

当然。为了说明这一点,下面是三张截图(为了便于视觉比较,请在新选项卡中打开这些截图并在它们之间来回切换)。

首先,titles实际上,还有额外的\bigskip

在此处输入图片描述

第二,titles实际上,但是没有额外内容\bigskip

在此处输入图片描述

第三,没有 titles,并且还有额外的\bigskip

在此处输入图片描述

最后,没有 titles, 但没有额外内容\bigskip

在此处输入图片描述

如您所见,\bigskip没有它会产生效果,titles但有它则不会。这并不奇怪,这就是它的tocloft工作方式,但是 --- 如何titles如果有效的话,我会在目录标题后获得一些额外的垂直空间吗?

顺便说一句:也可以随意建议替代方案tocloft,我对此并不太纠结,实际上更喜欢更实用、更少神秘的软件包(并且带有更好的手册)。titlesec另一方面,我真的想保留。

谢谢!

答案1

(1)使用\usepackage{tocloft}(否titles

(2)将目录标题的格式与文档的章节标题完全相同。

\hfill(3)使用in将目录标题居中\cfttoctitlefont \cftaftertoctitle

(4)添加垂直空间\cftaftertoctitle

A

\documentclass{article}
\usepackage{lipsum}
\usepackage{polyglossia}
\usepackage[rigidchapters,explicit]{titlesec}

\usepackage{tocloft} % use this <<<<<<<<<<<<<<<<<<<<<<<<<

\setmainfont{Libertinus Serif}
\titleformat{\section}[block]{\filcenter}{}{0pt}{{\LARGE\bfseries\scshape #1}}[\filcenter]
\setcounter{secnumdepth}{1}
\setcounter{tocdepth}{1}

%%% ToC customization
\makeatletter
\renewcommand{\cftsecpresnum}{\begin{lrbox}{\@tempboxa}}
    \renewcommand{\cftsecaftersnum}{\end{lrbox}}
\makeatother
\renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}}
\setlength\cftbeforesecskip{0.75em}
\cftsetindents{section}{0pt}{0pt}
\renewcommand{\cftsecfont}{\large\bfseries}
\setlength\cftsecindent{3.3em}
\renewcommand{\cftsecafterpnum}{\hspace*{3.3em}}

\renewcommand{\cfttoctitlefont}{\hfill\LARGE\bfseries\scshape} % added <<<<<
\renewcommand{\cftaftertoctitle}{\hfill\vspace{50pt}} % inserting a large space <<<<

\begin{document}
    \tableofcontents
    \section{This}
    \lipsum[1]
    \section{That}
    \lipsum[2]
    \section{Something completely different}
    \lipsum[3]
\end{document}

相关内容