Profitez des offres Memoirevive.ch!
La classe exam, ou comment faire un sujet de contrôle scolaire avec LaTeX

Étant donné mon métier actuel d'enseignant (de maths), je suis souvent amené à pondre des sujets de contrôle, voire d'examen. Que ce soit une source de cauchemars aussi bien pour l'élève pendant le contrôle que pour moi-même pendant la conception (et surtout la correction) de celui-ci, c'est un débat qu'il serait intéressant de mener… mais ce n'est pas mon but ici. Je me suis dit que l'utilisateur acharné de LaTeX que je suis pouvait en profiter pour parler brièvement d'une classe de documents qui lui est très utile en ce moment. Et pour cause : elle est conçue pour la rédaction d'un sujet de contrôle. Cette classe s'appelle, très adéquatement, exam.

Voici donc le code LaTeX d'un sujet de contrôle complet sur la forme (bien qu'un tantinet fantaisiste sur le fond :-)) utilisant la classe exam.

% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = lualatex
\documentclass[12pt]{exam}

\usepackage{unicode-math}
\usepackage[frenchb]{babel}

\begin{document}
\begin{questions}

  \question Démontrer que \( (a+b)^2 = a^2 + 2ab + b^2 \).

  \question Quelle était la couleur du cheval blanc d'Henri~IV ?

  \question La bataille de Marignan est une des plus célèbres de l'histoire de France.
  
  \begin{parts}
  
    \part Quand a-t-elle eu lieu ?

    \part Comment s'appelait le roi de France vainqueur de cette bataille ?

  \end{parts}

\end{questions}

\end{document}

On voit que chaque question est contenue dans un environnement questions et introduite par une commande \question qui lui attribuera automatiquement un numéro, à la manière d'une liste LaTeX enumerate. L'une de ces questions est même divisée en plusieurs parties, contenues elles dans un environnement parts et introduites (et numérotées adéquatement) par les commandes \part. Si besoin est, il existe également des environnements \subparts et subsubparts ainsi que les commandes idoines, ce qui fait pas moins de quatre niveaux de subdivision disponibles.

La compilation de cet exemple (prévu pour LuaLaTeX) produira ce questionnaire pour l'instant très spartiate :

exam_minimal

Bien entendu, il est possible de prévoir les solutions de chaque question… et de les imprimer. Pour cela on utilise l'environnement… solution. En option de cet environnement, on peut indiquer l'espace prévu pour la réponse de l'élève lui-même. Tandis que pour faire apparaître les solutions proprement dites dans le document, il faudra placer l'option answers dans le préambule ! Comme ici :

% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = lualatex
\documentclass[12pt,%
addpoints,%
answers%
]{exam}

\usepackage{unicode-math}
\usepackage[frenchb]{babel}

\begin{document}
\begin{questions}

  \question Démontrer que \( (a+b)^2 = a^2 + 2ab + b^2 \).

  \begin{solution}[5\bigskipamount]
    \[
      (a+b)^2 = (a+b)\times(a+b) = a^2 + ab + ba + b^2 = a^2 + 2ab + b^2.
    \]
  \end{solution}

  \question Quelle était la couleur du cheval blanc d'Henri~IV ?

  \begin{solution}[3\bigskipamount]
    noir avant d'être recouvert de farine.
  \end{solution}
  
  \question La bataille de Marignan est une des plus célèbres de l'histoire de France.
  
  \begin{parts}
  
    \part Quand a-t-elle eu lieu ?
  
    \begin{solution}[3\bigskipamount]
      en 1515.
    \end{solution}

    \part Comment s'appelait le roi de France vainqueur de cette bataille ?

    \begin{solution}[3\bigskipamount]
      François~1\ier.
    \end{solution}

  \end{parts}

\end{questions}

\end{document}

Sans l'option answers, le document aurait cette allure :

exam_minimal_espaces

On voit apparaître des espaces verticales supplémentaires entre les questions, de façon que l'élève ait la place de rédiger sa propre réponse. On peut utiliser un multiple de n'importe quelle unité courante pour indiquer ces espaces (par exemple 2cm, 13mm, 3in, etc.). Pour ma part, j'aime bien introduire ces espaces en termes de multiples de lignes : la commande \bigskipamount qui figure en option de mes environnements solution est en fait une «longueur» LaTeX équivalente à un saut de ligne dans le document.

Maintenant, en utilisant l'option answers, on obtiendrait ceci :

exam_minimal_solutions

C'est bien beau, me diriez-vous, mais il manque encore des choses ! Par exemple, que serait un contrôle sans l'indication des points affectés aux questions ? Il suffit pour cela de placer ces points en option des commandes \question (ou des commandes \part, \subpart, etc.). Notez l'utilisation de la commande \half qui permet d'imprimer les cotes avec demi-points.

