# Auto Multiple Choice

# Auto Multiple Choice

Conception et correction automatisée de QCM.

AMC est un ensemble d'utilitaires permettant l'utilisation de QCM rédigés en texte simple ou en LaTeX et leur correction automatique à partir des scans des copies des étudiants, grâce à une reconnaissance optique de marques (OMR). Le présent document décrit son utilisation (pour la version 1.6.0+git20240805161640~r:cff18d02).

Le site d'AMC est hébergé à l'adresse https://www.auto-multiple-choice.net/, et vous trouverez le code source à l'adresse https://gitlab.com/jojo_boulix/auto-multiple-choice/.

Alexis

    paamc@passoire.fr

Bienvenüe
Frédéric
Bréal
Abel
Benjamin
Paragraphes concernant l'usage de tikz et de lualatex.
2008-2024
Alexis Bienvenüe

Ce document peut être utilisé selon les termes de la Licence publique générale de GNU version 2 ou suivantes.

## Licence

Le programme Auto Multiple Choice est un logiciel libre ; vous pouvez le redistribuer ou le modifier suivant les termes de la “GNU General Public License” telle que publiée par la Free Software Foundation : soit la version 2 de cette licence, soit (à votre gré) toute version ultérieure.

Ce programme est distribué dans l’espoir qu’il vous sera utile, mais SANS AUCUNE GARANTIE : sans même la garantie implicite de COMMERCIALISABILITÉ ni d’ADÉQUATION À UN OBJECTIF PARTICULIER. Consultez la Licence Générale Publique GNU pour plus de détails. Vous devriez avoir reçu une copie de la Licence Générale Publique GNU avec ce programme ; si ce n’est pas le cas, consultez : http://www.gnu.org/licenses/.

## Prérequis

### Système d'exploitation

Les utilitaires AMC ont été écrits pour Linux. Leur installation a par ailleurs été rendue possible sur MAC OS X grâce à l'utilisation de MacPorts.

### Logiciels

Si vous installez AMC à l'aide d'un paquet debian (sur une distribution debian, ubuntu ou dérivée) ou RPM (distribution Mandriva, openSUSE, Fedora), tout ce dont AMC a besoin sera automatiquement installé.

Les paquets/logiciels principaux requis pour l'utilisation d'AMC sont les suivants :

- LaTeX

- Les bibliothèques de traitement d'image ImageMagick et OpenCV

- Perl, ainsi que Gtk2-Perl et Glade::XML pour l'interface graphique

### LaTeX

Il n'est pas nécessaire de rédiger ses sujets de QCM en LaTeX (voir ). Cependant, ceci est toujours possible et permet une extraordinaire liberté dans la conception des sujets. Par ailleurs, les modèles fournis permettent à ceux qui ne sont pas réfractaires aux formats de documents du type LaTeX/XML/HTML d'écrire assez rapidement leurs premiers formulaires en LaTeX.

## Notes d'utilisation

### Limitations numériques

Le nombre de copies est limité à 4 095 et le nombre de pages par copies est limité à 63 (valeurs par défaut mais modifiables voir ).

Le nombre de réponses proposées pour une même question est limité à 199 (valeur par défaut non modifiable).

### Versions

Même si cela ne devrait pas avoir trop de conséquences, il vaut mieux essayer de ne pas changer de version du programme en cours d'utilisation pour un projet donné (entre le moment où les copies sont imprimées et le moment où les notes sont calculées et les copies annotées). Il existe quelques modifications qui risquent de perturber le fonctionnement d'AMC si vous les appliquez au cours de la gestion d'un projet.

### Installation

Sur un système debian ou Ubuntu ou dérivé, Mandriva, openSUSE ou Fedora, l'installation est facilitée par l'utilisation des paquets deb et RPM contenant AMC. La procédure d'installation est décrite sur le site d'AMC.

Vous pouvez aussi télécharger l'archive des sources dans l'espace de téléchargement du projet, puis utiliser les commandes suivantes dans un terminal :

    tar xvzf auto-multiple-choice_xxxx_dist.tar.gz
    cd auto-multiple-choice-xxx
    make
    sudo make install

### Accès

Une fois installé, l'interface graphique peut être appelée en choisissant Applications Éducation Auto Multiple Choice dans le menu général de Gnome (ou son équivalent dans KDE ou autre), mais on peut aussi utiliser la commande `auto-multiple-choice`.

## Source au format AMC-TXT

Pour les utilisateurs qui ne souhaitent pas se mettre à LaTeX, AMC embarque un filtre qui rédige pour vous le fichier LaTeX à partir d'une représentation en texte simple de votre questionnaire. Ce format est appelé AMC-TXT, et ce chapitre détaille la syntaxe à utiliser. Si vous souhaitez profiter de la puissance de LaTeX pour la rédaction de vos questionnaires, passez au chapitre suivant.

Commençons par un exemple simple de fichier source utilisable par AMC :

    # AMC-TXT source
    PaperSize: A4
    Lang: FR
    Title: Mon premier questionnaire

    Presentation: Veuillez répondre aux questions
    ci-dessous du mieux que vous pouvez.

    * Quelle est la capitale du Cameroun ?
    + Yaoundé
    - Douala
    - Kribi

    ** Parmi les nombres suivants,
    lesquels sont positifs ?
    + 2
    - -2
    + 10

Le fichier qui contient la description de votre sujet doit être codé en UTF-8. C'est le codage par défaut de plusieurs éditeurs de texte, dont fait partie `gedit` par exemple. N'utilisez pas d'éditeur de texte permettant d'appliquer des mises en forme à votre texte, comme OpenOffice/LibreOffice ou abiword : ils n'enregistrent pas seulement votre texte, mais beaucoup d'autres informations de mise en forme qu'AMC ne sait pas lire...

La police de caractères qui sera utilisée par défaut pour votre questionnaire est la police libertine. C'est une police libre qui définit un très grand nombre de caractères de toutes langues. Cette police doit être installée sur votre système pour que votre sujet puisse être préparé (c'est le cas si vous installez AMC sur debian ou Ubuntu avec les paquets qu'il recommande).

Vous remarquez dès maintenant la structure du fichier de description du questionnaire : il commence par quelques définitions ou options générales de mise en forme, puis viennent les questions.

### Commentaires

Vous pouvez écrire des commentaires dans votre fichier AMC-TXT sur des lignes commençant par le caractère `#`. Ces lignes seront tout simplement ignorées par AMC.

### Options générales

