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

Matplotlib中LaTeX公式排版问题:cases环境解析报错

解决Matplotlib无法解析LaTeX cases环境的问题

问题重现

两段Matplotlib代码,一段能正常显示LaTeX公式,另一段使用cases环境时触发ValueError:

正常运行的代码

import matplotlib.pyplot as plt

formula = r"$L_0(x)=x \quad ; \quad L_n(x)=L_{n-1}^2-2 \quad \forall n \geq 1$"

fig, ax = plt.subplots(figsize=(6, 1))
ax.text(0.5, 0.5, formula, fontsize=20, ha='center', va='center')
ax.axis('off')
plt.savefig("formula.svg", format="svg")
plt.show()

报错的代码

import matplotlib.pyplot as plt

formula = r"$L_n= \begin{cases}4 & \text { if } n=0 \\ L_{n-1}^2-2 & \text { otherwise }\end{cases}$"

fig, ax = plt.subplots(figsize=(6, 1))
ax.text(0.5, 0.5, formula, fontsize=20, ha='center', va='center')
ax.axis('off')
plt.savefig("formula.svg", format="svg")
plt.show()

错误信息

ValueError: 
L_n= \begin{cases}4 & \text { if } n=0 \\ L_{n-1}^2-2 & \text { otherwise }\end{cases}
     ^
ParseFatalException: Unknown symbol: \begin, found '\'  (at char 5), (line:1, col:6)

错误原因

Matplotlib默认使用内置的mathtext解析器,它仅支持基础的LaTeX公式语法,不支持cases这类复杂的LaTeX环境。第一段代码里的命令(如下标、空格命令\quad、\forall)都是mathtext能识别的,所以正常运行;第二段用了cases环境,超出了mathtext的支持范围,因此报错。

修复方案

方案1:启用真实LaTeX渲染

让Matplotlib调用系统安装的LaTeX引擎来渲染公式,这样就能支持所有LaTeX环境(包括cases)。需要先确保系统安装了LaTeX发行版(比如TeX Live、MiKTeX),然后在代码开头添加配置:

import matplotlib.pyplot as plt

# 启用LaTeX渲染
plt.rcParams['text.usetex'] = True
# 可选:指定衬线字体匹配LaTeX风格
plt.rcParams['font.family'] = 'serif'

formula = r"$L_n= \begin{cases}4 & \text { if } n=0 \\ L_{n-1}^2-2 & \text { otherwise }\end{cases}$"

fig, ax = plt.subplots(figsize=(6, 1))
ax.text(0.5, 0.5, formula, fontsize=20, ha='center', va='center')
ax.axis('off')
plt.savefig("formula.svg", format="svg")
plt.show()

方案2:使用mathtext兼容的替代写法

如果不想依赖系统LaTeX,可以用mathtext支持的语法模拟cases效果,用\left\{和\right.包裹换行的公式,用&对齐:

import matplotlib.pyplot as plt

# 用mathtext兼容语法模拟cases
formula = r"$L_n= \left\{ \begin{aligned} &4 \quad \text{if } n=0 \\ &L_{n-1}^2-2 \quad \text{otherwise} \end{aligned} \right.$"

fig, ax = plt.subplots(figsize=(6, 1))
ax.text(0.5, 0.5, formula, fontsize=20, ha='center', va='center')
ax.axis('off')
plt.savefig("formula.svg", format="svg")
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 22:13:14