RandAssign est un programme permettant de créer des documents latex.
Dans ces documents vous pouvez paramétrer des variables de sorte que votre texte ait une composante aléatoire. Pour ma pratique professionnelle, changer des valeurs pour chaque élèves. RandAssign permet aussi de générer une correction par élève.
Je l'ai testé en Devoir en Templs Libre et en devoir surveillé pour l'instant et cela a bien fonctionné.
Pour commencer voici le lien vers le GitHub du développeur Vers GitHub
Plusieurs possibilités pour installer le package, elles sont détaillées sur GitHub. Pour ma part j'ai utilisé pip :
Le package PythonTex
doit être installé (voir ici pour découvrir ce fabuleux package)
Ensuite la réalisation de votre document se fera en suivant ces étapes :
\usepackage{pythontex} et \input{name.tex}
pour intégrer le nom de l'élève destinataire. (le fichier name.tex
sera généré automatiquement par randassing)\input{attempt.tex}
pour intégrer le numéro de la "tentative" de l'élève.from randassign import RandAssign
ra = RandAssign()
Dans cette session, les solutions des questions sont ajoutées via ra.addsoln()
.Randassign <tex_file> puis Latex <tex_file>
.D:\Python34\Scripts\randassign --texcmd "pdflatex --shell-escape -synctex=1 -interaction=nonstopmode" %.tex
J'ai repris un des exemples présent sur le github de randassign.
Voici ci-dessous un lien vers les sujets en pdf de chaque élève, un lien vers la solution et enfin un lien vers le fichier source.
J'ai "compilé" deux fois pour avoir deux "versions" ou "tentatives" par élèves.
Les sujets La solution La source students.txt
% Simple example for RandAssign
% Geoffrey M. Poore, 2015
% Adapté en français par Mikael LE MENTEC 2021
% License: Creative Commons Zero (CC0) license
% https://creativecommons.org/about/cc0
%
% Manual compile: run LaTeX, then PythonTeX, then LaTeX again
% Generate randomized assignments: run `randassign example_simple.tex`
\documentclass{article}
\usepackage{nopageno}
\usepackage{pythontex}
\usepackage{xcolor}
\usepackage{tikz}
\begin{pycode}
from randassign import RandAssign
ra = RandAssign()
from math import *
import random
\end{pycode}
\title{Exemple simple pour RandAssign \\ {\Large Attempt: \input{attempt.tex}}}
\author{NOM : \underline{~~~~\input{name.tex}~~~~}}
\begin{document}
\maketitle
\begin{pycode}
a = random.randint(1, 10)
b = random.randint(1, 10)
c = sqrt(a**2 + b**2)
ra.addsoln(round(c, 2))
\end{pycode}
Un triangle rectangle a une base de \py{a}~cm et une hauteur de \py{b}~cm. Déterminez la longueur de l'hypoténuse.
\begin{pysub}
\begin{tikzpicture}
\draw[style=help lines] (0,0) grid (10,10);
\filldraw[fill=blue!40!white] (0,0) -- (!{a},0) -- (!{a},!{b}) -- cycle;
\end{tikzpicture}
\end{pysub}
\end{document}
Remarques :
Mon objectif a été de créer un sujet de DTL (Devoir en Temps Libre) donné pendant les vacances.
Comme de nombreux collègues, je n'aime pas corriger 10 fois la même copie. J'ai donc tenté d'utiliser RandAssign pour générer un sujet par élève.
Voici ci-dessous un lien vers le dossier contenant les sources et les pdf de ce sujet de DTL :
Vers les sources Les sujets Le corrigé
Le bilan est plutôt positif :
\usepackage[output-decimal-marker={,}]{siunitx} % Pour transformer le . en virgule decimale en mode maths
\mathcode`\.="013B