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.
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).
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.
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é.
Il faut en tout trois compilations pour que l'index soit effectif :
latex exemple.tex makeindex exemple.idx latex exemple.tex
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 (...)
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 (@
) et le code
\index{sans_accents@avec_accents}
.
Par exemple,
\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é...).
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.
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.
Par défaut, l'index ressemble à ceci (c'est le résultat de
exemple.tex
) :
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
Il faut insérer dans votre perso.ist les lignes suivantes :
heading_prefix "{\\bfseries\\hfil " heading_suffix "\\hfil}\\nopagebreak\n" headings_flag 1
Il faut insérer dans votre perso.ist les lignes suivantes :
delim_0 "\\dotfill" delim_1 "\\dotfill" delim_2 "\\dotfill"