Aller au contenu

ConTeXt/Bibliographie et index/Index

Un livre de Wikilivres.

ConTeXt


 Page précédente : Bibliographie et index

Part. IV, ch. 11  •  Index manuel, index automatisé  •  Sommaire

 

Index manuel, index automatisé

[modifier | modifier le wikicode]

Objectifs de cette page

  • Comprendre à quoi sert un index et dans quels cas il est indispensable.
  • Créer un index manuel simple dans ConTeXt.
  • Structurer des entrées hiérarchiques (entrée / sous-entrée).
  • Gérer plusieurs index (auteurs, notions, œuvres, lieux).
  • Comprendre les principes de l’indexation automatisée (Python, Lua, Perl).
  • Mettre en place une méthode fiable pour les documents longs.

1. À quoi sert un index ?

[modifier | modifier le wikicode]

Un index est un outil de navigation transversale dans un ouvrage. Il permet au lecteur de retrouver rapidement :

  • une notion ;
  • un auteur ;
  • une œuvre ;
  • un lieu ;
  • un terme technique.

Contrairement à la table des matières, l’index **ne reflète pas la structure du texte**, mais les **points d’entrée possibles pour le lecteur**.

Tous les ouvrages ne possèdent pas d’index. Cependant, dans les cas suivants, il devient souvent indispensable :

Type d’ouvrage Rôle de l’index
Manuel, ouvrage pédagogique Fortement recommandé
Thèse, ouvrage savant étendu Presque indispensable
Édition critique, corpus Essentiel
Roman, nouvelles Jamais
Essais historiques cf. Ouvrages savants
Essais philosophiques Parfois

2. Index manuel et index automatisé

[modifier | modifier le wikicode]

On distingue deux grandes approches :

  • index manuel : l’auteur décide explicitement quelles occurrences sont indexées ;
  • index automatisé : un script génère automatiquement les entrées à partir de listes ou de règles.

Dans la pratique, les projets sérieux combinent souvent les deux.

3. Index manuel dans ConTeXt

[modifier | modifier le wikicode]

3.1 Créer un index simple

[modifier | modifier le wikicode]

Dans le texte :

Kant\index{Kant}

En fin de document :

\placeindex

ConTeXt produit alors un index alphabétique normalisé.

3.2 Entrées hiérarchiques (entrée / sous-entrée)

[modifier | modifier le wikicode]
\index{Philosophie!Antique}
\index{Philosophie!Moderne}

Sortie typique :

Philosophie
  Antique, 12
  Moderne, 98

Ce mécanisme est particulièrement adapté aux notions et aux thèmes.

4. Plusieurs index dans un même document

[modifier | modifier le wikicode]

Pour les ouvrages complexes, il est préférable de séparer les registres.

\defineindex[Auteurs]
\defineindex[Notions]
\defineindex[Oeuvres]
\defineindex[Lieux]

Dans le texte :

Aristote\Auteurs{Aristote}
vertu\Notions{vertu}
Poétique\Oeuvres{Poétique}
Athènes\Lieux{Athènes}

Insertion :

\placeAuteurs
\placeNotions
\placeOeuvres
\placeLieux

Cette séparation améliore considérablement la lisibilité de l’index.

5. Index et Unicode

[modifier | modifier le wikicode]

ConTeXt gère les index en UTF-8 :

  • accents français ;
  • alphabet grec ;
  • cyrillique ;
  • autres écritures non latines.

Pour dissocier tri et affichage :

\index{λόγος@logos}

Affichage : « λόγος » Tri : « logos »

6. Problèmes fréquents et bonnes pratiques

[modifier | modifier le wikicode]

Une entrée n’apparaît pas

[modifier | modifier le wikicode]
  • espace parasite dans la commande ;
  • problème Unicode ;
  • compilation insuffisante (au moins deux passes).

Une entrée est mal classée

[modifier | modifier le wikicode]
\index{Œdipe@Oedipe}

Une entrée apparaît sous plusieurs formes

[modifier | modifier le wikicode]

Il faut normaliser les formes canoniques.

Astuce Définissez un fichier séparé (par exemple liste-index.tex) contenant les formes canonisées, puis importez-le au début du document :

\input liste-index.tex

7. Pourquoi automatiser un index ?

[modifier | modifier le wikicode]

Pour des documents longs (manuels, thèses, corpus, ouvrages collectifs), l’indexation manuelle devient vite impraticable.

Un index automatisé permet de :

  • gagner du temps ;
  • assurer une cohérence globale ;
  • produire plusieurs index à partir de listes contrôlées.

Mais il ne dispense jamais d’une relecture humaine.

8. Principe général de l’indexation automatisée

[modifier | modifier le wikicode]

Le principe est toujours le même :

  1. définir une liste contrôlée de termes ;
  2. parcourir le fichier source ;
  3. insérer automatiquement des commandes d’index ;
  4. relire et nettoyer le résultat ;
  5. compiler ConTeXt en plusieurs passes.

Les outils les plus courants sont Python, Lua et Perl.

9. Index automatisé avec Python (explication du code)

