2017-01-11 17 views
1

Я в настоящее время использую python 2.7.11, управляющий моим кодом в command prompt. Я использую matplotlib, чтобы создать 3D-фигуры для моего документа LaTeX. Однако, когда я пытаюсь использовать LaTeX для визуализации моего текста для изображений, я получаю сообщение об ошибке Windows, сообщающее мне, что python.exe прекратил работу, и я должен закрыть программу. Почему это происходит и как я могу это исправить? Я не уверен в себе, поэтому простые ответы будут оценены. Заранее спасибо.Почему python не реагирует, когда я использую LaTeX для рендеринга текста?

Код

Минимальный код этой ошибки:

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

запустить в консоли/терминал/cmd.exe и, возможно, отображает сообщение об ошибке. – furas

+0

@furas «Командная строка» не совпадает с 'cmd.exe'? Если это так, никакая ошибка не отображается, кроме окна, которое появляется, чтобы сказать мне, что 'python.exe' перестает работать и закрывает программу. – Aldahunter

ответ

2

Обратите внимание, что pyplot.show()блоки не до закрытия окна.

Если вы создаете участки для своих документов LaTeX, просто удалите pyplot.show().

Убедитесь, что Python может на самом деле найтиlatex, dvipng и gs. (Я ожидаю, что вы получите сообщение об ошибке, если это не так, но я не использовал python/matplotlib для ms-windows, поэтому я не уверен.) То есть их местоположение должно быть в вашей среде PATH переменная. См. matplotlib documentation on environment variables.

Попробуйте следующее в интерактивной сессии 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 

Материал о версии TeX может также быть различным; это зависит от того, какую версию дистрибутива TeX вы используете. Самое важное - последняя строка; это возвращаемое значение subprocess.call и должно быть 0, что указывает на то, что команда не возвращает ошибку.

Если subprocess.call вызывает исключение (например, ниже, не уверен, будет ли оно одинаковым в ms-окнах), вам необходимо изменить PATH, чтобы python мог найти LaTeX и другие необходимые ему вещи.

>>> 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: Если это не проблема, это может быть, что это TeX, не курить. Попробуйте запустить скрипт. Когда вы получите диалоговое окно с ошибкой, загляните в диспетчер задач, если все еще выполняется процесс (la) tex. Посмотрите на код LaTeX, который вы используете, и попробуйте запустить его в LaTeX, чтобы убедиться, что он действительно действителен. Это может повесить на ошибку ...

+0

К сожалению, мое возвращаемое значение равно '0', а информация о возврате (см. Комментарий ниже, не была уверена, если это релевантно) кажется хорошим. Хотя, спасибо, это было очень полезно, поскольку мне было интересно, если это была моя «ПУТЬ» на некоторое время, но не знала, как проверить! Итак, если это не мой путь, что еще может быть? – Aldahunter

+0

'>>> импортный подпроцесс (новая строка) >>> subprocess.call (['latex', '--version']) (новая строка) MiKTeX-pdfTeX 2.9.6100 (1.40.17) (MiKTeX 2.9.6100 64-бит) (новая строка) Copyright (C) 1982 D. E. Knuth, (C) 1996-2016 Han Thanh (новая строка) TeX является товарным знаком Американского математического общества. (новая строка) составлен с zlib версии 1.2.8; используя 1.2.8 (новая строка) скомпилировано с версией libpng 1.6.24; используя 1.6.24 (новая линия) скомпилирован с Poppler версии 0.46.0 (новая линия) скомпилированные с Jpeg версии 8.4 (новая линия) 0' – Aldahunter

+0

@AldaHunter Хорошая новость заключается в том, что это подтверждает, что латекс может быть найденный. :-) Попробуйте добавить явный 'exit()' в конце вашего скрипта, хотя это не обязательно. Я никогда не видел такого поведения, так что это связано с некоторыми странностями. –