questions et barèmes séparés

Added by Anthony Siaudeau over 1 year ago

bonjour,
je cherche à pouvoir paramétrer le barème d'une question en dehors de la question. J'ai un fichier à part dans lequel il y a tous mes elements (une seule question par \element dans mon cas ) et je souhaiterai utiliser la même question mais avec des barèmes différents dans plusieurs QCMs différents. Idéalement je voudrai faire quelque chose comme ceci :

begin{copieexamen}[0]
...

\cleargroup{ceQCM}

\mybareme{mon bareme de la question simple 1}
\copygroup{element de la question1}{ceQCM}

\mybareme{mon bareme de la question simple 2}
\copygroup{element de la question2}{ceQCM}

\restituegroupe{ceQCM}

...
\end{copieexamen}

J'ai essayé plusieurs constructions de \mybareme avec des macros classiques, du code Lua ou avec \pgfkeys mais actuellement seul le barème de la question 2 est utilisé.
Est-ce que ma demande est faisable ?


Replies (5)

RE: questions et barèmes séparés - Added by Alexis Bienvenüe over 1 year ago

On peut essayer de stocker les barèmes dans une liste que l'on utilisera plus tard. Par exemple, juste après le \begin{document} :

\ExplSyntaxOn

\prop_new:N \amc_scoring_q_prop

\cs_new:Npn \amc_scoring_q_add:nn #1 #2 {
  \prop_put:Nnn \amc_scoring_q_prop { #1 } { #2 }
}

\tl_new:N \amc_scoring_q_value
\cs_new:Npn \amc_scoring_q_apply:n #1 {
  \prop_get:NnNTF \amc_scoring_q_prop { #1 } \amc_scoring_q_value
  { \scoring{ \amc_scoring_q_value } } { }
}

\cs_new_eq:NN \AMCsetScoring \amc_scoring_q_add:nn
\cs_new_eq:NN \AMCapplyScoring \amc_scoring_q_apply:n

\ExplSyntaxOff

\AMCsetScoring{question1}{b=4}
\AMCsetScoring{question2}{mz=2}


Et dans le code qui définit les questions, utiliser \AMCapplyScoring à chaque fois qu'on veut définir un barème à partir de la liste, comme par exemple :
\element{general}{
  \begin{question}{question1}\AMCapplyScoring{question1}
    Parmi les personnalités suivantes, laquelle a été présidente de la république française~?
    \begin{reponses}
      \bonne{René Coty}
      \mauvaise{Alain Prost}
      \mauvaise{Marcel Proust}
      \mauvaise{Claude Monet}
    \end{reponses}
  \end{question}
}

\element{general}{
  \begin{questionmult}{question2}\AMCapplyScoring{question2}
    Parmi les villes suivantes, lesquelles sont des préfectures~?
    \begin{reponses}
      \bonne{Poitiers}
      \mauvaise{Sainte-Menehould}
      \bonne{Avignon}
    \end{reponses}
  \end{questionmult}
}

RE: questions et barèmes séparés - Added by Anthony Siaudeau over 1 year ago

