Divers
Précédent |  |

## 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

| Note
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`.

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

- 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

| Note
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`. https://github.com/ascherer/tl-equivs 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

  | 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 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 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/absolu/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/absolu/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 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

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 Voir ci-dessous

| Avertissement
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

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

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

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

Précédent |  |
Anonymat des copies (uniquement avec LaTeX) | Sommaire |