Aller au contenu

ConTeXt/Utilisation des langages Perl et Python avec ConTeXt

Un livre de Wikilivres.
En travauxlink={{{link}}}

Cette page est en travaux. Tant que cet avis n'aura pas disparu, veuillez en considérer le plan et le contenu encore incomplets, temporaires et sujets à caution. Si vous souhaitez participer, il vous est recommandé de consulter sa page de discussion au préalable, où des informations peuvent être données sur l'avancement des travaux.

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âcheLuaPythonPerl
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.