Accueil > LaTeX > Index > Un index des sources primaires (3)

Un index des sources primaires (3)

mercredi 26 janvier 2011, par Maïeul

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.


[2Je ne trouve pas utile d’indexer les sources secondaires.

[3Du 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.

[4Oui, bon, ici il n’y a pas d’accent

[5Et non pas dans le fichier .bbx, comme je viens de le découvrir.

[6Le % indique l’invite de commande.

Un message, un commentaire ?

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)