答案1
首先,让我们看看 LaTeX 是如何实现这些功能的。在最高级别的分段条目(\@section
在article
类中)中,的值\@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}