xindy, eledmac et hyperref

vendredi 17 avril 2015, mise à jour mardi 3 novembre 2015, par Maïeul
Suivre la vie du site RSS 2.0 Forum

J’en viens maintenant à aborder l’utilisation de \xindy avec eledmac, et plus précisément avec sa commande \edindex qui permet d’indexer une référence en renvoyant à la page et au numéro de ligne.

Pré-requis

La compatibilité pleine de eledmac avec xindy n’est fournie qu’avec la version 1.22.0 de eledmac.

Pour l’installer :

  • télécharger le zip disponible sur le CTAN.
  • appliquer la commande pdflatex sur les deux fichiers .ins pour obtenir les fichiers .sty.
  • mettre les fichiers .sty à côté de votre fichier d’exemple ou dans le dossier tex/latex/eledmac de [votre dossier texmf local.

Fichier d’exemple

Prenons un fichier .tex reprenant le code de mes précédents exemples, mais utilisant \edindex à la place de \index.

  1. % À compiler avec XeLaTeX
  2. % À compiler avec XeLaTeX
  3. \documentclass{article}
  4.  
  5. % Réglages géneraux
  6. \usepackage{fontspec}
  7. \setmainfont{Linux Libertine O}
  8. \usepackage{polyglossia}
  9. \setmainlanguage{french}
  10. \usepackage{setspace}
  11. \onehalfspacing
  12.  
  13. % Définition des index
  14. \usepackage[xindy]{indextools}%On précise qu'on veut utiliser xindy
  15.  
  16.  
  17. % Apparence des index
  18. % Cf http://geekographie.maieul.net/171
  19. \newcommand{\lettergroup}[1]{%
  20. {\centering\large---\emph{#1}---\par}%
  21. }
  22. \apptocmd{\subitem}{$\rightarrow$\,}{}{}
  23. %
  24.  
  25. % Chargement de eledmac et de hyperref avec les bonnes options
  26. \usepackage[series={A},noeledsec,nofamiliar,noend,xindy,xindy+hyperref]{eledmac}
  27. \usepackage[hyperindex=false]{hyperref}
  28.  
  29. % Toujours appeler \makeindex après le chargement de eledmac, cf doc de eledmac.
  30. \makeindex[name=animal,title=Animaux,columnseprule]
  31. \begin{document}
  32.  
  33. \beginnumbering
  34. \autopar
  35.  
  36. On va parler de
  37. chats sauvages\edindex[animal]{chat!sauvage} et domestiques\edindex[animal]{chat!domestique},
  38. de tortues marines\edindex[animal]{tortue!marine} et terrestres\edindex[animal]{tortue!terrestre},
  39. d'élèphant d'Asie\edindex[animal]{élèphant!d'Asie} et d'Afrique\edindex[animal]{élèphant!d'Afrique},
  40. et soyons fou, d'élans de Sibérie\edindex[animal]{élan!de Sibérie} et d'Amérique\edindex[animal]{élan!d'Amérique}.
  41.  
  42.  
  43. On va parler au paragraphe suivant des même animaux. C'est à dire : de
  44. chats sauvages\edindex[animal]{chat!sauvage} et domestiques\edindex[animal]{chat!domestique},
  45. de tortues \edtext{marines}{\Afootnote{ninja\edindex[animal]{tortue!ninja|textbf}}}\edindex[animal]{tortue!marine} et terrestres\edindex[animal]{tortue!terrestre},
  46. d'élèphant d'Asie\edindex[animal]{élèphant!d'Asie} et d'Afrique\edindex[animal]{élèphant!d'Afrique},
  47. et soyons fou, d'élans de Sibérie\edindex[animal]{élan!de Sibérie} et d'Amérique\edindex[animal]{élan!d'Amérique}.
  48.  
  49. \edtext{Le paragraphe suivant est vraiment très particulier. Il est là juste pour tester ce que donne une indexation lorsqu'on parle d'une note qui est sur plusieurs lignes.}{\lemma{Le paragraphe…lignes}\Afootnote{serpent\edindex[animal]{serpent!de mer}}}%
  50.  
  51. \endnumbering
  52. \beginnumbering
  53.  
  54. \autopar Et pour la bonne cause, on va aussi parler de chats sauvages\edindex[animal]{chat!sauvage|textbf} qui se disputent avec les chiens errants\edindex[animal]{chien!errant}.
  55.  
  56.  
  57. \endnumbering
  58.  
  59. \printindex[animal]
  60. \end{document}

Télécharger

Rien de très original dans le contenu, comme vous pouvez le constatez, si ce n’est que j’ai ajouté l’indexation d’un élément en note critique.

Les deux lignes les plus importantes pour le fonctionnement avec xindy sont :

  1. \usepackage[xindy,xindy+hyperref]{eledmac}
  2. \usepackage[hyperindex=false]{hyperref}

Télécharger

La ligne \usepackage[hyperindex=false]{hyperref} vous laisse prendre la main sur l’ajout de liens hypertextes sur les localisation dans l’index, ainsi que je l’ai expliqué dans mon précédent article.

L’option xindy de eledmac est obligatoire si on souhaite utiliser \edindex avec xindy [1].

L’option xindy+hyperref permet en outre de faire fonctionner les liens internes.

Trois premières compilations XeLaTeX

Lorsqu’on indexe avec \edindex le fichier .idx n’est correct qu’après la troisième compilation (Xe)LaTeX. Nous supposons donc que vous faites trois compilations d’affilée de XeLaTeX.

À la fin de ces compiliations, outre le fichier .pdf et le fichier .xdy, vous obtenez un fichier eledmac-markup-attr.xdy.

Il s’agit d’un fichier de configuration xindy produit par eledmac et qui contient la déclaration des attributs de localisation propres à chaque entrée d’index produite par \edindex.

Compilation xindy

Il nous faut donc appeler ce fichier .xdy lors de notre compilation. Deux solutions s’offrent à nous.

La première consistent à passer le nom de ce fichier à l’option -M de texindy. Ainsi à la place d’appeler :

  1. $ texindy -L french -I xelatex -M monstyle animal.idx

On appellera

$ texindy -L french -I xelatex -M monstyle eledmac-markup-attr animal.idx

Cependant il existe une solution plus simple : inclure l’appel à eledmac-markup-att.xdy directement dans le fichier monstyle.xdy via :

  1. (require "eledmac-markup-attr.xdy")

Procédez donc à cette compilation : vous obtenez des lignes du type

WARNING : location-reference « 1-1 » did not match any location-class ! (ignored)

Ceci s’explique simplement : xindy n’est pas capable, par défaut, de comprendre une localisation de type numerodepage-numerodeligne tel que l’écrit \edtext dans le fichier .idx.

Qu’importe, nous allons lui apprendre, en ajoutant les lignes suivantes dans notre fichier de configuration .xdy [2] :

Ces lignes disent simplement qu’il existe une classe de localisation, c’est à dire une manière de référencer une entrée, nommée eledmac. Les entrées ainsi localisées possèdent deux niveau de localisation (:hierdepth 2), c’est à dire dans notre cas le page puis la ligne. Le premier niveau est écrit en nombre arabe, le second aussi, et les deux sont séparés par le caractère -.

Avec ces lignes nous arrivons à compiler correctement avec texindy. Cependant après la compilation XeLaTeX suivante, nous obtenons un index peu utilisable, comme vous pouvez le constatez dans le fichier ci-dessous.

Premier essai d’index avec eledmac + xindy

Le numéro de ligne est collé au numéro de page, si bien que l’index ne permet pas de retrouver la référence. Qu’importe, nous allons dire à xindy de mettre le numéro de ligne entre parenthèse, avec les lignes suivantes dans le fichier .xdy

Nous indiquons que pour la classe de localisaton eledmac, que nous avions précédemment définie, le niveau 1 de localisation, c’est à dire dans le cas présent le numéro de ligne, puisque les niveaux commençent à 0, est marqué dans le fichier .ind par une parenthèse ouvrante au début et par une parenthèse fermante à la fin, les différentes entrées du même niveau étant séparées par des virgules.

Avec un tel fichier .xdy, après une nouvelle compilation xindy et une autre compilation XeLaTeX, nous obtenons un index final correctement formaté.

xindy et eledmac : exemple distinguant bien le numéro de ligne du numéro de page

P.-S.

Il y aura une suite à ces tutoriaux sur xindy, mais la semaine prochaine.

Documents joints

Notes

[1En fait pas tout à fait : elle n’est obligatoire que si on souhaite mettre des index en notes de bas de page ou si on souhaite avec des liens hypertextes. Mais autant prendre l’habitude de la charger, cela évitera les mauvaises surprises.

[2Attention à bien mettre ces lignes dans votre fichier et non pas dans le fichier eledmac-markup-attr.xdy, qui est réécrit à chaque compilation XeLateX !

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.

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

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