Créer une table des matières
Exploiter les longs documents
LaTeX est un formidable outil de composition de documents longs, complexes et structurés. Dans ces longs documents, vous allez pouvoir gérer et afficher une table des matières, des index, des glossaires, des listes de tableaux et de figures, et des bibliographies.
Dans le cas où vous devez gérer des documents très volumineux, vous pouvez « décomposer » ces documents en plusieurs parties, qui seront gérées dans des fichiers distincts. C’est une gestion multidocuments. Vous pourrez ensuite générer la table des matières, les index et créer des glossaires à partir de tous ces fichiers des différentes parties du document. Par la suite, à partir de tous ces fichiers, vous pourrez produire un PDF unique pour une impression finale.
Comprendre la création de la table des matières
La table des matières est créée avec la commande \tableofcontents. La création se fait en plusieurs étapes. Quand cette commande est exécutée, LaTeX crée un fichier ayant l’extension .toc et ce fichier utilise le nom du document. Dans ce fichier sont ajoutés tous les titres de tous les niveaux hiérarchiques numérotés du document. Ceci exclut les niveaux paragraphe et sous-paragraphe de la table des matières, car ces derniers n’ont pas de numérotation automatique. Dans ce document, chaque niveau hiérarchique est indiqué avec son numéro de ligne et son numéro de page. C’est la première étape. Si vous effectuez la compilation et le rendu de votre document en PDF, rien n’est affiché et c’est normal.
Pour générer à l’affichage la table des matières, il faut compiler une deuxième fois le document. À ce moment-là, LaTeX voit qu’il existe un fichier .toc et il peut alors l’utiliser et l’afficher dans le rendu PDF.
Ainsi, à chaque première compilation, LaTeX modifie le fichier .toc s’il y a des changements apportés au document. Et à la deuxième compilation, LaTeX génère la table des matières et l’affiche...
Connaître la structure du document
Pour cet exemple, nous allons utiliser un document ayant la classe book. Voici son préambule :
\documentclass[11pt,a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
Le document est structuré avec des parties (part{•}), des chapitres (chapter{•}), des sections (section{•}) et des sous-sections (subsection{•}).
Voici la structure de cet exemple :
\begin{document}
\tableofcontents
\part{Introduction}
\chapter{Janvier}
\section{Lundi}
Vivamus sagittis lacus...
\section{Mardi}
Cras justo odio, dapibus ac facilisis...
\chapter{Février}
\section{Mercredi}
Vestibulum id ligula porta...
\part{Résultats}
\chapter{Mars}
\section{Jeudi}
Curabitur blandit tempus porttitor...
\section{Vendredi}
\subsection{Matin}
Curabitur blandit tempus porttitor...
\subsection{Midi}
\subsection{Soir}
Curabitur blandit tempus porttitor...
\chapter{Avril}
\section{Samedi}
Cum sociis natoque...
Afficher la table des matières
Pour afficher la table des matières du document, il faut insérer la commande \tableofcontents, là où vous le souhaitez. La table des matières s’affiche alors à l’endroit du document où est saisie cette commande.
Dans cet exemple, la commande \tableofcontents est insérée au tout début du document, juste après l’ouverture de celui-ci :
...
\begin{document}
\tableofcontents
\part{Introduction}
\chapter{Janvier}
\section{Lundi}
Vivamus sagittis lacus...
...
Voici l’affichage obtenu :
![images/C11-001.png images/C11-001.png](https://www.eni-training.com/download/6500aa0d-aa07-4312-8be6-0872c5c833c0/images/C11-001.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Toute la mise en page et la mise en forme de la table des matières sont conçues par la commande de LaTeX et dépendent de la classe de document utilisée. Dans cet exemple, c’est la classe book qui est utilisée. Le libellé Table des matières est traduit par le package français de Babel.
Indiquer la profondeur de la table des matières
Vous pouvez personnaliser l’affichage de la table des matières de vos documents en indiquant le niveau hiérarchique minimal à afficher. C’est la profondeur de la table des matières.
Dans LaTeX, pour les classes de document book et report, les sections ont par définition le niveau 1. Par simple calcul, voici les niveaux des autres.
-
Les parties ont le niveau -1.
-
Les chapitres ont le niveau 0.
-
Les sections ont le niveau 1.
-
Les sous-sections ont le niveau 2.
-
Les sous-sous-sections ont le niveau 3.
-
Les paragraphes ont le niveau 4.
-
Les sous-paragraphes ont le niveau 5.
Pour la classe de document article, ce sont les parties qui ont le niveau 0, puisqu’il n’y a pas de chapitre. Le calcul reste sur le même principe pour les autres niveaux hiérarchiques.
Ceci posé, nous pouvons légitimement vouloir afficher une table des matières moins importante, limitée à certains niveaux seulement. Pour ce faire, utilisez la commande \setcounter. Le premier paramètre est tocdepth qui indique que nous voulons avoir une limite dans la profondeur de la table des matières. Le deuxième paramètre est la valeur spécifiant le niveau maximal de la profondeur voulue. Vous placez cette commande dans le préambule.
Dans notre exemple de livre, nous ne souhaitons afficher que les niveaux...
Omettre le niveau chapitre
Nous venons de le voir, le niveau chapitre est le niveau 0 de la structure hiérarchique des documents de type livre et rapport. Si vous n’avez pas de niveau chapitre dans votre document, la numérotation automatique de la table des matières va manquer d’une valeur, celle du niveau chapitre.
Voyons cet exemple simple dans une classe de document de type livre :
\documentclass[11pt,a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\begin{document}
\tableofcontents
\section{Janvier}
Praesent commodo cursus magna...
\section{Février}
Cum sociis natoque penatibus et magnis...
\end{document}
Dans ce document, nous n’avons que le niveau des sections, \section, et pas le niveau des chapitres.
Voici l’affichage obtenu :
![images/C11-005.png images/C11-005.png](https://www.eni-training.com/download/6500aa0d-aa07-4312-8be6-0872c5c833c0/images/C11-005.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
La numérotation des sections commence par le chiffre 0. Comme il n’y a pas de chapitre, il n’y a pas de numérotation pour ce niveau et c’est donc bien la valeur 0 qui est indiquée en premier.
Exclure certains niveaux
Souvenez-vous que les commandes des niveaux de structure ont toutes une syntaxe avec un astérisque : \section*{Titre du chapitre}. Cet astérisque permet d’indiquer que ce titre ne doit pas afficher le numéro automatique dans le document et ne doit pas s’afficher dans la table des matières.
Voyons cet exemple initial :
...
\section{Vendredi}
\subsection{Matin}
Curabitur blandit tempus...
...
Dans le rendu, nous voyons bien le numéro de niveau qui s’affiche, 3.2 Vendredi :
![images/C11-006.png images/C11-006.png](https://www.eni-training.com/download/6500aa0d-aa07-4312-8be6-0872c5c833c0/images/C11-006.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Le niveau inférieur de sous-section utilise bien le numéro de la section supérieure : 3.2.1 Matin.
Dans la table des matières, le niveau Vendredi est affiché :
![images/C11-007.png images/C11-007.png](https://www.eni-training.com/download/6500aa0d-aa07-4312-8be6-0872c5c833c0/images/C11-007.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Maintenant, ajoutons l’astérisque à ce niveau de section :
...
\section*{Vendredi}
\subsection{Matin}
Curabitur blandit tempus...
...
Voici l’affichage obtenu dans le rendu PDF :
![images/C11-008.png images/C11-008.png](https://www.eni-training.com/download/6500aa0d-aa07-4312-8be6-0872c5c833c0/images/C11-008.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Dans ce cas, le niveau de section Vendredi n’utilise plus de numérotation automatique. Le niveau inférieur de sous-section commence sa numérotation à 1, puisque son niveau parent n’est pas numéroté. Le chiffre 1 correspond maintenant au niveau parent, qui est la section Jeudi. Le premier chiffre, 3, est le numéro du chapitre.
Dans la table des matières, le niveau...
Modifier le titre dans la table des matières
Il se peut que vous ayez un titre qui soit très long et qu’ainsi, son affichage dans la table des matières ne soit pas très esthétique. Vous pouvez choisir d’afficher un titre dans le document et un autre titre, différent, dans la table des matières.
Voici la syntaxe initiale pour une section :
\section{Vendredi c'est le texte du titre affiché de cette
section dans le document}
Voici le rendu en PDF du document :
![images/C11-010.png images/C11-010.png](https://www.eni-training.com/download/6500aa0d-aa07-4312-8be6-0872c5c833c0/images/C11-010.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Et voici l’affichage dans la table des matières :
![images/C11-011.png images/C11-011.png](https://www.eni-training.com/download/6500aa0d-aa07-4312-8be6-0872c5c833c0/images/C11-011.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Le texte est bien trop long dans la table des matières, puisque ce texte va à la ligne. Pour éviter cela, il suffit d’utiliser le paramètre optionnel de la syntaxe :
\section[Vendredi]{Vendredi c'est le texte du titre affiché de
cette section dans le document}
Le rendu dans le document reste inchangé. Par contre dans la table des matières, nous avons bien maintenant uniquement le texte Vendredi :
![images/C11-012.png images/C11-012.png](https://www.eni-training.com/download/6500aa0d-aa07-4312-8be6-0872c5c833c0/images/C11-012.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Insérer des liens dans la table des matières
Lorsque vous partagez un document structuré en PDF, il est très agréable pour le lecteur d’avoir des liens sur les titres de la table des matières. Pour apporter cette amélioration, le package hyperref crée automatiquement des liens hypertextes internes depuis les titres de la table des matières, vers les pages concernées.
Voici le code de cet exemple :
\documentclass[11pt,a4paper]{report}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
% Ajout du package hyperref
\usepackage[pdftex]{hyperref}
\begin{document}
\tableofcontents
\chapter{Janvier}
\section{Lundi}
Vivamus sagittis lacus...
\section{Mardi}
Cras justo odio, dapibus...
\chapter{Février}
\section{Mercredi}
Sed posuere consectetur...
\section{Jeudi}
Curabitur blandit tempus...
\end{document}
Voici l’affichage obtenu dans la table des matières ; n il y a bien des liens fonctionnels dans le PDF :
![images/C11-013.png images/C11-013.png](https://www.eni-training.com/download/6500aa0d-aa07-4312-8be6-0872c5c833c0/images/C11-013.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Renommer le titre de la table des matières
Vous l’avez constaté depuis le début, le titre de la page contenant la table des matières est Table des matières. C’est la traduction donnée par le package français de Babel. Mais si vous souhaitez personnaliser ce titre, vous pouvez le faire avec la commande \renewcommand.
Vous devez placer cette commande avant l’insertion de la table des matières, \tableofcontents. Voici sa syntaxe :
\begin{document}
\renewcommand{\contentsname}{Sommaire}
\tableofcontents
Détaillons cette commande :
-
\renewcommand est la commande qui permet une personnalisation.
-
{\contentsname} indique que la personnalisation porte sur le nom de la table des matières.
-
{Sommaire} est le nouveau nom personnalisé.
Voici l’affichage obtenu :
![images/C11-014.png images/C11-014.png](https://www.eni-training.com/download/6500aa0d-aa07-4312-8be6-0872c5c833c0/images/C11-014.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)