2. Outils pédagogiques - brainstorming¶
Ce document (déjà trop long) est un brouillon, qui essaie de fixer par écrit mes réflexions.
TODO: terminer cette page (last changed 2021-02-16 19:41:32) TODO: bien organiser mes idées
En premier, j’essaie de lister les besoins de documents et ressources pédagogiques ;
Puis quels outils je connais, pour chaque besoin, avec les avantages et inconvénients ;
L’objectif est de trouver UN outil ultime (exemple : tout en LaTeX, tout en Markdown, tout en Jupyter notebooks), qui permette de tout faire.
2.1. Pourquoi cette page ?¶
Pourquoi je cherche un seul outil ?
Je n’ai pas la prétention de pouvoir devenir expert dans douze solutions logiciels différents (toutes avec un langage différent, des configurations différentes etc)…
Je suis dubitatif de pouvoir être très productif si dans la même semaine je dois écrire du LaTeX (article) pour un sujet de DS, du LaTeX beamer pour un cours magistral, un Jupyter Notebook avec OCaml pour des solutions d’un TD, des figures en TikZ, un autre Notebook avec du code C et Python pour un TP, des explications d’installation de opam
sur une page web etc.
Objectifs : je cherche des outils :
me permettant d’être efficace ;
que je connais déjà ou que je peux apprendre rapidement ;
qui soient libres et gratuits, et pas trop ésotériques, facile d’utilisation et d’installation ;
qui n’utilisent que des formats textuels (LaTeX etc), ou quasiment textuels (Jupyter notebook en JSON), pour utiliser un bon gestionnaire de version (git), donc pas de LibreOffice ni Word ;
me permettant de couvrir tous mes besoins ;
et qui soient les meilleures solutions à chaque problème !
Je sais que je ne pourrais pas avoir un seul outil qui soit parfait, mais disons que j’espère avoir une couverture minimale de mes besoins, qui me permette d’être efficace, de publier de façon ouverte tous mes documents, et pas trop compliqué à maintenir et utiliser.
Date : février 2021 (en chantier) ;
Page complémentaire : mes-outils-preferes.fr.html sur mon site perso, qui est plus « geek » et moins orientée pédagogie.
2.2. Besoin en enseignements¶
Lorsque l’on enseigne, en particulier l’informatique dans le supérieur, on a besoin de ces choses là :
2.2.1. Ce qui est non-optionnel¶
Cours
au tableau (réel ou virtuel), besoin d’un document à suivre pour ne pas être perdu ;
avec slides (intéractif ou non) ;
avec documents polycopié :
👍 avec des trous à remplir comme Yacine ?
👎 avoir un polycopié complètement terminé prendra plusieurs années…
Page web du cours : avec emploi du temps, liens vers les documents etc ;
Travaux dirigés (TD) (sans code) : des feuilles de TD bien jolies, imprimées et distribuées ;
Travaux pratiques (TP) (avec code) :
il faut à la fois une feuille de TP avec l’énoncé, qui montre du texte, des maths, du code, des figures ;
et souvent il faut aussi des morceaux de codes
Devoirs surveillés (DS) :
petits devoirs : QCM, ou non ;
correction des petits devoirs : si QCM, il faut utiliser Auto Multiple Choice (connais pas mais c’est très bien) ;
longs devoirs : TODO: ;
correction des longs devoirs : à l’ancienne avec des copies papiers, mais un fichier « Excel » (LibreOffice Calc) avec le barème détaillé -> calculs faciles des moyennes par questions/exercices. On perd du temps, mais ça aide.
solutions distribuées aux élèves : TODO: ;
Cheat-sheet : documents en LaTeX, optimisés aux petits oignons. A faire bien et donner après quelques cours sur le langage, utilisés tout le temps par les élèves.
2.2.2. Pour l’organisation¶
Pour toutes ces idées, deux remarques :
normalement géré par l’établissement d’accueil !
à voir avec les habitudes des autres collègues
Carnet de notes :
garder quand même un gros fichier « Excel » (LibreOffice Calc) pour une trace précise des notes de tous les élèves, de chaque cours ;
Emploi du temps :
normalement géré par l’établissement d’accueil ! (cf ADE à Rennes 1 et l’ENS Rennes) ;
agenda partagé, hébergé librement. L’intérêt peut être de donner un lien CalDAV. Avec FramAgenda ? Demander à @Corentin ;
Gestion des colles :
« colloscope » automatisé ? TODO: Demander à @Loïc ;
Ou voir sur GitHub ? @pykol/pykhollet semble trop complet (au niveau de tout le lycée), @greg904/carnot-colles, @stephanekirsch/e-colle, @Blackhol3/kholgen mais très mal/peu documentés, @LeoColomb/kholloscope semble aussi chouette mais archivé depuis 2014 ?
Conseils de classe :
rien à faire de spécial ;
Recrutements ParcourSup :
normalement géré avant une arrivée en septembre ;
2.2.3. Bonus qui seraient utiles¶
Conseils de lectures et d’achats : un document à distribuer début juillet, après les résultats du bac. Avec des conseils de lectures (site web, livres), d’achats (livres, matériel, ordinateur, calculatrice).
Fiche de renseignement à faire remplir aux élèves le premier jour ;
Activité d’informatique débranchée pour les premières séances :
Par exemple l’algorithme débranché pour trouver la personne dont la date d’anniversaire est la plus proche (cf. Didapro8, Martin Quinson) ;
Et des idées d’activités à faire dehors hors de la classe, pour les 1/2/3 premières séances, pour apprendre à bien se connaître, et observer l’informatique dans la vie réelle (ex en vrac : vivant => ADN = codage sur \(\{A,T,G,C\}\), protéines = codage acides aminés sur alphabet 20 lettres, téléphone/ordinateur = tout, feu rouge = micro-contrôleur embarqué, télécommunications filaires, automate temporisé / machine à état, machine à café = automatique, etc).
TIPE : en MP2I notamment il y aura de plus en plus de TIPE avec de l’informatique, voir quels besoins.
Entraînements aux écrits de concours : le principal problème est qu’il n’y a pas encore de sujets disponible pour les MP2I, mais pour toutes les autres épreuves oui.
Entraînements aux oraux de concours : le principal problème est qu’il n’y a pas encore de sujets disponible pour les MP2I, mais pour toutes les autres épreuves oui.
Rapport de notes pour chaque DS/TP noté : faire un rapport de « performance » de la classe, avec des beaux graphiques, et moyenne/médiane + écart-type pour chaque question/exercice ?
prendre les idées de
notes.sh
que j’avais utilisé en 2013/14 !faire pareil pour chaque trimestre !
les notes ne doivent jamais devenir publiques, mais les outils peuvent l’être !
Bibliographie :
garder une bibliographie au format
BibTeX
avec tous les livres (niveau lycée, prépa, fac, agrég) utilisés comme sources et références pour rédiger le reste (et articles de recherche ?) ;les utiliser dans le site web, et les documents du cours ;
faire une page web avec
bib2html
qui soit facile d’utilisation ;utiliser Zotero !
Trombinoscope interactif (:warning: accès privé) ? Cf ce que j’avais écrit en 2015 pour Mahindra École Centrale : c’est simple et ça marche. Dès que j’ai la liste des élèves et leurs photos je peux faire pareil, ce sera facile.
Mini projets de développement : au moins un par semestre, à faire en groupe de 2/3 (trinôme de colles ?).
J’aimerai bien donner le même projet à tout le monde, pour gagner du temps…
J’aimerai bien donner des projets qui demandent de programmer mais aussi de prouver des choses (style preuve de complexité d’algorithme), et entrelacer les deux (à coup de
assert invariant_boucle
par exemple) ;Je souhaite donner des projets qui soient indépendants du langage choisis, et exiger un travail en C et en OCaml pour chaque groupe (exemple jeux vidéo client/serveur l’un en C l’autre en OCaml) ;
Faire faire du Python même si c’est hors programme MP2I ?
Synchronisation des fichiers de travail (pour moi) :
ownCloud dans le bon dossier ;
git ;
2.2.4. Bonus plus ambitieux mais qui seraient aussi très utiles¶
Exécution sécurisée et Évaluation automatique de code :
Pour rapidement évaluer le travail de ~50 élèves à un TP en C/OCaml/Python, il faudrait un outil qui permette d’exécuter de façon sécurisée et automatique tous les fichiers soumis ;
Comment faire ça de façon sécurisée ? a) Dans une VM ? Moche et lent, mais efficace ; b) Dans un Docker(file) ? Ce serait classe et moderne, et utilisable par d’autres sans rien installé (mais j’ai pas de bon souvenirs de Docker) ; c) Dans un conteneur spécialisé (Camisole)
Le Test Driven Development c’est bien, mais un peu chiant à écrire, et je veux écrire le test une fois indépendamment de leurs conventions de nommages ;
Le Behavior Driven Development (avec Cucumber et Gherkin) c’est encore mieux, cf ce que j’avais fait pour ParcourSup.py en 2018 ;
Via les cours et exercices de France-IOI c’est aussi possible ? Supporte C/Python/OCaml parfait (mais pas SQL) ;
Prologin utilise et développe Camisole (sur GitHub) qui propose des choses chouettes ! Supporte C/Python/OCaml parfaitement (mais pas SQL) ;
Autres pistes sympa :
nbgrader
avec Jupyter notebooks (cf cette doc), ou d’autres trucs intégrés à Moodle comme CodeRunner (qui utilise JobeSandbox, supporter pas OCaml, c’est mort) ;Autres pistes moins sympa : faire utiliser des sites en lignes style Codewars ? j’aime moins mais pourquoi pas ;
Logiciel anti plagiat ?
Compilatio semble être très puissant, mais non libre, non gratuit, c’est mort. Il était disponible à l’Université Rennes 1 et pour mon cours INF1 à l’automne 2020 nous n’avons pas pu nous en servir car les soumissions de projet étaient des fichiers Java
.java
et pas des PDF ou docs Word : en prépas j’aurai le même problème ;MOSS semble un bon outil ! « spa un logiciel libre, spa utilisable localement, mais ce n’est pas non plus opéré par une entreprise commerciale. Sinon, ca colle vraiment bien à ta définition de besoin » Non ça me va pas, il faut un compte, il faut envoyer les fichiers en ligne, c’est vraiment à l’opposé de ce que je veux, tant pis si les autres alternatives sont moins bien !
Ces petits articles justifient l’intérêt de vérifier le plagiat à UCI.edu et edutwitt.com ;
J’ai trouvé study-in-scarlet, qui étend sherlock (que j’ai déjà forké), intéressant ! Ces solutions sont indépendantes du langage ;
Pour des codes Python, il y a pycode_similar. Je pourrai étendre study-in-scarlet pour utiliser pygments (au lieu de rouge) pour supporter plus de langages ?
J’ai pas mal regardé d’autres outils libres déjà existants, ou sur GitHub… rien trouvé C’est encore des recherches très actives ;
Débogueur interactif pour les langages enseignés :
faire une première démo à la main dans un terminal (OCamlDebug, GCC debugger (GDB), pdb ou ipdb pour Python), et dans un notebook Jupyter pour Python (voir ce notebook) ;
puis dans VSCode de façon interactive : pour OCaml j’ai réussi à utiliser vscode-ocaml-debugger (avec ces fichiers, par exemple), avec hackwaly.ocam (deprecated, plutôt que ocamllabs.ocaml-platform qui ne propose pas encore le débogueur) ; pour Python c’est intégré ; pour C aussi et ça marche très bien !
Statistiques sur les performances aux concours : en s’organisant bien, on peut garder des traces des notes/rangs/résultats/admissions finales des élèves…
Sur GitHub, j’ai trouvé @lcswillems/cpge-statistics-generator/ qui semble génial, mais pas à jour depuis 2016 (et avec les données de juste un seul élève, mais semble solide) ;
Voir aussi @h2o64/scei_statistics ;
2.2.5. Bonus pour les élèves¶
Installeurs faciles pour les logiciels ?
chiant de se taper la maintenance de ces trucs là, notamment les applis bureaux pour OCaml (Windows notamment), Python et C ?
mais on peut en trouver (faits par d’autres gens), et les héberger au même endroit, au cas où ils deviennent indisponibles ;
Python : EduPython,
OCaml : pour OCaml et liens dans ces pages là, ou alors OCaml-Top ;
C : TODO: ?
SQL(ite) : sqlite est inclus dans Python, et si on installe Pandas et Pandas-SQL ça suffit à faire des exemples sympa ?
notamment les applis mobiles pour OCaml, Python et C ? Cf apk.fr.html sur mon site ;
Éditeur et interprète/compilateur en ligne ? Pour pouvoir travailler depuis un simple navigateur web, sans rien avoir à installer :
OCaml : TryOcaml ou BetterOCaml (et plus expérimentalement Dominical et OCaml sur mon site perso). Un débogueur visuel pour un tout petit ensemble du langage (fyp). Voir aussi Learn-OCaml qui semble incroyable (cf démo Learn-OCaml, déployable statiquement, et avec learn-ocaml-cpge (très peu complet, TODO: à remplir ?)) ;
C : C Tutor est minimaliste mais très utile pour apprendre et visualiser des petits programmes, alors qu’un site comme onlineGDB.com permet de déboguer (avec
gdb
) des petits programmes en ligne (pas offline) ;Python : PythonTutor.com est incroyable pour les visualisations qu’il propose, mais de façon plus légère il y a aussi un terminal Python 2 sur mon site perso (miroir PythonTutor, et en bidouillant on peut avoir PythonTutor offline ;
C et Python : REPL.it (C,Python), ou myCompiler.io (C, Python) – mais pas OCaml ;
~Tout langage : Tutorials Point est entièrement gratuit[^tutorialspoint], et propose un environnement pour OCaml, C, Python, et SQL. De même pour JDoodle, qui propose un interpréteur OCaml et d’autres langages, gratuitement en ligne. [^tutorialspoint] C’est un site géré et hébergé par une entreprise basée à Hyderabad en Inde, où j’ai travaillé en 2014/2015 !
Jupyter notebook (pour Python) : Google Colab (sans connexion, cf mes notebooks), Binder (sans connexion, cf mes notebooks) et DeepNote (demande un compte, cf un de mes notebooks), et Basthon.fr peut dépanner si besoin ;
SQL : SQLite-Online comme sur ce site d’un cours de NSI terminale : TODO: m’en servir pour des TP de SQL et les héberger localement ? Il y a aussi ce TP sur CNAM.fr mais j’aime moins ; Il en plein existe d’autres, mais pas en français je pense, et moins bien conçu pour l’enseignement (« SQL Murder Mystery » est amusant).
SQL depuis Jupyter : on peut aussi tout faire depuis IPython/Jupyter, avec ipython-sql, ou avec avec pandas et Pandas-SQL, pour avoir une interface vraiment élégante (et facilement charger des bases de donnes exemples depuis seaborn) ! Cela me semble plus efficace que d’utiliser un kernel Jupyter spécifique, comme xeus-sqlite ou xeus-sql.
Prise de note collaborative en ligne ?
HackMD.io et StackEdit.io pour des notes en Markdown (voir aussi Madoko, ?) ;
Etherpad et pad.crans.org si besoin ;
OverLeaf pour des notes en LaTeX (cf ShareLaTeX.irisa.fr) ;
Recommandation de style de programmation (styleguide) : TODO: faire une liste de style-guides pour chaque langage enseigné (et s’y tenir !), cf Guides de style !
2.2.5.1. Autres bonus pour les élèves¶
Pour des élèves ayant un ordinateur mais pas d’Internet
Accès à la documentation (OCaml, Python, C, SQL, etc) : Zeal-docs est parfait pour ça !
WebCatalog peut permettre d’installer des sites web statiques qui peuvent ensuite être utilisés comme des applications natives !
OCaml : utilisez WebCatalog avec le site BetterOCaml ou TryOCaml (cf ce tutoriel) ;
Idée : écrire une appli Electron (packager) contenant BetterOCaml ? Ou avec webcatalog.app : ça marche très bien pour BetterOCaml ?
C/SQL/Python : trouver des alternatives ?
Pour des élèves n’ayant pas d’ordinateur
Là, je peux pas faire de miracle…
Mais les lycées et Universités proposent des salles informatique en accès libre !
Faire le lien entre informatique bureau et calculatrices programmables : TODO: réfléchir à ça
2.3. Listes de technologies et outils¶
Je liste ici des technologies, en séparant ce que je maîtrise, ce que je connais un peu, et des suggestions de collègues ou d’autres pistes.
TODO: cette liste est encore en chantier.
2.3.1. Ce que je maîtrise bien¶
2.3.1.1. Production de documents¶
Markdown : je connais très bien le langage de base, et les extensions GitHub Flavored Markdown.
Convertir un seul petit fichier (HTML, PDF) :
pandoc
est parfait ;Convertir plein de fichiers : autant directement aller dans un Jupyter Book (ou autre) ;
Imprimable : cheat-sheet, cheat-sheet2.
Documents LaTeX : je maîtrise bien, mais ça prend du temps de retrouver des bons automatismes.
👍 avantages :
documents super propres ;
et langage programmable, on peut rajouter des macros, et faire plein de choses puissantes qui sont impossibles avec les autres solutions ;
👎 inconvénients :
chaque document génère un PDF indépendant, c’est plus difficile de tout lier ;
difficile de générer des pages web équivalentes aux documents PDF ;
Conclusion ? A préférer pour des documents destinés à être imprimés.
2.3.1.2. Production de slides¶
Slides Markdown : Marp avec Markdown + maths \(\KaTeX\) (un sous ensemble de \(\LaTeX\)) :
👍 avantages :
un peu primitif, mais ça force à avoir des slides épurés et simples ;
ça fonctionne depuis VSCode !
on peut ajouter des émojis comme sur GitHub avec :+1: etc ;
export facile en PDF ;
on peut faire des slides vraiment très propres avec ça : cf ce tutorial sur Julia donné en conférence en 2018 ;
👎 inconvénients :
quelques changements depuis l’époque de l”appli Marp (2017), comme expliqué ici, TODO: donc je dois mettre à jour mon vieuw thème ;
très peu de contrôle sur l’apparence finale, on ne peut pas faire aussi bien qu’avec LaTeX Beamer ;
pas d’intégration entre les figures (TikZ ou
algorithm2e
) et les commandes spéciales de Beamer (\pause
,\alert
etc) ;
Slides LaTeX Beamer :
👍 avantages : documents super propres, et possibilités de montrer du code et des figures (TikZ ou
algorithm2e
) apparaître interactivement à chaque slides, et autres ;👎 inconvénients : syntaxe trop lourde ! J’ai déjà écrit plein de slides Beamer, mais je trouve ça trop lourd ;
idée : un premier prototype, sans jolie figure, peut être rapidement écrit en Markdown + Marp, puis on utilise
pandoc
pour transformer en LaTeX, avec un template/style que l’on aime bien (c’est ce que j’ai fait pendant quatre ans, sur @Naereen/slides) ;
Slides depuis Jupyter notebook avec RISE :
👍 avantages : tous les avantages d’un notebook ; c’est très innovant, et modifiable en live ; ça permet de montrer du code exécutable et de l’exécuter devant les élèves ! Ca permet aussi d’avoir un document qui sera directement exportable en HTML/PDF comme un notebook classique, ou en slide statique aussi ! Et on peut dessiner directement dans les slides !
👎 inconvénients : il faut que les cellules ne soient jamais trop longues, et une fois le notebook fini il faut une petite passe manuelle pour ajouter les tags « nouveau slide » ou « sous slide » (qui prend 2 secondes par slides), mais ça marche bien !
améliorations possibles :
le template d’export en slide PDF ou en HTML slide n’est pas génial, il y a trop de marges à gauche et en haut, mais je peux sûrement bidouiller ça ;
je peux facilement écrire un script qui rajoute le tag « nouveau slide » à chaque cellule, et ensuite il faudra juste refaire une passe pour fusionner certaines cellules ou enlever/modifier des tags ;
comment convertir en LaTeX Beamer ? Pas possible je pense, ou alors avec IPYNB -> Markdown (Marp) -> LaTeX Beamer ?
Démo : @Naereen/Tutoriel-notebooks-Jupyter-a-Didapro-8-Lille-fevrier-2020 tutoriel d’une heure sur les notebooks Jupyter, présenté à ~25 profs de lycée en février 2020 à Didapro 8 à Lille.
2.3.1.3. Autres¶
StrapDown.js : pour une petite page indépendante, ça peut permettre d’aller vite !
scripts
strapdown2pdf
(aveclunamark
+ myautotex
+pdflatex
) pour convertir en PDF : primitif mais peut dépanner ? Cf CS101.et
strapdown2html
: pour rendre autonome et « compiler » la page web une fois terminée ;j’avais aussi bidouillé un truc pour ajouter un bouton TD/TP suivant/précédent, c’est simple mais chouette ;
si je m’en sers : passer de
lunamark
àpandoc
pour la conversion Markdown -> HTML ? Et mettre à jour vers Bootstrap 4+ ?
Automatisation de compilation : GNU Make et Makefiles
👍 semble être la meilleure solution pour apprendre aux élèves à écrire des petites automatisations de leurs compilation (OCaml + C), avec des bons conseils et des bons exemples ça n’est pas trop compliqué à prendre en main ;
🤔 TODO: A voir si SCons ne serait pas plus approprié en prépa, pour leur faire faire du Python ? C’est très puissant, mais moins standard (et pas présent aux oraux !)… Pour les motivés ou les frustrés de Make seulement ?
2.3.2. Ce que je connais déjà pas mal¶
pandoc :
slides Markdown (Marp) -> LaTeX -> PDF possible (cf @Naereen/slides) ;
fichier Markdown -> LaTeX -> possible ;
avec un peu de travail, on peut probablement convertir un seul Markdown vers tous les formats de sorties ;
en fait,
jupyter-nbconvert --to latex/pdf
utilise pandoc, donc on peut changer le template aussi !
BibTeX : LE standard pour garder une bibliographie et gérer des citations dans un document :
utilisable depuis LaTeX, et Sphinx et Jupyter book ;
et petits outils
bib2html
,bibtex_beautifier.py
;avec Zotero !
Streamer un cours en direct en ligne, sans besoin de logiciel ou connexion particulière :
BigBlueButton (expert) : gratuit et libre, mais quelle instance aurai-je le droit d’utiliser ? Le plus simple « au cas où » occasionnellement ;
Jitsi (expert) : gratuit et libre, mais pas approprié pour des enseignements ou des appels avec beaucoup de gens, non ?
Twitch : peut dépanner aussi, en streamant avec OBS Studio ;
Autres : Live YouTube (jamais essayé), Live Facebook (lol) ;
Streamer un cours avec un logiciel :
Discord (expert), gratuit mais besoin de logiciels et de comptes pour tout le monde ;
Microsoft Teams (jamais réussi), payant mais besoin de logiciels et de comptes pour tout le monde ;
Zoom (jamais essayé), payant mais besoin de logiciels et de comptes pour tout le monde.
2.3.2.1. Autres¶
Mermaid.js pour faire des dessins variés (graphes, diagrammes de classes etc) peut être utilisé depuis Sphinx-doc avec sphinxcontrib-mermaid, mais pas essayé avec MyST et depuis un notebook avec Jupyter-book (il y a nb-mermaid mais déprécié, 2017), on peut aussi éditer depuis VSCode avec vscode-mermaid-editor, aquarius - A mermaid.js GUI, et mermaid-live-editor ;
2.3.3. Mauvaises idées ?¶
Tout en LaTeX naïvement : pour un même cours, ça va, mais pour plein de choses ça manque d’interactivité, notamment pour montrer du code en direct ;
Tout à la main en numérisant les feuilles : c’est très primitif, mais ça peut dépanner…
Tout à la main, depuis Tableaunoir. C’est très long, et pas modifiable a postériori…
2.3.4. Suggestions de collègues ?¶
Tout en LaTeX intelligemment : avec des templates de nouveaux documents, un jeu de macro super costaux, et le paquet
beamerarticle
(i) pour transformer des slides enarticle
(inclus dans beamer), comme faisait Serge Haddad notamment pour son cours ALGO2 en 2012) ;Avec
org-mode
: je sais que c’est balèze, mais pas tellement mieux que d’autres trucs, si ? Certains arguments en faveur deord-mode
sont solides, et par exemple des amis ou collègues comme Luc Pélissier et Martin Quinson rédigent avecorg-mode
. Mais je n’ai jamais utilisé, et ça fait trop de travail pour y passer ;Autres idées ? Contactez moi !
2.3.5. Autres pistes, considérées mais oubliées¶
🤔 Madoko : un pré-processeur Markdown qui semble très puissant, indépendant de pandoc (mais écrit dans un langage rare), gère juste la sortie en
HTML
etPDF
mais avec une apparence identique (notes / slides reveal.js ou Beamer / articles).Propose madoko.net un puissant éditeur en ligne, mais aussi installable/utilisable en ligne de commande.
Je trouve ça beau et chouette, TODO: à creuser un peu plus.
👍 Avantages : original, éditeur très chouette (mais bon, pas VSCode…) ;
👎 Inconvénients : très peu populaire, plus activement maintenu, risque de passer du temps sur un système pas stable sur le long terme ;
👎
AsciiDoc
etAsciiDoctor
: format texte un peu commerST
etMarkdown
, produit desHTML
etPDF
à laSphinx
oupandoc
: je vois pas l’intérêt comparé à ces autres outils. Le code est en Ruby, donc je serai pas/moins capable de bidouiller.👎 fastdoc utilise
AsciiDoc
et des notebooks Jupyter uniquement, et semble focalisé sur du code Python. Approprié si je développe une autre « grosse » bibliothèque Python, mais pas pour des cours.Pour dessiner des courbes et graphiques et dessins vectoriels :
👎 Asymptote (en ligne) est un logiciel de dessin très puissant, qui peut sortir du code LaTeX et autre. Aucun intérêt d’apprendre yet another syntax ;
GeoGebra (Wiki:Geogebra) est aussi très puissant, mais à part pour faire de la géométrie 2D « du collège » ou des ellipses, je vois pas le besoin. 👍 avantage : on peut exporter la figure comme du TikZ !
GNU Plot (Wiki:GNUPlot) est chouette mais basique. Peut être utilisé depuis la ligne de commande, depuis VSCode, depuis Jupyter, et peut exporter en TikZ… aucun intérêt d’apprendre yet another syntax, sauf si on veut vite fait tracer des courbes de maths ?
Matplotlib est génial (avec xkcd mode), depuis Python, et peut créer des belles figures, mais plus côté numérique. On peut expoter en LaTeX ou TikZ !
👎 PSTricks semble moins puissant que PGF/TikZ donc j’oublie !
2.4. Choix finaux ?¶
2.4.1. Dessiner des graphes simples¶
Graphviz + Dot graph ?
dans Jupyter notebook : avec graphviz mais que depuis Python… TODO: une extension avec une magic cell
%%graphviz
?dans Sphinx (rST) ou Jupyter book (rST / MyST / nb) :
sphinx.ext.graphviz
déjà utilisé dans graph.fr.html sur mon site perso ;dans LaTeX : je crois pas que ce soit simple, on peut faire
dot -Tsvg
oudot -Tpdf
pour exporter en SVG ou PDF et inclure ça dans le LaTeX, TODO: mais comment exporter en TikZ ou autre ? J’ai déjà bidouillédot2tex
en 2018, et ça supporte Python 3 maintenant, et l’utilisation depuis LaTeX (CTAN:dot2texi) !
Non mieux vaut toujours faire avec TikZ !
2.4.2. Dessiner des figures scientifiques quelconques¶
TikZ (PGF) avec LaTeX
côté bureau : utiliser QTikz (ou kTikz ou tikzzz) pour rapidement itérer sur une figure, ou VSCode ;
depuis LaTeX : c’est conçu pour ! Toujours inclure la figure avec
\input{tikz-figures/graphe-compilation12.tex}
, pour les avoir réutilisables ailleurs (un dépôt git avec juste les figures ? peut-être pas nécessaire) ;dans Jupyter notebook : avec itikz, indépendant de Python FIXME: mais ne fonctionne pas dans d’autres kernels…
dans Sphinx (rST) ou Jupyter book (rST / MyST / nb) : sphinxcontrib.tikz ? mais peut-être plus simple d’utiliser juste
%%itikz
depuis Jupyter notebooks ?Documentation : « TikZ pour l’impatient - Free » (~150 pages) (PDF) est LA référence en français, et le manuel PGF/TikZ (~1300 pages) en anglais peut aussi aider ;
Voir aussi
En 2013, j’aurai voulu utiliser gastex, maintenu par mon ancien professeur Paul Gastin (gastex @CTAN), mais plus maintenant, car gastex
semble incompatible avec TexLive 2014.
Note
Apparemment, les versions récentes de PGF/TikZ viennent avec des dizaines de librairies pour dessiner plein de choses, des automates et machines de Turing, des graphes (de fonctions et avec noeuds/arêtes) et plein d’autres ! Et on peut faire des animations comme le montrent ces documents ?
2.4.3. Écrire des algorithmes¶
Pour LaTeX : je préfère choisir
algorithm2e
(utilisé dans ma thèse). Cf documentation
\usepackage[algochapter,linesnumbered,commentsnumbered,inoutnumbered, french]{algorithm2e}
FIXME: Pour d’autres formats, il n’y a pas de possibilité bien propre… c’est un souci ! On peut toujours écrire un ptit document LaTeX avec classe
standalone
, convertir PDF to SVG ou to PNG, et inclure ça dans le document… mais c’est sale.
2.4.4. Écrire du code¶
En Markdown, MyST, rST, et Jupyter notebook, c’est trivial :
let rec fact (n: int) : int = if n <= 1 then 1 else n * (fact (n-1));;
Pour LaTeX : je préfère choisir
minted
(utilisé dans ma thèse) C’est le package utilisé quand on convertit avecpandoc
, et aussi l’export LaTeX et PDF depuis Jupyter notebook, mais pas Sphinx ni Jupyter-book. Cf documentation
\usepackage[chapter,draft=false,final=true]{minted}
2.4.5. Écrire du code et montrer sa sortie¶
En Markdown, et rST, c’est trivial mais il faut un peu copier-coller :
# let rec fact (n: int) : int = if n <= 1 then 1 else n * (fact (n-1));;
val fact : int -> int = <fun>
# fact 12;;
- : int = 479001600
En MyST ou Jupyter notebooks qui exécutent le code tapé, normalement ça se fait tout seul :
let rec fact (n: int) : int = if n <= 1 then 1 else n * (fact (n-1));;
fact 12;;
val fact : int -> int = <fun>
- : int = 479001600
Sinon on peut toujours écrire ça à la main :
# let rec fact (n: int) : int = if n <= 1 then 1 else n * (fact (n-1));;
val fact : int -> int = <fun>
# fact 12;;
- : int = 479001600
In [1]: let rec fact (n: int) : int = if n <= 1 then 1 else n * (fact (n-1));;
Out[1]:
val fact : int -> int = <fun>
Pour LaTeX : je connais pas de package bien propre qui permette de recalculer les sorties et de tout bien inclure…
TODO: ça existe peut-être ? CTAN:runcode (Bash mais générique ?), CTAN:jupynotex ;
En fait il vaudrait mieux garder des notebooks (quitte les inclure, à l’intérieur d’une autre page) pour toute partie qui montre du code ? Pénible de devoir tout faire dans un même document (algorithm2e/TikZ et code entrée/sortie)…
Je suspecte que tous les polys de cours qui sont tapés en LaTeX et inclus entrées et sorties contiennent les sorties en dure dans les
.tex
, et je trouve pas ça élégant ;Ou alors ils utilisent pandoc…
2.4.6. Autres choix¶
TODO:
Page web unique de la classe ? Cahier de Prépa semble une super idée… et c’est libre, gratuit, hébergé en France, et fiable. Balèze !
Publier des cours en PDF qui sont très bien terminés : sur CEL (HAL) ?
Publier des slides PDF : sur SpeakerDeck s’ils sont bien propres et terminés ;
2.4.7. Je dois automatiser…?¶
Par exemple, écrire un script qui fait
marp2pdf
(DONE) ;
2.4.8. Je dois m’entraîner…?¶
TikZ pour dessiner des jolies figures scientifiques ;
Mermaid.js ? c’est mignon mais bon autant maîtriser TikZ !
Écrire des algorithmes dans LaTeX ;
Utiliser BibTeX dans Jupyter notebook, ou Sphinx ;
Utiliser Zotero pour gérer la bibliographie ;