Générer un article et un diaporama à partir d’un même fichier .tex – Partie 2 : Comment ?

Après m’être quelque peu étendu sur les raisons pour lesquelles j’avais besoin de pouvoir compiler un article et un diaporama à partir d’un même fichier source, voici le plus intéressant : comment s’y prendre pour y parvenir !

Je m’inspire ici de cet article de Maïeul Rouquette grâce auquel j’ai pu trouver cette solution !

J’essaierai de trouver une solution (si elle existe) pour l’éviter par la suite. A priori c’est un problème d’échappement des caractères lors du passage en HTML. Étrangement, cela ne se produit pas en Python.

La technique

Le processus repose essentiellement sur le package beamerarticle qui fait partie de la distribution de base de Beamer. On l’utilisera pour générer la version article du document.

Après divers tâtonnements, je travaille finalement à partir d’un préambule comme celui-ci :

\documentclass[a4paper,12pt,twoside]{article}
\usepackage{entete}
\usepackage{beamerarticle}
% \documentclass[ignorenonframetext,t,10pt]{beamer}
% \usepackage{entete-beamer}
% \usetheme{Hannover}
% \setbeamertemplate{enumerate items}[default]

Dans ce préambule, il me suffit de commenter/décommenter les premières lignes, ou les suivantes, selon le document que je souhaite obtenir. Les lignes 1 à 4 pour l’article et les lignes 6 à 10 pour le diaporama. Et c’est à peu près tout !

Les packages entete et entete-beamer sont des librairies regroupant mes macros personnelles ainsi que les appels aux packages dont j’ai besoin. À vous d’adapter selon vos habitudes d’écriture de vos fichiers. J’ai la mauvaise habitude de charger systématiquement l’intégralité des packages et macros qui m’ont été utiles par le passé, même si le document courant ne les nécessite pas.

Pour la version diaporama, c’est l’option ignorenonframetext lors de l’appel de la classe Beamer qui est fondamentale. Elle permettra de faire apparaître les éléments hors des balises frame, comme par exemple les entêtes et pieds de pages ou, dans le cas d’un polycopié de cours, les énoncés des exercices que l’on n’aurait pas besoin de projeter mais qui seraient présents dans le document élève. Pendant ce confinement, ça me permet aussi de me contenter de copier-coller le contenu du fichier .tex rédigé pendant la correction des exercices traités lors d’une séance, de les ajouter à la toute fin d’un diaporama (pour les exercices qui étaient à chercher entre les deux séances) et de produire sans aucune retouche un PDF avec l’intégralité des corrigés, que je pourrai partager avec mes élèves.

Ça me sert aussi à avoir des versions intermédiaires de la séance de cours que je peux partager au fil des exercices pour les élèves qui ont besoin de reprendre la correction d’un exercice avant de passer au suivant.

Quelques astuces pratiques

Si vous voulez qu’une diapo complète ne s’affiche que dans le diaporama et pas dans l’article, il suffit de saisir :

\begin{frame}<presentation>

Utile notamment pour la diapo de titre.

Il y a aussi une commande qui m’a bien aidée car elle m’a grandement limité le nombre de lignes de code à commenter en passant du diaporama à l’article :

\only<beamer>{votre texte}

Typiquement, cela m’a servi pour les titres des diapos, dont je n’avais pas besoin dans la version article (puisque le découpage en sections/sous-sections est souvent déjà noté hors des balises frame). Concrètement, cela donne quelque chose comme :

\only<beamer>{\frametitle{Exercice 6 p.13}}

Travaillant sous Overleaf, tout ceci fonctionne parfaitement ! Je me souviens avoir rencontré un ou deux soucis sous Texmaker, mais je dois reconnaître que l’installation de MikTeX sur mon PC est quelque peu bordélique (c’est ce qui m’a initialement conduit à basculer vers Overleaf d’ailleurs).

Et voilà pour ce premier article un peu plus technique que d’habitude (mais il va falloir s’y faire). Je manque encore de pratique dans leur rédaction (malgré les fiches de TP/cours que je prépare pour mes élèves) et dans l’écriture du partage de pratiques, alors n’hésitez pas à me proposer des améliorations si besoin !