Divers
Précédent |  |

## Divers

### AMC et TeXLive «vanille» (ubuntu et debian)

#### AMC et TeXLive ne sont pas installés

- Installez texlive en ligne (voir ci-dessous) ou avec un DVD (https://www.xm1math.net/doculatex/install_texlive_ubuntu.html.

    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
Remplacez xxxx par les chiffres ou appuyez sur la touche TABULATION.

- Installez TeXLive en suivant le point 6 de cette documentation. (https://www.xm1math.net/doculatex/install_texlive_ubuntu.html.

| 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

- Ouvrez le lien et notez le numéro de version :

  https://www.tug.org/texlive/files/debian-equivs-20xx-ex.txt.

    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é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é).

### 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
  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
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
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 : 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 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 : 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}` 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
  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.

Précédent |  |
auto-multiple-choice-prepare | Sommaire |