Winnt is not NT

Les index sous LaTeX et leur personnalisation

Posté le 19/05/2014

Utilisant depuis un moment déjà LaTeX, j’ai eu besoin d’utiliser les index afin de faciliter les recherches dans un document qui prenait de l’ampleur. Quelle ne fut pas ma surprise de voir la tête des index par défaut qui ne sont guère attirants.

Je me suis donc plongé dans la documentation afin de voir ce que l’on pouvait faire pour obtenir des index plus attrayant.

Cet article devrai vous permettre de personnaliser vos index pas à pas. Je ne ferai pas une présentation de LaTeX, cet article présupposant que vous connaissez un minimum celui-ci et son fonctionnement.

Création d’un index

Dans LaTeX générer un index est une chose très simple. Trois commandes sont principalement utilisées :

La commande \printindex peut indifféremment être placée en début ou en fin de document, même si on trouve plus généralement l’index en fin de document, LaTeX remplaçant \printindex par l’index formaté.

Utilisation de la commande index

Les caractères accentués

Les caractères accentués ne sont pas gérés par la commande \makeindex.

Aussi pour correctement classer l’entrée dans l’index, il convient de définir l’index de la manière suivante : \index{sans_accents@avec_accents}

Dans l’exemple qui suit le mot « accentué » sera classé comme le mot « accentue ».

Exemple :

\index{accentue@accentué}

Entrées et sous-entrées

Pour mémoire, la commande \makeindex ne gère que 3 niveaux d’entrées. Les différents niveaux d’entrée sont séparés par le caractère « ! » (point d’exclamation).

Résultat de la compilation :

Renvoi à une autre entrée

Il est possible de faire référence à une autres entrée de l’index pour un terme indexé. Cela se fait de la manière suivante : \index{Thermes|see{Bains}}.

Le caractère « | » est obtenu par la combinaison de touches « Alt Gr + 6 » sur un clavier azerty français.

Exemple :

\index{Thermes|see{Bains}} donnera dans l’index Thermes, voir Bains.

Génération d’un premier index

L’exemple ci-dessous montre l’utilisation des trois commandes évoquées plus haut, ainsi que leur ordre d’apparition dans le document LaTeX.

Code source 1 : Fichier exemple.tex

\documentclass[a4paper,12pt,francais]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lipsum}
\usepackage[francais]{babel}
\usepackage{makeidx}%création d’index
\makeindex
\begin{document}
\lipsum[1]\index{Lipsum1}
\lipsum[2]\index{Lipsum2}
\printindex
\end{document}

Pour lancer la compilation du fichier exemple.tex on utilise les commandes suivantes :

Commandes de compilation :

LaTeX (ou pdflatex)
exemple.tex
makeindex exemple.idx
LaTeX (ou pdflatex) exemple.tex

L’usage de la commande \makeindex dans le préambule du document LaTeX générera deux fichiers nommés dans notre cas exemple.ilg et exemple.ind. Le fichier exemple.idx étant généré par la commande latex (ou pdflatex). Le fichier exemple.ilg contient les logs de compilation, exemple.ind l’index formaté qui sera inclus dans le document final par la commande \printindex. Le fichier exemple.idx contenant les entrées de l’index.

Résultat de la compilation :

Rien de très sexy, il faut bien l’avouer.

Pour y remédier nous allons personnaliser notre index à l’aide d’un fichier de gabarit que nous nommerons perso.ist et qui sera sauvegardé dans le même répertoire que notre fichier source LaTeX.

Personnalisation du fichier « perso.ist »

Actuellement, notre fichier perso.ist est vide.

Nous allons petit à petit, dans cette partie, le remplir afin d’obtenir un index beaucoup plus agréable.

Le fichier exemple.tex

Nous allons commencer par apporter quelques modification à notre fichier exemple.tex afin d’avoir plus de termes à indexer et dans une plus grande gamme.

Voici le fichier exemple.tex qui nous servira pour la suite :

Code source 2: Fichier exemple.tex

\documentclass[a4paper,10pt,francais]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}
\usepackage{color}%définitions des couleurs
\usepackage[dvipsnames,x11names,svgnames,table]{xcolor}%texte et tableau en couleur
\usepackage{makeidx}%création d’index
\usepackage{lipsum}
\makeindex
\begin{document}
\lipsum[1]\index{premier verset}\index{verset!premier}
\lipsum[2]\index{second verset}\index{verset!second}
\lipsum[3]\index{troisieme verset@troisièmeverset}\index{verset!troisieme@troisième}
\printindex
\end{document}

Résultat de la compilation :

Comme vous pouvez le voir les termes sont indexés deux fois. Une fois avec une entrée simple et une fois avec une sous-entrée. Ceci est bien sûr volontaire. Cela nous permettra de mettre en place et comprendre la mise en forme des sous-entrées dans le gabarit de l’index. 2.2 Faire apparaître les en-têtes de groupe de l’index

Pour cela, nous allons ajouter une ligne à notre fichier perso.ist.

Code source 3 : Fichier perso.ist

headings_flag 1

La valeur de headings_flag peut-être -1, 0 ou 1 selon le résultat voulu.

