我正在使用该类准备一份文档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>
可能有点令人恼火。该论点允许名称不带前导反斜杠,因此figure
和table
也是允许的。
包裹托克洛夫特
包裹托克洛夫特提供以下设置。缩进由长度设置\cftXindent
。X
代表:
\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-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>
section
subsection
figure
如果你想拥有自然的目录中数字和标题之间的分隔,您需要修改\numberline
以不将其内容设置在框中,而是仅设置数字后跟一些空格,如下所示:
\renewcommand{\numberline}[1]{#1~}
上述重新定义将设置数字后跟~
(tie)。您可以根据需要更改它(\hspace{<len>}
、:~
、...)。请注意,这将适用于使用它的所有元素(包括figure
LoF 中的 s 和table
LoT 中的 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
之后插入内容:s
num
\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 后问题仍然存在:
但至少经过三次 LaTeX 运行后,你会得到:
如果您使用 KOMA-Script 类或派生类而不是标准类,则无需自行加载tocbasic
,因为 KOMA-Script 类已经使用此包。另一方面,如您在上例中看到的,您无需使用 KOMA-Script 类即可使用 的功能tocbasic
。