I know \setcounter{secnumdepth}{1}
lets you set the depth of numberings, but I have to number sections and subsections only, not chapters. Is there a one-liner to do this? I have seen some answers to similar problems, but they seem overly complicated for such a simple task.
[Tex/LaTex] How to hide chapter numbering in table of contents
table of contentstitletoctocloft
Related Solutions
book
defines the ToC-related sectioning commands as follows:
\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}
\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 above boils down to adding a dotted ToC line for \section
, \subsection
, \subsubsection
, \paragraph
and \subparagraph
(if allowed in the ToC; set via tocdepth
). It doesn't for \chapter
though. However, the definition of \@dottedtocline
can be worked into \l@chapter
. Here's the definition, taken from latex.ltx
:
\def\@dottedtocline#1#2#3#4#5{%
\ifnum #1>\c@tocdepth \else
\vskip \z@ \@plus.2\p@
{\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
\parindent #2\relax\@afterindenttrue
\interlinepenalty\@M
\leavevmode
\@tempdima #3\relax
\advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
{#4}\nobreak
\leaders\hbox{$\m@th
\mkern \@dotsep mu\hbox{.}\mkern \@dotsep
mu$}\hfill
\nobreak
\hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}%
\par}%
\fi}
which leads to the following choice for \l@chapter
:
\renewcommand*\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
\xleaders\hbox{$\m@th
\mkern \@dotsep mu\hbox{.}\mkern \@dotsep
mu$}\hfill%
\nobreak\hb@xt@\@pnumwidth{\hss #2}\par
\penalty\@highpenalty
\endgroup
\fi}
Here's a complete MWE:
\documentclass{book}
\makeatletter
\renewcommand*\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
\xleaders\hbox{$\m@th
\mkern \@dotsep mu\hbox{.}\mkern \@dotsep
mu$}\hfill%
\nobreak\hb@xt@\@pnumwidth{\hss #2}\par
\penalty\@highpenalty
\endgroup
\fi}
\renewcommand*\l@section{\@dottedtocline{1}{1.5em}{2.3em}}
\renewcommand*\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}}
\renewcommand*\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}}
\renewcommand*\l@paragraph{\@dottedtocline{4}{10em}{5em}}
\renewcommand*\l@subparagraph{\@dottedtocline{5}{12em}{6em}}
\makeatother
\begin{document}
\tableofcontents
\chapter{First chapter}
\section{First section}
\subsubsection{A subsubsection}
\section{Second section}
\section{Last section}
\chapter{Second chapter}
\section{First section}
\section{Second section}
\section{Last section}
\chapter{Last chapter}
\section{First section}
\section{Second section}
\section{Last section}
\end{document}
I've used \xleaders
instead of \leaders
, but this may be a personal preference. See a discussion on the difference at Want to fill line with repeating string.
A possible solution, but I am sure, this has been answered before
(I took the \cftchapresnum...
etc code from Karl Koeller's answer in the link provided by the OP)
\documentclass{book}
\usepackage{fmtcount}
\usepackage{blindtext}
\usepackage[titles]{tocloft}
\usepackage{forloop}
\newcounter{dummycounter}%
\newlength\mylength
\renewcommand\cftchappresnum{\chaptername~}
\renewcommand\cftchapaftersnum{:}
\settowidth\mylength{\cftchappresnum\cftchapaftersnum\quad\quad 5pt}
\addtolength\cftchapnumwidth{\mylength}
\usepackage{etoolbox}%
\makeatletter
\pretocmd{\@chapter}{\begingroup \renewcommand{\thechapter}{\Numberstring{chapter}}}{}{}
\apptocmd{\@chapter}{\endgroup}{}{}
\makeatother
\begin{document}
\tableofcontents
\forloop{dummycounter}{1}{\value{dummycounter} < 11}{%
\chapter{Some Content of chapter \number\value{dummycounter}}%
\blindtext[5]
}%
\end{document}
Best Answer
The very fancy and sophisticated package
etoc
by our fellow user jfbu provides the means for this.By using
\etocsetlevel{level name}{level value}
it's possible to shift the structure level (e.g. chapter) to some lower level (say, beyond subparagraph) and then restrict thetocdepth
counter to some value above.\etocsetlevel{chapter}{6}
and\setcounter{tocdepth}{4}
will do the job.This affects only the representation in the ToC, not in the main part of the document.
An adjustment of spacings within the ToC might be necessary, this can be achieved with the various
\cft....
commands from thetocloft
package (not used here)Please note the difference between
secnumdepth
andtocdepth
counters:tocdepth
decides, which levels are shown in the toc (-1 downto 6) frompart
tosubparagraph
(for standard LaTeX classes)secnumdepth
decides which levels get section numbers in the main document.Edit
If only the numbers of the chapters should be removed (however, not for section 1.1 etc. ), one trick is to patch the
\@chapter
command: