我用托克洛夫特包自定义目录格式和中转站包支持中文排版并自定义章节标题格式。一切正常。但我发现 TOC 标题前的垂直间距比正常章节标题前的垂直间距略小。这是 MWE:
%!TeX program = xelatex
\documentclass{article}
% for Chinese typesetting
\usepackage[heading=true]{ctex}
\ctexset{
section/format = \bfseries \centering \LARGE
}
\usepackage{titlesec}
\newcommand{\sectionbreak}{\clearpage}
\usepackage{tocloft}
\renewcommand{\cfttoctitlefont}{\hfill \bfseries \LARGE}
\renewcommand{\contentsname}{目录}
\renewcommand{\cftaftertoctitle}{\hfill}
\renewcommand{\cftbeforesecskip}{0em}
\renewcommand{\cftsecdotsep}{\cftdotsep}
\usepackage{fancyhdr}
\fancypagestyle{main}{
\fancyhf{}
\fancyhead[C]{Paper}
\fancyfoot[C]{\thepage}
}
\makeatletter
\renewcommand{\maketitle}{
\begin{titlepage}
\vspace*{\fill}
\begin{center}
{\Huge\bfseries\@title} \\
\vspace{2em}
{\Large\@author} \\
\vspace{\stretch{3}}
{\large\@date}
\end{center}
\vspace{\stretch{0.5}}
\end{titlepage}
}
\makeatother
\AtBeginDocument{
\let \oldtableofcontents \tableofcontents
\renewcommand{\tableofcontents}{
\fancypagestyle{plain}{
\fancyhf{}
\fancyhead[C]{Paper}
}
\pagestyle{plain}
\oldtableofcontents
\clearpage
\pagestyle{main}
}
}
\title{标题}
\author{作者}
\date{\today}
\begin{document}
\maketitle
\tableofcontents
\section{第一节}
这是第一节。This is the first section.
\section{第二节}
这是第二节。This is the second section.
\end{document}
可以看出,虽然不是很明显,但 TOC 标题前的垂直间距较小。我尝试解决这个问题,但发现这个问题. 在我的序言中添加此代码:
\renewcommand{\cftbeforetoctitleskip}{10em}
但它没有效果。
然后我阅读了 tocloft 包的文档,找到了 TOC 标题的定义:
\newcommand{\@cftmaketoctitle}{%
\addpenalty\@secpenalty
\if@cfthaschapter
\vspace*{\cftbeforetoctitleskip}%
\else
\vspace{\cftbeforetoctitleskip}%
\fi
\@cftpagestyle
{\interlinepenalty\@M
{\cfttoctitlefont\contentsname}{\cftaftertoctitle}%
\cftmarktoc
\par\nobreak
\vskip \cftaftertoctitleskip
\@afterheading}}
所以问题可能出在\vspace
,我重新命令了这个宏,替换为\vspace
。\vspace*
但这次,又出现了一个新问题!间距变大了:
我最终通过\@cftmaketoctitle
如下方式更新命令解决了这个问题:
\renewcommand{\@cftmaketoctitle}{%
\section*{\contentsname}
\@afterheading}}
使目录标题成为不带编号的章节标题,并且其上方的间距由 ctex 包控制。
但是我还是不明白为什么会出现这些问题。tocloft 和 ctex 有冲突吗?