Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

liste de l'alphabet en début d'index

7 views
Skip to first unread message

pluton

unread,
Nov 26, 2009, 11:25:36 AM11/26/09
to
bonjour,

est-il possible de réaliser quelque chose d'équivalent à la liste de
l'alphabet en début d'index comme sur le wiki dédié à Latex :
http://fr.wikibooks.org/wiki/LaTeX/Index en ce, en Latex donc ?

merci,

(quand un index est long dans un fichier pdf, pouvoir sélectionner la
lettre en début d'index semble une bonne idée non ?)

Jean-Côme Charpentier

unread,
Dec 8, 2009, 1:13:49 PM12/8/09
to
pluton a �crit :
> bonjour,

Salut. Je r�ponds un peu en retard mais j'ai trouv� le probl�me rigolo
et je me dis que mieux vaut tard que jamais.

> est-il possible

Oui.

> de r�aliser quelque chose d'�quivalent � la liste de
> l'alphabet en d�but d'index comme sur le wiki d�di� � Latex :

Je vais faire une sorte de fac simil� de ce qu'il y a en lien bien que
je trouve qu'un index sur une seule colonne ne soit pas franchement
recommandable. D'un autre c�t�, cela me permet de de ne pas suer sang et
eau pour avoir deux pages d'index (avec un index d'une seul page, les
liens hyper-textes alphab�tiques ne sont pas franchement utiles :-)

> merci,
>
> (quand un index est long dans un fichier pdf, pouvoir s�lectionner la
> lettre en d�but d'index semble une bonne id�e non ?)

Toutaf�. En plus, cela me permet de parler des fichiers de style
d'index, ce qui est rarement abord�... et c'est bien dommage !
� noter que xindy est sans doute beaucoup plus souple/puissant que
makeindex mais comme je ne connais pas (encore) trop bien, je vais
rester � l'�ge makeindex.

Bon. Le principe, c'est donc d'�crire, au niveau de l'environnement
theindex, une ribambelle de \hyperlink{<�tiquette>}{<lettre>} o�
<lettre> va parcourir l'alphabet. Il faut donc red�finir cet environnement.
Le probl�me plus emb�tant, c'est que le fichier d'index appel� en fin
de course par LaTeX, � savoir <nom_fichier>.ind devra comporter des
commandes \hypertarget{<�tiquette>}{<lettre>}. Or, par d�faut, un
fichier ind produit par le programme makindex ne comporte pas de tels
fioritures. C'est l� qu'intervient le fichier de style pour les index.
Je ne vais pas d�crire en d�tails tout ce qu'il est possible de faire
avec ces fichiers de style, je balance juste le fichier que j'ai utilis�
et qui comporte quelques commentaires explicatifs succincts :

----------%<---------- fichier toto.ist ----------%<----------
heading_prefix
"\\LabelLettre{" % avant la lettre
heading_suffix
"}\\par\\vspace{-6pt}\\hrulefill" % apr�s la lettre
headings_flag 1 % >0 => cap., <0 => bas de casse
----------%<-------- fin fichier toto.ist --------%<----------

Le principe est d'appeler le programme makindex avec la syntaxe :

makeindex -s toto.ist glouglou

o� glouglou.tex est le source � compiler. cela va produire un fichier
glouglou.ind o� on aura des trucs du style :

\indexspace
\LabelLettre{A}\par\vspace{-6pt}\hrulefill

avant la liste des mots index�s commen�ant par la lettre "A".

Voici le source qui permet de faire fonctionner tout cela :

----------%<---------- fichier glouglou.tex ----------%<----------
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc} % � adapter
\usepackage[a4paper]{geometry}
\usepackage{lmodern}
\usepackage{makeidx}
\usepackage[frenchb]{babel}
\usepackage{hyperref}

\makeindex

