使用 tocloft 解决章节高度问题

使用 tocloft 解决章节高度问题

如我的 MWE 所示,我用它tocloft来在目录中的章节旁边添加点。它有效,但由于某种我不知道的原因,TOC、LOF、LOT 的标题不再与常规章节标题处于同一高度。MWE:

\documentclass[pdftex, 12pt, oneside]{book}
\usepackage[english]{babel}
\usepackage{tocloft}
 \renewcommand\cftchapaftersnum{.}
 \renewcommand{\cftchapleader}{\cftdotfill{\cftdotsep}}
\usepackage{titlesec}
 \titleformat{\chapter}{\huge\bfseries}{\thechapter}{20pt}{\huge}
 \titlespacing*{\chapter}{0pt}{10pt}{30pt}
\usepackage[paper = a4paper, margin = 1in]{geometry}

\begin{document}
 \frontmatter
  \tableofcontents
 \mainmatter
  \chapter*{Chapter without number}
   \addcontentsline{toc}{chapter}{Chapter without number}
    Hello world!
  \chapter{Chapter with number}
    Hello world, again!
\end{document}

有人知道为什么会这样并且可以解决我的问题吗?

答案1

默认情况下,该tocloft包会丢弃其他包对章节标题排版方式所做的定制,而对于目录和图表列表则不会这样做。

为了避免这种行为,您必须使用以下titles选项加载它:

\usepackage[titles]{tocloft}

关于您的代码的一些评论。

我会添加\hspace{\cftchapnumwidth}到未编号章节的条目。

\documentclass[12pt, oneside]{book}
\usepackage[paper = a4paper, margin = 1in]{geometry}
\usepackage[english]{babel}

\usepackage[titles]{tocloft}
\usepackage{titlesec}

\renewcommand\cftchapaftersnum{.}
\renewcommand{\cftchapleader}{\cftdotfill{\cftdotsep}}

\titleformat{\chapter}{\huge\bfseries}{\thechapter}{20pt}{\huge}
\titlespacing*{\chapter}{0pt}{10pt}{30pt}

\begin{document}
\frontmatter

\tableofcontents

\mainmatter

\chapter*{Chapter without number}
  \addcontentsline{toc}{chapter}{\protect\hspace{\cftchapnumwidth}Chapter without number}

Hello world!

\chapter{Chapter with number}

Hello world, again!

\end{document}

你可能想避免使用\chapter*笨拙的\addcontentsline命令

\newcommand{\uchapter}[1]{%
  \chapter*{#1}%
  \addcontentsline{toc}{chapter}{\protect\hspace{\cftchapnumwidth}#1}%
}

在此处输入图片描述

一个更常见的技巧tocloft是输入\protect\numberline{}而不是\protect\hspace{...}; 在这种情况下,它会增加不必要的句号。

相关内容