tocloft 中的上下文换行符

tocloft 中的上下文换行符

我使用shorttocwithtocloft将章节名称放在换行符上。不幸的是,有些章节(例如前言或索引)没有编号,结果在它们之间出现了额外的、难看的换行符:

Shorttoc 换行不好看

以下是我的问题的 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}

结果是:

问题的 MWE

我怎样才能保留编号章节的换行符并删除未编号条目的换行符?

编辑:

事实上,我意识到我想要实现的是减少联运在目录中的章节条目之间。我该怎么做?

答案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}}

调整标题后结果是:

固定线路跳过

相关内容