\begin{questions}

  \question[1\half] Démontrer que \( (a+b)^2 = a^2 + 2ab + b^2 \).

  \begin{solution}[5\bigskipamount]
    \[
      (a+b)^2 = (a+b)\times(a+b) = a^2 + ab + ba + b^2 = a^2 + 2ab + b^2.
    \]
  \end{solution}

  \question[1\half] Quelle était la couleur du cheval blanc d'Henri~IV ?

  \begin{solution}[3\bigskipamount]
    Noir avant d'être recouvert de farine.
  \end{solution}
  
  \question[2] La bataille de Marignan est une des plus célèbres de l'histoire de France.
  
  \begin{parts}
  
    \part Quand a-t-elle eu lieu ?
  
    \begin{solution}[3\bigskipamount]
      En 1515.
    \end{solution}

    \part Comment s'appelait le roi de France vainqueur de cette bataille ?

    \begin{solution}[3\bigskipamount]
      François~1\ier.
    \end{solution}

  \end{parts}

\end{questions}

Le contrôle aura alors (par défaut, et sans l'options answers) cette apparence :

exam_points

On constate l'apparition des points de chaque question juste avant leur intitulé. Or une des fonctionnalités les plus intéressantes de la classe exam est de permettre de construire un tableau récapitulatif de ces points, avec leur total automatiquement calculé. Pour cela, il faut d'abord introduire l'option addpoints à la déclaration de document

\documentclass[12pt,%
addpoints,%
answers%
]{exam}

Et puis on placera la commande \gradetable là où on souhaite faire apparaître cette table de points, qui apparaîtra ainsi (après deux compilations consécutives) :

tableau_points

Et ainsi, une fois la copie corrigé l'enseignant peut noter les cotes dans le tableau et calculer plus facilement la cote finale de l'élève : ultra-pratique si les questions sont nombreuses et le contrôle long !

Noter qu'à la place de « cote » (un belgicisme, en français de France on écrira « note »), c'est le mot « score », un peu trop anglo-saxon, qui s'afficherait, si je n'avais pas placé la commande \hsword{Cote:}, juste avant la commande \gradetable.

Reste à ajouter le decorum habituel : les en-têtes et pieds-de-page, censés contenir (entre autres) le nom des élèves et leur classe. Voici un exemple de la façon dont il faut procéder, à placer en préambule du document.

\pagestyle{headandfoot}
\firstpageheader{Nom : \\ Prénom :}
  {}
  {classe : \texttt{www.cuk.ch} \\ Date : \today}
\firstpagefooter{}{Page~\thepage}{}

Le tout mis ensemble fournit le document LaTeX complet suivant :

% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = lualatex
\documentclass[12pt,%
addpoints,%
answers%
]{exam}

\usepackage{unicode-math}
\usepackage[frenchb]{babel}

\pagestyle{headandfoot}
\firstpageheader{Nom : \\ Prénom :}
  {}
  {classe : \texttt{www.cuk.ch} \\ Date : \today}
\firstpagefooter{}{Page~\thepage}{}

\hsword{Cote:}

\begin{document}

\begin{center}
  {\huge\bfseries\sffamily Contrôle pour rire}
  \par\bigskip
  \gradetable[h]
\end{center}

\begin{questions}

  \question[1\half] Démontrer que \( (a+b)^2 = a^2 + 2ab + b^2 \).

  \begin{solution}[5\bigskipamount]
    \[
      (a+b)^2 = (a+b)\times(a+b) = a^2 + ab + ba + b^2 = a^2 + 2ab + b^2.
    \]
  \end{solution}

  \question[1\half] Quelle était la couleur du cheval blanc d'Henri~IV ?

  \begin{solution}[3\bigskipamount]
    Noir avant d'être recouvert de farine.
  \end{solution}
  
  \question[2] La bataille de Marignan est une des plus célèbres de l'histoire de France.
  
  \begin{parts}
  
    \part Quand a-t-elle eu lieu ?
  
    \begin{solution}[3\bigskipamount]
      En 1515.
    \end{solution}

    \part Comment s'appelait le roi de France vainqueur de cette bataille ?

    \begin{solution}[3\bigskipamount]
      François~1\ier.
    \end{solution}

  \end{parts}

\end{questions}

\end{document}

Lequel aura l'apparence finale suivante (sans les réponses) :

exam_complet

Et avec les réponses :

exam_complet_reponses

Précisons que ce n'est qu'un exemple très basique des fonctionnalités de la classe exam. Celle-ci fournit de nombreuses possibilités de personnalisation. Par exemple, au lieu de prévoir un espace vide pour les réponses, le rédacteur peut introduire des lignes blanches, ou des pointillés, et/ou prévoir des encadrés pour les contenir. Ou bien, pour les solutions, il peut décider d'imprimer le mot « Réponse », ou n'importe quel mot de son choix à la place des « Solution », et de supprimer les encadrés prévus par défaut. Il peut également indiquer la cotation (le barême, en « belge ») dans la marge, en vis-à-vis de la question, plutôt que dans la question elle-même. Ou encore, plutôt que par de simples numéros, il peut choisir une liste du type « Question 1 », « Question 2 »… Etc. Tout cela est détaillé et bien expliqué dans la documentation du package.

Voilà, voila… J'espère que les enseignants parmi vous qui sont des « TeXniciens » auront été intéressés par cet article… Et que celui-ci fournira une motivation supplémentaires aux autres enseignants pour se mettre à LaTeX ! Quant aux non-enseignants, ils auront eu la possibilité de jeter un œil dans les coulisses de la préparation d'un sujet de contrôle… du moins chez un TeXnicien convaincu ! :-)

