AMC

Correction automatisée de formulaires QCM

Divers

AMC et TeXLive «vanille» (ubuntu et debian)

AMC et TeXLive ne sont pas installés

wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
tar -xzf install-tl-unx.tar.gz
cd install-tl-20xxxx
sudo ./install-tl
[Note]Note

Remplacez xxxx par les chiffres ou appuyez sur la touche TABULATION.

[Note]Note

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.

sudo apt install equivs --no-install-recommends
mkdir -p /tmp/tl-equivs && cd /tmp/tl-equivs
equivs-control texlive-local	
wget -O texlive-local http://www.tug.org/texlive/files/debian-equivs-20xx-ex.txt
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 n'est pas installé et TeXLive est installé (/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érencesGénéralImpressionMéthode d'impressiondans des fichiers

PréférencesGénéralImpressionMéthode d'extractionpdftk / gs (ghostscipt) / qpdf (défaut) / sejda-console (non installé).

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
    [Note]Note

    Inutile de faire après la commande précédente :

    mogrify -rotate +90 -crop 50%x100% *.pbm

    toutes les pages seront traitées et renommer 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 https://project.auto-multiple-choice.net/attachments/450/Wiki_AMC_et_PythonTex.pdf et https://project.auto-multiple-choice.net/projects/auto-multiple-choice/wiki/Calcul_formel_avec_Python_dans_AMC

  • 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/vers/fichier/pythontex.py $AMC_JOBNAME.pytxcode
echo "***** END FILTER"
[Note]Note

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/vers/fichier/prePythonTex4AMC
%%AMC:jobspecific=1
%%AMC:latex_engine=pdflatex --shell-escape
[Avertissement]Avertissement

Certains modules python doivent être installés (sympy, pygments)

Un exemple avec python (issu de José OUIN : http://www.joseouin.fr)

%%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}

}   

\end{document}		
	

AMC et moodle

https://github.com/nennigb/amc2moodle

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 votre mot de passe du compte gmail

Dans les préférences de AMC : EditionPréférencesCourrielMé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 votre mot de passe du compte gmail

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 : EditionPréférencesCourrielMé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 UtilisateurPersonnaliser 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} calcul 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.

    [Note]Note

    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 arrondi.

  • 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} attribue à 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.