我使用shorttoc
withtocloft
将章节名称放在换行符上。不幸的是,有些章节(例如前言或索引)没有编号,结果在它们之间出现了额外的、难看的换行符:
以下是我的问题的 MWE:
\documentclass{scrbook}
\usepackage[english]{babel}
\usepackage{shorttoc}
\usepackage{tocloft}
\renewcommand\cftchappresnum{Chapter\ }
\renewcommand\cftchapaftersnumb{\newline} % This is the newline I'd like to be contextual
\renewcommand\cftchapleader{\cftdotfill{1}}
\renewcommand\cftsecleader{\cftdotfill{1}}
\usepackage{blindtext}
\begin{document}
\shorttableofcontents{Contents}{0}
\addchap{Preface}
\blindtext
\Blinddocument
\addchap{Postface}
\blindtext
\tableofcontents
\end{document}
结果是:
我怎样才能保留编号章节的换行符并删除未编号条目的换行符?
编辑:
事实上,我意识到我想要实现的是减少联运在目录中的章节条目之间。我该怎么做?
答案1
不要使用您自己的宏,而是\newline
重新定义每个章节标题以给出换行符,然后清空自身(因此每个章节标题只产生一个换行符)。当Chapter\
不使用标题时,换行符也不会产生。
\newcommand{\newlineornot}{}
\renewcommand\cftchappresnum{Chapter\ \gdef\newlineornot{\newline\gdef\newlineornot{}}}
\renewcommand\cftchapaftersnumb{\newlineornot}
或者,在完整文档中,
\documentclass{scrbook}
\usepackage[english]{babel}
\usepackage{shorttoc}
\usepackage{tocloft}
\newcommand{\newlineornot}{}
\renewcommand\cftchappresnum{Chapter\ \gdef\newlineornot{\newline\gdef\newlineornot{}}}
\renewcommand\cftchapaftersnumb{\newlineornot}
\renewcommand\cftchapleader{\cftdotfill{1}}
\renewcommand\cftsecleader{\cftdotfill{1}}
\usepackage{blindtext}
\begin{document}
\shorttableofcontents{Contents}{0}
\addchap{Preface}
\blindtext
\Blinddocument
\Blinddocument
\addchap{Postface}
\blindtext
\tableofcontents
\end{document}
答案2
事实证明,问题出在目录中章节条目之间的间距。
这个简单的设置完成了工作:
\setlength{\cftbeforechapskip}{-0.3em}
所以我最终得到了如下结果:
\setlength{\cftbeforechapskip}{-0.3em}
\renewcommand\cftchappresnum{Chapter\ }
\renewcommand\cftchapaftersnumb{\newline}
\renewcommand\cftchapleader{\cftdotfill{1}}
\renewcommand\cftsecleader{\cftdotfill{1}}
调整标题后结果是: