LaTeX appliqué aux sciences humaines


précédentsommairesuivant

Troisième partie : Faciliter la navigation

« Quand on ne sait pas où on va, il faut y aller... et le plus vite possible ! »

Devise shadok

16. Chapitre 16 - Renvois internes

Dans ce court chapitre, nous allons nous intéresser à la manière de faire des renvois à l'intérieur d'un document. Il s'agit de permettre d'afficher des textes du type : « Nous renvoyons au chapitre N. page P. »

16-A. Étiqueter des emplacements : \label

Pour pouvoir faire des renvois internes, il est nécessaire de placer des « étiquettes » aux endroits vers lesquels on souhaite renvoyer. Cet étiquetage se fait avec la commande \label{⟨etiquette⟩}.

Lors de la relecture, il peut être intéressant d'avoir les étiquettes affichées en marge. On utilisera pour ce faire le package showlabels.

16-B. Se servir des étiquettes

Après avoir placé des étiquettes, on peut y renvoyer. Il suffit d'insérer une commande de renvoi à l'endroit souhaité. Il est toutefois nécessaire de compiler deux fois avec XeLaTeX. À la première compilation, XeLaTeX note les emplacements des étiquettes dans un fichier. À la seconde compilation, il lit ce fichier afin de procéder aux renvois.

  • Compiler avec XeLaTeX ;
  • Compiler avec Biber afin d'ajouter les références bibliographiques ;
  • Compiler avec XeLaTeX ;
  • Recompiler avec XeLaTeX, car l'ajout des références bibliographiques a pu modifier le positionnement des étiquettes.

Si vous modifiez votre texte, il faudra de nouveau compiler deux fois.
En effet, les numéros de pages, de titres, de légendes, etc. peuvent avoir changé. Il faut donc que XeLaTeX les apprenne à nouveau. En résumé, pour avoir un document correct il faut :
Tout ceci peut paraître bien compliqué et risque d'entraîner des oublis.
C'est pourquoi il est conseillé d'utiliser le programme latexmk dont nous parlons en annexe (☞ Annexe DAnnexe D - Faciliter les compilations avec Latexmk).

16-B-a. Renvoyer à une page

Pour renvoyer au numéro de page correspondant à l'étiquette ⟨etiquette⟩, on utilise la commande \pageref{⟨etiquette⟩}.

 
Sélectionnez
1.
2.
3.
blabla \label{etiquette}
...
Nous renvoyons à la page~\pageref{etiquette}.

16-B-b. Renvoyer à un numéro de section

Pour renvoyer à un numéro de section, on utilise la commande \ref.

 
Sélectionnez
1.
2.
3.
\section{Section} \label{etiquette}
...
Nous renvoyons à la section~\ref{etiquette}.

16-B-c. Renvoyer à un titre de section

Pour renvoyer à un titre de section, on utilise la commande \nameref.

 
Sélectionnez
1.
2.
3.
\section{Section} \label{etiquette}
...
Nous renvoyons à la section \enquote{\nameref{etiquette}}.

Toutefois cette commande n'est pas disponible en standard : elle est proposée par le package hyperref. Il faut donc charger ce package dans le préambule. Nous documentons plus loin quelques fonctionnalités de ce package (☞ Des signets dans le PDF : le package hyperrefDes signets dans le PDF : le package hyperref).

16-C. Où placer la commande \label ?

Pour le moment, nous n'avons vu que des renvois vers des sections, mais le système de renvois est beaucoup plus souple.

Une étiquette permet de renvoyer à tout élément numéroté, comme un titre, une note de bas de page, une légende de flottant. Elle peut aussi renvoyer à un endroit précis en indiquant la page.

- Si l'étiquette \label est placée dans une commande d'élément numéroté, elle renvoie à cet élément. Par exemple, pour renvoyer à une figure (☞ Où insérer les éléments non textuels ? la notion de flottantsOù insérer les éléments non textuels ? la notion de flottants) :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
\begin{figure}[paramètre de placement]
    Insertion de la figure
    \caption{Légende\label{figure}}
\end{figure}
...

Nous renvoyons à la figure~\ref{figure} située p.~\pageref{figure}.
  • Si la commande est placée ailleurs, elle renvoie à la page courante et à la section courante(145).

16-D. Comment nommer ses étiquettes ?

Vous êtes bien sûr libre de trouver votre propre système de dénomination des étiquettes. Toutefois il est conseillé d'avoir quelque chose de la forme :

⟨forme⟩:⟨nom⟩, où ⟨forme⟩ désigne le type d'élément vers lequel on renvoie.

Exemples :

 
Sélectionnez
1.
2.
\footnote{Blabla \label{note:nom}}
\section{Titre \label{section:nom}}

17. Chapitre 17 - Sommaire et table des matières

Dans ce chapitre nous verrons comment générer un sommaire ou une table des matières.

Nous en profiterons pour étudier la manière de modifier les chaînes de langue de polyglossia, ainsi que pour aborder la notion de compteur en LaTeX. Nous indiquerons également les bases de la configuration du package hyperref, qui permet, entre autres, de proposer des signets dans le PDF généré.