Le fait d’utiliser un fichier ist personnalisé modifie notre chaîne de compilation de la manière suivante :

Commandes de compilation :

LaTeX (ou pdflatex) exemple.tex
makeindex exemple.idx -s perso.ist
LaTeX (ou pdflatex) exemple.tex

L’ajout de -s perso.ist à la fin de la commande makeindex indique ou se situe notre fichier personnalisé ainsi que son nom.

Résultat de la compilation :

Améliorer les en-têtes de groupe de l’index

Les en-têtes de groupe que nous avons ne sont pas particulièrement attirants. Nous allons améliorer leur apparence ici.

Pour cela nous allons insérer les lignes ci-dessous dans notre fichier perso.ist.

Code source 4 : Fichier perso.ist

heading_prefix "{\\bfseries\\hfil"
heading_suffix "\\hfil}\\nopagebreak\n"

Une petite explication s’impose.

Les deux lignes ci-dessus composent une suite de commande LaTeX qui seront exécutées avant (pour heading_prefix) et après (pour heading_suffix) les en-têtes de groupe.

Il faut bien comprendre que ces deux lignes de commandes s’agrègent pour n’en former qu’une lors de la mise en forme de l’index.

Il est aussi important de noter que :

Ainsi lors de la mise en forme de l’index elles donnent la ligne suivante :

{\bfseries\hfil<Lettre d’en-tête de groupe>\hfil}\nopagebreak

Explications

Les diverses commandes utilisées ci-dessus sont normalement connues d’un utilisateur de LaTeX.

Exemple avec la lettre T minuscule :

{\bfseries\hfil t\hfil}\nopagebreak

Exemple avec la lettre T majuscule :

{\bfseries\hfil T\hfil}\nopagebreak

Il est possible d’ouvrir un groupe dans heading_prefix et de le fermer dans heading_suffix. Toutefois, attention à bien le fermer sinon des erreurs de compilation apparaîtront.

La façon la plus simple est, à mon avis, de concevoir la ligne de commande entière puis de la couper une fois qu’elle est fonctionnelle et de l’insérer dans le fichier ist personnalisé.

Exemples divers

Code source 5 : Exemple d’en-têtes de groupe encadrés

heading_prefix"{\\bfseries\\hfil\\fbox{"
heading_suffix"}\\hfil}\\nopagebreak\n"

Code source 6 : Exemple d’en-têtes de groupe en bleu (nécessite les packages xcolor et color)

heading_prefix"{\\bfseries\\hfil\\textcolor{blue}{"
heading_suffix"}\\hfil}\\nopagebreak\n"

Code source 7 : Exemple d’en-têtes de groupe en bleu et encadrés (nécessite les packages xcolor et color)

heading_prefix"{\\bfseries\\hfil\\fbox{\\textcolor{blue}{"
heading_suffix"}}\\hfil}\\nopagebreak\n"

Code source 8 : Exemple d’en-têtes de groupe bleu, encadrés de rouge sur fond gris (nécessite les packages xcolor et color)

heading_prefix"{\\bfseries\\hfil\\fcolorbox{red}{lightgray}{\\textcolor{blue}{"
heading_suffix"}}\\hfil}\\nopagebreak\n"

Et pour les nombres et les symboles ?

Pour les nombres et les symboles les commandes sont les suivantes :

En résumé :

Comme par défaut le texte est en anglais, nous allons le personnaliser en français en rajoutant les lignes suivantes à notre fichier perso.ist.

Code source 9 : Fichier perso.ist

symhead_positive "Symboles"
symhead_negative "symboles"
numhead_positive "Nombres"
numhead_negative "nombres"

En-têtes encadrésEn-têtes bleuEn-têtes bleu et encadrésEn-têtes bleu, encadrés de rouge sur fond gris

Le résultat s’il est déjà plus sympathique a encore besoin d’améliorations. En effet, notre en-tête de groupe est pratiquement collé à la ligne qui le suit. Pour corriger ce petit défaut, il suffit de modifier légèrement la ligne heading_suffix de notre fichier perso.ist en ajoutant l’instruction \\vspace*{3ex} entre \\hfil} et \\nopagebreak\n ce qui aérera notre index.

Code source 10 : Fichier perso.ist

heading_suffix "\\hfil}\\vspace>*{3ex}\\nopagebreak\n"

Nous rajoutons aussi la ligne suivante à notre fichier exemple.tex.

Code source 11 : Fichier exemple.tex

\lipsum[4]\index{4}

Une fois compilé on obtient le résultat ci-dessous. C’est déjà beaucoup plus agréable non ?

Résultat de la compilation :

Améliorer la présentation des termes indexés et des numéros de pages

Les points de suite

Personnellement, j’aime bien qu’entre le terme indexé et les numéros de pages, il y ait des points de suite. Je trouve que cela facilite la lecture.

Je vais donc vous montrer comment obtenir cela.

La liste qui suit vous permettra de comprendre chaque paramètre.

Fort de ces informations, il ne reste plus qu’à insérer les trois lignes ci-dessous dans notre fichier perso.ist et lancer une compilation.

