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

Matplotlib启用usetex=True后如何保持默认等宽字体?

Matplotlib启用usetex=True后字体对齐的关键要点

当你启用rc('text', usetex=True)时,Matplotlib会切换到调用系统LaTeX引擎渲染所有文本(包括普通文本和公式),而非使用内置的mathtext模块。这就是你之前调整mathtext.*属性无效的核心原因——此时所有文本渲染逻辑都交给LaTeX了,Matplotlib的font.*配置仅对非LaTeX模式生效。

要让启用LaTeX后的字体和未启用时对齐,关键要在LaTeX的渲染上下文里指定匹配的字体,具体操作:

  • 确保系统已安装对应字体的LaTeX包(比如DejaVu Sans Mono对应的LaTeX包dejavu,TeX Live、MikTeX等主流发行版可直接安装)。
  • 通过text.latex.preamble向LaTeX注入字体配置代码,让LaTeX使用你指定的字体。
  • 保持LaTeX的字体族设置和你之前的Matplotlib配置一致。

修改后的示例代码:

from matplotlib import rc
import matplotlib.pyplot as plt

# 启用LaTeX,并配置LaTeX预amble指定字体
rc('text', usetex=True)
rc('text.latex', preamble=r'\usepackage{dejavu} \renewcommand{\familydefault}{\ttdefault}')
# 设置字体大小,LaTeX模式下size配置仍生效
rc('font', size=25)

plt.clf()
x = [0,1,2]
y = [1,1,1]
plt.plot(x,y)
plt.ylabel(r"This is $y=1$", size=25)
plt.xlabel(r"This is x", size=25)
plt.show()

代码说明

  • \usepackage{dejavu}:加载DejaVu字体包,让LaTeX可以调用DejaVu系列字体;
  • \renewcommand{\familydefault}{\ttdefault}:将LaTeX的默认字体族设置为等宽字体,对应你原代码中的monospace配置;
  • 字体大小配置在LaTeX模式下仍可通过rc('font', size=25)生效,也可在plt.ylabel等方法中单独指定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 09:53:34