如我的 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{...}
; 在这种情况下,它会增加不必要的句号。