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 champAuthor
- le titre, à partir du champ
indextitle
, sinon à partir du champtitle
- éventuellement la page, à partir de la valeur du paramètre
postnote
quand on cite [3], sinon à partir du champpages
. - 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.