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

Matplotlib的PGF后端使用pdflatex/lualatex时出现输入栈容量超限错误

Matplotlib PGF后端使用pdflatex/lualatex报错问题解决

核心问题定位

报错中pdftex.def找不到和输入栈溢出,主要由以下原因导致:

  • TeX Live版本过旧:你使用的TeX Live 2013距今超过10年,很多基础包(如包含pdftex.def的graphicx)可能缺失或与Matplotlib 3.5.1不兼容,旧版本TeX对新LaTeX语法和包的支持不足。
  • 配置冲突:utf8x是已废弃的编码包,会与现代TeX环境产生加载冲突;针对lualatex时错误加载了仅适用于pdftex的inputenc和fontenc包,引发栈溢出。
  • 保存流程问题:直接保存为PDF时,PGF后端的TeX编译流程因配置错误卡住,触发连锁报错。

解决方案

1. 升级TeX Live环境(优先推荐)

直接将TeX Live升级到2020及以后的版本,新版本默认包含pdftex.def等基础文件,且与Matplotlib 3.5.1兼容性更好,能彻底解决大部分版本匹配问题。

2. 调整Matplotlib配置

根据使用的TeX引擎修改pgf.preamble:

  • 使用pdflatex时:
    替换过时的utf8x为标准utf8(新版pdflatex可直接省略inputenc):
    import matplotlib.pyplot as plt
    plt.rcParams.update({
        "pgf.texsystem": "pdflatex",
        "pgf.preamble": "\n".join([
             # r"\usepackage[utf8]{inputenc}",  # 新版pdflatex可删除该行
             r"\usepackage[T1]{fontenc}",
             r"\usepackage{cmbright}",
        ]),
    })
    
  • 使用lualatex时:
    移除inputenc和fontenc,改用fontspec配置字体:
    import matplotlib.pyplot as plt
    plt.rcParams.update({
        "pgf.texsystem": "lualatex",
        "pgf.preamble": "\n".join([
             r"\usepackage{fontspec}",
             r"\setmainfont{CMU Bright}",
             r"\usepackage{cmbright}",
        ]),
    })
    

3. 优化保存方式

推荐先保存为.pgf格式,再嵌入到LaTeX文档中,避免直接编译PDF的潜在问题:

# 保存为PGF格式(适合LaTeX嵌入)
fig.savefig('/user/home/test.pgf', backend='pgf')
# 若需直接保存PDF,确保后端指定正确
plt.savefig('/user/home/test.pdf', backend='pgf')

4. 临时修复(无法升级TeX时)

如果暂时无法升级TeX Live,通过TeX Live Manager安装graphicx包,确保pdftex.def文件存在并被TeX环境识别;同时删除utf8x相关配置,避免冲突。

内容的提问来源于stack exchange,提问作者PeterW

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:20:22