Les nouvelles technologies pour l’enseignement des mathématiques
Intégration des TICE dans l’enseignement des mathématiques

MathémaTICE, première revue en ligne destinée à promouvoir les TICE à travers l’enseignement des mathématiques.

Présenter des algorithmes, morceaux de programmes avec LaTeX
Article mis en ligne le 7 décembre 2017
dernière modification le 6 janvier 2021

par Erwan Duplessy

L’auteur de l’article, Erwan Duplessy, est enseignant de mathématiques (collège, lycée) au Lycée Denis Diderot de Nairobi, Kenya. http://www.diderot.ac.ke/

LaTeX est un système de composition de document très adapté aux documents scientifiques. Cet article s’adresse donc à des personnes connaissant déjà LaTeX, et désirant rédiger des algorithmes avec LaTeX. Mais, c’est aussi l’occasion pour ceux qui ne connaissent pas d’avoir un aperçu des possibilités de ce système. L’IREM de Lyon a d’ailleurs produit une brochure spécialement dédiée aux enseignants de collège et de lycée pour apprendre à utiliser LaTeX.

L’algorithmique et la programmation sont de plus en plus présentes dans les programmes de Mathématiques, au collège et au lycée [1]. On présente ci-dessous différents outils pour rédiger des algorithmes en LaTeX afin de préparer des activités, des feuilles d’exercices, des sujets de contrôles ou d’examens de niveau collège ou lycée.

NDLR : Dans la partie 4 Geotortue, 3 lignes débordent du cadre de l’article, tout en restant lisibles. Les lecteurs gênés par cette situation se reporteront au fichier PDF en fin d’article.

1 Pourquoi utiliser LaTeX ?

LaTeX permet de produire des documents de très haute qualité. On pourra comparer par exemple deux versions du sujet de Brevet Centre Étranger 2017, en particulier les courbes de l’exercice 2. Dans l’un, la copie d’écran des graphiques fait apparaître des signes « moins ». Dans l’autre, réalisé avec LaTeX, les graphiques sont correctement réalisés.

Un des avantages, de LaTeX par rapport à Word ou LibreOffice est la possibilité de dessiner directement dans LaTeX, sans passer par un autre logiciel. Prenons Scratch comme exemple. Pour rédiger une évaluation, on peut faire le programme avec Scratch, puis faire une copie d’écran et l’insérer dans Word. Le problème est que le rendu à l’impression en noir et blanc n’est pas terrible (voir par exemple le document d’accompagnement d’Eduscol). Cela pose des problèmes de lecture pour les élèves, en particulier les élèves à besoins particuliers. La méthode utilisant LaTeX permet d’obtenir une image de meilleur qualité, car elle est redessinée. L’argument est valable pour d’autres illustrations comme des représentations graphiques de fonctions ou de graphes.

Un autre avantage est de pouvoir modifier certains éléments du dessin (taille, couleur, police par exemple). Voici quatre variations pour un même script Scratch :

Exemples Scratch (fichier source)
Des exemples d’utilisation du package scratch commentés. Ce fichier peut servir de base pour obtenir les rendus suivants.
exemples scratch (fichier pdf)
Fichier pdf produit avec pdflatex à partir du fichier source joint précédemment.


Enfin, pour sortir du cadre de l’algorithmique, notons que les blocs Texte de Geogebra peuvent être écrit en LaTeX, et que les figures de Geogebra peuvent être exportés en code lisible par LaTeX.

Cinq langages d’algorithme ou de programmation sont présentés :

  • le pseudo-code
  • Scratch [2]
  • Geotortue
  • Algobox
  • Python

Toutes les méthodes présentées se basent sur des packages déjà existants (un package est une extension de LaTeX permettant de réaliser des tâches particulières). Il n’y a que pour Geotortue où il a fallu utiliser les capacités de personnalisation d’un package.

Enfin, quelques commentaires sur les langages présentés :

  • Ce sont ceux que j’utilise en classe !
  • Il manque les programmes de type Blockly ou Sofus, et les algorithmes présentés sous forme de diagramme.
  • Une nouvelle version de Scratch devrait sortir au premier trimestre 2018, mais la présentation devrait rester quasiment identique.
  • Il y a une évolution de l’écriture des algorithmes pour le baccalauréat [3].

Pour chaque langage ou logiciels, on présente ce qui se rapproche d’un ECM (Exemple Complet Minimal). Ces exemples ont été testés avec Texmaker et MiKTeX [4].

NDLR : Ces exemples ont également été testés avec TeXLive 2017 et sont fonctionnels.

2 Le pseudo-code

