You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用非默认字体时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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 10:44:56