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

