Plusieurs index avec indextools et afterindex

Bonjour,

Je souhaite créer deux index et les placer en début du document. C’est
la première fois que j’utilise des index donc je ne savais pas trop quel
paquet utiliser. Je suis parti a priori sur indextools de Maïeul
Rouquette avec xindy (pour être sûr que ça marche avec les caractères
non-ASCII).

L’ECM suivant ne donne pas le résultat attendu:

\documentclass{article}
\usepackage[xindy, afterindex]{indextools}

\makeindex[name=persons, title=Index des personnes, intoc]%
\makeindex[name=locations, title=Index des lieux, intoc]%

\begin{document}

\tableofcontents

\printindex[persons]%

\printindex[locations]%

\clearpage

toto\index[persons]{toto}, titi\index[locations]{titi}.

\end{document}

Les index n’apparaissent pas dans la table des matières, et le titre est
“Index des lieux” pour les deux index.

En revanche, si je supprime l’option “afterindex” et que je place les
\printindex à la fin, alors ça fonctionne.

Est-ce que je fais une erreur dans l’utilisation, ou est-ce un bug de
indextools ?

Merci,

Julien

PS: j’ai vu aussi ici
https://tex.stackexchange.com/questions/335186/how-makeindex-latexmks-configuration-variable-can-be-adapted-to-multiple-idx
qu’on devait mettre manuellement un fichier .latexmkrc pour que latexmk
appelle texindy au lieu de makeindex sur les deux fichiers idx.

Mais la solution proposée,

$makeindex = ‘texindy -M %B.xdy %O -o %D %S’; #$

ne fonctionne pas chez moi. J’ai mis ceci:

$makeindex = ‘texindy %B.idx’; #$

qui semble marcher.

Je suis un peu étonné que ce soit aussi compliqué. Est-ce que je fais
quelque chose de travers ?

Le 21/09/22 à 11h41, Julien Salort a écrit :

Bonjour,

Bonjour,

Je souhaite créer deux index et les placer en début du document. C’est la première fois que j’utilise des index donc je ne savais pas trop quel paquet utiliser. Je suis parti a priori sur indextools de Maïeul Rouquette avec xindy (pour être sûr que ça marche avec les caractères non-ASCII).

L’ECM suivant ne donne pas le résultat attendu:

[…]

Les index n’apparaissent pas dans la table des matières, et le titre est « Index des lieux » pour les deux index.

En revanche, si je supprime l’option « afterindex » et que je place les \printindex à la fin, alors ça fonctionne.

Est-ce que je fais une erreur dans l’utilisation, ou est-ce un bug de indextools ?

J’ai l’impression que c’est un bug de indextools. En tout cas, tout fonctionne bien avec le package imakeidx :

–8<---------------cut here---------------start------------->8— \documentclass{article} \usepackage[xindy]{imakeidx}

\makeindex[name=persons, title=Index des personnes, intoc]% \makeindex[name=locations, title=Index des lieux, intoc]%

\begin{document}

\tableofcontents

\printindex[persons]%

\printindex[locations]%

\clearpage

toto\index[persons]{toto}, titi\index[locations]{titi}.

\end{document} –8<---------------cut here---------------end--------------->8—

Merci,

Padkoi.

Julien

PS: j’ai vu aussi ici https://tex.stackexchange.com/questions/335186/how-makeindex-latexmks-configuration-variable-can-be-adapted-to-multiple-idx qu’on devait mettre manuellement un fichier .latexmkrc pour que latexmk appelle texindy au lieu de makeindex sur les deux fichiers idx.

Mais la solution proposée,

$makeindex = “texindy -M %B.xdy %O -o %D %S”; #$

ne fonctionne pas chez moi.

Oui, la configuration précédente suppose la présence d’un fichier .xdy puisque la compilation latexmk indique :

┌──── │ […] │ ------------ │ Running “texindy -M « persons ».xdy -o « persons.ind » « persons.idx »” │ ------------ │ […] │ Error in line 6: │ │ (require « persons.xdy ») │ […] └────

J’ai mis ceci:

$makeindex = “texindy %B.idx”; #$

qui semble marcher.

Je suis un peu étonné que ce soit aussi compliqué. Est-ce que je fais quelque chose de travers ?

Pas spécialement, je pense.

Denis

Le 21/09/2022 à 15:26, Denis Bitouzé a écrit :

J’ai l’impression que c’est un bug de indextools. En tout cas, tout
fonctionne bien avec le package imakeidx :