% Raccourcis pour ne pas s'emb�ter
\newcommand\Index[1]{#1\index{#1}}
\newcommand\INdex[2]{#1\index{#2@#1}}
\newcommand\IndeX[2]{#1\index{#1#2}}

% Commande pour les liens
\newcommand\LabelLettre[1]{%
\hypertarget{index-#1}{#1}%
}
\newcommand\RefLettre[1]{%
\hyperlink{index-#1}{#1}%
}

% Red�finition pour un index sur une seule colonne
% mais c'est un peu beu�rk �mha.
% Plus m�canisme pour l'alphabet avec liens hyper-textes.
\makeatletter
\renewenvironment{theindex}
{%
% titre de section, r�glage en-t�te et pied de page
\section*{\indexname}
\@mkboth{\MakeUppercase\indexname}%
{\MakeUppercase\indexname}%
\thispagestyle{plain}%
% Alphabet de liens
\noindent
\RefLettre{A}\hfil
\RefLettre{B}\hfil
\RefLettre{C}\hfil
\RefLettre{D}\hfil
\RefLettre{E}\hfil
\RefLettre{F}\hfil
\RefLettre{G}\hfil
\RefLettre{H}\hfil
\RefLettre{I}\hfil
\RefLettre{J}\hfil
\RefLettre{K}\hfil
\RefLettre{L}\hfil
\RefLettre{M}\hfil
\RefLettre{N}\hfil
\RefLettre{O}\hfil
\RefLettre{P}\hfil
\RefLettre{Q}\hfil
\RefLettre{R}\hfil
\RefLettre{S}\hfil
\RefLettre{T}\hfil
\RefLettre{U}\hfil
\RefLettre{V}\hfil
\RefLettre{W}\hfil
\RefLettre{X}\hfil
\RefLettre{Y}\hfil
\RefLettre{Z}%
\par\vspace{24pt}
% fin alphabet
% r�glages pour la liste des entr�e d'index
\parindent\z@
\parskip\z@ \@plus .3\p@\relax
\let\item\@idxitem
}
{\clearpage}
\makeatother

\begin{document}
Il n'y a que \Index{sept} \Index{ans} que le \Index{premier}
\Index{Manuel} de \INdex{R�f�rence}{Reference} \Index{PostScript} a
�t� \INdex{publi�}{publie} et que les \Index{premiers}
\Index{produits} \Index{bas�s} sur le \Index{langage} PostScript ont
�t� pr�sent�s. En 1985, nous n'avions pas de \Index{raison}
d'\Index{envisager} les \Index{effets} � \Index{long} \Index{terme}
que le \IndeX{langage}{!PostScript} PostScript pourrait avoir sur le
\Index{monde} de l'\Index{imprimerie} et de
l'\INdex{�dition}{edition}. � cette �poque, il n'y avait pas de
\IndeX{standard}{!de description} de \Index{description} de
\Index{page} \Index{efficace}, les \Index{caract�res}{caracteres} les
plus \Index{populaires} n'�taient \Index{utilis�s}{utilises} qu'avec
des \Index{composeuses} \Index{sp�cialis�es}{specialisees},
\Index{produire} des \Index{documents} de \IndeX{haute}{!qualit�}
qualit� �tait r�serv� aux \INdex{sp�cialistes}{specialistes}, et le
co�t de \Index{production} de la plupart des moyens de
\Index{communication} �crite d'\Index{entreprise} �tait
\Index{prohibitif}.

\newpage
\printindex
\end{document}
----------%<-------- fin fichier glouglou.tex --------%<----------

Voil�. La cha�ne de compilation compl�te est :

pdflatex glouglou
makeindex -s toto.ist glouglou
pdflatex glouglou

et cela devrait �tre bon (normalement). Il y a juste un point qui
m'�nerve un peu. C'est que lorsque le lien n'existe pas, le fait de
cliquer sur la lettre renvoie au d�but du document. Une bonne �me
conna�trait-elle une option cach�e de hyperref qui permettrait de se
d�barrasser de ce comportement ?

Jean-C�me Charpentier

--
Comme la question pos�e en tant que sujet du message n'est pas reprise
dans le corps du message, je vais y r�pondre tout de suite. Au lieu de
"soulignement toujours � �viter" qui est un peu sec, je dirais "sauf
besoin extr�mement sp�cial (ou directeur de th�se pathologiquement
inculte et dictatorial), le soulignement devrait �tre syst�matiquement
�vit�".
-+- Jean-C�me in fr.comp.text.tex -+-

pluton

unread,
Dec 8, 2009, 3:03:09 PM12/8/09
to
d'accord merci beaucoup je vais lire cette proposition avec attention
et adapter en conséquence
puisque j'utilise l'extension splitidx

> Le problème plus embêtant, c'est que le fichier d'index appelé en fin
> de course par LaTeX, à savoir <nom_fichier>.ind devra comporter des
> commandes \hypertarget{<étiquette>}{<lettre>}. Or, par défaut, un


> fichier ind produit par le programme makindex ne comporte pas de tels

> fioritures. C'est là qu'intervient le fichier de style pour les index.
> Je ne vais pas décrire en détails tout ce qu'il est possible de faire
> avec ces fichiers de style, je balance juste le fichier que j'ai utilisé


> et qui comporte quelques commentaires explicatifs succincts :

c'est vrai qu'il existe peu de choses sur les styles d'index. J'ai
pour l'instant essayé
de bidouiller et d'y mettre des commandes pstricks (dans le
fichier .ist) mais sans succès :) !!

Je vais probablement revenir.

Manuel Pégourié-Gonnard

unread,
Dec 8, 2009, 3:35:57 PM12/8/09
to
Jean-C�me Charpentier scripsit :

>> (quand un index est long dans un fichier pdf, pouvoir s�lectionner la
>> lettre en d�but d'index semble une bonne id�e non ?)
>
> Toutaf�. En plus, cela me permet de parler des fichiers de style
> d'index, ce qui est rarement abord�... et c'est bien dommage !

Puisqu'on en parle, tu conseilles quoi comme r�f�rences pour aborder le
sujet ?

> � noter que xindy est sans doute beaucoup plus souple/puissant que
> makeindex mais comme je ne connais pas (encore) trop bien, je vais
> rester � l'�ge makeindex.
>

De toutes fa�ons ta propension � utiliser des outils d'un autre �ge est
l�gendaire ;-) (Je taquine, hein, moi je sais utiliser ni TikZ ni
PSTricks, donc je la ram�ne pas trop sur ce sujet...)

> et cela devrait �tre bon (normalement). Il y a juste un point qui
> m'�nerve un peu. C'est que lorsque le lien n'existe pas, le fait de
> cliquer sur la lettre renvoie au d�but du document. Une bonne �me
> conna�trait-elle une option cach�e de hyperref qui permettrait de se
> d�barrasser de ce comportement ?
>

Je connais pas, mais il est de notori�t� publique que la doc d'hyperref
n'est pas � jour, donc il est possible que �a existe et que je connaisse
pas et que j'ai m�me pas � me sentir coupable de pas conna�tre�!

� la place, je te propose d'utiliser nos mimines et le fichier aux :

\makeatletter
\newcommand\LabelLettre[1]{%
\immediate\write\@auxout{%
\global\noexpand\@namedef{index@lettre@#1}{}}%


\hypertarget{index-#1}{#1}%
}
\newcommand\RefLettre[1]{%

\@ifundefined{index@lettre@#1}{%
% \textcolor{gray}{#1}%
--%


}{%
\hyperlink{index-#1}{#1}%
}%
}

\makeatother

(La cha�ne de compilation passe donc � : pdflatex, makeindex, 2 fois pdflatex.)

Dans le cas o� la lettre n'est pas utilis�e, ici j'ai mis un tiret, on
peut aussi mettre la lettre en gris (en chargeant xcolor en plus de ton
pr�ambule), ou tout ce qu'on veut.

--
Manuel P�gouri�-Gonnard Institut de math�matiques de Jussieu
http://weblog.elzevir.fr/ http://people.math.jussieu.fr/~mpg/

pluton

unread,
Dec 8, 2009, 4:22:20 PM12/8/09
to
aïe, j'ai du boulot !! Qu'est-ce qui se passe dans le fichier
auxiliaire ?

merci

Manuel Pégourié-Gonnard

unread,
Dec 8, 2009, 4:30:36 PM12/8/09
to
pluton scripsit :

> a�e, j'ai du boulot !! Qu'est-ce qui se passe dans le fichier
> auxiliaire ?
>
Dans le version de Jean-C�me, rien de particulier. Dans la mienne, on
d�finit juste (globalement) la macro index@lettre@X si X est dans
l'index. Ensuite, dans la liste des lettres, quand on s'appr�te �
ajouter X, on v�rifie si index@lettrer@X est d�finie, de fa�on � savoir
si on peut cr�er un hyperlien vers X ou si �a va �chouer.

Jean-Côme Charpentier

unread,
Dec 8, 2009, 4:43:40 PM12/8/09
to
Manuel P�gouri�-Gonnard a �crit :

> Jean-C�me Charpentier scripsit :
>
>>> (quand un index est long dans un fichier pdf, pouvoir s�lectionner la
>>> lettre en d�but d'index semble une bonne id�e non ?)
>> Toutaf�. En plus, cela me permet de parler des fichiers de style
>> d'index, ce qui est rarement abord�... et c'est bien dommage !
>
> Puisqu'on en parle, tu conseilles quoi comme r�f�rences pour aborder le
> sujet ?

La seule r�f�rence que je connais un peu est le LaTeX Companion (2e
�dition). On a aussi le
man makeindex
mais je sens que je vais avoir une remarque acerbe en rapport avec l'�ge
de pierre !
Il y a un bouquin de Lamport sur le sujet mais je ne l'ai jamais eu
entre les mains.

>> � noter que xindy est sans doute beaucoup plus souple/puissant que
>> makeindex mais comme je ne connais pas (encore) trop bien, je vais
>> rester � l'�ge makeindex.
>>
> De toutes fa�ons ta propension � utiliser des outils d'un autre �ge est
> l�gendaire ;-) (Je taquine, hein, moi je sais utiliser ni TikZ ni
> PSTricks, donc je la ram�ne pas trop sur ce sujet...)

En fait, c'�tait un appel du pied vachement �l�gant qui visait les
utilisateurs de xindy.

> [...]


> � la place, je te propose d'utiliser nos mimines et le fichier aux :

J'avais eu l'id�e g�n�rale d'utiliser un fichier auxiliaire mais pas
de fa�on aussi rapide que ta solution. Avec tout �a, pluton va avoir un
index du tonnerre !

>
> Dans le cas o� la lettre n'est pas utilis�e, ici j'ai mis un tiret, on
> peut aussi mettre la lettre en gris (en chargeant xcolor en plus de ton
> pr�ambule), ou tout ce qu'on veut.

je pr�f�re un lien hyper-texte vers un page o� il y aurait �crit :
PAS D'ENTR�E POUR CETTE LETTRE, BANANE !
ce serait plus top !

Pour pluton.
Un fichier aux est un fichier auxiliaire (d'o� le nom) lu en d�but de
compilation d'un source (au moment de la rencontre du \begin{document}
et recr�� dans la suite de la compilation par certaines commandes (par
exemple \label pour les r�f�rences).
Manuel s'en sert pour indiquer quelles seront les lettres r�ellement
utilis�s dans l'index. � chaque rencontre de la commande, disons
\LabelLettre{Q}, il y aura �criture dans le fichier aux de la ligne :
\global\@namedef{index@lettre@Q}{}}%
Lors de la compilation suivante, le fichier aux sera lu, donc la ligne
ci-dessus sera ex�cut�e et donc la macro \index@lettre@Q va exister.
Dans l'environnement theindex, on trouve une ribambelle de commande
\RefLettre avec en particulier \RefLettre{Q}. Cette macro va tester si
la macro \index@lettre@Q existe et si c'est le cas, va afficher la
lettre et le lien hypertexte. Sinon, elle affiche ce qu'on veut et,
surtout ne fait pas de lien hypertexte.

Jean-C�me Charpentier

--
<mpg> les gens normaux choisissent souvent une conf qui donne un sens
�vident aux dessins sur leur morceau de mati�re, et du syst�me
d'exploitation dans le sens o� �a peut d�terminer indirectement
les configurations disponibles.
<moky> Cool, je suis un gars normal :)
<Olivier R.> Non, juste un belge normal, faut pas confondre :-� (tiens
moi je tire pas la langue droite, et c'est AlrGr+Shift+p)
-+- in fr.comp.text.tex -+-

pluton

unread,
Dec 8, 2009, 5:49:33 PM12/8/09
to

>   Un fichier aux est un fichier auxiliaire (d'où le nom) lu en début de

> compilation d'un source (au moment de la rencontre du \begin{document}
> et recréé dans la suite de la compilation par certaines commandes (par
> exemple \label pour les références).
>   Manuel s'en sert pour indiquer quelles seront les lettres réellement
> utilisés dans l'index. À chaque rencontre de la commande, disons
> \LabelLettre{Q}, il y aura écriture dans le fichier aux de la ligne :

>   \global\@namedef{index@lettre@Q}{}}%
> Lors de la compilation suivante, le fichier aux sera lu, donc la ligne
> ci-dessus sera exécutée et donc la macro \index@lettre@Q va exister.

>   Dans l'environnement theindex, on trouve une ribambelle de commande
> \RefLettre avec en particulier \RefLettre{Q}. Cette macro va tester si
> la macro \index@lettre@Q existe et si c'est le cas, va afficher la
> lettre et le lien hypertexte. Sinon, elle affiche ce qu'on veut et,
> surtout ne fait pas de lien hypertexte.

merci pour ces éclaircissements. Pour moi, ça devrait être un beau
défit !

Je vous tiens au courant.


pluton

unread,
Dec 9, 2009, 2:52:30 PM12/9/09
to
> Je vous tiens au courant.

bon, en fait, ça fonctionne terrible, je n'ai rien à faire à part
probablement adapter
à l'extension splitidx.... (ça devrait me prendre pas mal de temps je
crois).

Merci !

pluton

unread,
Dec 10, 2009, 9:13:22 AM12/10/09
to
hop voici ce que ça donne avec du pstricks ! c'est marrant !!

ça crée l'index en deux colonnes avec les lettres de l'alphabet en
haut sur
toute la largeur de la page, en gris ou ocre selon l'existence de la
lettre
dans l'index comme proposé par manuel.

1 - Glouglou.tex

\documentclass{book}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc} % à adapter
\usepackage[a4paper]{geometry}
\usepackage[dvips]{xcolor}


\usepackage{lmodern}
\usepackage{makeidx}
\usepackage[frenchb]{babel}

\usepackage{pstricks}
\usepackage{pstricks-add}
\usepackage
[backref,linktocpage=true,colorlinks=true,linkcolor=ocre,urlcolor=ocre,citecolor=ocre,dvips,bookmarks=true,pagebackref,breaklinks,a4paper]
{hyperref}

\definecolor{ocre}{RGB}{243,102,25}

\makeindex

% Raccourcis pour ne pas s'embêter


\newcommand\Index[1]{#1\index{#1}}
\newcommand\INdex[2]{#1\index{#2@#1}}
\newcommand\IndeX[2]{#1\index{#1#2}}

% Commande pour les liens

\newcommand\LabelLettre[1]{%
\hypertarget{index-#1}{#1}%
}

\newcommand\RefLettre[1]{%
\hyperlink{index-#1}{#1}%

}

% Redéfinition pour un index sur une seule colonne
% mais c'est un peu beuârk àmha.
% Plus mécanisme pour l'alphabet avec liens hyper-textes.
\makeatletter
\renewenvironment{theindex}
{%
% titre de section, réglage en-tête et pied de page

\@mkboth{\MakeUppercase\indexname}%
{\MakeUppercase\indexname}%
\thispagestyle{plain}%

\twocolumn[\@makeschapterhead{\indexname}

\RefLettre{Z}\vspace{24pt}]


\par\vspace{24pt}
% fin alphabet

% réglages pour la liste des entrée d'index

\if@twocolumn
\@restonecolfalse
\else
\@restonecoltrue
\fi
\columnseprule \z@
\columnsep 35\p@

\parindent\z@
\parskip\z@ \@plus .3\p@\relax
\let\item\@idxitem
}
{\clearpage}
\makeatother

\makeatletter
\renewcommand\LabelLettre[1]{%


\immediate\write\@auxout{%
\global\noexpand\@namedef{index@lettre@#1}{}}%
\hypertarget{index-#1}{#1}%
}

\renewcommand\RefLettre[1]{%
\@ifundefined{index@lettre@#1}{%
\psframebox
[linearc=0.1,linewidth=1pt,linecolor=gray,cornersize=absolute,framesep=3pt]
{\sffamily\textcolor{gray}{#1}}%
}{%
\hyperlink{index-#1}{\psframebox
[linearc=0.1,linewidth=1pt,linecolor=ocre,cornersize=absolute,framesep=3pt]
{\sffamily #1}}%
}%
}

\makeatother

\begin{document}
Il n'y a que \Index{sept} \Index{ans} que le \Index{premier}

\Index{Manuel} de \INdex{Référence}{Reference} \Index{PostScript} a
été \INdex{publié}{publie} et que les \Index{premiers}
\Index{produits} \Index{basés} sur le \Index{langage} PostScript ont
été présentés. En 1985, nous n'avions pas de \Index{raison}
d'\Index{envisager} les \Index{effets} à \Index{long} \Index{terme}


que le \IndeX{langage}{!PostScript} PostScript pourrait avoir sur le
\Index{monde} de l'\Index{imprimerie} et de

l'\INdex{édition}{edition}. À cette époque, il n'y avait pas de


\IndeX{standard}{!de description} de \Index{description} de

\Index{page} \Index{efficace}, les \Index{caractères}{caracteres} les
plus \Index{populaires} n'étaient \Index{utilisés}{utilises} qu'avec
des \Index{composeuses} \Index{spécialisées}{specialisees},
\Index{produire} des \Index{documents} de \IndeX{haute}{!qualité}
qualité était réservé aux \INdex{spécialistes}{specialistes}, et le
coût de \Index{production} de la plupart des moyens de
\Index{communication} écrite d'\Index{entreprise} était
\Index{prohibitif}.

\printindex
\end{document}


2 - StyleInd.ist

% sort order is ASCII, digits build a group
heading_prefix
"{\\sffamily \\LabelLettre{" % avant la lettre
heading_suffix
"}}\\par\\vspace{-6pt}\\hrulefill" % après la lettre


headings_flag 1 % >0 => cap., <0 => bas de casse

\\rmfamily


3 - Compilation.bat
latex Glouglou
makeindex -s StyleInd.ist Glouglou
latex Glouglou
latex Glouglou
dvips -N -t a4 glouglou
ps2pdf Glouglou.ps Glouglou.pdf

pluton

unread,
Dec 10, 2009, 9:30:35 AM12/10/09
to
évidement, je n'ai pas remplacé les commandes de Manuel mais je les ai
renommées \renewcommand
avec des \makeatletter \makeatother dans tous les sens. C'est très
certainement très mal !

Manuel Pégourié-Gonnard

unread,
Dec 10, 2009, 10:04:37 AM12/10/09
to
pluton scripsit :

> �videment, je n'ai pas remplac� les commandes de Manuel mais je les ai
> renomm�es \renewcommand

J'allais en faire le remarque...

> avec des \makeatletter \makeatother dans tous les sens. C'est tr�s
> certainement tr�s mal !

D'un point de vue strictement technique, �a n'a pas d'importance, mais
pour la lisibilit� du source, �a me para�t dangereux d'avoir deux
d�finitions d'une m�me commande dans un m�me pr�ambule alors qu'une
suffit. Tu peux �tre s�r que le jour o� tu voudras d�boguer quelque
chose, c'est la mauvaise d�finition que tu liras au mauvais moment :-)

0 new messages