MATPLOTLIB: Как мне предоставить файлы метрик шрифтов для рендеринга текста TeX?

1

У меня есть проблема с Python (WinPython-64bit-3.6.5.0Qt5)/MATPLOTLIB (версия 2.2.2) при рендеринге текста с TeX (MikTeX 2.9) и применением шрифта "Times", который находится в списке стандартных шрифтов (см. https://matplotlib.org/users/customizing.html)

В приведенном ниже минимальном примере появляется следующее сообщение об ошибке:

  File "C:\WinPython-64bit-3.6.5.0Qt5\python-3.6.5.amd64\lib\site-packages\matplotlib\dviread.py", line 471, in _fnt_def_real
    raise error_class("missing font metrics file: %s" % fontname)
FileNotFoundError: missing font metrics file: rsfs10

Вот пример, чтобы воспроизвести проблему:

import numpy as np
import matplotlib.pyplot as plt

# Example data
t = np.arange(0.0, 1.0 + 0.01, 0.01)
s = np.cos(4 * np.pi * t) + 2

from matplotlib import rc
rc('font',**{'family':'serif','serif':['Times']})
rc('text', usetex=True)

plt.plot(t, s)

plt.xlabel(r'\textbf{time} (s)')
plt.ylabel(r'\textit{voltage} (mV)',fontsize=16)
plt.title(r"\TeX\ is Number "
          r"$\displaystyle\sum_{n=1}^\infty\frac{-e^{i\pi}}{2^n}$!",
          fontsize=16, color='gray')
# Make room for the ridiculously large title.
plt.subplots_adjust(top=0.8)

plt.savefig('tex_demo')
plt.show()

Похоже, что у python нет доступа к шрифтам TeX, например, rsfs10, который находится в моей установочной папке MikTeX. C:\Program Files\MiKTeX 2.9\fonts\source\public\rsfs

Если я не укажу имя шрифта, он работает со стандартным шрифтом serif (он выглядит как современный компьютерный шрифт).

from matplotlib import rc
rc("pdf", fonttype=3)
rc('font',**{'family':'serif'})
rc('text', usetex=True)

Я должен добавить следующее: В минимальном примере ниже я сначала получаю предупреждающее сообщение (которое я не получаю в своем полном исходном коде, и это, вероятно, не связано с основной проблемой):

C:\WinPython-64bit-3.6.5.0Qt5\python-3.6.5.amd64\lib\site-packages\matplotlib\font_manager.py:1328: UserWarning: findfont: Font family ['serif'] not found. Falling back to DejaVu Sans (prop.get_family(), self.defaultFamily[fontext]))

Я уже пробовал решение для Windows, описанное здесь: Matplotlib не может найти основные шрифты, но это не помогло удалить предупреждение. Если я не укажу Times как font, предупреждение также не будет поднято.

Теги:
matplotlib
fonts
plot
tex

1 ответ

0

С обсуждением здесь https://tex.stackexchange.com/questions/442179/why-are-tfm-files-missing-in-the-latex-rsfs-package Я нашел решение:

На моем компьютере установка MikTex была совершенно новой, и шрифт никогда не использовался раньше, поэтому необходимые файлы tfm не были созданы.

Тем не менее, пакет matplotlib Python (dviread.py) пытался идентифицировать файлы tfm перед использованием, чтобы создать кеш шрифта.

Я установил полную установку TeXLive на другой компьютер. Там файлы tfm уже были созданы во время установки, и я просто скопировал файлы в соответствующее место на моем компьютере.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню