Python & Latex
Bonsoir;
Le code ci-dessous fonctionnait il y 4/5 ans environ.
Il plante maintenant au niveau du displaystyle.
Python et Pyzo ont été mis à jour plusieurs fois depuis .
Qu'ai-je bien pu oublier ?
Ce code est censé produire l'image ci-jointe que j'avais conservé.
Cordialement,
Rescassol
Le code ci-dessous fonctionnait il y 4/5 ans environ.
Il plante maintenant au niveau du displaystyle.
Python et Pyzo ont été mis à jour plusieurs fois depuis .
Qu'ai-je bien pu oublier ?
Ce code est censé produire l'image ci-jointe que j'avais conservé.
import matplotlib.pyplot as plt from matplotlib import rc # Pour Latex from sympy import * n=6 H = Matrix(n,n,lambda i,j: Rational(1,1+i+j)) LH=latex(H,mat_str = "array") DH=H.det() NumDH=str(DH.p) DenDH=str(DH.q) rc('text',usetex=True) plt.figure() indice=str(n) plt.text(0.3,0.6,r"$H_{"+indice+"}=$", size=40, color='r', fontweight='bold') plt.text(0.4,0.3,r"$\displaystyle "+LH+"$", size=50, color='r', fontweight='bold') plt.text(0.25,0.1,r"$\displaystyle \mathrm{D\'e terminant}=\frac{" + NumDH+"}{" + DenDH + "}$", size=40, color='r', fontweight='bold', bbox=dict(boxstyle='roundtooth, pad=0.6', facecolor='fuchsia',ec='b', alpha=0.3)) plt.show()
Cordialement,
Rescassol
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Il y aurait sans doute moyen de mettre un "é" à la place du "\'e" mais il faudrait ajouter des codecs, c'est toujours pénible.
Math Coss, si ça marche chez toi, c'est que le code est correct, donc que c'est probablement une erreur d'installation ou de chemin, mais je ne vois pas quoi.
Voilà le message d'erreur complet: De plus, je ne vois pas pourquoi Python va chercher des chose dans un répertoire Julia.
Cordialement,
Rescassol
Peut-être faut-il mettre 'text.usetex' à True dans les paramètres matplotlib. J'ai un exemple comme ça qui traîne :
En rajoutant ce que tu dit, j'obtiens maintenant: Cordialement,
Rescassol
Bref, après avoir examiné le code TeX produit et compilé par matplotlib et procédé à quelques ajustements, je suis arrivé à ça (je charge amsmath pour pouvoir utiliser \text, ainsi que l'a proposé Éric) : Edit : utilisation de l'unité em plutôt que cm pour \arraycolsep et légère augmentation de la valeur donnée à \arraystretch.
Ça ne fonctionne toujours pas.
Avant de me donner le message d'erreur que j'ai déjà donné, j'ai droit à l'ouverture de la fenêtre ci-jointe sur fond noir.
Que je clique sur oui ou non ne change rien, matplotlib ouvre une fenêtre noire et sort avec le message d'erreur.
Cordialement,
Rescassol
Ton code comme le mien utilise usetex=True pour compiler les trucs de type texte avec LaTeX. Dans ton cas, il trouve MiKTeX. Ce dernier a une fonctionnalité d'installation des packages manquants à la volée ; à mon avis, c'est ça que ta capture d'écran montre. Tu devrais essayer d'installer toi-même les packages utilisés dans mon document avec le MiKTeX package manager ou je-ne-sais-quoi (il te manque peut-être 'fixcmex'). Quant au message d'erreur dont tu parles, je ne vois pas, car mon code n'utilise ni \' en mode maths, ni le backend PGF de matplotlib. Mais chaque problème l'un après l'autre.
@Math Coss
Je soupçonne un bug de matplotlib corrigé après la version installée chez toi. La mienne est 3.3.4. D'après le site de matplotlib, usetex supporte les entrées Unicode. La liste des versions a “fix various issues with usetex” au moins pour la version 3.2.2. Si tu regardes ton fichier matplotlib/texmanager.py, tu vas peut-être trouver la même chose que ceci dans la fonction make_tex(). Dans la version du fichier installée sur mon système, il n'y a pas le susceptible de provoquer l'erreur que tu as rapportée, mais il y a ceci : Et cela permet d'écrire un 'é' sans erreur dans le fichier .tex généré par matplotlib. Donc je suppose que l'erreur doit partir, soit en mettant à jour matplotlib, soit en ajoutant : Je précise que je ne peux pas tester cette dernière ligne avec ma version de matplotlib : c'est sans doute une technique obsolète.
Finalement, ceci fonctionne et donne l'image ci-jointe: J'ai réinstallé MikTex, Pyzo, et dans la foulée, TexMaker dont il n'est pas question ici.
J'ai installé aussi Python 3.91, mais suis resté sur Python 3.83, car il y a des problèmes avec les plus récents.
Par contre, tout est sur fond jaune, j'ai perdu mon fond blanc entouré d'une bande jaune et je ne maîtrise pas le cadrage, je vais chercher.
J'ai encore une question, à quoi set l'instruction "fig.set_size_inches(10, 9)" ?
Cordialement,
Rescassol
\hbox marche, évidemment, car TeX traite son contenu en mode horizontal (pas en mode maths). Mais ma solution prenait aussi soin d'arranger l'espacement entre les coefficients de la matrice, il me paraît dommage d'avoir jeté ça.
Concernant le fond jaune, que crois-tu que le « facecolor = 'gold' » que tu as ajouté fait ? Le fig.set_size_inches(10, 9) règle la taille de la figure, bien sûr. C'est sans doute incomptatible avec ton maxfig().
Voilà, c'est mieux comme ça: Je crois qu'on peut dire que le problème est résolu, merci Brian et Math Coss.
Cordialement,
Rescassol
Tu as raison, Brian, ça m'avait échappé, j'ai remis ça et j'obtiens la figure ci-jointe.
Si je met "text" à la place de "hbox", ça plante, même sans le "é".
Je n'ai plus tout le fond jaune.
Je te remercie pour tous tes efforts.
Cordialement,
Rescassol
Sous Linux, tu peux voir les fichiers .tex (et .dvi) produits par matplotlib dans ~/.cache/matplotlib/tex.cache/. Cela m'a permis de remarquer la substitution de polices lorsque fixcmex n'est pas chargé. Mais j'admets que les effets ne sont pas dramatiques ici.