Index des sources primaires avec Splitindex et BibLaTeX

samedi 2 juillet 2011, mise à jour mercredi 8 août 2012, par Maïeul
Suivre la vie du site RSS 2.0 Forum

J’ai déjà publié un article sur la manière de faire un index des sources primaires en utilisant le package index.

Voici une nouvelle version en utilisant le package splitindex.

En outre, cet article se base, pour la question des des divisions des sources antiques, sur mon dernier article à ce sujet. L’avantage : contrairement au package index, il suffit d’une seule compilation avec splitindex plutôt qu’une compilation avec makeindex pour chaque fichier d’indexation brute.

Cet article (sauf la présente introduction) est un extrait de mon prochain livre sur l’utilisation de LaTeX en sciences humaines. Je vous invite donc à donner vos commentaires.

Nous allons maintenant voir comment utiliser les possibilités de biblatex et de splitindex pour établir un index des sources primaires.

Pour comprendre cette section, vous devez vous êtes familiarisé avec les indications sur les macros bibliographiques.

Premier essai

La documentation de biblatex nous informe qu’il existe au chargement du package une optionindexing qui permet d’indexer automatiquement les références bibliographiques. Comme nous nous souhaitons indexer que lors des appels aux commandes \PREFIXcite — non pas lors de l’appel à la commande \printbibliography — nous donnons la valeur cite à cette option.

\usepackage[indexing=cite]{biblatex}

Étant donné qu’il faut à la fois interpréter le fichier .bib et faire un index, nous devons procéder aux compilations dans l’ordre suivant :

  1. Compilation avec XeLaTeX.
  2. Compilation avec Biber (ou BibTeX).
  3. Compilation avec XeLaTeX pour que les données bibliographiques soit intégrées dans l’index.
  4. Compilation avec Makeindex pour transformer le fichier .idx en .ind.
  5. Compilation avec XeLaTeX pour finir d’intégrer l’index dans le fichier.

On constate cependant deux problèmes :

  1. La bibliographie se trouve mêlées aux autres entrées de l’index.
  2. Plus grave : aux lieux d’avoir des entrées sous la forme : Auteur!Titre, nous avons des entrées pour les auteurs et des entrées pour les sources.

En outre nous aimerions :

  1. Limiter l’indexation aux sources primaires.
  2. Indexer aussi, comme troisième niveau d’index, le champ titleaddon qui nous sert pour les division de source.

Création d’un index spécifique

Pour créer un index spécifique aux sources, rien de particulier : il suffit d’utiliser splitindex et la commande suivante :

\newindex[Index des sources]{sources}

Modifications des macros de BibLaTeX

Nous avons donc notre index spécifique. Mais encore faut-il que nous disions à biblatex d’y écrire son index. Pour ce faire nous allons d’abord redéfinir la macro citeindex qui est appelée à chaque commande \PREFIXcite.

  1. ligne 2 la commande \commandeifciteindex vérifier que l’option \optionindexing de biblatex est bien égale à true ou bien à cite. Ce qui suit entre accolades est exécuté dans ce cas.
  2. ligne 3 nous indexons le champ author. Nous utilisons le format d’indexation sources.
  3. ligne4 nous indexons le champ indextitle. Si ce champ est vide BibLaTeX utilise à la place le champ title. Nous utilisons le format d’indexation sources.
  4. ligne 5nous indexons le champ titleaddon. Nous utilisons le format d’indexation sources.
  5. ligne 6nous indexons la valeur --- dans le fichier xxx-source.idx. Cette valeur servira plus tard lors de l’exécution d’un script python. En effet, une des limitations de biblatex est qu’il ne peut indexer qu’un seul champ à la fois, et n’est pas capable, pour le moment, de produire des entrées d’index du type \index{Champ1!Champ2!Champ3}. Pour contourner cela, nous avons conçu un script qui concaténe dans le fichier .idx trois indexations en une seule indexation. Pour que ce script ne concaténe pas ensemble des indexations qui ne doivent pas être concaténée, nous écrivons des fausses indexations sous la forme ---, qui serviront de point de repère au script.

Fomat d’indexation BibLaTeX

Nous avons dit que nous utilisions les formats d’indextation source. Un format d’indexation BibLaTeX est simplement une description de l’opération que BibLaTeX effectue lorsqu’il doit indexer un champ.

Il nous faut donc définir ce format.

Indexation des noms

