Problème de personnalisation d'un index
Bonjour à tous,
J'ai cherché sur le net comment personnaliser mon index en utilisant le fichier ist. J'ai trouvé plusieurs solutions et j'ai choisi une solution concernant la class memoir (cette classe m'intéresse pour certaines raisons particulières et personnelles). J'ai mis dans le même répertoire le fichier principal et le fichier ist. Le contenu du fichier ist est come suit
Un exemple minimal de mon fichier source est comme suit:
Je vous remercie tous à l'avance pour toute réponse ou suggestion. De passage je passe un bonjour à Brian qui est très actif sur ce forum.
Bonne fin de semaine à tous.
J'ai cherché sur le net comment personnaliser mon index en utilisant le fichier ist. J'ai trouvé plusieurs solutions et j'ai choisi une solution concernant la class memoir (cette classe m'intéresse pour certaines raisons particulières et personnelles). J'ai mis dans le même répertoire le fichier principal et le fichier ist. Le contenu du fichier ist est come suit
headings_flag 1 heading_prefix "{\\large\\sffamily\\bfseries\\shadowbox{" heading_suffix "}\\hfil}\\nopagebreak\n" symhead_negative "symboles" symhead_positive "Symboles" delim_0 " \\dotfill \ " delim_1 " \\dotfill \ "
Un exemple minimal de mon fichier source est comme suit:
\documentclass[twoside]{memoir} \usepackage{imakeidx} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage[french]{babel} \usepackage{lmodern} \usepackage[top=1.5cm,bottom=1.5cm,left=2.2cm,right=2.2cm, marginparwidth=1.1cm,marginparsep=2mm]{geometry} \makeindex[columns=2, title= Index des mots, options= -s docu.ist] \begin{document} \chapter{Chapitre 1} \section{Section 1} L'homme est un Etre \index{Etre} \index{sublime}. \chapter{Chpaitre 2} \section{Section 2} On \index{pense}, donc on \index{existe} \printindex \end{document}Malheureusement, lorsque je compile selon la séquence "pdflatex +makeindex+pdflatex", j'obtient un index formaté selon la version par défaut, c'est-à-dire ne prenant pas en considération le fichier ist. De plus, il n'y a aucune déclaration d'erreur au niveau du terminal.
Je vous remercie tous à l'avance pour toute réponse ou suggestion. De passage je passe un bonjour à Brian qui est très actif sur ce forum.
Bonne fin de semaine à tous.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
L'exemple fourni a l'air pas mal, mais... impossible qu'il n'y ait pas d'erreur avec ça. Pour commencer, il manque le \end{document} (enfin, il est mal placé) mais surtout, le fichier .ist fait appel à une macro \shadowbox qui est non définie avec ton code (et je ne sais pas d'où elle vient).
En corrigeant ces deux points, j'ai une autre erreur qui me fait comprendre qu'il faut faire quelque chose comme ça pour le .ist : Là, ça fonctionne, et ce, en compilant uniquement avec pdflatex.
Petite explication : j'utilise TeX Live et dans TeX Live, il y a quelques programmes dont makeindex qui sont considérés comme sûrs et peuvent donc être appelés directement depuis du code TeX sans avoir à compiler avec -shell-escape aka --enable-write18 (option dont le nom dépend de la distribution TeX). C'est ce qui permet à imakeidx, utilisé dans ton .tex, de lancer automatiquement makeindex.
Mais si ta distribution n'a pas ce mécanisme de liste blanche incluant makeindex, il faut soit passer l'option -shell-escape aka --enable-write18 au moteur TeX utilisé (ce qui a des conséquences en matière de sécurité), soit le lancer à la main : Dernière chose : makeindex est « un peu » obsolète : il ne va trier correctement que les caractères ASCII, donc exit le bon tri avec caractères accentués. Il y a deux alternatives qui gèrent Unicode :
- xindy (texindy) qui est bien rôdé mais n'est plus maintenu ;
- xindex tout jeune, activement maintenu (installer au moins la version 0.30 — qui se présente hélas comme 0.3 — sinon il faut s'attendre à des problèmes avec le français).
Mon expérience récente est avec xindex. Pas de liste blanche pour lui dans TeX Live, mais on peut le lancer soi-même et ça marche bien — y compris avec imakeidx et des index multiples.- vraisemblablement, tu ne lances pas 'makeindex -s docu.ist docu.idx ;
- tu crois que 'options= -s docu.ist' passé à la macro \makeindex va le faire, mais imakeidx.sty ne peut lancer makeindex que si celui-ci est sur une liste blanche de programmes sûrs (vrai par défaut avec TeX Live, peut-être faux avec MiKTeX) ou si l'on a passé -shell-escape ou --enable-write18 au moteur TeX utilisé.
Je pense qu'aucune de ces conditions n'a été remplie dans tes essais (enfin, la seconde pourrait éventuellement avoir été remplie mais le fichier .ind ensuite écrasé par ton lancement manuel de makeindex sans l'option -s...), ce qui pourrait expliquer que tu as eu le formatage par défaut de l'index et que tu n'as pas vu qu'il manquait des choses dans ton docu.tex pour que \shadowbox soit définie.La section If something goes wrong de la documentation d'imakeidx est assez instructive. Si makeindex a été lancé automatiquement par imakeidx lors de la compilation du fichier .tex, ça doit se voir dans les messages affichés par la commande pdflatex (ou lualatex, etc.), par exemple : Comme le montre cet extrait, il doit aussi y avoir un fichier .ilg contenant quelque chose comme ceci : Le fichier .ind généré par makeindex (ou texindy ou xindex) contient le code LaTeX que \printindex va exécuter, celui qui produit l'index trié.
Résumons : les commandes \index dans le .tex permettent de constituer le fichier .idx, ni trié ni formaté. L'outil de tri et formatage (makeindex, texindy ou xindex) lit ce .idx, trie les entrées, arrange le formatage et écrit le résultat dans un fichier .ind. Enfin, la commande \printindex exécute le code LaTeX contenu dans le .ind (regarde-le !), ce qui a pour effet d'insérer un index formaté et trié dans le document.
N.B. : pas d'espace entre « \index{mot} » et « mot » !
Bon début de semaine.
En premier lieu, je ne sais pas où est l'erreur lorsque j'ai mis end{document} à la fin de mon fichier (je pensais que c'est l'endroit habituel).
Deuxièmement, je ne saisis pas "lancer à la main" les trois instructions. Je compile directement et il n'y a pas de séquence dans mon compilateur. Sauf si l'expression "lancer à la main" veut dire utiliser une ligne de commande. Dans ce cas, je ne l'ai jamais utilisée et je ne sais même pas comment y accéder.
Pour information, j'utilise MikTex-portable version 2.15 sur windows.
En ce qui concerne \shadowbox je voulais mettre la première lettre dans chaque groupe de mots commençant par cette lettre dans une boite ombrée.
Merci beaucoup Brian et bonne journée.
zenon.
Oui, « lancer à la main » dans un de mes messages ci-dessus veut dire « utiliser une (des) ligne(s) de commande ». Ce n'est pas sorcier mais c'est très utile. Je suggère de te renseigner sur « invite de commandes » dans Windows, sur cmd.exe, éventuellement sur Powershell — mais je ne pourrai pas t'aider avec ce dernier. Il doit y avoir des centaines de tutoriels en ligne là-dessus, sur YouTube ou sur des pages web « statiques ».
Sinon, débrouille-toi avec ton éditeur de texte pour qu'il passe l'option -s comme j'ai indiqué. Enfin, ça, c'est si tu veux rester avec makeindex...
Lorsque tu as écrit « je compile selon la séquence "pdflatex +makeindex+pdflatex" », j'ai cru que tu savais lancer ces commandes dans un terminal (l'« invite de commandes » selon la terminologie Windows). J'ai mal cru mais tu as de la chance : c'est un problème qui se soigne très facilement.
Désolé, mais je ne peux détailler plus. Il faut que tu apprennes à lancer une commande soit dans un terminal, soit avec ton éditeur de texte que je n'utilise pas (je fais ce genre de trucs avec des Makefile's ou des scripts shell, sauf pour expérimenter ou tester, auquel cas je lance justement les commandes en question dans un terminal).
Encore une fois merci beaucoup et bonne fin de soirée.
zenon.
- lancer cmd.exe d'une manière plus ou moins explicite ;
- utiliser la commande 'cd' pour aller dans le dossier contenant ton document .tex principal (celui à compiler) ;
- utiliser des "double quotes" si certains chemins comportent des espaces ;
- entrer la commande à lancer et appuyer sur Enter...
Bonne fin de soirée.
zenon.