CodiMD : un éditeur de texte collaboratif en markdown et supportant LaTeX

Toujours en recherche d’outils pendant cette continuité pédagogique, je continue mes découvertes de solutions pour un partage en direct d’une saisie de texte avec formules mathématiques, pour les corrections d’exercices notamment. J’ai ainsi trouvé mon nouveau tableau blanc numérique : CodiMD. Présentation.

De la découverte…

Durant les vacances de Pâques, un ensemble d’outils libres pour faciliter cette continuité a été déployé par la Direction du Numérique pour l’Éducation.

Il y a un certain nombres d’outils disponibles (si j’ai bien compris ce ne sont pas forcément les mêmes dans toutes les académies), mais il y en a un qui a fini par retenir mon attention, présenté comme un « pad avancé » : CodiMD.

À la base, c’est ce tweet qui m’a interpellé :

Je me dis : « Tiens, on peut rédiger en markdown et saisir des formules \LaTeX simples ». En plus, on peut faire visualiser le document en direct. Mais sur le moment, j’ai laissé cette application de côté et poursuivi avec ma façon habituelle de travailler (Texmaker + Sumatra PDF casté via la classe virtuelle du CNED).

Et puis j’ai finalement remis le nez dedans le week-end dernier, alors que je cherchais à trouver s’il existait des packages pour saisir du markdown dans du code \LaTeX, histoire de l’alléger un peu. La suite, vous la devinez un peu : j’ai immédiatement adopté CodiMD dès la première séance où je l’ai utilisé !

… à l’utilisation !

Je passerai sur l’aspect collaboratif des documents ainsi créés pour me concentrer sur ce qu’on peut concrètement faire avec ces pads. J’utilise CodiMD comme tableau blanc pour écrire des mathématiques et il le fait particulièrement bien, sans avoir besoin de passer par des solutions de partage d’écran.

La première chose à faire, c’est de vous rendre sur le site https://apps.education.fr/ et de créer votre compte à partir de votre adresse académique (Oui, c’est réservé aux enseignants et oui, comme c’est stipulé dans le bandeau du site, c’est censé être temporaire. Je vais me pencher ces prochaines semaines sur la recherche d’une solution pérenne au cas où cette plateforme disparaisse à terme et j’en reparlerai dans un nouvel article). Vous aurez ainsi accès à tout un ensemble d’applications parmi lesquelles Peertube pour partager des vidéos, Nextcloud pour partager vos documents, Jistsi pour de la visioconférence et bien sûr CodiMD.

Pour les bases de l’utilisation de CodiMD, vous pouvez consulter cet article : https://pad.numerique-en-commun.fr/utiliser-codimd# (c’est celui qui est proposé dans la description de l’application).

Pour découvrir Markdown : https://blog.wax-o.com/2014/04/tutoriel-un-guide-pour-bien-commencer-avec-markdown/ (là aussi c’est l’article proposé par Apps.education.fr). Si vous ne connaissiez pas ce langage à balises léger, voici une bonne occasion de découvrir sa puissance pour rédiger rapidement des pages web notamment. De plus, l’apprentissage peut vous être utile puisque les calepins de Jupyter(Lab) supportent cette syntaxe pour la mise en forme de texte dans les blocs markdown. Avec le déploiement en cours de Jupyter sur un certain nombre d’ENT académiques (c’est déjà le cas pour le nôtre en Normandie depuis 2 ans au moins), le jeu en vaut la chandelle !

Je pars du principe que vous avez désormais pu créer votre premier pad et que l’utilisation basique de \LaTeX vous est familière.

On peut alors ajouter des formules mathématiques à notre pad exactement de la même façon qu’on le ferait en \LaTeX ! Par exemple :

$a^2=b^2+c^2$.

Qui donnera : a^2=b^2+c^2.

De façon plus complète, mon fichier test ressemblait à ça :

L’éditeur est pratique avec sa vue splittée qui permet de visualiser directement le rendu de ce que l’on tape (ne pas oublier de cliquer sur le petit bouton qui apparaît au milieu de la règle de séparation pour supprimer la synchronisation verticale entre l’éditeur et le rendu web, car cela peut devenir très vite insupportable quand on arrive en bas de l’écran).

