Python dans LaTeX et calcul symbolique

Tout ce qui concerne l'utilisation ou l'installation de LaTeX.

Modérateur: gdm_tex

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

Python dans LaTeX et calcul symbolique

Messagepar kib2 » Mardi 22 Juillet 2008, 17:04

Salut,

je viens de faire une grande découverte aujourd'hui, je vous laisse juge :

http://thewikiblog.appspot.com/blog/python-inside-latex
kib2
Hecto-utilisateur
 
Messages: 80
Inscription: Samedi 25 Novembre 2006, 22:44

Publicité

Re: Python dans LaTeX et calcul symbolique

Messagepar projetmbc » Mardi 22 Juillet 2008, 17:55

Cela a l'air très bien a priori, il faudra juste voir les limitations. L'idée me plait bien.

Merci pour cette info.
projetmbc
Péta-utilisateur
 
Messages: 1897
Inscription: Samedi 29 Décembre 2007, 00:58
Statut actuel: Actif et salarié | Enseignant

Re: Python dans LaTeX et calcul symbolique

Messagepar kib2 » Mardi 22 Juillet 2008, 18:27

Pour le moment, les seules limitations que je connais sont :

  • lorsqu'une expression est développée, on ne choisit pas l'ordre des termes dans le résultat (et encore, je n'ai pas trop potassé le manuel de SymPy);
  • les problèmes d'accents : pour le moment, je les code en dur comme ceci "\'e" pour un "é".
kib2
Hecto-utilisateur
 
Messages: 80
Inscription: Samedi 25 Novembre 2006, 22:44

Re: Python dans LaTeX et calcul symbolique

Messagepar francois » Mardi 22 Juillet 2008, 18:54

Ça l'air intéressant, mais je n'ai pas réussi à faire le marcher.

Si j'ai bien compris, la compilation du source fait appel à l'interpréteur python. Mais ce que j'aimerais bien savoir, c'est comment TeX récupère-t-il le résultat de l'interpréteur. Est-ce que ça marche ainsi par exemple : l'interpréteur est appelé, fait son travail et retourne le résultat dans un fichier texte externe que TeX récupère dans le source via un \input ? Autrement dit, pendant la compilation, est-ce qu'il y a des fichiers créés ?

Kib2, vu que tu as réussi à faire marcher le tout, pourrais tu s'il te plaît me mettre un petit exemple très simple et très basique pour que je teste.

Merci.
François Lafont
francois
Giga-utilisateur
 
Messages: 856
Inscription: Mercredi 20 Septembre 2006, 23:14
Localisation: Antony
Statut actuel: Actif et salarié | Enseignant

Re: Python dans LaTeX et calcul symbolique

Messagepar kib2 » Mardi 22 Juillet 2008, 19:59

Salut François,

je ne suis pas l'auteur du fichier "python.sty", mais à ce que j'ai vu, voilà en gros le processus que je suppose :

Soit n le nombre de balises \begin{python} ... \end{python} dans le document .tex initial ;
Pour i variant entre 1 et n, faire :
  • Le bout de code d'indice i (abbrégé BC_i) est recopié dans un fichier extérieur possédant le même nom que le fichier .tex, mais avec l'extension .py, par ex. si notre fichier est test.tex, il va créer test.py (et ce quel que soit le BC_i);
  • le fichier test.py est interprété par Python;
  • on récupèrer la sortie et on l'injecte dans le code source à la place de BC_i(certainement avec un /input);

Note : On se retrouve à la fin avec test.py qui correspond donc au dernier bout de code rencontré, soit BC_n.

En ce qui concerne un exemple tout simple ? En voilà un qui va t'afficher une variable (i) variant de 0 à 9 (inclus) :

Code: Tout sélectionner
\documentclass[a4]{article}
\usepackage{test}
\usepackage{python}

\begin{document}

\begin{python}
# -*- coding: utf-8 -*-
#!/usr/bin/python

for i in range(10):
    print r"$i = %s$\\"%i
\end{python}

\end{document}


Précision : je travaille toujours en UTF-8, même sous Windows.
Si tu travailles en latin-1, il faut changer "# -*- coding: utf-8 -*-" en "# -*- coding:latin-1 -*-".
kib2
Hecto-utilisateur
 
Messages: 80
Inscription: Samedi 25 Novembre 2006, 22:44

Re: Python dans LaTeX et calcul symbolique

Messagepar francois » Mardi 22 Juillet 2008, 22:43

Merci pour ta réponse kib2. Ça marche. Je ne sais pas ce que j'ai fichu avant car j'ai pourtant fait la même chose. Bref.
Heu, juste un truc dans ton exemple basique : la ligne \usepackage{test}, elle est inutile, non ?

Bon, sinon, c'est rigolo ce machin, utiliser du Python pour faire du code LaTeX. Mais effectivement, il n'y a pas de miracle.

Lors de la compilation de toto.tex, dès qu'il y a un environnement {python} le contenu est copié tel quel dans toto.py, interprété par python, la sortie est copié dans toto.py.out et mis dans le source via un \input. Dès qu'il y a un nouvel environnement {python}, les fichiers toto.py et toto.py.out sont effacés et réutilisés comme précédemment.

Par contre, je n'arrive pas à comprendre pourquoi ce code plante ?

Code: Tout sélectionner
\documentclass{article}
\usepackage{python}

\begin{python}
# -*- coding: utf-8 -*-
#!/usr/bin/python

print r"\def\A{%"
for i in range(10):
    print r"\noindent$i = %s$\\"%i
print r"}"
\end{python}

\begin{document}

Salut.

\A
\end{document}


Merci pour ton aide Kib2.
François Lafont
francois
Giga-utilisateur
 
Messages: 856
Inscription: Mercredi 20 Septembre 2006, 23:14
Localisation: Antony
Statut actuel: Actif et salarié | Enseignant

Re: Python dans LaTeX et calcul symbolique

Messagepar MB » Mardi 22 Juillet 2008, 22:58

Tu as essayé de mettre l'environnement python en dehors du préambule ? (à l'intérieur du document donc)
MB (Pas d'aide en Message Privé)
Merci d'utiliser $\LaTeX$ (voir ici) et d'éviter le style SMS pour la lisibilité des messages.
MB
Administrateur
 
Messages: 6890
Inscription: Samedi 28 Mai 2005, 13:23
Localisation: Créteil
Statut actuel: Actif et salarié | Enseignant

Re: Python dans LaTeX et calcul symbolique

Messagepar francois » Mardi 22 Juillet 2008, 23:17

Je viens de le faire et ça ne marche pas non plus. C'est bizarre ça car le fichier monsource.py.out contient exactement :

Code: Tout sélectionner
\def\A{%
\noindent$i = 0$\\
\noindent$i = 1$\\
\noindent$i = 2$\\
\noindent$i = 3$\\
\noindent$i = 4$\\
\noindent$i = 5$\\
\noindent$i = 6$\\
\noindent$i = 7$\\
\noindent$i = 8$\\
\noindent$i = 9$\\
}

C'est une définition valide pourtant j'ai le message : Undéfined control sequence \A ?
François Lafont
francois
Giga-utilisateur
 
Messages: 856
Inscription: Mercredi 20 Septembre 2006, 23:14
Localisation: Antony
Statut actuel: Actif et salarié | Enseignant

Re: Python dans LaTeX et calcul symbolique

Messagepar kib2 » Mardi 22 Juillet 2008, 23:32

Pas simple, il semblerait que LaTeX n'interprête pas le code généré par ton bout de code et ce, quel que soit l'endroit où l'on place le "\def" (avant ou après le préambule).

Je soupçonne LaTeX de faire une chose à la compilation (qui semble d'ailleurs assez logique): il traite d'abord les \def pour pouvoir ensuite les interpréter, puis les environnements, dont \begin{python}...\end{python}. Conséquence : il serait donc impossible par cette méthode de créer des defs.

Sinon, pour moi ça marche à la main avec ceci :

Code: Tout sélectionner
\def \A{
\noindent$i = 1$\\
\noindent$i = 2$\\
\noindent$i = 3$\\
}
kib2
Hecto-utilisateur
 
Messages: 80
Inscription: Samedi 25 Novembre 2006, 22:44

Re: Python dans LaTeX et calcul symbolique

Messagepar francois » Mardi 22 Juillet 2008, 23:51

kib2 a écrit:Je soupçonne LaTeX de faire une chose à la compilation (qui semble d'ailleurs assez logique): il traite d'abord les \def ... [couic]

Ah, là je ne crois pas. LaTeX a toujours une lecture séquentielle du source. Il ne traite pas tous les \def d'un source dans un premier temps, je suis à peu près sûr de moi. Mais du coup, je n'ai pas d'explication.
François Lafont
francois
Giga-utilisateur
 
Messages: 856
Inscription: Mercredi 20 Septembre 2006, 23:14
Localisation: Antony
Statut actuel: Actif et salarié | Enseignant

Re: Python dans LaTeX et calcul symbolique

Messagepar projetmbc » Mercredi 23 Juillet 2008, 09:00

Bonjour,
doit-on mettre le package dans le dossier de MikeTex ? Si oui comment doit-on faire ? Je n'arrive même pas à faire fonctionner l'exemple tout bête proposé par kib2.

Sinon pour l'histoire du code non interprété, cela vient peut-être de ce qu'en Python print "\a" va produire un bip. Il faudrait tester avec \\A au lieu de \A.
Il y a d'autres caractères gênant qu'il faut gérer de façon identique comme \t et \n (même s'ils ont suivis d'une lettre).

Pour les accents avec Python, il faut utiliser print u"Un texte accentué", attention au petit u juste avant les guillemets.

Cordialement.
Dernière édition par projetmbc le Mercredi 23 Juillet 2008, 10:58, édité 8 fois.
projetmbc
Péta-utilisateur
 
Messages: 1897
Inscription: Samedi 29 Décembre 2007, 00:58
Statut actuel: Actif et salarié | Enseignant

Re: Python dans LaTeX et calcul symbolique

Messagepar kib2 » Mercredi 23 Juillet 2008, 09:00

Alors je n'insiste pas car je ne connais pas la façon dont LaTeX procède son code.
Néanmoins, si ce n'est pas le cas, comment se fait-il que le morceau de code donné ne reconnaisse pas la nouvelle définition ?
kib2
Hecto-utilisateur
 
Messages: 80
Inscription: Samedi 25 Novembre 2006, 22:44

Re: Python dans LaTeX et calcul symbolique

Messagepar francois » Mercredi 23 Juillet 2008, 14:22

@Proetmbc : Attention, j'ai l'impression que ce package fonctionne sous Linux uniquement. En effet, dans python.sty, il y a la ligne :

Code: Tout sélectionner
\immediate\write18{cat \@pythoninclude\space\jobname.py | python > \jobname.py.out 2> \jobname.py.err}

On voit bien que ça utilise les tubes de communication | (les pipes en anglais), et ça je me demande si ça existe dans l'invite de commandes Windows. Il me semble que non.

Maintenant, si tu veux faire un essai basique (bien sûr il faut que Python soit installé sur ton PC) :
- tu mets l'exemple de Kib2, appelons toto.tex, dans un répertoire ;
- dans le même répertoire, tu mets le fichier python.sty ;
- tu compiles avec la commande pdflatex.exe -shell-escape toto.tex en espérant que l'option -shell-escape soit la bonne sous MikTeX 2.7 (pas sûr).


@Kib2 : Je n'ai pas d'explication, c'est un mystère pour moi ?!
François Lafont
francois
Giga-utilisateur
 
Messages: 856
Inscription: Mercredi 20 Septembre 2006, 23:14
Localisation: Antony
Statut actuel: Actif et salarié | Enseignant

Re: Python dans LaTeX et calcul symbolique

Messagepar kib2 » Mercredi 23 Juillet 2008, 19:46

@Proetmbc :

Non, il n'y a pas de problème avec la chaîne car elle est codée avec un r devant qui signifie 'raw string', donc pas besoin de l'échapper dans r"\def A{..."
Si on ne met pas ce r, il faudrait alors l'écrire "def \\A{...". En ce qui concerne l'essai avec une chaîne unicode, ça échoue aussi (il faut alors l'encoder en utf-8).

@François :

Ca devient imcompréhensible cette histoire, car je travaille sous Windows; cependant, un 'cat' en ligne de commande sur un fichier me renvoie bien son contenu (je ne savais même pas qu'une telle commande marcherait sous MS).
kib2
Hecto-utilisateur
 
Messages: 80
Inscription: Samedi 25 Novembre 2006, 22:44

Re: Python dans LaTeX et calcul symbolique

Messagepar francois » Mercredi 23 Juillet 2008, 21:15

À la limite le cat qui fonctionne sous MS, pourquoi pas. Mais un pipe (via |) qui fonctionne sous MS alors là je suis moins sûr. Mais peut-être que ça marche. Je ne sais pas. J'ai Windows sur mon PC, mais il faudrait que je redémarre, j'ai la flemme de tester.

Sinon pour notre petit exemple qui plante, il y a vraiment un truc qui m'échappe et je ne vois pas quoi. Pour moi, sur Linux, sans utiliser python.sty, je pense que cela revient à faire plus ou moins ça :

Code: Tout sélectionner
\documentclass{article}
\usepackage{fancyvrb}% pour écrire en verbatim (tel quel)

% le contenu de l'environnement VerbatimOut est écrit dans le fichier code.py
\begin{VerbatimOut}{code.py}
# -*- coding: utf-8 -*-
#!/usr/bin/python

print r"\def\A{%"
for i in range(10):
    print r"\noindent$i = %s$\\"%i
print r"}"
\end{VerbatimOut}

\immediate\write18{python code.py > code.py.out}% lance le script code.py et met le résultat dans code.py.out
\immediate\input{code.py.out}% on inclue code.py.out dans le source


\begin{document}

Salut.

\A

\end{document}

Or, ce code marche parfaitement. Donc je ne comprends pas.
François Lafont
francois
Giga-utilisateur
 
Messages: 856
Inscription: Mercredi 20 Septembre 2006, 23:14
Localisation: Antony
Statut actuel: Actif et salarié | Enseignant

Re: Python dans LaTeX et calcul symbolique

Messagepar gigiair » Mercredi 23 Juillet 2008, 21:33

francois a écrit: Mais un pipe (via |) qui fonctionne sous MS alors là je suis moins sûr.


Bien sûr que ça marche sous Ouindoze, depuis les toutes premières versions de DOS.
On peut toujours faire

Code: Tout sélectionner
> dir | more


et la liste des fichiers s'affiche page par page.

Le problème est qu'il y a peu de filtres comme more sous cet OS.
On peut avoir un grand nombre d'utilitaires linux en installant unxutils.

Il suffit de décompresser l'archive et d'inclure le chemin des exécutables dans le PATH :

Code: Tout sélectionner
PATH=%PATH%;<chemin vers UnxUtils>\UnxUtils\usr\local\wbin\


Et on peut lancer 126 utilitaires Unix en ligne de commande :

Code: Tout sélectionner
debjjr@zoe:~$ ls /mnt/wxpp/UnxUtils/usr/local/wbin/
Display all 126 possibilities? (y or n)
agrep.exe         egrep.exe         m4.exe            split.exe
ansi2knr.exe      env.exe           makedepend.exe    stego.exe
basename.exe      expand.exe        make.exe          su.exe
bash.dll          expr.exe          makemsg.exe       sum.exe
bash.exe          factor.exe        man.exe           sync.exe
.bashrc           fgrep.exe         md5sum.exe        tac.exe
bc.exe            find.exe          mkdir.exe         tail.exe
bison.exe         flex.exe          mkfifo.exe        tar.exe
bunzip2.exe       fmt.exe           mknod.exe         tee.exe
bzip2.exe         fold.exe          mvdir.exe         test.exe
bzip2recover.exe  fsplit.exe        mv.exe            touch.exe
cat.exe           gawk.exe          nl.exe            tr.exe
chgrp.exe         gclip.exe         od.exe            type.exe
chmod.exe         gplay.exe         paste.exe         uname.exe
chown.exe         grep.exe          patch.exe         unexpand.exe
cksum.exe         gsar.exe          pathchk.exe       uniq.exe
cmp.exe           gunzip.exe        pclip.exe         unrar.exe
comm.exe          gzip.exe          pr.exe            unshar.exe
compress.exe      head.exe          printenv.exe      unzip.exe
cp.exe            hexdump.exe       printf.exe        uudecode.exe
csplit.exe        id.exe            pwd.exe           uuencode.exe
cut.exe           indent.exe        README.txt        wc.exe
date.exe          install.exe       recode.exe        wget.exe
dc.exe            join.exe          rman.exe          wget.hlp
dd.exe            jwhois.exe        rmdir.exe         which.exe
df.exe            less.exe          rm.exe            whoami.exe
diff3.exe         lesskey.exe       sdiff.exe         xargs.exe
diff.exe          libfl.a           sed.exe           yes.exe
dircolors.exe     libfl.lib         seq.exe           zcat.exe
dirname.exe       ln.exe            shar.exe          zip.exe
du.exe            logname.exe       sleep.exe
echo.exe          ls.exe            sort.exe
JJR.
LaTeXien migrateur.
gigiair
Exa-utilisateur
 
Messages: 2438
Inscription: Samedi 08 Juillet 2006, 19:56
Localisation: Saint Bonnet Elvert
Statut actuel: Actif et salarié

Re: Python dans LaTeX et calcul symbolique

Messagepar francois » Mercredi 23 Juillet 2008, 21:35

Merci JJR, ça au moins c'est clair. J'ai condamné un peu rapidement windows. :)
François Lafont
francois
Giga-utilisateur
 
Messages: 856
Inscription: Mercredi 20 Septembre 2006, 23:14
Localisation: Antony
Statut actuel: Actif et salarié | Enseignant

Re: Python dans LaTeX et calcul symbolique

Messagepar kib2 » Jeudi 24 Juillet 2008, 08:32

gigiair: merci pour toutes ces précisions, ça a le mérite d'être très clair !

François: ton exemple est simple et fonctionne parfaitement; ça me permet de comprendre un peu mieux comment fonctionne python.sty.
kib2
Hecto-utilisateur
 
Messages: 80
Inscription: Samedi 25 Novembre 2006, 22:44

Re: Python dans LaTeX et calcul symbolique

Messagepar projetmbc » Jeudi 24 Juillet 2008, 09:27

Bonjour,

gigiair a écrit:On peut avoir un grand nombre d'utilitaires linux en installant unxutils.

Il suffit de décompresser l'archive et d'inclure le chemin des exécutables dans le PATH :

Code: Tout sélectionner
PATH=%PATH%;<chemin vers UnxUtils>\UnxUtils\usr\local\wbin\


Ok mais c'est quoi ce PATH ? Comment faut-il faire pour le changer ?

Par avance merci.
projetmbc
Péta-utilisateur
 
Messages: 1897
Inscription: Samedi 29 Décembre 2007, 00:58
Statut actuel: Actif et salarié | Enseignant

Re: Python dans LaTeX et calcul symbolique

Messagepar projetmbc » Jeudi 24 Juillet 2008, 09:29

Ok au temps pour moi...

En fait il suffit juste de taper le code indiqué dans la ligne de commande.
projetmbc
Péta-utilisateur
 
Messages: 1897
Inscription: Samedi 29 Décembre 2007, 00:58
Statut actuel: Actif et salarié | Enseignant

Suivante

Retourner vers LaTeX

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Google Adsense [Bot], Proximic [Spider], Yandex [Bot] et 18 invités