如何修改目录中章节标题的数字和文本之间的间距?

如何修改目录中章节标题的数字和文本之间的间距?

我正在使用该类准备一份文档book。在目录中,小节编号和标题之间的间距太宽。如何缩小它?

答案1

没有任何软件包:

在不受类似包影响的标准文档类中,titletoc您必须重新定义命令\l@subsection。在文件中,book.cls您可以找到以下设置:

\newcommand*\l@section{\@dottedtocline{1}{1.5em}{2.3em}}
\newcommand*\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}}
\newcommand*\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}}
\newcommand*\l@paragraph{\@dottedtocline{4}{10em}{5em}}
\newcommand*\l@subparagraph{\@dottedtocline{5}{12em}{6em}}

该命令\@dottedtocline需要以下参数:

\renewcommand{\l@<typ>}{\@dottedtocline{<level>}%
                                       {<indentation>}%
                                       {<numwidth>}}

为了减少缩进,subsection你可以这样做:

\makeatletter
 \renewcommand*\l@subsection{\@dottedtocline{2}{1.8em}{3.2em}}
\makeatother

例子:

\documentclass{book}
\makeatletter
\renewcommand*\l@subsection{\@dottedtocline{2}{1.8em}{3.2 em}}
\makeatother
\begin{document}
\tableofcontents
\chapter{foo}
\section{bar}
\subsection{foobar}
\end{document}

对于浮动环境,该方法是相等的。标准类book.cls提供\l@figure和,并\l@table具有以下设置:

\newcommand*\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
\let\l@table\l@figure

包裹标题目录

通过使用包标题目录您可以使用以下方式设置缩进\dottedcontents

\dottedcontents{<section>}[<left>]{<above-code>}
{<label width>}{<leader width>}

例子

\documentclass{book}
\usepackage{titletoc}
\dottedcontents{subsection}[5.5em]{}{3.2em}{1pc}

\begin{document}
\tableofcontents
\chapter{foo}
\section{bar}
\subsection{foobar}
\end{document}

这个论点<section>可能有点令人恼火。该论点允许名称不带前导反斜杠,因此figuretable也是允许的。


包裹托克洛夫特

包裹托克洛夫特提供以下设置。缩进由长度设置\cftXindentX代表:

  • \part标题部分
  • \chapter标题章节
  • sec\section标题
  • \subsection标题的子节
  • subsubsec 用于\subsubsection标题
  • \paragraph标题段
  • 标题为figure \caption
  • 标题table \caption标签

例子:

\documentclass{book}
\usepackage{tocloft}
\setlength{\cftsubsecindent}{2em}

\begin{document}

\tableofcontents
\chapter{foo}
\section{bar}
\subsection{foobar}
\end{document}

KOMA 脚本

使用最新版本的 KOMA-Script,您还可以使用\RedeclareSectionCommand它来更改目录中的条目。您可以将其用于所有定义的分段命令。

\documentclass{scrbook}
\RedeclareSectionCommand[%
tocindent=9em,tocnumwidth=7em,]{subsection}
\begin{document}

\tableofcontents
\chapter{foo}
\section{bar}
\subsection{foobar}
\end{document}

figure和的修改table等于标准类和定义如下:

\newcommand*\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
\let\l@table\l@figure

包裹目录风格(德文链接)

在 KOMA-Scrpt 的最新版本中, 的许多部分tocstyle都不再需要。 将来它将完全并入 KOMA-Script。

要操作目录(或其他列表...)与类结合韩国科玛捆绑包,您应该使用包tocstyle。该包是韩国科玛捆绑销售,但单独的文档.压痕的影响由entryhook以下 公式间接给出:\settocfeature

其中一个好处tocstyle是可以自动计算所需的缩进。

例子:

\documentclass{scrbook}

\usepackage{tocstyle}
\usetocstyle{KOMAlike}
\settocfeature[toc][2]{entryhook}{\protect\hspace*{-1.5em}\nobreakspace}
\begin{document}

\tableofcontents
\chapter{foo}
\section{bar}
\subsection{foobar}
\end{document}

答案2

负责设置标题之间的数字和空格的宏是\numberline。它定义在LaTeX 内核作为:

\def\numberline#1{\hb@xt@\@tempdima{#1\hfil}}

\numberline{<stuff>}<stuff>在宽度为 的框内设置其参数\@tempdima。长度由负责在 ToC 内设置任何内容的\@tempdima宏设置(例如、、等)。\l@<type><type>sectionsubsectionfigure

如果你想拥有自然的目录中数字和标题之间的分隔,您需要修改\numberline以不将其内容设置在框中,而是仅设置数字后跟一些空格,如下所示:

\renewcommand{\numberline}[1]{#1~}

上述重新定义将设置数字后跟~(tie)。您可以根据需要更改它(\hspace{<len>}:~、...)。请注意,这将适用于使用它的所有元素(包括figureLoF 中的 s 和tableLoT 中的 s)。

在此处输入图片描述

\documentclass{article}

\renewcommand{\numberline}[1]{#1~}

\usepackage{lipsum}% Just for this example
\AtBeginDocument{\sloppy}% Just for this example

\begin{document}

\tableofcontents

\section{A section}
\lipsum[1-50]

\setcounter{section}{9}
\section{Another section}
\lipsum[1-50]

\setcounter{section}{99}
\section{Yet another section}
\lipsum[1-50]

\setcounter{section}{999}
\section{Last section}
\lipsum[1-50]

\end{document}

如果你使用tocloft,类似的设置适用,但有一些细微的改动,因为tocloft允许在部分单元b之前和a之后插入内容:snum

\usepackage{tocloft}
\makeatletter
\renewcommand{\numberline}[1]{{\@cftbsnum #1\@cftasnum~}\@cftasnumb}
\makeatother

答案3

您可以使用包裹tocbasic并重新配置目录条目,以自动检测数字和层次缩进所需的空间:

\documentclass{article}
\usepackage{tocbasic}
\DeclareTOCStyleEntries[dynnumwidth,dynindent]{tocline}{section,subsection,subsubsection,paragraph,subparagraph}% Reconfigure ToC entries for section … subparagraph to use the needed number width and indent

\usepackage{blindtext}

\begin{document}

\tableofcontents

\blinddocument

\setcounter{section}{9}
\blinddocument

\setcounter{section}{99}
\blinddocument

\setcounter{section}{999}
\blinddocument

\end{document}

两次运行 LaTeX 后问题仍然存在:

有问题的 ToC

但至少经过三次 LaTeX 运行后,你会得到:

经过三次 LaTeX 运行后,一切正常。

如果您使用 KOMA-Script 类或派生类而不是标准类,则无需自行加载tocbasic,因为 KOMA-Script 类已经使用此包。另一方面,如您在上例中看到的,您无需使用 KOMA-Script 类即可使用 的功能tocbasic

相关内容