C’est cette visualisation que je partage avec les élèves et étudiants lors des séances de correction (il suffit de leur donner le lien du pad, en ayant pris soin de le régler en statut locked si vous ne voulez pas qu’ils puissent le modifier). J’obtiens ainsi un tableau blanc qui s’affiche en temps réel pour eux sur leur écran, qui est responsive et qui permet d’écrire toutes sortes de formules mathématiques. De plus, il est possible de se déplacer à l’intérieur de la visualisation pour revenir en arrière, ca qui n’était pas particulièrement pratique avec la visualisation d’un PDF où c’est le prof qui est « maître » du défilement du document. Sans parler de la possibilité de changer la taille de la police de caractère dans le navigateur, essentielle pour nos élèves avec des troubles DYS (l’un des miens m’a confirmé que c’était bien mieux pour lui de cette façon).

Et là où c’est particulièrement puissant, c’est la dernière partie de mon exemple : la possibilité de pouvoir créer des macros pour se faciliter la rédaction, comme on le ferait directement dans \LaTeX.

Il faut simplement penser à écrire notre \newcommandentre dollars. On peut même en écrire plusieurs à la suite avec une seule paire de $.

En ce qui me concerne, je les déclare au début du fichier comme ça je pourrai facilement supprimer les lignes correspondantes quand j’exporterai mon pad au format .latex.

Car ça aussi c’est possible ! On peut utiliser Pandoc pour exporter notre pad en différents formats dont du .epub(3) ou encore du .latex. C’est noté en fonctionnalité beta, mais ça marche déjà très bien pour le .latex (pas encore testé de .epub, mais les possibilités que cela engendre sont à explorer) et ça ne prend que quelques clics. On récupère alors un fichier \LaTeX contenant un code propre à exploiter avec un minimum de corrections (pour mes fichiers, il m’a fallu redéfinir les débuts et fins de listes par exemple).

On est donc face à un outil qui présente l’avantage :

  • d’être simple à utiliser ;
  • léger dans le navigateur (attention quand même quand il commence à y avoir beaucoup de formules, le rafraîchissement automatique peut devenir subitement très lent), ne nécessitant pas un outil supplémentaire pour le caster et responsive pour s’adapter à tout type d’écran ;
  • de pouvoir être rapidement partagé avec les élèves (soit en rafraîchissement automatique en partageant le lien du pad, soit avec un rafraîchissement manuel par les élèves en leur donnant le lien de la page web créée après avoir cliqué sur Publier) ;
  • de pouvoir partager un tableau blanc avec les élèves dans lequel écrire des mathématiques est totalement naturel (pour peu que vous ayez l’habitude de la syntaxe \LaTeX) ;
  • de pouvoir créer rapidement une page web au contenu évolué.

Les élèves qui auront conservé le lien de la séance pourront même y retourner ultérieurement (même si je leur fourni une version PDF après chaque séance).

Voilà pour ce premier article autour de l’utilisation de CodiMD. Il me reste encore pas mal de choses à explorer :

  • Peut-on charger certains packages LaTeX ?
  • Peut-on utiliser/créer des environnements ?
  • Peut-on insérer des frames pour, par exemple, intégrer un éditeur/compilateur Python ?
  • Est-il aisé d’exporter le contenu de son compte pour transférer tous ses pads ou en faire une sauvegarde locale/cloud ?
  • Comment utiliser CodiMD en dehors de la plateforme Apps.education.fr au cas où elle ne soit pas pérennisée par la suite ?
  • Quels usages potentiels lors du retour en classe ?

Autant de questions auxquelles j’espère répondre dans les semaines/mois qui viennent, tout en vous partageant le retour de mes recherches !

Et de votre côté, avez-vous déjà testé CodiMD ? Avez-vous apprécié son usage ? Avez-vous des tips à partager ? Ou bien utilisez-vous un autre « tableau blanc » pour le distanciel, et le trouvez-vous a priori plus pratique ?

Une approche de l’algorithme des k plus proches voisins en DNL

Cette année, j’ai la chance de suivre un groupe de seulement 9 élèves de Terminale S en DNL Maths Anglais. Du coup, j’ai avancé plus vite en classe de Première et cela m’a conduit à contruire de nouvelles activités. En voici une première, inspirée par le programme de la spécialité NSI en Première, qui est une approche du machine learning à travers l’algorithme des k plus proches voisins.

Voyons un peu de quoi il retourne, partie par partie.

Introduction: la distance de Manhattan

