为了定制目录的外观,我们使用托克洛夫特包。我们想要实现的一点是,在目录中给章节条目加上下划线。
但是,如果我们使用\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
可能也是一个坏主意。