Tri personnalisé des entrées avec xindy

lundi 20 avril 2015, mise à jour dimanche 19 avril 2015, par Maïeul
Suivre la vie du site RSS 2.0 Forum

Il arrive fréquemment que l’on souhaite qu’un index n’utilise pas l’ordre alphabétique. Par exemple si on consacre un index à des détenteurs de pouvoir (empereurs, rois, présidents, papes) on peut souhaiter classer les noms par ordre de régne/de mandature/de pontificat. Si makeindex permet déjà de faire cela, xindy permet de simplifier les choses.

Exemple

Prenons un exemple simple :

  1. % À compiler avec XeLaTeX
  2. \documentclass{article}
  3.  
  4. \usepackage{fontspec}
  5. \usepackage{polyglossia}
  6. \setmainlanguage{french}
  7. \setmainfont{Linux Libertine O}
  8. \usepackage{setspace}
  9. \onehalfspacing
  10. \usepackage[xindy]{indextools}%On précise qu'on veut utiliser xindy
  11. \makeindex[name=animal,title=Animaux,columnseprule]
  12.  
  13. % Personnaliser l'apparence de lettergroup
  14. \newcommand{\lettergroup}[1]{%
  15. {\centering\large---\emph{#1}---\par}%
  16. }
  17. \apptocmd{\subitem}{$\rightarrow$\,}{}{}
  18.  
  19.  
  20. \begin{document}
  21.  
  22.  
  23. On va parler de
  24. chats sauvages\index[animal]{chat!sauvage} et domestiques\index[animal]{chat!domestique},
  25. de tortues marines\index[animal]{tortue!marine} et terrestres\index[animal]{tortue!terrestre},
  26. d'élèphant d'Asie\index[animal]{élèphant!d'Asie} et d'Afrique\index[animal]{élèphant!d'Afrique},
  27. et soyons fou, d'élans de Sibérie\index[animal]{élan!de Sibérie} et d'Amérique\index[animal]{élan!d'Amérique}.
  28.  
  29.  
  30. On va parler sur la page suivante des même animaux. C'est à dire : de
  31. chats sauvages\index[animal]{chat!sauvage} et domestiques\index[animal]{chat!domestique},
  32. de tortues marines\index[animal]{tortue!marine} et terrestres\index[animal]{tortue!terrestre},
  33. d'élèphant d'Asie\index[animal]{élèphant!d'Asie} et d'Afrique\index[animal]{élèphant!d'Afrique},
  34. et soyons fou, d'élans de Sibérie\index[animal]{élan!de Sibérie} et d'Amérique\index[animal]{élan!d'Amérique}.
  35.  
  36.  
  37. Et pour la bonne cause, on va aussi parler de chats sauvages\index[animal]{chat!sauvage} qui se disputent avec les chiens errants\index[animal]{chien!errant}.
  38. \printindex[animal]
  39. \end{document}

Télécharger

En utilisant le fichier de configuration .xdy des précédents tutoriels, on obtient l’index suivant.

Tri des empereurs par ordre alphabétique

Les empereurs sont classés par ordre alphabétique, ce qui est parfaitement normal, puisqu’on n’a pas demandé un autre tri.

Première méthode : l’arobase

La première méthode à laquelle on pense spontanément est l’utilisation du @, pour indiquer pour chaque entrée un ordre de tri personnalisé.

  1. Les empereurs julio-claudiens sont Auguste\index[emp]{001@Auguste}, Tibère\index[emp]{002@Tibère}, Caligula\index[emp]{003@Caligula}, Claude\index[emp]{004@Claude} et Néron\index[emp]{005@Néron}.

Ceci permet donc de trier les empereurs par ordre de règne. Et fonctionne parfaitement comme le montre l’exemple ci-dessous.

Tri des empereurs par ordre de règne

Deuxième méthode : le fichier .xdy

Seulement cette méthode implique d’indiquer systématiquement le numéro d’ordre de l’empereur lors de l’indexation. Ce qui, outre ralentir l’écriture, est source d’erreur. Quid si je frappe par erreur \index[emp]002@Caligula ?

Et bien j’aurai deux entrées « Caligula », donc une situé entre « Auguste » et « Tibère ». Certes ce genre d’erreur ne devrait pas arriver ... mais autant utiliser les potentialités de xindy en indiquant dans le fichier .xdy l’ordre des empereurs.

Pour ce faire mettre simple les lignes suivantes

  1. (merge-rule "Auguste" "001" :string)
  2. (merge-rule "Tibère" "002" :string)
  3. (merge-rule "Caligula" "003" :string)
  4. (merge-rule "Claude" "004" :string)
  5. (merge-rule "Néron" "005" :string)

Télécharger

Ceci signifie simplement que l’entrée « Auguste » sera transformée en une entrée « 001 » avant que xindy ne commence à analyser les règles de tri, que l’entrée « Tibère » sera transformée en « 002 » etc.

Notez deux choses importantes :

  • la transformation ne concerne que la valeur utilisée pour le tri, pas la valeur utilisée à l’affichage
  • la transformation est opérée avant que ne soit appliquée les règles de tri propre à une langue. Cela n’a aucune importance dans le cas d’espèce, mais pourrait être pertinent si vous vous vouliez vous servir de ce genre de règle pour unifier des présentation, comme nous le verrons dans un autre article.

Avec ce fichier .xdy, mettre dans son fichier .tex directement

  1. Les empereurs julio-claudiens sont Auguste\index[emp]{Auguste}, Tibère\index[emp]{Tibère}, Caligula\index[emp]{Caligula}, Claude\index[emp]{Claude} et Néron\index[emp]{Néron}.

nous produit quand même un index trié par ordre de règne. Mais cette fois, on s’allège la rédaction du fichier .tex.

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 formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

À propos

Titulaire d’un master en sciences religieuses de l’Université de Strasbourg, je suis depuis août 2012 assistant-diplômé en histoire du christianisme antique et littérature apocryphe chrétienne à l’Université de Lausanne, où je prépare une thèse sous la direction de Frédéric Amsler.

Dans le cadre de la rédaction de mon mémoire de master, 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.

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