17-A. Une table simple

La manière la plus simple de faire une table des matières est d'utiliser la commande \tableofcontents. Pour que XeLaTeX puisse afficher cette table des matières, il est nécessaire de compiler deux fois : lors de la première compilation, XeLaTeX stocke le contenu de la table des matières dans un fichier .toc ; lors de la seconde compilation, il se sert de ce fichier pour afficher la table des matières.

En règle générale, cette double compilation n'est guère gênante, puisqu'elle est déjà nécessaire lors de l'utilisation d'une bibliographie (☞ Une triple compilationUne triple compilation).

  • La première fois, XeLaTeX stocke les informations dans le fichier .toc ;
  • La seconde fois, la table des matières s'affiche, décalant la numérotation des pages. XeLaTeX stocke les nouveaux numéros de pages dans le fichier .toc ;
  • La troisième fois, la table des matières avec les bons numéros de page s'affiche. Comme sa longueur n'est pas différente de la précédente, il n'y a cette fois pas de décalage des numéros.

La table des matières prend elle-même un certain volume dans le corps du texte. Par conséquent si votre table des matières se trouve en début d'ouvrage - il serait alors plus juste de l'appeler « sommaire » - elle décale la pagination lors de son affichage. C'est pourquoi il faut parfois compiler trois fois :

Pour personnaliser l'apparence de la table des matières, on peut utiliser le package titletoc.

17-B. Choisir la profondeur de la table des matières : la notion de compteur

Par défaut la commande \tableofcontents affiche tous les niveaux de titre, depuis \part jusqu'au \subparagraph (☞ Différents niveaux de titresDifférents niveaux de titres). Il est possible de restreindre la profondeur, ou au contraire de l'étendre ; il suffit de redéfinir un compteur LaTeX : tocdepth.

Un compteur LaTeX est un nombre entier stocké dans la mémoire vive de l'ordinateur. Un compteur peut être appelé à certains endroits et peut également être modifié. Typiquement, un compteur est associé à un élément numéroté.

Il existe par exemple un compteur page correspondant au numéro de la page, incrémenté à chaque changement de page et utilisé pour afficher le numéro de page.

Dans notre cas, le compteur tocdepth n'est pas automatiquement modifié.

En revanche, il sert lors de l'affichage de la table des matières. Chaque niveau de titre possède un numéro (☞ Différents niveaux de titresDifférents niveaux de titres). La commande \tableofcontents affiche les niveaux de titre dont le numéro est inférieur ou égal à la valeur du compteur tocdepth.

Le niveau \subsubsection a comme numéro 3. Pour afficher dans la table des matières tous les niveaux de titres jusqu'au niveau \subsubsection inclus, il faut donc affecter la valeur 3 à tocdepth. On le fait en utilisant la commande \setcounter :

 
Sélectionnez
1.
2.
\setcounter{tocdepth}{3}
\tableofcontents

17-C. Table des matières ou sommaire ? Les chaînes de langues de polyglossia

Selon l'usage français, une table des matières se situe en fin d'ouvrage, un sommaire en début d'ouvrage. Par défaut la commande \tableofcontents indique que nous avons affaire à une « table des matières » et non à un « sommaire ». Comment avoir le terme « sommaire » ? Il suffit de redéfinir la chaîne de langue.

Nous avons déjà vu la notion de chaîne de langue (☞ Chaînes de langueChaînes de langue) pour la bibliographie. Il s'agit ici d'une idée similaire, mais pour le package polyglossia.

La syntaxe est toutefois différente. Comme pour les chaînes de langue de la bibliographie, il faut commencer par découvrir quel est l'élément à modifier, en cherchant cette fois dans le fichier french.ldf (☞ Trouver les fichiers standardsTrouver les fichiers standards). Vous pouvez repérer une ligne contenant \def\captionsfrench{%. Cette ligne est suivie d'autres lignes sous la forme : \def\⟨chaine⟩{⟨Valeur⟩}, qui s'enchaînent jusqu'à une accolade fermante.

Pour notre cas, on repère la ligne contenant :

 
Sélectionnez
\def\contentsname{Table des matières}%

Notre chaîne de langue est donc \contentsname.

Pour redéfinir une chaîne de langue, il suffit d'écrire, de préférence dans le préambule :

 
Sélectionnez
\gappto\captionsfrench{\renewcommand{<\chaine>}{Valeur}}

Dans le cas présent, cela donne :

 
Sélectionnez
\gappto\captionsfrench{\renewcommand{\contentsname}{Sommaire}}

