Problème d'appel de PythonTex

Tout ce qui concerne le langage TeX/LaTeX et ses variantes. Ce langage est utilisable sur le forum via les balises tex.
[participation réservée aux utilisateurs inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
Benoît
Utilisateur confirmé
Utilisateur confirmé
Messages : 10
Inscription : mardi 03 janvier 2023, 14:32
Statut actuel : Autre

[Résolu] Problème d'appel de PythonTex

Message non lu par Benoît »

Bonjour,
J'appelle du code Python en lui passant en paramètre une commande Latex :

Code : Tout sélectionner

\gr{\Cas[2,1]}
Avec :

Code : Tout sélectionner

\newcommand {\gr}[1]{\py{bc('#1')}}
Le code Python est le suivant :

Code : Tout sélectionner

\begin{pycode}
import betacode.conv
def bc(gbet) :
	print(gbet)
	a=betacode.conv.beta_to_uni(gbet)
	f = open("/mnt/chromeos/MyFiles/pi/grecpb.txt", "w")
	f.write(gbet)
	f.write(a)
	f.close()
\end{pycode}
print(gbet) donne bien la valeur retournée par \Cas[2,1], par contre dans le fichier grecpb.txt, lwrite(gbet) produit \Cas[2,1] non évalué !
Quelqu'un a-t-il une idée ?
Cordialement,
Benoît
gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2787
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: Problème d'appel de PythonTex

Message non lu par gigiair »

Je suis certain que ça va faire plaisir à Un bon petit de savoir qu'i y a des posteurs ici qui s'intéressent à la façon dont les macros TeX sont évaluées. En attendant qu'il t'explique, je pense qu'un conseil judicieux serait de lire son excellent ouvrage sur le sujet Apprendre à programmer en TeX. qui dit tout sur ce sujet, et bien d'autres encore.
JJR.
LaTeXien migrateur.
touhami
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 488
Inscription : dimanche 11 février 2007, 11:45

Re: Problème d'appel de PythonTex

Message non lu par touhami »

Bonjour.
Lorsque on utilise pythontex, à chaque fois que TeX rencontre une commande qui appelle python, il demande à ce dernier de faire son travail et il fait une pause en parallèle. Le programme python fait son travail indépendamment de TeX. Donc, le résultat qui est le fichier grecpb.txt n'est jamais vu par TeX.
Benoît
Utilisateur confirmé
Utilisateur confirmé
Messages : 10
Inscription : mardi 03 janvier 2023, 14:32
Statut actuel : Autre

Re: Problème d'appel de PythonTex

Message non lu par Benoît »

gigiair a écrit : dimanche 22 janvier 2023, 09:31 Je suis certain que ça va faire plaisir à Un bon petit de savoir qu'i y a des posteurs ici qui s'intéressent à la façon dont les macros TeX sont évaluées. En attendant qu'il t'explique, je pense qu'un conseil judicieux serait de lire son excellent ouvrage sur le sujet Apprendre à programmer en TeX. qui dit tout sur ce sujet, et bien d'autres encore.
Merci pour ce conseil de lecture . Ca a l'air effectivement subtil ! En fait, j'ai trouvé un package qui résoud mon problème :P
Benoît
Utilisateur confirmé
Utilisateur confirmé
Messages : 10
Inscription : mardi 03 janvier 2023, 14:32
Statut actuel : Autre

Re: Problème d'appel de PythonTex

Message non lu par Benoît »

touhami a écrit : dimanche 22 janvier 2023, 10:09 Bonjour.
Lorsque on utilise pythontex, à chaque fois que TeX rencontre une commande qui appelle python, il demande à ce dernier de faire son travail et il fait une pause en parallèle. Le programme python fait son travail indépendamment de TeX. Donc, le résultat qui est le fichier grecpb.txt n'est jamais vu par TeX.
Certes, mais ça n'explique pas le fait que le paramètre de la fonction appelée n'est pas évalué. Merci d'avoir pris le temps de me répondre.
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2203
Inscription : samedi 29 décembre 2007, 00:58

Re: Problème d'appel de PythonTex

Message non lu par projetmbc »

Bonjour.

Il faut nous fournir un ECM : voir cette page.
Benoît
Utilisateur confirmé
Utilisateur confirmé
Messages : 10
Inscription : mardi 03 janvier 2023, 14:32
Statut actuel : Autre

Re: Problème d'appel de PythonTex

Message non lu par Benoît »

projetmbc a écrit : lundi 23 janvier 2023, 08:31 Bonjour.

Il faut nous fournir un ECM : voir cette page.
Ok, voir la pièce jointe :
pbpython.tex
(451 octets) Téléchargé 87 fois
Merci
Benoît
touhami
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 488
Inscription : dimanche 11 février 2007, 11:45

Re: Problème d'appel de PythonTex

Message non lu par touhami »

Bonjour.
Voici comment dire à TeX de développer une commande avant son tour.

Code : Tout sélectionner

\expandafter\majuscules\expandafter{\expanded{\cellule[2,1]}}
ECM

Code : Tout sélectionner

\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage[a4paper]{geometry}
\usepackage{babel}
\usepackage{pythontex}
\usepackage{readarray}
\begin{pycode}
def f(x) :	
	return x.upper()
\end{pycode}
\newcommand{\majuscules}[1]{\py{f('#1')}}
\begin{document}
\majuscules{abc}
\def\tableau{%
abc dif xif}
\readarray*{\tableau}\cellule[2,1]
\cellule[3,1]
\expandafter\majuscules\expandafter{\expanded{\cellule[2,1]}}
\end{document}
Benoît
Utilisateur confirmé
Utilisateur confirmé
Messages : 10
Inscription : mardi 03 janvier 2023, 14:32
Statut actuel : Autre

Re: Problème d'appel de PythonTex

Message non lu par Benoît »

Super, merci !
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2203
Inscription : samedi 29 décembre 2007, 00:58

Re: Problème d'appel de PythonTex

Message non lu par projetmbc »

As-tu compris ?
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 995
Inscription : vendredi 12 juin 2009, 22:35
Statut actuel : Enseignant
Localisation : Chambéry

Re: Problème d'appel de PythonTex

Message non lu par un bon petit »

touhami a écrit : lundi 23 janvier 2023, 17:26 Bonjour.
Voici comment dire à TeX de développer une commande avant son tour.

Code : Tout sélectionner

\expandafter\majuscules\expandafter{\expanded{\cellule[2,1]}}
C'est assez maladroit. C'est lors de la définition de la macro qu'il faut développer au maximum.
C'est lourd et contraignant de le faire à chaque appel.
Il suffit de définir la macro ainsi:

Code : Tout sélectionner

\newcommand*\majuscules[1]{\expanded{\noexpand\py{f('#1')}}}
Programmer en TeX, TeXpérimental
Benoît
Utilisateur confirmé
Utilisateur confirmé
Messages : 10
Inscription : mardi 03 janvier 2023, 14:32
Statut actuel : Autre

Re: Problème d'appel de PythonTex

Message non lu par Benoît »

Merci à vous deux. Le principe est clair, il me manquait surtout la syntaxe exacte.

Benoît
touhami
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 488
Inscription : dimanche 11 février 2007, 11:45

Re: Problème d'appel de PythonTex

Message non lu par touhami »

un bon petit a écrit : mardi 24 janvier 2023, 08:59 C'est assez maladroit. C'est lors de la définition de la macro qu'il faut développer au maximum.
C'est lourd et contraignant de le faire à chaque appel.
Tout à fait.
Benoît a écrit : mardi 24 janvier 2023, 10:36 Merci à vous deux. Le principe est clair, il me manquait surtout la syntaxe exacte.
De rien.