Je relance ici les élèves sur une activité qu’ils ont déjà travaillées en classe de 2de pour réintroduire la distance de Manhattan (notre bonne vieille norme 1 !). L’activité est basée sur celle d’Arnaud Moragues (The shortest way), proposée sur le site Emilangues.

From OpenStreetMap, route from the Flatiron building to the Empire State Building for a car, in the streets of Manhattan

Les bases du machine learning

A partir d’une vidéo, les élèves découvrent les bases du machine learning, avec un script à compléter pour leur faire travailler leur compréhension orale. C’est une vidéo d’un développeur de Google, certes, mais je l’ai trouvée : brève, complète, claire. Et j’aime beaucoup le résumé de ce qu’est le machine learning en cinq mots :

using data to answer questions

La vidéo en question :

Découvrir l’algorithme k-NN avec Game of Thrones

En me basant sur les articles Learning Machine Learning (at Hogwarts) et An Introduction to KNN (K Nearest Neighbours). The Game of Thrones way, une activité très basique pour une première approche de l’algorithme, avec uniquement l’utilisation d’une distance euclidienne.

Première application : trouver le type d’un Pokémon mystère

Pour cette partie, on consolide la compréhension de l’algorithme en version graphique (donc toujours avec deux critères de classification seulement), et toujours avec deux catégories possibles. Davantage de données également, pour classifier un Pokémon mystère, connaissant ses caractéristiques. J’ai adapté cet exemple de très bon ouvrage de Céline Adobet, Guillaume Connan, Gérard Rozsavolgyi, Laurent Signac, dans la collection Prépabac en NSI, publié l’an passé chez Hatier. La dernière application est elle aussi adaptée de ce livre.

Dans cette partie, on effectue les recherches d’abord avec la distance euclidienne, puis avec la distance de Manhattan.

Pour le retour d’utilisation en classe, je dois reconnaître que j’avais bouclé cette partie un peu juste par rapport au moment où j’en ai eu besoin. On a traité cette application sans que je l’aie testée auparavant et forcément, ça n’a pas marché : j’avais choisi à chaque fois une valeur paire pour k et en plus il me manquait un point sur le graphique. Bref, on tombait systématiquement sur des égalités entre les plus proches voisins du Pokémon mystère à classifier… et on ne pouvait donc pas le classifier ! Là, le problème est réglé.

Deuxième application : aider le Choixpeau à trouver la Maison d’un nouvel élève de Poudlard

Pour finir l’activité, j’invite les élèves à aider le Choixpeau (le groupe est quasi intégralement composé de fans, ce que j’ai découvert en traitant l’application). Ici, on travaille uniquement en distance de Manhattan, et en dimension 4 (l’occasion de l’évoquer avec les élèves, d’autant plus que l’on n’avait pas encore traité la géométrie dans l’espace à ce moment de l’année).

Spécificité du programme actuel oblige, je n’ai pas traité la partie programmation en langage Python puisque les élèves n’en ont fait qu’un tout petit peu en 2de et ne sont donc pas au point sur son utilisation (de toute façon, Python n’était officiellement pas au programme des épreuves du bac 2020). Du coup, on a programmé sur la calculatrice et les élèves se sont partagés par groupes les calculs pour chacun des quatre nouveaux élèves à classifier. Naturellement, le tableau final a soulevé pas mal de remarques sur les caractéritisques des différents élèves (mais qui peut bien être cette Nymphadora avec 2 en courage ?). Je reconnais avoir repris le tableau proposé dans le Prépabac sans chercher à le modifier (surtout qu’il donne les bonnes maisons pour Hermione, Drago, Cho et Cédric).

En conclusion

L’activité globale semble avoir plu aux élèves. J’imagine qu’avec une classe à effectif plus élevé, elle serait difficile à traiter dans son intégralité telle quelle. Là je travaillais avec 1h30 par semaine et on a passé 5 ou 6 heures en tout dessus.

L’an prochain, je vais la reprendre aussi bien en 1re qu’en Terminale, mais cette fois-ci avec l’utilisation de Python. Ce sera l’occasion de travailler sur les listes notamment. Tout en prenant en compte que j’aurais certainement des élèves qui ne suivront pas la spécialité maths (on n’a pas NSI au lycée). Et puis en Terminale, ça se couplerait bien avec le programme d’enseignement scientifique qui traite notamment de l’intelligence artificielle et de l’apprentissage machine dans sa dernière partie !