La commande \def permet de créer de nouvelles commandes. Toutefois à la différence de la commande \newcommand, les commandes ainsi créées appartiennent à TeX et non pas à LaTeX (☞ TeX, LaTeX, XeTeX et XeLaTeX : points communs et différencesTeX, LaTeX, XeTeX et XeLaTeX : points communs et différences).
Définir des commandes en TeX et non en LaTeX permet plus de souplesse.
Mais cela demande plus de maîtrise technique pour éviter divers problèmes, comme des erreurs de compilation. C'est pourquoi nous n'en parlons pas dans ce livre, sauf ponctuellement.
Les commandes TeX peuvent contenir des « sous-commandes ». Ici par exemple, la commande \captionsfrench contient la sous-commande \contentsname. Nous utilisons la commande \gappto pour injecter une sous-commande dans une commande déjà définie.
La commande \gappto n'est une commande standard ni de TeX ni de LaTeX. Elle est définie par le package etoolbox, qui est lui-même appelé par polyglossia.

17-D. Table des figures et table des tableaux

En plus de la table des matières, LaTeX permet d'afficher une table des tableaux et une table des figures. Il est nécessaire, pour que ces tables soient constituées, que les tableaux et figures aient une légende (☞ Où insérer les éléments non textuels ? la notion de flottantsOù insérer les éléments non textuels ? la notion de flottants).

Pour la table des tableaux, il faut utiliser la commande \listoftables et pour celle des figures \listoffigures.

17-E. Plusieurs tables des matières

La commande \tableofcontents ne fonctionne qu'une seule fois dans un document LaTeX. Comment faire si on souhaite avoir un sommaire et une table des matières, ou bien une table des matières à la fin de chaque partie ?

17-E-a. Un sommaire en plus d'une table des matières

Bien que cette pratique soit un peu désuète et rarement utile, on peut souhaiter avoir une table des matières en fin de travail et un sommaire en début.

On utilise alors le package shorttoc. Celui-ci définit une commande

 
Sélectionnez
\shorttoc {⟨titre⟩}{⟨niveau⟩}

Pour un sommaire qui ne reprendrait que les niveaux de section et de chapitre, il suffit donc d'écrire :

 
Sélectionnez
\shorttoc{Sommaire}{0}

17-E-b. Sommaires partiels

Si l'on désire mettre un sommaire au début de chaque chapitre, il faut utiliser le package minitoc(146) en lui passant l'option french. On doit alors activer les minisommaires grâce à la commande \dominitoc :

 
Sélectionnez
1.
2.
\usepackage[french]{minitoc}
\dominitoc

Pour afficher les minisommaires il faut placer la commande \minitoc aux endroits voulus, par exemple après chaque titre de chapitre.

 
Sélectionnez
1.
2.
3.
4.
5.
\chapter{A}
\minitoc
...
\chapter{B}
\minitoc

Le package ne peut calculer correctement les sommaires que si la commande \tableofcontents est utilisée. Si vous souhaitez n'afficher que des minisommaires mais pas de table générale des matières - ce qui est une idée assez étrange - vous pouvez utiliser \faketableofcontents à la place de \tableofcontents.

Pour afficher des minisommaires par parties, il faut utiliser la commande \parttoc. Par exemple :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
\part{A}
\parttoc
\chapter{1}
\chapter{2}
...
\part{B}
\parttoc
...

Le package minitoc est très complexe et contient de nombreuses subtilités ; il permet par exemple de choisir facilement les styles du sommaire. Nous renvoyons au manuel pour plus de détails(147).

 

17-F. Des signets dans le PDF : le package hyperref

Certains PDF proposent des signets qui permettent d'accéder rapidement à un endroit précis du document(148). Il est possible avec LaTeX d'obtenir un PDF contenant des signets correspondant aux différents niveaux de titre. Pour ce faire il faut utiliser le package hyperref.

Ce package propose de nombreuses fonctionnalités : nous avons vu qu'il permettait notamment de créer des renvois vers les titres de sections (☞ Renvoyer à un titre de sectionRenvoyer à un titre de section). Mais il introduit aussi des liens cliquables en interne, par exemple entre un appel de note de bas de page et la note correspondante. Il permet aussi de configurer un certain nombre de métadonnées du document PDF.

17-F-a. Signet de navigation

Pour générer des signets correspondant au plan du travail, il suffit d'appeler le package et de compiler deux fois - ce qui est de toute façon nécessaire pour obtenir la table des matières.

Un problème se pose toutefois lorsque l'on utilise un titre non numéroté (☞ Des titres non numérotésDes titres non numérotés). En dépit de la commande \addcontentsline, ce titre n'est pas ajouté dans la liste des signets. Il faut en fait faire précéder cette commande de \phantomsection.

 
Sélectionnez
1.
2.
3.
\phantomsection
\addcontentsline{toc}{chapter}{Introduction}
\chapter*{Introduction}

17-F-b. Réglage des liens

Par défaut, hyperref encadre en rouge les liens hypertextes. Ces cadres n'apparaissent pas à l'impression.

On peut vouloir les faire disparaître aussi du document PDF. Il faut alors indiquer :

  • Que nous voulons que les liens soient colorés et non encadrés ;
  • Que nous voulons que la couleur soit le noir. En effet la couleur des liens est conservée à l'impression, contrairement à la couleur des cadres.