[modifier | modifier le wikicode]

Python est souvent choisi parce qu’il est lisible, portable, et très pratique pour manipuler des fichiers texte. Le principe de ce type d’automatisation est simple :

  1. on lit le fichier source ConTeXt (input.tex) ;
  2. on repère les occurrences de certains termes (liste contrôlée) ;
  3. on insère automatiquement \index{...} ;
  4. on écrit un nouveau fichier (output.tex) que l’on compile ensuite.
import re

# Liste des termes à indexer (vocabulaire contrôlé)
terms = ["Aristote", "Platon", "vertu"]

# 1) Lecture du fichier source ConTeXt en UTF-8
with open("input.tex", "r", encoding="utf-8") as f:
    text = f.read()

# 2) Insertion d'une commande \index{...} après chaque occurrence
for t in terms:
    # Mot entier : \b...\b (évite "vertu" dans "vertueuse")
    # re.escape(t) : protège les caractères spéciaux si un terme en contient
    # (?!\\index\{) : évite d’indexer si \index{...} suit déjà immédiatement
    pattern = rf"\b{re.escape(t)}\b(?!\\index\{{)"
    replacement = rf"{t}\\index{{{t}}}"
    text = re.sub(pattern, replacement, text)

# 3) Écriture du fichier de sortie
with open("output.tex", "w", encoding="utf-8") as f:
    f.write(text)

9.2 Explication ligne par ligne

[modifier | modifier le wikicode]
import re
On importe le module re (regular expressions), qui permet de faire des recherches/remplacements plus précis que replace().
terms = [...]
C’est la liste des mots (ou expressions) que l’on décide d’indexer.
En pratique, on construit cette liste à partir d’un vocabulaire contrôlé (auteurs, notions, œuvres, lieux).
open(..., encoding="utf-8")
On lit le fichier en UTF-8, indispensable pour les accents et les alphabets non latins.
text = f.read()
On charge tout le contenu du fichier dans une variable text (une grande chaîne de caractères).
for t in terms:
On traite chaque terme à indexer l’un après l’autre.
pattern = ... (c’est le point important)
\b signifie « frontière de mot » : on évite d’indexer un terme à l’intérieur d’un autre mot
(ex. vertu ne déclenche pas dans vertueuse).
re.escape(t) protège un terme si celui-ci contient des caractères spéciaux (parenthèses, points, etc.).
(?!\\index\{) est une « condition négative » : on refuse de remplacer si la commande \index{ suit déjà immédiatement, ce qui limite la double indexation.
replacement = ...
On reconstruit le texte en gardant le terme, puis en ajoutant une commande ConTeXt juste après :
Aristote devient Aristote\index{Aristote}.
Pourquoi \\index et pourquoi {{ }} ?
En Python, le caractère \ est spécial : pour produire un seul antislash dans le fichier TeX, on écrit \\.
Dans les chaînes formatées (f"..."), les accolades servent à insérer des variables.
Pour écrire des accolades littérales { et } (celles de \index{...}), on les double : {{ et }}.

9.3 Exemple (avant / après)

[modifier | modifier le wikicode]

Avant (input.tex) :

Aristote développe une théorie de la vertu. Platon discute la vertu autrement.

Après (output.tex) :

Aristote\index{Aristote} développe une théorie de la vertu\index{vertu}.
Platon\index{Platon} discute la vertu\index{vertu} autrement.

9.4 Utilisation

[modifier | modifier le wikicode]
  1. Sauvegarder le script dans indexer.py.
  2. Mettre le manuscrit dans input.tex.
  3. Lancer :
python indexer.py
  1. Compiler ensuite :
context output.tex

(Remarque : on relance souvent ConTeXt au moins une seconde fois pour stabiliser index et références.)

9.5 Limites (à connaître)

[modifier | modifier le wikicode]

Même bien écrit, ce script reste une automatisation :

  • il ne comprend pas le sens (homonymies, emplois non pertinents) ;
  • il ne sait pas quelles occurrences sont réellement importantes ;
  • il peut indexer des zones que l’on ne souhaite pas (titres, légendes, code, bibliographie).

Conclusion : un index automatisé est fiable **si** l’on contrôle la liste des termes, et si l’on relit/épure le résultat.

10. Lua et Perl : quand les utiliser ?

[modifier | modifier le wikicode]
  • Lua est intégré à ConTeXt et permet des traitements internes,
 mais il demande une bonne maîtrise de l’écosystème ConTeXt.
  • Perl est apprécié pour les traitements massifs et les expressions régulières,
 notamment dans des chaînes d’outils Unix.

Quel que soit l’outil, l’automatisation doit rester **au service d’une stratégie éditoriale**.

11. Méthode recommandée pour un index fiable

[modifier | modifier le wikicode]
  1. rédiger le texte ;
  2. établir un vocabulaire contrôlé ;
  3. automatiser l’insertion des entrées ;
  4. relire et corriger manuellement ;
  5. compiler ConTeXt ;
  6. valider l’index final.

Un index automatisé n’est jamais entièrement automatique : il est assisté par la machine, contrôlé par l’auteur.