xindy, un outil d’indexation plus efficace que makeindex

lundi 13 avril 2015, par Maïeul
Suivre la vie du site RSS 2.0 Forum

La plupart des personnes qui débutent en LaTeX utilisent pour générer des index l’historique logiciel makeindex. Celui-ci a pourtant un remplaçant bien plus efficace, notamment pour nous autres francophones. J’ai nommé xindy.

Ce dernier est cependant rarement présenté dans les ouvrages d’introduction à LaTeX [1] – le mien n’échappe pas à ce travers. Or le fonctionnement par rapport à makeindex s’avère assez différent. C’est pourquoi j’ai décidé d’écrire plusieurs tutoriels sur l’utilisation de xindy, qui seront publiés au rythme d’un par jour.

Aujourd’hui donc, une présentation générale de xindy et de ses avantages sur makeindex.

Rappel : comment fonctionne l’indexation avec (Xe)LaTeX

L’indexation avec LaTeX fonctionne classiquement ainsi :

  • Une commande d’indexation, définie par un package ad hoc, est appelée par l’utilisateur. Souvent cette commande est tout simplement \index{<leterme>}. Les packages proposant de gérer plusieurs index proposent généralement des commandes de la forme \index[<lindex>]{<leterme>}.
  • Cette commande écrit dans un ou plusieurs fichiers .idx des lignes de la forme \indexentry{<leterme>}{<lemplacement>}. Si vous utilisez le package splitindex, la forme utilisée est <code>\indexentry[<lindex>{<leterme>}{<lemplacement>}.
  • Un programme externe à LaTeX transforme ce ou ces fichiers .idx en des fichiers .ind, qui regroupe les termes et indique les emplacements. Classiquement ce fichier contiendra quelque chose comme :
    \begin{theindex}
    
      \item <leterme>, <lemplacement>, <lemplacement2>
      \item <leterme2>, <lemplacement>
    \end{theindex}

    Le programme qui procède à cette transformation est généralement makeindex, mais il peut aussi s’agir de splitindex (qui lit les fichiers .idx produit par le package homonyme) ou xindy. Il utilise pour ce faire des règles qui lui sont propres et d’autres qui dépendent de fichiers spécifiques. Dans le cas de makeindex, il s’agit du fichier de style .ist. Dans le cas de xindy</code, il s'agit de fichiers de configuration <code>.xdy.

  • lors de la seconde lecture du fichier .tex par (Xe)LaTeX, la commande \printindex, définie par le package d’indexation, va lire le fichier .ind de l’index demandé et l’interpréter. Le fichier .ind ne contenant que du code TeX, son interprétation suit les règles classiques de compréhension du code TeX.

Ainsi, il y a trois étapes pour générer un index avec LaTeX :

  • exécution de (Xe)LaTeX qui écrit le(s) fichier(s) .idx
  • exécution du logiciel d’indexation, qui transforme le(s) fichier(s) d’indexation brut(s) (.idx) en fichier(s) d’indexation formaté(s) (.ind).
  • seconde exécution de (Xe)LaTeX qui lit le(s) fichier(s) .ind.

Cependant si vous utilisez le package imakeidx ou son successeur indextools, celui ci utilise une des possibilités des moteurs TeX modernes : la possibilité de lancer automatiquement un package. C’est pourquoi vous n’avez généralement pas à lancer makeindex et ne faites par conséquences qu’un compilation (Xe)LaTeX.

Avantages de xindy sur makeindex

Le logiciel makeindex est le logiciel historique [2].

Son principal défaut, qui à lui seul justifie de passer à xindy, est de fonctionne uniquement en ASCII et d’ignorer l’Unicode, ce qui s’avère particulièrement problématique si on rédige un document dans une autre langue que l’anglais.

Ainsi un fichier .idx contenant les lignes suivantes :

\indexentry{Souris}{1}
\indexentry{Chat}{1}
\indexentry{Éléphant}{1}

Sera transformé en fichier .ind contenant les lignes suivantes

  \item Chat, 1

  \indexspace

  \item Souris, 1

  \indexspace

  \item Éléphant, 1

Ce qui ne respecte visiblement pas l’ordre alphabétique. La solution classique est alors d’utiliser le @ pour forcer l’ordre de tri.

Ainsi un fichier contenant .idx

\indexentry{Chat}{1}
\indexentry{Elephant@Éléphant}{1}
\indexentry{Souris}{1}

sera transformé par makeindex en fichier .ind contenant :

  \item Chat, 1

  \indexspace

  \item Éléphant, 1

  \indexspace

  \item Souris, 1

Cette solution fonctionne, mais s’avère peut pratique à l’usage, notamment si on veut créer des commandes pour automatisation l’indexation de certains termes.

Avec xindy, ce problème ne se pose plus. Pour peux qu’on lui fournisse les bon paramètres, un fichier .idx contenant

\indexentry{Chat}{1}
\indexentry{Éléphant}{1}
\indexentry{Souris}{1}
  \item Chat, 1

  \indexspace

  \item Éléphant, 1

  \indexspace

  \item Souris, 1

Mais xindy propose bien plus que cela. Les prochains articles expliqueront comment se servir de certains fonctionnalités comme :

  • la création d’un ordre d’indexation personnalisé, par exemple pour trier les empereurs par date de règne, sans passer par l’astuce du @.
  • la gestion des numéros de renvois contenant des sous numéros, par exemple sous la forme page, ligne.
  • d’autres que je découvrirait au fur et à mesure

Il y a cependant quelques limites à xindy, la première étant une moindre compatibilité avec le package hyperref. Mais nous y viendrons en temps voulu.

texindy, un xindy spécial LaTeX

Une dernière précision s’impose avant de passer aux choses sérieux. Contrairement à makeindex qui transforme des fichiers utilisant une syntaxe LaTeX en des fichiers utilisant une syntaxe LaTeX, xindy peut travailler avec des fichiers ayant une autre syntaxe, par exemple du xml.

C’est pourquoi il existe une version spécifique de xindy, nommée texxindy qui possèdent des réglages par défaut spécifiques aux fichiers utilisant une syntaxe .tex.

Notes

[1J’exclus le LaTeX Companion qu’on ne peut raisonnablement considérer comme un ouvrage d’introduction.

[2il est d’ailleurs le seul à être livré avec la distribution TeX pour Windows Miktex

Vos commentaires

  • Le 13 avril 2015 à 09:40, par Stéphane P. En réponse à : xindy, un outil d’indexation plus efficace que makeindex

    Youpi, merci pour ce nouvel article qui s’annonce fort utile !

  • Le 13 avril 2015 à 11:35, par Florent En réponse à : xindy, un outil d’indexation plus efficace que makeindex

    Un logiciel qui a l’air effectivement prometteur... mais qui n’est pas inclus dans les packages de ma distrib’ (Debian Jessie) avec des dépendances suffisamment profondes pour rendre l’installation périlleuse.

    Sinon, pour les index d’auteurs avec des caractères accentués (option indexing=true de Biblatex, ma seule utilisation de makeindex), c’est dans les faits assez marginal même si cela a dû causer la perte de l’accent pour Claude Évin...

    En tout cas, je suivrais avec attention tes articles sur le sujet...

  • Le 13 avril 2015 à 11:38, par Maïeul En réponse à : xindy, un outil d’indexation plus efficace que makeindex

    il est inclus dans TexLive 2014. Après j’y peux rien si tu utilise des distributions Linux qui n’ont pas les dernières versions de TeXLive ;-)

  • Le 13 avril 2015 à 18:43, par Robert Alessi En réponse à : xindy, un outil d’indexation plus efficace que makeindex

    De la part d’un utilisateur de Linux depuis des temps immémoriaux : installez, utilisez et mettez à jour texlive et uniquement texlive. Dans quelques semaines, vous pourrez le faire avec la version 2015. C’est le moment.

  • Le 14 juillet 2015 à 16:07, par Joseph-tux En réponse à : xindy, un outil d’indexation plus efficace que makeindex

    Florent, sur ma Jessie je trouve :

    $locate xindy /home/aide-memoire/LaTeX_et_PDF/packages_extensions/glossary/xindy /home/aide-memoire/LaTeX_et_PDF/packages_extensions/glossary/xindy/alphabets-doc.pdf /home/aide-memoire/LaTeX_et_PDF/packages_extensions/glossary/xindy/makeindex4.pdf /home/aide-memoire/LaTeX_et_PDF/packages_extensions/glossary/xindy/tex2xindy.pdf /home/aide-memoire/LaTeX_et_PDF/packages_extensions/glossary/xindy/texindy.pdf /home/aide-memoire/LaTeX_et_PDF/packages_extensions/glossary/xindy/xindy.pdf

    Mon sources.list est le suivant :

    deb http://ftp.fr.debian.org/debian/ jessie main contrib non-free deb http://security.debian.org/ jessie/updates main contrib non-free deb http://ftp.fr.debian.org/debian/ jessie-updates main contrib non-free deb http://ftp.fr.debian.org/debian/ jessie-backports main contrib non-free deb http://repos.fds-team.de/stable/debian/ jessie main

    La version de TexLive est : 2014.20141024-2

    Il est possible que tu ais à mettre à jour ta sources.list ?

  • Le 17 juillet 2015 à 13:11, par Florent En réponse à : xindy, un outil d’indexation plus efficace que makeindex

    Bonjour,

    Merci de ta réponse. J’ai bien regardé ma sources.list et mis à jour mes paquets. xindy n’est pas dans les dépôts . Voir https://tracker.debian.org/pkg/xindy. Curieusement ma version de TexLive est bien 2015.

    En revanche, ce que tu affiches avec locate semble plutôt renvoyer à de la documentation présent sous ton /home (cf : des fichiers *.pdf et non l’exécutable).

    Bref, à voir et attendre...

  • Le 29 juillet 2015 à 20:44, par Joseph-tux En réponse à : xindy, un outil d’indexation plus efficace que makeindex

    Désolé, je suis passé un peu vite. Effectivement, n’étaient présents dans Jessie que des fichiers de documentation, et non xindy. en outre, ils semblent même ne plus exister aujourd’hui. Avec mes excuses pour ces faux espoirs.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Acheter XeLaTeX appliqué aux sciences humaines

À propos

Titulaire d’un doctorat en théologie et d’un doctorat en histoire, sous la direction conjointe de Frédéric Amsler et d’Élisabeth_Malamut, je commence à partir du 1er août 2017 un travail d’édition critique des Actes de Barnabé.

Dans le cadre de la rédaction de mon mémoire de master puis de ma thèse de doctorat, j’ai été emmené à utiliser LaTeX, et j’ai donc décider de partager mes techniques. En effet, au cours de mes premiers apprentissages, j’ai découvert que les ressources indiquant les outils pour l’utilisation de LaTeX en sciences humaines étaient rares. Ceci m’a conduit à maintenir ou créer plusieurs packages LaTeX et à donner plusieurs formations.

J’ai reçu en 2018 le prix DANTE e.V pour mon travail autour de LaTeX, en particulier autour de reledmac et reledpar.

Par ailleurs, je suis membre actif de la communauté SPIP, au sein de laquelle j’administre le site Spip-Contrib. Je propose sur ce site quelques notes sur SPIP, en général à destination de webmestre.

Il m’arrive également de faire un petit peu de Python, de temps en temps.

Enfin, je tiens un blog de réflexions politiques et religieuses.

Maïeul