Accueil > LaTeX > Index > Un index des sources primaires (3)
Un index des sources primaires (3)
mercredi 26 janvier 2011, par
J’avais proposé il y a peu une méthode pour indexer les sources primaires en deux articles [1].
Je n’étais pas très satisfait de ce que j’avais fait, voici une meilleure méthode.
Limites de la précédente méthode
- Pas d’indexation de l’endroit précis.
- Un code Python qui analyse un fichier de BibTex avec un module externe :
- Complexe à maintenir.
- Complexe à personnaliser.
- Mal codé, et truffé de bugs potentiels liés à toutes les subtilités du format
.bib
que je ne maîtrise pas encore parfaitement.
Nouvelle méthode : le principe
Chaque fois qu’une source primaire est citée [2], on indexe dans un fichier d’indexation :
– l’auteur, à partir du champ Namea
, sinon du champ Author
– le titre, à partir du champ indextitle
, sinon à partir du champ title
– éventuellement la page, à partir de la valeur du paramètre postnote
quand on cite [3], sinon à partir du champ pages
.
– Une fausse entrée ---
Puis le script Python est exécuté pour lire le fichier d’indexation. Les fausses entrées vont lui permettre de délimiter les les blocs de références, et de les concaténer en un seul morceau.
Par exemple, LaTex + BibLaTex produit, grâce à mes commandes, dans mon fichier d’indexation :
\indexentry {Pseudo-Augustin}{1}
\indexentry {Sermon \incipit {Fratres carissimi, unum rei documentum} (Caillau \cRM {2}, 27)}{1}
\indexentry {4}{1}
\indexentry {---}{1}
Après passage du script Python, j’obtiens à la place :
\indexentry {Pseudo-Augustin@Pseudo-Augustin!Sermon \incipit {Fratres carissimi, unum rei documentum} (Caillau \cRM {2}, 27)@Sermon \incipit {Fratres carissimi, unum rei documentum} (Caillau \cRM {2}, 27)!4@4}{1}
qui sera automatiquement inteprété par MakeIndex.
Notez que le script s’occupe tout seul de supprimer les accents pour choisir l’entrée [4].
Les avantages
– Pas besoin de relire le fichier de bibliographie avec Python.
– La majeure partie du traitement est laissé à LaTex.
– Pas besoin d’un module Python spécifique.
Concrètement
Il faut mettre ce code dans son fichier .tex
[5].
\renewbibmacro{citeindex}{%
\iffieldequalstr{usera}{1}{
\ifciteindex{%
%Index l'auteur
\ifnameundef{namea}{%
\indexnames[sources]{author}}%
{\indexnames[sources]{namea}}
\iffieldundef{indextitle}{%
\indexfield[sources]{title}%
}%
{%
\indexfield[sources]{indextitle}%
}%
\iffieldundef{postnote}{
\indexfield[sources]{pages}}%
{\indexfield[sources]{postnote}}%
}{}%
\index[sources]{---}
}{}
}
\DeclareIndexNameFormat{sources}{%
\usebibmacro{index:name}{\index[sources]}{#1}{#3}{#5}{#7}%
}%
\DeclareIndexFieldFormat{sources}{%
\index[sources]{#1}%
}
J’ai choisi d’utiliser le champ usera
pour signaler si on a affaire à une source.
Il faut également déclaré qu’on souhaite un index spécial :
\usepackage{index}
\makeindex
\newindex{sources}{sox}{sod}{Index des sources}
Ensuite, il suffit d’utiliser le script Python ci-joint.
Pour cela :
– avoir Python installé (c’est le cas avec la plupart des distribs Linux et avec OsX)
– placer le script à côté du fichier principal et du fichier d’indexation (qui normalement sont au même endroit).
– se rendre avec l’invite de commande dans le dossier
– exécuter la commande suivante : % python index2.py
[6].
Et ce après avoir compilé une premier fois en LaTeX, puis en BibTeX, puis en LaTeX.
[2] Je ne trouve pas utile d’indexer les sources secondaires.
[3] Du coup, on ne peut pas mettre autre chose que le numéro, mais je ne pense pas que cela soit limitatif pour les sources primaires.
[4] Oui, bon, ici il n’y a pas d’accent
[5] Et non pas dans le fichier .bbx
, comme je viens de le découvrir.
[6] Le % indique l’invite de commande.