Un package LaTeX pour les cartes à jouer

sam. 29 avril 2023

Catégorie : Préparations de cours

Tags : Idées Jeux LaTeX NombresRelatifs

Non, ce blog n'est pas mort ! Je n'ai pas écrit depuis longtemps, pourtant j'aurais plein de choses à raconter. Mais pour diverses raisons, j'avais moins de temps et de motivation pour écrire.

Mais me revoilà ! C'est les vacances. Je ne suis pas débordé cette semaine, donc repos et procrastination. Mais la procrastination peut (parfois) être productive.

LaTeX ?

LaTeX est un ensemble de logiciels permettant de rédiger des documents. Ce n'est pas très connu du grand public, mais dans la communauté scientifique (en tout cas, en mathématiques), son usage est standard. C'est une alternative aux traitements de texte usuels (LibreOffice Writer, typiquement), avec une philosophie et un fonctionnement radicalement différents.

Le fait est que j'ai l'habitude de rédiger mes cours avec LaTeX ; j'ai toutes sortes d'outils pour cela, notamment des styles prédéfinis et un ensemble d'extensions (appelées packages), dont l'incroyable ProfCollege, véritable bijou.

Je ne souhaite pas entrer dans les détails du fonctionnement de LaTeX. La seule chose utile à savoir pour lire la suite de cet article est que LaTeX utilise un mécanisme de commandes pour produire les documents. Par exemple, la commande \section{Nom titre} a pour effet de créer un titre, intitulé « Nom titre ». Il est possible de créer ses propres commandes, ce qui rend le tout extrêmement flexible et personnalisable. À la fin, le document est produit, généralement au format PDF.

Des cartes à jouer ?

Il s'avère que j'aime beaucoup les jeux de société. Et j'ai la conviction que, dans certaines circonstances, ce sont d'excellents supports pédagogique et de très bons outils d'apprentissage.

Bien sûr, il faut choisir les jeux avec soin et les utiliser avec parcimonie. Beaucoup sont intéressants à utiliser avec les élèves, mais ne sont pas faciles à intégrer dans une véritable séquence d'apprentissage. Je pense par exemple à 6 qui prend.

Les jeux mobilisant de façon directe et centrale des compétences au programme sont un peu plus rares. Celui qui m'intéresse en ce moment est le Skyjo. Je ne reviens pas sur les règles, en suivant le lien précédent vous pouvez les lire.

Skyjo et nombres relatifs

Comme on le voit dans les règles, le Skyjo va mobiliser des compétences pour les additions et soustractions de nombres relatifs (retirer une carte ou une colonne de carte revient à soustraire les nombres). Seul problème : il y a peu de nombres négatifs dans le paquet, et uniquement des -1 et des -2 : c'est donc assez limité en termes de calcul pur.

Il faudrait un paquet avec davantage de nombres négatifs, et des nombres plus éloignés de zéro. La suite est évidente : il faut créer les cartes manquantes. Et c'est là que LaTeX intervient.

Dessiner des cartes

Le premier réflexe est d'essayer de bricoler quelque chose avec un logiciel de traitement de texte ou de dessin. Mais je ne suis pas très compétent en la matière : cela me prendrait du temps, pour un résultat pas terrible.

Je n'arrive pas à gérer les alignements, la présentation n'est pas uniforme, etc. Sans compter l'indispensable alignement recto-verso pour l'impression des cartes ayant deux faces. Bref : ce n'est pas la bonne solution. Il n'y a pas de mystère : le bon outil pour moi, c'est d'utiliser LaTeX.

À la recherche du bon package

Comme je le mentionnais en introduction, LaTeX peut être enrichi avec des packages. Le bon endroit pour les trouver est le site https://ctan.org/. Je fouille un peu, et je trouve des choses pour dessiner les cartes classiques d'un jeu de cartes traditionnelles, mais rien qui fournisse un modèle pour dessiner ses propres cartes.

En creusant un peu, je finis par trouver un fil de discussion sur StackExchange. Cela ne correspond pas vraiment à mon besoin, mais je vais essayer d'adapter. Objectif : avoir quelque chose d'à la fois suffisamment adapté à ce que je souhaite réaliser sur le moment, et en même temps de suffisamment flexible pour que je puisse produire d'autres types de cartes dans d'autres contextes plus tard.

Dans les entrailles de Tikz

Tikz est un package LaTeX qui permet de faire des dessins, des figures géométriques, des graphes et toutes sortes de visuels. C'est extrêmement puissant, mais aussi assez difficile à prendre en main. La documentation fait quand même 1321 pages !

Je débute en la matière, et pour apprendre, rien de mieux que prendre un code existant et de bidouiller ! Je récupère le code que j'ai trouvé sur StackExchange et je l'analyse un peu, puis je l'adapte.

Le Skyjo adapté

La version 0

Après quelques heures de travail, j'ai réussi à produire un certain nombre de choses :

  • une commande pour dessiner une carte type Skyjo, avec couleur d'arrière-plan, le nombre au centre, répété dans les coins à l'endroit à et à l'envers ;
  • une commande pour dessiner le verso d'une carte ;
  • une commande qui remplit une page A4 de cartes, convenablement alignées. Idem pour le verso.

Voici un aperçu du résultat :

Planche de cartes Skyjo personnalisé (recto-verso)

Planche de cartes Skyjo personnalisé (recto-verso)

Pour plus de fun, j'ai renommé le jeu Mathjo. Ça ne mange pas de pain et ça personnalise un peu plus, tout en rappelant que nous sommes là pour faire des maths !

Version 0.1

Maintenant j'ai le modèle de base, qui fonctionne correctement, avec le bon format (les dimensions sont celles d'un jeu de cartes classique). Le prochain objectif est de gagner en flexibilité.

