目录间距问题 xx.xx

目录间距问题 xx.xx

我的目录列表有间距问题。有什么建议吗?

在此处输入图片描述

我正在使用 LuaLatex,没有使用 usepackages 来管理目录,并且我正在编写\documentclass[11pt]{article}。问题似乎发生在 sub- 和 subsubsections 上。

答案1

首先,让我们看看 LaTeX 是如何实现这些功能的。在最高级别的分段条目(\@sectionarticle类中)中,的值\@tempdima设置了此处感兴趣的宽度。

对于较低级别的分段,它是\@dottedtocline传递字段宽度的第三个参数:

\newcommand*\l@section[2]{%
  \ifnum \c@tocdepth >\z@
    \addpenalty\@secpenalty
    \addvspace{1.0em \@plus\p@}%
    \setlength\@tempdima{1.5em}%
    \begingroup
      \parindent \z@ \rightskip \@pnumwidth
      \parfillskip -\@pnumwidth
      \leavevmode \bfseries
      \advance\leftskip\@tempdima
      \hskip -\leftskip
      #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
    \endgroup
  \fi}
\newcommand*\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
\newcommand*\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
\newcommand*\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
\newcommand*\l@subparagraph{\@dottedtocline{5}{10em}{5em}}

因此,根据您拥有的类和所使用的包工具,方法只会在具体细节上有所不同。


情况 1) 如果您使用tocloft,它会提供长度宏而不是硬编码数字来用于这些尺寸。因此,更改长度宏就足以实现更改。

\documentclass{article}
\usepackage{tocloft}
\addtolength{\cftsecnumwidth}{3em}
\addtolength{\cftsubsecnumwidth}{3em}
\addtolength{\cftsubsubsecnumwidth}{3em}
\begin{document}
\tableofcontents
\vspace{1in}
\section{Section First}
\subsection{SubSection First}
\subsubsection{SubSubSection First}
\end{document}

在此处输入图片描述

如果我注释掉这三个\addtolength命令......

在此处输入图片描述


情况 2)如果您正在使用类article,但没有使用tocloft,您可以通过直接修补 3 个低级宏来将此处的 2em 添加到 number-label-width:

\documentclass{article}
\usepackage{xpatch}
\makeatletter
\xpatchcmd{\l@section}{{1.5em}}{{3.5em}}{}{}
\xpatchcmd{\l@subsection}{{2.3em}}{{4.3em}}{}{}
\xpatchcmd{\l@subsubsection}{{3.2em}}{{5.2em}}{}{}
\makeatother
\begin{document}
\tableofcontents
\vspace{1in}
\section{Section First}
\subsection{SubSection First}
\subsubsection{SubSubSection First}
\end{document}

案例 3)book类,无tocloft

\documentclass{book}
\usepackage{xpatch}
\makeatletter
\xpatchcmd{\l@chapter}{{1.5em}}{{3.5em}}{}{}
\xpatchcmd{\l@section}{{2.3em}}{{4.3em}}{}{}
\xpatchcmd{\l@subsection}{{3.2em}}{{5.2em}}{}{}
\makeatother
\begin{document}
\tableofcontents
\vspace{1in}
\chapter{Chapter First}
\section{Section First}
\subsection{SubSection First}
\end{document}

案例 4)scrartcl没有tocloft,这里直接进行重新定义,而不仅仅是修补。同样,正在修订的是 和 下部节宏中的\@tempdima\l@section第 3 个参数。\@dottedtocline

\documentclass{scrartcl}
\makeatletter
\renewcommand*\l@section[2]{%
  \ifnum \c@tocdepth >\z@
    \addpenalty{\@secpenalty}%
    \addvspace{1.0em \@plus\p@}%
    \setlength\@tempdima{3.5em}%
    \begingroup
      \parindent \z@ \rightskip \@pnumwidth
      \parfillskip -\@pnumwidth
      \leavevmode \sectfont
      \advance\leftskip\@tempdima
      \hskip -\leftskip
      #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
    \endgroup
  \fi}
\renewcommand*\l@subsection{\@dottedtocline{2}{1.5em}{4.3em}}
\renewcommand*\l@subsubsection{\@dottedtocline{3}{3.8em}{5.2em}}
\makeatother
\begin{document}
\tableofcontents
\vspace{1in}
\section{Section First}
\subsection{SubSection First}
\subsubsection{SubSubSection First}
\end{document}

答案2

这是使用该tocloft包的另一种解决方案。请注意使用指令来增加长度参数、和\addtolength的值。您可以随意调整 的参数以适合您的喜好。\cftsubsecnumwidth\cftsubsubsecindent\cftsubsubsecnumwidth\addtolength

在此处输入图片描述

\documentclass[11pt]{article}
\usepackage{fontspec}  % optional
\setmainfont{Fira Sans Book} % select a suitable sans-serif font

\usepackage{tocloft}
\addtolength\cftsubsecnumwidth{0.5em}% default value: 1.5em
\addtolength\cftsubsubsecindent{0.5em}
\addtolength\cftsubsubsecnumwidth{0.5em}

\begin{document}
\tableofcontents

\clearpage
\setcounter{section}{10} % just for this example
\setcounter{subsection}{7}

\subsection{Betong i herdet tilstand}
\subsubsection{Densitet}
\subsubsection{Trykkfasthet}
\subsubsection{Kontroll av \dots}
\subsubsection{3-Punktstest}
\subsubsection{Metode for bruk \dots}
\subsection{Fuktinhold \dots}
\subsection{Partikkel-matriks modellen}
\subsubsection{Utst\o ping og \dots}
\subsection{Dimenjonering}

\end{document} 

相关内容