AMC et pythontex

Added by Francois Camus over 10 years ago

Bonsoir,

j'ai pris l'habitude de mener mes calculs intégrés a mes fichiers latex à l'aide de pythontex. La compilation se passe alors en 3 étapes :
  1. pdflatex foo.tex => fabrique le fichier foo.pytxcode
  2. python pythontex.py foo.pytxcode => execute le code python
  3. pdflatex foo.tex => fabrique le pdf en intégrant les résultats de l'execution python

Comment serait il possible de lancer cette succession de commandes quand on lance "Mettre à jour les documents" dans AMC ?

Merci d'avance
F Camus


Replies (11)

RE: AMC et pythontex - Added by Alexis Bienvenüe over 10 years ago

Une solution consiste à rajouter construire une commande qui prépare le tex, et d'avertir AMC qu'il faut l'utiliser. Je vous laisse tester et corriger les idées suivantes. N'hésitez pas à créer une page de wiki pour documenter le résultat, avec éventuellement un exemple : cela pourra donner des idées à d'autres utilisateurs.
  1. Créer un fichier exécutable /home/toto/prepython qui contient à peu près :
    #! /bin/sh
    SRC=$1
    pdflatex $SRC
    python pythontex.py `basename $SRC .tex`.pytxcode
    
  2. Ajouter dans les premières lignes du fichier source les lignes suivantes :
    %%AMC:preprocess_command=/home/toto/prepython
    %%AMC:latex_engine=pdflatex
    

Le script prepython peut modifier le fichier LaTeX donné en argument sans problème, car il s'agit d'une copie du fichier source du projet.
Si vous voulez pouvoir transmettre votre projet facilement avec quelqu'un d'autre, vous pouvez aussi placer votre prepython dans le répertoire projet (donc un exemplaire dans tous les projets concernés), et utiliser

%%AMC:preprocess_command=prepython
%%AMC:latex_engine=pdflatex

RE: AMC et pythontex - Added by Alexis Bienvenüe over 10 years ago

Une remarque : avec la solution ci-dessus, le script prepython doit donner exactement le même résultat à chaque fois qu'il est appelé (en particulier, ne pas mettre d'actions aléatoires dedans)...

RE: AMC et pythontex - Added by Francois Camus over 10 years ago

Merci de votre réactivité. Cela semble prometteur :
quand je lance pdflatex foo.tex, le script est bien exécuté et je retrouve les résultats du code python dans le pdf.
Mais je n'obtiens pas de résultats du code python quand je lance la compile de foo.tex depuis AMC

je vais continuer à chercher de ce coté.

Merci à vous

F Camus

RE: AMC et pythontex - Added by Alexis Bienvenüe over 10 years ago

Pouvez-vous donner un petit exemple de fichier source à tester ?

RE: AMC et pythontex - Added by Francois Camus over 10 years ago

Bonjour,
ci joint un exemple ECM.tex contenant un peu de python.

j'utilise AMC 1.2.1 (svn:1403).
voici mon script prePythonTex4AMC:

#! /bin/sh
SRC=$1
rm -r ./pythontex-files-*
pdflatex $SRC
python ~/texmf/tex/pythontex/pythontex.py `basename $SRC .tex`.pytxcode

Le script fonctionne correctement lorsque je le lance par
pdflatex -shell-escape ECM.TEX en ayant pris soin de placer dans le préambule : %\immediate\write18{/chemin/vers/prePythonTex4AMC \jobname .tex}
mais depuis AMC, l'execution du python a bien lieu (creation de sous-repertoire /pythontex-files-*), mais le résultat n'est pas récupéré lors de la derniere compilation latex.

Merci pour votre aide
F Camus

ECM.tex - Exemple incluant du code python (685 Bytes)

RE: AMC et pythontex - Added by Alexis Bienvenüe over 10 years ago

Finalement, ce n'était pas aussi simple que je l'avais imaginé.
J'ai un peu modifié AMC, pour arranger cela. À partir de la révision r1495, vous pouvez mettre dans le répertoire projet un fichier prePythonTex4AMC (il faut toujours qu'il soit exécutable) comme cela :

#! /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" 
pythontex $AMC_JOBNAME.pytxcode
echo "***** END FILTER" 

(les echo sont juste là pour aider au débogage) et mettre a début de votre fichier source les lignes suivantes :
%%AMC:preprocess_command=prePythonTex4AMC
%%AMC:jobspecific=1
%%AMC:latex_engine=pdflatex --shell-escape

RE: AMC et pythontex - Added by Alexis Bienvenüe over 10 years ago

Attention également à ne pas utiliser de caractère _ dans les identifiants de question...

RE: AMC et pythontex - Added by Francois Camus over 10 years ago

SUPER !

j'ai du modifié le script pour l'appel de pythontex.py :

#! /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/pythontex.py $AMC_JOBNAME.pytxcode
echo "***** END FILTER" 

Merci pour votre réactivité et le temps passé, cela va me faciliter la vie .
Je vais ajouter un wiki.

RE: AMC et pythontex - Added by Francois Camus over 10 years ago

Bonsoir,

je relance la discussion et je reviens vers vous car je n'arrive pas à corriger un QCM contenant du python comme décrit ci-dessus :
Après saisie des copies (manuelle pour ma part), je lance la correction (pas d'erreurs apparentes) mais toutes les notes sont vides.

Merci d'avance à celui qui pourrait me donner des pistes.

F Camus

RE: AMC et pythontex - Added by Francois Camus over 10 years ago

Bonsoir,

Bon, bon , Je progresse, à mon rythme et sans trop comprendre.

Rappel : après être passé à la version 1.2.1495 (svn:1495), la compilation de QCM utilisant du code python fonctionne correctement, mais pas de correction possible de QCM (avec ou sans python)

j'ai réinstallé la version stable 1.2.1 (svn:1403), je retrouve la correction de QCM (avec ou sans python), mais je reviens à une version sans compilation de QCM avec python.

Quelqu'un peut il me dire si j'ai mal fait quelquechose ?

Merci

RE: AMC et pythontex - Added by Alexis Bienvenüe over 10 years ago

Pouvez-vous fournir un exemple complet minimal (fichier source complet le plus petit possible, et un scan) qui montre le problème ?

(1-11/11)