Une autre méthode a déjà été décrite dans Mathématice par Alain Busser [5]. Ici, nous utilisons le package algorithm2e [6].

2.1 Le code LaTeX
  1. \documentclass[a4paper,10pt]{article}
  2. \usepackage[utf8]{inputenc}
  3. \usepackage[T1]{fontenc}
  4. \usepackage{lmodern}
  5. \usepackage[french]{babel}
  6. \usepackage[linesnumbered, french]{algorithm2e}
  7.  
  8. \begin{document}
  9.  
  10. \begin{algorithm}
  11. $n \leftarrow0 $ \;
  12. $u \leftarrow 3081,45 $ \;
  13. \Tq{$u<k$}{
  14. $u \leftarrow 1,04 \times u $ \;
  15. $n \leftarrow n+1 $ \;
  16. }
  17. \end{algorithm}
  18.  
  19. \end{document}

Télécharger

2.2 Le résultat

3 Scratch

Le package Scratch [7] [8] dessine des blocs ressemblant à ceux du logiciel Scratch. Une option du package permet de dessiner en noir et blanc (par défaut), en couleur ou en niveaux de gris. La documentation est en français. C’est ce package qui est utilisé dans les annales du brevet de l’APMEP.

3.1 Le code LaTeX
  1. \documentclass[a4paper,10pt]{article}
  2. \usepackage[utf8]{inputenc}
  3. \usepackage[T1]{fontenc}
  4. \usepackage{lmodern}
  5. \usepackage[french]{babel}
  6. \usepackage{scratch}
  7.  
  8. \begin{document}
  9.  
  10. \begin{scratch}
  11. \blockinit{Quand \greenflag est cliqué}
  12. \blockmove{avancer de \ovalnum{40} }
  13. \blockvariable{mettre \selectmenu{angle} à \ovalnum{10}}
  14. \blockrepeat{répéter \ovalnum{3} fois}
  15. {
  16. \blockmove{tourner à \turnright{} de \ovalvariable{angle} degrés}
  17. \blockvariable{ajouter \ovalnum{20} à \selectmenu{angle}}
  18. }
  19. \end{scratch}
  20.  
  21. \end{document}

Télécharger

3.2 Le résultat

4 Geotortue

Il n’existe pas de package spécifique à Geotortue. Je propose une solution qui est d’utiliser et de personnaliser le package listings [9]. Le package listings a des problèmes avec certains caractères. Une solution est proposé dans la partie Python qui utilise le même package.

4.1 Le code LaTeX
  1. \documentclass[a4paper,10pt]{article}
  2. \usepackage[utf8]{inputenc}
  3. \usepackage[T1]{fontenc}
  4. \usepackage{lmodern}
  5. \usepackage[french]{babel}
  6.  
  7. \usepackage{xcolor}
  8.  
  9. \definecolor{geoKeyword}{RGB}{153,0,51}
  10. \definecolor{geoCommand}{RGB}{0,0,123}
  11. \definecolor{geoNumbercolor}{RGB}{181,181,181}
  12. \definecolor{geoText}{RGB}{255,0,192}
  13. \definecolor{geoFonction}{RGB}{51,51,51}
  14.  
  15. \usepackage{listings}
  16.  
  17. \lstdefinelanguage{Geotortue}{
  18. morekeywords={rep, remplis, si, tant_que, boucle, écris, à, aff, def, eff, init, pause, mg, photo, retiens, retourne, pour, fin, dis},
  19. morekeywords=[2]{av, re, td, tg, vg, ct, mt, lc, bc, crayon, palette, pvd, pvg, pvh, pvb, miroir, tlp, boussole, vise, imite, pvxy, pvxz, pvyz},
  20. morekeywords=[3]{sqrt, abs, reste, sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, asinh, acosh, atanh, ln, log, round, floor, binom, rand, alea},
  21. morestring=[b][\color{geoText}]",
  22. }
  23. \renewcommand*\thelstnumber{\the\value{lstnumber}>}
  24. \lstdefinestyle{numbers}{
  25.    numbers=left,
  26.    stepnumber=1,
  27.    numberstyle=\tiny\ttfamily\color{geoNumbercolor},
  28.    xleftmargin=2em,
  29.    numbersep=2pt,
  30. }
  31. \lstdefinestyle{mygeotortue}{
  32.        language=Geotortue,
  33.        basicstyle=\ttfamily,
  34.        keywordstyle={\color{geoKeyword}\bfseries},
  35.        keywordstyle=[2]{\color{geoCommand}\bfseries},
  36.        keywordstyle=[3]{\color{geoFonction}\bfseries},
  37. }
  38.  
  39. \begin{document}
  40.  
  41. \begin{lstlisting}[language=Geotortue, style=mygeotortue, style=numbers]
  42. pour carre
  43. rep 2 [av 8 ; td 90 ; av sqrt(64) ; td 90]
  44. fin
  45. \end{lstlisting}
  46.  
  47. \end{document}

