Table des matières, liste des figures et des tableaux (tocloft)

\tableofcontents, \listoffigures et \listoftables rassemblent les informations de titres et de légendes pour composer table des matières, liste des figures et liste des tableaux. Cette page explique le mécanisme (fichiers auxiliaires et deux passages), le contrôle de profondeur, l’ajout manuel d’un titre étoilé, puis la mise en forme des retraits, polices et points de conduite avec tocloft. Les bases des titres relèvent de la page « Structure, titres et table des matières » ; ici nous nous concentrons sur la génération et la personnalisation.

Trois listes automatiques

Une table des matières se produit simplement avec \tableofcontents. De même, \listoffigures construit une liste des figures à partir des légendes figure, et \listoftables une liste des tableaux à partir des légendes table. On les place généralement dans les pages liminaires, juste après le titre.

Les trois fonctionnent de la même manière. Pendant le traitement, LaTeX écrit le numéro, le titre et la page de chaque titre ou légende dans un fichier auxiliaire : .toc pour la table, .lof pour les figures, .lot pour les tableaux, chacun portant le nom du fichier racine. Au passage suivant, il relit ce fichier pour composer la liste.

Cela a une conséquence importante. Au premier passage, le fichier auxiliaire n’existe pas encore ou est périmé ; la liste est donc vide ou fausse. Pour un résultat correct, il faut compiler au moins deux fois. La référence dit elle-même qu’un passage stocke l’information et le second la récupère. Si les numéros de page bougent, d’autres passages peuvent être nécessaires ; latexmk les répète automatiquement.

Les titres proviennent de macros dépendantes de la langue : \contentsname (par défaut « Contents ») pour la table, \listfigurename pour les figures et \listtablename pour les tableaux, modifiables avec \renewcommand. Dans book et report, ces titres sont des chapitres non numérotés (\chapter* en interne) ; dans article, des sections non numérotées. Comme ils n’ont pas de numéro, les listes elles-mêmes n’apparaissent pas par défaut dans la table.

document.tex
\documentclass{report}
\begin{document}
\tableofcontents   % .toc を使う(2 回処理が必要)
\listoffigures     % .lof
\listoftables      % .lot
\chapter{序論}
\end{document}

Profondeur de la table — tocdepth

Le compteur tocdepth détermine quels niveaux de titres apparaissent dans la table. Sa valeur est le numéro de niveau du titre (\section vaut 1, \subsection vaut 2, \chapter dans book/report vaut 0, …) et désigne le niveau le plus profond à lister. Ainsi \setcounter{tocdepth}{1} s’arrête aux sections et omet les sous-sections ; \setcounter{tocdepth}{2} va jusqu’aux sous-sections. Les valeurs par défaut sont 3 dans article et 2 dans book/report.

Ne le confondez pas avec secnumdepth, qui régit la numérotation. secnumdepth fixe jusqu’où les titres sont numérotés ; tocdepth fixe jusqu’où ils sont listés dans la table. Les deux sont indépendants. On peut par exemple numéroter jusqu’aux sous-sections tout en ne listant que les sections. Les listes des figures et des tableaux n’ont qu’un seul niveau (figure, tableau), donc tocdepth ne les affecte pas.

Ajouter des entrées à la main — addcontentsline et addtocontents

Un titre étoilé (\section* ou \chapter*) n’a ni numéro ni référence de page automatique ; il n’entre donc jamais seul dans la table. Pour y faire apparaître une « Introduction », des « Remerciements », une bibliographie ou un index, écrivez une ligne manuelle avec \addcontentsline{ext}{unit}{text}. Les trois arguments sont obligatoires.

  • ext — l’extension du fichier auxiliaire cible : toc pour la table, lof pour les figures, lot pour les tableaux.
  • unit — le type d’entrée. Pour toc, il s’agit de part, chapter, section, subsection, etc. (leur format et leur retrait sont utilisés) ; pour lof, figure ; pour lot, table.
  • text — le texte à lister. Préfixer par \protect\numberline{} l’aligne avec les entrées numérotées ; toute commande fragile doit être précédée de \protect.

L’emplacement compte : \addcontentsline enregistre le numéro de page courant au moment où le traitement atteint cette ligne ; placez-le donc immédiatement après la commande de titre. Le motif standard pour un titre étoilé est le suivant. LaTeX fournit automatiquement le numéro de page, il ne faut donc jamais l’écrire dans text.

latex
\section*{はじめに}
\addcontentsline{toc}{section}{はじめに}

\chapter*{謝辞}
\addcontentsline{toc}{chapter}{謝辞}

Son compagnon \addtocontents{ext}{text} injecte non pas une ligne, mais du matériau dans le fichier auxiliaire : espacements ou commandes de mise en forme. Il prend deux arguments, l’extension cible ext et le contenu text à écrire. Pour ajouter un espace vertical dans la liste des figures, par exemple, on écrit ceci. Comme le .lof est relu au passage suivant, une commande fragile comme \vspace doit être protégée par \protect. En bref : les lignes avec numéro de page passent par \addcontentsline ; l’espacement et la décoration passent par \addtocontents.

latex
\addtocontents{lof}{\protect\vspace{2ex}}   % 図目次に縦の空きを差し込む
\addtocontents{toc}{\protect\setcounter{tocdepth}{1}}  % ここ以降の目次の深さを変える

Remodeler les listes avec tocloft

