Voici un problème auquel je suis confronté.

Ce code, simple, fonctionne parfaitement avec XeLaTeX :

Ouvrir dans l'éditeur
\documentclass{article}

\usepackage{fontspec}
\usepackage{makeidx}

\makeindex

\begin{document}

Blablabla\index{index1}

\newpage

\printindex

\newpage

Blablabla\index{index2}

\end{document}

Cet autre code, tout aussi simple, ne fonctionne pas correctement :

Ouvrir dans l'éditeur
\documentclass{article}

\usepackage{fontspec}
\usepackage[xindy]{indextools}

\makeindex

\begin{document}

Blablabla\index{index1}

\newpage

\printindex

\newpage

Blablabla\index{index2}

\end{document}

En effet, ce dernier code compile correctement, mais contrairement au premier seule la première entrée est affichée dans l'index tandis que la seconde est ignorée.

Quelqu'un aurait-il une solution afin de prendre en compte les entrées placées après \printindex en utilisant xindy ?

Posée 01 Nov '15, 23:09

Namrod's gravatar image

Namrod
2831714
Taux d'acceptation : 20%

Modifiée 01 Nov '15, 23:33

Pathe's gravatar image

Pathe ♦♦
7.5k42203251


Je vous fais remarquer que xindy n'y est pour rien. C'est le package imakeidx (ou son fork indextools) qui définit \printindex pour que celle-ci ferme le fichier où sont écrites les entrées. Dans votre premier code, vous auriez observé le même comportement en utilisant le package imakeidx ou indextools !

Cette définition de \printindex fait qu'après son exécution, les entrées d'index ne sont plus écrites dans le fichier rassemblant les entrées d'index, ce qui d'ailleurs me semble tout à fait logique. Pourquoi diable voudriez-vous rajouter des entrées d'index après l'impression de l'index ?

EDIT À l'aide de \AtEndDocument, je propose de reléguer en fin de document la fermeture du fichier et l'appel au programme externe.

Ouvrir dans l'éditeur
\documentclass{article}

\usepackage{fontspec}
\usepackage[xindy]{indextools}
\makeatletter
\def\indtl@putindex#1{%
    \ifindtl@nonewpage\else
        \indtl@clearpage
    \fi
    \let\indtl@indexname\indexname % keep \indexname
    \@nameuse{indtl@set@#1}\indtl@decide
    \AtEndDocument{%
        \indtl@clearpage
        \immediate\closeout\csname #1@idxfile\endcsname
        \if@tempswa % we can call the external program
            \indtl@exec{\indtl@program\indtl@options#1.idx}%
        \else
            \indtl@finalmessage{#1}%
        \fi}%
    \ifKV@indtl@intoc
        \def\indtl@maybeaddtotoc{\@nameuse{phantomsection}%
        \addcontentsline{toc}{\indtl@toclevel}{\indtl@title}}%
    \else
        \def\indtl@maybeaddtotoc{}%
    \fi
    \ifx\indtl@title\indtl@check@indexname\else
        \def\indexname{\indtl@title}%
    \fi
    \@input@{#1.ind}
    \let\indexname\indtl@indexname % restore \indexname
}
\makeatother
\makeindex

\begin{document}

Blablabla\index{index1}

\newpage

\printindex

\newpage

Blablabla\index{index2}

\end{document}
Lien permanent

Publiée 02 Nov '15, 01:00

unbonpetit's gravatar image

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

Modifiée 02 Nov '15, 10:36

@unbonpetit : effectivement, merci pour votre réponse, je viens de m'apercevoir qu'il ne s'agit pas de xindy particulièrement. Mais je reste contraint d'utiliser l'extension makeidx plutôt que imakeidx, beaucoup plus pratique, car seule la première me permet de faire ce que je veux.

En effet, je rédige mon mémoire en deux parties : une de texte, et une d'annexes. Or les normes de mon université m'imposent de placer l'index à la fin de la première partie, alors que je veux y faire figurer des entrées situées dans la seconde, la pagination étant continue entre les deux.

(02 Nov '15, 02:11) Namrod Namrod's gravatar image

@Namrod : sans aucune garantie d'avoir du temps pour cela, vous pouvez toujours ouvrir un ticket sur la page github d'indextools pour que je puisse voir comment améliorer ce problème.

(02 Nov '15, 10:40) Maïeul Ma%C3%AFeul's gravatar image

@Maïeul : si je puis me permettre, il me semblerait en effet intéressant que tu modifies les macros \indtl@putindexsplit et \indtl@putindexunique pour régler ce genre de problème.

(02 Nov '15, 10:42) unbonpetit ♦♦ unbonpetit's gravatar image

Merci à vous deux pour vos réponses. Pour le moment, la solution de unbonpetit me convient bien, je verrai si je rencontre à nouveau des problèmes par la suite.

(02 Nov '15, 12:15) Namrod Namrod's gravatar image

@Namrod Il faut ne publier de commentaires que s'ils enrichissent la base de connaissances (La)TeX et, en particulier, éviter ceux qui ne contiennent qu'une confirmation de solution ou que des remerciements. Le vôtre va donc être supprimé.

(02 Nov '15, 16:45) denis ♦♦ denis's gravatar image

La version 1.5 de indextools, que je viens de déposer sur le CTAN et qui sera donc bientôt disponible sur vos distribution, propose une nouvelle option afterindexqui permet de gérer ce genre de cas.

Ouvrir dans l'éditeur
\documentclass{article}

\usepackage{fontspec}
\usepackage[afterindex,xindy]{indextools}

\makeindex

\begin{document}

Blablabla\index{index1}

\newpage

\printindex

\newpage

Blablabla\index{index2}

\end{document}
Lien permanent

Publiée 15 Nov '15, 16:44

Ma%C3%AFeul's gravatar image

Maïeul
321514
Taux d'acceptation : 37%

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.