Cela faisait un moment que je lisais régulièrement, chez les
utilisateurs de LaTeX, des propos expliquant que leur productivité
avait été grandement améliorée lorsqu’ils s’étaient mis à utiliser
des outils de programmation tels que les Makefile ou Git.
Cet été, j’ai finalisé un vieux projet qui m’a amené à produire des
pdf d’un livre rédigé en LaTeX dans une dizaine de formats, afin de
le rendre facile à lire sur toutes les tailles d’écran. Seuls les
en-têtes du livre changeaient, le contenu du livre étant dans un
fichier à part, appelé par une commande `\input{Texte}`. Reste que
taper une vingtaine de fois `lualatex` et le nom du fichier est assez
fastidieux, ce qui m’a poussé à m’intéresser de plus près aux
Makefile — et à les adopter ensuite pour mes productions scolaires
cette année. Pour Git en revanche, je le trouve peu adapté pour mon
utilisation professionnelle : je synchronise déjà tous mes fichiers
par Unison sur un système avec snapshots ZFS et je ne voyais pas bien
comment intégrer Git à tout cela. Pourtant, la gestion de version me
paraissait utile et j’ai opté pour un outil plus frugal, RCS qui fera
peut-être l’objet d’un article à venir.
Pour l’heure, mon propos est de décrire la manière dont les Makefile
m’ont permis d’améliorer ma productivité, lorsque je dois produire
parallèlement des documents en format classique et en format adapté
aux élèves dyslexiques, c’est-à-dire avec la police OpenDyslexic, un
agrandissement en format A3 et éventuellement un nombre de questions
et un barème adaptés.
J’ajoute à l’en-tête les lignes suivantes pour la police et
l’agrandissement :
Je modifie l’environnement avec lequel j’écris le corps de texte,
pour y insérer la police définie ci-dessus :
:::latex
% Environnement corpstexte pour police et numéros de ligne
%\newenvironment{corpstexte}{\fontfamily{jkplos}\selectfont\linenumbers\resetlinenumber}
\newenvironment{corpstexte}{\onehalfspacing\policedys\small\linenumbers\resetlinenumber}
S’il s’agit d’un questionnaire, je crée des variables qui me
permettront de définir dans l’en-tête s’il s’agit d’une version
classique, d’une version dyslexique ou d’un corrigé :
Les différents fichiers d’en-tête se terminent par
`\input{monControle-Texte}` qui va charger la partie commune. Cette
partie commune pourra intégrer des conditions portant sur les
variables créées dans l’en-tête, grâce au paquet ifthen.
- Pour modifier le barème de la question :
`\question[\ifthenelse{\boolean{dys}}{3}{2}] Ma question`
La question vaudra 3 points dans la version dyslexique et 2 points
dans l’autre.
- Pour ne poser une question qu’aux non-dyslexiques :
`\ifthenelse{\boolean{dys}}{}{\question[1] Ma question}`
Chaque question est accompagnée de sa réponse, mais celle-ci n’est
utilisée que par le fichier d’en-tête du corrigé, qui commence par
`\documentclass[11pt,a4paper,answers]{exam}`, alors que les versions
classiques et dyslexiques ne contiennent pas l’option `answers`.
La réponse est écrite dans un environnement
`\begin{solutionorlines}[9em]`
qui placera ici un espace vide de taille 9em dans la version contrôle
— pour que les élèves répondent — et la solution dans la version du
corrigé.
Pour construire ou reconstruire si nécessaires les versions
classique, dyslexique et corrigé et nettoyer les fichiers
intermédiaires, j’utilise donc un Makefile du type :
NOM = monControle
all : $(NOM).pdf $(NOM)-dys.pdf $(NOM)-corrigé.pdf
Le fait d’utiliser une variable pour le nom du contrôle me permet de
recopier le Makefile à chaque nouveau contrôle et de ne modifier que
la variable. Il me suffit alors de lancer un petit `make all` suivi
d’un `make clean` pour mettre à jour les trois fichiers d’un coup !