Mon rêve serait d'avoir une commande du type :

\drawcard{<contenu de la carte>}{<couleur d'arrière-plan>}{<taille du texte au centre>}{taille du texte dans les coins}.

Cette commande devrait dessiner une carte avec les paramètres demandés, comme sur l'image précédente. Je voudrais aussi une commande similaire qui remplit une page A4 avec des cartes identiques pour gagner du temps.

Maintenant que j'ai le modèle de base, j'arrive à obtenir ce que je veux en quelques dizaines de minutes. C'est là toute la force de LaTeX : avec un peu d'expérience, il devient facile et rapide d'automatiser un certain nombre de tâches.

Après quelques heures de travail, j'arrive donc à produire un jeu de cartes complet : le voici en avant-première !

Vers plus de flexibilité !

Il s'avère que j'ai souvent eu besoin de cartes pour proposer des activités aux élèves. Pas toujours des cartes à jouer : parfois simplement des choses à imprimer que les élèves doivent lire, se passer, étudier puis me rendre, etc.

Le package ProfCollege fournit déjà des choses, mais c'est très ciblé sur un format particulier, qui ne répond pas vraiment à mon besoin.

Il faudrait que je puisse partir de ce que je viens de faire, en le rendant plus flexible. Les possibilités sont immenses : avec sous sans arrière-plan, en noir et plan uniquement, avec ou sans bordures, différentes tailles de texte, avec ou sans les coins, etc.

Version 0.2

Je m'inspire de ce qui existe dans le package ProfCollege pour mettre en place un système de clés-valeurs qui permette d'agir simplement sur différents paramètres. Au lieu d'une commande \drawcard{<contenu de la carte>}{<couleur d'arrière-plan>}{<taille du texte au centre>}{taille du texte dans les coins}, j'aimerais une syntaxe de la forme :

\drawcards[borders=true, trame=true, corners=true, backgroundImg=true, textColor=black, backgroundColor=red, contentsFontSize=120, circleRay=20]{6}

C'est beaucoup plus flexible : toute la partie entre crochets est facultative avec des valeurs par défaut, et elle permet de régler toutes sortes de paramètres. L'intérêt est que l'on peut rajouter sans limite des couples <clé>=<valeur> pour ajouter de la personnalisation.

Ça n'a l'air de rien, mais je n'avais jamais fait de la programmation avec LaTeX. J'ai opté pour le package simplekv pour gérer ce système. Pourquoi ce choix ? Parce que c'est celui utilisé dans ProfCollege, dont le code source est disponible. Je vais donc pouvoir m'en inspirer.

Au moment où j'écris ces lignes, nous avons possibilité de :

  • dessiner des cartes avec ou sans bordures ;
  • dessiner des cartes avec ou sans arrière-plan ;
  • de dessiner des cartes avec ou sans texte dans les coins ;
  • de dessiner les verso avec ou sans arrières-plans (texte seulement) ;
  • faire varier la taille et la couleur de tous les textes ;
  • faire varier la couleur de l'arrière-plan côté recto.

Il y a encore des extensions à imaginer. Par exemple, autoriser une image personnalisée en arrière plan.

Quelques autres usages

L'année dernière, j'avais déjà utilisé des cartes avec des nombres relatifs dans un autre contexte : un nombre affiché sur chaque carte, avec au verso la lettre P si le nombre est positif, la lettre N s'il est négatif.

Le résultat n'était pas terrible parce que j'avais travaillée sur LibreOffice Draw avec un succès mitigé. Avec ce nouvel outil, pourtant pas très abouti, j'arrive en en une dizaine de minutes au résultats suivant :

Exemple de paquets que j'ai dessiné

Exemple de paquets que j'ai dessiné

On voit ici toute la force de la philosophie de LaTeX : j'ai passé un certain temps à travailler sur le modèle que je veux, et maintenant je peux produire assez rapidement des cartes élégantes, en grande quantité, avec un niveau assez élevé de personnalisation.

La suite ?

Je vais essayer d'améliorer encore certains éléments que je considère comme importants (par exemple la possibilité de générer en un seul coup le nombre de cartes que l'on souhaite). Ensuite, nettoyage du code LaTeX (ça devrait aller, j'ai travailler assez proprement).

Après quoi, je rédige une rapide documentation et je partage le package sur CTAN, peut-être que cela pourra servir. :) C'est la première fois que je déploie un package que je considère comme suffisamment abouti pour être partagé.

Update !

J'ai rédigé cet article au brouillon hier soir… Et ce matin, je me suis remis sur ce petit projet. Résultat des courses : j'ai rédigé la documentation, créé un dépôt github et déposé le fichier sur CTAN. Il est en attente de validation par les administrateur⋅rices du projet, je ne sais pas s'il sera accepté ou pas.

Qu'il le soit ou non, ce n'est pas très grave. Finalement, je me suis bien amusé avec mini-interlude qui, tout compte fait, ne ressemble pas tant que ça à de la procrastination… J'ai approfondi des connaissances en LaTeX et cela m'a permis de produire des jolis documents utilisables avec les élèves. Je sais déjà que les cartes seront exploitées à de nombreuses reprises.

Voilà déjà une première semaine de vacances qui se termine. La semaine prochaine, je prépare mes cours pour la dernière période jusqu'à l'été. C'est fou ce qu'une année passe vite ! La preuve, l'article précédent datait de juillet…

Mise à jour (01/05/2023) — Le package a été publié sur CTAN : https://ctan.org/pkg/playcards.


Chroniques d'un prof de maths — Propulsé par Pelican et Bootstrap — Icônes par Font Awesome et Font Awesome More

Tous les articles sont publiés sous licence Creative Commons BY.