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 :
- Compilation avec XeLaTeX.
- Compilation avec Biber (ou BibTeX).
- Compilation avec XeLaTeX pour que les données bibliographiques soit intégrées dans l’index.
- Compilation avec Makeindex pour transformer le fichier .idx en .ind.
- Compilation avec XeLaTeX pour finir d’intégrer l’index dans le fichier.
On constate cependant deux problèmes :
- La bibliographie se trouve mêlées aux autres entrées de l’index.
- 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 :
- Limiter l’indexation aux sources primaires.
- 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
.
- 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. - ligne 3 nous indexons le champ
author
. Nous utilisons le format d’indexationsources
. - ligne4 nous indexons le champ
indextitle
. Si ce champ est videBibLaTeX
utilise à la place le champtitle
. Nous utilisons le format d’indexationsources
. - ligne 5nous indexons le champ
titleaddon
. Nous utilisons le format d’indexationsources
. - ligne 6nous indexons la valeur
---
dans le fichierxxx-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 :
- 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.
- Télécharger les deux scripts
index.py
etroman.py
dans le zip joint. - Mettre ces fichiers dans le répertoire de notre fichier .idx.
- Ouvrir le fichier
index.py
et modifier la ligne 8 en remplaçantxxx.idx
par le nom du fichier à concaténer. - 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 :
-
xelatex xxx.tex
-
biber xxx
-
xelatex xxx.tex
[1] -
python index.py
-
splitindex xxx
-
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.