Bonjour,
ca semble très très bien !
Je vais creuser plus avant pour savoir si on peut mettre les \AMCsetScoring dans le copieexamen (directement avant les questions concernées, pour moi c'est plus pratique) plutôt qu'au \begin{document} mais c'est un détail.
Merci bien!

RE: questions et barèmes séparés - Added by Anthony Siaudeau over 1 year ago

Je confirme que ca marche nickel !
J'ai rencontré quelques difficultés sur un sujet + copies existant, la mise à jour du barème était probablement trop conséquente par rapport à l'existant. En repartant de zéro sur le même devoir tout fonctionne.
J'ai mis le codage en LATeX3 \ExplSyntaxOn ...\ExplSyntaxOff dans un fichier de style à part,
j'ai mis les \AMCsetScoring directement dans le \begin{copieexamen} juste avant/après les \copygroup{element-de-ma-question}{monQCM} correspondant pour des questions de lisibilité. C'est étonnant mais ca marche bien, la limite semble juste être de mettre \AMCsetScoring avant le \restituegroupe{monQCM}, ce qui constitue quand même une évidence.

J'aurai une dernière question (et malheureusement je ne sais pas coder en LATeX3) : est-ce possible de faire la même chose pour les questions numériques ? Je souhaiterai pouvoir mettre tout le paramétrage du \AMCnumericChoices{sol}{#2} dans un \AMCsetScoring{#2} ou au moins la partie "barème".

Il ne me restera que les questions ouvertes à gérer «à la main» mais ce n'est pas un sujet, je ne saurai même pas expliciter le besoin pour ce type de question.

Un grand merci pour tout !

RE: questions et barèmes séparés - Added by Frédéric Bréal over 1 year ago

Je vous propose une autre solution pas du tout dans l'optique d'un codage en dur mais qui semble fonctionner sur un petit test.
J'utilise le paquet listofitems (documentation en français) et microtype avec une option car j'utilise le point-virgule comme séparateur
Vous pouvez choisir autre chose, sauf la virgule car elle est utilisée dans la commande \bareme, l'@ devrait être possible et donc les options de microtype sont inutiles (évidemment tout cela est à tester en profondeur).

\usepackage{listofitems}
\setsepchar{;}
\usepackage[french]{babel}
\usepackage[babel=true,kerning=true]{microtype}
\begin{document}
\readlist{\listeBareme}{ %
mz=2;%
b=2,m=-1,p=-10;%
formula=(NBC-NMC),p=-10;%
{\mauvaise[F]{f}\bareme{0}\mauvaise[P]{p}\bareme{1}\bonne[J]{j}\bareme{2}}%
}

Dans le sujet

\begin{question}{ouverte}
Donnez la définition de l’inflation.

\AMCOpen{lines=5}{\listeBareme[4]}
\end{question}

\begin{question}{le bon choix}\bareme{\listeBareme[1]}
  Combien de points voulez-vous à cette question~?
  \begin{reponses}
    \bonne{Le maximun : 10}
    \mauvaise{Seulement 5}
    \mauvaise{Deux me suffiront}
    \mauvaise{Aucun, merci}
  \end{reponses}
\end{question}

\begin{questionmult}{engrange}\bareme{\listeBareme[2]} 
  Engrangez des points gratuitement en cochant les cases ci-dessous~: 
  \begin{reponses}
    \bonne{2 points}
    \mauvaise{Un point négatif}
    \bonne{3 points}
    \bonne{1 point}
    \bonne{Un demi point}
  \end{reponses}

\begin{questionmult}{tout ou rien}\bareme{\listeBareme[3]}
  Il faut cocher exactement comme il faut pour avoir trois points, sinon vous n'en
  aurez aucun.
  \begin{reponses}
    \mauvaise{Fausse}
    \mauvaise{Fausse}
    \bonne{Juste}
    \bonne{Juste}
  \end{reponses}
\end{questionmult}

RE: questions et barèmes séparés - Added by Anthony Siaudeau over 1 year ago

Bonjour,
merci pour cette intéressante piste, je ne connaissais pas listofitems.
Je mets toutes mes questions dans un grand fichier «catalogue» et ensuite j'appelle dans chaque QCM les questions nécessaires avec \copygroup et \restituegroupe. Je souhaite mettre le barème dans chaque QCM. Il faudrait donc que le \listeBareme soit dans le fichier du QCM. Dès lors l'appel de barème par le nom de la question tel que proposé par Alexis Bienvenüe me semble plus robuste que par le n° de la «bonne» ligne de \listeBareme, car cette «bonne» ligne risque de bouger avec l'ajout de nouvelles question ou la réorganisation de mon catalogue.
Je conserve l'idée et je vais creuser.

(1-5/5)