ConTeXt/Utilisation des langages Perl et Python avec ConTeXt
Objectifs de cette section
Cette page présente l’usage complémentaire de Perl et Python dans un projet ConTeXt.
Elle explique :
- pourquoi utiliser Perl ou Python en amont de ConTeXt ;
- comment préparer, transformer ou analyser du texte avant la mise en page ;
- comment générer automatiquement du code ConTeXt ;
- comment intégrer Perl et Python dans une chaîne d’automatisation ;
- des exemples simples et avancés de scripts réellement utiles.
Utilisation des langages Perl et Python avec ConTeXt
[modifier | modifier le wikicode]Lua est intégré nativement à ConTeXt, mais il est fréquent d’utiliser également Perl ou Python pour préparer les données et automatiser la production.
Ces langages sont très efficaces pour :
- nettoyer ou normaliser des textes ;
- analyser des fichiers volumineux ;
- traiter des données (CSV, JSON, XML) ;
- générer automatiquement des fichiers
.tex; - automatiser les compilations et pipelines éditoriaux.
ConTeXt se charge ensuite de la mise en page, après traitement par Perl ou Python.
1. Utilisation de Perl pour préparer des textes
[modifier | modifier le wikicode]Perl est idéal pour le traitement de texte intensif et les expressions régulières. Il permet de nettoyer un manuscrit ou de générer automatiquement des commandes ConTeXt.
1.1 Exemple simple : normaliser les apostrophes
[modifier | modifier le wikicode]Script normaliser.pl :
#!/usr/bin/perl
use strict;
use warnings;
while (<>) {
s/'/’/g; # Remplace ' par l’apostrophe typographique
print;
}
Exécution :
perl normaliser.pl chapitre1.txt > chapitre1_cleaned.txt
1.2 Exemple plus complet : générer automatiquement des entrées d’index
[modifier | modifier le wikicode]Liste des noms à indexer : noms.txt
Aristote
Cicéron
Thomas d’Aquin
Script genindex.pl :
#!/usr/bin/perl
use strict;
use warnings;
open my $fh, "<", "noms.txt" or die $!;
while (my $nom = <$fh>) {
chomp $nom;
print "\\index{$nom}\n";
}
close $fh;
Sortie :
\index{Aristote}
\index{Cicéron}
\index{Thomas d’Aquin}
1.3 Intégration dans un pipeline ConTeXt
[modifier | modifier le wikicode]perl normaliser.pl manuscrit.txt > manuscrit_cleaned.txt
perl genindex.pl > autoindex.tex
mtxrun --script context main.tex
2. Utilisation de Python dans un workflow ConTeXt
[modifier | modifier le wikicode]Python est excellent pour la manipulation de données, la génération de tableaux, et les outils d’analyse.
2.1 Exemple simple : convertir un CSV en tableau ConTeXt
[modifier | modifier le wikicode]Fichier CSV : tableau.csv
Nom;Âge;Ville
Marie;32;Lyon
Jean;45;Bordeaux
Lucie;28;Paris
Script csv2tex.py :
import csv
with open("tableau.csv", encoding="utf-8") as f:
reader = csv.reader(f, delimiter=";")
print("\\starttabulate[|l|c|l|]")
for row in reader:
print("\\NC " + " \\NC ".join(row) + " \\NR")
print("\\stoptabulate")
Exécution :
python csv2tex.py > tableau.tex
À inclure dans ConTeXt :
\input tableau.tex
2.2 Exemple avancé : génération d’un rapport complet
[modifier | modifier le wikicode]Script genrapport.py :
from datetime import datetime
data = [
("Chapitre 1", 1243),
("Chapitre 2", 987),
("Chapitre 3", 1432),
]
with open("rapport.tex", "w", encoding="utf-8") as f:
f.write("\\starttext\n")
f.write(f"Rapport généré le {datetime.now():%d/%m/%Y}.\\par\n\n")
total = sum(x[1] for x in data)
f.write(f"Total de mots : {total}.\\par\n\n")
f.write("\\startitemize\n")
for nom, mots in data:
f.write(f"\\item {nom} — {mots} mots\n")
f.write("\\stopitemize\n\n")
f.write("\\stoptext\n")
Exécution :
python genrapport.py
mtxrun --script context rapport.tex
3. Quand choisir Lua, Perl ou Python ?
[modifier | modifier le wikicode]| Tâche | Lua | Python | Perl |
|---|---|---|---|
| Interaction interne avec ConTeXt | ★★★★★ | ★☆☆☆☆ | ★☆☆☆☆ |
| Prétraitement du texte | ★★☆☆☆ | ★★★☆☆ | ★★★★★ |
| Données (CSV/JSON/XML) | ★★☆☆☆ | ★★★★★ | ★★★★☆ |
| APIs / Web | ★☆☆☆☆ | ★★★★★ | ★★☆☆☆ |
| Pipelines éditoriaux | ★★★☆☆ | ★★★★☆ | ★★★★☆ |
Résumé :
- Lua : pour interagir directement avec ConTeXt.
- Perl : pour nettoyer et analyser du texte.
- Python : pour gérer des données structurées et générer des annexes.
💡 Astuce
Pour garder une structure propre, placez tous vos scripts dans un dossier dédié, par exemple scripts/ ou python/.
Documentez leur usage dans un fichier README.
⚠ Problème courant
Les erreurs d’encodage proviennent presque toujours d’un texte en ISO-8859 ou Windows-1252.
Vérifiez toujours que vos fichiers source sont en UTF-8.
❗ Avertissement
Python et Perl ne doivent pas être placés dans modules/.
ConTeXt pourrait tenter de les charger comme du code TeX.