使用非默认字体时Matplotlib调用LaTeX报错:找不到cmbr10.tfm文件
问题描述
使用Matplotlib结合LaTeX并指定非默认字体时,出现如下报错:
FileNotFoundError: Matplotlib's TeX implementation searched for a file named 'cmbr10.tfm' in your texmf tree, but could not find it
更换不同字体时,缺失的文件名会对应变化。已确认LaTeX能正常使用目标字体包,PATH配置正确,且重新安装过TeXLive,但缺失的tfm文件实际存在于/usr/local/texlive/2023/texmf-dist/fonts/tfm的子目录中。
最小可复现代码:
import matplotlib.pylab as pl from matplotlib import rc rc('text', usetex=True) rc('font', size=14) rc('legend', fontsize=13) rc('text.latex', preamble=r'\usepackage{cmbright}') pl.figure() pl.plot([0,1], [0,1], label=r'$\theta_{\phi}^3$') pl.legend(frameon=False, loc=2) pl.xlabel(r'change of $\widehat{\phi}$') pl.ylabel(r'change of $\theta_{\phi}^3$')
解决思路
更新TeX文件名数据库:TeX依赖
ls-R数据库定位字体文件,即便文件存在,数据库未更新也会导致查找失败。执行以下命令更新:mktexlsr /usr/local/texlive/2023/texmf-dist直接运行
mktexlsr可默认扫描全部texmf目录。指定Matplotlib的TeX引擎与路径:强制Matplotlib调用系统完整TeX环境,避免使用内置简化TeX。在代码中添加:
rc('text.latex', texsystem='pdflatex') # 可替换为xelatex等你使用的引擎同时确保TeX引擎路径被Matplotlib识别:
import os os.environ['PATH'] += os.pathsep + '/usr/local/texlive/2023/bin/x86_64-linux' # 替换为你的TeX bin目录修改Matplotlib全局配置:找到Matplotlib配置文件(可通过
pl.matplotlib_fname()查看路径),添加以下配置:text.usetex : True text.latex.preamble : \usepackage{cmbright} text.latex.texsystem : pdflatex重装目标字体包:重新安装字体包确保文件无缺失,以cmbright为例:
tlmgr install cmbright安装完成后再次运行
mktexlsr更新数据库。切换TeX引擎:pdflatex查找字体机制较严格,可尝试改用xelatex或lualatex,这类引擎对字体的支持更灵活。修改代码如下:
rc('text.latex', texsystem='xelatex') rc('text.latex', preamble=r'\usepackage{fontspec}\setmainfont{cmbright}')
内容的提问来源于stack exchange,提问作者overfull hbox
相关产品推荐
相关产品推荐

