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

如何将Python matplotlib的LaTeX数学模式字体设置为Arial等字体

解决方案

你之前的配置仅修改了常规文本的默认字体,未覆盖LaTeX数学模式的字体规则,也没有显式绑定刻度的字体继承逻辑,因此出现刻度字体不生效的问题。可根据你的TeX环境选择以下任意一种方案实现需求:

方案一:使用XeLaTeX/LuaLaTeX编译(支持直接调用系统Arial字体,效果最优)

该方案可以实现数学字体和常规文本完全匹配Arial字形,适配所有场景:

import matplotlib.pyplot as plt

# 指定LaTeX编译引擎为XeLaTeX(需提前安装XeLaTeX和系统Arial字体)
plt.rcParams['text.latex.engine'] = 'xelatex'
plt.rcParams['text.latex.preamble'] = r'''
\usepackage{amsmath}
\usepackage{fdsymbol}
\usepackage{bm}
\usepackage{fontspec}
% 设置常规无衬线字体为Arial
\setsansfont{Arial}
% 配置unicode数学环境,绑定数学字体为Arial
\usepackage{unicode-math}
\setmathfont{Arial}
% 全局默认字体使用无衬线
\renewcommand{\familydefault}{\sfdefault}
'''

params = {
    'text.usetex': True,
    'font.size': 20,
    'font.family': 'sans-serif',
    # 显式指定刻度字体大小,确保继承全局字体配置
    'xtick.labelsize': 20,
    'ytick.labelsize': 20,
}
plt.rcParams.update(params)

如果需要使用Trebuchet字体,只需将上述代码中\setsansfont{Arial}和\setmathfont{Arial}的Arial替换为Trebuchet MS即可。

方案二:使用默认pdfLaTeX编译(无需额外安装编译引擎)

如果不想修改LaTeX编译引擎,可以用与Arial字形接近的Helvetica无衬线字体实现近似效果:

import matplotlib.pyplot as plt

plt.rcParams['text.latex.preamble'] = r'''
\usepackage{amsmath}
\usepackage{fdsymbol}
\usepackage{bm}
% 加载Helvetica包替换默认无衬线字体
\usepackage{helvet}
% 启用全局无衬线数学模式
\usepackage{sansmath}
\sansmath
\renewcommand{\familydefault}{\sfdefault}
'''

params = {
    'text.usetex': True,
    'font.size': 20,
    'font.family': 'sans-serif',
    'xtick.labelsize': 20,
    'ytick.labelsize': 20,
}
plt.rcParams.update(params)

注意事项

  • 使用方案一需确认你的TeX环境已安装fontspec、unicode-math依赖包,TeX Live环境可通过tlmgr install fontspec unicode-math命令安装。
  • 配置完成后无需修改你现有的ax1.set_xlabel(r'$T$ [s]')这类代码,数学模式内容会自动匹配指定字体。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 15:15:03