Nous allons pour cela utiliser la commande \hypersetup dans le préambule. La commande prend comme argument des paramètres du package, séparés par des virgules. Pour notre cas, les arguments nécessaires sont :

 
Sélectionnez
1.
2.
3.
4.
5.
\hypersetup{colorlinks=true,
citecolor=black,
filecolor=black,
linkcolor=black,
urlcolor=black}

colorlinks=true indique que nous colorons les liens au lieu de les entourer.

Pour hyperref il existe plusieurs types de liens dont la couleur est configurable.

Ici nous indiquons qu'il faut mettre en noir les types de liens suivants :

  • les liens de renvois d'une référence bibliographique abrégée à la référence complète ;
  • les liens appelant des fichiers externes au PDF ;
  • les liens internes (notes de bas de pages, renvois) ;
  • les liens externes.

18. Chapitre 18 - Index

Dans ce chapitre nous verrons comment faire un ou plusieurs index (149) .

18-A. Faire un index simple avec imakeidx

18-A-a. Principe de base

Pour indexer un document, il faut utiliser le package imakeidx et placer dans le préambule la commande \makeindex(150).

 
Sélectionnez
1.
2.
\usepackage{imakeidx}
\makeindex

Indexer son document

On indexe son document avec la commande \index{⟨entrée⟩}. L'entrée apparaît dans l'index sous la forme indiquée par l'argument ⟨entrée⟩, suivie du numéro de la page où cette commande est placée dans le texte.

Dans l'exemple qui suit(151), l'index comporte ainsi cinq entrées : « Charlemagne », « Adrien », « Tassilon », « Formose » et « Damase » :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
Tandis que Charle\index{Charlemagne} était à Rome, il convint
avec le pape Adrien\index{Adrien} qu'ils enverraient de concert
des ambassadeurs à Tassilon, duc de Bavière\index{Tassilon}
\textelp{}
Les hommes choisis et envoyés dans cette ambassade furent, de
la part du pape, les évêques Formose\index{Formose} et
Damase\index{Damase}\textelp{}.

Lorsqu'une entrée est référencée deux fois dans la même page, cette page n'est indiquée qu'une seule fois.

Il vaut mieux accoler la commande \index{⟨entrée⟩} directement au mot à indexer, sans laisser d'espace, pour éviter toute ambiguïté en cas de changement de page.

L'indexation d'un texte n'est pas automatique. Il faut placer \index{⟨entrée⟩} à chaque endroit que l'on veut référencer. On peut bien sûr créer une commande spécifique pour combiner l'indexation avec d'autres actions.

