Bonsoir,

Tout juste inscrit donc, pour commencer, bonjour à tous !

Ainsi que renseigné dans ma description, je suis professeur de mathématiques en lycée et utilisateur de LaTeX depuis de nombreuses années, bien qu'encore néophyte sur certains de ses aspects.

L'an dernier, accompagné par un collègue de maths, Jean-Marc Duquesnoy, je me suis mis à pythontex. D'une part, c'est cohérent avec l'enseignement de l'algorithmique et son implémentation en python du programme de BTS SIO 1re année, d'autre part cela permet de générer des sujets avec des éléments aléatoires ; un des bénéfices étant de limiter la "fraude de voisinage".

J'ai une solution fonctionnelle mais qui me paraît "lourde" et je me demande si vous auriez des idées de procédures autres, voire moins "lourdes".

Ma solution actuelle est constituée de deux fichiers :

  1. Un source LaTeX contenant du code python, nécessitant donc une triples compilation (1)LaTeX/(2)pythontex/(3)LaTeX
  2. Un script bash avec une variable d'environnement récupérée par le source LaTeX à la compilation, plus précisément aux compilations (1) et (3)

Ci-dessous, un ECM. Merci de vos éventuelles suggestions. Cordialement,

Fichier 1 : ECM_variable.tex


\documentclass{article}

%%% Accès aux variables d'environnement.
% Référence :
% https://tex.stackexchange.com/questions/62010/can-i-access-system-environment-variables-from-latex-for-instance-home
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\getenv}{om}
 {
  \sys_get_shell:nnN { kpsewhich ~ --var-value ~ #2 } { } \l_tmpa_tl
  \tl_trim_spaces:N \l_tmpa_tl
  \IfNoValueTF { #1 }
   {
    \tl_use:N \l_tmpa_tl
   }
   {
    \tl_set_eq:NN #1 \l_tmpa_tl
   }
 }
\ExplSyntaxOff

%%% Interaction avec python.
% Triple compilation nécessaire : LaTeX -> pythontex -> LaTeX
\usepackage{pythontex}

\begin{document}

\begin{pycode}
from random import randint

a,b = randint(1,5),randint(6,10)
\end{pycode}

\getenv[\NUM]{NUMERO}
Sujet \NUM

Calculer $\py{a}+\py{b}$

\end{document}

Fichier 2 : Plusieurs.sh


#!/bin/bash
nb=2
# Boucle pour le nombre de sujets demandés.
for i in `seq 1 $nb`; do
    # Variable d'environnement utilisée par le source LaTeX pour numéroter le sujet
    export NUMERO=$i
    # On copie le source LaTeX puis on effectue les trois compilations
    # nécessaires pour obtenir le PDF contenant sujet et corrigé.
    cp ECM_variable.tex exemplaire$i.tex
    pdflatex exemplaire$i.tex
    pythontex exemplaire$i.tex
    pdflatex exemplaire$i.tex
done

Utilisation : placer les deux fichiers dans le même répertoire, rendre exécutable le script bash et l'exécuter :-)

Posée 21 heures auparavant

mumblee's gravatar image

mumblee
112
Taux d'acceptation : 0%

Modifiée 21 heures auparavant

J'ai un souci avec mon bloc de code correspondant au script bash. Je suppose que le moteur du forum n'apprécie pas la première ligne. J'essaie de trouver une solution...

(21 heures auparavant) mumblee mumblee's gravatar image

Avec les bonnes balises, c'est plus lisible :-)

(21 heures auparavant) mumblee mumblee's gravatar image

@mumblee : bienvenue sur TeXnique !

(21 heures auparavant) Pathe ♦♦ Pathe's gravatar image

Pouvez-vous préciser en quoi votre solution est lourde ?

(20 heures auparavant) denis ♦♦ denis's gravatar image

Bonjour Denis,

Derrière mumblee c'est Fabrice Eudes :-)

L'appréciation "lourde" vient des triples compilations répétées. Lorsque je génère 38 sujets, cela prend donc un certain temps. Mais je ne sais pas si, avec la contrainte des valeurs aléatoires, on pourrait faire plus court...

(6 heures auparavant) mumblee mumblee's gravatar image
Soyez le premier à répondre à cette question !
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.