MATPLOTLIB:我如何提供字体度量文件来使用TeX渲染文本?

m2xkgtsf  于 2023-05-01  发布在  其他
关注(0)|答案(3)|浏览(191)

我对Python有一个问题(WinPython-64 bit-3.6.5.0Qt5)/MATPLOTLIB(版本2.2.2)时使用TeX渲染文本(MikTeX 2.9)和字体“Times”的应用,这是在标准字体列表中(见Customizing matplotlib
在下面的最小示例中,我得到以下错误消息:

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字体,e。例如,rsfs 10位于我的MikTeX安装文件夹C:\Program Files\MiKTeX 2。9\fonts\source\public\rsfs
如果我不指定字体名称,它与标准serif字体(它看起来像计算机现代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 cannot find basic fonts,但它没有帮助删除警告。如果我没有指定Times作为字体,也不会发出警告。

vawmfj5a

vawmfj5a1#

我在matplotlib中遇到了同样的问题。虽然安装texlive是一种方法,但我不想并行地重新安装另一个latex发行版,特别是因为我已经花了一些时间来设置所有内容并与其他外部程序一起运行。
我在C:\Program Files\MiKTeX\miktex\bin\x64文件夹中做了一点搜索,它看起来像运行:

miktex-maketfm.exe rsfs10

成功了创建rsf10。tfm,并将其放在C:\Users\XXX\AppData\Local\MiKTeX\fonts\tfm\public\rsfs文件夹中。
该溶液适用于Miktex 20。10.一旦我运行了这个,matplotlib就没有问题了。请注意,这篇文章是我的答案here的副本。

9rbhqvlz

9rbhqvlz2#

通过对Why are tfm files missing in the LaTeX rsfs package?的讨论,我找到了一个解决方案:
在我的电脑上,MikTex安装是相当新的,字体以前从未使用过,因此所需的tfm文件还没有创建。
但是,matplotlib Python包(dviread.py)尝试在使用前识别tfm文件,以便创建字体文件缓存。
我已经在另一台计算机上安装了完整的TeXLive安装。在那里,tfm文件已经在安装过程中创建,我只是将文件复制到计算机上的相应位置。

bjp0bcyl

bjp0bcyl3#

当我从TeX Live 2022转移到TeX Live 2023时,我的Matplotlib图形的rc设置非常相似。错误是missing font metrics file: cmss10。它由代码段中的dviread.py模块抛出

...
if tfm is None:
    raise FileNotFoundError("missing font metrics file: %s" % fontname)
...

以下两个步骤为我解决了这个问题:
1.根据this doc page,我执行了以下两个故障排除操作:

  • 尝试删除您的。matplotlib/tex.缓存目录。如果你不知道去哪里找。matplotlib,参见matplotlib配置和缓存目录位置。
  • 确保LaTeX、dvipng和ghostscript都在PATH上工作。

1.这引发了其他错误,但由于我安装了TeX Live 2023(并删除了TeX Live 2022)后没有重新启动PyCharm,所以我也尝试了一下。效果很好。

相关问题