[Tex/LaTex] Space length between the chapter number and the chapter title

chapterssectioningspacingtable of contents

How can I learn the horizontal distance between the chapter number and the chapter title both in ToC and the body text where I use \documentclass[12pt,reqno]{book}. Which keys hold these values?

Best Answer

book (like report) sets the ToC entry for a chapter using \l@chapter. This is what it looks like:

\newcommand*\l@chapter[2]{%
  \ifnum \c@tocdepth >\m@ne
    \addpenalty{-\@highpenalty}%
    \vskip 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
      \penalty\@highpenalty
    \endgroup
  \fi}

The specific thing to note here is the value of \@tempdima, set to 1.5em. The first argument of \l@chapter (or #1) uses \numberline, which is defined in the kernel latex.ltx as:

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

creating a box of width \@tempdima and left-aligning its contents. Note that this 1.5em is based on the prevailing font at the time of setting (\normalsize\bfseries by default).


The (numbered) chapter head in book (and report) is set via the macro \@makechapterhead. Here's a take on that:

\def\@makechapterhead#1{%
  \vspace*{50\p@}%
  {\parindent \z@ \raggedright \normalfont
    \ifnum \c@secnumdepth >\m@ne
      \if@mainmatter
        \huge\bfseries \@chapapp\space \thechapter
        \par\nobreak
        \vskip 20\p@
      \fi
    \fi
    \interlinepenalty\@M
    \Huge \bfseries #1\par\nobreak
    \vskip 40\p@
  }}

The space between the word Chapter (or \@chapapp in the definition above) and the number (\thechapter in the definition above) is a regular \space or \.


In both instances, if you want to change these defaults, you have at least 3 options:

  1. Use a package that allows you to modify this content (like titlesec or tocloft or the like);

  2. Copy the entire definition and change it to your liking (making \newcommand -> \renewcommand);

  3. Use etoolbox to patch the command. For example,

    \usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
    \makeatletter
    \patchcmd{\l@chapter}% <cmd>
      {1.5em}% <search>
      {5.5em}% <replace>
      {}{}% <success><failure>
    \makeatother
    

    would use a 5.5em wide box for setting the chapter number in the ToC, increasing the gap between the number and title. Also

    \usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
    \makeatletter
    \patchcmd{\@makechapterhead}% <cmd>
      {\space}% <search>
      {\hspace*{100pt}\ignorespaces}% <replace>
      {}{}% <success><failure>
    \makeatother
    

    would insert a 100pt gap between the word Chapter (or whatever \@chapapp is) and the number. \ignorespaces would just remove any trailing spaces left inside the original definition of \@makechapterhead.