Chargement...

Billet de blog

Générer des documents pour des audiences différentes à partir d'une unique source TeX

 Chargement de l'article en cours ...

Dans cet article, nous nous placerons dans le cas d’un enseignant qui souhaiterait produire plusieurs variantes d’un même document avec LaTeX (par exemple, une variante à destination des élèves et une variante à destination du professeur). Afin de limiter la multiplication des fichiers sources, nous aurons recours au paquet Multiaudience pour LaTeX et tenterons d’automatiser la production de ces différentes variantes à l’aide de Python.


Problématique

Lorsque l’on souhaite créer plusieurs versions d’un même document, l’option la plus répandue (et très sûrement la plus rapide de prime abord) est celle du “copier-coller”. On se retrouve alors avec autant de fichiers sources que de variantes. Cela prend de la place pour rien, mais soit. Imaginons à présent que ce même enseignant veuille modifier un paragraphe ou une image dans le document original qui, rappelons-le, a ensuite été dupliqué de nombreuse fois. Il doit ainsi effectuer cette modification dans chacun des documents sources. Pas très pratique…

C’est pour éviter cela que LaTeX et le paquet Multiaudience entrent en jeu. L’objectif est donc, avec ces outils, d’avoir un unique fichier .tex source contenant toutes les variantes (que nous appellerons “audiences”). Nous verrons dans la suite de cet article l’utilisation de ce paquet suivie d’un peu de Python pour automatiser la génération des documents.

Le paquet Multiaudience

 Principe de fonctionnement

Le paquet Multiaudience (disponible sur CTAN  ici) développé par Boris Veytsman permet de créer différentes variantes d’un même document pour différentes audiences. En créant le document, vous pourrez définir différentes audiences dans l’entête du fichier .tex. Dans le corps du document, vous pourrez ensuite créer des environnements en précisant à quelle(s) audience(s) la partie de texte est destinée. Enfin, lors de la compilation, vous pourrez préciser au compilateur l’audience souhaitée.

 Syntaxe de base

Voici un exemple minimaliste permettant de générer un même document pour deux audiences : “prof” et “eleve”.

Avec cet exemple basique, vous serez en mesure de créer un fichier pdf à destination de chaque audience, et ce, à partir d’un seul fichier source. Il faudra pour cela changer à chaque fois la ligne \def\CurrentAudience{...} en précisant l’audience souhaitée, puis compiler.

Cependant, cette opération peut se révéler contraignante, surtout avec un grand nombre d’audiences. Dans la partie suivante, nous allons donc essayer d’automatiser le processus de compilation à l’aide de Python.

Automatisation avec Python

Si vous aimez mettre les mains dans le cambouis, cette partie est faite pour vous. Mais si vous préférez directement utiliser une solution clé en main, vous pouvez passer à la dernière partie “Le logiciel MultiCompile“.

Nous allons ici nous baser sur le fait que la compilation d’un document LaTeX est déclenchée à l’aide d’une ligne de commande exécutée dans la console de votre système d’exploitation (c’est ce que fait, de manière déguisée, votre éditeur LaTeX favori). Grâce à Python, nous pourrons automatiser cette exécution. On utilise pour cela la fonction call de la librairie subprocess pour appeler la commande au format suivant :

compilateur -jobname=nom_de_sortie options

Voici donc le script Python pour générer un document pdf associé à chaque audience. Le code est commenté afin d’y décrire les différentes étapes :

Vous pouvez télécharger le script avec le fichier exemple  ici ou le consulter sur Github  ici.

Pour l’utiliser, il vous faudra modifier les lignes suivantes :

  • ligne 7 : préciser le moteur de compilation choisi (pdflatex, xelatex, lualatex…) ;
  • ligne 8 : préciser le chemin de l’emplacement de votre fichier .tex ;
  • ligne 9 : préciser le nom de votre fichier .tex.

Une fois le script exécuté, vous retrouverez les documents pdf générés au même emplacement que votre fichier .tex.

Même si nous avançons dans l’automatisation du processus de génération des documents, l’appel au script Python reste encore peu pratique puisqu’il faut à chaque fois modifier les variables (emplacement, nom du fichier…).

Le logiciel MultiCompile

MultiCompile est un logiciel développé en Python dont l’objectif est de simplifier l’utilisation du script précédent et de lui ajouter une interface graphique. Ainsi, la sélection des emplacements est simplifiée et permet une sélection multiple afin de compiler plusieurs sources à la suite. Pour chacune de ces sources, MultiCompile s’occupe de générer un document pour chaque audience.

Si cela vous intéresse, le logiciel et sa documentation sont disponibles  ici.

Il reste encore beaucoup de points à améliorer (nombreux bugs, répartition des tâches sur différents threads…). Mais en l’état, la version présente est utilisable et permet un gain de temps non négligeable pour la génération de plusieurs documents LaTeX à la suite (avec ou sans audiences).

Si vous avez des remarques sur l’article ou sur le logiciel MultiCompile, n’hésitez pas à utiliser l’espace de commentaires mis à disposition du cette page. Je les lirai et répondrai avec grand plaisir !

  Modifié le : 08/08/2023 09:36:35