← Retour à l'app Centre d'aide

Énoncés : source / generated / validated

Pour qu'un livret PDF complet soit produit (énoncé + copie + note

  • rapport), l'app a besoin d'un énoncé corrigé validé pour chaque devoir. Cet énoncé passe par trois états successifs.

État 1 — source

Tu déposes le fichier .tex du sujet brut (sans corrigé). C'est l'énoncé tel que tes étudiants l'ont reçu, ou que tu vas mettre en exergue dans le livret.

Section Énoncé de la fiche du devoir → « Déposer l'énoncé source » → choisis ton .tex. L'app le stocke et passe l'état à source.

Tu peux aussi sauter cet état et passer directement à generated si tu te suffis du corrigé sans énoncé séparé — mais c'est rarement souhaitable, l'élève reçoit alors un livret sans le sujet rappelé.

Forme attendue du fichier source

L'app est volontairement tolérante sur la forme du .tex : l'IA qui produit le corrigé sait gérer plusieurs styles d'écriture. Tu n'as pas besoin de te plier à un gabarit. Les règles essentielles sont décrites ci-dessous.

Ce qui est obligatoire

  • Extension .tex.
  • Encodage : UTF-8 de préférence, mais l'app accepte aussi les .tex en Latin-1 / Windows-1252 (fréquent sur d'anciens fichiers français à accents) et les convertit automatiquement en UTF-8 au dépôt. Tu n'as donc rien à faire si tes é, à, ô… s'affichent mal après un export d'un vieux logiciel.
  • Contenu LaTeX : au moins une commande LaTeX (\…). Un fichier de texte brut sans commandes est rejeté avec NOT_LATEX.
  • Taille : 512 Kio maximum (largement suffisant pour un sujet d'examen).
  • Non vide : un fichier vide est rejeté.

Document complet ou corps seul : les deux marchent

L'app accepte indifféremment :

(a) Un document LaTeX complet, avec préambule et balises \begin{document} / \end{document} — c'est typiquement ton sujet imprimable tel quel :

\documentclass[11pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage{amsmath,amssymb}
\begin{document}
\section*{Exercice}
On considère le problème $y''(t)+y(t)=0$ pour $t\in(0,T]$, avec
$y(0)=\alpha$ et $y'(0)=\beta$.
\begin{enumerate}
  \item Proposer un schéma centré pour $y''$.
  \item Démontrer la convergence à l'ordre 2.
\end{enumerate}
\end{document}

(b) Le corps seul, sans préambule ni balises de document :

\section*{Exercice}
On considère le problème $y''(t)+y(t)=0$ pour $t\in(0,T]$, avec
$y(0)=\alpha$ et $y'(0)=\beta$.
\begin{enumerate}
  \item Proposer un schéma centré pour $y''$.
  \item Démontrer la convergence à l'ordre 2.
\end{enumerate}

Sous le capot, l'app retire automatiquement les balises \begin{document} / \end{document} avant d'envoyer le contenu à l'IA — donc la forme (a) ou (b) ne change rien au résultat.

Organisation interne : ton choix, respecté à l'identique

Ton énoncé est copié verbatim dans le corrigé final : ses sectionnements et environnements sont préservés tels quels — l'IA ne les renomme pas, ne les rétrograde pas, ne les renumérote pas. La structure que tu choisis pour rédiger ton énoncé est celle qui apparaîtra dans le PDF du livret, et c'est aussi celle qui détermine le découpage de la solution et du barème (une note par question reprend exactement la même hiérarchie).

Pour que l'app puisse poser une note par question, elle doit pouvoir lire ta hiérarchie à partir de commandes LaTeX standards. La liste ci-dessous est exhaustive.

Marqueurs de structure reconnus

  • Sectionnements (séparateurs d'exercices, parties, etc.) : \part, \chapter, \section*, \subsection*, \subsubsection*, \paragraph* (avec ou sans étoile). Les sauts de niveau sont autorisés (tu peux passer de \section* à \subsubsection* sans écrire le \subsection* intermédiaire).
  • Environnements d'exercice nommés : \begin{exercise}[Titre], \begin{exercice}[Titre], \begin{Exercise}{Titre} (package exercise), \begin{problem}[Titre], \begin{question}[Titre] (package exsheets). Tous fonctionnent ; l'argument [Titre] est optionnel.
  • Listes de questions : \begin{enumerate}…\end{enumerate} ou \begin{itemize}…\end{itemize}. Chaque \item est une question notée. Imbrication libre : un \item peut contenir une sous-enumerate pour décomposer une question en sous-questions (jusqu'à 4 niveaux d'imbrication Section/Liste au total).
  • Labels d'items : \item[Mon label] est respecté — le barème utilise le même label.
  • Classe exam (convention anglo-saxonne, plus rare en France) : \begin{questions}…\end{questions} avec ses \question[N] (et optionnellement \begin{parts}…\part[N] pour les sous-questions, \begin{subparts}…\subpart[N] pour les sous-sous-questions). Le [N] est l'indication de points par l'enseignant — recopié verbatim dans le barème.

Ce qui n'est PAS reconnu

  • Numérotation manuelle dans le texte : 1. … 2. …, (a) (b), Exercice 1., Question 3 :, etc. Ces conventions visuelles ne sont pas détectées comme structure — il faut utiliser un vrai \enumerate (LaTeX numérotera tout seul).
  • Macros maison : \Exo{…}, \MaQuestion{…} et autres \newcommand perso ne sont pas analysés (l'app ne lit pas ton préambule pour les déplier).
  • Environnements non listés ci-dessus : description, tasks, etc. — recopiés verbatim mais ignorés pour le découpage.

Règle d'imbrication

Une Section (heading ou environnement nommé) ne peut pas apparaître à l'intérieur d'un \item. Si tu veux décomposer une question, utilise une sous-enumerate ou une sous-itemize, pas un nouveau \subsection*.

Recettes qui marchent

  • TD simple : un \enumerate global de questions.
  • Sujet à 2 exercices : \section*{Exercice 1} + son \enumerate + \section*{Exercice 2} + son \enumerate.
  • Concours / sujet long : \part{Partie A} + plusieurs \section*{Exercice N} + leurs \enumerate, avec optionnellement des sous-\enumerate pour les sous-questions (a/b/c).
  • Style « exercise » : \begin{exercice}[Titre]…\end{exercice}
    • son \enumerate à l'intérieur.
  • Style « exam » (sujet d'examen anglo-saxon) : \documentclass{exam} + \begin{questions} + plusieurs \question[N], avec éventuellement un \begin{parts} interne pour les sous-questions.

Conséquence sur le barème et la solution

L'app pose les points sur les feuilles (les \item qui ne contiennent pas de sous-liste). Si tu organises ton énoncé en Exercice 1 → Q1 + Q2 (sous-questions Q2a + Q2b) + Q3, le barème notera : Q1 (k₁ points), Q2a (k₂ₐ points), Q2b (k₂ᵦ points), Q3 (k₃ points), Total. Aucun « total intermédiaire » sur Q2 — la somme se fait sur les feuilles uniquement.

Si ton énoncé n'utilise aucun des marqueurs reconnus (juste du texte avec numérotation manuelle), le barème dégénère en une seule ligne Total globale et la solution est rédigée en un seul bloc. Aucune erreur, mais aucune granularité non plus.

Prompt prêt à l'emploi pour rédiger l'énoncé avec une IA

Beaucoup d'énoncés sont aujourd'hui rédigés avec une IA (ChatGPT, Claude, Gemini…). Le problème courant : l'IA produit du LaTeX visuellement correct mais structuré avec des macros maison ou de la numérotation manuelle, que le découpage automatique ne sait pas lire (cf. « Ce qui n'est PAS reconnu » ci-dessus).

Copie-colle le bloc suivant en tête de ta demande à l'IA, suivi de l'énoncé que tu veux obtenir. Il contraint l'IA à produire un .tex directement exploitable par l'app :

Tu rédiges un énoncé d'examen en LaTeX. Respecte STRICTEMENT ces
règles de structure (un outil automatique doit pouvoir découper
l'énoncé en exercices et questions) :

1. Un document LaTeX complet et compilable (\documentclass{article},
   packages amsmath/amssymb, \begin{document} … \end{document}).
2. CHAQUE exercice commence par un sectionnement standard :
   \section*{Exercice 1 : ...}, \section*{Exercice 2 : ...}, etc.
   N'utilise PAS de macro maison (pas de \newcommand{\exercice}),
   ni de \textbf{Exercice 1} à la main.
3. CHAQUE question est un \item d'un environnement enumerate :
       \begin{enumerate}
         \item première question
         \item deuxième question
       \end{enumerate}
   N'écris JAMAIS la numérotation à la main (« 1. », « a) »,
   « Question 3 : »). LaTeX numérote tout seul.
4. Les SOUS-questions sont un enumerate imbriqué DANS le \item
   parent (pas un \textbf{a.} ni un \subsection). Maximum
   4 niveaux d'imbrication.
5. Les formules vont dans $...$, \[...\], equation, align, cases :
   c'est libre, ce contenu n'a pas de contrainte de structure.
6. Si tu veux indiquer un barème, mets-le en argument optionnel
   d'item : \item[3 pts] ... — l'outil le reprend tel quel.

Rends UNIQUEMENT le code LaTeX, sans explication. Voici l'énoncé
à produire :
[décris ici tes exercices, ou colle ton brouillon à reformater]

Un énoncé produit ainsi génère un barème et une solution question par question, sans avertissement de structure.

La conformité de l'énoncé, jugée par l'IA

Quand tu déposes un énoncé, une IA évalue automatiquement sa structure (le même modèle que pour la génération) — quelques secondes pendant lesquelles le bouton « Générer » est désactivé. Deux cas :

  • Elle le juge exploitable → la boîte affiche « ✓ Énoncé conforme » et tu peux générer.

  • Elle détecte un problème (titres d'exercices via une macro maison comme \exercice{…}, numérotation écrite à la main, exercices non délimités…) → la boîte affiche « Ton énoncé doit être restructuré » avec la raison, et te demande :

    • « Oui, corriger la structure » → l'IA restructure l'énoncé automatiquement (sans toucher au contenu mathématique), jusqu'à ce qu'il soit conforme. Ta source est remplacée, puis tu peux générer.
    • « Non, générer tel quel » → tu gardes ton énoncé ; mais les exercices et questions ne seront pas distingués et le barème se réduira à une note globale.

Tant que tu n'as pas répondu, la génération reste bloquée (on règle la structure d'abord). C'est l'IA qui sert de juge : la demande n'apparaît donc que lorsqu'il y a un vrai problème de découpage. (Les environnements mathématiques — equation, cases, center… — ne sont jamais considérés comme des défauts.)

Tu peux aussi éviter tout ça en structurant correctement dès la rédaction (voir le prompt ci-dessus).

Ce qui est nettoyé silencieusement

L'app applique quelques nettoyages avant d'envoyer ton source à l'IA :

  • Préambule + balises de document retirés : \documentclass, tous les \usepackage, toutes tes \newcommand, ainsi que les balises \begin{document} / \end{document} sont jetés. L'IA reçoit uniquement le corps de l'énoncé. Elle reconstruit ensuite son propre préambule pour le corrigé (amsmath, amssymb, quelques macros standards \R, \N, \Z, \Q, \C).
  • Blocs Markdown ( latex ... ) si tu as copié ton code depuis un éditeur Markdown.
  • Signatures d'email (lignes commençant par -- et tout ce qui suit) si tu as copié-collé un sujet reçu par mail.

Ces nettoyages ne modifient pas le fichier sur disque ; ils n'agissent que sur la copie envoyée à l'IA.

Attention — packages et macros perso. Comme ton préambule est jeté, tes packages exotiques (tikz, circuitikz, esvect, pgfplots, siunitx, chemfig, etc.) et tes macros personnelles (\newcommand{\norme}[1]{\|#1\|}, etc.) ne se retrouvent pas automatiquement dans le .generated.tex. Si ton sujet utilise ces commandes dans son corps, l'IA essaie de deviner les packages nécessaires en voyant les \tikz{…} ou \SI{…} dans le corps — c'est une devinette, pas une reproduction fidèle. Conséquence pratique : si tu utilises du LaTeX inhabituel, vérifie la compile du .generated.tex (bouton Compiler) avant de valider. Si elle échoue, ajoute à la main les \usepackage{...} et \newcommand{...} manquants en éditant le .generated.tex dans la textarea (état 2 ci-dessous).

Langue du corrigé

Le corrigé (solution + barème) est produit dans la langue de ta classe (paramétrée à sa création). Ton énoncé est reproduit tel que tu l'as déposé.

Exemple pédagogique commenté

Voici un sujet réel (test 15 min) tel que livré par l'enseignant :

\documentclass[11pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{amsmath,amssymb}
\usepackage[a4paper,margin=2.5cm]{geometry}
\usepackage{enumitem}
\begin{document}

\begin{center}
{\Large \textbf{Test -- Schémas numériques}}\\[0.3cm]
Durée : 15 min
\end{center}

\section*{Exercice}

On considère le problème de Cauchy
\[
y''(t)+y(t)=0,
\qquad t\in(0,T],
\]
avec les conditions initiales $y(0)=\alpha$ et $y'(0)=\beta$.

\begin{enumerate}[label=\textbf{\arabic*.}]
\item Approximation centrée de $y''(t_n)$ → schéma explicite.
\item Initialisation de $y_1$ par Taylor.
\item Formule explicite pour $y_2$.
\item Définition de la convergence à un pas.
\item Théorème : consistance + stabilité $\Rightarrow$
      convergence.
\end{enumerate}

\end{document}

Ce que produit la pipeline dans le .generated.tex (extrait schématique) :

\documentclass[11pt,a4paper]{article}
... (TON préambule recopié verbatim — pas réinventé) ...
\begin{document}
\maketitle

%%__STATEMENT__%%
\section*{Énoncé}
\addcontentsline{toc}{section}{Énoncé}
... (TON énoncé copié verbatim — la pipeline n'y touche pas) ...

%%__SOLUTION__%%
\section*{Solution}
\addcontentsline{toc}{section}{Solution}
... (résolution détaillée produite par l'IA, alignée sur la
     structure interne de ton énoncé) ...

%%__GRADING__%%
\section*{Barème}
\addcontentsline{toc}{section}{Barème}
... (barème détaillé question par question, produit par l'IA) ...

\end{document}

Le document généré comporte trois sections délimitées par des marqueurs machine invisibles dans le PDF : %%__STATEMENT__%% (début de l'énoncé), %%__SOLUTION__%% (début de la solution), %%__GRADING__%% (début du barème), et un placeholder %%__GRADING_PAYLOAD__%% à l'intérieur du bloc Barème.

Tu peux modifier librement les titres visibles (\section*{Énoncé}, \section*{Solution}, \section*{Barème}) ainsi que tout contenu mathématique, tant que tu conserves les marqueurs machine et leur ordre. Si tu en supprimes un, la pipeline de correction lèvera une erreur explicite.

État 2 — generated

À partir du sujet source, l'app génère le corrigé via IA.

  • Bouton « Générer le corrigé » sur la fiche du devoir.
  • Sélectionne le cours à utiliser comme contexte (vois Cours pour la génération).
  • L'app appelle l'IA. Compte ~30-60 secondes pour un sujet de taille moyenne. Tu reçois le fichier <slug>.generated.tex éditable dans une textarea sur la fiche.

Tu peux :

  • Éditer manuellement le LaTeX (correction d'une faute, ajout d'un détail).
  • Demander à l'IA d'éditer via une instruction en langage naturel (« reformule l'exercice 2 », « ajoute le calcul de la question 3 », « simplifie la rédaction »). Vois Éditer l'énoncé par IA.
  • Regénérer complètement (le bouton « Générer » devient « Regénérer »).

Tu peux faire autant d'aller-retours que tu veux. L'état reste generated tant que tu n'as pas validé.

État 3 — validated

Quand tu es satisfait du .generated.tex, clique « Valider » en haut de la section.

À partir de cet état :

  • Le fichier est compilé automatiquement en PDF de référence (<slug>.pdf) qui sera intégré dans chaque livret étudiant.
  • Le pipeline de correction des copies peut tourner (le bouton « ▶ Tout lancer » devient actif).
  • Toute édition postérieure remet l'état à generated et invalide la compilation.

Comprendre les statuts à l'écran

Sur la fiche du devoir, la section Énoncé affiche un badge d'état :

État Signification
aucun Pas encore d'énoncé déposé ni généré.
source Sujet brut déposé, pas encore généré.
generated Corrigé généré, en cours d'édition ou non validé.
validated Corrigé validé, PDF compilé, pipeline peut tourner.

Compiler manuellement

Si tu veux compiler le .generated.tex pour voir le rendu PDF avant validation (utile pour repérer une faute LaTeX), bouton « Compiler » sur la section. L'app appelle pdflatex côté serveur et affiche le PDF ou les erreurs de compilation.

Cas d'erreur

NOT_LATEX

Le fichier déposé en source n'est pas reconnu comme du LaTeX :

  • soit c'est un binaire (PDF, image, fichier Word…) : ces formats sont rejetés même renommés en .tex ;
  • soit c'est bien du texte mais il ne contient aucune commande LaTeX (pas un seul \) — du texte brut sans formules.

L'encodage n'est pas une cause de rejet : un .tex en Latin-1 / Windows-1252 est accepté et converti en UTF-8. Vérifie donc surtout l'extension .tex et le contenu dans un éditeur de texte.

EMPTY_FILE

Le fichier déposé est vide. Vérifie que tu pointes le bon fichier dans le sélecteur.

FILE_TOO_LARGE

Le fichier dépasse 512 Kio. Pour un sujet d'examen, c'est extrêmement rare ; vérifie que tu n'as pas inclus par erreur des images encodées en base64 ou un PDF embarqué.

INVALID_COURSE

Le cours sélectionné pour la génération est introuvable.

NOT_GENERATED

Tu cliques « Valider » sans avoir d'abord généré le corrigé.

PDFLATEX_NOT_FOUND

pdflatex n'est pas installé côté serveur. Erreur d'administration — contacte l'admin de l'instance.

NOT_COMPILED

Tu cliques « Lancer le pipeline » alors que l'énoncé n'a pas encore été compilé.