Ainsi, pour indexer automatiquement tous les noms propres d'un texte, déclarons la commande suivante :

 
Sélectionnez
\newcommand\auteur[2]{#1~\textsc{#2}\index{#2, #1}\xspace}

Il suffit ensuite, au cours de la rédaction de son texte, de frapper, par exemple, \auteur{Victor}{Hugo} pour obtenir « Victor HUGO » dans le corps de son texte, indexé sous l'entrée « Hugo, Victor ».

Générer l'index

Si notre fichier principal s'appelle exemple.tex, la commande \makeindex indique à LaTeX, lors de la compilation avec XeLaTeX, de créer un fichier exemple.idx, contenant la liste de toutes les entrées. LaTeX génère aussi un fichier exemple.ilg qui contient les messages de compilation de l'index, et un fichier exemple.ind qui contient l'index formaté. L'index apparaît dans le document à l'emplacement que l'on a indiqué par la commande \printindex.

18-A-b. Allons plus loin

Créer des subdivisions

Il est possible, avec imakeidx, de créer des subdivisions et des subsubdivisions pour chaque entrée de l'index. La subdivision se crée de la manière suivante :

 
Sélectionnez
\index{⟨entrée⟩!⟨sous-entrée⟩}

La sous-sous-entrée, logiquement, se crée ainsi :

 
Sélectionnez
\index{⟨entrée⟩!⟨sous-entrée⟩!⟨sous-sous-entrée⟩}

On ne peut cependant avoir que ces trois niveaux d'indexation.

On peut ainsi référencer autrement notre premier exemple, en créant les entrées « Évêques » et « Ducs » que l'on subdivise :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
Tandis que Charle\index{Charlemagne} était à Rome, il convint
avec le pape Adrien\index{Adrien} qu'ils enverraient de concert
des ambassadeurs à Tassilon, duc de Bavière\index{Ducs !Tassilon}.
\textelp{}
Les hommes choisis et envoyés dans cette ambassade furent, de la
part du pape, les évêques Formose\index{Évêques !Formose}
et Damase\index{Évêques !Damase}\textelp{}.

Supposons que ce texte soit à la page 5 ; on obtient ainsi dans l'index :

Image non disponible

Bien entendu, on pourrait encore rajouter une subdivision, en distinguant par exemple « Clercs » et « Laïcs », et dans la première catégorie en distinguant « Évêques » et « Papes ».

Faire des références croisées

Pour qu'une entrée dans l'index renvoie à une autre entrée, on utilise la commande

 
Sélectionnez
1.
\index{⟨entrée⟩|see⟨entrée à laquelle on renvoie⟩}

Ainsi, \index{Tassilon|see{Ducs}} donne dans l'index :

Image non disponible

La traduction de see change selon la langue indiquée comme \setmainlanguage (☞ Le français, langue par défautLe français, langue par défaut).

Créer des entrées sur plusieurs pages

Si l'on veut référencer dans l'index non pas un mot, mais un passage, il faut placer la commande \index{⟨entrée⟩|(} au début du passage à indexer et la commande \index{⟨entrée⟩|)} à la fin. Si le passage commence à la page x et se termine à la page y, on obtient dans l'index :

Image non disponible

Entrées formatées

L'indexation avec LaTeX ne gère pas correctement les accents indiqués dans l'argument de la commande \index : il classe les mots commençant par un accent à la fin de l'index. La syntaxe \index{⟨entrée⟩@⟨entrée formatée⟩} permet de résoudre ce problème. Ainsi, si l'on veut créer une entrée « écrivains », qui soit triée à « e », il faut insérer \index{ecrivains@écrivains}.

La commande \index{⟨entrée⟩@⟨entrée formatée⟩} permet donc de classer une entrée où l'on veut dans l'index. Pour faire apparaître, par exemple, les empereurs romains dans l'ordre chronologique et non dans l'ordre alphabétique, on peut utiliser les commandes suivantes :

 
Sélectionnez
1.
2.
3.
4.
\index{Empereurs !empereur1@Auguste}
\index{Empereurs !empereur2@Tibère}
\index{Empereurs !empereur3@Claude}
et ainsi de suite.

On obtient alors :

Image non disponible

Cette syntaxe est aussi utile pour mettre en évidence une entrée dans l'index en modifiant son aspect :

 
Sélectionnez
\index{⟨entrée⟩@\textbf{⟨entrée formatée⟩}}

fait apparaître l'entrée en gras dans l'index. Ceci est valable pour toutes les commandes agissant sur la fonte. Modifions ainsi comme suit la commande \auteur que l'on a créée précédemment (☞ Principe de basePrincipe de base) :

 
Sélectionnez
1.
2.
\newcommand{\auteur[2]}{%
#1~\textsc{#2}\index{#2 #1@\textsc{#2}, #1}\xspace}

Désormais, mettre \auteur{Victor}{Hugo} produit dans l'index « HUGO, Victor ».

Formater le numéro des pages

Il peut arriver, lorsqu'une entrée est très souvent représentée dans un texte indexé, que l'on veuille mettre en valeur une de ses occurrences, en faisant apparaître en gras dans l'index le numéro de la page où elle se situe : on utilise alors la commande

 
Sélectionnez
\index{⟨entrée⟩|textbf}

Il s'agit bien de |textbf, non de |\textbf.

De même pour faire apparaître le numéro de la page en italique utilise-t-on la commande

 
Sélectionnez
\index{⟨entrée⟩|textit}

Si vous utilisez le package hyperref, vous constaterez que celui-ci insère des liens hypertextes vers les pages au sein de l'index. Toutefois si une de ces pages est formatée, le lien disparaît. Nous expliquons sur notre site comment éviter ce problème(152).

 

18-A-c. Quelques options du package imakeidx

La commande \makeindex peut recevoir des arguments optionnels sous la forme \makeindex[⟨clef=valeur⟩] ; s'il y a plusieurs arguments, ils doivent être séparés par une virgule. En voici trois(153) :

title

Permet de changer le nom de l'index, qui par défaut est « Index ». Par exemple, le code suivant permet d'avoir un index intitulé « Index rerum »

 
Sélectionnez
\makeindex[title = Index rerum]
columns

Indique le nombre de colonnes. Par défaut, l'index est en deux colonnes. Si l'on veut un index en une seule colonne, il suffit de mettre :

 
Sélectionnez
\makeindex[title = Index rerum, columns = 1]
intoc

Indique si l'index doit apparaître ou non dans la table des matières. Par défaut, l'index n'apparaît pas dans la table des matières. Pour l'y mettre, il suffit d'ajouter cet argument dans la liste.

 
Sélectionnez
\makeindex[title = Index rerum, columns = 1, intoc]

Il existe une autre commande, la commande \indexsetup, qui peut, elle aussi, recevoir plusieurs arguments sous la forme {⟨clef=valeur⟩}. Voici ceux qui peuvent être utiles lorsque l'on n'a qu'un index (nous en verrons quelques autres à la section suivante) :

level Indique le niveau de division (section, chapitre, etc.) auquel correspond l'index. Par défaut, il s'agit de \chapter*.
toclevel

Indique le niveau de division (section, chapitre, etc.) auquel correspond l'index dans la table des matières. À l'inverse de l'argument précédent, il n'y a pas de contre-oblique :

 
Sélectionnez
\indexsetup[level=\section*, toclevel=section]

Pour terminer, voici la commande

 
Sélectionnez
\indexprologue[⟨espace⟩]{⟨texte⟩}

qui permet de mettre un prologue avant l'index. La commande se place juste avant \printindex(154). L'argument ⟨espace⟩ (par défaut \bigskip) indique l'espace entre le prologue de l'index et la première entrée ; il doit contenir une commande d'espacement vertical (☞ EspacementsEspacements). L'argument {⟨texte⟩} contient le prologue en lui-même. Par exemple, pour un index des notions :

 
Sélectionnez
1.
2.
\indexprologue{Les numéros en gras renvoient aux définitions de notions.}
\printindex

18-B. Faire plusieurs index

18-B-a. Définir ses index

Le package imakeidx permet de faire plusieurs index pour un même document.

La première étape consiste à définir ces index. On les déclare dans le préambule en utilisant pour chaque index la commande \makeindex, déjà étudiée.

Chaque index reçoit un nom abrégé - à ne pas confondre avec son titre - qui permettra ensuite d'indiquer à quel index appartient telle entrée indexée dans votre document. Le nom abrégé de l'index est indiqué comme option à la commande \makeindex.

Ainsi, pour faire un index des noms propres et un index général, on peut déclarer :

 
Sélectionnez
1.
2.
\makeindex[title=Index principal]
\makeindex[name=npr, title=Index des noms propres]

On remarque ici qu'aucun nom n'a été donné à l'index principal : dans ce cas, le nom abrégé est automatiquement « idx ». À la compilation, seront créés, en plus des fichiers exemple.idx, exemple.ilg et exemple.ind, les fichiers npr.idx, npr.ilg et npr.ind.

18-B-b. Indexer son texte

Une fois les index déclarés, il faut passer à l'indexation proprement dite. Le principe est le même que pour un seul index, mais au lieu de \index{⟨entrée⟩}, on utilise : \index[⟨nom abrégé⟩]{⟨entrée⟩}.

Toutes les entrées indiquées par \index{⟨entrée⟩} sans l'argument ⟨nom abrégé⟩, sont automatiquement placées dans l'index général « idx ».

On peut ainsi indexer notre texte d'Éginhard de la façon suivante :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
\index{Charles et la papauté|(}
Tandis que Charle\index[npr]{Charlemagne} était à Rome, il convint
avec le pape Adrien\index[npr]{Adrien} qu'ils enverraient de concert
des ambassadeurs à Tassilon, duc de Bavière\index[npr]{Tassilon}
\textelp{}
Les hommes choisis et envoyés dans cette ambassade furent, de
la part du pape, les évêques Formose\index[npr]{Formose} et
Damase\index[npr]{Damase}(...)\index{Charles et la papauté|)}.

18-B-c. Imprimer les index

Pour imprimer un index, il suffit d'utiliser la commande \printindex en lui passant le nom abrégé de l'index en option. Ainsi, pour imprimer l'index général suivi de celui des noms propres :

 
Sélectionnez
1.
2.
\printindex
\printindex[npr]

Si l'on veut regrouper tous les index en un seul chapitre dont chaque index est une section, on utilisera la commande \indexsetup. On peut lui passer comme option [⟨noclearpage⟩], pour éviter que chaque index commence à une nouvelle page. Bien sûr, chaque index peut avoir son propre prologue. Voici un exemple :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
\indexsetup{level=\section*,toclevel=section,noclearpage}
...
\chapter*{Indices}
\indexprologue{Les numéros en gras renvoient aux définitions de notions.}
\printindex

\indexprologue{Les auteurs anciens sont indiqués en italiques.}
\printindex[npr]

18-C. Indexer ses sources

Nous allons maintenant voir comment utiliser les possibilités de biblatex et de imakeidx pour établir un index des sources primaires.

Pour comprendre cette section, vous devez vous être familiarisé avec les indications sur les macros bibliographiques (☞ Que se passe-t-il lorsqu'on utilise une commande \⟨prefix⟩cite ?Que se passe-t-il lorsqu'on utilise une commande \⟨prefix⟩cite ?).

18-C-a. Premier essai

La documentation de biblatex(155) nous informe qu'il existe au chargement du package une option indexing qui permet d'indexer automatiquement les références bibliographiques. Comme nous ne souhaitons indexer que les références appelées par les commandes \⟨prefix⟩cite - et non celles appelées par la commande \printbibliography - nous attribuons la valeur cite à cette option.

 
Sélectionnez
\usepackage[indexing=cite]{biblatex}

Étant donné qu'il faut à la fois interpréter le fichier .bib et faire un index, nous devons procéder aux compilations dans l'ordre suivant :

  • Compilation avec XeLaTeX ;
  • Compilation avec Biber ;
  • Compilation avec XeLaTeX pour que les données bibliographiques soient intégrées dans l'index.

On constate cependant deux problèmes :

  • La bibliographie se trouve mêlée aux autres entrées de l'index ;
  • Plus grave : nous avons des entrées pour les auteurs et des entrées pour les titres, au lieu d'avoir des entrées sous la forme : Auteur!Titre.

En outre nous aimerions :

18-C-b. Création d'un index spécifique

Pour créer un index spécifique aux sources, rien de particulier : il suffit d'utiliser imakeidx et la commande \makeindex :

 
Sélectionnez
\makeindex[name=sources,title=Sources]

18-C-c. Modifications des macros de biblatex

Nous avons donc notre index spécifique. Mais encore faut-il que nous disions à biblatex d'y écrire son index. Pour ce faire nous allons d'abord redéfinir la macro citeindex qui est appelée à chaque commande \⟨prefix⟩cite.

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
\renewbibmacro{citeindex}{%
    \ifciteindex{%
      \indexnames[sources]{author}%
      \indexfield[sources]{indextitle}%
      \indexfield[sources]{titleaddon}%
      \index[sources]{---}%
      }%
      {}}
ligne 2 la commande \ifciteindex vérifie que l'option indexing de biblatex est bien égale à true ou bien à cite : ce qui suit entre accolades est exécuté si tel est le cas.
ligne 3 nous indexons le champ author. Nous utilisons le format d'indexation sources.
ligne 4 nous indexons le champ indextitle. Ce champ spécial sert à avoir dans l'index un autre titre que dans le corps du document. Si ce champ est vide biblatex utilise à la place le champ title. Nous utilisons le format d'indexation sources.
ligne 5 nous indexons le champ titleaddon. Nous utilisons le format d'indexation sources.
ligne 6

une des limitations de biblatex est qu'il ne peut indexer qu'un seul champ à la fois, et n'est pas capable, pour le moment, de produire des entrées d'index à plusieurs niveaux. Avec cette macro citeindex, on obtient une indexation séparée pour chaque champ des entrées indexées. Or nous voudrions obtenir une indexation correspondant à la commande :

 
Sélectionnez
\index{auteur !titre !titleaddon}

C'est pourquoi nous avons conçu un script dans le langage python(156), qui concatène dans le fichier .idx les trois indexations en une seule. Mais avant d'utiliser ce script, il faut indexer une fausse valeur, la valeur ---, qui empêchera le script d'indexer tous les champs d'une entrée : nous ne voulons pas obtenir une entrée de la forme :

 
Sélectionnez
\index{author !title !titleaddon !author2 !title2 !}

Toutefois, ce script python doit être exécuté avant que LaTeX ne transforme le fichier .idx en fichier .ind. Cette transformation est faite automatiquement par le package imakeidx. Cependant, nous pouvons désactiver cet automatisme pour un index particulier, dans le cas présent pour l'index sources. Pour ce faire, il nous suffit de passer l'option noautomatic à la commande \makeindex :

 
Sélectionnez
\makeindex[name=sources,title=Sources,noautomatic]

Il nous faudra alors, après l'exécution du script python, compiler le fichier sources.idx avec le script MakeIndex, afin de produire un fichier sources.ind :

 
Sélectionnez
makeindex sources.idx

Après cela, la compilation avec XeLaTeX affiche correctement l'index.

 

18-C-d. Format d'indexation biblatex

Nous avons dit que nous utilisions le format d'indexation sources. Un format d'indexation biblatex est simplement la description de l'opération que biblatex effectue lorsqu'il doit indexer un champ. Il nous faut donc définir ce format grâce aux commandes \DeclareIndexNameFormat et \DeclareIndexFieldFormat.

Indexation des noms

 
Sélectionnez
1.
2.
3.
\DeclareIndexNameFormat{sources}{%
    \usebibmacro{index:name}{\index[sources]}{#1}{#3}{#5}{#7}
    }

Nous indiquons en première ligne que nous déclarons un format d'indexation sources pour les noms propres. Dans la ligne suivante, nous déclarons ce que nous faisons : nous appelons une macro index:name.

Cette macro est déjà définie par biblatex. Elle reçoit plusieurs arguments. Le premier argument est la commande à exécuter : ici \index[sources], qui permet d'indexer dans l'index sources défini plus haut. Les autres arguments sont repris des codes de biblatex et désignent les différentes parties du nom à indexer(157).

Indexation des autres champs

 
Sélectionnez
1.
2.
3.
4.
\DeclareIndexFieldFormat{sources}{%
    \ifcurrentfield{indextitle}{\index[sources]{#1@\emph{#1}}}%
    {\index[sources]{#1}}%
    }

La commande \DeclareIndexFieldFormat sert à déclarer la manière d'indexer les champs qui ne sont ni des listes ni des noms. La valeur #1 correspond à la valeur du champ à indexer. En deuxième ligne, nous vérifions grâce à la commande \ifcurrentfield, que le champ est indextitle : si c'est le cas, nous l'indexons dans l'index source en mettant l'emphase sur le titre pour l'affichage final. Sinon, nous l'indexons simplement dans l'index source.

On pourra consulter Indexation et renvoi.

18-C-e. Compilation et concaténation des index

Après la compilation XeLaTeX, nous obtenons un fichier sources.idx. Si vous l'ouvrez, vous constaterez que nous avons des entrées sous la forme :

 
Sélectionnez
1.
2.
3.
4.
\indexentry{Author}{page}
\indexentry{Titleindex@\emph {Titleindex}}{page}
\indexentry{Titleaddon}{page}
\indexentry{---}{page}

Nous souhaitons remplacer ces entrées par des entrées sous la forme :

 
Sélectionnez
1.
2.
\indexentry[sources]{Author@Author !Titleindex@
\emph {Titleindex} !Titleaddon@Titleaddon}{page}

L'auteur de ces lignes a développé un script permettant d'automatiser cette transformation. Par ailleurs ce script modifie également l'ordre de tri pour tenir compte des accents.

Pour utiliser ce script, il vous faut :

  • avoir le logiciel Python installé sur votre ordinateur. Ce logiciel est installé en standard sous Mac Os X et sur la plupart des distributions Linux, mais pas sous Windows(158) ;
  • télécharger le fichier https://github.com/maieul/indexation-sources/zipball/stable, le décompresser ;
  • mettre les fichiers index.py et roman.py dans le répertoire du fichier .idx ;
  • ouvrir le fichier index.py et modifier la ligne 8 en remplaçant xxx.idx par le nom du fichier à concaténer, en l'occurrence sources.idx ;
  • en ligne de commande (☞ Annexe CAnnexe C - Introduction à la ligne de commande) se rendre dans le répertoire, puis frapper l'entrée : python index.py.

Après cette concaténation nous devons compiler l'index « sources » en ligne de commande, via le script MakeIndex :

 
Sélectionnez
makeindex sources

18-C-f. Raffinement

Nous souhaitons n'indexer que les sources primaires. La solution la plus simple est d'utiliser dans le fichier .bib un champ personnalisé usera. Le package biblatex permet en effet à l'utilisateur d'utiliser librement un certain nombre de champs(159). Dans ce champ, mettre 1 si l'entrée est une source primaire, 2 si l'entrée est une source secondaire.

Il nous suffit de modifier la macro citeindex, en introduisant un test (ligne 3) sur la valeur du champ usera, grâce à la commande \iffieldequalstr.

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
\renewbibmacro{citeindex}{%
    \ifciteindex{%
    \iffieldequalstr{usera}{1}{%
        \indexnames[sources]{author}%
        \indexfield[sources]{indextitle}%
        \indexfield[sources]{titleaddon}%
        \sindex[sources]{---}%
        }{}}%
    {}}

18-C-g. Résumé des diverses compilations

Pour obtenir un index des sources primaires, une fois tous les fichiers mis en place, il nous faut donc procéder dans le terminal aux opérations suivantes :

  • xelatex xxx.tex ;
  • biber xxx ;
  • xelatex xxx.tex(160) ;
  • python index.py ;
  • makeindex sources ;
  • xelatex xxx.

Évidemment, il peut être fastidieux de se souvenir de l'ensemble de ces opérations, de les faire et refaire...
Il existe un programme nommé latexmk qui permet d'automatiser ce genre d'opération : nous en parlons en annexe (☞ Annexe DAnnexe D - Faciliter les compilations avec Latexmk).


précédentsommairesuivant
En réalité il est possible de la placer immédiatement après un élément numéroté pour y renvoyer, mais cela ne s'applique pas aux notes de bas de pages.
Jean-Pierre DRUCBERT, The minitoc package.
Notamment Jean-Pierre DRUCBERT, « Typesetting of the mini-tables », dans : The minitoc package.
L'utilisation concrète de ces signets dépend du lecteur PDF.
Je remercie ma sœur Enimie pour l'avoir rédigé en grande partie.
Le imakeidx remplace à la fois le makeindex et le splitindex, dont il reprend les commandes. Il est plus simple à utiliser, notamment pour la mise en page de l'index 25, et ne nécessite qu'une compilation, contrairement à ses prédécesseurs. Pour obtenir des informations sur les commandes d'indexation, il faut consulter les manuels de makeindex et de SplitIndex.
ÉGINHARD, Annales, Année 781, dans : Collection des mémoires relatifs à l'histoire de France, trad. par François GUIZOT, Paris : Brière, 1824, p. 23.
Maïeul ROUQUETTE, Pages en gras avec un lien hypertexte dans un index, URL : http://geekographie.maieul.net/59.
Nous en verrons un quatrième pour les index multiples, et un autre lorsque nous évoquerons le formatage de l'index. Pour une liste exhaustive, voir Claudio BECCARI et Enrico GREGORIO, Package imakeidx.
Il peut y avoir autant de prologues que d'index.
LEHMAN, « Package Options », op.Compilation et concaténation des index cit.
Nous renvoyons le lecteur à la documentation de biblatex : Philipp LEHMAN, « Formatting Directives », dans : The biblatex Package.
La liste de ces champs est fournie dans Philipp LEHMAN, « Custom Fields », dans : The biblatex Package.
Si un sommaire se situe en début d'ouvrage, il peut être nécessaire de compiler plusieurs fois.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Licence Creative Commons : Attribution - Partage dans les Mêmes Conditions 3.0 France (CC BY-SA 3.0 FR). Par contre, les logos Developpez.com, en-tête, pied de page, css, et look et feel de l'article sont Copyright © 2013 Developpez.com.