2017-01-11 2 views
1

J'utilise actuellement python 2.7.11 exécutant mon code dans command prompt. J'utilise matplotlib pour créer des figures 3D pour mon document LaTeX. Cependant quand j'essaye d'employer LaTeX pour rendre mon texte pour les images que je reçois un message d'erreur de Windows m'indiquant que python.exe a cessé de fonctionner et je dois fermer le programme. Pourquoi cela se passe-t-il et comment puis-je le réparer? Je ne suis pas tec savvy, donc des réponses simples seraient appréciées. Merci d'avance.Pourquoi python ne répond plus lorsque j'utilise LaTeX pour afficher du texte?

code

Le code minimum pour cette erreur est:

from mpl_toolkits.mplot3d import Axes3D 
import numpy, matplotlib, matplotlib.pyplot as pyplot 

matplotlib.rcParams['text.usetex'] = True 

Module_Colour = '#F0AE1E' 

fig = pyplot.figure() 
ax = fig.add_subplot(111, projection='3d') 

X_arr = numpy.array([1.0,0.0,0.0]) 
Y_arr = numpy.array([0.0,1.0,0.0]) 
Z_arr = numpy.array([0.0,0.0,1.0]) 
O_arr = numpy.array([0.0,0.0,0.0]) 

pyplot.quiver(O_arr,O_arr,O_arr,X_arr,Y_arr,Z_arr, 
       pivot='tail', length=1.0, linewidth=2.5, 
       color = Module_Colour) 

pyplot.savefig('C:/Users/alexd/Documents/University/Physics/Physics Figures/fig.jpeg', bbox_inches='tight') 
pyplot.show() 
+0

s'exécute dans console/terminal/cmd.exe et peut-être qu'il affiche un message d'erreur. – furas

+0

@furas L'invite de commande n'est-elle pas la même que celle de cmd.exe? Si c'est le cas, aucune erreur ne s'affiche à part une fenêtre qui apparaît pour me dire que 'python.exe' a cessé de fonctionner et de fermer le programme. – Aldahunter

Répondre

2

Notez que pyplot.show()blocs jusqu'à ce que vous fermez la fenêtre.

Si vous générez des tracés pour vos documents LaTeX, supprimez simplement pyplot.show().

Assurez-vous que Python peut effectivement trouverlatex, dvipng et gs. (Je m'attendrais à ce que vous receviez un message d'erreur si ce n'est pas le cas, mais je n'ai pas utilisé python/matplotlib sur ms-windows, donc je ne suis pas sûr.) Leur emplacement devrait être dans votre environnement PATH variable. Voir le matplotlib documentation on environment variables.

Effectuez les opérations suivantes dans une session interactive Python:

>>> import subprocess 
>>> subprocess.call(['latex', '--version']) 
pdfTeX 3.14159265-2.6-1.40.17 (TeX Live 2016) 
kpathsea version 6.2.2 
Copyright 2016 Han The Thanh (pdfTeX) et al. 
There is NO warranty. Redistribution of this software is 
covered by the terms of both the pdfTeX copyright and 
the Lesser GNU General Public License. 
For more information about these matters, see the file 
named COPYING and the pdfTeX source. 
Primary author of pdfTeX: Han The Thanh (pdfTeX) et al. 
Compiled with libpng 1.6.21; using libpng 1.6.21 
Compiled with zlib 1.2.8; using zlib 1.2.8 
Compiled with xpdf version 3.04 
0 

Les choses sur la version TeX pourrait bien être différent; Cela dépend de la version de la distribution TeX que vous utilisez. Le plus important est la dernière ligne; ceci est la valeur de retour de subprocess.call et si doit être 0, indiquant que la commande ne renvoie aucune erreur. Si le subprocess.call déclenche une exception (comme ci-dessous, pas sûr qu'il en sera de même sur ms-windows), vous devez modifier le PATH pour que python puisse trouver LaTeX et les autres choses dont il a besoin.

>>> subprocess.call(['foo', '--version']) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/subprocess.py", line 168, in call 
    return Popen(*popenargs, **kwargs).wait() 
    File "/usr/local/lib/python2.7/subprocess.py", line 390, in __init__ 
    errread, errwrite) 
    File "/usr/local/lib/python2.7/subprocess.py", line 1024, in _execute_child 
    raise child_exception 
OSError: [Errno 2] No such file or directory 

Edit: Si ce n'est pas le problème, il se pourrait que c'est TeX qui ne Démissionner. Essayez d'exécuter le script. Lorsque vous obtenez la boîte de dialogue d'erreur, regardez dans le gestionnaire de tâches s'il existe encore un processus (la) tex en cours d'exécution. Regardez le code LaTeX que vous utilisez, et essayez de l'exécuter dans LaTeX pour vérifier qu'il est réellement valide. Il peut se bloquer sur une erreur ...

+0

Malheureusement, ma valeur de retour est '0' et l'information de retour (voir le commentaire ci-dessous, je ne sais pas si c'est pertinent) semble bonne. Bien que je vous remercie, c'était très utile car je me demandais si c'était mon «PATH» pendant un moment, mais je ne savais pas comment vérifier! Donc, si ce n'est pas mon chemin, que peut-il être d'autre? – Aldahunter

+0

'>>> sous-processus d'importation (nouvelle ligne) >>> sous-processus.call (['latex', '--version']) (nouvelle ligne) MiKTeX-pdfTeX 2.9.6100 (1.40.17) (MiKTeX 2.9.6100 64 bits) (nouvelle ligne) Copyright (C) 1982 D. E. Knuth, (C) 1996-2016 Han Le Thanh (nouvelle ligne) TeX est une marque déposée de l'American Mathematical Society. (nouvelle ligne) compilé avec zlib version 1.2.8; en utilisant 1.2.8 (nouvelle ligne) compilé avec libpng version 1.6.24; en utilisant 1.6.24 (nouvelle ligne) compilé avec la version 0.46.0 poppler (nouvelle ligne) compilé avec la version 8.4 jpeg (nouvelle ligne) 0' – Aldahunter

+0

@AldaHunter Les bonnes nouvelles sont que cela confirme que le latex peut être a trouvé. :-) Essayez d'ajouter explicitement 'exit()' à la fin de votre script, bien que cela ne soit pas nécessaire. Je n'ai jamais vu ce comportement, donc c'est probalby certains étranges spécifiques ms-windows. –