\DeclareIndexNameFormat{sources}{%
  \usebibmacro{index:name}{\sindex[sources]}{#1}{#3}{#5}{#7}
  }

Nous disions en première ligne que nous déclarions un format d’indexation sources pour les noms propres. Dans la ligne suivante, nous déclarons ce que nous faisons : nous appelons une macro index:name. Cette macro est déjà définie par biblatex. Elle reçoit plusieurs argument. Le première argument est la commande à exécuter : ici \sindex[sources], qui permet d’indexer dans l’index source définis plus haut. Les autres arguments sont repris des codes de biblatex est désigne les différentes parties du nom à index.

Indexation des autres champs

\DeclareIndexFieldFormat{sources}{%
  \ifcurrentfield{indextitle}{\sindex[sources]{#1@\emph{#1}}}%
  {\sindex[sources]{#1}}%
  }

La commande \DeclareIndexFiledFormat sert à déclarer la manière d’indexer le champs qui ne sont ni des listes ni des noms. La valeur #1 correspond à la valeur du champ à indexer. En deuxième ligne, nous vérifions que le champ à indexer à est indextitle : si c’est le cas, nous l’indexons dans l’index source en mettant l’emphase sur le titre pour l’affichage final. Sinon, nous l’indexons simplement dans l’index source.

Compilation et concaténation des index

Après la compilation XeLaTeX, nous obtenons un fichier xxx.idx. Si vous l’ouvrez vous constatez que nous avons des entrées sous la forme :

\indexentry[sources]{Author}{page}
\indexentry[sources]{Titleindex@\emph  {Titleindex}}{page}
\indexentry[sources]{Titleaddon}{page}
\indexentry[sources]{---}{page}

Nous souhaitons remplacé ces entrées par des entrées sous la forme

\indexentry[sources]{Author@Author!Titleindex@\emph  {Titleindex}!Titleaddon@Titleaddon}{page}

L’auteur de ces lignes a développé un script permettant d’automatiser cette transformation. Par ailleurs ce script modifie également l’ordre des tri pour ne pas tenir compte des accents, et pour avoir un tri correcte des valeurs numériques (depuis la version 2.3).

Pour utiliser ce script, il vous faut :

  1. Avoir le logiciel Python installé sur votre ordinateur. Ce logiciel est installé en standard sous Mac Os X et sur la plupart des distributions Linux, mais pas sous Windows.
  2. Télécharger les deux scripts index.py et roman.py dans le zip joint.
  3. Mettre ces fichiers dans le répertoire de notre fichier .idx.
  4. Ouvrir le fichier index.py et modifier la ligne 8 en remplaçant xxx.idx par le nom du fichier à concaténer.
  5. En ligne de commande se rendre dans le répertoire, puis taper l’entrée : python index.py.

Après cette concaténation nous devons compiler en ligne de commande, enfin de séparer les différents index :

splitindex xxx

Raffinement

Nous souhaitons n’indexer que les sources primaires. La solution la plus simple est d’utiliser dans le fichier .bib un champ personnalisé usera. BibLaTeX permet en effet à l’utilisateur d’utiliser librement un certain nombre de champ. Dans ce champ, mettre 1 si l’entrée est une source primaire, 2 si l’entrée est une source secondaire.

Il nous suffit de modifier la macro citeindex, en introduisant un test (ligne 2) sur la valeur du champ usera.

\renewbibmacro{citeindex}{%
  \ifciteindex{%
  \iffieldequalstr{usera}{1}{%
    \indexnames[sources]{author}%
     \indexfield[sources]{indextitle}%
     \indexfield[sources]{titleaddon}%
     \sindex[sources]{---}%
     }{}}%
    {}}

Résumé des diverses compilations

Pour obtenir un index des sources primaires, une fois tout les fichiers mis en place, il nous faut donc procéder dans le terminal aux opérations suivantes :

  1. xelatex xxx.tex
  2. biber xxx
  3. xelatex xxx.tex [1]
  4. python index.py
  5. splitindex xxx
  6. xelatex xxx

Évidemment, l’ensemble de ces opérations peut être fastidieuse à se souvenir, à refaire etc. C’est pourquoi il est conseillé, pour les personnes travaillant sous Linux et Mac Os X d’utiliser un programme nommé make [2].

L’idée du programme make est de décrire dans un fichier les opérations nécessaires au passage d’un ensemble de fichier a vers un fichier b. Le programme make exécute ces opérations uniquement si les fichiers a ont été modifiés. En outre make permet de faire des tests pour éviter de compiler deux fois si cela n’est pas utile. Notre livre n’est pas assez long pour expliquer comment se servir de make.

P.-S.

Depuis le 9 août, le projet est devellopé sur Github, licence Creative Commons - Paternité - Partage des Conditions Initiales à l’identique.

Documents joints

Notes

[1Si un sommaire se situe en début d’ouvrage, il peut être nécéssaire de compiler plusieurs fois.

[2Pour les utilisateurs de Windows, il est possible, moyennant certaines techniques, d’installer ce programme.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Acheter XeLaTeX appliqué aux sciences humaines

À propos

Titulaire d’un doctorat en théologie et d’un doctorat en histoire, sous la direction conjointe de Frédéric Amsler et d’Élisabeth_Malamut, je commence à partir du 1er août 2017 un travail d’édition critique des Actes de Barnabé.

Dans le cadre de la rédaction de mon mémoire de master puis de ma thèse de doctorat, j’ai été emmené à utiliser LaTeX, et j’ai donc décider de partager mes techniques. En effet, au cours de mes premiers apprentissages, j’ai découvert que les ressources indiquant les outils pour l’utilisation de LaTeX en sciences humaines étaient rares. Ceci m’a conduit à maintenir ou créer plusieurs packages LaTeX et à donner plusieurs formations.

J’ai reçu en 2018 le prix DANTE e.V pour mon travail autour de LaTeX, en particulier autour de reledmac et reledpar.

Par ailleurs, je suis membre actif de la communauté SPIP, au sein de laquelle j’administre le site Spip-Contrib. Je propose sur ce site quelques notes sur SPIP, en général à destination de webmestre.

Il m’arrive également de faire un petit peu de Python, de temps en temps.

Enfin, je tiens un blog de réflexions politiques et religieuses.

Maïeul