11 commentaires
1)
nathalex
, le 08.01.2015 à 09:25

Bonjour Franck,

Dans la série des outils pour mettre en place des évaluations d’étudiants, ton sujet arrive la semaine où je découvre le travail d’un collègue lyonnais qui a réalisé un outil de réalisations de QCM, qui marche également avec LaTeX (mais pas que…) et qui s’occupe d’à peu près tout, y compris de la correction !!
Toutes les infos ici : http://home.gna.org/auto-qcm/
(une fois que je l’aurai pris en main de manière un peu plus file, je pourrai en faire un billet ici si vous voulez).

Et merci pour la découverte d’exam, cet outil supplémentaire !

2)
Franck Pastor
, le 08.01.2015 à 09:33

Merci pour l’adresse, ça me servira aussi. J’aurais pu d’ailleurs mentionner que la classe exam propose également des fonctionnalités pour établir des QCM. Comme je ne m’en suis encore jamais servi, je n’en ai pas parlé. C’est détaillé dans la documentation, comme le reste (section 5, page 41 et suivantes).

Pour ton billet, ce serait une excellent idée. À suggérer au patron !

3)
infisxc
, le 08.01.2015 à 09:38

Merci Franck pour cette petite présentation que je me garde sous le coude. Ça pourra sans doute me servir.

4)
François Cuneo
, le 08.01.2015 à 11:14

Pas mal, j’admets!

Bon, avec Word, j’y arrive aussi (sauf le tableau récapitulatif automatique je pense).

Alors pour moi, OK dès qu’il y a des formules, mais sinon, pour un sujet de contrôle scolaire, il faudrait qu’on se retrouve avec un travail à « copier » venu d’ailleurs que personne n’aurait eu le temps d’étudier avant.

Et toi avec Latex, moi avec Word, on se lance, et on regarde qui est le plus efficace.

6)
Saluki
, le 08.01.2015 à 15:48

quelques grains à moudre

Je me suis contenté de lire l’ «  abstract » et j’ai bien rigolé.

Bien avant Windows, nous avions en 1982 un PC qui tournait sous Pro-Dos.
Pour effectuer n’importe quelle commande, il fallait placer au clavier une combinaison de quatre touches…

7)
Franck Pastor
, le 08.01.2015 à 16:00

Quand j’ai lu dans cet article que LaTeX conduit ses adeptes à produire plus d’erreurs typographiques, j’ai eu aussi envie de rire. C’est justement le contraire qui est vrai : je l’ai expérimenté quand j’étais assistant universitaire et je continue à le voir tous les jours dans mon travail d’enseignant. Les classes LaTeX sont conçues pour respecter les canons de la typographie les plus stricts, et leurs utilisateurs n’en dévient donc généralement pas d’un micro-mètre. Tandis que Word et consorts laissent justement toute liberté à l’utilisateur de faire tous le gâchis qu’il veut, et il ne s’en prive généralement pas. Je me demande donc si l’étude est sérieuse…

8)
nathalex
, le 08.01.2015 à 18:08

L’utilisateur de LaTeX que je suis ne va pas défendre Word mais quand j’avais lu l’article, j’avais compris par erreurs typographiques les différentes coquilles que l’on peut faire en cours de frappe, qui sont signalées plus ou moins automatiquement dans Word mais pas forcément dans la plupart des éditeurs LaTeX (en dehors de Mac OS X qui plus est si je ne m’abuse)

9)
Zallag
, le 08.01.2015 à 18:55

Quant à moi, j’ai fait moult maquettes pour des interrogations en utilisant une forme de publipostage, à savoir des questions ou réponses tapées rapidement dans un tableau Word servant de source, puis mises sans effort en forme dans un ou des documents Word.

10)
jacksonV
, le 08.01.2015 à 22:19

J’utilise régulièrement la classe exam pour mes travaux (contrôles d’histoire). J’aime bien les lignes très fines pour les réponses, c’est quelque chose qui m’énervait souvent avec Word et Pages, mais peut-être que je manquais de technique. Avec exam, il faut juste indiquer la hauteur souhaitée. J’ai automatisé la date aussi, mois et année, ainsi que le calcul du nombre total des points.

Autre point fort de Latex pour mon usage, les commentaires. Je prépare un grand nombre de questions, puis je commente celle que je ne vais pas poser. Elles pourront servir une autre année, ou pour une autre classe.

Je ne connaissais pas \bigskipamount. Merci M. Pastor pour ces articles qui m’ont fait découvrir Latex il y a deux ans!