Невозможно использовать латекс в графиках Python — RuntimeError: LaTeX не смог обработать следующую строку: b'lp'

Я хочу использовать латекс для меток фигур, но получаю сообщение об ошибке
RuntimeError: LaTeX не смог обработать следующую строку: b'lp'
Вот полный отчет, сгенерированный LaTeX: < br/> и все (не вижу отчета)

Изменить: вот вся ошибка, которую я получаю:

Traceback (most recent call last):
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\backends\backend_qt5agg.py", line 197, in __draw_idle_agg
    FigureCanvasAgg.draw(self)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py", line 464, in draw
    self.figure.draw(self.renderer)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\artist.py", line 63, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\figure.py", line 1144, in draw
    renderer, self, dsu, self.suppressComposite)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\image.py", line 139, in _draw_list_compositing_images
    a.draw(renderer)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\artist.py", line 63, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\axes\_base.py", line 2426, in draw
    mimage._draw_list_compositing_images(renderer, self, dsu)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\image.py", line 139, in _draw_list_compositing_images
    a.draw(renderer)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\artist.py", line 63, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\axis.py", line 1138, in draw
    renderer)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\axis.py", line 1078, in _get_tick_bboxes
    extent = tick.label1.get_window_extent(renderer)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\text.py", line 967, in get_window_extent
    bbox, info, descent = self._get_layout(self._renderer)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\text.py", line 353, in _get_layout
    ismath=False)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py", line 230, in get_text_width_height_descent
    renderer=self)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\texmanager.py", line 676, in get_text_width_height_descent
    dvifile = self.make_dvi(tex, fontsize)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\texmanager.py", line 423, in make_dvi
    report))
RuntimeError: LaTeX was not able to process the following string:
b'lp'
Here is the full report generated by LaTeX: 

Вот мой код:

import numpy as np
from matplotlib import rc
import matplotlib.pyplot as plt
plt.close('all')

rc('text', usetex = True)

mu = np.linspace(0,10,100)
eta = mu**2

fig, ax = plt.subplots()
ax.plot(mu,eta,label= r'$\eta (\mu)$')
ax.set_title('Test')
ax.legend()
  • Я установил MiKTeX, добавил его в переменные среды согласно https://docs.alfresco.com/4.2/tasks/fot-addpath.html.
  • Я проверил пакеты MiKTeX, где нашел "miktex-dvipng-bin-x64-2.9" в категории "Исполняемые файлы \MiKTeX". Я делаю вывод, что у меня есть dvipng.
  • Я скачал Ghostcript, который также добавил в переменные окружения.
  • Я попытался скомпилировать латексный скрипт в pdf с помощью texworks, и он работал просто отлично, из чего я делаю вывод, что LaTeX установлен правильно.
  • Из https://matplotlib.org/1.4.1/users/usetex.html, это все, что мне нужно было...
  • Я попытался удалить каталог .matplotlib/tex.cache
  • я пробовал писать
import matplotlib as mpl
mpl.rcParams['text.usetex']=True

вместо

from matplotlib import rc
rc('text', usetex = True)

но это дало тот же результат.

  • Переключение
rc('text', usetex = True)

to

rc('text', usetex = False)

предотвращает ошибку, но мои этикетки не написаны латексом...

После долгих поисков в Google у меня мало идей. Может ли кто-нибудь помочь мне, пожалуйста?

Моя конфигурация:
- Python 3.6 (я запускаю свой код в spyder)
- MiKTeX 2.9
- Ghostscript 9.50
- Windows 10
- Редактировать: matplotlib 2.0. 2

Изменить: при обновлении до matplotlib 3.1.1 я получаю следующую ошибку:

Traceback (most recent call last):
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\texmanager.py", line 304, in _run_checked_subprocess
    stderr=subprocess.STDOUT)
  File "C:\Users\Vincent\Anaconda3\lib\subprocess.py", line 336, in check_output
    **kwargs).stdout
  File "C:\Users\Vincent\Anaconda3\lib\subprocess.py", line 403, in run
    with Popen(*popenargs, **kwargs) as process:
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 209, in __init__
    super(SubprocessPopen, self).__init__(*args, **kwargs)
  File "C:\Users\Vincent\Anaconda3\lib\subprocess.py", line 707, in __init__
    restore_signals, start_new_session)
  File "C:\Users\Vincent\Anaconda3\lib\subprocess.py", line 992, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] Le fichier spécifié est introuvable

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\backends\backend_qt5.py", line 505, in _draw_idle
    self.draw()
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py", line 388, in draw
    self.figure.draw(self.renderer)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\artist.py", line 38, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\figure.py", line 1709, in draw
    renderer, self, artists, self.suppressComposite)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\image.py", line 135, in _draw_list_compositing_images
    a.draw(renderer)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\artist.py", line 38, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\axes\_base.py", line 2607, in draw
    self._update_title_position(renderer)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\axes\_base.py", line 2556, in _update_title_position
    if title.get_window_extent(renderer).ymin < top:
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\text.py", line 890, in get_window_extent
    bbox, info, descent = self._get_layout(self._renderer)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\text.py", line 291, in _get_layout
    ismath="TeX" if self.get_usetex() else False)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py", line 201, in get_text_width_height_descent
    s, fontsize, renderer=self)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\texmanager.py", line 448, in get_text_width_height_descent
    dvifile = self.make_dvi(tex, fontsize)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\texmanager.py", line 338, in make_dvi
    texfile], tex)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\texmanager.py", line 308, in _run_checked_subprocess
    'found'.format(command[0])) from exc
