Je rencontre un problème dans la création de l'index de mon mémoire.

Pour faire simple, je dois faire un inventaire de sites archéologiques. J'ai eu envie de me faciliter la tâche en créant une commande qui se charge de la mise en forme. Comme j'ai plus de neuf paramètres à prendre en compte, il me faut utiliser xkeyval.

Je n'ai rencontré quasiment aucun problème, sauf pour l'index. En effet, je veux que chaque site figure dans l'index.

En résumé, pour chaque site je définis le nom du site, et la commune sur laquelle il se trouve si les deux sont différents. Si la commune et le nom du site sont identiques, je ne définis que le nom du site.

Dans l'index, je souhaite que figure le nom du site, et la commune si celle-ci est définie avec un renvoie vers le nom du site (avec \index{Commune|see{NomSite}}).

J'ai en outre défini une clé d'index qui me permet de changer l'entrée dans l'index pour quelques cas particuliers.

Le nom du site est dans tous les cas défini.

Pour cela, voici une version simplifiée de ce que j'ai fait — je travaille avec XeLaTeX :

Ouvrir dans l'éditeur
\documentclass[french]{article}

\usepackage{fontspec}
\usepackage{makeidx}
\usepackage{index}
\usepackage{xkeyval}
\usepackage{babel}

\makeatletter
\define@key{myitem}{Commune}{\def\@Commune{#1}}
\define@key{myitem}{NomSite}{\def\@NomSite{#1}}
\define@key{myitem}{Index}{\def\@Index{#1}}

\def\NewItem#1{%
    \setkeys{myitem}{#1}
    \@PrintItem
}

\def\@PrintItem{%
    \ifx\@Index\@undefined%
        \ifx\@Commune\@undefined%
            \expandafter\index\expandafter{\@NomSite}%
        \else%
            \expandafter\index\expandafter{\@NomSite}%
            \expandafter\index\expandafter{\@Commune|see{\@NomSite}}%
        \fi%
    \else%
        \@Index%
    \fi%
    \@NomSite%
    \ifx\@Commune\@undefined%
        .%
    \else%
        ,\ \@Commune.%
    \fi%
    \let\@Index\@undefined%
    \let\@NomSite\@undefined%
    \let\@Commune\@undefined%
}
\makeatother

\makeindex

\begin{document}

\NewItem{NomSite={UnSite}}

\NewItem{Commune={UneCommune},NomSite={UnAutreSite},Index={\index{UnAutreIndex}}}

\NewItem{Commune={UneAutreCommune},NomSite={EncoreUnSite}}

\printindex

\end{document}

Après la compilation, il manque dans mon index la mention « UneAutreCommune » avec le renvoi à « EncoreUnSite », car voici ce que je trouve dans le fichier .idx :

Ouvrir dans l'éditeur
\indexentry {UnSite}{1}
\indexentry {UnAutreIndex}{1}
\indexentry {EncoreUnSite}{1}
\indexentry {UneAutreCommune|see{\@NomSite }}{1}

Du coup, ma question est :

comment faire pour que le nom du site soit bien lu lorsque j'utilise la syntaxe \index{index1|see{index2}} ?

Posée 01 Nov '15, 20:33

Namrod's gravatar image

Namrod
283714
Taux d'acceptation : 20%

Modifiée 02 Nov '15, 10:51

denis's gravatar image

denis ♦♦
7.0k1510

@Namrod Les formules de politesse et les signatures sont à éviter : elles ont été supprimées de votre contribution.

(01 Nov '15, 20:51) Pathe ♦♦ Pathe's gravatar image

Lors de l'appel à \index, seul \@Commune est développée et \@NomSite ne l'est pas. Or, il faudrait développer les deux. En considérant que ces deux macros sont purement développables, on peut écrire :

Ouvrir dans l'éditeur
\edef\temp{{\@Commune|see{\@NomSite}}}%
\expandafter\index\temp

Le fichier .idx contient alors :

Ouvrir dans l'éditeur
\indexentry {UnSite}{1}
\indexentry {UnAutreIndex}{1}
\indexentry {EncoreUnSite}{1}
\indexentry {UneAutreCommune|see{EncoreUnSite}}{1}
Lien permanent

Publiée 01 Nov '15, 21:38

unbonpetit's gravatar image

unbonpetit ♦♦
1.8k18
Taux d'acceptation : 68%

@unbonpetit : merci beaucoup pour cette réponse rapide et efficace (comme toujours) ! Ça fonctionne parfaitement.

(01 Nov '15, 22:15) Namrod Namrod's gravatar image

@Namrod : si la réponse vous convient, merci d'accepter ma réponse.

(01 Nov '15, 22:16) unbonpetit ♦♦ unbonpetit's gravatar image

@Namrod Si une réponse fournit la (meilleure) solution à la question, merci de l'indiquer non pas au moyen d'un commentaire mais en acceptant la réponse.

(02 Nov '15, 10:52) denis ♦♦ denis's gravatar image

@unbonpetit : merci beaucoup pour ta réponse rapide et efficace (comme d'habitude) ! Ça fonctionne parfaitement.

Lien permanent

Publiée 01 Nov '15, 22:14

Namrod's gravatar image

Namrod
283714
Taux d'acceptation : 20%

Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.