Without any packages:
In the standard documentclass without the influence of a package like titletoc you have to redefine the command \l@subsection. In the file book.cls you find the following settings:
\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}}
The command \@dottedtocline expect the following parameters:
\renewcommand{\l@<typ>}{\@dottedtocline{<level>}%
{<indention>}%
{<numwidth>}}
To reduce the indention of subsection you can do:
\makeatletter
\renewcommand*\l@subsection{\@dottedtocline{2}{1.8em}{3.2em}}
\makeatother
Example:
\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}
The method is equal for floating environments. The standard class book.cls provides \l@figure and and \l@table with the following settings:
\newcommand*\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
\let\l@table\l@figure
Package titletoc
By using the package titletoc you can set the indention by \dottedcontents:
\dottedcontents{<section>}[<left>]{<above-code>}
{<label width>}{<leader width>}
Example
\documentclass{book}
\usepackage{titletoc}
\dottedcontents{subsection}[5.5em]{}{3.2em}{1pc}
\begin{document}
\tableofcontents
\chapter{foo}
\section{bar}
\subsection{foobar}
\end{document}
The argument <section> can be a little bit irritate. The argument allows the name without a leading backslash whereby figure and table are allowed, too.
Package tocloft
The package tocloft offers more than the following setting. The indention is set by the length \cftXindent. The X stands for:
- part for
\part titles
- chap for
\chapter titles
- sec for
\section titles
- subsec for
\subsection titles
- subsubsec for
\subsubsection titles
- para for
\paragraph titles
- fig for
figure \caption title
- tab for
table \caption titles
Example:
\documentclass{book}
\usepackage{tocloft}
\setlength{\cftsubsecindent}{2em}
\begin{document}
\tableofcontents
\chapter{foo}
\section{bar}
\subsection{foobar}
\end{document}
KOMA-Scipt
By using a class of the KOMA bundle the settings of \@dottedtocline don't work. KOMA provides the command \bprot@dottedtocline. In the file scrbook.cls you find the settings:
\newcommand*{\l@chapteratlist}{\l@chapter}
\newcommand*\l@section{\bprot@dottedtocline{1}{1.5em}{2.3em}}
\newcommand*\l@subsection{\bprot@dottedtocline{2}{3.8em}{3.2em}}
\newcommand*\l@subsubsection{\bprot@dottedtocline{3}{7.0em}{4.1em}}
\newcommand*\l@paragraph{\bprot@dottedtocline{4}{10em}{5em}}
\newcommand*\l@subparagraph{\bprot@dottedtocline{5}{12em}{6em}}
The syntax of \bprot@dottedtocline is equivalent to \@dottedtocline (see above)
Example:
\documentclass{scrbook}
\makeatletter
\renewcommand*\l@subsection{\bprot@dottedtocline{2}{1.8em}{3.2em}}
\makeatother
\begin{document}
\tableofcontents
\chapter{foo}
\section{bar}
\subsection{foobar}
\end{document}
The modification of figure and table is equal to the standard class and defined as follow:
\newcommand*\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
\let\l@table\l@figure
Package tocstyle (link in German)
To manipulate the toc (or other list of ...) in combination with a class of the KOMA bundle you should use the package tocsyle. The package is part of the KOMA bundle but with a separate documentation. The influence of the indention is given indirect by entryhook which can be set by \settocfeature
One of the benefits oftocstyle is the automatic calculation of the necessary indentation.
Example:
\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}