Pour télécharger la fiche d’activité, c’est juste en-dessous :

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 !

Attention ! Le module de coloration syntaxique pour LaTeX de WordPress transforme automatiquement les < et > en &lt; et &gt; respectivement.

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 !

 

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

Depuis à peu près deux ou trois ans, je n’utilise plus Beamer, ou alors très occasionnellement. Devoir travailler sur deux sources de documents pour avoir d’un côté la version à distribuer aux élèves (par exemple un polycopié de cours à compléter) et de l’autre un diaporama à projeter (typiquement pour compléter ledit polycopié) était trop chronophage, beaucoup trop. Alors je biaisais : un polycopié prof (complété) et un polycopié élève en une source juste en renommant une commande, \blanc devenant \bleu pour les besoins de la projection. Et je projetais le document ainsi obtenu, en le faisant défiler au fil du cours. Pratique à préparer mais pas totalement satisfaisant.

Et puis il y a eu le confinement la continuité pédagogique et le besoin de pouvoir :
1. Corriger « en direct » les exercices.
2. Proposer après chaque séance un document propre regroupant toutes les corrections de ce qui avait été traité.

La première semaine, je reprenais tous exercices un par un après les séances sur Discord, tapais leurs corrigés en LaTeX, en récupérant souvent les formules saisies durant la séance, avant de déposer sur l’ENT le document final. Le temps passé était cataclysmique ,même en faisant un copier-coller de tous les échanges de la séance et en supprimant dans un premier temps tout ce qui ne concernait pas la correction des exercices et les remarques allant avec. Sans parler de la position de travail devant le PC portable posé sur la table à manger dans le salon, pas du tout adaptée pour de si longues sessions.

En deuxième semaine, même principe mais en rédigeant les corrigés, parfois avant, mais plus souvent après le cours, en version manuscrite (puis photos avec Office Lens, création d’un PDF toujours sous LaTeX, dépôt sur l’ENT). Preneur de temps aussi, mais moins douloureux pour mon dos malgré tout. Et puis je commence à prendre conscience que le double affichage lié à l’utilisation du bot TeXit (pour convertir du code LaTeX en de belles formules) n’est pas idéal pour la compréhension, tout comme le mélange correction/questions au sein d’un même flux de discussion.

Exemple de saisie LaTeX avec le rendu via TeXit.
C’est beau, mais ça ne facilite pas forcément la lisibilité globale.

En troisième semaine, profitant de la stabilisation de la plateforme, j’améliore un peu tout ça : utilisation de la classe virtuelle du CNED, avec partage de la fenêtre de mon lecteur PDF (Sumatra PDF) dans lequel est rafraîchi automatiquement après chaque compilation mon fichier .tex rédigé sous TeXMaker. En calibrant le PDF au format A5, c’est plutôt pas mal pour la correction en mode synchrone.

Seulement, là où c’était moyen, c’était pour la correction des exercices à chercher entre deux séances. Au bout de cette troisième semaine, j’avais un peu moins besoin de sortir les rames et je parvenais à trouver le temps de préparer les corrigés en avance. Je rédigeais mon fichier .tex, commentais toutes les lignes du corps de texte et les décommentais en enchaînant les compilations étape de correction après étape. C’était quand même pas génial pour le rythme d’affichage et ne me permettait pas de basculer mon PDF en plein écran (besoin de voir la fenêtre de TeXMaker pour ces manipulations).

Et au final, ce que je faisais n’était rien de plus que de recréer le principe d’un diaporama, mais d’une façon absolument pas pratique.

Arrive alors la semaine 4. Et me revient cette idée de chercher s’il est possible à partir d’un seul fichier source de générer aussi bien un diaporama avec Beamer qu’un PDF avec la classe article. Et si jusqu’à présent je m’étais posé la question sans vraiment y chercher de réponse, là le contexte m’a clairement poussé à le faire enfin. Grand bien m’en a pris car non seulement c’est en effet possible, mais c’est en plus d’une simplicité absolue ! Je suis tombé parmi les résultats de recherche sur cet article qui explique comment faire.

Et le comment, ce sera justement l’objet de la deuxième partie de cet article ! En ligne dans les jours qui viennent, le temps pour moi de lister les petits ajustements et les quelques astuces qui m’ont été bien utiles pour obtenir le résultat voulu.