Pour contrôler finement l’apparence des listes standard, le package de référence est tocloft (par Peter Wilson). Chargez-le avec \usepackage{tocloft} et réglez séparément, pour chaque niveau, retrait, largeur du numéro, police et points de conduite, au moyen de \renewcommand et de commandes dédiées. Les noms de commandes sont systématiques : ils combinent un préfixe de niveau (toc = \part, chap = \chapter, sec = \section, subsec = \subsection, …, fig pour les figures, tab pour les tableaux) avec un rôle.

Pour le retrait et la largeur du numéro, \cftsetindents{entry}{indent}{numwidth} règle les deux à la fois : le premier argument est la cible (section, …), indent le retrait depuis la marge gauche, et numwidth la largeur réservée au numéro. On peut aussi ajuster directement les registres de longueur \cftsecindent et \cftsecnumwidth avec \setlength. Si des numéros plus larges commencent à toucher le titre, augmentez numwidth.

Les polices sont séparées pour l’entrée et son numéro de page : \renewcommand{\cftsecfont}{...} fixe la police du titre d’une entrée de section, et \cftsecpagefont celle de son numéro de page (pour les chapitres, \cftchapfont et \cftchappagefont). La police du titre propre de la liste se modifie avec des commandes comme \cftloftitlefont pour la liste des figures.

Les points de conduite, c’est-à-dire la ligne de points entre le titre et le numéro de page, sont gouvernés par \cftsecleader. La densité des points est la longueur \cftdotsep (4.5 par défaut) : plus petite, les points se resserrent ; plus grande, ils s’espacent. Pour supprimer complètement la conduite, utilisez \renewcommand{\cftsecleader}{\cftdotfill{\cftnodots}} (\cftnodots est une valeur assez grande pour signifier « ne pas imprimer de points »). Le caractère du point lui-même est fixé par \cftdot (un point par défaut).

CommandeCe qu’elle contrôle
\cftsetindentsRègle ensemble retrait et largeur du numéro d’un niveau{entry}{indent}{numwidth}
\cftsecfontPolice du titre d’une entrée de sectionRedéfinir avec \renewcommand
\cftsecpagefontPolice du numéro de page d’une entrée de sectionRedéfinir avec \renewcommand
\cftsecleaderPoints de conduite d’une entrée de sectionp. ex. \cftdotfill{\cftdotsep}
\cftdotsepEspacement des points de conduite (4.5 par défaut ; plus petit = plus dense)Une longueur (en mu)
\cftnodotsValeur assez grande pour n’imprimer aucun pointÀ utiliser pour supprimer une conduite

Voici un exemple qui met les titres de section en gras et resserre un peu les points de conduite. À placer dans le préambule.

latex
\usepackage{tocloft}
\renewcommand{\cftsecfont}{\bfseries}                       % 節の題を太字に
\renewcommand{\cftsecpagefont}{\bfseries}                   % ページ番号も太字に
\renewcommand{\cftsecleader}{\bfseries\cftdotfill{\cftdotsep}} % 太字の点線リーダー
\renewcommand{\cftdotsep}{2}                                 % 点をやや密に
\cftsetindents{section}{1.5em}{2.5em}                       % 字下げと番号幅

Mettre les listes dans la table

Comme indiqué, les titres de \listoffigures, \listoftables (ainsi que de la bibliographie et de l’index) ne sont pas numérotés ; ils n’apparaissent donc pas par défaut dans la table. Deux méthodes existent. La plus rapide consiste à placer une ligne \addcontentsline juste avant chaque commande de liste. Notez que tocloft lui-même ne fournit pas cette insertion automatique.

latex
\cleardoublepage
\addcontentsline{toc}{chapter}{\listfigurename}  % 図目次を目次に載せる
\listoffigures
\cleardoublepage
\addcontentsline{toc}{chapter}{\listtablename}   % 表目次を目次に載せる
\listoftables

L’autre méthode consiste à charger le package tocbibind (également de Peter Wilson). Avec \usepackage{tocbibind}, il ajoute automatiquement à la table ce qui existe parmi la table elle-même, la liste des figures, la liste des tableaux, la bibliographie et l’index. On désactive les éléments un par un avec des options : nottoc (exclure la table elle-même), notlot (la liste des tableaux), notlof (la liste des figures), notbib (la bibliographie) et notindex (l’index). C’est plus sûr que de placer \addcontentsline à la main, surtout pour une bibliographie ou un index de plusieurs pages, et cela supprime les lignes manuelles.

Contrôle plus fin — titletoc et etoc

Quand il faut aller au-delà de tocloft, deux options se distinguent. titletoc (par Javier Bezos, partie du bundle avec titlesec) définit le format de chaque ligne de la table, niveau par niveau, y compris le matériau et les séparateurs avant et après la ligne. Il offre des hooks puissants pour mettre en forme les lignes indépendamment et s’accorde naturellement avec les documents dont les titres sont stylés par titlesec.

etoc (par Jean-François Burnol) va encore plus loin : il permet de redessiner entièrement la table grâce à un cadre de « styles de ligne » et de « styles globaux ». Son point fort est \localtableofcontents, qui compose une table partielle pour chaque chapitre à partir du même .toc, et il peut même rendre la table sous forme d’arbre ou de carte mentale. Un bon ordre consiste à commencer par tocloft, puis à passer à titletoc ou etoc seulement quand vous voulez remanier la structure elle-même.