Xindy Dans un fichier a.tex : \documentclass[a4paper,12pt]{article} \usepackage[latin1]{inputenc} \usepackage[T1]{fontenc} \usepackage{index} \makeindex % Pour demander à LaTeX d'écrire le fichier *.idx \usepackage{amsmath,amssymb} \usepackage{french} %\usepackage[all]{xy} \begin{document} % Page 1 Bla bla bla \index{$\alpha$}% \index{$\beta$}% \index{foo|definition}% \index{barfoo|(}% \clearpage % Page2 Bla bla bla \index{bar}% \index{foobar|voir{bar}}% \index{foo}% \index{foo!bar}% \clearpage % Page 3 Bla bla bla \index{barfoo|)}% \clearpage \printindex \end{document} On lance alors latex a.tex Un fichier a.idx, contenant du code LaTeX, est créé. tex2xindy a.raw Le fichier a.raw contient la même chose que a.idx, mais de manière compréhensible par xindy, ie, en lisp. xindy a.xdy a.raw Le fichier a.ind contient alors l'index, formatté. Il est lu par LaTeX lors de la compilation suivante. latex a.tex Le fichier de configuration de xindy (ici, a.xdy, à créer préalablement), peut contenir des choses comme : (define-location-class "arabic-page-numbers" ("arabic-numbers")) (define-location-class "roman-page-numbers" ("roman-numbers-lowercase")) (markup-range :sep "--") (markup-index :open "~n\begin{theindex}~n" :close "~n\end{theindex}~n" :tree) ; Les différents types de référence (par exemple, on peut demander ; que les numéros de pages correspondant aux définitions/exemples soient en ; gras/italique, etc. [On peut mettre du souligné, des couleurs, etc.] (define-attributes (("definition" "default"))) (markup-locref :class "arabic-page-numbers" :attr "definition" :open "\textbf{" :close "}") (markup-locclass-list :open "\qquad " :sep ", ") (markup-locref-list :sep ", ") (markup-indexentry :open "~n \item " :depth 0) (markup-indexentry :open "~n \subitem " :depth 1) (markup-indexentry :open "~n \subsubitem " :depth 2) ; Références croisées ; On peut mettre indifféremment ; \index{foobar|see{bar}} ; ou ; \index{foobar|voir{bar}} (define-crossref-class "see") (markup-crossref-list :open "\see{" :close "}{}" :class "see") (define-crossref-class "voir") (markup-crossref-list :open "\see{" :close "}{}" :class "voir") (define-location-class-order ("roman-page-numbers" "arabic-page-numbers" ; "alpha-page-numbers" ; "Roman-page-numbers" ; "Alpha-page-numbers" "see")) (markup-letter-group-list :sep "~n\indexspace" :open "~n\indexspace") (define-letter-group "a") (define-letter-group "b") (define-letter-group "c") (define-letter-group "d") (define-letter-group "e") (define-letter-group "f") (define-letter-group "g") (define-letter-group "h") (define-letter-group "i") (define-letter-group "j") (define-letter-group "k") (define-letter-group "l") (define-letter-group "m") (define-letter-group "n") (define-letter-group "o") (define-letter-group "p") (define-letter-group "q") (define-letter-group "r") (define-letter-group "s") (define-letter-group "t") (define-letter-group "u") (define-letter-group "v") (define-letter-group "w") (define-letter-group "x") (define-letter-group "y") (define-letter-group "z") ; Pour tenir compte des lettres accentuées (require "lang/latin/caseisrt.xdy") (sort-rule "À" "A") (sort-rule "à" "a") (sort-rule "é" "e") (sort-rule "è" "e") (sort-rule "ë" "e") (sort-rule "ê" "e") (sort-rule "É" "E") (sort-rule "È" "E") (sort-rule "Ë" "E") (sort-rule "Ê" "E") (sort-rule "ï" "i") (sort-rule "î" "i") (sort-rule "Î" "I") (sort-rule "ö" "o") (sort-rule "ô" "o") (sort-rule "Ô" "O") (sort-rule "Ö" "O") (sort-rule "ù" "u") (sort-rule "Ù" "U") (sort-rule "ü" "u") (sort-rule "Ü" "U") (sort-rule "û" "u") (sort-rule "Û" "U") (sort-rule "ÿ" "y") (sort-rule "ç" "c") (sort-rule "Ç" "C") ; Ne marche pas ;(sort-rule "$" "") ;(sort-rule "\" "") ---------------------------------------------------------------------- Rappels sur l'utilisation de la commande \index (1) Références croisées \index{foobar|see{foo}} (2) Différents types de pages Par exemple, les définitions en gras, les exemples en italique, le reste normal \index{foobar|definition} (3) Entrées hiérarchisées \index{foo!foo} (4) Entrées hiérarchisées automatiques #! perl -w -i -p ## BUGS ## (je n'en vois plus) BEGIN { die "usage: $0 split_file index_file" if $#ARGV < 1; my $f = shift @ARGV; open(F, $f) || die "Cannot open $f for reading: $!"; @mots = (); while(){ chomp; next if m/^\s*$/; s/([^A-za-z0-9])/\\$1/g; push @mots, $_; } close F; $mots = join('|', @mots); print STDERR "Mots : $mots\n"; } s/\{($mots)\s+/\{$1\!/go; ## Et si je veux mettre "graphe" et "graphe en rubans" s/\{($mots)\s+/\{$1\!/go; s/\{($mots)\s+/\{$1\!/go; ## Ces mots peuvent se trouver après un | : il ne faut pas en tenir compte. s/\|(.*)\!/\|$1 /g; (5) Plusieures pages Début : \index{foo|(} Fin : \index{foo|)} (6) Entrées contenant des macros \index{alpha@$\alpha$} ---------------------------------------------------------------------- Redéfinition de certaines commandes \RequirePackage{index,multicol} \makeindex %\def\efill{\hfill\nopagebreak}% %\def\dotfill{\leaders\hbox to.6em{\hss .\hss}\hskip\z@ plus 1fill}% \def\dotfil{\leaders\hbox to.6em{\hss .\hss}\hfil}% \def\pfill{\unskip~\dotfill\penalty500\strut\nobreak \dotfil~\ignorespaces}% \def\voir#1#2{voir #1} \renewenvironment{theindex} {\columnseprule \z@ \columnsep 35\p@ \chapter{Index terminologique} \begin{multicols}{2}% \parindent\z@ \parskip\z@ \@plus .3\p@\relax \let\item\@idxitem \footnotesize \raggedright} {\end{multicols}} %% Pour avoir la première lettre du mot en majuscule et en gras, %% lorsque l'on change de lettre. \def\newindexitem{\futurelet\tokenafterthis\newiitem}% \def\newiitem{% \let\doit\relax \def\reallydoit##1{\textbf{\uppercase{##1}}}% \let\foo=A\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=B\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=C\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=D\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=E\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=F\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=G\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=H\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=I\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=J\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=K\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=L\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=M\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=N\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=O\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=P\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=Q\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=R\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=S\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=T\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=U\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=V\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=W\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=X\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=Y\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=Z\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=a\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=b\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=c\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=d\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=e\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=f\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=g\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=h\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=i\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=j\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=k\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=l\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=m\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=n\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=o\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=p\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=q\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=r\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=s\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=t\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=u\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=v\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=w\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=x\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=y\ifx\tokenafterthis\foo\let\doit\reallydoit \else\let\foo=z\ifx\tokenafterthis\foo\let\doit\reallydoit \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi \let\item\olditem \olditem\doit }% \def\indexspace{% \ifhmode\else\par\noindent\fi \vskip 1ex\goodbreak \let\olditem\item \let\item\newindexitem }