Voici les options que vous pouvez utiliser au début de votre fichier (dans n'importe quel ordre) :

PaperSize:

  Indique le format de papier utilisé. Parmi les valeurs possibles, on trouve `A3`, `A4`, `A5`, `A6`, `B3`, `B4`, `B5`, `B6`, `letter`, `legal`, `ANSIA`, `ANSIB`, `ANSIC`, `ANSID`, `ANSIE`.

Lang:

  donne la langue dans laquelle le questionnaire est écrit. Pour l'instant, les seules langues disponibles sont FR (français), ES (espagnol), DE (allemand), IT (Italien), NL (Néerlandais), NO (Norvégien), PT (portugais), JA (Japonais, voir ) et AR (arabe, voir ). Si vous n'utilisez pas cette option, ce sera l'anglais qui sera choisi.

LaTeXEngine:

  Moteur de compilation : `xelatex -shell-escape`, par exemple

Title:

  Le titre de l'examen, qui sera écrit en haut de la copie.

Presentation:

  Un texte introductif pour l'examen, présentant par exemple la durée, les consignes...

RandomSeed:

  Si le mélange des questions et des réponses ne nous convient pas, on peut toujours en changer en modifiant la graine du générateur aléatoire utilisé pour le mélange, grâce à cette option. Si la valeur fournie (à choisir entre 1 et 4194303) est modifiée, alors le mélange sera différent. Bien entendu, une fois les copies d'examen imprimées, il ne faut surtout pas modifier cette valeur !

  La valeur est enregistrée dans le fichier xy (sous la forme `\rngstate{1}{1527384}`). La valeur par défaut est 1527384.

ShuffleQuestions:

  Si cette option est mise à 1 (c'est la valeur par défaut), les questions ne seront pas dans le même ordre dans chaque copie. Si vous lui donnez la valeur 0, les questions ne seront pas mélangées.

Code:

  Affectez à cette option une valeur entière n (par exemple 8) pour demander la présence de cases à cocher pour que les étudiants codent leur numéro d'étudiant sur n chiffres.

CodeDigitsDirection:

  Donnez à cette option la valeur `horizontal` ou `vertical` pour imposer la direction suivant laquelle les chiffres du code seront présentés. Si vous n'utilisez pas cette option, AMC choisira en fonction de la taille du code (direction horizontale pour un petit nombre de chiffres, et verticale pour un grand nombre de chiffres).

Columns:

  Si vous donnez à cette option une valeur n entière supérieure à 1, le questionnaire sera écrit sur n colonnes.

CompleteMulti:

  Cette option prend la valeur 1 par défaut, ce qui signifie qu'une réponse "Aucune des réponses ci-dessus n'est correcte" sera ajoutée à la fin de toutes les questions multiples de votre questionnaire. Sans celle-ci, il serait impossible de faire la différence entre "l'étudiant ne répond pas à cette question" et "l'étudiant pense qu'aucune des réponses proposées n'est exacte". Si vous ne souhaitez pas que cette dernière réponse soit ajoutée, donnez la valeur 0 à cette option.

L-None:

  Cette option indique un texte qui remplacera Aucune des réponses ci-dessus n'est correcte (voir option précédente) pour votre questionnaire.

QuestionBlocks:

  Si cette option prend la valeur 1 (sa valeur par défaut), toutes vos questions seront enfermées dans des boîtes (invisibles), de sorte qu'elles ne puissent pas être coupées sur deux pages, ou sur plusieurs colonnes. Avec la valeur 0, les questions pourront être coupées si besoin, ce qui peut gagner de la place au détriment de la lisibilité.

L-Question:

  Cette option sert à remplacer le mot Question dans votre questionnaire si vous utilisez une autre langue que celle indiquée par l'option `Lang`.

L-Name:

  Cette option sert à remplacer le texte Nom et prénom inscrit dans le cadre où l'étudiant doit inscrire son identité.

L-Student:

  Cette option sert à remplacer le petit texte qui demande de coder son numéro d'étudiant et d'inscrire son nom sur les copies (quand l'option `Code` a été utilisée).

TitleWidth:

  Largeur de la zone prévue pour le titre, dans le cas où on n'utilise pas `Code:`. La valeur par défaut est `.47\linewidth`.

NameFieldWidth:

  Largeur de la zone destinée à l'écriture du nom et prénom de l'étudiant. On peut utiliser les unités usuelles en LaTeX. La valeur par défaut est `5.8cm` si on utilise `Code:`, et `.47\linewidth` sinon.

NameFieldLines:

  Nombre de lignes prévues pour l'écriture du nom et prénom de l'étudiant. La valeur par défaut est `2` si on utilise `Code:`, et `1` sinon.

NameFieldLinespace:

  Interligne dans la zone destinée à l'écriture du nom et prénom de l'étudiant. La valeur par défaut est `.5em`.

Pages:

  Donne un nombre de pages minimal pour le sujet. Si un sujet comporte moins de pages que cette valeur, des pages blanches seront ajoutées. Dans le cas de l'utilisation d'une feuille de réponses séparée, cette option peut être écrite sous la forme `s+r` (par exemple `4+2`), où s sera le nombre de pages minimal pour la partie sujet et s+r le nombre de pages minimal pour le sujet complet.

ManualDuplex:

  Avec la valeur 1 (ce n'est pas la valeur par défaut), chaque sujet sera constitué d'un nombre pair de pages, de telle sorte que tous les sujets pourront être imprimés manuellement à partir du fichier PDF sujet en mode recto/verso (sans l'utilisation de cette option, le début d'une copie pourraît être sur le verso de la fin de la copie précédente).

SingleSided:

  Avec la valeur 1 (ce n'est pas la valeur par défaut), aucune page blanche ne sera ajoutée entre le sujet et la feuille de réponses séparée, même si le sujet comporte un nombre impair de pages. Ceci peut être utile quand les sujets sont imprimés en recto simple, ou quand il n'est pas nécessaire de séparer physiquement le sujet de la feuille de réponses.

BoxColor:

  Permet de choisir une couleur pour les cases qui peuvent être cochées par les étudiants, afin de perturber le moins possible la saisie automatique à partir des scans (red, pour rouge, est une valeur commune, mais on peut aussi penser à un gris clair). La couleur fournie doit être une couleur valide pour `xcolor` (voir la documentation du paquet LaTeX `xcolor` pour plus de détails), comme red, magenta, pink, lightgray, cyan, ou bien sous la forme `#RRGGBB`, comme `#FFBEC8` pour un rouge clair.

DefaultScoringS:

  Donne le barème par défaut pour les questions simples (Reportez-vous à pour la description des barèmes possibles). Sans cette option, le barème par défaut donne un point à la bonne réponse, et zéro aux autres.

DefaultScoringM:

  Donne le barème par défaut pour les questions multiples (Reportez-vous à pour la description des barèmes possibles). Sans cette option le barème par défaut est `haut=2`, ce qui correspond à un barème donnant deux points pour une réponse parfaitement exacte, et qui enlève un point à chaque erreur (case cochée alors qu'elle ne devrait pas l'être, ou case non-cochée alors qu'elle devrait l'être), sans passer en-dessous de zéro.

LaTeX:

  Si cette option prend la valeur 1, tous les textes de votre questionnaire sont considérés comme étant écrits en TeX (ou LaTeX). Vous pourrez ainsi écrire des formules mathématiques comme `$\sqrt{a+b}$`. Avec la valeur 0 (valeur par défaut), vos textes seront reproduits sans modification.

LaTeX-Preambule:

  Donne des commandes LaTeX à ajouter dans le préambule (par exemple des `\usepackage`).

LaTeX-BeginDocument:

  Donne des commandes LaTeX à ajouter au début de l'environnement `document` (par exemple des définitions de macros).

LaTeX-BeginCopy:

  Donne des commandes LaTeX à ajouter au début de la description d'une copie.

LaTeX-EndCopy:

  Donne des commandes LaTeX à ajouter à la fin de la description d'une copie.

PDF-BeginCopy:

  Donne le nom d'un fichier PDF à ajouter au début de chaque copie.

PDF-EndCopy:

  Donne le nom d'un fichier PDF à ajouter à la fin de chaque copie.

Disable:

  Donne une liste de convertisseurs à désactiver, séparés par des virgules. Les convertisseurs disponibles sont `verbatim` (voir ), `images` (voir ), `embf` (voir ) et `local_latex` (voir ), `latex` (voir ).

PackageOptions:

  Donne des options supplémentaires à transmettre au paquet LaTeX automultiplechoice (voir ).

#### Sujet avec feuille de réponses séparée

Dans le cas d'un sujet avec feuille de réponses séparée, vous pourrez considérer l'emploi des options suivantes :

SeparateAnswerSheet:

  Donner la valeur 1 à cette option pour obtenir une feuille de réponses séparée.

AnswerSheetTitle:

  Donne le titre à inscrire en tête de la feuille de réponse.

AnswerSheetPresentation:

  Donne le texte de présentation de la feuille de réponse. On pourra, par exemple, y préciser que les réponses doivent uniquement être données sur cette feuille.

AnswerSheetColumns:

  Nombre de colonnes pour la feuille de réponses.

AutoMarks:

  Donner la valeur 1 à cette option pour utiliser l'option `automarks` (voir ).

#### Copies pré-remplies

Dans certaines situations, il peut être souhaitable de préparer des copies nominatives pour tous les étudiants, à partir d’une liste d’étudiants.

PreAssociation:

  Le nom du fichier avec la liste des étudiants et l'extension .csv

PreAssociationKey:

  Identifiant unique dans cette liste : il s’agit du nom de la colonne qui, dans le ﬁchier csv des étudiants, contient le numéro d’étudiant (voir ).

PreAssociationName:

  \prenom{} \nom{} en-têtes des colonnes avec le prénom et le nom des étudiants.

- La liste des étudiants doit être au format CSV. On suppose dans la suite que le fichier `liste.csv`, placé dans le répertoire du projet, utilise l'encodage UTF8 et est sous la forme suivante :

      nom,prenom,id,mail
      Boulix,Jojo,001,jojo@boulix.fr
      Golin,André,002,andre@golin.fr
      Moniuszko,Stanisław,003,Moniuszko@Stanisław.fr

  Ne pas utiliser le symbole _ (underscore) dans le nom ou prénom des étudiants. Une erreur de compilation sera affichée.

- `Code` doit être égal à zéro ou omis.

    #Exemple simple au format AMC-TXT avec les copies pré-remplies

    PaperSize: A4
    Lang: FR
    PreAssociation: liste.csv
    PreAssociationKey: id
    PreAssociationName: \prenom{} \nom{}

    Title: Mon premier questionnaire

    Presentation: Veuillez répondre aux questions
    ci-dessous du mieux que vous pouvez.

    * Quelle est la capitale du Cameroun ?
    + Yaoundé
    - Douala
    - Kribi

    ** Parmi les nombres suivants,
    lesquels sont positifs ?
    + 2
    - -2
    + 10

Plus de détails pour la correction : voir le dernier item de .

### Questions

Les questions simples (qui acceptent une et une seule bonne réponse) commencent par un `*` en début de ligne, et les questions multiples (celles qui peuvent comporter zéro, une ou plusieurs bonnes réponses), commencent par un `**` en début de ligne. Vient ensuite le texte de la question, puis les réponses, introduites par un `+` quand la réponse est correcte ou un `-` quand elle ne l'est pas.

#### Options pour les questions

Des options particulières peuvent être indiquées pour chaque question, entre crochets, juste après l'étoile (ou les deux étoiles pour des questions multiples) qui commence la question (sans espace avant), comme dans l'exemple suivant :

    *[ordered,horiz,id=addition] Combien font
    un plus un ?
    - 0
    - 1
    + 2

Les options disponibles sont les suivantes :

horiz

  Avec cette option, les réponses se suivront horizontalement plutôt que verticalement une par ligne.

columns=n

  Avec cette option, les réponses seront réparties sur n colonnes.

ordered

  Avec cette option, les réponses ne seront pas mélangées dans chaque copie : elles resteront toujours dans l'ordre indiqué.

id=xxxx

  Avec cette option, le nom xxxx sera donné à la question. Ce nom apparaît dans les fichiers de notes exportés par AMC pour identifier la question plus facilement. Il ne doit comporter que des caractères simples non accentués.

  Voir aussi .

  `name` a le même rôle que l'option `id`. Cette option est présente pour assurer la compatibilité avec d'anciennes versions, préférez l'utilisation de `id`.

indicative

  Indique que le score affecté à cette question ne sera pas pris en compte pour le score final de l'étudiant.

next

  Avec cette option, la question suivra toujours la question précédente, même lorsque l'on demande de mélanger les questions avec l'option générale `ShuffleQuestions`.

first

  Avec cette option, la question sera toujours insérée en début de groupe (voir ).

last

  Avec cette option, la question sera toujours insérée en fin de groupe (voir ).

#### Barèmes particuliers

Si vous voulez utiliser un barème particulier pour une question ou une réponse, vous pouvez l'indiquer entre accolades, après le signe `*`, `**`, `+`, ou `-`, et après les éventuelles options, comme dans l'exemple suivant. Reportez-vous à pour la syntaxe de description des barèmes à utiliser.

    *{b=2,m=-1} Quelle est la capitale de la France ?
    + Paris
    - Lille
    -{-2} Ouagadougou

    **[ordered,horiz,id=positifs]{haut=1} Parmi les nombres suivants,
    lesquels sont positifs ?
    - -2
    + 2
    + 10

#### Questions ouvertes

Les questions peuvent être transformées en questions ouvertes en indiquant des options (voir ) entre `<` et `>`, comme dans l'exemple suivant :

    *<lines=4> Décrivez la lune.
    -[O]{0} O
    -[P]{1} P
    +[V]{2} V

Lors de l'utilisation de questions ouvertes, les options générales suivantes peuvent être intéressantes :

L-OpenText:

  Texte à ajouter après les questions pour demander aux étudiants d'écrire la réponse sur la feuille de réponses séparée (dans le cas où celle-ci est utilisée).

L-OpenReserved:

  Texte (court) à ajouter à côté des cases à cocher des questions ouvertes, indiquant aux étudiants que ces cases sont réservées aux correcteurs.

### Lignes multiples

Tout texte peut se continuer sur la ou les lignes suivantes (même si certaines sont vides), pourvu qu'elles ne puissent pas être interprétées comme un début de définition d'option générale, un début de question ou de réponse. Considérons par exemple l'écriture de question suivante :

    * Combien font 2
      + 2 ?
    - 0
    + 4
    - 10

Cette écriture suit bien la syntaxe AMC-TXT, mais ne correspond pas à ce que l'on voulait écrire : ici, la deuxième ligne sera considérée comme une réponse possible, et non comme la suite de la question !

Un problème similaire sera rencontré dans la portion de fichier source suivante, où "`Chopin:`" sera considéré comme une définition d'option générale :

    * Vous connaissez sans doute Frédéric
      Chopin: c'est un compositeur. De quel pays est-il
      originaire ?
    + la Pologne
    - le Vénézuela
    - la Suisse

La version correcte est la suivante :

    * Vous connaissez sans doute Frédéric Chopin:
      c'est un compositeur. De quel pays est-il
      originaire ?
    + la Pologne
    - le Vénézuela
    - la Suisse

Notez enfin que pour passer à la ligne suivante, il faut laisser une ligne vide dans le fichier source de l'examen, comme ceci :

    Description: Titre

    Description de l'examen sur la ligne suivante.

    ** Question difficile.

    Combien y a-t-il d'étoiles dans le ciel ?

    - une
    - deux
    - dix millions

### Titre

Vous pouvez insérer un titre en l'entourant de `[==` et `==]`.

### Verbatim

Pour obtenir un bloc de texte verbatim (par exemple pour un code informatique), entourez-le de `[verbatim]` et `[/verbatim]` :

    * Qu'est-ce que le code suivant écrit ?
    [verbatim]
    main( )
    {
        printf("hello, world\n");
    }
    [/verbatim]

    + [| hello, world |]
    - [| hello |]
    - [| world |]

### Gras, italique, typewriter, souligné

Les parties du textes à écrire en gras devront être entourées de `[*` et `*]`. Les parties à mettre en italique devront être entourées de `[_` et `_]`. Pour avoir une police façon machine à écrire typewriter, le texte devra être encadré par `[|` et `|]`. Pour souligner, encadrer le texte par `[/` et `/]`.

    ** Choisissez parmi les expressions suivantes celles
       où le mot en italique est [*un adjectif*].
    + Une balle [_bleue_]
    - Un [_livre_] rose
    + Quelle [_belle_] histoire !

### Inclusion d'images

Vous pouvez inclure des images dans votre document en utilisant la syntaxe suivante :

    ![height=2cm]images/oiseau.png!

Dans cet exemple, l'image `images/oiseau.png` située dans le répertoire du projet sera insérée avec une hauteur de 2cm. Les options que l'on peut utiliser entre les crochets sont celles de la commande LaTeX `\includegraphics` (par exemple, `width=1cm`, ou `keepaspectratio`). Pour obtenir une image centrée sur une ligne et ayant pour largeur les trois quarts de la ligne, on utilisera de même :

    !{center}[width=.75\linewidth]images/carte.pdf!

### Petits morceaux de LaTeX

Vous pouvez inclure quelques segments de code LaTeX dans votre description en les incluant entre des double crochets, comme dans l'exemple suivant :

    Les questions marquées d'un [[\multiSymbole{}]] peuvent avoir zéro, une ou plusieurs bonnes réponses.

### Fragments de LaTeX

Pour inclure un fragment de code LaTeX sur plusieurs lignes, entourez-le de `[latex]` et `[/latex]` :

    * La matrice suivante est

    [latex]
    \[
    \left[\begin{array}{ccccc}
    1 & 0 & 0 & 0 & 1 \\
    0 & 1 & 0 & 0 & 0 \\
    0 & 0 & 1 & 0 & 0 \\
    0 & 0 & 0 & 1 & 0 \\
    0 & 0 & 0 & 0 & 1 \\
    \end{array}
    \right]\]
    [/latex]

    - diagonale
    + triangulaire
    - symétrique

### Groupes de questions

Vous pouvez demander à ce que certaines questions restent groupées lors du mélange des questions, et ajouter un texte introductif avant ce groupe de questions (et un autre texte après), en utilisant la syntaxe suivante :

    *( Les trois questions suivantes concernent Martin Luther King.

    * En quelle année est-il né ?
    - 1901
    + 1929
    - 1968

    * En quelle année est-il mort ?
    - 1945
    - 1515
    + 1968
    - 1999

    * Dans quelle ville est-il né ?
    + Atlanta
    - Memphis
    - New York

    *) Fin des questions sur Martin Luther King.

Vous pouvez ajouter des options à l'ouverture du groupe, comme suit :

    *([shuffle=false,columns=2] Les trois questions suivantes concernent Martin Luther King.

Les options suivantes sont acceptées :

shuffle=xxx

  En donnant la valeur true ou false, on demande à mélanger ou non les questions de ce groupe. La valeur par défaut est celle utilisée globalement par l'option `ShuffleQuestions`.

columns=n

  Donne le nombre de colonnes dans lesquelles seront mises en forme les questions.

group=nom

  Donne un nom au groupe (celui-ci ne sera pas visible sur le sujet, mais uniquement dans le fichier LaTeX généré à partir du fichier source AMC-TXT).

numquestions=n

  Avec cette option, les n premières questions du groupes seront utilisées. Si les questions sont mélangées, cela permettra de sélectionner n questions au hasard.

  Les questions utilisant l'option `first` ou `last` ne sont pas concernées (et sont toujours insérées). Par ailleurs, les suites de questions regroupées en utilisant l'option `next` ne comptent que pour une seule question.

needspace=dim

  Donne une hauteur (avec l'unité : par exemple 4cm) nécessaire pour commencer l'énoncé de ce groupe. Si la place encore disponible dans la page courante est inférieure à cette valeur, alors l'énoncé du groupe commencera sur la page suivante.

### En langue arabe

La rédaction d'un questionnaire en langue arabe comporte quelques spécificités. Vous utiliserez bien entendu l'option

    Lang: AR

Mais vous devrez également prêter attention aux options suivantes :

ArabicFont:

  C'est la police de caractères qui sera utilisée pour les textes en arabe. Par défaut, AMC utilisera Rasheeq, une police du projet ArabEyes (disponible dans la paquet `ttf-arabeyes` sur debian et ubuntu par exemple).

Pour pouvoir insérer des textes en d'autres caractères dans votre questionnaire, vous devrez utiliser l'option `LaTeX` pour passer en mode LaTeX, et englober toutes les portions de texte en caractères non-arabes par la commande LaTeX `\textLR` comme dans `\textLR{la commande xelatex}`.

### En japonais

Vous pourrez construire des questionnaires incluant des caractères japonais grâce à l'option

    Lang: JA

AMC fera les ajustements nécessaires pour permettre un bon rendu de ces caractères.

Dans ce cas, AMC utilisera `pTex` comme moteur LaTeX. Une version récente de `pTex` est nécessaire.

### Inclusion de fichiers annexes

Vous pouvez inclure le contenu d'autres fichiers à tout moment comme suit :

    IncludeFile: fichier-a-inclure.txt

Faites très attention si le fichier à inclure est utilisé par plusieurs projets ! Supposons par exemple que `/home/alexis/questions-a.txt` est inclus à la fois dans le projet A et le projet B. Vous avez déjà traité le projet A, et êtes en train de vous occuper du projet B. Vous ajoutez une questions dans le fichier `/home/alexis/questions-a.txt`, et vous modifiez le barème d'une question qui existait déjà. Si vous relancez l'extraction du barème et la notation sur le sujet A, AMC verra apparaître une nouvelle question pour laquelle aucune saisie n'a été effectuée, ce qui posera des problèmes dans toute la notation !

### Un exemple simple plus complet

Un exemple issu du forum

    # Exemple plus complet au format AMC-TXT avec du code LaTeX.
    PaperSize: A4
    Lang: FR
    CompleteMulti: 0
    ShuffleQuestions: 0
    LaTeX: 1
    LaTex-Preambule: \geometry{hmargin=2cm,headheight=2cm,headsep=.3cm,footskip=1cm,top=2.5cm,
    bottom=2cm}

    \usepackage{siunitx}
    \sisetup{locale = FR,detect-all,group-minimum-digits=3,per-mode=symbol}

    \usepackage[french]{babel}

    LaTeX-BeginDocument: \def\multiSymbole{$\star$}

    Title: Évaluation de SVT \no{}4   : Régimes et équilibres alimentaires

    Presentation: Colorier en noir la case correspondante à la proposition correcte pour chaque
     phrase.

    *([shuffle=true]
     PARTIE I : Quelques connaissances du cours

    **[horiz,last]Les aliments contiennent :
    + Des lipides
    - Des acides
    + Des sels minéraux

    **La dépense énergétique minimum de notre corps est :
    + Le métabolisme de base
    - Les besoins énergétiques
    - L'IMC

    **[columns=2]Les aliments nous apportent de :
    + La matière
    - Du diabète
    + De l'énergie

    **[columns=2]Les besoins énergétiques d'une personne varient suivant :
    + Le sexe
    + Les activités physiques
    - Les aliments consommés

    *[columns=2]Manger équilibré signifie :
    + Equilibrer nos apports et nos dépenses
    - Manger ce qui nous fait envie
    - Manger plus que ce qu'on dépense

    **[columns=2]Manger en excès par rapport à ses besoins peut aboutir à :
    - Des carences
    + Des maladies cardio-vasculaires
    - Un manque de nutriments

    **[columns=2]L'IMC signifie :
    - Indice de Maladies cardio-vasculaires
    + Indice de Masse Corporelle
    - Indice de Matière et de Composition

    *)

    *(PARTIE II : Le goûter de Vanessa

    **[columns=2]Dans le gouter de Vanessa, l'aliment le plus énergétique est :
    - les pruneaux
    + Les biscuits
    - les deux sont identiques.

    **[columns=2]Par rapport aux biscuits, les pruneaux contiennent  :
    + moins de protides
    - plus de glucides
    + moins de lipides

    **[columns=2]Les dépenses énergétiques journalières d'une adolescente sont en moyenne de
    \qty{10000}{\kilo\joule} .
     Vanessa a consommé \qty{3200}{kJ} au petit-déjeuner, \qty{3500}{kJ} à midi et
      \qty{2400}{\kilo\joule} au diner. Elle a donc mangé équilibré :
    - Faux
    + Vrai

    *)

La réponse "Aucune des réponses ci-dessus n'est correcte" ne sera pas ajoutée pour les questions multiples.

Les questions ne seront pas mélangées.

Autoriser l'insertion de code LaTeX.

Différents `paquets` utiles.

Le symbole des questions multiples est changé.

Utilisation du paquet LaTeX `babel` pour la gestion de la langue.

Les questions de ce groupe seront mélangées.

Cette question sera toujours la dernière de ce groupe.

Une commande LaTeX utilisée grâce à `LaTeX:1` et `LaTeX-Preambule`.

## Source au format LaTeX

Ce paragraphe détaille la rédaction en LaTeX d'un questionnaire à choix multiples utilisable par AMC. Si vous avez choisi un autre format de fichier source, vous pouvez passer directement au chapitre suivant.

Un questionnaire à choix multiples peut être décrit sous la forme d'un fichier LaTeX utilisant le package `automultiplechoice`. Vous pouvez à tout moment tester le fichier LaTeX que vous êtes en train de concevoir en le compilant avec la commande `latex` puis en visualisant le fichier dvi qui en résulte.

Nous commençons par quelques exemples qui permettent d'appréhender rapidement la construction de fichiers LaTeX de QCM ; les fichiers tex de ces exemples sont fournis avec AMC sous la forme de modèles utilisables en créant un nouveau projet de QCM à partir d'un de ces modèles.

### Un exemple simple

    \documentclass[a4paper]{article}

    \usepackage[utf8x]{inputenc}
    \usepackage[T1]{fontenc}

    \usepackage[francais,bloc,completemulti]{automultiplechoice}
    \begin{document}

    \exemplaire{10}{

    %%% debut de l'en-tête des copies :

    \noindent{\bf QCM  \hfill TEST}

    \vspace*{.5cm}
    \begin{minipage}{.4\linewidth}
    \centering\large\bf Test\\ Examen du 01/01/2008\end{minipage}
    \champnom{\fbox{
                    \begin{minipage}{.5\linewidth}
                      Nom et prénom :

                      \vspace*{.5cm}\namefielddots
                      \vspace*{1mm}
                    \end{minipage}
             }}

    \begin{center}\em
    Durée : 10 minutes.

      Aucun document n'est autorisé.
      L'usage de la calculatrice est interdit.

      Les questions faisant apparaître le symbole \multiSymbole{} peuvent
      présenter zéro, une ou plusieurs bonnes réponses. Les autres ont
      une unique bonne réponse.

      Des points négatifs pourront être affectés à de \emph{très
        mauvaises} réponses.
    \end{center}
    \vspace{1ex}

    %%% fin de l'en-tête

    \begin{question}{prez}
      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}

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

    % \AMCaddpagesto{3}

    }

    \end{document}

Quelques précisions sur cet exemple :

Les deux paquets `inputenc` et `fontenc` permettent d'écrire le texte du questionnaire en utilisant l'encodage ISO-8859-1 (latin1). Vous pouvez bien entendu les modifier suivant l'encodage que vous utilisez.

Les options utilisées ici pour le paquet LaTeX `automultiplechoice` permettent d'éviter le changement de page à l'intérieur des questions (`bloc`) et de compléter automatiquement chaque question multiple par une réponse type permettant à l'étudiant d'indiquer qu'il considère qu'aucune des réponses proposées n'est exacte (`completemulti`).

La commande `exemplaire` permet de fabriquer autant d'exemplaires (différents) du questionnaire QCM que l'on souhaite (ici, 10). Voir pour une syntaxe alternative utilisant un environnement.

Les lignes qui commencent ici permettent la mise en forme de l'en-tête de chaque copie.

La commande `champnom` permet d'indiquer la partie du questionnaire dans laquelle chaque étudiant inscrira son nom ou un code barre (voir ).

La commande `namefielddots` insère une ligne pointillée ou un champ à remplir si vous utilisez l'option `pdfform` (voir ).

Les environnements `question` et `reponses` permettent de fabriquer une question à choix multiples pour laquelle une unique réponse est correcte. Il faut indiquer un identifiant unique de la question (ici : prez).

Les environnements `questionmult` et `reponses` permettent de fabriquer une question pouvant avoir zéro, une ou plusieurs bonnes réponses. L'étudiant est donc invité à cocher toutes les cases correspondant aux réponses qu'il pense correctes, ou la dernière case (ajoutée automatiquement grâce à l'option `completemulti` passée au paquet en ligne 6).

Si vous décommentez cette ligne, AMC ajoutera des pages blanches pour atteindre trois pages de sujet (voir ).

Cette fermeture d'accolade marque la fin de la commande `exemplaire` (débutée à la ligne 9).

### Un exemple avec groupes de questions mélangées

Dans cet exemple, on veut que l'ordre dans lequel les questions sont posées soit différent d'une copie à l'autre, tout en laissant ensemble les questions traitant du même sujet. On va donc créer deux groupes de questions, et les mélanger lors de la fabrication de chaque copie.

    \documentclass[a4paper]{article}

    \usepackage[utf8x]{inputenc}
    \usepackage[T1]{fontenc}

    \usepackage[francais,bloc,completemulti]{automultiplechoice}
    \begin{document}

    %%% préparation des groupes

    \setdefaultgroupmode{withoutreplacement}

    \element{geographie}{
      \begin{question}{Paris}
        Dans quel continent se situe Paris~?
        \begin{reponses}
          \bonne{L'Europe}
          \mauvaise{L'Afrique}
          \mauvaise{L'Asie}
          \mauvaise{La planète Mars}
        \end{reponses}
      \end{question}
    }

    \element{geographie}{
      \begin{question}{Cameroun}
        Quelle est la capitale du Cameroun~?
        \begin{reponses}
          \bonne{Yaoundé}
          \mauvaise{Douala}
          \mauvaise{Abou-Dabi}
        \end{reponses}
      \end{question}
    }

    \element{histoire}{
      \begin{question}{Marignan}
        En quelle année a eu lieu la bataille de Marignan~?
        \begin{reponseshoriz}
          \bonne{1515}
          \mauvaise{1915}
          \mauvaise{1519}
        \end{reponseshoriz}
      \end{question}
    }

    \element{histoire}{
      \begin{questionmult}{Nantes}
        Que peut-on dire de l'Édit de Nantes~?
        \begin{reponses}
          \bonne{Il a été signé en 1598}
          \bonne{Il a été définitivement révoqué par Louis XIV}
          \mauvaise{Il a été signé par Henri II}
        \end{reponses}
      \end{questionmult}
    }

    %%% fabrication des copies

    \exemplaire{10}{

    %%% debut de l'en-tête des copies :

    \noindent{\bf QCM  \hfill TEST}

    \vspace*{.5cm}
    \begin{minipage}{.4\linewidth}
      \centering\large\bf Histoire et géographie\\ Examen du 01/01/2008
    \end{minipage}
    \champnom{\fbox{\begin{minipage}{.5\linewidth}
    Nom et prénom :

    \vspace*{.5cm}\namefielddots
    \vspace*{1mm}
    \end{minipage}}}

    %%% fin de l'en-tête

    \begin{center}
      \hrule\vspace{2mm}
      \bf\Large Géographie
      \vspace{1mm}\hrule
    \end{center}

    \restituegroupe{geographie}

    \begin{center}
      \hrule\vspace{2mm}
      \bf\Large Histoire
      \vspace{2mm}\hrule
    \end{center}

    \restituegroupe{histoire}
    }

    \end{document}

### Un exemple avec une feuille de réponses séparée

Dans cet exemple, on souhaite que les cases à cocher soient toutes rassemblées sur une feuille à part. De cette manière, la triche entre étudiants est plus difficile, et surtout, il suffira de scanner une seule page par étudiant, ce qui allège la tâche de l'enseignant dans le cas où son matériel ne lui permet de scanner les copies que de manière manuelle. Dans cet exemple, le nombre de questions est réduit : elles tiennent toutes sur une page et il serait donc inutile d'utiliser une telle mise en page dans ce cas précis. À vous de modifier cette base pour utiliser cette mise en page avec de nombreuses questions !

    \documentclass[a4paper]{article}

    \usepackage[utf8x]{inputenc}
    \usepackage[T1]{fontenc}

    \usepackage[francais,bloc,completemulti,ensemble]{automultiplechoice}
    \begin{document}

    \AMCrandomseed{1237893}

    \def\AMCformQuestion#1{{\sc Question #1 :}}

    \setdefaultgroupmode{withoutreplacement}

    \element{general}{
      \begin{question}{prez}
        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}{pref}
        Parmi les villes suivantes, lesquelles sont des préfectures~?
        \begin{reponses}
          \bonne{Poitiers}
          \mauvaise{Sainte-Menehould}
          \bonne{Avignon}
        \end{reponses}
      \end{questionmult}
    }

    \element{general}{
      \begin{question}{nb-ue}
        Combien d'états sont membres de l'Union Européenne en janvier 2009 ?
        \begin{reponseshoriz}[o]
          \mauvaise{15}
          \mauvaise{21}
          \mauvaise{25}
          \bonne{27}
          \mauvaise{31}
        \end{reponseshoriz}
      \end{question}
    }

    \exemplaire{5}{

    %%% debut de l'en-tête des copies :

    \noindent{\bf QCM  \hfill TEST}

    \vspace*{.5cm}
    \begin{minipage}{.4\linewidth}
      \centering\large\bf Test\\ Examen du 01/01/2008
    \end{minipage}

    \begin{center}\em
    Durée : 10 minutes.

      Aucun document n'est autorisé.
      L'usage de la calculatrice est interdit.

      Les questions faisant apparaître le symbole \multiSymbole{} peuvent
      présenter zéro, une ou plusieurs bonnes réponses. Les autres ont
      une unique bonne réponse.

      Des points négatifs pourront être affectés à de \emph{très
        mauvaises} réponses.
    \end{center}
    \vspace{1ex}

    %%% fin de l'en-tête

    \restituegroupe{general}

    \AMCcleardoublepage

    % \AMCaddpagesto{3}

    \AMCdebutFormulaire

    %%% début de l'en-tête de la feuille de réponses

    {\large\bf Feuille de réponses :}
    \hfill \champnom{\fbox{
        \begin{minipage}{.5\linewidth}
          Nom et prénom :

          \vspace*{.5cm}\namefielddots
          \vspace*{1mm}
        \end{minipage}
      }}

    \begin{center}
      \bf\em Les réponses aux questions sont à donner exclusivement sur cette feuille :
      les réponses données sur les feuilles précédentes ne seront pas prises en compte.
    \end{center}

    %%% fin de l'en-tête de la feuille de réponses

    \formulaire

    % \AMCaddpagesto{5}

    }

    \end{document}

Les remarques suivantes devraient éclaircir cet exemple :

C'est l'option `ensemble` qui permet de faire ce que l'on veut faire ici.

On peut redéfinir de cette manière la façon dont les questions seront identifiées sur la page des réponses (cette ligne est facultative).

Ce saut de page précède la page spéciale où seront regroupées toutes les cases à cocher. Si on imprime en recto-verso, il vaut mieux utiliser `\AMCcleardoublepage` pour que la page de formulaire soit sur une feuille séparée des autres. Si on imprime en recto simple, on peut utiliser simplement `\clearpage`.

En décommentant cette ligne, AMC ajoutera des pages blanches à la partie sujet afin d'atteindre trois pages (voir ).

Cette commande marque le début de la partie formulaire de la copie. Son utilisation est indispensable pour un bon traitement des questions qui n'apparaissent que dans cette partie, comme par exemple celles générées par `AMCcodeGrid`.

La case où écrire son nom doit normalement être située sur la page des réponses !

La commande `namefielddots` insère une ligne pointillée ou un champ à remplir si vous utilisez l'option `pdfform` (voir ).

C'est la commande LaTeX `formulaire` qui écrit toutes les cases à cocher.

En décommentant cette ligne, AMC ajoutera les pages blanches nécessaires afin d'atteindre cinq pages au total (sujet+formulaire), voir .

Quand on utilise une page de réponses séparée, des lettres (ou des chiffres, avec l'utilisation de l'option `chiffres`, voir ) sont inscrites dans les cases à cocher. Pour obtenir une bonne détection des cases cochées, il est donc indispensable de demander aux étudiants de remplir totalement les cases voulues (cocher uniquement les cases à l'aide d'une croix ne serait pas suffisant). Il faut par ailleurs fixer le paramètre « seuil de noirceur » (qui définit la proportion de noir dans une case à partir de laquelle cette case est considérée comme étant cochée) à une valeur de l'ordre de 0,5.

### Description des commandes LaTeX

#### Options du paquet

L'utilisation du paquet `automultiplechoice` se fait grâce à la ligne

    \usepackage[...]{automultiplechoice}

où les pointillés sont remplacés par une liste d'options séparées par des virgules. Les options disponibles sont les suivantes :

- `francais` : indique que le sujet d'examen est en français. Les quelques mentions éventuellement ajoutées par `automultiplechoice` seront alors écrites en français (on peut en particulier penser à la phrase « aucune de ces réponses n'est correcte », voir option `completemulti` plus loin).

- `lang=XX` : indique que le sujet est dans la langue XX. Pour le moment, seules les langues FR (français), DE (allemand), ES (espagnol), IT (Italien), JA (Japonais), NL (Néerlandais), NO (Norvégien) et PT (Portugais) sont disponibles.

- `pdfform` : permet de créer un formulaire, remplissable via les lecteurs de fichiers pdf.

- `bloc` : place chaque question dans un bloc, de telle sorte qu'elle ne puisse pas être coupée par un saut de page.

  Vous pouvez, ponctuellement, pour une meilleure mise en page, annuler, pour une question, cette option avec la commande `\AMCnobloc`.

      {\AMCnobloc%
       \begin{question}{prez}
         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}%
      }%

- `asbox` : même effet que `bloc`, mais pour la feuille de réponses séparée.

- `completemulti` : ajoute de manière automatique une réponse type « aucune de ces réponses n'est correcte » à la fin de chaque question multiple. Ceci permet de différencier, pour ces questions, une absence de réponse et la réponse qui consiste à ne choisir aucune des réponses proposées. Que cette option soit utilisée ou non, on peut demander l'ajout de cette dernière réponse ou l'annuler pour une question particulière en utilisant une des commandes `\AMCcompleteMulti` et `\AMCnoCompleteMulti` à l'intérieur de l'environnement `questionmult` correspondant.

- `ordre` : annule le mélange automatique de l'ordre des réponses dans toutes les questions.

- `noshufflegroups` : annule le mélange automatique de l'ordre des groupes. (voir )

- `correc` : produit la correction du QCM, et non le sujet.

- `correcindiv` : produit la correction de tous les sujets.

- `ensemble` : demande à ce que les cases à cocher soient toutes rassemblées en fin de copie (cette option est en général utilisée quand on ne veut scanner qu'une seule page par étudiant - voir ).

- `chiffres` : si on utilise l'option `ensemble`, l'option `chiffres` demande d'identifier les questions avec des chiffres plutôt qu'avec des lettres (ce qui est le comportement par défaut).

- `outsidebox` : si on utilise l'option `ensemble`, cette option demande à ce que les lettres ou chiffres soient inscrits, sur la feuille de réponses, à l'extérieur des cases à cocher plutôt qu'à l'intérieur.

- `init` : initialise le générateur aléatoire à partir de l'horloge. Option pour test : ne pas utiliser pour un examen !

- `insidebox` : si on n'utilise pas l'option `ensemble`, cette option permet d'inscrire des lettres (ou chiffres) à l'intérieur des cases à cocher (ce n'est pas le cas par défaut).

- `catalog` : option utilisée pour présenter les questions sous forme d'un catalogue dans lequel on piochera pour constituer un examen. Les questions ne sont pas identifiées par des numéros mais par leur nom. En général, on n'utilise pas la commande `\exemplaire` pour cette présentation.

- `keys=line` : option utilisée pour présenter le nom des questions sur une ligne avec l'option catalog.

- `postcorrect` : option utilisée si on souhaite indiquer les bonnes réponses après l'examen, grâce à une copie remplie par l'enseignant - voir .

- `fullgroups` : annule le paramètre optionnel de `\restituegroup` et `\copygroup`, ainsi chaque groupe est entièrement inséré et copié (voir ).

- `storebox` : Si vous choisissez de modifier la forme des cases à cocher (carrées par défaut voir ) par des ovales ou des cercles, vous pouvez transmettre cette option à automultiplechoice pour qu'il utilise `\storebox` plutôt que `\savebox` pour stocker le dessin des cases.

- `automarks` : en mode `ensemble`, utilisez cette option si vous voulez que les marques de calage ne soient pas imprimées sur les pages de sujet, mais uniquement sur les pages de réponse. Vous pouvez alors personnaliser la façon d'imprimer les numéros de page sur le sujet en redéfinissant la commande `\AMCsubjectPageTag` :

      \renewcommand\AMCsubjectPageTag{%
        \fbox{\texttt{\the\AMCid@etud:\thepage}}%
      }

  L'option `automarks` ne doit pas être utilisée dans le cas ou une quelconque information doit être collectée depuis les pages de sujet, car AMC ne pourra pas traiter ces pages.

- `nopage` : utilisez cette option si vous ne voulez pas utiliser les marges, marques de calage et codes d'identification de page d'AMC. Cette option est donc à utiliser pour produire des documents qui ne seront pas traités par AMC, comme des listes d'exercices par exemple.

- `nowatermark`: retire le filigrane (projet) si vous compilez hors AMC. Très dangereux.

- `survey`: pour créer des sondages avec une mise en page de haute qualité https://gitlab.com/CSaalbach/surveyamc-project/-/blob/master/surveyamc_tutorial.pdf.

#### Description d'une copie

Le code LaTeX décrivant le contenu de chaque copie doit être inclus dans un appel à la commande `\exemplaire`, avec pour premier argument le nombre de copies et pour deuxième argument le code utilisé pour générer une copie.

    \exemplaire{50}{ ... }

Vous disposez d'une syntaxe alternative utilisant l'environnement `copieexamen`, qui a en option le nombre de copies désiré (5 par défaut).

    \begin{copieexamen}[50]
    ...
    \end{copieexamen}

Cette dernière syntaxe utilise le paquet `environ`.

Pour différencier les copies, la commande `\exemplairepair` peut être utile. À utiliser sous la forme d'un test de condition.

Le numéro de la copie peut être obtenu par la commande `\AMCStudentNumber`.

#### Questions et réponses

Il ne faut pas imbriquer une question dans un environnement question ou tabularx sinon l'export des notes sera incomplet (voir ).

##### Questions simples

Pour les questions simples (une seule réponse correcte), on utilisera le modèle suivant :

    \begin{question}{identifiant}
      Texte de la question...
      \begin{reponses}
        \bonne{La bonne réponse}
        \mauvaise{Une mauvaise réponse}
        \mauvaise{Une autre mauvaise réponse}
      \end{reponses}
    \end{question}

##### Questions multiples

Les questions multiples (celles pour lesquelles aucune, une ou plusieurs réponses peuvent être correctes) utiliseront l'environnement `questionmult` au lieu de `question`.

##### Questions ouvertes

On peut ajouter des questions ouvertes (qui ne sont pas à choix multiple) à l'intérieur du sujet.

Une manière de procéder consiste à présenter des cases à cocher par le correcteur. Après l'examen, le correcteur lit la réponse fournie par l'étudiant et affecte les points qui correspondent en cochant certaines cases qui lui sont réservées. Il peut ensuite scanner les copies et utiliser AMC pour les corriger, tout en intégrant les résultats des questions ouvertes dans la notation :

    \begin{question}{ouverte}
      Donnez la d\'efinition de l'inflation.
      \AMCOpen{lines=5}{\mauvaise[F]{f}\bareme{0}\mauvaise[P]{p}\bareme{1}\bonne[J]{j}\bareme{2}}
    \end{question}

Dans cet exemple, l'enseignant disposera de trois cases. En cochant la première (nommée F pour faux), l'étudiant n'aura aucun point. En cochant la deuxième (appelée P pour partielle), l'étudiant aura 1 point. En cochant la dernière (nommée J pour juste), l'étudiant optiendra 2 points.

Le premier argument de la commande `\AMCOpen` est une liste d'options séparées par des virgules. Les options disponibles sont les suivantes :

lineup=bool

  avec la valeur `true`, la zone de réponse et les cases de notation sont présentées sur la même ligne. Avec la valeur `false` (c'est la valeur par défaut), la zone de réponse est présentée dans un cadre placé en-dessous des cases à cocher).

lineuptext=texte

  si `lineup=true`, le texte et les cases de notation sont présentés sur la même ligne.

lines=num

  fixe le nombre de lignes allouées à la réponse (la valeur par défaut est `1)`.

lineheight=dim

  fixe la hauteur de chaque ligne (la valeur par défaut est `1cm`).

dots=bool

  avec la valeur `true` (par défaut), chaque ligne sera matérialisée par des pointillés. Donner la valeur `false` pour les supprimer.

contentcommand=cmdname

  cette option peut être utilisée pour personnaliser le contenu de la zone de réponse. Il faut définir une commande `\cmdname` qui devra produire le contenu désiré.

hspace=dim

  fixe l'espace à ajouter entre les cases de la zone de notation.

backgroundcol=color

  fixe la couleur de fond de la zone de notation.

foregroundcol=color

  fixe la couleur utilisée dans la zone de notation.

scan=bool

  avec la valeur `false`, la saisie automatique (à partir des scans) n'est pas effectuée pour cette question (cela peut être utile si vous souhaitez utiliser uniquement la saisie manuelle pour noter la question, et que vous ne voulez pas que les étudiants puissent perturber le processus en cochant ces cases). La valeur par défaut est `true`.

annotate=bool

  avec la valeur `false` (par défaut), les cases correspondantes à cette question ne seront pas annotées lors de la fabrication des copies annotées (seule le score à la question sera écrit).

question=texte

  donne un texte court pour que le correcteur identifie facilement la question posée. Ce texte sera écrit juste avant les cases de notation, uniquement dans le cas de l'utilisation d'une feuille de réponses séparée.

  L'identifiant de la question sera affiché par défaut en inscrivant question dans les options.

answer=texte

  donne un texte court qui sera inscrit dans la zone de réponse sur la correction.

Utilisez la commande `\savebox`, en dehors de la commande exemplaire, pour afficher un texte plus long sur plusieurs lignes.

    \newsavebox{\correcbox}
    \savebox{\correcbox}{\parbox{5cm}{\color{red}{Ici\\ou\\l\`a...}}}

Puis, appelez le contenu de la boîte à l'endroit voulu :

    \AMCOpen{lines=4,lineheight=0.15cm, answer= \usebox{\correcbox}}{le barème}

- Si la réponse contient une virgule ou le signe égal, il faut encadrer texte par des accolades.

- Si la réponse contient des commandes `\command` ou des définitions `\def`, il faudra ajouter `\protect`.

    \FPeval\aRandomVariable{round(3+8*random,2)}
    \FPeval\aCalculateVariable{round(\aRandomVariable*9.81,2)}

    \AMCOpen{answer={m=\protect\qty{\aRandomVariable}{\kilo\gram},%
    P=\protect\qty{\aCalculateVariable}{\newton}}{le barème}

width=dim

  donne la dimension horizontale du cadre entourant la zone de réponse dans le cas `lineup=false`. La valeur par défaut est `.95\linewidth`.

framerule=dim

  donne l'épaisseur du trait pour le cadre entourant la zone de réponse.

framerulecol=color

  donne la couleur du cadre entourant la zone de réponse.

boxmargin=dim

  donne la taille de la marge entourant les cases de la zone de notation.

boxframerule=dim

  donne l'épaisseur du trait pour le cadre entourant la zone de notation.

boxframerulecol=color

  donne la couleur du trait pour le cadre entourant la zone de notation.

Vous pouvez modifier la valeur par défaut (pour tout votre questionnaire) de toutes ces options grâce à la commande `\AMCopenOpts`, comme

    \AMCopenOpts{boxframerule=2pt,boxframerulecol=red}

De plus, on peut ajouter un petit texte dans la zone de notation pour signifier aux étudiants de ne pas cocher ces cases-là en redéfinissant la commande `\AMCotextReserved` comme suit :

    \def\AMCotextReserved{\emph{Reservé}}

Dans le cas de l'utilisation d'une feuille de réponse séparée, on peut également ajouter un petit texte à chaque question ouverte comme suit :

    \def\AMCotextGoto{\par{\bf\emph{Répondez sur la feuille de réponses.}}}

Si le nombre de cases réponses est important, utilisez l'astuce ci-dessous (`\parbox`) pour obliger un passage à la ligne.

    \AMCOpen{lines=6}{
      \hbox{\parbox{8.5cm}{
      \mauvaise[F]{F}\bareme{0}
      \mauvaise[1]{1}\bareme{1}
      \mauvaise[2]{2}\bareme{2}
      \mauvaise[3]{3}\bareme{3}
      \mauvaise[4]{4}\bareme{4}
      \mauvaise[5]{5}\bareme{5}
      \mauvaise[6]{6}\bareme{6}
      \mauvaise[7]{7}\bareme{7}
      \mauvaise[8]{8}\bareme{8}
      \mauvaise[9]{9}\bareme{9}
      \bonne[10]{10}\bareme{10}}}
    }

##### Questions indicatives

Dans le cas où la question posée est juste informative et ne doit pas contribuer à la note de l'étudiant, on utilisera la commande `\QuestionIndicative`, comme dans l'exemple suivant :

    \begin{question}{facilite}\QuestionIndicative
      \bareme{auto=0,v=-1,e=-2}
      Vous êtes-vous sentis à l'aise ou en difficulté dans cet enseignement ?
      Répondez sur une échelle de 0 (grandes difficultés) à 5 (très à l'aise).
      \begin{reponseshoriz}[o]
        \bonne{0}
        \bonne{1}
        \bonne{2}
        \bonne{3}
        \bonne{4}
        \bonne{5}
      \end{reponseshoriz}
    \end{question}

##### Identifiant des questions

Il faut utiliser un `identifiant` différent pour chaque question. Un identifiant peut être constitué de chiffres, lettres et caractères simples (ne pas utiliser le caractère souligné `_`, les accolades, crochets, par exemple !). Il ne faut pas utiliser d'identifiants se terminant par un nombre entier entre crochets (comme `marine-marchande[2]` ou `123[27]`), car cette forme d'identifiants est réservée à la saisie de longs codes (par exemple grâce à `\AMCcodeGrid` - voir ).

L'identifiant peut être de la forme

    groupe.identifiant

ou

    groupe:identifiant

(voir remarque ) pour obtenir le total d'un même groupe de questions lors de l'export des notes (voir ).

##### Numéro de question, voir aussi

###### Réinitialisation

On peut modifier le numéro de la prochaine question à l'aide de la commande `\AMCnumero`. Au début de chaque copie, un appel à

    \AMCnumero{1}

est effectué, mais cette commande peut être utilisée à tout moment.

###### Afficher N° section.N° question

- Uniquement dans le fichier pdf

      \makeatletter
      \def\AMCbeginQuestion#1#2{\par\noindent{\bf \the\c@section.#1} #2\hspace*{1em}}
      \makeatother
      %Remet automatiquement à 1 le compteur des question lors d'une nouvelle section
      %à utiliser avec le paquet amsmath
      \numberwithin{AMCquestionaff}{section}

- Pris en compte dans l'export ods

  Juste après \begin{document}

      \makeatletter
      \renewcommand\AMC@qaff{\thesection.\arabic{AMCquestionaff}}
      \makeatother

  Et après chaque \begin{section} pour faire repartir le numéro de 1.

      \AMCnumero{1}

###### Cacher le numéro

Pour cacher le numéro d'une question particulière et conserver dans le sujet une continuité des numéros, ajouter la commande `\AMCquestionNumberfalse` juste après `\AMCbeginQuestion` (ou utiliser la commande ci-dessus) :

    {
    \def\AMCbeginQuestion##1##2{}
    \AMCquestionNumberfalse
    \begin{question}
     ...
    \end{question}
    }

Ou avec une commande dans le préambule.

    \makeatletter
    \def\jepasse{%
    \def\AMCbeginQuestion##1##2{\ifAMC@catalog\textbf{##1}\fi}
    \AMCquestionNumberfalse}
    \makeatother

Ne pas oublier d'insérer des accolades autour pour limiter son effet à une question.

    {\jepasse
     \begin{question}{Calibre600}
       Quel calibre doit-on choisir pour mesurer une tension inconnue?
       \begin{reponseshoriz}[o]
         \mauvaise{200}\mauvaise{2}\mauvaise{20}\mauvaise{200}\bonne{600}
       \end{reponseshoriz}
     \end{question}
    }

Dans cet exemple, le numéro de la question ne sera pas affiché via la commande `\AMCquestionNumberfalse`.

###### Compteur de questions

Le compteur interne des questions est `AMCquestionaff`. Pour afficher le nombre total de questions en début de sujet, il faut utiliser le paquet `totcount`. Voici un exemple :

    documentclass[a4paper]{article}

    \usepackage[utf8x]{inputenc}
    \usepackage[T1]{fontenc}

    \usepackage[francais,bloc,completemulti]{automultiplechoice}
    \usepackage{totcount}
    \regtotcounter{AMCquestionaff}
    \begin{document}

    \exemplaire{10}{

    Il y a \total{AMCquestionaff} questions.

    %%% debut de l'en-tête des copies :

    \noindent{\bf QCM  \hfill TEST}

    \vspace*{.5cm}
    \begin{minipage}{.4\linewidth}
    \centering\large\bf Test\\ Examen du 01/01/2008\end{minipage}
    \champnom{\fbox{
                    \begin{minipage}{.5\linewidth}
                      Nom et prénom :

                      \vspace*{.5cm}\dotfill
                      \vspace*{1mm}
                    \end{minipage}
             }}

    \begin{center}\em
    Durée : 10 minutes.

      Aucun document n'est autorisé.
      L'usage de la calculatrice est interdit.

      Les questions faisant apparaître le symbole \multiSymbole{} peuvent
      présenter zéro, une ou plusieurs bonnes réponses. Les autres ont
      une unique bonne réponse.

      Des points négatifs pourront être affectés à de \emph{très
        mauvaises} réponses.
    \end{center}
    \vspace{1ex}

    %%% fin de l'en-tête

    \begin{question}{prez}
      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}

    \begin{questionmult}{pref}
      Parmi les villes suivantes, lesquelles sont des préfectures~?
      \begin{reponses}
        \bonne{Poitiers}
        \mauvaise{Sainte-Menehould}
        \bonne{Avignon}
      \end{reponses}
    \end{questionmult}
    % \AMCaddpagesto{3}

    %\theAMCquestionaff
    }

    \end{document}

##### Réponses sur plusieurs colonnes

Afin de présenter les réponses sur plusieurs colonnes (et gagner de la place), on pourra englober l'environnement `reponses` dans un environnement `multicols`, en utilisant le paquet LaTeX `multicol` de la manière suivante :

    \begin{multicols}{2}
      \begin{reponses}
        \bonne{La bonne réponse}
        \mauvaise{Une mauvaise réponse}
        \mauvaise{Une autre mauvaise réponse}
      \end{reponses}
    \end{multicols}

Pour les réponses plus courtes encore, on peut demander à ce que les réponses soient imprimées les unes à la suite des autres, en utilisant l'environnement `reponseshoriz` au lieu de `reponses`.

Si de plus les réponses tiennent sur plusieurs lignes, cela pourrait entraîner le passage d'une réponse d'une colonne à l'autre, ce qui est un peu déroutant pour le lecteur. La commande `\AMCBoxedAnswers` a été définie afin d'éviter ce phénomène, en enveloppant chaque réponse dans une boite. On pourra l'utiliser comme dans l'exemple suivant :

    \begin{question}{deux colonnes}
      Qu'est-ce qu'un oiseau ?
      \begin{multicols}{2}\AMCBoxedAnswers
        \begin{reponses}
          \bonne{C'est un animal à ailes et qui pond des \oe{}ufs.
            Il y en a de toutes les couleurs}
          \mauvaise{C'est un grand meuble en bois qui sert la plupart
            du temps à ranger du linge de maison}
          \mauvaise{C'est une machine à vapeur qui permet de fermer
            les boîtes de conserve à grande vitesse}
        \end{reponses}
      \end{multicols}
    \end{question}

On notera qu'il est aussi possible de paramétrer l'espace vertical séparant deux blocs de réponse grâce à la dimension `AMCinterBrep` :

    \AMCinterBrep=.5ex

##### Réponses en une lettre

Dans certains cas, une lettre suffit pour décrire la réponse proposée. Dessiner les cases à cocher à la fois sur le sujet et sur la feuille de réponse séparée est alors redondant. L'utilisation de `\AMCBoxOnly` à la place d'un environnement `reponses` peut alors s'avérer judicieuse :

    \begin{question}{bras}
      Quelle lettre désigne le \textit{bras} sur le diagramme ?
      \AMCBoxOnly{ordered=true}{\mauvaise[A]{}\bonne[B]{}%
        \mauvaise[C]{}\mauvaise[D]{}}
    \end{question}

Le premier argument de `\AMCBoxOnly` est une liste d'options séparées par des virgules. Les options disponibles sont les suivantes :

help=texte

  écrit un petit texte de rappel juste avant les cases sur la feuille de réponse séparée.

ordered=bool

  avec la valeur `true` (la valeur par défaut est `false`), les réponses ne seront pas mélangées.

##### Approfondir la réponse

###### Commande \explain

Lors de l'impression du corrigé, vous pouvez apporter des précisions grâce à la commande `\explain`. Cette commande, à insérer dans un environnement `question` (ce qui inclut les environnements `questionmult`, `questionmultx`), affichera le texte écrit.

    \begin{question}{combustion}
      Quel gaz apparaît lors de la combustion incomplète du butane~?
      \begin{reponses}
        \bonne{Le monoxyde de carbone.}
        \mauvaise{Le dioxyde de carbone.}
        \mauvaise{Le dioxygène.}
      \end{reponses}
      \explain{Le monoxyde de carbone est un gaz incolore, inodore et toxique.}
    \end{question}

Par défaut, le mot Explication sera affiché. Vous pouvez modifier ce texte pour une ou plusieurs questions avec la commande `\AMCtext` (Voir ).

    \begin{question}{elevation}
      Parmi les montagnes suivantes, laquelle est la plus haute ?
          \begin{reponses}
          \bonne{Sagarmatha}
          \mauvaise{K2}
          \mauvaise{Mont Blanc}
          \mauvaise{Aconcagua}
      \end{reponses}
      \explain{Sagarmatha qui signifie littéralement `la tête du ciel' est le nom indigène du mont Everest, la montagne la plus haute du monde.}
    \end{question}

    \begin{question}{odd}
      Cochez l'intrus.
      \begin{reponses}
          \bonne{Kilimanjaro}
          \mauvaise{Himalayas}
          \mauvaise{Alpes}
          \mauvaise{Andes}
      \end{reponses}
      \AMCtext{explain}{\textit{\textbf{Raison :}}}
      \explain{Le Kilimanjaro est une montagne tandis que les autres sont des chaînes de montagnes.}
    \end{question}

    \begin{questionmult}{himalaya}
      Parmi les montagnes suivantes, lesquelles se trouvent dans l'Himalaya ?
      \begin{reponses}
          \bonne{Mount Everest}
          \bonne{K2}
          \mauvaise{Mont Blanc}
          \mauvaise{Aconcagua}
      \end{reponses}
      \explain{L'Aconcagua est situé dans la cordillère des Andes tandis que le Mont Blanc se trouve dans les Alpes.}
    \end{questionmult}

Explication : sera affiché avant les explications de la première et troisième question, Raison : avant les explications de la deuxième question.

###### Commande \explaincontext

Cette commande affiche l’argument dans le corrigé et en dehors de l’environnement question.

##### Garder l'ordre des réponses

Pour demander à garder l'ordre des réponses pour cette question-ci, on peut utiliser l'option `o` de l'environnement `reponses`, en remplaçant la ligne 3 par

    \begin{reponses}[o]

###### Dernier choix

Vous pouvez choisir de toujours laisser une ou plusieurs réponses en dernière position avec la commande `\lastchoices`.

    \begin{question}{color}
      Which color?
      \begin{choiceshoriz}
        \mauvaise{red}
        \mauvaise{blue}
        \mauvaise{yellow}
        \lastchoices
        \bonne{transparent}
        \mauvaise{can't say}
      \end{choiceshoriz}
    \end{question}

    \begin{questionmult}{number}
      How many?
      \begin{choiceshoriz}
        \mauvaise{none}
        \bonne{one}
        \mauvaise{two}
        \mauvaise{three}
        \lastchoices
        \bonne{not so much}
        \mauvaise{a lot}
      \end{choiceshoriz}
    \end{questionmult}

##### Réponse numérique (impossible avec AMC-TXT)

voir

##### Remarques

###### French et babel

Quand on utilise `babel` et l'option `french`, ne pas mettre de `:` ni `;` dans les identifiants de questions.

###### Nombre maximal de réponses

Le nombre de réponses pour une question est actuellement limité à 199.

#### Définir la zone de notation

Vous pouvez ajouter une option supplémentaire de zone de notation (voir ) avec le package `tikz`.

    \usepackage{tikz}

##### Sans l'option `ensemble`

Dans ce mode, le sujet et les réponses sont sur la(es) même(s) feuilles.

Taper cette commande, après le `\begin{document}` et avant la commande `\exemplaire` :

    \AMCsetScoreZone{width=1.5em,height=1.5ex,depth=.5ex,position=margins}

Les grandeurs `width`, `height`, `depth` définissent les dimensions de la case de notation ainsi que son emplacement sur la feuille de réponses. Cette zone invisible est définie pour toutes les questions.

La variable `position` peut prendre les valeurs : none, question, margin, margins.

##### Avec l'option `ensemble`

Dans ce mode, la feuille de réponses est séparée du sujet.

Taper cette commande, après le `\begin{document}` et avant la commande `\exemplaire` :

    \AMCsetScoreZoneAnswerSheet{width=1.5em,height=1.5ex,depth=.5ex,position=question}

Les grandeurs `width`, `height`, `depth` définissent les dimensions de la case de notation ainsi que son emplacement sur la feuille de réponses. Cette zone invisible est définie pour toutes les questions.

La variable `position` peut prendre les valeurs : none, question, margin, margins.

L'option `margins` ne fonctionne pas avec AMC-TXT

Vous ne pouvez pas modifier votre sujet a posteriori en rajoutant l'une de ces fonctions après l'impression du sujet.

#### Groupes de questions

L'inclusion de questions dans des groupes permet de mélanger les questions à l'intérieur de ces groupes, de manière différente pour chaque copie. Chaque groupe de questions devra avoir un nom formé uniquement de lettres non-accentuées.

On peut mettre une à une des questions dans un groupe, comme dans l'exemple suivant :

    \element{ungroupe}{
      \begin{question}{facile}
        Alors, combien font un plus un~?
        \begin{reponseshoriz}
          \bonne{deux}
          \mauvaise{zéro}
          \mauvaise{trois}
        \end{reponseshoriz}
      \end{question}
    }

La constitution du groupe, par les commandes `element`, doit être faite une seule fois : ces commandes doivent donc être utilisées avant la commande `exemplaire`, qui va répéter certaines actions pour chaque copie.

Enfin, on restitue les questions du groupe par la commande `restituegroupe`, comme dans

    \restituegroupe{ungroupe}

La manière dont le groupe est restitué peut être contrôlée par le mode du groupe, défini grâce à la commande `setgroupmode` (appelé après la création des groupes et avant `\exemplaire`):

    \setgroupmode{mygroup}{XXX}

où `XXX` peut prendre les valeurs suivantes :

fixed

  avec ce mode, les éléments du groupe sont pris à partir du début du groupe à chaque restitution.

cyclic

  les éléments sont pris à la suite les uns des autres à chaque restitution, en repartant du début si nécessaire.

withreplacement

  même chose que pour `fixed`, mais le groupe est mélangé à chaque fois.

withoutreplacement

  comme `cyclic`, en ajoutant un mélange à chaque fois que l'on reprend au début.

Un mode par défaut peut être choisi pour tous les groupes qui seront créés ensuite (un groupe est créé à la première utilisation de `element`) :

    \setdefaultgroupmode{XXX}

Si cette commande n'est pas utilisée, c'est le mode `fixed` qui sera utilisé.

On peut manipuler les groupes de questions de manière plus précise grâce aux commandes suivantes : tutoriel mélange

- `\restituegroupe[n]{ungroupe}` (utilisation du paramètre optionnel n) restitue uniquement les n premiers éléments du groupe.

- `\insertgroupfrom[n]{ungroupe}{i}` Cette commande fait la même chose que `\restituegroupe[n]{ungroupe}` mais la sélection débute à l'élément i. Le premier élément a pour valeur d'indice 0.

- `\cleargroup{groupe}` efface tout le contenu du groupe.

- `\copygroup{depuis}{vers}` copie le contenu du groupe depuis à la fin du groupe vers. Cette commande admet un argument optionnel qui permet de ne copier qu'un certain nombre d'éléments, comme dans `\copygroup[n]{depuis}{vers}`.

- `\copygroupfrom[n]{depuis}{vers}{i}` Cette commande fait la même chose que `\copygroup[n]{depuis}{vers}` mais la sélection débute à l'élément i. Le premier élément a pour valeur d'indice 0.

À l'aide de ces commandes, on peut par exemple composer un sujet en prenant 4 questions au hasard dans le groupe GA, 5 questions au hasard dans le groupe GB, toutes les questions du groupe GO, puis en mélangeant le tout, grâce aux commandes suivantes (à mettre à l'intérieur du texte en argument de la commande `exemplaire`, et en supposant que les groupes `GA`, `GB` et `tout` sont de mode `withreplacement` ou `withoutreplacement`) :

    \cleargroup{tout}
    \copygroup[4]{GA}{tout}
    \copygroup[5]{GB}{tout}
    \copygroup{GO}{tout}
    \restituegroupe{tout}

Une valeur nulle est possible, une valeur négative copie tout le groupe.

#### Papier, marges

Le paquet LaTeX `automultiplechoice` utilise `geometry` pour gérer les marges et la mise en page. Vous pouvez modifier ses réglages grâce à l'utilisation de la commande `\geometry` juste avant le `\begin{document}` - voir la documentation du paquet `geometry` pour plus de détails. Les valeurs initialisées par AMC sont les suivantes :

    \geometry{hmargin=3cm,headheight=2cm,headsep=.3cm,footskip=1cm,top=3.5cm,bottom=2.5cm}

Si vous réduisez les marges pour gagner de la place, gardez à l'esprit que :

- Les quatre marques de coin doivent être imprimées entièrement (elles pourraient disparaître à cause des marges d'impression).

- Les quatre marques de coin doivent apparaître complètement sur les scans des copies remplies par les étudiants (si elles sont trop près des bords, elles pourraient disparaître lors du scan à la suite d'un décalage ou d'une rotation des feuilles de papier).

Vous pouvez également préciser la taille de papier à utiliser en ajoutant l'option correspondante à la liste donnée en argument à `\geometry`. Parmi les valeurs possibles, on trouvera `a4paper`, `a5paper`, `a6paper`, `b4paper`, `b5paper`, `ansibpaper`, `ansicpaper`, `ansidpaper`, `letterpaper`, `executivepaper`, `legalpaper`.

Pour des petites tailles de papier, il peut aussi être intéressant de modifier la position de l'identifiant de copie (de la forme `+1/1/53+`) à côté de son équivalent en cases blanches et noires, en haut de chaque page. Ceci est rendu possible par la commande `\AMCidsPosition`, sous la forme

    \AMCidsPosition{pos=p,width=w,height=h}

où p peut valoir `none` (ne pas écrire cet identifiant), `top` (l'écrire au-dessus) et `side` (à côté), et w et h sont les dimensions de la boîte (invisible) qui entoure l'identifiant. Les valeurs par défaut sont les suivantes :

    \AMCidsPosition{pos=side,width=4cm,height=3ex}

Concluons par un exemple raisonnable au format A5 :

    \geometry{a5paper,hmargin=1.6cm,top=2.5cm}
    \AMCidsPosition{pos=top}

N'utilisez pas le paquet `pgfpages` ou toutes autres commandes de mise en page modifiant l'impression du nombre de pages par feuille.

#### Style des cases à cocher

La commande `\AMCboxStyle` (nouveau nom de la commande `\AMCboxDimensions` qui reste compatible avec les options ci-dessous) permet de modifier une ou plusieurs dimensions relatives aux cases à cocher :

Les valeurs par défaut des options sont :

    \AMCboxStyle{shape=square,size=2.5ex,down=.4ex,rule=.5pt,outsidesep=.1em,color=black}

- `shape` représente la forme des cases à cocher. La valeur square produit des carrés (ou des rectangles si on donne des dimensions différentes pour la hauteur et la largeur). La valeur oval produit des cercles ou des ovales. Si vous voulez utiliser oval, vous devez charger le paquet LaTeX tikz.

- `width` représente la largeur des cases ;

- `height` représente la hauteur des cases ;

- `size` représente la taille (à la fois `width` et `height`) de ces cases ;

- `rule` représente l'épaisseur du contour des cases ;

- `down` représente la taille du déplacement vers le bas des cases.

- `outsidesep` représente la distance entre la case et la lettre (ou le chiffre) quand l'option `outsidebox` est choisie (voir ).

- `cross=true` visible uniquement sur la feuille réponse, indique par une croix la bonne réponse au lieu de colorier la case.

- `crossrule=1.5` visible uniquement sur la feuille réponse, représente l'épaisseur de la croix précédente.

- `color=col` permet d'indiquer la couleur à utiliser pour les cases à cocher. La couleur col doit être reconnue par le paquet LaTeX `xcolor`. On pourra ainsi utiliser certains noms de couleurs (comme red pour le rouge), ou définir soi-même sa couleur comme dans

      \definecolor{vertclair}{rgb}{0.67,0.88,0.5}
      \AMCboxStyle{color=vertclair}

Pour obtenir des cases plus petites, on pourra, par exemple, utiliser la commande

    \AMCboxStyle{size=1.7ex,down=.2ex}

Lors de l'utilisation de l'option `ensemble`, il est possible de modifier la manière de nommer les cases à cocher (c'est-à-dire ce qui sera inscrit dans chaque case). Le comportement par défaut est d'écrire des lettres majuscules, ou des chiffres si l'option `chiffres` est utilisée. Pour changer cela, il faut redéfinir la commande `\AMCchoiceLabel`, qui prend comme unique argument le nom du compteur utilisé pour la numérotation des cases. Ainsi, pour obtenir des lettres minuscules, on utilisera :

    \def\AMCchoiceLabel#1{\alph{#1}}

De même, lors de l'utilisation du paquet LaTeX `arabxetex`, la commande suivante pourra se révéler utile :

    \def\AMCchoiceLabel#1{\textLR{\Alph{#1}}}

Pour changer le style des lettres inscrites dans les cases, on pourra également redéfinir la commande `\AMCchoiceLabelFormat`. Par exemple, pour obtenir des lettres grasses, on utilisera :

    \def\AMCchoiceLabelFormat#1{\textbf{#1}}

Pour changer le style des lettres inscrites à l'exterieur des cases, on pourra également redéfinir la commande `\AMCoutsideLabelFormat`. Par exemple, pour obtenir des lettres grasses, on utilisera :

    \def\AMCoutsideLabelFormat#1{\textbf{#1}}

La commande LaTeX pour basculer en mode corrigé (cases bonnes réponses coloriées) est `\AMC@correctrue`. Vous pouvez créer une commmande pour indiquer à AMC de basculer en mode corrigé même dans le sujet (DOC-sujet.pdf). Le code ci-dessous est à inscrire juste après \begin{document}.

    \makeatletter
    \def\AMCforcecorrect{\AMC@correctrue}
    \makeatother

Vous pouvez inclure cette commande pour une question particulière qui sera encadrée par des accolades pour en limiter l'effet. Indiquez un barème nul ou utilisez la commande `\QuestionIndicative`

    {\AMCforcecorrect\begin{questionmult}{test}\QuestionIndicative
      .....
     \end{questionmult}
    }

#### Style du questionnaire

La façon dont chaque question est présentée peut être modifiée en redéfinissant la commande LaTeX `AMCbeginQuestion`, dont la définition par défaut est la suivante :

    \def\AMCbeginQuestion#1#2{\par\noindent{\bf Question #1} #2\hspace*{1em}}

Le premier paramètre transmis à cette commande est le numéro de question à afficher. Le second paramètre contient `\multiSymbole` dans le cas dune question à plusieurs réponses possibles, et est vide dans les autres cas. La commande `\multiSymbole` peut aussi être modifiée : elle a pour charge de différentier les questions à réponses multiples des autres. Par défaut, elle affiche un trèfle :

    \def\multiSymbole{$\clubsuit$}

##### Environnement `reponsesperso`

La présentation des réponses peut être modifiée de la même façon, si on utilise l'environnement `reponsesperso` au lieu de `reponses` ou `reponseshoriz`, en redéfinissant les trois macros LaTeX suivantes :

    \def\AMCbeginAnswer{}
    \def\AMCendAnswer{}
    \def\AMCanswer#1#2{#1 #2}

###### Exemple 1

On peut utiliser des cases à cocher pour pénaliser les étudiants rendant leur copie en retard, par exemple (8 points en moins pour un petit retard, et 20 points en moins pour un retard exagéré). Il suffira d'inclure à l'endroit désiré (par exemple dans l'en-tête quelque chose comme ça (ici je demande un fond gris) :

    \fcolorbox{black}{gray}{\insertRetard}

où la commande `\insertRetard` a été définie en-dehors de \exemplaire :

    \def\insertRetard{ %
    {\def\AMCbeginQuestion##1##2{}\AMCnobloc%
     \begin{questionmult}{00retard}
     \AMCnoCompleteMulti\AMCdontAnnotate%
     \def\AMCbeginAnswer{}\def\AMCendAnswer{}%
     Réservé~\begin{reponsesperso}[o]\mauvaise{R1~}\bareme{b=0,m=-8}\mauvaise{R2}\bareme{b=0,m=-20}\end{reponsesperso}%
     \end{questionmult}}%
    }

- la commande `\def\AMCbeginQuestion##1##2{}` (combinée avec l'utilisation de l'environnement `reponsesperso`) permet qu'AMC n'écrive pas "Question XX".

- `\def\AMCbeginAnswer{}\def\AMCendAnswer{}` permettent également d'épurer le résultat.

- `\AMCnoCompleteMulti` permet de demander à AMC de ne pas rajouter la réponse "aucune de ces réponses n'est correcte" marlgré l'utilisation de questionmult.

- `\AMCdontAnnotate` demande à AMC de ne pas annoter ces cases là.

Lorsque vous êtes à l'intérieur de la commande `\exemplaire`, il faut doubler les `#`.

    \def\AMCanswer##1##2{##1  ##2}
    \def\AMCbeginQuestion##1##2{}

###### Utilisation en mathématiques

    \begin{questionmult}{formule}\bareme{mz=2}\AMCnoCompleteMulti
      Comment est définie la fonction identité ?
      \begin{reponsesperso}[o]
        \[f(x)=\bonne[$y$]{}\mauvaise[$x$]{}\bonne[$+$]{}\bonne[$x^2$]{}\]
      \end{reponsesperso}
    \end{questionmult}

##### Espaces

Certains espacements peuvent également être modifiés :

    \AMCinterIrep=0pt
    \AMCinterBrep=.5ex
    \AMCinterIquest=0pt
    \AMCinterBquest=3ex
    \AMCpostNquest=1.5ex
    \AMCpostOquest=7mm
    \setlength{\AMChorizAnswerSep}{3em plus 4em}
    \setlength{\AMChorizBoxSep}{1em}

Ces dimensions correspondent aux espaces verticaux ajoutés entre les questions (`quest`) ou les réponses (`rep`), en mode boîte (`B`, obtenu avec `\AMCBoxedAnswers` ou l'option de package `bloc`) ou standard (`I`), l'espace après une question numérique, ouverte. Les deux dernières longueurs sont utilisées pour l’environnement `reponsesperso`.

#### Mise en page

##### Marges

Les marges ont été choisies de telle manière que le document s'imprime correctement sur la majorité des imprimantes. Si votre imprimante permet de les réduire, vous pouvez le faire en utilisant la commande `geometry` du paquet LaTeX `geometry`. Par exemple, pour resserrer le haut des copies, on pourra utiliser `\geometry{top=3cm}` au lieu de la valeur 3.5cm utilisée par défaut, juste avant le `\begin{document}`.

##### Nombre de pages

AMC gère automatiquement le nombre de pages à générer pour chaque sujet. Vous pouvez choisir de fixer un nombre de pages identiques pour chaque sujet avec la commande `\AMCaddpagesto{entier}` à placer à l'endroit où vous souhaitez atteindre ce nombre de pages (en général à la toute fin de la description de la copie, ou juste avant le formulaire).

#### Style du formulaire séparé

Il est aussi possible de modifier la mise en page du formulaire de réponses séparé produit avec l'option `ensemble` (voir ).

1. Si on veut simplement modifier l'espacement horizontal entre deux cases de réponses ou l'espacement vertical entre deux questions, il suffit de redéfinir les dimensions suivantes :

       \AMCformHSpace=.3em
       \AMCformVSpace=1.2ex

2. Pour un changement plus profond de la mise en page, on peut aussi redéfinir les commandes utilisées en début de chaque question et pour chaque réponse :

       \def\AMCformBeforeQuestion{\vspace{\AMCformVSpace}\par}
       \def\AMCformQuestion#1{\textbf{Question #1 :}}
       \def\AMCformAnswer#1{\hspace{\AMCformHSpace} #1}

   Ces définitions sont à insérer juste après la balise `\begin{document}` dans le document LaTeX.

3. Vous pouvez forcer AMC à ne pas respecter l'ordre des questions et à mémoriser les questions ouvertes afin qu'elles soient restituées ensemble. Cela peut être utile lorsque vous utilisez le package `multicols`, les réponses écrites à la main des questions ouvertes demandant plus d'espace.

   La commande `\AMCformFilter{!\AMCifcategory{open}}` affiche toutes les questions sauf les questions ouvertes puis la commande `\AMCformFilter{\AMCifcategory{open}}` affiche uniquement les questions ouvertes. Les deux commandes doivent être utilisées ensemble.

       %Sur deux colonnes, les cases réponses sont affichées
       %à l'exception des questions ouvertes.
       \begin{multicols}{2}
       \AMCformFilter{!\AMCifcategory{open}}
       \end{multicols}

       %Toutes les questions ouvertes sont affichées.
       \AMCformFilter{\AMCifcategory{open}}

   L'ordre croissant des numéros est toujours respecté.

#### Saisie de codes

L'entrée de codes (par exemple pour que chaque étudiant codifie son numéro d'étudiant lui-même sur sa copie) peut être aisément effectuée à l'aide de la commande LaTeX

    \AMCcodeGridInt[options]{identifiant}{nombre}

Les deux arguments de cette commande sont un identifiant de question que vous choisissez ainsi que le nombre de chiffres du codage désiré. On pourra, par exemple, utiliser l'en-tête de copie suivant :

    {\setlength{\parindent}{0pt}\hspace*{\fill}\AMCcodeGridInt{etu}{8}\hspace*{\fill}
    \begin{minipage}[b]{6.5cm}
    $\longleftarrow{}$\hspace{0pt plus 1cm} codez votre numéro d'étu\-diant ci-contre,
    et inscrivez votre nom et prénom ci-dessous.

    \vspace{3ex}

    \hfill\champnom{\fbox{
        \begin{minipage}{.9\linewidth}
          Nom et prénom :

          \vspace*{.5cm}\dotfill

          \vspace*{.5cm}\dotfill
          \vspace*{1mm}
        \end{minipage}
      }}\hfill\vspace{5ex}\end{minipage}\hspace*{\fill}

    }

Ici l'identifiant est etu qui servira à AMC pour attribuer chaque copie à un étudiant et 8 est le nombre de cases pour le code.

Vous devrez sélectionner cet identifiant dans le menu déroulant Titre du code pour association automatique de l'onglet notation lors de l'association automatique des copies (voir ).

Dans le cas de l'utilisation de l'option `ensemble`, la commande `AMCcodeGridInt` devra se trouver dans la partie formulaire, c'est-à-dire après la commande `AMCdebutFormulaire`.

La présentation de ces formulaires de saisie de codes peut être légèrement modifiée en changeant la valeur des dimensions `\AMCcodeHspace`, `\AMCcodeVspace` qui représentent les espaces horizontaux et verticaux entre les cases. Les valeurs par défaut sont définies de la manière suivante :

    \AMCcodeHspace=.5em
    \AMCcodeVspace=.5em

Pour la saisie de codes plus complexes, par exemple comportant des lettres, on pourra utiliser la commande `\AMCcodeGrid[options]{identifiant}{description}`. L'argument description contient une liste d'ensembles de caractères acceptés, séparés par des virgules. Par exemple, pour saisir un code client dont le premier caractère est une lettre entre A et E, suivi de trois chiffres, on utilisera

    \AMCcodeGrid{client}{ABCDE,0123456789,0123456789,0123456789}

Les deux commandes `\AMCcodeGrid` et `\AMCcodeGridInt` acceptent des options, séparées par des virgules, dans l'argument optionnel options :

vertical=bool

  Indique la direction utilisée : donner à bool la valeur `true` (valeur par défaut) pour construire chaque chiffre en vertical, et `false` en horizontal.

v

  alias pour `vertical=true`.

h

  alias pour `vertical=false`.

top

  permet d'aligner les colonnes en haut en direction verticale.

multi déconseillé

  permet de copier sur chaque page la grille du code élève.

  Ne fonctionne qu'avec le mode photocopie (voir ) et avec l'option `ensemble` (voir )

  L'utilisation de cette option nécessite une modification du code pour la position des marques de calage.

  Le code ci-dessous permet cela et doit être placé avant ou après `\begin{document}`.

    \makeatletter

    \def\IDbox{%
    	\begin{minipage}{10cm}
    		\noindent\AMCzone[id]{identification\thepage}{)
    			\fbox{%
    				\begin{minipage}{\linewidth}
    					\noindent Darken the boxes corresponding to your student ID:\\[1.2ex]
    					\AMCcodeGrid[h,multi]{id}{ABCDEFGHJKLM,0123456789}
    				\end{minipage}%
    			}%
    		}%
    	\end{minipage}
    }
    \fancypagestyle{AMCpageFull}{%
    	\fancyhf{}%
    	\fancyhead[L]{\AMC@LR{\he@dbas{\leavevmode\m@rque{positionHG}}}}%
    	\fancyhead[R]{\AMC@LR{\he@dbas{\leavevmode\m@rque{positionHD}}}}%
    	\fancyfoot[L]{\AMC@LR{\leavevmode\m@rque{positionBG}}}%
    	\fancyfoot[R]{\AMC@LR{\leavevmode\m@rque{positionBD}}}%
    	\fancyhead[C]{
    		\AMCIDBoxesABC\vspace{4mm}
    		\ifAMC@zoneformulaire\IDbox\fi
    	}%
    	\fancyhfoffset[EOLR]{5mm}%
    	\fancyfoot[C]{\AMC@note}%
    	\renewcommand{\headrulewidth}{0pt}%
    	\renewcommand{\footrulewidth}{0pt}%
    }
    \makeatother

Création d'une commande LaTeX qui entoure les cases à cocher pour l'étudiant.

Cette zone sera anonymée (voir ) mais ce n'est pas obligatoire.

Code qui modifie le comportement habituel d'AMC. Les longueurs seront peut-être à adapter avec vos marges.

#### Choix du mélange

Si le mélange des question et des réponses ne nous convient pas, on peut toujours en changer en modifiant la graine du générateur aléatoire utilisé pour le mélange, grâce à la commande suivante (à utiliser juste au début du document, et en tous cas en-dehors de la commande `exemplaire`) :

    \AMCrandomseed{1527384}

Si la valeur fournie (à choisir entre 1 et 4194303) est modifiée, alors le mélange sera différent. Bien entendu, une fois les copies d'examen imprimées, il ne faut surtout pas modifier cette valeur !

La valeur est enregistrée dans le fichier xy (sous la forme `\rngstate{1}{1515}`). La valeur par défaut est 1515.

#### Sections et feuille de réponses séparée

Pour que les sections définies dans votre sujet soient reprises dans la feuille de réponses séparées, utiliser `\AMCsection` et `\AMCsubsection` à la place de `\section` et `\subsection` (les commandes `\AMCsection*` et `\AMCsubsection*` sont également définies, pour des titres de section sans numérotation).

#### Références à l'intérieur des copies

Dans la description du sujet, les commandes LaTeX `\label`, `\ref` et `\pageref` posent problème car elles seront appelées avec les mêmes arguments pour chaque copie produite, ce qui perturbera la numérotation des références. Pour résoudre ce problème, les commandes `\AMClabel`, `\AMCref` et `\AMCpageref` peuvent leur être substituées : elles ajoutent le numéro de la copie avant leur argument avant de le transmettre à `\label`, `\ref` et `\pageref`.

Il faudra en outre penser à remettre les compteurs utilisés à zéro au début de chaque copie. Par exemple, si on veut inclure des références à des images regroupées dans une page à part dans certaines questions, on pourra écrire quelque chose comme

    \element{animaux}{
      \begin{figure}[p]
        \centering
        \includegraphics[width=.6\linewidth]{tigre}
        \caption{Un animal}
        \AMClabel{tigre}
      \end{figure}

      \begin{question}{tigre}
        Quel est l'animal sur la photographie de la figure~\AMCref{tigre}
        en page \AMCpageref{tigre}~?
        \begin{reponses}
          \bonne{Un tigre}
          \mauvaise{Une girafe}
          \mauvaise{Un éléphant}
          \mauvaise{Un chat}
        \end{reponses}
      \end{question}
    }

en prenant soin d'ajouter au début de l'appel à `\exemplaire` (lors de la description de l'en-tête des copies) la ligne

    \setcounter{figure}{0}

afin que les figures soient numérotées à partir de 1 pour chaque copie. Sans cette dernière commande, la numérotation des figures continuerait d'une copie à l'autre, ce qui n'est pas souhaitable.

##### Utilisation du paquet `Cleveref`.

Ce paquet permet d'ordonner les numéros des questions, les pages des questions ou les pages des références par ordre croissant (la documentation http://mirrors.ctan.org/macros/latex/contrib/cleveref/cleveref.pdf)

Le paquet doit être déclaré après le paquet `automuliplechoice`.

    \usepackage[french]{cleveref}

Lors de l'utilisation de `\cref`, les références des questions devront être transformées par la commande `\AMCstudentlabel`, comme dans l'exemple suivant :

    \cref{\AMCstudentlabel{dipole},\AMCstudentlabel{cours},\AMCstudentlabel{raisonnement}}

Avec dipole, cours et raisonnement les références des questions sont indexées, respectivement, avec \AMClabel{dipole}, \AMClabel{cours}, \AMClabel{raisonnement}. Les numéros de ces trois questions seront automatiquement classés lors de la compilation.

#### Personnalisation des textes insérés par AMC

L'utilisation de la commande `\exemplaire{}` remplace automatiquement les textes suivants par leurs valeurs par défaut en français. Si vous voulez les modifier, préférez donc l'utilisation de `\onecopy{}` à celle de `\exemplaire{}`.

Il est possible de personnaliser certain textes insérés par le paquet automultiplechoice, grâce à la commande `\AMCtext` :

- `\AMCtext{none}{phrase}` remplace le texte par défaut « aucune de ces réponses n'est correcte » (en français) par la phrase fournie lors de l'utilisation de l'option `completemulti`.

- `\AMCtext{corrected}{titre}` remplace « Correction » (en français) par le titre fourni sur la correction de l'examen.

- `\AMCtext{catalog}{titre}` remplace « Catalogue » (en français) par le titre fourni sur le catalogue de questions fourni avec l'option `catalog`.

- `\AMCtext{explain}{titre}` remplace « Explication » (en français) par le titre avant le texte explicatif fourni avec la commande `\explain`.

  La valeur par défaut de cette commande est :

      \AMCtext{explain}{\textit{\textbf{Explanation: }}}

- Vous pouvez aussi considérer l'utilisation de commandes comme celles-ci (données ici avec comme deuxième argument la valeur par défaut en français) :

      \AMCtext{draft}{PROJET}
      \AMCtext{message}{Pour votre examen, imprimez de pr\'ef\'erence
                        les documents compil\'es \`a l'aide de auto-multiple-choice.}

- `\AMCsetFoot{texte}` change le texte à afficher en pied de page (on pourra par exemple utiliser `\AMCsetFoot{\thepage}` pour indiquer le numéro de page).

#### Le code binaire

Le code binaire permet à AMC de reconnaître le numéro du sujet et le numéro de la page du sujet.

- Première ligne : 12 cases (valeur par défaut) : nombre maximal de sujets = 2^12-1 = 4 095.

- Seconde ligne : 6 premières cases (valeur par défaut) : nombre maximal de pages par sujet = 2^6-1 = 63.

- Seconde ligne : 6 dernières cases (valeur par défaut) : code de contrôle.

Pour augmenter le nombre de sujets ou/et de pages par sujet, modifiez les valeurs par défaut des commandes `\AMC@NCBetud`, `\AMC@NCBpage` et `\AMC@NCBcheck`.

Dans le préambule, déclarez les commandes ci-dessous (ici avec les valeurs par défaut).

    \makeatletter
    \def\AMC@NCBetud{12}
    \def\AMC@NCBpage{6}
    \def\AMC@NCBcheck{6}
    \makeatother

### Options pour AMC

Certaines options indiquées dans l'en-tête du fichier source au format LaTeX (c'est-à-dire les premières lignes qui commenecnt par un '%') peuvent être transmises à AMC :

`%%AMC:preprocess_command=commandname`

  demande à AMC d'exécuter la commande commandname avant de compiler le fichier LaTeX. Cette commande sera appelée à l'intérieur du répertoire projet, avec comme argument le nom de la copie du fichier source à traiter. Comme il s'agit d'une copie du fichier source, la commande commandname peut en modifier le contenu.

`%%AMC:latex_engine=engine`

  demande à AMC d'utiliser le moteur LaTeX engine, sans tenir compte de la valeur fournie par l'utilisateur dans les préférences du projet.

### Des questions mathématiques à énoncés aléatoires

#### Utilisation du package fp

Un mode d'emploi succint se trouve à la fin de la documentation voir ).

Grâce au paquet LaTeX `fp`, dont la documentation se trouve sur http://mirrors.ctan.org/macros/latex/contrib/fp/README et que l'on peut charger grâce à la commande

    \usepackage{fp}

ajoutée avant celle correspondant à `automultiplechoice`, on peut créer des exercices dont les données sont aléatoires. Commençons par un petit exemple :

    \begin{question}{addition}
      \FPeval\VQa{trunc(1+random*8,0)}
      \FPeval\VQb{trunc(4+random*5,0)}
      \FPeval\VQsomme{clip(VQa+VQb)}
      \FPeval\VQnonA{clip(VQa+VQb-1)}
      \FPeval\VQnonB{clip(VQa*VQb)}
      \FPeval\VQnonC{clip(VQa-VQb)}

      Quelle est la somme de \VQa{} et \VQb{} ?
      \begin{reponseshoriz}
        \bonne{\VQsomme}
        \mauvaise{\VQnonA}
        \mauvaise{\VQnonB}
        \mauvaise{\VQnonC}
      \end{reponseshoriz}
    \end{question}

La commande `\FPeval` sert à faire des calculs :

Comme `random` renvoie un nombre réel de l'intervalle [0,1], cette commande met dans la variable VQa un entier aléatoire entre 1 et 8. La ligne suivante place dans VQb un entier aléatoire entre 4 et 8.

On place la bonne réponse dans la variable VQsomme.

On place dans les variables VQnonA, VQnonB et VQnonC des mauvaises réponses...

Les noms de variables commençant par VQ ont été choisis afin de ne pas interférer avec d'autres commandes LaTeX.

Vous pouvez choisir la base de génération des nombres pseudo-aléatoires (obtenus avec `random`) grâce à la commande

    \FPseed=entier

entier doit être un entier immuable, qui ne changera jamais : ne pas utiliser de valeur liée à la date !

##### Choix parmi une suite d'intervalles

Le paquet automultiplechoice définit en outre une commande `\choixIntervalles` qui simplifie ce genre de constructions, comme illustré dans l'exemple suivant :

    \begin{question}{inf-expo-indep}
      \FPeval\VQa{trunc(2 + random * 4,0)}
      \FPeval\VQb{trunc(6 + random * 5,0)}
      \FPeval\VQr{VQa/(VQa+VQb)}

      Soient $X$ et $Y$ deux variables aléatoires indépendantes, de lois exponentielles
      de paramètres respectifs \VQa{} et \VQb{}.
      À quel intervalle appartient la probabilité $\mathbb{P}[X<Y]$ ?

      \begin{multicols}{5}
        \begin{reponses}[o]
          \choixIntervalles{\VQr}{0}{1}{0.1}
        \end{reponses}
      \end{multicols}
    \end{question}

Cette ligne insère dix réponses correspondant aux intervalles [0,0.1[ [0.1,0.2[ ... [0.9,1[, tout en indiquant que le bon intervalle est celui qui contient VQr. Les arguments de la commande `\choixIntervalle` sont les suivants :

1. La bonne réponse,

2. La borne gauche du premier intervalle,

3. La borne droite du dernier intervalle,

4. La longueur de chaque intervalle.

La mise en forme des intervalles peut être modifiée en redéfinissant la commande `\AMCintervalFormat`, définie originellement par

    \def\AMCIntervalFormat#1#2{[#1,\,#2[}

pour suivre une convention différente (on rencontra par exemple souvent l'utilisation de [a,b) à la place de [a,b[).

Si vous préférez la virgule comme séparateur décimal, il faut utiliser la commande `\num` du paquet `siunitx` ( voir ).

    \def\AMCIntervalFormat#1#2{[\num{#1}-\,\num{#2}[}

##### Codage du résultat

Vous pouvez également demander aux étudiants de coder leur réponse numérique, grâce à la commande `\AMCnumericChoices`, comme dans l'exemple suivant :

    \begin{questionmultx}{sqrt}
      \FPeval\VQa{trunc(5+random*15,0)}
      Calculez $\sqrt{\VQa}$ et arrondissez le résultat avec deux chiffres
      après la virgule.

      \AMCnumericChoices{sqrt(\VQa)}{digits=3,decimals=2,sign=true,
                     borderwidth=0pt,backgroundcol=lightgray,approx=5}
    \end{questionmultx}

Notez l'utilisation de l'environnement `questionmultx` : nous avons besoin ici d'une question multiple car plusieurs cases doivent être cochées, mais pourtant une seule réponse est correcte, et nous ne souhaitons donc pas afficher le symbole des questions multiples normales.

###### Options

Les options disponibles dans le deuxième argument de cette commande sont les suivantes :

digits=num

  donne le nombre de chiffres à coder (la valeur par défaut est 3).

decimals=num

  donne le nombre de chiffres après la virgule (la valeur par défaut est 0). Quand num n'est pas nul, le paquet LaTeX `fp` doit être chargé.

base=num

  donne la base dans laquelle sera écrit le nombre à coder (la valeur par défaut est 10).

significant=bool

  avec la valeur `true`, les chiffres à renseigner sont les premiers chiffres significatifs du premier argument de `\AMCnumericChoices`.

  Par exemple, la bonne réponse à `\AMCnumericChoices{56945.23}{digits=2,significant=true}` est 57.

exponent=num

  demande une saisie en notation scientifique, avec num chiffres pour la puissance de 10.

nozero=bool

  avec la valeur true, enlève le choix 0 pour tous les chiffres du nombre à saisir. Cette option peut être utile lors de la saisie de petits (<10) nombres non nuls.

sign=bool

  demande (ou non) la saisie d'un signe (la valeur par défaut est `true`).

exposign=bool

  même chose pour l'exposant.

strict=bool

  avec la valeur `true`, une case doit être obligatoirement cochée pour le signe et pour chaque chiffre (même pour le chiffre 0). Avec la valeur `false` (valeur par défaut), si pour certains chiffres aucune case n'est cochée, ces chiffres seront fixés à la valeur 0.

ignoreblank=bool

  avec la valeur `true`, ignore les cases non cochées. Valable uniquement en base 10.

vertical=bool

  avec la valeur `true`, chaque chiffre sera représenté par une colonne. Avec la valeur `false` (valeur par défaut), chaque chiffre sera représenté par une ligne.

expovertical=bool

  avec la valeur `true`, la mantisse et l'exposant seront présentés l'un en-dessous de l'autre. Avec la valeur `false` (valeur par défaut), ils seront présentés l'un à côté de l'autre.

reverse=bool

  avec la valeur `true` (valeur par défaut), en mode `vertical`, les grandes valeurs des chiffres seront placées en haut plutôt qu'en bas.

vhead=bool

  avec la valeur `true`, en mode `vertical`, un en-tête sera placé au-dessus de chaque colonne correspondant à un chiffre.

  Le texte de cet en-tête est donné par la commande `\AMCntextVHead`, qui est originellement définie par

      \def\AMCntextVHead#1{\emph{b#1}}

  Cette définition permet de numéroter les chiffres binaires.

  La valeur par défaut est `false`.

Tvhead={text}

  Une liste séparée par des virgules comme {km,hm,dam, m,dm,cm,mm} pour l'en-tête en mode `vhead` vertical.

  A besoin de `vhead=true` (par défaut la liste est vide `{}`).

vheadunitindex=num

  L'indice de l'unité dans la liste de `Tvhead` en partant de la droite (zéro est la valeur par défaut).

  L'élément à droite a pour valeur d’indice 0.

      %%Correct%%
      \begin{questionmultx}{div}
      \AMCnumericChoices{12059/7}{%
      digits=7,%
      decimals=3,%
      sign=false,%
      hspace=0.75em,%%
      vertical=true,%
      vhead=true,%
      vheadunitindex=0,%
      Tvhead={km,hm,dam,m,dm,cm,mm}%
      }
      \end{questionmultx}

      %%Correct%%
      \begin{questionmultx}{div}
      \AMCnumericChoices{12059/7}{%
      digits=7,%
      decimals=3,%
      sign=false,%
      hspace=0.75em,%%
      vertical=true,%
      Tvhead={km,hm,dam,m,dm,cm,mm}%
      }
      \end{questionmultx}

      %%Correct%%
      \begin{questionmultx}{div}
      \AMCnumericChoices{12059/7}{%
      digits=7,%
      decimals=3,%
      sign=false,%
      hspace=0.75em,%%
      vertical=true,%
      vheadunitindex=0,%
      Tvhead={km,{},{},m,{},{},mm}%
      }
      \end{questionmultx}

      %%Correct%%
      \begin{questionmultx}{div}
      \AMCnumericChoices{12059/7}{
      digits=10,%
      decimals=6,%
      sign=false,%
      vertical=true,%
      vhead=true,%
      vheadunitindex=0,%
      Tvhead={km,{},{},m,{},{},mm,{} ,{}, $\mu$m},
      }
      \end{questionmultx}

      %%Incorrect%%
      \begin{questionmultx}{div}
      \AMCnumericChoices{12059/7}{
      digits=10,%
      decimals=6,%
      sign=false,%
      vertical=true,%
      vhead=true,%
      vheadunitindex=0,%
      Tvhead={km,{},{},m,{},{},mm},
      }
      \end{questionmultx}

      %%Correct%%
      \begin{questionmultx}{div}
      \AMCnumericChoices{12059/7}{
      digits=10,%
      decimals=6,%
      sign=false,%
      vertical=true,%
      vhead=true,%
      vheadunitindex=7,%
      Tvhead={km,{},{},m,{},{},mm},
      }
      \end{questionmultx}

      %%Correct%%
      \begin{questionmultx}{div}
      \AMCnumericChoices{12059/7}{
      digits=10,%
      decimals=6,%
      sign=false,%
      vertical=true,%
      vhead=true,%
      vheadunitindex=4,%
      Tvhead={km,{},{},m,{},{},mm},
      }
      \end{questionmultx}

      %%Correct%%
      \begin{questionmultx}{div}
      \AMCnumericChoices{12059/7}{
      digits=10,%
      decimals=6,%
      sign=false,%
      vertical=true,%
      vhead=true,%
      vheadunitindex=7,%
      Tvhead={km,{},{},m,{},{},mm,{},{},$\mu$m},
      }
      \end{questionmultx}

hspace=space

  donne l'espace horizontal entre les cases (`.5em` par défaut).

vspace=space

  donne l'espace vertical entre les cases (`1ex` par défaut).

borderwidth=space

  donne l'épaisseur du cadre qui entoure toutes les cases (`1mm` par défaut).

bordercol=color

  donne la couleur du cadre (`lightgray` par défaut).

backgroundcol=color

  donne la couleur du fond (`white` par défaut).

Tsign=text

  donne le texte à inscrire au-dessus des deux cases correspondant au signe (vous pouvez obtenir le même résultat grâce à `\def\AMCntextSign{text}`, le texte par défaut étant vide).

Tpoint=text

  donne le texte correspondant à la virgule (décimale). Il peut également être modifié par `\def\AMCdecimalPoint{text}`, et la valeur par défaut est `\raisebox{1ex}{\bf .}`.

Texponent=text

  donne le texte affiché entre la partie mantisse et la partie exposant.

  Ce texte peut également être modifié par `\def\AMCexponent{text}`, et sa valeur par defaut est `$\times10$\textasciicircum`.

scoring=bool

  avec la valeur `true` (valeur par défaut), un barème sera transmis à AMC.

scoreexact=num

  donne le score à affecter à une réponse exacte (2 par défaut).

exact=num

  donne la distance maximale à la valeur correcte en-dessous de laquelle une réponse sera considérée comme exacte (et sera rétribuée de `scoreexact` points). La valeur par défaut est 0.

scoreapprox=num

  donne le score à affecter à une réponse approximative (1 par défaut).

approx=num

  donne la distance maximale à la valeur correcte en-dessous de laquelle une réponse sera considérée comme approximative (et sera rétribuée de `scoreapprox` points). La valeur par défaut est 0.

scorewrong=num

  donne le score à affecter à une réponse fausse (0 par défaut).

AMC transforme tous les nombres (décimaux inclus) comme des entiers `intV` (en enlevant la virgule) avant de faire la différence et de comparer avec `exact` ou `approx`.

1. Réponse = 3.1415 → `intV = 31415`, `exact = 20`, `approx = 150`

   - `3.1400` → | 31400 - 31415 | ≤ 20 → `scoreexact`

   - `3.1435` → | 31435 - 31415 | ≤ 20 → `scoreexact`

   - `3.1500` → | 31500 - 31415 | ≤ 150 → `scoreapprox`

   - `3.1300` → | 31300 - 31415 | ≤ 150 → `scoreapprox`

   - `3.1610` → | 31610 - 31415 | > 150 → `scorewrong`

2. Réponse = 2.00e30 → `intV=200`, `exact = 15`, `approx = 100`

   - `2.10e30` → | 210 - 200| ≤ 15 → `scoreexact`

   - `1.85e30` → | 185 - 200| ≤ 15 → `scoreexact`

   - `1.00e30` → | 100 - 200| ≤ 100 → `scoreapprox`

   - `2.81e30` → | 281 - 200 | ≤ 100 → `scoreapprox`

   - `2.81e29` → | 28.1 - 200 | > 100 → `scorewrong`

   - `2.00e31` → | 2000 - 200 | > 100 → `scorewrong`

keepas=text

  garde la valeur entrée par l'étudiant pour une future utilisation alsocorrect dans une autre question.

  Toutes les questions qui suivent celle-ci doivent respecter l'ordre lexicographique des identifiants.

alsocorrect=text

  donne une réponse valable basée sur la valeur entrée par l'étudiant dans la question précédente. La formule doit utiliser le code perl :

      +, -, *, /, ** (puissance)

     \begin{question}{carre-a}
        \QuestionIndicative
        Choisissez le nombre que vous voulez
        \begin{reponseshoriz}[o]
          \mauvaise{2}\bareme{2,setglobal.Nombre=2}
          \mauvaise{3}\bareme{3,setglobal.Nombre=3}
          \mauvaise{4}\bareme{4,setglobal.Nombre=4}
          \mauvaise{5}\bareme{5,setglobal.Nombre=5}
        \end{reponseshoriz}
      \end{question}

      \begin{questionmultx}{carre-b}
        \AMCdontAnnotate\bareme{MAX=2}
        Quel est son carré ?
        \AMCnumericChoices{}{digits=2,approx=1,alsocorrect=Nombre**2}
      \end{questionmultx}

      \begin{minipage}{.3\linewidth}
        \begin{tikzpicture}
          \draw[fill=blue!50] (0,0) ellipse (1.5 and 0.2);
          \draw (1.5,0) -- (0,5) -- (-1.5,0);
          \draw (1.6,0) -- (2,0);
          \draw (1.6,5) -- (2,5);
          \draw[<->] (1.8,0) -- (1.8,5);
          \node[right] at (1.8,2.5) {$h=5$};
          \draw (0,-0.4) -- (0,-0.8);
          \draw (1.5,-0.4) -- (1.5,-0.8);
          \draw[<->] (0,-0.6) -- (1.5,-0.6);
          \node[below] at (0.75,-0.6) {$r=1.5$};
          \draw[fill=black] (0,0) circle (0.02);
        \end{tikzpicture}
      \end{minipage}
      \begin{minipage}{.65\linewidth}
        \begin{questionmultx}{cone-a}
          Quelle est la surface du disque bleu ?
          \AMCnumericChoices{pi*1.5^2}{digits=3,decimals=2,exponent=2,approx=2,sign=false,
          exposign=true,expovertical=true,keepas=Surface}
        \end{questionmultx}

        \begin{questionmultx}{cone-b}
          Quel est le volume du cône ?
          \AMCnumericChoices{pi*1.5^2*5/3}{digits=3,decimals=2,exponent=2,approx=2,sign=false,
          exposign=true,expovertical=true,alsocorrect=Surface*5/3}
        \end{questionmultx}
      \end{minipage}

      \begin{questionmultx}{pipi2-a}
        Combien vaut $\pi$ ?
        \AMCnumericChoices{pi}{digits=3,decimals=2,sign=false,keepas=Pi}
      \end{questionmultx}

      \begin{questionmultx}{pipi2-b}
        Combien vaut $\pi^2$ ?
        \AMCnumericChoices{pi^2}{digits=3,decimals=2,sign=false,approx=1,alsocorrect=Pi**2}
      \end{questionmultx}

Vous pouvez modifier la valeur par défaut (pour tout votre questionnaire) de toutes ces options grâce à la commande `\AMCnumericOpts`, comme

    \AMCnumericOpts{scoreexact=3,borderwidth=2pt}

Vous pouvez de plus ajouter un texte à la suite des questions, quand la réponse à celle-ci est reléguée à une feuille séparée (par l'utilisation de l'option `ensemble`), en redéfinissant la commande `\AMCntextGoto`, comme ceci par exemple :

    \def\AMCntextGoto{\par{\bf\emph{Codez la réponse sur la feuille de réponses séparée.}}}

###### Accès aux valeurs

intX

  valeur brute entrée par l'étudiant.

intV

  bonne valeur brute.

#### Utilisation du package pgf/tikz

Vous devez déclarer ce paquet, ainsi que les bibliothèques, `\usetikzlibrary{arrows,patterns}`, après `automuliplechoice`.

Le paquet LaTeX `pgf/tikz`, dont la documentation se trouve sur http://www.ctan.org/tex-archive/graphics/pgf/base possède notamment une bibliothèque mathématique que l'on peut charger grâce à la commande :

    \usepackage{tikz}

La première précaution à prendre pour avoir des sujets identiques malgré les recompilations latex est de choisir la base de génération des nombres pseudo-aléatoires.

    \pgfmathsetseed{2056}

##### Réaliser un calcul simple

Voici un exemple d'utilisation avec un calcul simple :

    \begin{question}{inverse}
      \pgfmathrandominteger{\x}{1}{50}

      Quel est l'inverse de $x=\x$ ?

      \begin{reponses}
        \bonne{\pgfmathparse{1/\x}\pgfmathresult }
        \mauvaise{\pgfmathparse{1/(\x +1))}\pgfmathresult}
        \mauvaise{\pgfmathparse{cos(\x)} \pgfmathresult}
        \mauvaise{\pgfmathparse{\x^(-0.5)}\pgfmathresult}
      \end{reponses}
    \end{question}

Les commandes `\pgfmathparse` et `\pgfmathresult` permettent respectivement d'effectuer le calcul et d'afficher son résultat.

Il est possible de choisir la mise en forme des résultats en utilisant la commande `\pgfmathprintnumber`, par exemple, ici on choisit une notation avec trois décimales, en utilisant une virgule comme séparateur décimal.

    \begin{question}{inverse3}
      \pgfmathrandominteger{\x}{1}{50}
      \pgfkeys{/pgf/number format/.cd,fixed,fixed zerofill,precision=3,use comma}
      Quel est l'inverse de $x=\pgfmathprintnumber{\x}$ ?

      \begin{reponses}
        \bonne{\pgfmathparse{1/\x}\pgfmathprintnumber{\pgfmathresult}}
        \mauvaise{\pgfmathparse{1/(\x +1))} \pgfmathprintnumber{\pgfmathresult}}
        \mauvaise{\pgfmathparse{cos(\x)} \pgfmathprintnumber{\pgfmathresult}}
        \mauvaise{\pgfmathparse{\x^(-0.5)} \pgfmathprintnumber{\pgfmathresult}}
      \end{reponses}
    \end{question}

Les commandes `\AMCIntervals` et `\AMCnumericChoices` peuvent aussi être utilisées dans ce contexte (voir et )

##### Questions de lecture graphique

Il est aussi possible de générer des graphiques aléatoires (ou non) et de poser des questions de lecture graphique.

    \begin{questionmult}{graphique}
      On considère trois fonctions f(x) dont les tracés sont représentés ci-dessous
      dans un repère orthonormé~:
      \pgfmathrandominteger{\a}{2}{4}
      \begin{center}
        \begin{tikzpicture}[domain=0:4]
          \draw[very thin,color=gray] (-0.1,-4.1) grid (3.9,3.9);
          \draw[->] (-0.2,0) -- (4.2,0) node[right] {$x$};
          \draw[->] (0,-4.2) -- (0,4.2) node[above] {$f(x)$};
          \draw[color=red] plot (\x,{(1+\a/4)*\x-\a}) node[right] {$f_{1} (x)$};
          \draw[color=blue] plot (\x,{\a*sin(\x r)}) node[right] {$f_{2}(x)$};
          \draw[color=orange] plot (\x,{\a*cos(\x r)}) node[right] {$f_{3}(x)$};
        \end{tikzpicture}
      \end{center}
      Alors :
      \begin{reponses}
        \pgfmathrandominteger{\x0}{2}{4}
        \bonne{$f_{2}(\x0)$=\pgfmathparse{\a*sin(\x0 r)} \pgfmathprintnumber{\pgfmathresult}.}
        \bonne{$f_{3}(\x0)$=\pgfmathparse{\a*cos(\x0 r)} \pgfmathprintnumber{\pgfmathresult}.}
        \mauvaise{La fonction $f_{1}(x)$ est une fonction linéaire.}
      \end{reponses}
    \end{questionmult}

La mise en forme des graphiques peut être facilitée par l'utilisation du package `pgfplots`.

La précision des nombres sous pgfmath étant limitée, certains tracés de graphiques ne sont pas possibles avec cette méthode, la compilation LaTeX produisant alors une erreur du type "Arithmetic overflow". Les packages `tikz` et `pgfplots` permettent de pallier à ce manque de précison en faisant appel au programme `gnuplot` (voir documentation du package) pour obtenir les points de tracé. Dans ce cas, il faut installer au préalable `gnuplot` sur votre système, puis lancer la compilation LaTeX avec l'option `--shell-escape`. Pour cela, aller dans les préférences de AMC et choisir pour moteur LaTeX du projet en cours : "`pdflatex --shell-escape`" (sans les guillemets).

#### Utilisation de LuaLaTeX

Il est possible d'utiliser le langage de programmation LUA au sein de documents latex en compilant le sujet grâce à la commande `lualatex`. Si vous choisissez cette compilation, votre sujet doit être encodé en UTF-8, et il ne faut pas charger le package `inputenc`. Pour de plus amples informations, lire l'article de Manuel Pégourié-Gonnard présentant le projet à l'adresse suivante : http://dante.ctan.org/tex-archive/info/luatex/lualatex-doc/lualatex-doc.pdf

Pour faire appel au langage LUA, il faut utiliser la commande `\directlua`. La fonction LUA la plus utile est `tex.print` qui écrit un résultat calculé par LUA dans le document LaTeX

Encore une fois, si vous utilisez des nombres aléatoires, commencez par choisir la base de génération des nombres pseudo-aléatoires.

    \directlua{math.randomseed (2048)}

Voici un exemple très simple de fichier_:

    \documentclass[a4paper]{article}
    %\usepackage[utf8x]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage[francais,bloc,completemulti]{automultiplechoice}
    \begin{document}

    \exemplaire{10}{

    %%% debut de l'en-tête des copies :

    \noindent{\bf QCM  \hfill TEST}

    \vspace*{.5cm}
    \begin{minipage}{.4\linewidth}
      \centering\large\bf Sujet simpliste
    \end{minipage}
    \champnom{\fbox{\begin{minipage}{.5\linewidth}
    Nom et prénom :

    \vspace*{.5cm}\dotfill
    \vspace*{1mm}
    \end{minipage}}}

    %%% fin de l'en-tête

    \directlua{math.randomseed (2048)}
    \directlua{a=math.random()}

    \begin{question}{calcul}
      Quelle est la racine carrée de \directlua{tex.print(a)}?

      \begin{reponses}
        \bonne{\directlua{tex.print(math.sqrt(a))}}
        \mauvaise{\directlua{tex.print(math.sqrt(2*a))}}
        \mauvaise{\directlua{tex.print(math.sqrt(a*1.001))}}
      \end{reponses}
    \end{question}

    }

    \end{document}

Il est aussi possible de mettre en forme les résultats donnés par lua soit en écrivant des fonctions lua, soit en utilisant le package `siunitx`

Les commandes `\AMCIntervals` et `\AMCnumericChoices` peuvent aussi être utilisées dans ce contexte (voir et )

## Mise en œuvre - interface graphique

Nous décrivons ici un exemple de cheminement avec l'interface graphique depuis la conception du QCM jusqu'à l'édition des notes des élèves.

### Création du nouveau projet et du sujet

Commençons par ouvrir l'interface graphique. On peut normalement le faire en sélectionnant Applications Éducation Auto Multiple Choice du menu général de Gnome (ou son équivalent dans KDE ou autre), mais on peut aussi utiliser la commande `auto-multiple-choice`.

Créons maintenant un nouveau projet, grâce à Projet Nouveau . Une fenêtre s'ouvre qui permet de visualiser les noms des projets déjà existant (si il en existe), et de choisir un nom (composé de caractères simples ; « test » conviendra par exemple à notre petit essai), que nous inscrivons dans le champ Nouveau projet. Nous validons enfin en appuyant sur le bouton Créer un projet.

Nous devons maintenant désigner un fichier AMC-TXT ou LaTeX comme source du QCM. Plusieurs possibilités nous sont proposées :

- modèle : ce choix permet de chercher parmi les modèles fournis avec AMC un sujet que nous pourrons modifier ensuite à loisir.

- fichier : ce choix permet de choisir un fichier source déjà composé pour l'examen. Il est en effet possible de composer son sujet en dehors d'AMC grâce à un éditeur classique, puis d'utiliser AMC quand celui-ci est au point.

- vide : ce choix crée un fichier vide qu'il faudra éditer depuis zéro pour créer son sujet.

- archive : ce choix permet d'utiliser une archive tgz ou zip dans laquelle on a placé le sujet et d'éventuels autres fichiers (images, fichier décrivant les options pour AMC par exemple). Il sera utilisé quand le sujet est fabriqué par un programme extérieur (comme par exemple l'interfaçage avec la plateforme nationale C2i niveau 1 pour les universités françaises) ou pour reprendre un sujet AMC sauvegardé sous forme d'archive.

Pour notre exemple, nous choisissons modèle. Dans la fenêtre suivante, sélectionnons par exemple le modèle Exemple simple dans le groupe [FR] Documentation. Une fois le projet créé, nous pouvons modifier ce sujet à loisir grâce au bouton Éditer le fichier source qui lance l'éditeur par défaut.

### Préparation du sujet

La préparation du projet se fait en deux étapes. Il faut tout d'abord fabriquer les documents de référence à partir du fichier source. Ceci se fait en cliquant sur le bouton Mise à jour ou Alt+D de la section Documents de travail. Les documents produits sont les suivants :

- Le sujet. C'est le fichier qu'il faudra imprimer pour que ses pages soient distribuées aux étudiants (voir plus bas).

- Le corrigé. On peut y vérifier que les réponses cochées sont les bonnes. Il est aussi destiné à être distribué aux étudiants.

Une fois produits, ces documents pourront être visualisés (et éventuellement imprimés) grâce aux boutons correspondants.

Nous pouvons maintenant passer à cette dernière étape de préparation : l'analyse du document de calage. Elle se lance à partir du bouton Calculer les mises en page. Cette analyse détecte, dans chaque page du sujet, la position exacte des différents éléments qui devront être analysés sur les copies des étudiants.

Pour vérifier que les mises en page ont été correctement détectées, on peut utiliser le bouton Vérifier les mises en page. Un petit coup d'œil permettra de vérifier que les cases à cocher en rouge sont bien positionnées sur les cases du sujet.

### Envoi du sujet (avec ou sans mot de passe)

L'envoi du sujet par mail est possible.

- Vous devez créer un sujet avec le mode pré-rempli (voir (LaTeX) ou (AMC-TXT)).

- Sélectionnez l'impression en fichiers : Préférences Général Impression Méthode d'impression dans des fichiers .

- Sélectionnez la méthode d'impression : Préférences Général Impression Méthode d'extraction pdftk / gs (ghostscipt) / qpdf (défaut) / sejda-console (non installé) .

  Si l'option `pdfform` est active, sélectionnez sejda-console (à installer)

      cd
      wget https://github.com/torakiki/sejda/releases/download/v3.2.85/sejda-console-3.2.85-bin.zip
      unzip sejda-console-3.2.85-bin.zip
      sudo ln -s ~/sejda-console-3.2.85/bin/sejda-console /usr/local/bin

- Imprimez les fichiers.

AMC vous propose de protéger tous les fichiers par votre mot de passe propriétaire et chaque fichier par un mot de passe utilisateur.

Le fichier csv doit contenir une colonne avec les mots de passe.

    # liste des étudiants de première année
    nom,prenom,no,email,password
    Bienvenüe,Alexis,001,paamc@passoire.fr,123456
    Boulix,Jojo,002,jojo.boulix@rien.xx,789test01
    Noël,Père,003,pere.noel@pole-nord.xx,clavierbepo

- Cliquez sur Liste… puis sélectionnez le fichier csv (uniquement pour un fichier format LaTeX).

  Identifiant unique dans cette liste : il s’agit du nom de la colonne qui, dans le ﬁchier csv des étudiants, contient le numéro d’étudiants (voir ).

- Envoyez les sujets.

### Impression du sujet

Vous pouvez fonctionner de deux manières différentes :

- Pour la méthode la plus robuste, il est nécessaire de produire un nombre suffisant de copies ayant chacune un numéro de copie différent, et de les imprimer toutes. Chaque page de chaque copie est différenciée par les codes inscrits en haut de la page. Vous pouvez ainsi scanner plusieurs fois la même page sans risque.

- La deuxième méthode consiste à produire un petit nombre de copies (éventuellement une seule), à les imprimer, puis à les photocopier en grand nombre. Avec cette méthode, le mélange des questions et réponses perd de son efficacité, et si vous fournissez plusieurs fois la même page scannée à AMC, il ne pourra pas s'en rendre compte et la comptera deux fois.

Pour cette deuxième méthode utilisant des photocopies, il est nécessaire de faire attention lors du scan que les pages d'un même étudiant soient à la suite les unes des autres. Dans le cas contraire, vous ne pourriez pas traiter les scans par AMC ensuite !

Une fois la préparation effectuée, nous pouvons imprimer le sujet, et le distribuer aux étudiants... Nous avons pour cela plusieurs possibilités :

- Il est possible d'imprimer (ou de faire imprimer par un service reprographie) directement le fichier `DOC-sujet.pdf` du répertoire projet, auquel on peut accéder par le bouton sujet de la liste des documents de travail.

  Cette méthode peut avoir un léger inconvénient : si votre sujet comporte certaines copies ayant un nombre impair de pages, une impression recto-verso mettra plusieurs sujets sur une même feuille, ce qui les rendra inutilisables. Pour éviter ce problème, vous pouvez utiliser (si ce n'est pas déjà fait), dans le fichier LaTeX du sujet, la commande `\AMCcleardoublepage`, qui ajoutera les pages blanches nécessaires pour que tous les sujets aient un nombre pair de pages (voir ).

- Si l'imprimante à utiliser est configurée sur l'ordinateur utilisé par AMC, on utilisera de préférence le bouton Imprimer des copies (après avoir calculé les mises en page), qui permet de sélectionner les copies à imprimer (si on ne souhaite pas toutes les imprimer, ou pour une réimpression dans le cas où une copie aurait été mal imprimée), de choisir les options d'impression (recto-verso, agrafage), et de gérer correctement les copies avec un nombre impair de pages même dans le cas d'une impression recto-verso sans utilisation de `\AMCcleardoublepage` (en effet, AMC envoie une tâche d'impression par copie).

### Examen

Il ne reste plus qu'à faire passer l'examen aux étudiants...

Une fois que le sujet est imprimé et distribué, il ne faut plus modifier les documents de travail car il faut garder la certitude qu'ils sont conformes aux copies distribuées.

Il est préférable que les étudiants utilisent un stylo noir ou bleu ou un crayon à papier de type B.

Suivant les situations, on peut demander aux étudiants de cocher ou de noircir complètement les cases.

#### Cases cochées

Dans ce cas, les étudiants peuvent effacer la/les case(s) avec la gomme ou la recouvrir de ruban correcteur mais ne doivent pas essayer d'en redessiner les contours. En effet, si ils redessinent les contours de manière approximative, ces traits pourront par erreur se situer à l'intérieur de la case et pourrront ainsi être confondus avec une case cochée.

Vous pouvez également permettre aux étudiants de corriger une case cochée par erreur en la noircissant entièrement. Dans ce cas, donnez une valeur inférieure à 1 (qui restera tout de même proche de 1) à la variable Seuil de noirceur supérieur (menu Préférences, onglet Projet). Une case dont la proportion de noir est comprise entre le seuil de noirceur et le seuil de noirceur supérieur sera considérée comme cochée. Si cette proportion dépasse le Seuil de noirceur supérieur, la case sera considérée comme non-cochée.

#### Cases noircies

Dans le cas où les lettres (ou chiffres) référençant les réponses sont inscrites à l'intérieur des cases, vous devez donner la consigne aux étudiants de noircir complètement les cases, car AMC ne sait pas faire la différence entre une lettre écrite dans une case et une case cochée.

Les étudiants peuvent effacer la/les case(s) avec la gomme ou la recouvrir de ruban correcteur, mais n'ont pas d'autre possibilité de corriger une case cochée par erreur. Vous devrez bien entendu laisser la valeur du seuil de noirceur supérieur à 1.

### Lecture des copies

Nous allons maintenant passer à la saisie des copies des étudiants, qui peut se faire de manière automatique et/ou manuelle.

Pour cela, nous passons sur l'onglet Saisie de l'interface graphique.

#### Saisie automatique

Pour une reconnaissance automatisée des cases cochées dans les copies des étudiants, il faut tout d'abord les numériser. J'utilise pour ma part une photocopieuse/scanner qui le fait de manière automatique (toutes les pages à la suite sans intervention de ma part), avec les réglages suivants : 300dpi, mode OCR (prévu pour la reconnaissance de caractères, noir et blanc sans nuances de gris), scan délivré en un fichier TIFF par page.

Pour l'analyse des copies, nous devons disposer d'un ou plusieurs fichiers images (TIFF, JPG, PNG, etc.) des scans. Les formats vectoriels (PDF, PS ou EPS) sont également utilisables ; ils seront convertis au format PNG par AMC avant leur analyse.

Lors de la première saisie automatique, vous aurez à indiquer à AMC quelle méthode vous avez choisie : sujets différents pour tous les étudiants, ou photocopie de certains sujets (voir ).

On sélectionne alors l'ensemble des fichiers obtenus à partir du dialogue ouvert par le bouton Automatique de la section Saisie des copies après examen, puis on valide par le bouton Valider de ce même dialogue. AMC va procéder à une reconnaissance optique de marques (OMR) sur les scans afin de détecter les quatre marques circulaires des coins, en déduire la position des cases à cocher et mesurer la proportion de noir à l'intérieur de chacune d'entre elles.

##### Sujets photocopiés

Avec ce mode, il existe 4 options pour indiquer à AMC la manière dont vous avez numérisé les feuilles :

- `Strict` : le fichier ne contient que les pages du sujet AMC.

- `Ignore unrecognized` : pour ignorer les pages non reconnues.

- `Increasing` : si les pages sont numérisées dans l'ordre croissant.

- `One student per file` : si chaque fichier numérisé est associé à un étudiant.

Avec ce mode, il est impossible de remplacer une copie d'élève déjà analysée.

Le résultat de l'analyse de chaque page est indiqué dans les listes de la section Diagnostic :

- La valeur `mise à jour` affiche la date de la page traitée. Elle n'est pas affichée par défaut. Il faut l'activer avec le bouton colonnes.

- La valeur EQM (écart quadratique moyen) est un indicateur du bon calage sur les marques de calage (les quatre ronds noirs entourant chaque copie). Si il est trop important, il faudra vérifier le calage (un clic droit sur la ligne correspondant à la page puis le choix page permet de visualiser la page scannée et le cadre et les cases tels qu'ils sont détectés).

  #####

  - AMC dispose d'une option permettant de caler les feuilles avec seulement trois marques. Vous devez configurer AMC :

    Édition Préférences Scan Contrôle des scans avec 3 angles marqués

  - AMC ne dispose d'aucune fonction de traitement d'image. Pour corriger le calage, vous pouvez redessiner les marques à l'aide d'un éditeur d'image.

    - Notez les scans non reconnus, ne les effacez pas !

    - Ouvrez-les avec l'éditeur d'image (les fichiers se trouvent dans le dossier scan du projet).

    - Sauvegardez-les (Ctrl+S).

    - Reprenez la correction en ne choisissant que les derniers fichiers modifiés.

- La valeur sensibilité est un indicateur de la proximité du remplissage des cases avec la valeur seuil. Si elle est trop importante (à partir de 8 et jusqu'à sa valeur maximale 10), il faudra vérifier que les cases reconnues comme étant cochées sont bien les bonnes (un clic droit sur la ligne correspondant à la page puis le choix zoom permet de visualiser l'ensemble des cases de la copie, de voir si la détection s'est bien déroulée, et éventuellement de la corriger par glisser-déposer (drag and drop) ou par un clic (click)).

- La valeur scan files affiche le nom de la page traitée. Elle n'est pas affichée par défaut. Il faut l'activer avec le bouton colonnes.

#### Saisie manuelle

Si nous ne pouvons pas utiliser facilement de scanner, ou si, pour quelques copies, la saisie automatique n'a pas bien fonctionné, nous pouvons effectuer la saisie de manière manuelle. Pour cela, ouvrons la fenêtre adéquate grâce au bouton Manuelle de la section Saisie des copies après examen. Dans cette fenêtre, nous pourrons entrer nous-même les cases qui ont été cochées (en cliquant dessus) sur les pages désirées.

Toute saisie manuelle effectuée sur une page prendra la place des résultats éventuels d'une saisie automatique pour cette même page.

##### Visualisation des questions vides ou invalides

En cliquant sur les numéros de pages, AMC entoure les cases réponses :

- en cyan pour les réponses vides ;

- en jaune pour les réponses invalides ;

Ces couleurs peuvent être changées dans les préférences d'AMC : Préférences Affichage Scan

Il est possible de cibler une question précise (voir )

##### Sélection d'une question

Cette option permet de corriger manuellement à l'écran une question ciblée. Cela évite de chercher la question sur chaque page si les questions sont mélangées.

###### Corriger une question ouverte à l'écran

- Ouvrez la fenêtre de saisie manuelle et sélectionnez le scan comme fond ;

- sélectionnez la question que vous voulez corriger (menu déroulant au-dessus de la liste des pages).

Les cases à cocher de la question ouverte se situent en haut de la fenêtre, et quand vous cliquez sur suivant vous passez à l'étudiant suivant, toujours pour cette question.

Les questions simples et multiples peuvent aussi être corrigées ainsi.

###### Vérifier à l'écran les pages avec des questions invalides ou vides

- Vous devez d'abord corriger les copies (voir de la section ) ;

- ouvrez la fenêtre de saisie manuelle et sélectionnez le scan comme fond ;

- choisissez si vous voulez étudier toutes les pages (toutes), les pages avec réponses incohérentes seulement (inv), ou les pages avec réponses incohérentes ou vides seulement (i & v).

### Correction

Dans l'onglet Notation de l'interface graphique, la partie Correction nous permet de déduire les notes des étudiants à partir des saisies effectuées, mais aussi de lire les codes renseignés par les étudiants (voir ).

#### Processus

Le calcul des notes se lance à l'aide du bouton Corriger, mais nous avons auparavant le choix suivant à effectuer :

- Si nous cochons la case Mettre à jour le barème, le barème sera tout d'abord extrait du fichier source LaTeX. Ceci permet de tester plusieurs barèmes à la fin du processus de correction. La mise à jour concerne également la liste des bonnes et mauvaises réponses, ce qui permet de corriger facilement après l'examen une erreur d'étourderie effectuée lors de la conception du sujet. La façon de spécifier le barème dans le fichier LaTeX sera expliquée à la section (un barème par défaut est utilisé quand aucune indication n'est donnée).

En cliquant sur le bouton Corriger, la correction est alors effectuée (cela peut prendre un peu de temps si on a aussi demandé la lecture du barème).

#### Barème

Un outil permet de vérifier votre barème et les résultats attendus.

Menu Aide Test du barème...

Le barème utilisé pour la notation des copies est indiqué dans le fichier source LaTeX du questionnaire, à l'aide de la commande `bareme`. Elle peut être utilisée dans un environnement `question` ou `questionmult`, pour fixer des paramètres de barème concernant toutes les réponses, mais aussi dans l'environnement `reponses`, pour donner des indications de barème ne concernant qu'une réponse. L'argument de la commande LaTeX `bareme` est constitué d'indications du type `parametre=valeur`, séparés par des virgules. Les paramètres utilisables sont les suivants (le tableau indique aussi dans quels cadres ces paramètres peuvent être utilisés) :

paramètre | simple | multiple | valeur
Q | R | Q | R
e | ● |  | ● |  | La note affectée en cas d'incohérence des réponses : plusieurs cases cochées pour une question simple, ou, pour une question multiple, case « aucune de ces réponses n'est correcte » cochée en même temps qu'une autre case.
v | ● |  | ● |  | La note affectée en cas de non-réponse (aucune case n'est cochée).
d |  |  | ● |  | Un décalage, c'est-à-dire une valeur ajoutée à toutes les notes qui ne relèvent pas des cas correspondant aux paramètres e et v.
p |  |  | ● |  | La note plancher. Si le calcul de la note obtenue à la question donne une valeur inférieure à la valeur plancher, cette note est ramenée à la valeur plancher.
P |  |  | ● |  | La note plafond. Si le calcul de la note obtenue à la question donne une valeur supérieure à la valeur plafond, cette note est ramenée à la valeur plafond.
b | ● |  | ● | ● | Points à donner pour une bonne réponse à une question. Une bonne réponse cochée apporte b points et une mauvaise réponse non-cochée apporte b points.
m | ● |  | ● | ● | Points à donner pour une mauvaise réponse à une question. Une mauvaise réponse cochée apporte m points et une bonne réponse non cochée apporte m points.
|  | ● |  |  | Sans nom de paramètre (syntaxe `\bareme{2}`), on indique le nombre de points à donner si l'étudiant a coché cette réponse.
auto | ● |  |  |  | Avec ce paramètre, la valeur de la réponse numéro i sera auto+i-1. Cette option est principalement utilisée avec `\QuestionIndicative` (voir section ).
mz | ● |  | ● |  | Ce paramètre impose un barème du type "maximum ou zéro" : l'élève doit cocher toutes les bonnes réponses pour avoir la note mz sinon, elle sera nulle.
haut |  |  | ● |  | En donnant à ce paramètre une valeur n, la note attribuée à une réponse parfaite sera n, et un point sera enlevé par erreur. `haut=n est réécrit en d=n-N, p=0`

MAX

●

●

Donne la valeur maximale attribuée à la question (pour une « question notée sur 5 », on peut mettre MAX=5). À renseigner uniquement si elle ne correspond pas à la note obtenue en mettant toutes les bonnes réponses. Si vous indiquez `MAX=3` pour une question pouvant rapporter 4 points, un étudiant pourra avoir un score de 4/3 à cette question (et, si il donne des réponses parfaites aux autres questions, il pourra éventuellement obtenir une note globale supérieure à 20/20).

formula | ● |  | ● |  | Donne directement le score de la question, souvent par le biais d'une formule faisant intervenir des variables (voir ), sans tenir compte des valeurs de `b` et `m`.

set.XXX

●

●

●

●

Donne une valeur particulière à la variable nommée XXX, qui pourra être utilisée par la suite par `formula`. Dans le contexte d'une réponse, la valeur est attribuée uniquement dans le cas où la case est cochée. Cas particulier : si on donne une valeur non-nulle à la variable `INVALID` par ce biais, les réponses seront déclarées incohérentes et le score sera celui donné par le paramètre `e`.

setglobal.XXX | ● | ● | ● | ● | Donne une valeur à la variable XXX pour toutes les questions qui suivent celle-ci pour l'ordre lexicographique des identifiants.

default.XXX

●

●

Donne une valeur à la variable XXX si aucune case cochée n'en a déjà donnée une par le biais de `set.XXX`. Il faut déclarer la valeur de la variable XXX dans le barème de la question. Vous pouvez affecter à b et m les valeurs de la variable déclarée avec `default.XXX`.

    \begin{questionmult}{Q1}
    \bareme{default.CONF=1,m=-CONF,b=CONF}

requires.XXX | ● |  | ● |  | Signale une saisie incohérente (donc l'application du score donné par la valeur de `e`) dans la cas où aucune valeur n'a été donnée à la variable XXX.

Le barème par défaut pour une question simple est `e=0,v=0,b=1,m=0`, ce qui donne un point pour une bonne réponse et aucun point dans tous les autres cas. Le barème par défaut pour une question multiple est `e=0,v=0,b=1,m=0,p=-100,d=0`, ce qui donne un point pour chaque case qui est cochée ou non à bon escient (case d'une bonne réponse cochée, ou case d'une mauvaise réponse non cochée).

La commande LaTeX `\bareme` peut aussi être utilisée hors des définitions des questions, avec les paramètres suivants :

- `SUF=`x permet de donner un total de points suffisant pour obtenir la note maximale : si on fixe la note maximale à 20 par exemple, une copie ayant un total de points de 12 avec l'utilisation de SUF=15 se verra attribuer la note de 12/15*20=16, quel que soit le total d'une copie ayant toutes les bonnes réponses.

- `allowempty=x` permet à l'étudiant de laisser x questions sans réponse. Parmi les questions laissées sans réponse par l'étudiant, x (ou moins si il n'y en a pas autant) seront annulées (c'est-à-dire qu'elles ne seront pas prises en compte pour le calcul du score total).

L'utilisation combinée de tous ces paramètres permet de définir toutes sortes de barèmes, comme dans l'exemple suivant :

    \documentclass{article}

    \usepackage[utf8x]{inputenc}
    \usepackage[T1]{fontenc}

    \usepackage[francais,bloc,completemulti]{automultiplechoice}

    \begin{document}

    % preparation du groupe de questions appelé qqs :

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

    \element{qqs}{
    \begin{questionmult}{engrange}
      Engrangez des points gratuitement en cochant les cases ci-dessous~:
      \begin{reponses}
        \bonne{2 points}\bareme{b=2}
        \mauvaise{Un point négatif}\bareme{b=0,m=-1}
        \bonne{3 points}\bareme{b=3}
        \bonne{1 point}
        \bonne{Un demi point}\bareme{b=0.5}
      \end{reponses}
    \end{questionmult}
    }

    \element{qqs}{
    \begin{questionmult}{tout ou rien}\bareme{mz=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}
    }

    \element{qqs}{
    \begin{questionmult}{2 au plus}\bareme{haut=2}
      Deux points pour tout juste, et un point pour chaque erreur...
      \begin{reponses}
        \bonne{Bonne réponse}
        \bonne{Ceci est juste}
        \bonne{Exact}
        \mauvaise{Faux~!}
        \mauvaise{Ne pas cocher~!}
      \end{reponses}
    \end{questionmult}
    }

    \element{qqs}{
    \begin{question}{attention}\bareme{b=2}
      Alors là, la réponse très fausse mérite sanction (-2 points), mais
      viser juste rapporte 2 points.
      \begin{reponses}
        \bonne{C'est bon !}
        \mauvaise{Pas bon}
        \mauvaise{Pas bon}
        \mauvaise{Pas bon}
        \mauvaise{Très faux !}\bareme{-2}
      \end{reponses}
    \end{question}
    }

    \element{qqs}{
    \begin{questionmult}{au choix}
      Choisissez vos points :
      \begin{reponses}
        \bonne{J'en veux 2}\bareme{b=2}
        \mauvaise{J'en donne trois}\bareme{b=0,m=3}
        \bonne{J'en veux un (et sinon j'en perds un)}\bareme{m=-1}
      \end{reponses}
    \end{questionmult}
    }

    \element{qqs}{
    \begin{questionmult}{03}
      \bareme{default.COMP=10,default.PROP=11,formula=(COMP==PROP ? 1 : 0)}
      \AMCdontAnnotate
      Cite un gaz  important de l'air et son pourcentage.
        \begin{reponses}
          \mauvaise{vapeur d’eau}
          \mauvaise{gaz}
          \bonne{diazote}\bareme{set.COMP=1}
          \mauvaise{dioxygène}\bareme{set.COMP=2}
          \mauvaise{dioxyde de carbone}
          \mauvaise{20\%}\bareme{set.PROP=2}
          \mauvaise{40\%}
          \mauvaise{60\%}
          \bonne{80\%}\bareme{set.PROP=1}
        \end{reponses}
    \end{questionmult}
    }

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    \exemplaire{20}{

    \noindent{\bf QCM  \hfill TEST DE BARÈME}

    \vspace*{.5cm}
    \begin{minipage}{.4\linewidth}
    \centering\large\bf Test\\ Examen du 01/01/2008\end{minipage}
    \champnom{\fbox{\begin{minipage}{.5\linewidth}
    Nom et prénom :

    \vspace*{.5cm}\dotfill
    \vspace*{1mm}
    \end{minipage}}}

    \begin{center}\em
    Durée : 10 minutes.
    \end{center}
    \vspace{1ex}

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \setgroupmode{qqs}{withreplacement}

    \restituegroupe{qqs}

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    }

    \end{document}

#### Barèmes généraux

Pour utiliser un barème de manière générale pour tout un ensemble de questions, on pourra le définir dans une commande LaTeX, comme dans l'exemple suivant :

    \def\barQmult{haut=3,p=-1}

    \begin{questionmult}\bareme{\barQmult}
    [...]
    \end{questionmult}

Une autre possibilité est offerte par les commandes LaTeX `\baremeDefautS` et `\baremeDefautM`, à utiliser en début de document (en dehors de la commande `\exemplaire`), qui permettent de donner des valeurs par défaut pour les barèmes des questions simples et des questions multiples :

    \baremeDefautM{haut=3,p=-1}

Si vous utilisez `formula` avec `\baremeDefautM` ou `\baremeDefautS`, il faudra l'annuler si vous utilisez un barème particulier pour différentes questions.

    \begin{questionmult}\bareme{b=1,m=-0.5,formula=}
    [...]
    \end{questionmult}

Dans certains cas de figure, il peut être intéressant de définir un barème de manière générale en fonction du nombre de réponses proposées. Il suffit pour cela de mettre les valeurs intervenant dans le barème sous la forme de formules utilisant la variable `N`. Par exemple, pour obtenir un barème qui fixe à 4 la note maximale et tel que l'espérance de la note d'un étudiant cochant au hasard chaque case soit de 1, on peut utiliser le barème `d=4,b=0,m=-(4-1)*2/N` (qui donne une note de -2 si toutes les réponses sont fausses, c'est-à-dire si on a coché les cases qu'il ne fallait pas cocher et si on n'a pas coché les cases qu'il fallait cocher). Les opérations acceptées dans ces formules sont les quatre opérations simples (+ - * /), l'opérateur de test `( ? : )`, les parenthèses et plus généralement toutes celles reconnues par perl.

L'opérateur test s'utilise de la manière suivante :

    ( test ? instruction si vrai : instruction si faux)

Le test peut utiliser les opérateurs `>` (supérieur à), `>=` (supérieur ou égal à), `<` (inférieur à), `<=` (inférieur ou égal à), `==` (égalité), `!=` (différence), `||` (ou), `&&` (et).

D'autres variables sont aussi utilisables :

- `N` est le nombre de réponses proposées, sans compter la réponse automatiquement ajoutée par l'option `completemulti`.

- `NB` est le nombre de bonnes réponses à la question (sans tenir compte des cases cochées ou non).

- `NBC` est le nombre de bonnes réponses qui ont été cochées.

- `NM` est le nombre de mauvaises réponses à la question (sans tenir compte des cases cochées ou non).

- `NMC` est le nombre de mauvaises réponses qui ont été cochées.

- `IS` vaut 1 si la question est simple et 0 sinon.

- `IMULT` vaut 1 si la question est multiple et 0 sinon.

##### Hacking : barème individuel

Après `\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}

    \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}
    }

#### Du barème aux notes des étudiants

Les notes des étudiants sont calculées de la manière suivante : pour chaque étudiant,

1. Le barème de chaque question est appliqué pour obtenir les scores obtenus aux questions.

2. La somme des scores de toutes les questions (sauf les questions indicatives) est calculée : on obtient le score total de l'étudiant.

3. Si une note maximale non-nulle est donnée en paramètre (dans l'onglet Projet de la fenêtre Édition Préférences ), le score total est divisé par le score maximal (c'est-à-dire le score total calculé pour une copie parfaite), puis multiplié par la différence (note maximale - note minimale), auquel on ajoute enfin la note minimale pour obtenir la note de l'étudiant. De cette façon, un étudiant ayant répondu de manière parfaite se verra attribuer la note maximale et un étudiant ayant obtenu un score nul se verra attribuer la note minimale. Avec une note maximale fixée à 100 et une note minimale fixée à 0, la note de l'étudiant pourra être vue comme un pourcentage de bonnes réponses. En France, on utilise souvent une note maximale égale à 20 et une note minimale égale à 0.

4. La note ainsi obtenue est arrondie en utilisant les options suivantes de Édition Préférences Projet :

   - Granularité : pour obtenir un arrondi à l'entier, choisir la valeur 1. Pour un arrondi au quart de point, choisir 0,25, etc. Une valeur nulle annulera l'arrondi final.

   - Type d'arrondi : inférieur, normal, supérieur

#### Corriger des erreurs de barème

Vous pouvez, même après le passage de l'examen, modifier votre barème. Cependant, vous ne devez jamais mettre à jour le document. Il est préférable d'ouvrir le fichier avec votre éditeur de texte, de faire les modifications et d'enregistrer.

Vous pouvez :

- Transformer des bonnes réponses en mauvaises réponses.

- Transformer des mauvaises réponses en bonnes réponses.

- Modifier le barème d'une ou plusieurs questions, le barème par défaut.

Vous ne pouvez pas :

- Transformer une question simple en question multiple.

- Transformer une question multiple en question simple.

- Ajouter des réponses, des questions.

- Enlever des réponses, des questions.

- Modifier l'ordre des questions et/ou des réponses.

Si vous estimez qu'une question doit être annulée, modifiez le barème comme ceci `\bareme{b=0,m=0,e=0,v=0}` ou notez la question comme indicative `\QuestionIndicative`.

### Identification des étudiants

Cette étape n'est pas obligatoire. Il s'agit d'associer chaque copie à un étudiant. La lecture du nom d'étudiant n'est pas faite de manière automatique, mais deux possibilités raisonnables sont prévues :

1. Il est possible de demander aux étudiants de s'identifier sur leur copie grâce à leur numéro d'étudiant, qui sera renseigné en cochant une case par chiffre. Une commande LaTeX est prévue pour mettre cette méthode en œuvre sur la copie (voir la partie ). Après l'examen, les copies seront identifiées automatiquement à partir d'une liste mettant en correspondance les numéros d'étudiants et les noms.

2. Sans saisie des numéros d'étudiants, ou dans le cas où l'identification automatique n'a pas parfaitement fonctionné (par exemple en cas d'erreur de saisie des étudiants), l'interface graphique permet une association manuelle assistée.

Sélectionnons tout d'abord l'onglet Notation de l'interface graphique.

#### Liste des étudiants

Il faut tout d'abord disposer d'une liste d'étudiants. Cette liste pourra bien sûr être utilisée pour plusieurs QCM. Elle devra être préparée au format CSV, avec éventuellement des lignes de commentaires au début préfixées par le caractère ``#`' :

    # liste des étudiants de première année
    nom:prenom:no:email
    Bienvenüe:Alexis:001:paamc@passoire.fr
    Boulix:Jojo:002:jojo.boulix@rien.xx
    Noël:Père:003:pere.noel@pole-nord.xx

Dans cet exemple, le numéro d'identification de l'étudiant est contenu dans la colonne d'en-tête no.

C'est ce nom de colonne qui devra être sélectionné dans le menu déroulant Identifiant unique dans cette liste de l'onglet Notation lors de l'association automatique des copies (voir ).

Les lignes du fichier qui commencent par le caractère ``#'` sont des commentaires. La première des autres lignes contient, séparés par le caractère ``:'`, les titres des colonnes. Ensuite, en une ligne par étudiant, on place les informations voulues. Il est préférable d'inclure au moins une colonne nommée `nom`.

On peut remplacer le séparateur ``:'` par une virgule, un point-virgule ou une tabulation. Il faut cependant utiliser le même séparateur partout dans le fichier contenant la liste des étudiants. Le séparateur utilisé sera détecté en prenant le caractère (parmi les quatre possibles) qui apparaît le plus de fois dans la première ligne qui n'est pas un commentaire.

Tout fichier au format CSV devrait convenir.

L'envoi d'une même copie à plusieurs adresses nécessite quelques précautions dans la création du fichier CSV.

- point-virgule ou deux-points ou tabulation pour séparer les champs et virgule pour séparer les emails.

- Avec cette option, il faut déclarer dans le préambule

      \usepackage[babel=true,kerning=true]{microtype}

- virgule pour séparer les champs et les emails entre guillemets et séparés par une virgule.

    nom,prenom,email
    Boulix,Jojo,"jojo@boulix.fr,parents@boulix.com"

La liste des étudiants préparée (que se soit une liste simple ou comprenant plus d'informations), nous la désignons maintenant en la sélectionnant à partir du bouton Choisir de la partie Identification des étudiants. Il faut également désigner l'identifiant unique qui permettra d'identifier les étudiants (en général, on choisit la colonne qui contient des numéros d'étudiants). Enfin, en vue d'une association automatique, il faut encore choisir le nom du code adopté dans la commande LaTeX `\AMCcodeGrid`.

#### Association

##### Association automatique

###### Sans code barre

Pour effectuer une association automatique, il est nécessaire d'avoir choisi un critère numérique (en général un numéro d'étudiant), d'avoir inclus au moins une commande `\AMCcodeGrid` (voir ) dans le fichier source LaTeX pour que les étudiants puissent coder ce critère numérique et d'avoir une colonne dans le fichier des étudiants qui contient le critère numérique.

Pour réaliser l'association automatique des copies aux étudiants, complétez les deux menus déroulants de l'onglet Notation:

- Identifiant unique dans cette liste : il s’agit du nom de la colonne qui, dans le ﬁchier csv des étudiants, contient le numéro d’étudiant (voir ).

- Titre du code pour association automatique : il s'agit de l'identifiant choisi dans le fichier source LaTeX pour le code `\AMCcodeGrid` (voir ).

- Vérifiez le type du champs nom : Préférences Projet Type du champs nom Image

- En appuyant sur le bouton Automatique de la partie Identification des étudiants, la recherche parmi la liste des codes renseignés par les étudiants s'opère. On peut ensuite observer ou peaufiner le résultat grâce à une association manuelle.

###### Avec un code barre

Le code barre devra être collé dans l'espace prévu par `champnom`.

AMC ne crée pas de code barre, il vous appartient de le faire avec un logiciel externe.

Pour réaliser l'association automatique des copies aux étudiants, complétez les deux menus déroulants de l'onglet Notation:

- Identifiant unique dans cette liste : il s’agit du nom de la colonne qui, dans le ﬁchier csv des étudiants, contient le numéro d’étudiant (voir ).

- Titre du code pour association automatique : Champ nom décodé

- Vérifiez le type du champs nom : Préférences Projet Type du champs nom Barcode ou Barcode tail .

- Décodez le champs nom : Menu Projet Décoder le champs nom .

- En appuyant sur le bouton Automatique de la partie Identification des étudiants, la recherche parmi la liste des codes renseignés par les étudiants s'opère. On peut ensuite observer ou peaufiner le résultat grâce à une association manuelle.

##### Association manuelle

Pour ouvrir la fenêtre de reconnaissance des noms d'étudiants, cliquons sur le bouton Manuelle de la partie Identification des étudiants. Cette fenêtre se compose d'une partie haute présentant successivement les noms inscrits par les étudiants, d'une partie basse comprenant un bouton par étudiant de la liste que nous avons fabriquée, ainsi que d'une partie droite qui permet une navigation aisée parmi les copies à identifier. Nous cliquons sur le bouton correspondant au nom inscrit en partie haute pour chaque page qui nous est présentée (par défaut, seules les copies non ou mal identifiées sont présentées. Ceci peut être changé en cochant la case associés). Quand toutes les pages sont lues, un fond bleu apparaît à la place des noms, et il ne nous reste plus qu'à cliquer sur le bouton Enregistrer de la fenêtre.

### Export de la liste des notes

À ce stade, nous pouvons récupérer la liste des notes sous plusieurs formats (pour l'instant CSV et OpenOffice), grâce au bouton Exporter. Cet export s'accompagnera de l'ouverture du fichier produit par le logiciel approprié (si il est installé).

#### Export ODS (OpenOffice, LibreOffice)

Dans le fichier exporté, le codage couleur suivant est adopté :

gris

  correspond aux cases qui ne comportent aucune information. Il s'agit par exemple des scores d'un étudiant absent, ou des scores aux questions qui n'ont pas été présentées à l'étudiant correspondant.

jaune

  utilisé pour repérer les questions où l'étudiant n'a pas fourni de réponse.

rouge

  utilisé pour les questions où l'étudiant a répondu de manière invalide : il a coché plus d'une case pour une question simple, ou il a coché une ou plusieurs cases en plus de la case Aucune de ces réponses n'est correcte.

violet

  utilisé pour les cases correspondant à des questions indicatives (ne comptent pas pour la note finale de l'étudiant).

vert

  utilisé pour le total des questions d'un même groupe (score ou pourcentage). Voir et .

### Annotation

En appuyant sur le bouton Annoter les copies, l'annotation des pages des étudiants commencera : sur chaque scan, les annotations suivantes sont effectuées (nous détaillons ici les annotations par défaut, qui peuvent être configurées) :

- les cases cochées à tort par l'étudiant sont entourées en rouge ;

- les cases non-cochées qui auraient dû l'être sont cochées en rouge ;

- les cases cochées et qui devaient l'être sont cochées en bleu ;

- pour chaque question, sont indiquées la note obtenue ainsi que la note maximale pouvant être obtenue ;

- la note globale de la copie est indiquée en première page de la copie.

Le texte inscrit en haut de la première page de chaque copie peut être configuré ( Édition Préférences Annotation En-tête ou Édition Préférences Projet Annotation des copies Texte d'en-tête ). Les substitutions suivantes s'appliquent sur ce texte (voir pour une explication de la signification de ces valeurs) :

`%S`

  est remplacé par le score total de l'étudiant.

`%M`

  est remplacé par le score maximal (score obtenu par l'étudiant si il ne fait aucune erreur).

`%s`

  est remplacé par la note de l'étudiant.

`%m`

  est remplacé par la note maximale.

`%(ID)`

  est remplacé par le nom de l'étudiant.

`%(N)`

  est remplacé par le numéro de l'étudiant (copie).

`%(COL)`

  est remplacé par la valeur de la colonne COL dans la liste des étudiants pour l'étudiant considéré.

Cette opération est effectuée page par page, et le résultat est constitué de copies corrigées au format PDF. Le nom du fichier PDF qui contiendra la copie corrigée d'un étudiant donné est formé à partir du modèle indiqué dans le champ Modèle de nom de fichier. Dans ce modèle, les textes du type « (col) » seront remplacés par le contenu de la colonne nommée `col` dans le fichier listant les étudiants (voir section ). Si on laisse ce champ vide, une valeur par défaut formée du nom et du numéro d'étudiant de l'étudiant sera utilisée.

#### Fichier topics.yml

L'objectif est de regrouper un ensemble de questions pour calculer un score et obtenir un niveau de réussite. Ces indications seront affichées sur l'en-tête de la copie corrigée.

Ces groupes vont être décrits dans un fichier au format YAML nommé topics.yml, à placer dans le répertoire du projet AMC.

AMC aura besoin des paquets perl supplémentaires suivants qui doivent donc être installé dans votre environnement : `YAML::Syck`, `Hash::Merge`.

##### Les variables

Valeurs générales relatives au topic :

- %{id} : id du topic

- %{name} : nom du topic

Valeurs relatives au score de l'étudiant :

- %{score} : score atteint par l'étudiant

- %{max} : score maximal

- %{ratio} : quotient du score sur le score maximal (entre 0 et 1)

- %{value} : même chose mais en pourcentage

Valeurs relatives aux questions du topic :

- %{nums:s} : liste des numéros de questions

- %{nums:c} : liste des numéros de questions, en remplaçant les suites par des intervalles (ex: 2-4 au lieu de 2,3,4)

Valeurs qui proviennent du niveau atteint :

- %{message}

- %{code}

- %{i} : palier

##### Principe

Le format de fichier YAML est très sensible à l'indentation. Vous devez donc bien respecter le nombre d'espaces au début des lignes.

Pour vous aider, chaque espace est représenté par le symbole ``` qu'il ne faut pas reproduire.

    ---
    preferences:
    ``clé niveau 1:`valeur

    topics:
    ``-`clé niveau 1:`valeur
    ````clé niveau 2:`valeur
    ``````clé niveau 3:`valeur
    ````````clé niveau 4:`valeur

##### Exemples de fichiers

###### Exemple complet

    ---
    preferences:
    ``odscolumns:`level
    ``skip_indicatives:`0
    ``decimal_separator:`","
    ``answered_only:`1

    topics:
    ``-`text:`"Rappel : Ne pas oublier les retenues dans les opérations"
    ``-`id:`addition2
    ````name:`Savoir calculer la somme de deux nombres à deux chiffres
    ````questions:
    ``````-`"add2:*"
    ``````-`somme2ch
    ````annotate_color:`"#B22222"
    ````levels:
    ``````-`min:`75
    ````````message: `très bonne maîtrise
    ````````color:`"#1ab407"
    ````````code:`4
    ``````-`min:`50
    ````````message:`maîtrise satisfaisante
    ````````color:`"#2aea62"
    ````````code:`3
    ``````-`min:`25
    ````````message:`maîtrise fragile
    ````````color:`"#ffad26"
    ````````code:`2
    ``````-`message:`maîtrise insuffisante
    ````````color:`"#ff262c"
    ````````code:`1
    ````decimals:`0
    ````decimalsratio:`2
    ````decimalspc:`0
    ````floor:`0
    # Commentaire pour aérer le code.
    ``-`id:`soustraction2
    ````name:`Savoir calculer la différenc de deux nombres à deux chiffres
    ````format:`"%{name}`:`%{score}/%{max}"
    ````questions:
    ``````-`"sous2"
    ``````-`"sous1"
    ````annotate_color:
    #
    ``-`text:`"-------bilan--------"
    ``-`id:`global
    ````questions:`"*"
    ````value:`"ratio:20:0.25"
    ````decimals:`2
    ````decimalspc:`2
    ````format:`|
    ``````%{name}`:`%{code}`%{message}
    ``````Pour les questions %{nums:c} (addition et soustraction), ton score est de  %{score}
    ``````ta note est de %{value}/20
    ````exclude_questions:
    `````-`bonus
    `````-`question-difficile
    #
    ``-`text:`"la clé aggregate"
    ``-`id:`aggregate
    ````name:`les options
    ````aggregate:`xxx
    ````value:`xxx
    ````questions:
    ``````-`"*"

De nouvelles colonnes () seront affichées avec le texte de chaque id ( ) et le pourcentage du niveau. Vous pouvez choisir d'afficher la valeur de la variable code .

Pour tenir compte des questions indicatives dans les pourcentages.

Séparteur décimal

N'affiche pas les topics si toutes les réponses sont vides.

Un texte brut quelconque affiché sans condition de score.

L'identifiant de la compétence sans lettes accentuées ou espaces.

Le nom complet de la compétence.

Les questions reliées à la compétence.

Toutes les questions dont l'identifiant commence par add2: sont incluses (voir ).

Seule la question avec l'identifiant somme2ch est incluse (voir ).

Couleur utilisée sur la copie annotée suivant les scores correspondants aux questions.

Si une question n'appartient à aucun `id` pour lequel l'option `annotate_color` est renseignée, alors la couleur utilisée sera celle de `Annotations color` de l'interface. Édition Préférences Annotation

Les différents niveaux de réussite exprimés en pourcentage.

Minimum à atteindre pour ce niveau.

Le message affiché sur la copie en fonction du niveau.

La couleur du message affiché sur la copie en fonction du niveau.

code qui pourra être affichée dans les colonne du fichier ods. Voir .

Nombre de décimales pour `%{score}` et `%{code}`, 0 par défaut.

Nombre de décimales pour `%{ratio}`, 2 par défaut.

Nombre de décimales pour `%{value}`, 0 par défaut.

Valeur plancher. Si le calcul de la valeur obtenue au topic donne une valeur inférieure à la valeur plancher, cette valeur est ramenée à la valeur plancher.

Les commentaires commencent par le symbole dièse.

La mise en forme de l'affichage.

Par défaut l'affichage est : `format:`"● %{name}: %{message} (%{value})"`

La note correspondante sera le ratio multiplié par 20 et arrondi au multiple de 0.25 le plus proche.

Changement du nombre de décimales.

Pour écrire un texte sous forme de liste.

Joker qui sélectionne toutes les questions.

Les questions suivantes seront exclues.

Peut prendre plusieurs options :

sumscore:

  on prend la somme des scores, et au dénominateur la somme des scores maximaux.

sumratio:

  on prend la somme des quotients entre le score de la question et le score maximal pour la question. Au dénominateur, le nombre de questions.

  Si on veut que le topic soit égal à la somme des ratios, on prend value:score, et si on veut que le topic soit la moyenne des ratios (donc entre 0 et 1), on prend value:ratio. Si laissé vide, le pourcentage sera affiché.

minscore:

  on prend le minimum des scores, et au dénominateur le minimum des scores maximaux aux questions.

  Si on veut que le topic soit égal au min des scores on choisit value:score, et si on veut que le topic soit égal au rapport des deux, on prend value:ratio.

maxscore:

  on prend le maximum des scores, et au dénominateur le maximum des scores maximaux aux questions.

  Si on veut que le topic soit égal au max des scores on choisit value:score, et si on veut que le topic soit égal au rapport des deux, on prend value:ratio.

maxratio:

  on prend la valeur maximale du rapport, pour chaque question, entre le score obtenu pour la question et le score optimal pouvant être obtenu pour la question. Avec cette valeur d'aggregate, value:score et value:ratio donnent la même chose.

minratio:

  on prend la valeur minimale du rapport, pour chaque question, entre le score obtenu pour la question et le score optimal pouvant être obtenu pour la question. Avec cette valeur d'aggregate, value:score et value:ratio donnent la même chose .

count(a) :

  nombre de questions ayant le score a.

count(a,b) :

  nombre de questions ayant le score entre a et b.

Peut prendre plusieurs options : score, ratio, "ratio:a:b". Si laissé vide, le pourcentage sera affiché.

###### Niveaux communs

    ---
    conf:
    ``niveauxstandard:
    ````levels:
    ``````-`min:`75
    ````````message:`très bonne maîtrise
    ````````color:`"#1ab407"
    ``````-`min:`50
    ````````message:`maîtrise satisfaisante
    ````````color:`"#2aea62"
    ``````-`min:`25
    ````````message:`maîtrise fragile
    ````````color:`"#ffad26"
    ``````-`message:`maîtrise insuffisante
    ````````color:`"#ff262c"
    ````decimals:`2
    ````decimalsratio:`2
    ````decimalspc:`0
    ````floor:`0

    topics:
    ``-`id:`addition2
    ````name:`Savoir calculer la somme de deux nombres à deux chiffres
    ````questions:
    ``````-`"add2:*"
    ``````-`somme2ch
    ````conf:`niveauxstandard
    ``-`id:`soustraction2
    ````name:`Savoir calculer la différence de deux nombres à deux chiffres
    ````format:`"%{name}`:`%{score}/%{max}"
    ````questions:
    ``````-`"sous2:*"
    ``````-`"sous1:*"
    ````conf:`niveauxstandard

Les différents niveaux de réussite exprimés en pourcentage pour l'ensemble des questions.

Appel au barème.

###### Inclusion de fichier

Créer un fichier levels.yml qui se trouve dans le répertoire parent du répertoire projet (donc le répertoire commun à tous les projets AMC).

    # fichier nommé levels.yml
    preferences:
    ``odscolumns: level
    ``decimal_separator:`","
    #
    conf:
    ``niveauxstandard:
    ````levels:
    ``````-`min:`75
    ````````message:`très bonne maîtrise
    ````````color:`"#1ab407"
    ``````-`min:`50
    ````````message:`maîtrise satisfaisante
    ````````color:`"#2aea62"
    ``````-`min:`25
    ````````message:`maîtrise fragile
    ````````color:`"#ffad26"
    ``````-`message:`maîtrise`insuffisante
    ````````color:`"#ff262c`
    ````decimals:`2
    ````decimalsratio:`2
    ````decimalspc:`2
    ````floor:`0

    ---
    include:
    ``-`../levels.yml

    topics:
    ``-`id:`addition2
    ````name:`Savoir calculer la somme de deux nombres à deux chiffres
    ````questions:
    ``````-`"add2:*"
    ``````-`somme2ch
    ````conf:`niveauxstandard
    ``-`id:`soustraction2
    ````name:`Savoir calculer la différence de deux nombres à deux chiffres
    ````format:`"%{name}`:`%{score}/%{max}"
    ````questions:
    ``````-`"sous2:*"
    ``````-`"sous1:*"
    ````conf:`niveauxstandard

#### Position de la note

Vous pouvez choisir la position de la note à l'aide du menu Édition Préférences Projet Position de la note

Les choix par défaut sont :

- (aucune).

- Dans la marge.

- Dans les deux marges.

- A côté des cases.

- Indiqué dans le fichier source (voir ).

### Les valeurs par défaut du menu Préférences

Vous pouvez modifier les valeurs par défaut pour le traitement des scans dans le menu Édition Préférences Scan

Conversion des scans

- Densité des scans vectoriel (DPI) : 250

- Seuil de conversion : 0.60

- Effacer le rouge des scans : décoché

- Forcer la conversion : décoché

Paramètres de détection

- Majoration de la taille des marques : 0.20

- Minoration de la taille des marques : 0.20

- Seuil de noirceur par défaut : 0.15

- Seuil de noirceur par défaut supérieur : 1

- Proportion des cases à mesurer : 0.80

- Contrôle des scans avec 3 angles marqués : décoché

## Utilisations particulières

### Photocopie du sujet

Comme expliqué dans , il n'est pas toujours possible de photocopier une feuille de réponses pour en donner à plusieurs étudiants. Cependant, dans le cas de l'utilisation de la feuille de réponses séparée, et quand les questions et réponses ne doivent pas être mélangées, il est possible de photocopier le sujet et imprimer les feuilles de réponses séparément. La conduite à suivre pour obtenir un tel résultat est indiquée ici.

- Utiliser l'option `ensemble` (voir ).

- Écrire le sujet avant l'utilisation de la commande `exemplaire`, ou de l'environnement `copieexamen`.

- Utiliser la commande `\AMCformS` pour restituer les cases à cocher sur chaque feuille de réponses, à l'intérieur de `exemplaire`/`copieexamen`.

Voici un exemple minimal de fichier LaTeX :

    \documentclass[a4paper]{article}
    \usepackage[ensemble]{automultiplechoice}
    \begin{document}

    \noindent{\bf Sujet}

    \begin{question}{sum}
      Combien font un plus un ?
      \begin{reponses}
        \mauvaise{1}
        \bonne{2}
        \mauvaise{3}
      \end{reponses}
    \end{question}

    \begin{question}{k2}
      Quelle est l'altitude du K2?
      \begin{reponses}
        \mauvaise{around 8000m}
        \bonne{around 8600m}
        \mauvaise{around 9000m}
      \end{reponses}
    \end{question}

    \AMCcleardoublepage

    \exemplaire{5}{

    \AMCdebutFormulaire

    {\large\bf Feuille de r\'eponses :}
    \hfill \champnom{\fbox{
        \begin{minipage}{.5\linewidth}
          Nom:

          \vspace*{.5cm}\dotfill
          \vspace*{1mm}
        \end{minipage}
      }}

    \AMCformS

    }

    \end{document}

### Correction a posteriori

Supposons que vous souhaitez utiliser une unique feuille de réponses générique pour tous vos examens. Elle contiendra simplement des cases à cocher (par exemple 5 cases par question, et 40 questions). Les sujets des examens seront rédigés à part. Le problème ici est que les bonnes réponses ne sont pas indiquées dans le fichier LaTeX, ce qui fait que AMC ne peut pas les connaître. La solution consiste à demander à l'enseignant de cocher sur une feuille de réponse les bonnes réponses, qui sera transmise à AMC pour qu'il y lise les bonnes réponses.

Pour mettre en œuvre ce schéma de fonctionnement, vous devez :

- utiliser les options `postcorrect`, `insidebox` et `noshuffle` (voir ) ;

- utiliser `\mauvaise` pour toutes les réponses (jamais `\bonne`).

Voici un exemple minimal :

    \documentclass[a4paper]{article}
    \usepackage{multicol}
    \usepackage[insidebox,noshuffle,postcorrect]{automultiplechoice}

    \begin{document}

    \exemplaire{5}{

    \noindent
    \begin{tabular}{|l|l|l|}
    \hline
    num\'ero d'\'etudiant & classe & sujet\\
    \hline
     \vspace{-0.25cm}
     & &\\
    \AMCcodeGridInt{NumEtud}{10}\hspace*{\fill}&
    \AMCcodeGridInt{Classe}{2}\hspace*{\fill}&
    \AMCcodeGridInt{Sujet}{3}\hspace*{\fill}
    \\
    \hline
    \end{tabular}
    \hfill\namefield{\fbox{
        \begin{minipage}{.25\linewidth}
          Nom :

          \vspace*{.5cm}\dotfill

          \vspace*{.5cm}\dotfill
          \vspace*{1mm}
        \end{minipage}
      }}\hfill

    \vspace{.5cm}
    \noindent\hrulefill

    \begin{multicols}{2}\columnseprule=.4pt

    \begin{question}{01}
    \begin{reponsesperso}
    \mauvaise{}%
    \mauvaise{}%
    \mauvaise{}%
    \mauvaise{}%
    \mauvaise{}%
    \end{reponsesperso}
    \end{question}

    \begin{question}{02}
    \begin{reponsesperso}
    \mauvaise{}%
    \mauvaise{}%
    \mauvaise{}%
    \mauvaise{}%
    \mauvaise{}%
    \end{reponsesperso}
    \end{question}

    % continuez ici pour ajouter autant de questions que souhaité...

    \end{multicols}

    }

    \end{document}

Après traitement du fichier LaTeX par AMC, imprimez les feuilles de réponses obtenues, faites passer l'examen et demandez à l'enseignant de remplir une feuille. Scannez ensuite les feuilles de réponses, et lancez la saisie automatique dans AMC (y compris de la feuille remplie par l'enseignant). Quand vous cliquez sur Corriger dans l'onglet Notation, en laissant la case Mettre à jour le barème cochée, AMC vous demandera le numéro de la copie remplie par l'enseignant. La suite des opérations est la même que dans le cas standard.

Vous pouvez aussi écrire les lettres des cases à l'extérieur de celles-ci : utilisez pour cela l'option `outsidebox` à la place de `insidebox`, et écrivez vos questions de la façon suivante:

    \begin{question}{01}
      \begin{reponsesperso}
        \mauvaise{A }%
        \mauvaise{B }%
        \mauvaise{C }%
        \mauvaise{D }%
        \mauvaise{E }%
      \end{reponsesperso}
    \end{question}

Pour utiliser cette option uniquement pour le formulaire de réponse (et non pour la saisie du numéro d'étudiant), vous pouvez définir, juste après le `\begin{document}`

    \makeatletter
    \def\setoutsidebox{\AMC@outside@boxtrue}
    \makeatother

Puis utiliser cette nouvelle commande localement (à l'intérieur des accolades) dans le formulaire :

    {\setoutsidebox\formulaire}

### Copies pré-remplies

Dans certaines situations, il peut être souhaitable de préparer des copies nominatives pour tous les étudiants, à partir d'une liste d'étudiants. La démarche suivante, basée sur l'utilisation du paquet LaTeX csvsimple, permet d'obtenir ce résultat.

- La liste des étudiants doit être au format CSV. On suppose dans la suite que le fichier `liste.csv`, placé dans le répertoire du projet, utilise l'encodage UTF8 et est sous la forme suivante :

      nom,prenom,id
      Boulix,Jojo,001
      Golin,André,002
      Moniuszko,Stanisław,003

  ou

      nom,prenom,id,mail
      Boulix,Jojo,001,jojo@boulix.fr
      Golin,André,002,andre@golin.fr
      Moniuszko,Stanisław,003,Moniuszko@Stanisław.fr

  ou

      nom,prenom,id,mail
      Boulix,Jojo,001,"jojo@boulix.fr,tata@boulix.fr"
      Golin,André,002,"andre@golin.fr,golin@andre.fr"
      Moniuszko,Stanisław,003,"Moniuszko@Stanisław.fr,stan@stanislaw.fr"

  ou

      nom;prenom;id;mail
      Boulix;Jojo;001;jojo@boulix.fr,tata@boulix.fr
      Golin;André;002;andre@golin.fr,golin@andre.fr
      Moniuszko;Stanisław;003;Moniuszko@Stanisław.fr,stan@stanislaw.fr

  Ne pas utiliser le symbole _ (underscore) dans le nom ou prénom des étudiants. Une erreur de compilation sera affichée.

- `\exemplaire{1}` doit être égal à un.

- Le nombre de copies doit être à zéro (interface graphique).

- Le sujet LaTeX doit charger le paquet csvsimple, grâce à une ligne

      \usepackage{csvsimple}

- Dans le fichier source, le sujet doit être défini sous la forme d'une commande LaTeX produisant un seul sujet, qui sera appelée (autant de fois qu'il y a d'étudiants) par la commande `\csvreader` de la façon suivante :

      \documentclass[a4paper]{article}
      \usepackage[utf8x]{inputenc}
      \usepackage[T1]{fontenc}
      %\usepackage[french]{babel}
      %\usepackage[babel=true,kerning=true]{microtype}

      \usepackage[francais,bloc,completemulti]{automultiplechoice}
      \usepackage{csvsimple}

      \newcommand{\sujet}{%
      \exemplaire{1}{%
      %\shorthandon{;}
      %%% debut de l'en-tête des copies :

      \noindent{\bf QCM  \hfill TEST}

      \vspace*{.5cm}
      \begin{minipage}{.4\linewidth}
        \centering\large\bf Histoire et géographie\\ Examen du 01/01/2008
      \end{minipage}
      \champnom{\fbox{\begin{minipage}{.5\linewidth}
      \nom{} \prenom{} :

      \vspace*{.5cm}\dotfill
      \vspace*{1mm}
      \end{minipage}}}

      %%% fin de l'en-tête

      \begin{center}
        \hrule\vspace{2mm}
        \bf\Large Géographie
        \vspace{1mm}\hrule
      \end{center}

      \restituegroupe{geographie}

      \begin{center}
        \hrule\vspace{2mm}
        \bf\Large Histoire
        \vspace{2mm}\hrule
      \end{center}

      \restituegroupe{histoire}

      \AMCassociation{\id}%association
      %\AMCassociation[\nom-\prenom]{\id}

      }%fin commande \exemplaire
      }%fin commande \newcommand

      \begin{document}

      %%% préparation des groupes

      \setdefaultgroupmode{withreplacement}

      \element{geographie}{
        \begin{question}{Paris}
          Dans quel continent se situe Paris~?
          \begin{reponses}
            \bonne{L'Europe}
            \mauvaise{L'Afrique}
            \mauvaise{L'Asie}
            \mauvaise{La planète Mars}
          \end{reponses}
        \end{question}
      }

      \element{geographie}{
        \begin{question}{Cameroun}
          Quelle est la capitale du Cameroun~?
          \begin{reponses}
            \bonne{Yaoundé}
            \mauvaise{Douala}
            \mauvaise{Abou-Dabi}
          \end{reponses}
        \end{question}
      }

      \element{histoire}{
        \begin{question}{Marignan}
          En quelle année a eu lieu la bataille de Marignan~?
          \begin{reponseshoriz}
            \bonne{1515}
            \mauvaise{1915}
            \mauvaise{1519}
          \end{reponseshoriz}
        \end{question}
      }

      \element{histoire}{
        \begin{questionmult}{Nantes}
          Que peut-on dire de l'Édit de Nantes~?
          \begin{reponses}
            \bonne{Il a été signé en 1598}
            \bonne{Il a été définitivement révoqué par Louis XIV}
            \mauvaise{Il a été signé par Henri II}
          \end{reponses}
        \end{questionmult}
      }

      %protection par mot de passe
      %\AMCstudentslistfile{liste.csv}{id}

      %%génération des sujets
      \csvreader[head to column names]{liste.csv}{}{\sujet}
      %\shorthandoff{;}
      %\csvreader[head to column names,separator=semicolon]{liste.csv}{}{\sujet}

      \end{document}

  Notez l'utilisation de l'option `head to column names` de `\csvreader` qui définit des commandes basées sur les en-tête du fichier CSV (ici `\nom`, `\prenom` et `\id`) utilisables dans la production du sujet personnalisé, et l'appel de `\AMCassociation` qui indique à AMC que la copie produite doit être associée à l'identifiant d'étudiant `\id`.

  Si vous utilisez un fichier similaire au 4e exemple avec le paquet `\usepackage[french]{babel}`, le caractère ";" est activé, ce qui interfère avec la détection de ce caractère en tant que séparateur dans le fichier CSV. Pensez à décommenter cette ligne pour l'activer.

  L'astuce est de recourir à microtype pour corriger ce problème (et on peut profiter des avantages de microtype). Pensez à décommenter cette ligne pour l'activer.

  Option pour inclure le nom de l'élève dans le nom de fichier lors de l'impression.

  Pour protéger chaque copie avec un mot de passe unique.

  Au lieu d'utiliser `\usepackage[babel=true,kerning=true]{microtype}`, cette solution est possible pour contourner le problème. Décommentez cette ligne.

  Utilisez cette commande si le fichier CSV correspond à un des 3 premiers exemples.

  Utilisez cette commande si le fichier CSV correspond au 4e exemple.

- Après l'impression, le scan, la saisie automatique et la notation des copies, au moment de l'association des copies avec les étudiants, utiliser la valeur "pré-association" pour le champ Titre du code pour association automatique, et "id" pour le champ Identifiant unique dans cette liste.

## Conflits avec d'autres paquets

### Paquets à déclarer après automultiplchoice

Vous devez déclarer ces paquets après `automultiplechoice` : fancyvrb, fancybox, pstricks, minted.

Pour utiliser `pstricks`, vous devez configurer AMC : Édition Préférences Général Moteur Latex par défaut latex+dvipdf

### `verbatim`

Issue du wiki.

Le paquet `verbatim` perturbe AMC et il devient impossible de l'utiliser dans les environnements `question` ou `questionmult`. Cet exemple ne compile pas.

    \begin{question}{program}
    What is the return value of the following R code?
    \begin{verbatim}
    sum(sapply(1:2^2,function(x) { x/2 }))
    \end{verbatim}
    \begin{choices}[o]
    \wrongchoice{2.5}
    \correctchoice{5}
    \wrongchoice{NaN}
    \end{choices}
    \end{question}

#### Accolades explicites

Pour les textes court, encadrer celui-ci dans une commande particulière (ici, texte en italique).

    \begin{question}{program}
    What is the return value of the following R code?
    \begin{center}
    \texttt{sum(sapply(1:2\textasciicircum 2,function(x) \{ x/2 \}))}
    \end{center}
    \begin{choices}[o]
    \wrongchoice{2.5}
    \correctchoice{5}
    \wrongchoice{NaN}
    \end{choices}
    \end{question}

#### `UseVerb` du paquet `fancyvrb`

https://www.ctan.org/pkg/verbatim.

Enregistrez le verbatim dans une commande avant `\exemplaire`

    \SaveVerb{theRcode}'sum(sapply(1:2^2,function(x) { x/2 }))'
    ...
    \begin{question}{program}
    What is the return value of the following R code?
    \begin{center}
    \UseVerb{theRcode}
    \end{center}
    \begin{choices}[o]
    \wrongchoice{2.5}
    \correctchoice{5}
    \wrongchoice{NaN}
    \end{choices}
    \end{question}

#### Paquet `verbatimbox`

Pour des textes plus longs, enregistrez le verbatim dans un environnement `myverbbox` avant `\exemplaire`

    \begin{myverbbox}{\Rcode}
    sum(sapply(1:2^2,function(x) { x/2 }))
    \end{myverbbox}
    ...

    \begin{question}{program}
    What is the return value of the following R code?
    \begin{center}
    \Rcode
    \end{center}
    \begin{choices}[o]
    \wrongchoice{2.5}
    \correctchoice{5}
    \wrongchoice{NaN}
    \end{choices}
    \end{question}

#### Import de fichiers externes

`prog.py` est un fichier copié dans le répertoire du projet.

##### Paquet `listings`

    \lstset{language=Python}
    \lstinputlisting{prog.py}

##### Paquet `minted`

Compiler avec `-shell-escape`.

     \inputminted{python}{prog.py}

## Manuel des commandes

Vous pouvez vous passer de la lecture de cette partie si vous souhaitez utiliser uniquement l'interface graphique. Cependant, toutes les actions effectuées par l'interface graphique peuvent aussi être exécutées par les différentes commandes dont nous décrivons ici la syntaxe.

auto-multiple-choice
1
Auto Multiple Choice
1.6.0+git20240805161640

### auto-multiple-choice

Gestion automatisée de questionnaires QCM

              auto-multiple-choice

              action arguments

              auto-multiple-choice

              projet

#### Description

La commande `auto-multiple-choice` transmet à la commande `AMC-action.pl` les arguments qu'on lui donne.

La deuxième forme, qui ne mentionne aucune action, appelle l'interface graphique `auto-multiple-choice gui` en lui transmettant éventuellement le nom d'un projet à ouvrir.

#### See also

Différentes actions possibles : auto-multiple-choice-prepare 1 , auto-multiple-choice-imprime 1 , auto-multiple-choice-analyse 1 , auto-multiple-choice-note 1 , auto-multiple-choice-association-auto 1 , auto-multiple-choice-export 1 , auto-multiple-choice-annote 1 , auto-multiple-choice-regroupe 1 .

auto-multiple-choice-prepare
1
Auto Multiple Choice
1.6.0+git20240805161640

### auto-multiple-choice-prepare

prépare le document de travail à partir du fichier source LaTeX

              auto-multiple-choice

              prepare

              --mode s

              --prefix
              répertoire-project

              fichier source
              AMC

              auto-multiple-choice

              prepare

              --mode b

              --data
              répertoire-données-project

              fichier source
              AMC

#### Description

Voir documentation en anglais.

## Anonymat des copies (uniquement avec LaTeX)

En utilisation classique, cette option n'est pas recommandée.

### Activer le mode anonyme des copies

Préférences Fonctions Anonymisation Afficher le panneau anonymisation .

### Principe pour la création des fichiers pdf anonymes

- Préparer votre sujet ().

- Saisir les copies ()

- Dans l'onglet Notation, un nouveau menu est apparu : cliquer sur Anonymiser.

- Ouvrir pour accéder aux fichier pdf anonymes.

- Corriger manuellement certaines questions à partir de ces PDF.

- Transmettre à AMC les notes de ces questions via le fichier csv.

Ces fichiers ne sont pas modifiables et ne doivent pas être saisis pour une correction automatique.

### Les commandes utilisables avec l'option d'anonymat

#### AMCzone[id]{}

La commande `\AMCzone[id]{code LaTeX}` permet de cacher une zone définie.

Par défaut, la zone `\champnom` sera invisble après l'anonymisation.

#### AMCexternalQuestion

La commande `\AMCexternalQuestion{identifiant à choisir}{score maximal}` permet de déclarer une question qui sera notée hors AMC, avec un score maximal.

Lorsque vous utilisez cette commande, vous pouvez gérer librement le numéro de la question et le texte de la question (AMC ne s'en chargera pas).

Il est impossible de rajouter cette commande après la préparation complète du sujet.

Lors de l'anonymisation des copies, un fichier csv est créé. Ce fichier devra être rempli avec les notes puis lu par AMC pour continuer avec la correction (voir ).

## Divers

### Module perl Email::Address

Le module n'est pas installé.

- Avec Ubuntu

      sudo apt install libemail-address-perl libemail-mime-perl libemail-sender-perl

- Autres

      cpanm install Email::Address

  ou

       perl -MCPAN -e "shell"
       install Email::Address
       Exit

### AMC et TeXLive «vanille» (ubuntu et debian)

#### AMC et TeXLive ne sont pas installés

- Téléchargez TeXLive en ligne.

    wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
    tar -xzf install-tl-unx.tar.gz
    cd install-tl-20xx

Remplacez xx par les chiffres ou appuyez sur la touche TABULATION.

- Installez TeXLive.

      sudo ./install-tl

- Tapez `O` puis `L` puis tapez 3 fois sur `Entrée` sans compléter les chemins puis tapez `R` puis `I`.

Par défaut, tout est installé. Si vous ne voulez pas tous les paquets, appuyez sur `C` puis sélectionnez vos paquets puis `R` puis `I`.

- Installez les faux paquets

    sudo apt install equivs --no-install-recommends
    mkdir -p /tmp/tl-equivs && cd /tmp/tl-equivs
    wget -O texlive-local https://www.tug.org/texlive/files/debian-equivs-20xx-ex.txt

Si le dernier téléchargement n'est pas possible, il faut le faire manuellement sur le site ci-dessous puis le copier dans le dossier `/tmp/tl-equivs` en le renommant `texlive-local`.

Autre solution, télécharger le paquet l'année précédente (ici, 2023) en le changeant l'année (2024) dans le fichier.

    wget -O texlive-local https://www.tug.org/texlive/files/debian-equivs-2023-ex.txt

`Version: 2023.99999999-1` en `Version: 2024.99999999-1`

- Création et installation du paquet

    equivs-build texlive-local
    sudo dpkg -i texlive-local_20xx-x_all.deb
    sudo apt install -f

- Installez AMC.

    sudo add-apt-repository ppa:alexis.bienvenue/stable && sudo apt-get update
    sudo apt-get install auto-multiple-choice && sudo apt-get install msmtp

- Créez un lien symbolique et mettez à jour TeXLive.

    sudo ln -s /usr/share/texmf/tex/latex/AMC /usr/local/texlive/texmf-local/tex/latex/AMC
    sudo mktexlsr
    sudo tlmgr update --self --all

#### AMC et TeXLive sont installés (/usr/local/)

- Créez un lien symbolique.

    sudo ln -s /usr/share/texmf/tex/latex/AMC /usr/local/texlive/texmf-local/tex/latex/AMC
    sudo mktexlsr

### Découper le fichier `DOC-sujet.pdf` en plusieurs fichiers

Préférences Général Impression Méthode d'impression dans des fichiers

Préférences Général Impression Méthode d'extraction pdftk / gs (ghostscipt) / qpdf (défaut) / sejda-console (non installé) .

### Mise en page

#### 4 pages A4 en 1 A3 recto/verso

    pdfjam --booklet 'false' --landscape --a3paper --outfile DOC-sujet-A3.pdf --signature '4' DOC-sujet.pdf

#### Traitement de 2 pages sur 1 feuille (2 A5 sur 1 A4)

Vous pouvez imprimer le fichier `DOC-sujet.pdf` en 2 pages sur 1 feuille avec n'importe quel lecteur pdf mais AMC ne pourra pas traiter le fichier numérisé, vous devez le découper.

- Convertissez le fichier pdf en images.

      pdfimages votrefichierreponses.pdf unnomdefichier

- Coupez chaque image en deux.

      mogrify -rotate -90 -crop 50%x100% *.pbm

  Inutile de faire après la commande précédente :

      mogrify -rotate +90 -crop 50%x100% *.pbm

  toutes les pages seront traitées et renommées automatiquement par ImageMagick.

  Si les cases ne sont pas assez foncées ou mal détéctées, vous pouvez choisir un seuil pour lequel ImageMagick convertira les cases en noires (ici 80%).

      mogrify -rotate -90 -crop 50%x100% -threshold 80% *.pbm

- Lancez le traitement en sélectionnant les fichiers `pbm`.

### pythontex

Issu de et

- Il faut ajouter un script nommé prePythonTex4AMC et le rendre exécutable.

    #! /bin/sh
    SRC=$1
    echo "***** JOBNAME=$AMC_JOBNAME"
    echo "***** CMD=$AMC_CMD"
    rm -rf ./pythontex-files-*
    rm -f $AMC_JOBNAME.pytxcode
    $AMC_CMD
    echo "***** PYTHON"
    python /chemin/absolu/vers/fichier/pythontex.py $AMC_JOBNAME.pytxcode
    echo "***** END FILTER"

python3 fonctionne aussi.

    python3 /chemin/vers/fichier/pythontex3.py

- Il faut ajouter au début du fichier LaTex les trois lignes suivantes.

    %%AMC:preprocess_command=/chemin/absolu/vers/fichier/prePythonTex4AMC
    %%AMC:jobspecific=1
    %%AMC:latex_engine=pdflatex --shell-escape

Certains modules python doivent être installés (sympy, pygments)

#### Un exemple avec python (issu de José OUIN : et Gloria FACCANONI)

    %%AMC:preprocess_command=/chemin/vers/fichier/prePythonTex4AMC
    %%AMC:jobspecific=1
    %%AMC:latex_engine=pdflatex --shell-escape

    \documentclass[a4paper]{article}
    \usepackage[T1]{fontenc}

    \usepackage[francais,bloc,completemulti]{automultiplechoice}
    \usepackage{fancyhdr,amssymb,amsmath}

    % ---------- Utilisation de codes Python -----
    \usepackage{pythontex}
    %----------------------------------------------

    \begin{pycode}
    import numpy as np
    from sympy import *

    np.random.seed(12345)
    # IMPORTANT : Graine pour la fonction random

    def polyv2(b,p,d,q) :
    	x=Symbol('x')
    	myp = expand((x-b)**p*(x-d)**q)
    	return latex(myp)

    def dp1x(a,b,c) :
        x=Symbol('x')
        y=Symbol('y')
        f=(a*y-1)/(b*x-1)**c

        g=diff(f,x,1)
        g2=g/b
        g3=g*(-1)
        g4=g2*(-1)

        gl = latex(g)
        g2l = latex(g2)
        g3l = latex(g3)
        g4l = latex(g4)

        return np.array([gl,g2l,g3l,g4l])

    \end{pycode}

    \begin{document}

    \element{Questions}{%
    \begin{question}{QA}La valeur de $\pi$ est
    \begin{reponses}
    \bonne{\py{np.pi}}
    \mauvaise{\py{100+200}}
    \mauvaise{\py{np.random.randint(10)+3.15}}
    \end{reponses}
    \end{question}

    \begin{question}{QB}
    \pyc{a=np.random.randint(10)}
    \pyc{b=np.random.randint(10)}
    \pyc{z=np.complex(a,b)}
    Soit le nombre complexe $\underline{Z}=\py{a}+i.\py{b}$, quelle est la valeur de
     $\underline{Z}^2$~?
    \begin{reponses}
    \bonne{\py{z**2}}
    \mauvaise{\py{np.conj(z**2)}}
    \mauvaise{\py{1/z}}
    \end{reponses}
    \end{question}
    }%

    \exemplaire{5}{

    %%% debut de l'en-tête des copies :

    \noindent{\bf QCM  \hfill TEST}

    \vspace*{.5cm}
    \begin{minipage}{.4\linewidth}
    \centering\large\bf Devoir surveillé\\ Mathématiques \end{minipage}
    \champnom{\fbox{
                    \begin{minipage}{.5\linewidth}
                      Nom et prénom :

                      \vspace*{.5cm}\dotfill
                      \vspace*{1mm}
                    \end{minipage}
             }}

    	\vspace*{3mm}
    	{\setlength{\parindent}{0pt}\AMCcodeGridInt{etu}{3}\hspace*{\fill}
    	\begin{minipage}[b]{12.8cm} %12cm

    %----------------------------------------

    	 \hfill\champnom{\fbox{
    	 \begin{minipage}{0.96\linewidth}
    		\vspace*{3mm} %3mm

    		$\leftarrow$ {\footnotesize  Codez votre QCM-Number.\hspace{1.6ex}} || NOM :

    		{\footnotesize  ( centaines, dizaines et unités )\hspace{2.19ex}} || Prénom :

    		{\footnotesize  Complétez le cadre ci-contre} $\rightarrow$ \hspace{0.2ex} || Groupe :

    		\vspace*{3mm}
    	 \end{minipage}
    	    }
    	   }
    	\hfill
    %-------------------------------------

    \begin{center}\em

    Les questions faisant apparaître le symbole \multiSymbole{} présentent  plusieurs bonnes réponses.
    Les autres ont une unique bonne réponse. L'indiquer sur cette feuille en noircissant la case correspondante au stylo à bille noir. Aucune justification n'est demandée.
    Les réponses fausses retirent la moitié des points. Une absence de réponse n'enlève pas de points.
    Pour rectifier une erreur, utilisez un correcteur "blanc" pour faire disparaître complètement la case noircie par erreur.	Calculatrice autorisée.

    \end{center}

    	\end{minipage}\hspace*{\fill}
    	}

    \vspace{5ex}

    %%% fin de l'en-tête

    \begin{question}{deriv-px-1}

    			\pyc{a=np.random.randint(2,7)} %
    			\pyc{b=np.random.randint(2,5)} %
    			\pyc{c=np.random.randint(2,5)} %
    			\pyc{drvx=dp1x(a,b,c)}

    On donne la fonction suivante : $f(x,y)= \dfrac{\py{a} y-1}{(\py{b} x-1)^{\py{c}}}$

    Quelle est la dérivée partielle $ \dfrac{\partial f(x,y)}{\partial x}$ ?

    \begin{reponseshoriz}
    \bonne{$\py{drvx[0]}$}
    \mauvaise{$\py{drvx[1]}$}
    \mauvaise{$\py{drvx[2]}$}
    \mauvaise{$\py{drvx[3]}$}
    \end{reponseshoriz}

    \end{question}
    %---------------
    % POLYNOME
    %--------------

    \begin{question}{polynome-v2}

    			\pyc{b=np.random.randint(2,7)} % racine r = b
    			\pyc{p=np.random.randint(2,4)} % p : ordre de mult de b
    			\pyc{d=np.random.randint(2,5)} % racine r = d
    			\pyc{q=np.random.randint(2,3)}	% q : ordre de mult de d
    			\pyc{mypoly=polyv2(b,p,d,q)}		% construction de mypolyv2

    On donne le polynôme suivant : $\py{mypoly}$

    Quel est l'ordre de multiplicité de la racine $r = \py{b}$ ?

    \begin{reponseshoriz}
    \bonne{$\py{p}$}
    \mauvaise{$\py{p+1}$}
    \mauvaise{$\py{p-1}$}
    \mauvaise{$\py{p+2}$}
    \end{reponseshoriz}

    \end{question}

    \restituegroupe{Questions}

    \pyc{ok = 42}
    \pyc{nbch = len(str(abs(ok)))}
    \begin{questionmultx}{maquestion}
    The Ultimate Question of Life, the Universe and Everything

    \pys{
     \AMCnumericChoices{!{ok}}{digits=!{nbch}, decimals=0,sign=true,scoreexact=1,scorewrong=-0.25,vspace=0em,hspace=2em,borderwidth=0pt}
    }
    \end{questionmultx}

    \pyc{z = 42}
    \begin{question}{ouverte}
    The Ultimate Question of Life, the Universe and Everything
    \pys{
      \AMCOpen{lines=0,framerule=1pt,dots=false,annotate=true, answer={!{z}}}
      {\correctchoice{$B$}\scoring{1}\wrongchoice{$M$}\scoring{-0.25}}
    }
    \end{question}

    }

    \end{document}

### AMC et moodle

### Paramétrer AMC pour l'utilisation de GMAIL

Connectez-vous sur votre compte GMAIL puis activez l'option : autoriser les applications non sécurisées.

#### Utilisateurs linux (Ubuntu, Xubuntu, Lubuntu etc.)

Tapez dans un terminal :

    sudo apt-get install msmtp

    sudo gedit /etc/msmtprc

et copiez le texte suivant puis enregistrez le fichier.

    account gmail
    host smtp.gmail.com
    tls on
    tls_certcheck off
    port 587
    auth login
    from votre adresse mail du compte gmail
    user votre adresse mail du compte gmail
    password Voir ci-dessous

Depuis le 30 mai 2022, ​​Google ne prends plus en charge l'utilisation d'applications ou d'appareils tiers qui vous demandent uniquement votre nom d'utilisateur et votre mot de passe pour vous connecter à votre compte Google.

- Activez la validation en deux étapes.

- Créez un mot de passe https://devanswers.co/create-application-specific-password-gmail/.

- Remplacez votre mot de passe par le nouveau.

Dans les préférences de AMC : Edition Préférences Courriel Méthode d'envoi , choisir sendmail et mettre le chemin :

    /usr/bin/msmtp

#### Utilisateurs Macintosh

Tapez dans un terminal :

    sudo port install msmtp

    sudo pico ~/.msmtprc

et copiez le texte suivant puis enregistrez le fichier.

    account default
    host smtp.gmail.com
    tls on
    tls_certcheck off
    port 587
    auth login
    from votre adresse mail du compte gmail
    user votre adresse mail du compte gmail
    password Voir ci-dessous

Depuis le 30 mai 2022, ​​Google ne prends plus en charge l'utilisation d'applications ou d'appareils tiers qui vous demandent uniquement votre nom d'utilisateur et votre mot de passe pour vous connecter à votre compte Google.

- Activez la validation en deux étapes.

- Créez un mot de passe https://devanswers.co/create-application-specific-password-gmail/.

- Remplacez votre mot de passe par le nouveau.

Modifiez les droits d'accès :

    sudo chown nom_utilisateur:nom_utilisateur/Users/nom_utilisateur/.msmtprc
    chmod 0600 /Users/nom_utilisateur/.msmtprc

Dans les préférences de AMC : Edition Préférences Courriel Méthode d'envoi , choisir sendmail et mettre le chemin :

    /opt/local/bin/msmtp

### Personnaliser Texmaker pour AMC

Si vous utilisez Texmaker, vous pouvez ajouter les raccourcis des environnements question et réponses en allant dans le Menu Utilisateur Personnaliser complétion puis entrez `\begin{question}{}` puis cliquez sur ajouter. Faites de même avec `reponses` et `reponseshoriz`.

### Le paquet `fp` par l'exemple

La documentation du paquet `fp` n'est pas très détaillée et compréhensible pour un grand débutant au langage latex. Voici les commandes expliquées par un exemple.

- La commande `\FPprint{\x}` permet d'afficher la valeur de x. Cependant, la commande `\num{...}` du paquet `siunitx` est préférable car elle affiche une virgule pour les nombres décimaux au lieu d'un point et groupe par trois les chiffres.

      \usepackage{siunitx}
      \sisetup{locale = FR,detect-all,quotient-mode=fraction,
               input-product=*, list-final-separator = { \translate{et} },
               list-pair-separator = { \translate{et} },range-phrase = { \translate{à} },
               separate-uncertainty = true,group-minimum-digits=3}

- La fonction `\FPrandom{\x}` calcule un nombre aléatoire.

- La fonction `\FPseed=12345` permet de modifier le système de génération de nombre aléatoire (choisir un entier fixé à sa convenance).

- La fonction `\FPeval{\x}{...}` permet de faire des calculs et d’affecter le résultat à la variable `\x`.

- La fonction `\FPtrunc{\y}{\x}{a}` transfère le nombre \x avec a chiffres après la virgule à la variable `\y`.

  On peut cumuler les fonctions `\FPeval` (avec toutes les fonctions de calcul) et `\FPtrunc`, comme dans l'exemple suivant qui choisit un réel au hasard entre `a` et `a+b`, en gardant `c` chiffres après la virgule :

      \FPeval{\x}{trunc(a+random*b,c)}

- La fonction `\FPround{\y}{\x}{a}` transfère le nombre `\x` avec a chiffres après la virgule à la variable \y et arrondit.

- La fonction `\FPclip{\y}{\x}` transfère le nombre `\x`, sans les zéros après la virgule, à la variable `\y`.

- Les fonctions `\FPadd{\x}{a}{b}`, `\FPdiv{\x}{a}{b}`, `\FPmul{\x}{a}{b}`, `\FPsub{\x}{a}{b}` attribuent à la variable `\x` la somme `a+b`, le quotient `a/b`, le produit `a*b`, et la différence `a-b`

- La fonction `\FPset{\x}{\y}` attribue à la variable `\x` (macro ou chaîne) la valeur `\y`

- `\FPabs{\x}{a}` renvoie la valeur absolue de `a`, \FPneg{\y}{a} renvoie l'opposé de `a`

- La commande `\FPiflt{\x}{\y} {instruction 1} \else {instruction 2} \fi` vérifie si `\x` est inférieur à `\y` dans ce cas l'instruction 1 est lancée sinon c'est l'instruction 2.

  Même principe les fonctions `\FPifeq{\x}{\y}`, `\FPifgt{\x}{\y}`, `\FPifneg{\x}`, `\FPifpos{\x}`, `\FPifzero{\x}`, `\FPifint{\x}` qui sont respctivement des tests d'égalité, de supériorité, de négativité, de positivité, de nullité ou d'entier.

- La commande `\FPlsolve{\x}{a}{b}` cherche la valeur réelle `\x` pour résoudre l'équation

      a*x+b=0.

  La commande `\FPqsolve{\x}{\y}{a}{b}{c}` cherche les valeurs réelles `\x` et `\y` pour résoudre l'équation

      a*x^2+b*x+c=0

  La commande `\FPcsolve{\x}{\y}{\z}{a}{b}{c}{d}` cherche les valeurs réelles `\x`, `\y` et `\z` pour résoudre l'équation

      a*x^3+b*x^2+c*x+d=0

  La commande `\FPqqsolve{\w}{\x}{\y}{\z}{a}{b}{c}{d}{e}` cherche les valeurs réelles `\w`, `\x`, `\y` et `\z` pour résoudre l'équation

      a*x^4+b*x^3+c*x^2+d*x+e=0

- La commande `\FPe` renvoie la valeur de e=2.71828182845904523, la commande `\FPpi` renvoie la valeur de pi.

- La commande `\FPexp{\x}{a}` attribue à la variable `\x` la valeur e^a, la commande `\FPln{\x}{a}` attribue à la variable `\x` la valeur ln(a)

- La commande `\FPpow{\x}{a}{b}` attribue à la variable `\x` la valeur a^b

  La commande `\FProot{\x}{a}{b}` attribue à la variable `\x` la valeur a^(1/b).

  On peut écrire `\FPeval{\x}{root(b,a)}`

- La commande `\FPpascal{\x}{a}` attribe à `\x` la ligne a du triangle de pascal.

- La commande `\FPsin{\x}{a}` attribue à `\x` la valeur du sinus de a qui est exprimé en radians (il existe une commande identique pour le cosinus (`cos`), la tangente (`tan`), la cotangente (`cot`), l'arcsinus (`arcsin`), l'arccosinus (`arccos`), l'arctangente (`arctan`), l'arccotangente (`arccot`)).

      \FPeval{\x}{sin(30*\FPpi/180)}\FPprint{\x}

- La commande `\FPsincos{\x}{\y}{a}` attribue à `\x` la valeur du sinus de `a` qui est exprimé en radians et `\y` la valeur du cosinus de `a` qui est exprimé en radians.

- La commande `\FPtancot{\x}{\y}{a}` attribue à `\x` la valeur de la tangente de `a` qui est exprimé en radians et `\y` la valeur de la cotangente de `a`.

- La commande `\FParcsincos{\x}{\y}{a}` attribue à `\x` la valeur de l’arc sinus(a), `\x` sera exprimé en radians, à `\y` la valeur de l’arc cosinus(a), `\y` sera exprimé en radians.

- La commande `\FParctancot{\x}{\y}{a}` attribue à `\x` la valeur de l’arc tangente(a), `\x` sera exprimé en radians, à `\y` la valeur de l’arc cotangente(a), `\y` sera exprimé en radians.