Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

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?

share|improve this question
add comment

1 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.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.