RuntimeError: Failed to process string with tex because latex could not be found
Traceback (most recent call last):
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\texmanager.py", line 304, in _run_checked_subprocess
    stderr=subprocess.STDOUT)
  File "C:\Users\Vincent\Anaconda3\lib\subprocess.py", line 336, in check_output
    **kwargs).stdout
  File "C:\Users\Vincent\Anaconda3\lib\subprocess.py", line 403, in run
    with Popen(*popenargs, **kwargs) as process:
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 209, in __init__
    super(SubprocessPopen, self).__init__(*args, **kwargs)
  File "C:\Users\Vincent\Anaconda3\lib\subprocess.py", line 707, in __init__
    restore_signals, start_new_session)
  File "C:\Users\Vincent\Anaconda3\lib\subprocess.py", line 992, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] Le fichier spécifié est introuvable

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\backends\backend_qt5.py", line 505, in _draw_idle
    self.draw()
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py", line 388, in draw
    self.figure.draw(self.renderer)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\artist.py", line 38, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\figure.py", line 1709, in draw
    renderer, self, artists, self.suppressComposite)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\image.py", line 135, in _draw_list_compositing_images
    a.draw(renderer)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\artist.py", line 38, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\axes\_base.py", line 2607, in draw
    self._update_title_position(renderer)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\axes\_base.py", line 2556, in _update_title_position
    if title.get_window_extent(renderer).ymin < top:
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\text.py", line 890, in get_window_extent
    bbox, info, descent = self._get_layout(self._renderer)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\text.py", line 291, in _get_layout
    ismath="TeX" if self.get_usetex() else False)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py", line 201, in get_text_width_height_descent
    s, fontsize, renderer=self)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\texmanager.py", line 448, in get_text_width_height_descent
    dvifile = self.make_dvi(tex, fontsize)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\texmanager.py", line 338, in make_dvi
    texfile], tex)
  File "C:\Users\Vincent\Anaconda3\lib\site-packages\matplotlib\texmanager.py", line 308, in _run_checked_subprocess
    'found'.format(command[0])) from exc
RuntimeError: Failed to process string with tex because latex could not be found

person Vincent mahé    schedule 05.11.2019    source источник
comment
Должно быть больше одной строки ошибок? Можете показать полностью?   -  person ImportanceOfBeingErnest    schedule 05.11.2019
comment
Спасибо за ваш ответ. Я отредактировал свой вопрос, чтобы показать всю ошибку, которую я получаю. Кроме того, я продолжал гуглить свою проблему и узнал о бэкэндах matplotlib. Я не знаком с этим, вы не знаете, может ли это быть причиной моей проблемы?   -  person Vincent mahé    schedule 05.11.2019
comment
Нет, это не имеет ничего общего с бэкендами. Речь идет о вашей установке латекса. Но если ошибка, которую возвращает латекс, — это просто пустая строка, боюсь, я понятия не имею, в чем именно проблема.   -  person ImportanceOfBeingErnest    schedule 05.11.2019
comment
Какая версия матплотлиба? Вы цитируете инструкции двух основных версий назад.   -  person Jody Klymak    schedule 05.11.2019
comment
Моя версия matplotlib 2.0.2   -  person Vincent mahé    schedule 06.11.2019
comment
Я обновился до matplotlib 3.1.1 и получаю другую ошибку, которая, кажется, указывает на то, что у меня нет латекса... Я пишу правку в конце исходного вопроса, чтобы показать вам всю ошибку   -  person Vincent mahé    schedule 06.11.2019


Ответы (1)


Примерно в пятый раз я удалил и переустановил MikTeX, и на этот раз моя проблема решена. При запуске моего скрипта Python последовательно открывались три окна с запросом на установку пакетов. Я прилагаю к этому ответу скриншоты этих трех окон. После того, как я согласился установить эти пакеты, мой скрипт заработал нормально. Раньше при удалении и переустановке MikTeX я уже видел окна с запросом на установку и соглашался на установку. Я не знаю, почему на этот раз это сработало, а раньше не работало ... В любом случае, моя проблема была решена удалением и переустановкой MiKTeX, запуском моего скрипта и принятием пакетов.

Окно для установки файла из type1cm

Окно для установки файла из iftex

Окно для установки файла из zhmetrics

person Vincent mahé    schedule 18.11.2019