Problème de compilation latex et python
Bonjour à tous
Je vous expose mon problème.
Je souhaiterais intégrer du python dans un document tex. Pour ce faire, j'utilise le package "Pythontex".
Je précise que je suis sous windows 7 et que j'utilise comme éditeur Texmaker.
J'ai Python (version 3.4 ) qui est bien installé sur mon pc.
Ci-dessous, vous trouverez le fichier Tex
Lorsque je compile mon document, j'ai bien un pdf qui sort mais avec des ?? comme résultat au lieu de 2 par exemple pour la première instruction.
La question est pourquoi Python ne s’exécute pas ?
Aurais-je oublié de préciser quelque chose ?
Je vous remercie pour l'aide apportée.
Je vous expose mon problème.
Je souhaiterais intégrer du python dans un document tex. Pour ce faire, j'utilise le package "Pythontex".
Je précise que je suis sous windows 7 et que j'utilise comme éditeur Texmaker.
J'ai Python (version 3.4 ) qui est bien installé sur mon pc.
Ci-dessous, vous trouverez le fichier Tex
Lorsque je compile mon document, j'ai bien un pdf qui sort mais avec des ?? comme résultat au lieu de 2 par exemple pour la première instruction.
La question est pourquoi Python ne s’exécute pas ?
Aurais-je oublié de préciser quelque chose ?
Je vous remercie pour l'aide apportée.
\documentclass[12pt,a4paper]{article} \usepackage[utf8]{inputenc} \usepackage[french]{babel} \usepackage[T1]{fontenc} \usepackage{amsmath} \usepackage{amsfonts} \usepackage{amssymb} \usepackage{pythontex} % \usepackage[output-decimal-marker={,}]{siunitx} \mathcode`\.="013B \begin{document} \section{Pour s'échauffer :} $1+1 = $ \py{1+1} \section{Aller on essaye !} \noindent Respect des priorités : $1 + 2 \times 10 = $ \py{1+2*10} \\ Et les fractions ? $\frac{1}{3} + \frac{1}{2} \approx \py{1/3+1/2}$ \\ Et les racines carrées ? \begin{pycode} from math import sqrt \end{pycode} % $$\sqrt{2} \approx \py{ sqrt(2) } $$ % % Avec pycode il est possible de définir des variables utilisables dans tout le document % comme avec des variables globales \begin{pycode} a=2 b=5 \end{pycode} % Les variables : si $a=2$ et $b=5$ alors $a \times b = $ \py{a*b} \section{Un peu plus loin ...}\noindent La division euclidienne de $3551$ par $7$ : le quotient est $\py{3551//7}$ et le reste est $\py{3551%7}$ \\ Vérification : $507 \times 7 + 2 = \py{507 * 7 + 2}$ \end{document}
Réponses
-
Bonjour,
Il faut exécuter le code Python (via pythontex) à part puis relancer LaTeX pour récupérer et incorporer les résultats (cela remplace donc les ??).
Si, sous Debian unstable, je fais :pdflatex docu.tex pythontex --interpreter python:python3 docu pdflatex docu.tex
Sans '--interpreter python:python3', la deuxième commande compilerait le code avec Python 2.x, pas bon (1/3 = 0, etc.). À la place de 'pythontex --interpreter python:python3 docu', on pourrait aussi lancerpython3 /usr/share/texlive/texmf-dist/scripts/pythontex/pythontex3.py docu
J'ai corrigé plusieurs choses dans votre document, voir ci-dessous :- le \mathcode a l'air très louche ; je l'ai supprimé ;
- ne pas utiliser de double-dollars avec LaTeX ;
- ne surtout pas mettre les résultats des calculs hors des expressions mathématiques, ils en font partie ici !
$1 + 2 \times 10 = \py{1+2*10}$
Mauvais :$1 + 2 \times 10 = $ \py{1+2*10}
Code complet :\documentclass[12pt,a4paper]{article} \usepackage{lmodern} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage[french]{babel} \usepackage{pythontex} \begin{document} \section{Pour s'échauffer} $1+1 = \py{1+1}$ \section{Allez, on essaye !} \noindent Respect des priorités : $1 + 2 \times 10 = \py{1+2*10}$.\\ Et les fractions ? $\frac{1}{3} + \frac{1}{2} \approx \py{1/3+1/2}$.\\ Et les racines carrées ? % \begin{pycode} from math import sqrt \end{pycode} % \[ \sqrt{2} \approx \py{ sqrt(2) } \] % % Avec pycode il est possible de définir des variables utilisables dans tout le document % comme avec des variables globales \begin{pycode} a=2 b=5 \end{pycode} % Les variables : si $a=2$ et $b=5$, alors $a \times b = \py{a*b}$. \section{Un peu plus loin} \noindent Division euclidienne de $3551$ par $7$ : le quotient est $\py{3551//7}$ et le reste est $\py{3551%7}$.\\ Vérification : $507 \times 7 + 2 = \py{507 * 7 + 2}$. \end{document}
-
Bonjour ,
ça fonctionne , super ! (:P)
Merci Brian. -
Il n'y a pas de quoi. Autres petites choses :
- Si tu veux, comme c'est le cas en anglais, que le paragraphe suivant un titre de chapitre, section, sous-section, etc., n'ait jamais d'alinéa, au lieu de mettre \noindent à chaque fois, tu peux mettre ceci après la ligne \usepackage[french]{babel} :
\frenchsetup{IndentFirst=false}
(faire 'texdoc babel-french' pour voir les autres possibilités). - Si, plus globalement, tu veux supprimer les alinéas de début de paragraphe, tu peux utiliser soit \setlength{\parindent}{0pt} par exemple avant \begin{document}, soit le package parskip.
- Ne pas laisser de ligne blanche (= saut de paragraphe) avant une formule de type display ($\backslash [ \; \ldots \, \backslash ]$). La situation normale, qui produit un bon espacement vertical, est :
Texte texte texte... \[ formule “display” \] suite du texte...
- Si tu veux, comme c'est le cas en anglais, que le paragraphe suivant un titre de chapitre, section, sous-section, etc., n'ait jamais d'alinéa, au lieu de mettre \noindent à chaque fois, tu peux mettre ceci après la ligne \usepackage[french]{babel} :
-
Bonjour à tous
Grâce à vos indications, j'ai enfin réussi à compiler mon premier document avec du python.
Pour ce faire, on m'a conseillé de passer par le terminal et de lancer la ligne de commande suivante :
pdflatex doc.tex
pythontex doc
pdflatex .tex.
Le problème est que lorsque je compile un nouveau document, les ?? réapparaissent. Je me dis que je ne vais pas passer à chaque fois par le terminal (de texmaker).
J'ai configuré texmaker et je compile avec la commande suivante pdflatex :
pdflatex --shell-escape -synctex=1 -interaction=nonstopmode %.tex| python C:\texlive\2020\texmf-dist\scripts\pythontex\pythontex.py %.tex|pdflatex --shell-escape -synctex=1 -interaction=nonstopmode %.tex
Pouvez-vous me dire ce que je dois faire svp pour que cela fonctionne sans passer par le terminal ?
Je vous remercie pour vos aides.
[En typographie, on ne met jamais d'espace avant un point ou une virgule, mais toujours après. AD] -
Bonjour,
Ça marcherait peut-être mieux avec « ; » au lieu de « | », mais ce n'est a priori pas une très bonne solution. Il faudrait quelqu'un qui s'y connaît en TeXMaker, ce que je ne suis pas. Peut-être une piste serait-elle d'utiliser, pour lancer PythonTeX, la même infrastructure que pour compiler une bibliographie (où bibtex ou biber doit être exécuté entre deux commandes (pdf)latex, de la même façon). -
J'ai mis à jour mon message ci-dessus : la commande canonique pour invoquer PythonTeX avec Python 3 sous Debian unstable actuelle semble être :
pythontex --interpreter python:python3 docu
D'après 'texdoc pythontex', l'équivalent sous Windows serait :pythontex --interpreter "python:py -3" docu
Cette dernière commande suppose bien sûr que le
lanceur Python pour Windows a été activé lors de l'installation de Python.
Connectez-vous ou Inscrivez-vous pour répondre.
Bonjour!
Catégories
- 163.1K Toutes les catégories
- 8 Collège/Lycée
- 21.9K Algèbre
- 37.1K Analyse
- 6.2K Arithmétique
- 53 Catégories et structures
- 1K Combinatoire et Graphes
- 11 Sciences des données
- 5K Concours et Examens
- 11 CultureMath
- 47 Enseignement à distance
- 2.9K Fondements et Logique
- 10.3K Géométrie
- 62 Géométrie différentielle
- 1.1K Histoire des Mathématiques
- 68 Informatique théorique
- 3.8K LaTeX
- 39K Les-mathématiques
- 3.5K Livres, articles, revues, (...)
- 2.7K Logiciels pour les mathématiques
- 24 Mathématiques et finance
- 312 Mathématiques et Physique
- 4.9K Mathématiques et Société
- 3.3K Pédagogie, enseignement, orientation
- 10K Probabilités, théorie de la mesure
- 772 Shtam
- 4.2K Statistiques
- 3.7K Topologie
- 1.4K Vie du Forum et de ses membres