Почему python перестает отвечать, когда я использую LaTeX для рендеринга текста?

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

Код

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

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()

person Aldahunter    schedule 11.01.2017    source источник
comment
запустите в console/terminal/cmd.exe и, возможно, отобразит какое-то сообщение об ошибке.   -  person furas    schedule 12.01.2017
comment
@furas Разве command prompt не то же самое, что cmd.exe? Если это так, никакой ошибки не отображается, кроме всплывающего окна, сообщающего мне, что python.exe перестал работать, и закрыть программу.   -  person Aldahunter    schedule 12.01.2017


Ответы (1)


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

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

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

Попробуйте следующее в интерактивном сеансе 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-windows), вам нужно изменить 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

Редактировать: Если это не проблема, возможно, TeX не завершает работу. Попробуйте запустить скрипт. Когда вы получите диалоговое окно с ошибкой, посмотрите в диспетчере задач, не запущен ли еще процесс (la)tex. Посмотрите на код LaTeX, который вы используете, и попробуйте запустить его в LaTeX, чтобы убедиться, что он действительно действителен. Может зависнуть на ошибке...

person Roland Smith    schedule 11.01.2017
comment
К сожалению, мое возвращаемое значение равно 0, и информация о возврате (см. комментарий ниже, не был уверен, что она уместна) кажется хорошей. Хотя спасибо, это было очень полезно, так как я некоторое время задавался вопросом, был ли это мой PATH, но не знал, как проверить! Итак, если это не мой путь, что еще может быть? - person Aldahunter; 12.01.2017
comment
@AldaHunter Хорошая новость заключается в том, что это подтверждает, что латекс можно найти. :-) Попробуйте добавить явный exit() в конец вашего скрипта, хотя в этом нет необходимости. Я никогда не видел такого поведения, так что, вероятно, это какая-то странность, специфичная для ms-windows. - person Roland Smith; 12.01.2017
comment
Я добавил код exit(), но python.exe все еще перестает отвечать до того, как изображение будет сохранено :,-( - person Aldahunter; 12.01.2017
comment
@AldaHunter Посмотрите на процессы, о которых я упоминал в своем редактировании. Какие-либо процессы, связанные с tex, все еще работают? - person Roland Smith; 12.01.2017
comment
Когда я запускаю свой код, появляется python.exe (как и ожидалось), который, кажется, открывает kpsewhich.exe (который является standalone path lookup and variable extension for Kpathsea1 из его описания), затем он внезапно закрывается, прежде чем python.exe перестает работать! Я не могу найти какие-либо процессы LaTeX или TeX (хотя, возможно, они начинаются и заканчиваются слишком быстро, чтобы их можно было увидеть). И я не уверен, какой код тестировать в LaTeX, потому что, как вы можете видеть из минимального примера, я не использую никакого кода LaTeX (хотя он может быть где-то скрыт в файлах matplotlib). Это кажется очень странной проблемой. - person Aldahunter; 12.01.2017
comment
Давайте продолжим обсуждение в чате. - person Roland Smith; 12.01.2017