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 :

% À compiler avec XeLaTeX
\documentclass{article}

\usepackage{fontspec}
\usepackage{polyglossia}
\setmainlanguage{french}
\setmainfont{Linux Libertine O}
\usepackage{setspace}
\onehalfspacing
\usepackage[xindy]{indextools}%On précise qu'on veut utiliser xindy
\makeindex[name=animal,title=Animaux,columnseprule]

% Personnaliser l'apparence de lettergroup
\newcommand{\lettergroup}[1]{%
  {\centering\large---\emph{#1}---\par}%
}
\apptocmd{\subitem}{$\rightarrow$\,}{}{}


\begin{document}


On va parler de 
chats sauvages\index[animal]{chat!sauvage} et domestiques\index[animal]{chat!domestique},
de tortues marines\index[animal]{tortue!marine} et terrestres\index[animal]{tortue!terrestre},
d'élèphant d'Asie\index[animal]{élèphant!d'Asie} et d'Afrique\index[animal]{élèphant!d'Afrique},
et soyons fou, d'élans de Sibérie\index[animal]{élan!de Sibérie} et d'Amérique\index[animal]{élan!d'Amérique}.

\newpage

On va parler sur la page suivante des même animaux. C'est à dire : de 
chats sauvages\index[animal]{chat!sauvage} et domestiques\index[animal]{chat!domestique},
de tortues marines\index[animal]{tortue!marine} et terrestres\index[animal]{tortue!terrestre},
d'élèphant d'Asie\index[animal]{élèphant!d'Asie} et d'Afrique\index[animal]{élèphant!d'Afrique},
et soyons fou, d'élans de Sibérie\index[animal]{élan!de Sibérie} et d'Amérique\index[animal]{élan!d'Amérique}.

\newpage

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}.
\printindex[animal]
\end{document}

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é.

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

   (merge-rule "Auguste" "001" :string)
   (merge-rule "Tibère" "002" :string)
   (merge-rule "Caligula" "003" :string)
   (merge-rule "Claude" "004" :string)
   (merge-rule "Néron" "005" :string)

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

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 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