–8<---------------cut here---------------start------------->8—
\documentclass{article}
\usepackage[xindy]{imakeidx}

\makeindex[name=persons, title=Index des personnes, intoc]%
\makeindex[name=locations, title=Index des lieux, intoc]%

\begin{document}

\tableofcontents

\printindex[persons]%

\printindex[locations]%

\clearpage

toto\index[persons]{toto}, titi\index[locations]{titi}.

\end{document}
–8<---------------cut here---------------end--------------->8—

Chez moi, cet ECM ne fonctionne pas. Il génère deux fichiers persons.idx
et locations.idx qui sont vides. Par contre, la différence avec
indextools c’est que le titre est correct.

La sortie est la suivante:

% lualatex essai
This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)
restricted system commands enabled.
(./essai.tex
LaTeX2e <2022-06-01> patch level 5
L3 programming layer <2022-08-30>
(/usr/local/texlive/2022/texmf-dist/tex/latex/base/article.cls
Document Class: article 2021/10/04 v1.4n Standard LaTeX document class
(/usr/local/texlive/2022/texmf-dist/tex/latex/base/size10.clo))
(/usr/local/texlive/2022/texmf-dist/tex/latex/imakeidx/imakeidx.sty
(/usr/local/texlive/2022/texmf-dist/tex/latex/xkeyval/xkeyval.sty
(/usr/local/texlive/2022/texmf-dist/tex/generic/xkeyval/xkeyval.tex
(/usr/local/texlive/2022/texmf-dist/tex/generic/xkeyval/xkvutils.tex
(/usr/local/texlive/2022/texmf-dist/tex/generic/xkeyval/keyval.tex))))
(/usr/local/texlive/2022/texmf-dist/tex/generic/iftex/ifxetex.sty
(/usr/local/texlive/2022/texmf-dist/tex/generic/iftex/iftex.sty))
(/usr/local/texlive/2022/texmf-dist/tex/generic/iftex/ifluatex.sty)
(/usr/local/texlive/2022/texmf-dist/tex/latex/tools/multicol.sty))
Writing index file persons.idx
Writing index file locations.idx
(/usr/local/texlive/2022/texmf-dist/tex/latex/l3backend/l3backend-luatex.def)
No file essai.aux.
(/usr/local/texlive/2022/texmf-dist/tex/latex/base/ts1cmr.fd)
No file essai.toc.
[1{/usr/local/texlive/2022/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
No file persons.ind.
No file locations.ind.

Package imakeidx Warning: Remember to run lualatex again after calling
(imakeidx) `texindy persons.idx’.

Package imakeidx Warning: Remember to run lualatex again after calling
(imakeidx) `texindy locations.idx’.

[2
\indexentry{toto}{2}
\indexentry{titi}{2}
] (./essai.aux))
421 words of node memory still in use:
3 hlist, 1 vlist, 1 rule, 2 glue, 3 kern, 1 glyph, 4 attribute, 51
glue_spec
, 4 attribute_list, 1 write nodes
avail lists: 2:31,3:12,4:1,5:24,6:2,7:50,9:18,11:2
</usr/local/texlive/2022/texmf-dist/fonts/opentype/public/lm/lmroman10-regular.
otf></usr/local/texlive/2022/texmf-dist/fonts/opentype/public/lm/lmroman12-bold
.otf>
Output written on essai.pdf (2 pages, 5197 bytes).
Transcript written on essai.log.

J’ai l’impression qu’il écrit les fichiers idx avant d’arriver à la page
où les \index apparaissent. Et imakeidx ne semble pas avoir d’option
“afterindex” comme indextools.

Mais la solution proposée,

$makeindex = ‘texindy -M %B.xdy %O -o %D %S’; #$

ne fonctionne pas chez moi.
Oui, la configuration précédente suppose la présence d’un fichier
.xdy puisque la compilation latexmk indique :

Mais pourquoi il n’y a pas de fichier .xdy quand on donne l’option
“xindy” à imakeidx ou indextools ?

Merci,

Julien

Le 22/09/22 à 10h41, Julien Salort a écrit :

Le 21/09/2022 à 15:26, Denis Bitouzé a écrit :

Chez moi, cet ECM ne fonctionne pas. Il génère deux fichiers persons.idx et locations.idx qui sont vides. Par contre, la différence avec indextools c’est que le titre est correct.

En effet, désolé pour le bruit : je pense que j’avais obtenu le résultat souhaité grâce à un test précédent (dans lequel les index avaient été déplacés en fin de document) qui avait généré les fichiers .ind.

Au fait, est-il vraiment nécessaire pour toi que les index précèdent le texte ?

J’ai l’impression qu’il écrit les fichiers idx avant d’arriver à la page où les \index apparaissent. Et imakeidx ne semble pas avoir d’option « afterindex » comme indextools.

En effet, et le résumé de la documentation du pack imakeidx annonce :

┌──── │ This process has some minor limitations: it’s impossible to start an │ index before all other pages have been ejected and […] └────

Ceci étant, on peut s’en sortir, à condition de recourir à l’option noautomatic de ce package :

–8<---------------cut here---------------start------------->8— \documentclass{article} \usepackage[xindy,noautomatic]{imakeidx}

\makeindex[name=persons, title=Index des personnes, intoc]% \makeindex[name=locations, title=Index des lieux, intoc]%

\begin{document}

\tableofcontents

\printindex[persons]%

\printindex[locations]%

\clearpage

toto\index[persons]{toto}, titi\index[locations]{titi}.

\end{document} –8<---------------cut here---------------end--------------->8—

Certes, elle nécessite le lancement manuel des compilations texindy mais, avec dans le fichier .latexmkrc une ligne du genre :

–8<---------------cut here---------------start------------->8— $makeindex = “texindy %O -o %D %S”; –8<---------------cut here---------------end--------------->8—

la commande :

–8<---------------cut here---------------start------------->8— latexmk essai –8<---------------cut here---------------end--------------->8—

fait le nécessaire (et suffisant).

Oui, la configuration précédente suppose la présence d’un fichier .xdy puisque la compilation latexmk indique :

Mais pourquoi il n’y a pas de fichier .xdy quand on donne l’option « xindy » à imakeidx ou indextools ?

Les fichiers .xdy ne sont pas des fichiers générés par la compilation xindy, mais sont à voir comme des fichiers de style.

Merci,

Padkoi.

Denis

Le 22/09/2022 à 14:29, Denis Bitouzé a écrit :

Au fait, est-il vraiment nécessaire pour toi que les index précèdent le
texte ?
Non, je vais le mettre à la fin si ça marche pas au début. J’avais envie
de le mettre au début, mais c’est un document perso donc ça n’a pas
tellement d’importance. Ça me surprend cependant que ce ne soit pas
possible. C’est pas en accord avec l’expérience qu’on a généralement
avec LaTeX (table des matières, liste des figures, bibliographies,
références croisées) où ça marche toujours quel que soit le placement,
même si ça suppose généralement de compiler au moins deux fois.
Les fichiers .xdy ne sont pas des fichiers générés par la compilation
xindy, mais sont à voir comme des fichiers de style.

Ah ok.

Merci,

Julien

Le 23/09/22 à 13h12, Julien Salort a écrit :

J’avais envie de le mettre au début, mais c’est un document perso donc ça n’a pas tellement d’importance. Ça me surprend cependant que ce ne soit pas possible. C’est pas en accord avec l’expérience qu’on a généralement avec LaTeX (table des matières, liste des figures, bibliographies, références croisées) où ça marche toujours quel que soit le placement, même si ça suppose généralement de compiler au moins deux fois.

Je suis d’accord avec toi. Je n’avais pas détecté cette impossibilité jusque là puisque mes index étaient toujours en fin de document. Je n’ai pas suffisamment de temps en ce moment pour approfondir la question.

Denis

Au pire une bidouille :
Modifier sur la version finale le pdf en divisant le document et recomposant le
Pdf

ilovepdf fait ça très bien

Cela nécessite de magouiller « à la main » la numérotation des pages… donc faisable seulement sur la version finale
C’est moche mais c’est possible

Envoyé de mon iPhone

Le 23 sept. 2022 à 13:13, Julien Salort xyz@xyz.tld a écrit :

Le 22/09/2022 à 14:29, Denis Bitouzé a écrit :

Au fait, est-il vraiment nécessaire pour toi que les index précèdent le
texte ?
Non, je vais le mettre à la fin si ça marche pas au début. J’avais envie de le mettre au début, mais c’est un document perso donc ça n’a pas tellement d’importance. Ça me surprend cependant que ce ne soit pas possible. C’est pas en accord avec l’expérience qu’on a généralement avec LaTeX (table des matières, liste des figures, bibliographies, références croisées) où ça marche toujours quel que soit le placement, même si ça suppose généralement de compiler au moins deux fois.
Les fichiers .xdy ne sont pas des fichiers générés par la compilation
xindy, mais sont à voir comme des fichiers de style.

Ah ok.

Merci,

Julien