如何将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
相关产品推荐
相关产品推荐

