我有一个目录,其中大多数项目的排版都很好。但是,在某些情况下,某些项目(特别是part
项目)似乎完全对齐,从而产生了可怕的间距。在我的文档中,只有当行中有几个非常长的单词时才会发生这种情况。间距很差的“第二部分”示例,带有填充文本:
我想将所有目录项(包括part
)左对齐,而不是使它们完全对齐,这样就不会出现此类间距问题,而不管其他因素,例如\\
目录项中的手动换行符()等。重要的是,只有实际文本(如“第二部分:本部分的标题”)才向左对齐:\dotfill
并且如果它们确实出现(如 MWE 中的章节项目),则应该保留页码位置。我曾尝试使用raggedright
甚至flushleft
内部环境\addcontentsline
,但这些都会产生错误并且无法编译。
我尝试为这个问题创建 MWE,但“第二部分”的排版方式很大程度上取决于我对页面尺寸、文本大小、所用字体和单词长度的设置,我无法创建能够重现问题的 MWE,而不需要太多细节,我认为这不会影响解决方案。而且这样的 MWE 对遇到同样问题的人没有多大用处。
因此我创建了 MWE,它不会重现问题,但会显示我用于 TOC 的基本设置和我用于添加 TOC 项目的命令,希望能提供足够的信息来回答这个问题:
\documentclass[final,12pt]{book}
\usepackage{tocloft}
\renewcommand{\cftchapleader}{\cftdotfill{\cftdotsep}}
\renewcommand{\cftchapfont}{\mdseries}
\renewcommand{\cftchappagefont}{\mdseries}
\cftpagenumbersoff{part}
\begin{document}
\tableofcontents
\addcontentsline{toc}{part}{Part Two: Bbbbbbbbbb Cccccccccc, A~Dddddddddd Bbbbbbbbbb ww Baaa}
\addcontentsline{toc}{chapter}{Chapter Five: Some chapter title}%
\addcontentsline{toc}{chapter}{Chapter Six: Very long chapter title that goes to the next line in my set up}%
\end{document}
有没有办法让所有目录项始终向左对齐,同时保留页面右侧的页码位置?我知道我可以使用表格和标签“手动”创建目录作为页码参考,在这种情况下更容易实现对齐,但我希望有解决方案允许使用命令生成目录来实现这一点\tableofcontents
。
\chapter*
附言:我使用由、\part*
和命令组成的自定义宏\addcontentsline*
,但我只将其包含\addcontentsline
在此 MWE 中,因为其他内容似乎与该特定问题无关。
答案1
宏可以\raggedright
通过调整 来工作\rightskip
,这已被 tocloft 使用。更重要的是,您无法在一行中间更改值。
下面将使用\raggedright
(或多或少)每个标题,而不仅仅是部分。
\documentclass[final,12pt]{book}
\usepackage{tocloft}
\renewcommand{\cftchapleader}{\cftdotfill{\cftdotsep}}
\renewcommand{\cftchapfont}{\mdseries}
\renewcommand{\cftchappagefont}{\mdseries}
\cftpagenumbersoff{part}
\makeatletter
\bgroup
\advance\@flushglue by \@tocrmarg
\xdef\@tocrmarg{\the\@flushglue}%
\egroup
\makeatother
\begin{document}
\cftchapnumwidth=0pt % removes hanging indentation
\tableofcontents
\addcontentsline{toc}{part}{Part Two: Bbbbbbbbbb Cccccccccc, A~Dddd Bbbbbbbbbb ww Baaa}
\addcontentsline{toc}{chapter}{Chapter Five: Some chapter title}%
\addcontentsline{toc}{chapter}{Chapter Six: Very long chapter title that goes to the next line in my set up}%
\end{document}