如何强制长章节名称(包括页码)保留在目录的边距中?

如何强制长章节名称(包括页码)保留在目录的边距中?

我对 LaTeX 还不太熟悉,并且需要使用自定义类来满足此 LaTeX 文档的一些严格的格式要求。

目前,如果章节名称较长(在特定窗口内,长度约为 1 行),它将显示在一行上,并且页码“被推”到右边距之外。这是不允许的,那么我该如何换行这些稍长章节标题并避免将页码打印到右边距之外?

我已经尝试过\setlength{\hfuzz}{0.0pt}我读到的这里但听起来这只适用于 TeX,不适用于 LaTeX。无论如何,它不起作用。

编辑:下面是一个可以说明该问题的示例。我正在使用/编写的类基于 report,并且 report 具有完全相同的问题,可在以下文档中查看:

\documentclass{report}

\begin{document}

\tableofcontents

\chapter{xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx 1234567890}

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

\chapter{xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx 1234567890}

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

\chapter{xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx12345}

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

\end{document}

生成后(在我的情况下使用 pdflatex),目录如下所示:

省略标题,显示目录

如您所见,第一个标题很短,只有一行。第二个标题很长,可以分成两行。然而,第三个标题介于两者之间,只将页码 (4) 推到边距之外。第一和第二页码正确地位于边距之内。

鉴于这些文档的严格页边距要求,我需要在页边距内断开第三个标题,可能使用连字符。我见过这种情况,在这种情况下,它会在页码正常打印之前断开。

答案1

似乎 (La)TeX 在对行末的单词进行连字符连接时遇到了问题(例如 xxxxx12345),并认为在单词前断行看起来更糟。也许您需要为您的语言加载连字符模式(通过babel),或者它只是一些带有“特殊字符”的单词(即不在 az、AZ 范围内,如 1 或 ü)。在这种情况下,最简单的方法可能是明确告诉 TeX 在哪里可以断词,方法是用 标记位置\-。例如,上面的单词可能被标记为xxx\-xx\-123\-45,这给出

例子

答案2

我花了几个小时在网上搜索和阅读文档以寻找解决方案。这项研究也让我找到了这个页面,但不幸的是,它没有给我满意的答案。

这是我的解决方案:

\addtocontents{toc}{\protect\sloppy}
\tableofcontents
\addtocontents{lof}{\protect\sloppy}
\listoffigures
\addtocontents{lot}{\protect\sloppy}
\listoftables

我希望这对任何遇到 ToC/LoF/LoT 中的标题越过边距并移动页码的相同问题的人都有用。

答案3

您可以使用tocstyle包含在KOMA 脚本将 ToC 条目设置为不规则的右侧(从而避免出现有问题的换行符)。将以下内容添加到您的序言中:

\usepackage{tocstyle}
\usetocstyle{standard}
\settocfeature{raggedhook}{\raggedright}

请注意,该包具有“alpha”状态。

答案4

我找到了一个解决方案,即编辑目录样式的段落设置。使用右缩进将标题文本停止在定义的位置。在页码所在的位置编写一个带或不带前导点的右制表符。

例如,在 8.5 英寸 x 11 英寸、边距为 1 英寸的纸张上,您有 6.5 英寸的可用水平空间。因此,将 TOC 样式制表符设置为 6.5 英寸右制表符(带或不带前导点)。

在目录样式段落设置中,编写一个 .5" 的右缩进,标题将不会超出 6" 标记,为页码留下 .5" 的空间。

为了获得整洁的外观,请将 TOC 样式段落特殊设置编程为悬挂缩进 .5",长标题的第二行将稍微缩进。

相关内容