LaTeX pour dyslexiques

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 :

% Police
\newfontfamily\policedys[Ligatures=TeX]{Open Dyslexic}

% Agrandissement
\pgfpagesuselayout{resize to}[a3paper,landscape]

Je modifie l’environnement avec lequel j’écris le corps de texte, pour y insérer la police définie ci-dessus :

% 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é :

\newboolean{correction}
\newboolean{dys}
\setboolean{dys}{true}
\setboolean{correction}{false}

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

$(NOM).pdf : $(NOM).tex $(NOM)-Texte.tex
        lualatex $(NOM).tex
        lualatex $(NOM).tex

$(NOM)-dys.pdf : $(NOM)-dys.tex $(NOM)-Texte.tex
        lualatex $(NOM)-dys.tex
        lualatex $(NOM)-dys.tex

$(NOM)-corrigé.pdf : $(NOM)-corrigé.tex $(NOM)-Texte.tex
        lualatex $(NOM)-corrigé.tex
        lualatex $(NOM)-corrigé.tex

clean:
        rm -f $(NOM)*.aux  $(NOM)*.log  $(NOM)*.toc  $(NOM)*.out

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 !

links

social