Code source 12 : Fichier perso.ist

delim_0 "\\hspace{6pt}\\dotfill\\hspace{6pt}"
delim_1"\\hspace{6pt}\\dotfill\\hspace{6pt}"
delim_2"\\hspace{6pt}\\dotfill\\hspace{6pt}"

Résultat de la compilation :

Joli résultat. À un détail près. Notre index semble ne prendre que la moitié de la largeur de la page. Rien de bien grave, le style de page utilisé pour l’index est le style plain en mode deux colonnes (personnellement, j’aime bien en deux colonnes). Peut-être avec le package multicol est-il possible de passer en mode une ou trois colonnes. Je n’est pas testé. Si quelqu’un sait comment faire je suis preneur de l’information.

Si vous souhaitez redéfinir, l’en-tête ou le pied de page, le package fancyhdr vous permettra de le faire sans difficultés.

Les termes indexés

La liste ci-dessous fournie toutes les informations permettant de mettre en forme les termes indexés.

Afin de facilité la compréhension, nous allons ajouter les deux lignes suivantes dans notre fichier perso.ist :

Code source 13 : Fichier perso.ist

item_0"\n\\item\\bfseries{"
item_x1"}\\normalfont\n\\subitem"

Nous modifions aussi la ligne suivante :

Code source 14 : Fichier perso.ist

delim_0"}\\hspace{6pt}\\dotfill\\hspace{6pt}"

Avec ces modifications, les termes indexés de premier niveau seront en gras tandis que les termes des seconds et troisièmes niveaux seront en graisse normale.

Voici le résultat de la compilation prenant en compte les modifications précédentes.

Résultat de la compilation :

Code source 15 : Fichier exemple.ist final

heading_prefix"{\\bfseries\\hfil\\fcolorbox{red}{lightgray}{\\textcolor{blue}{"
heading_suffix"}}\\hfil}\\vspace>*{3ex}\\nopagebreak\n"
headings_flag 1
symhead_positive "Symboles"
symhead_negative "symboles"
numhead_positive "Nombres"
numhead_negative "nombres"
delim_0 "}\\hspace{6pt}\\dotfill\\hspace{6pt}"
delim_1 "\\hspace{5pt}\\dotfill\\hspace{5pt}"
delim_2 "\\hspace{4pt}\\dotfill\\hspace{4pt}"
item_0 "\n\\item{\\bfseries"
item_x1 "}\n\\normalfont\\subitem"

Un index c’est bien, plusieurs c’est mieux

Il peut parfois être pratique d’avoir une indexation par thème. Le package index permet de gérer des index multiples ce qui permet une indexation par thème très facile.

Voici la marche à suivre :

Voici la définition d’un nouvel index qui regroupera la liste des auteurs apparaissant dans un document :

Code source 16 : Fichier exemple.tex

\usepackage{makeidx}
\usepackage{index}
\newindex{aut}{otx}{otd}{Liste des auteurs}

Comme le montre l’extrait de notre fichier exemple.tex ci-dessus le package index est appelé après le package makeidx puis suit la définition d’un nouvel index.

Cet ordre est indispensable, le package index redéfinissant la commande index du package makeidx ainsi que la commande \printindex.

La commande \newindex est composée de 4 champs :

Code source 17 : Fichier exemple.tex final

\documentclass[a4paper,10pt,francais]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}
\usepackage{color}%définitions des couleurs
\usepackage[dvipsnames,x11names,svgnames,table]{xcolor}%texte et tableau en couleur
\usepackage{makeidx}%création d’index
\usepackage{index}%création d’index multiples
\newindex{aut}{otx}{otd}{Liste des auteurs}%définition d’un nouvel index personnalisé
\usepackage{lipsum}
\makeindex
\begin{document}
\lipsum[1]\index{premier verset}\index{verset!premier}
\lipsum[2]\index{second verset}\index{verset!second}
\lipsum[3]\index{troisieme verset@troisième verset}\index{verset!troisieme@troisième}
\lipsum[4]\index{4}\index[aut]{moimoi}
\printindex
\printindex[aut]
\end{document}

Pour pouvoir compiler notre index personnalisé ainsi que notre index habituel voici la chaîne de compilation nécessaire :

LaTeX (ou pdflatex) exemple.tex
makeindex -s perso.ist exemple.idx
makeindex exemple.otx -t exemple.otg -s perso.ist -o exemple.otd
LaTeX (ou pdflatex) exemple.tex

Le fichier exemple.otg (non définit dans la déclaration du nouvel index) n’est autre que le fichier de log de la création de l’index (très utile à lire si la génération de l’index ne fonctionne pas bien).

Voici le résultat de la compilation prenant en compte les modifications précédentes.

Résultat de la compilation :

Conclusion

Comme vous avez pu le voir au cours de cet article, personnaliser l’apparence de son index n’est pas particulièrement difficile une fois que l’on a compris comment faire. Toutefois, il est prudent d’avancer pas à pas et d’effectuer des compilations régulières afin de juger du résultat obtenu et si celui-ci correspond bien à nos attentes.

Commentaires

comments powered by Disqus