我使用的是Windows10和Anaconda和Spyder4。当使用matplotlib
时,我想使用字体Proxima Nova
并使用LaTeX
渲染。
如果在我的matplotlibrc
文件中指定了
font.family : Proxima Nova
然后用Proxima Nova
字体渲染图形。这意味着该字体已安装在我的系统上(按原样),matplotlib可以使用它。但是,如果在matplotlibrc
文件中还指定了
text.usetex: True
然后,即使我指定了Proxima Nova
作为字体,图形还是以默认的LaTeX
字体呈现,我猜是Computer Modern
。
我试过了
matplotlib.font_manager._rebuild()
并且还尝试在源代码文件中而不是在matplotlibrc
文件中指定字体。然而,我总是得到相同的结果。然而,似乎什么都不起作用。
我想指出的是,我可以在编译Latex文档时单独使用Proxima Nova
,所以这也不是问题。
如何让matplotlib
能够在使用非默认字体的同时使用LateX
进行渲染?
发布于 2021-04-29 15:15:41
经过进一步的研究,我能够在Latex
中使用Proxima Nova
,尽管仍然有一些悬而未决的问题。
主要的问题是,如果字体Proxima Nova
与Latex一起使用,则需要使用Lualatex
,而不是普通的Latex。这是Matplotlib instruction on using matplotlib with Lualatex。
让事情正常工作的关键是this post。
在我的.py文件的最开始,我有以下代码:
import matplotlib as mpl
mpl.use("pgf")
mpl.rcParams.update({
'font.family': 'sans-serif',
'text.usetex': True,
'pgf.rcfonts': False,
'pgf.texsystem': 'lualatex',
'pgf.preamble': r'\usepackage{fontspec} \setmainfont{Proxima Nova}',
})
上面的代码应该放在代码的最顶端,高于任何其他导入的。
然而,问题在于,此解决方案只有在执行以下步骤后才能起作用:
Tex.cache删除.matplotlib/.cache文件夹,然后分别使用'font.family': 'serif'
和\setmainfont{Times New Roman}
重新启动spyder
'font.family': 'sans-serif'
和\setmainfont{Proxima Nova}
。运行python一次。'font.family': 'sans-serif'
和\setmainfont{Proxima Nova}
,然后再次运行python。除非执行上述4个步骤,否则输出将使用默认的DejaVu Sans
字体而不是Proxima Nova
进行编译。我不知道为什么..。
发布于 2021-05-05 07:01:43
在matplotlib github论坛上获得帮助后,我得到了以下解决方案:
mpl.rcParams.update({
'font.family': 'sans-serif',
'text.usetex': True,
'pgf.rcfonts': False,
'pgf.texsystem': 'lualatex',
'pgf.preamble': r'\usepackage{fontspec} \setsansfont{Proxima Nova}',
})
换句话说,您需要使用setsansfont
而不是setmainfont
。你可以看到the matplotlib forum page here。
https://stackoverflow.com/questions/67290186
复制相似问题