Fichier d’exemple
Je suppose que vous avez, au préalable, créé votre fichier .xdy contenant les instructions proposées dans l’article xindy et hyperref.
Je suppose que vous avez également chargé le package hyperref avec l’option hyperindex=false :
\usepackage[hyperindex=false]{hyperref}Je prend maintenant le fichier contenant les commandes d’indexation suivantes :
\indexentry{félin}{1}
\indexentry{chat|see{félin}}{1}Je souhaite que la commande |see non seulement renvoie vers la bonne entrée, mais en plus intègre un lien hypertexte.
Analyse du fichier .idx et du fichier .ind
Le fichier .idx produit est le suivant
\indexentry{félin}{1}
\indexentry{chat|see{félin}}{1}Après un passage par xindy avec mon précédent .xdy, on obtient les lignes suivantes dans le fichier .ind :
(…)
\item chat, \see{félin}{}
(…)
\item félin, \hyperpage{1}
(…)On constate donc que si il existe bien un renvoi depuis « chat » vers « félin » et si félin pointe bien avec un lien hypertexte sur la page 1, le renvoi ne propose pas de lien hypertexte.
Modification du .xdy
Nous allons modifier notre fichier .xdy pour ajouter :
- une commande pour indiquer que « félin » est un lieu de destination.
- une commande pour indiquer que « chat » pointe vers félin, ou plus exactement que le
\see{félin}{}point vers félin.
Ajoutons donc les deux lignes suivantes au fichier .xdy :
(markup-keyword-list :open "\targetindexentry{" :close"}")
(markup-crossref-list :open "\seelink{" :close "}{}" :class "see")La première ligne indique d’entourer les mots-c’est à dire les entrées d’indexation, par \targetindexentry{ à gauche et par } à droite.
La seconde ligne indique que le paramètre marqué entre les accolades qui suivant le |see, ici félin doit être entouré à gauche par \seelink{ et à droite par }{}.
Ceci nous produit donc le fichier .ind avec les lignes suivantes :
(…)
\item \targetindexentry{chat}, \seelink{félin}{}
(…)
\item \targetindexentry{félin}, \hyperpage{1}Définition de \seelink et de \targetindexentry
Il ne reste plus qu’à définir dans notre fichier .tex les deux commandes \targetindexentry et \seelink qui utilisent des commandes du package hyperref.
\newcommand{\targetindexentry}[1]{\hypertarget{index:#1}{#1}}
\newcommand{\seelink}[1]{\hyperlink{index:#1}{\see{#1}}}Rien de bien méchant : targetindexentry crée une ancre sur son argument. Le nom de l’ancre correspond à son argument précédé par index: ; \seelink point vers une ancre dont le nom correspond à son argument précédé de index:, le texte pointeur étant tout simple la commande \see à laquelle on passe son argument.
Correction de \hyperlink et hypertarget
Le problème est que les commandes \hyperkink et hypertarget ne fonctionne pas si le premier argument contient des accents. Il nous faut donc corriger ces commandes. Cependant une telle correction ralentissant considérablement le temps de calcul [1], il est recommandé de les faire uniquement avant l’index.
Ajoutez donc ces lignes avant le premier \printindex.
La différence principale avec les définitions de hyperref est l’emploi de \pdfstringdef qui permet de transformer les accents en caractères acceptables dans le code interner d’un pdf, donc dans les liens hypertextes.
Et maintant, non seulement |see fonctionne, mais en plus il produit des liens hypertextes. Miaou !