Faire un index avec MakeIndex

Vous disposez d'un fichier tex qui contient votre maîtrise, votre autobiographie, ce que vous voulez. Pour faciliter la vie du lecteur de votre document final, vous désirez indexer les termes clefs de votre texte. Le package MakeIndex vous permet de créer un index. Tout au long de ce cours nous allons utiliser un petit texte d'exemple, tiré des Mémoires du duc de Luynes (vous pouvez le télécharger : exemple.txt) :

À la mort de M. le duc de Bourgogne, lorsqu'il fut question d'aller
jeter de l'eau bénite, le feu Roi décida que si les princes lorrains
s'y presenteroient, qu'eux ni les ducs n'en jetteroient ; mais que si
MM. de Rohan et de Bouillon y étoient, les ducs jetteroient de l'eau
bénite avant eux : ce qui arriva effectivement ; mais MM. de Rohan et
de Bouillon, voyant les ducs passer avant eux, s'en allèrent. Ce qui
avoit été décidé en faveur de MM. les ducs fut écrit sur le registre
de M. de Dreux ; mais deux ans après, les représentations de Mme de
Maintenon déterminèrent le Roi à faire un changement et à ordonner à
M. de Dreux que cet article seroit rayé sur le registre. Il fut mis en
marge que le Roi n'avoit jamais voulu décider entre les ducs et MM. de
Rohan et de Bouillon.  

Avant toute chose

Commencez par indiquer dans le préambule de votre document que vous voulez le charger (attention, il faut bien écrire makeidx et non makeindex) :

\usepackage{makeidx}

Ensuite, dans la suite du préambule, mettez la commande

\makeindex

qui demande à MakeIndex de se mettre au travail. Enfin, placez la commande

\printindex

à l'endroit où vous désirez placer l'index (à la fin, normalement).

Les bases

Pour obtenir une entrée dans l'index, il faut l'indiquer par la commande \index{mon_entree}. Lors d'une première compilation, LaTeX repérera tous les \index et écrira pour chacun d'entre eux une entrée dans exemple.idx. Ensuite il faudra faire une deuxième compilation à l'aide de la commande makeindex :

makeindex exemple.idx

MakeIndex interprétera les entrées de exemple.idx et les formatera, générant deux nouveaux fichier, exemple.ilg qui contient les messages de compilation de MakeIndex, et exemple.ind qui contient l'index formaté. Il faut ensuite une troisième compilation, avec latex, pour que exemple.ind soit intégré à exemple.tex et produise l'index.

Important : il faut préciser à chaque fois à makeindex ce que vous voulez indexer, il ne le fait pas automatiquement.

Pourquoi ? Bien sûr, vous préfereriez avoir à ne donner le mot à indexer qu'une seule fois et laisser l'ordinateur faire le reste, mais cette procédure manque de souplesse. Admettons que vous vouliez créer une entrée d'index « Louis XIV ». Un indexage automatique vous permettrait bien sûr de recenser toutes les occurrences de « Louis XIV ».

Mais vous aimeriez sans doute aussi recenser les pages ou vous n'avez pas écrit textuellement « Louis XIV », mais où vous en avez parlé sous les périphrases « le roi de France », « le monarque », voire un bête « il ». Ce que vous permet l'apposition à la main de commandes \index{Louis XIV} après chaque mot ou expression que vous voulez voir référencé.

Récapitulatif

Il faut en tout trois compilations pour que l'index soit effectif :

latex exemple.tex ; makeindex exemple.idx ; latex exemple.tex

Spécifier les entrées de l'index

La procédure de base est la suivante : vous voulez indexer, dans le texte d'exemple, les ducs et pairs. Vous placez donc, après l'expression à référencer, un \index{} :

À la mort de M. le duc de Bourgogne, lorsqu'il fut question d'aller
jeter de l'eau bénite, le feu Roi décida que si les princes lorrains
s'y presenteroient, qu'eux ni les ducs\index{Ducs et pairs} n'en
jetteroient (...)
Piège à ... prenez garde à l'environnement dans lequel vous êtes ! Un \index{Louis XIV} dans du texte « normal » et un \index{Louis XIV} dans dans une note en bas de page, ou dans un tableau, ne produiront pas une entrée avec deux références, mais deux entrées identiques !

Pour remédier à ce problème, il vous suffit de placer votre \index{} juste avant ou juste après l'environnement dans lequel se trouve l'expression à référencer.

Caractères accentués

MakeIndex n'a pas été conçu pour les langues possédant des accents : dès qu'un mot contenant des caractères accentués se trouvera dans votre \index{}, il le classera au début des mots commençant par cette même lettre... Il vous faut donc indiquer vous-même à MakeIndex où classer la référence : on utilise pour cela une arobase (@).

\index{Princes etrangers@Princes étrangers}

veut dire que vous demandez à MakeIndex de classer « Princes étrangers » comme s'il n'y avait pas d'accent dans l'expression.

À noter : Vous pouvez utiliser cette technique pour classer par exemple des membres d'une même famille dans l'ordre chronologique, et non pas par ordre alphabétique de leur prénom :

\index{Guise1@Guise, Henri de Lorraine, duc de}
\index{Guise2@Guise, Charles de Lorraine, duc de}

Vous pouvez également l'utiliser pour formater à votre goût l'aspect d'une entrée d'index. Ainsi,

\index{Bourgogne@\textsc{Bourgogne}, Louis de France, duc de}

vous permet d'avoir le nom de famille en petites majuscules. Vous pouvez évidemment remplacer \textsc{} par n'importe quel type de fonte (italique, gras, penché...).

Entrées et sous-entrées

Pour produire une sous-entrée, vous devez d'abord indiquer l'entrée principale puis la sous-entrée, séparée par un point d'exclamation. Ainsi, si l'on reprend notre exemple, vous voulez faire du mot « registres » une sous-entrée de « service des Cérémonies » :

\index{Ceremonies@Cérémonies, service de!registres}

Vous pouvez faire des sous-sous-entrées. MakeIndex et LaTeX ne supportent que trois niveaux d'indexation : vous ne pouvez pas avoir de sous-sous-sous-entrées.

Références croisées

MakeIndex vous permet de faire des références croisées, qui ne renvoient pas à une page, mais à une autre entrée. Ainsi, dans notre exemple, on veut que le lecteur qui cherche une entrée à Bouillon soit renvoyé à « princes étrangers » :

 \index{Bouillon|see{Princes étrangers}}

vous donnera :

Bouillon, voir Princes étrangers

La traduction de |see{} dépend du package de Babel que vous utilisez.

Formatage de l'index

Par défaut, l'index ressemble à ceci (c'est le résultat de exemple.tex) :

Un index

Le texte s'étend sur deux colonnes. Si vous voulez modifier le formatage de l'index, il vous faudra créer un fichier .ist (perso.ist, par exemple) contenant vos personnalisations. Pour utiliser ce fichier .ist, il faut le donner en option à MakeIndex pendant la deuxième compilation :

makeindex -s perso.ist exemple.idx

Ajouter une lettre entre chaque groupe

Il faut insérer dans votre perso.ist les lignes suivantes :

heading_prefix "{\\bfseries\\hfil "
heading_suffix "\\hfil}\\nopagebreak\n"
headings_flag 1
C'est joli

Ajouter des lignes de points

Il faut insérer dans votre perso.ist les lignes suivantes :

delim_0 "\\dotfill"
delim_1 "\\dotfill"
delim_2 "\\dotfill"
Encore plus joli
Auteurs : Marie-Lan Nguyen (2000) et François-Xavier Coudert (2002). Dernière modification : le .