Télécharger

4.2 Le résultat

5 Algobox

Depuis le début du mois de septembre 2017, un package algobox [10] pour LaTeX est disponible. Un export depuis le logiciel Algobox était déjà possible, mais il fournissait un code assez long. Avec le package, il suffit de copier-coller dans l’éditeur depuis le logiciel Algobox, puis de modifier un peu le code.

5.1 Le code LaTeX
  1. \documentclass[a4paper,10pt]{article}
  2. \usepackage[utf8]{inputenc}% ou \usepackage[latin1]{inputenc}
  3. \usepackage[T1]{fontenc}
  4. \usepackage{lmodern}
  5. \usepackage[french]{babel}
  6. \usepackage{algobox}
  7.  
  8. \begin{document}
  9.  
  10. \begin{algobox}
  11. \;   \VARIABLES
  12. \;     k \ESTDUTYPE NOMBRE
  13. \;     n \ESTDUTYPE NOMBRE
  14. \;     p \ESTDUTYPE NOMBRE
  15. \;   \DEBUTALGORITHME
  16. \;     \POUR k \ALLANTDE 1 \A 5
  17. \;       \DEBUTPOUR
  18. \;       n \PRENDLAVALEUR 2*k
  19. \;       p \PRENDLAVALEUR k*n-4
  20. \;      \AFFICHER p
  21. \;      \FINPOUR
  22. \;  \FINALGORITHME
  23. \end{algobox}
  24.  
  25. \end{document}

Télécharger

5.2 Le résultat

6 Python

Je ne donne qu’un petit exemple car il est assez facile de trouver des méthodes. Le package listings ne gère pas très bien l’encodage UTF8 ce qui explique la nécessité de la dizaine de lignes contenant les caractères accentués.

Cette façon de rédiger est valable pour la plupart des langages de programmation car le package listings connaît des dizaines de langages (par exemple Caml, Matlab, HTML, Ruby...)

6.1 Le code LaTeX
  1. \documentclass[a4paper,10pt]{article}
  2. \usepackage[utf8]{inputenc}
  3. \usepackage[T1]{fontenc}
  4. \usepackage{lmodern}
  5. \usepackage[french]{babel}
  6.  
  7. \usepackage{xcolor}
  8. \usepackage{listings}
  9. \lstset{
  10. literate=
  11. {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1
  12. {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1
  13. {à}{{\`a}}1 {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1
  14. {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1
  15. {ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1
  16. {Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1
  17. {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1
  18. {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1
  19. {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1
  20. {ű}{{\H{u}}}1 {Ű}{{\H{U}}}1 {ő}{{\H{o}}}1 {Ő}{{\H{O}}}1
  21. {ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1
  22. {€}{{\EUR}}1 {£}{{\pounds}}1
  23. }
  24. \lstdefinestyle{stylepython}{
  25.        language=Python,
  26.        basicstyle=\ttfamily,
  27.    commentstyle=\color{green},
  28.    keywordstyle=\color{blue},
  29.    stringstyle=\color{olive},
  30.    numberstyle=\tiny,  
  31.        numbers=left,
  32.        stepnumber=1,
  33.        numbersep=5pt
  34. }
  35.  
  36. \begin{document}
  37.  
  38. \begin{lstlisting}[style=stylepython]
  39. #convertir un triplet rgb en une chaîne héxadecimale
  40. def rgb2hex(red, green, blue):
  41.     return '#%02x%02x%02x' % (red, green, blue)
  42.    
  43. ma_couleur=rgb2hex(255,18,0)
  44. \end{lstlisting}
  45.  
  46. \end{document}

Télécharger

6.2 Le résultat

7 Conclusion

J’espère que cet article donnera l’envie à certains de commencer à composer des documents avec LaTeX. Vous trouverez en fin d’article un exemple de ce qu’il est possible de faire avec LaTeX dans un petit feuillet de 9 pages contenant des exercices. Vous pouvez aussi regarder le site Chingatome qui regroupe des centaines d’exercices rédigés en LaTeX. On trouve une présentation de ce site dans l’article ChingAtome, un serveur pour créer des feuilles d’exercices du N°53 - janvier 2017 de la revue MathemaTICE.