使用 tocloft 包和 cftchapaftersnum 覆盖 ToC 中的超满水平盒子(页面中间)

使用 tocloft 包和 cftchapaftersnum 覆盖 ToC 中的超满水平盒子(页面中间)

为了定制目录的外观,我们使用托克洛夫特包。我们想要实现的一点是,在目录中给章节条目加上下划线。

但是,如果我们使用\cftchapaftersnum命令指定水平线,我们总是会收到奇怪的水平框溢出警告。(奇怪的是,如果我缩短水平线,溢出的水平框会显示在页面中间。

使用 MikTeX 和 pdfLaTeX 编译的小示例:

\documentclass[draft]{book} % use draft to show overfull hboxes

\usepackage{tocloft}
% underline chapter entries:
\renewcommand{\cftchapaftersnum}{\hspace{4mm}\rule[-0.5mm]{0.5\textwidth}{.4pt}} 

\begin{document}

\tableofcontents

\chapter{Antelope}
Antelope is a term referring to many even-toed ungulate 
species found all over the world.

\rule[-0.5mm]{0.5\textwidth}{.4pt} 
This \verb|\rule| does not generate a warning!

\section{Impala}
An impala is a medium-sized African antelope.

\emph{fin \dots}

\end{document}

请注意,我在上面的示例中放置了0.5\textwidth标尺宽度。这样,我的 PDF 草稿会在页面中间(就在末尾\rule)显示溢出框的黑色矩形

这里发生了什么?

答案1

文档tocloft清楚地说明了这一点。

通常,节号排版在宽度为 的框内\cftXnumwidth。在框内,\cftXpresnum首先调用宏,然后排版数字,\cftXaftersnum排版数字后再调用宏。框内的最后一个命令是\hfil使框内容左对齐。

这意味着盒子的构造如下

\hbox to\cftchapnumwidth{\cftchappresnum 1\cftchapaftersnum\hfil}

你的盒子比 宽\cftchapnumwidth

如果你改变

\renewcommand{\cftchapaftersnum}{\hspace{4mm}\rule[-0.5mm]{0.5\textwidth}{.4pt}}

\renewcommand{\cftchapaftersnum}{\hspace{4mm}\rule[-0.5mm]{0.5\textwidth}{.4pt}\hss}

然后无限的收缩会导致警告消失。

编辑:您可能不应该使用间距4mm,而应该使用与字体大小成比例的间距。更好的方法是使用\cftchapaftersnumb(注意b在最后):

\renewcommand{\cftchapaftersnumb}{\rlap{\rule[-0.5mm]{0.5\textwidth}{.4pt}}}

使用-0.5mm可能也是一个坏主意。

相关内容