使用 LaTeX 进行文本渲染#

Matplotlib 可以使用 LaTeX 来渲染文本。这可以通过在你的 rcParams 中设置 text.usetex : True 来激活,或者通过将单个 Text 对象的 usetex 属性设置为 True 来实现。通过 LaTeX 处理文本比 Matplotlib 非常强大的 mathtext 要慢,但它更灵活,因为可以使用不同的 LaTeX 包(字体包、数学包等)。结果可能会非常引人注目,特别是当你在图表中使用与主文档相同的字体时。

Matplotlib 的 LaTeX 支持需要一个正常工作的 LaTeX 安装。对于 *Agg 后端,还需要 dvipng;对于 PS 后端,还需要 PSfragdvipsGhostscript。对于 PDF 和 SVG 后端,如果存在 LuaTeX,它将被用来加速一些后处理步骤,但请注意,它不会用于解析 TeX 字符串本身(仅支持 LaTeX)。这些外部依赖的可执行文件必须全部位于你的 PATH 中。

只有少数字体族(由 PSNFSS 方案定义)受支持。它们在此列出,并附有相应的 LaTeX 字体选择命令和 LaTeX 包,这些包会自动使用。

通用系列

字体

衬线字体 (\rmfamily)

Computer Modern Roman、Palatino (mathpazo)、Times (mathptmx)、Bookman (bookman)、New Century Schoolbook (newcent)、Charter (charter)

无衬线字体 (\sffamily)

Computer Modern Serif, Helvetica (helvet), Avant Garde (avant)

草书 (\rmfamily)

Zapf Chancery (chancery)

等宽字体 (\ttfamily)

计算机现代打字机,Courier (courier)

默认字体族(不需要加载任何 LaTeX 包)是 Computer Modern。所有其他字体族都是 Adobe 字体。Times 和 Palatino 各自有自己的配套数学字体,而其他 Adobe 衬线字体则使用 Computer Modern 数学字体。

要启用 LaTeX 并选择字体,请使用例如:

plt.rcParams.update({
    "text.usetex": True,
    "font.family": "Helvetica"
})

或者,将您的 matplotlibrc 设置为:

text.usetex : true
font.family : Helvetica

也可以将 font.family 设置为其中一个通用字体族名称,然后配置相应的通用字体族;例如::

plt.rcParams.update({
    "text.usetex": True,
    "font.family": "sans-serif",
    "font.sans-serif": "Helvetica",
})

(这是直到 Matplotlib 3.5 为止所要求的方法)。

以下是标准示例,使用 TeX 渲染数学方程:

../../../_images/sphx_glr_tex_demo_001.png

需要注意的是,显示数学模式($$ e=mc^2 $$)是不支持的,但如上所述,添加命令 displaystyle 会产生相同的结果。

非ASCII字符(例如上述y标签中的度符号)在inputenc_支持的范围内得到支持。

备注

为了与非 usetex 情况保持一致,Matplotlib 特别处理换行符,使得单个换行符产生换行(而不是在标准 LaTeX 中被解释为空白)。

Matplotlib 使用了 underscore 包,以便在文本模式下下划线 (_) 能“按原样”打印(而不是像在标准 LaTeX 中那样导致错误)。下划线在数学模式下仍然引入下标。

备注

在TeX中,某些字符需要特殊转义,例如:

# $ % & ~ ^ \ { } \( \) \[ \]

因此,这些字符的行为将根据 rcParams["text.usetex"] (default: False) 的不同而有所不同。如上所述,下划线 (_) 在数学模式外不需要转义。

PostScript 选项#

为了生成可以嵌入到新 LaTeX 文档中的封装 PostScript (EPS) 文件,Matplotlib 的默认行为是通过去除一些 LaTeX 使用的但在 EPS 文件中非法的 PostScript 操作符来提炼输出。这一步骤可能会导致一些用户无法接受的结果,因为文本会被粗糙地光栅化并转换为位图,这些位图不像标准 PostScript 那样可缩放,并且文本不可搜索。一个解决方法是设置 rcParams["ps.distiller.res"] (default: 6000) 为更高的值(例如 6000)在你的 rc 设置中,这将生成更大的文件但可能看起来更好并且合理缩放。一个更好的解决方法,需要 PopplerXpdf,可以通过将 rcParams["ps.usedistiller"] (default: None) 更改为 xpdf 来激活。这种替代方法生成不带文本光栅化的 PostScript,因此它可以正确缩放,可以在 Adobe Illustrator 中编辑,并且在 pdf 文档中可以搜索文本。

可能的障碍#

  • 在Windows上,可能需要修改 PATH 环境变量,以包含包含latex、dvipng和ghostscript可执行文件的目录。详情请参见 环境变量设置Windows环境变量

  • 使用带有Computer Modern字体的MiKTeX时,如果遇到奇怪的*Agg和PNG结果,请前往MiKTeX/选项并更新您的格式文件。

  • 在Ubuntu和Gentoo上,基础的texlive安装不包含type1cm包。你可能需要安装一些额外的包来获取其他LaTeX发行版中捆绑的所有功能。

  • 一些进展已经实现,使得Matplotlib可以直接使用dvi文件进行文本布局。这使得LaTeX可以用于pdf和svg后端的文本布局,以及*Agg和PS后端。未来,LaTeX安装可能成为唯一的外部依赖。

故障排除#

  • 尝试删除您的 .matplotlib/tex.cache 目录。如果您不知道在哪里找到 .matplotlib,请参阅 matplotlib 配置和缓存目录位置

  • 确保 LaTeX、dvipng 和 ghostscript 都能正常工作,并且都在你的 PATH 中。

  • 确保你尝试在 LaTeX 文档中做的事情是可行的,你的 LaTeX 语法是有效的,并且在必要时使用原始字符串以避免意外的转义序列。

  • rcParams["text.latex.preamble"] (default: '') 未正式支持。此选项提供了很大的灵活性,但也提供了很多引发问题的方式。请在向邮件列表报告问题之前禁用此选项。

  • 如果你仍然需要帮助,请参阅 获取帮助

由 Sphinx-Gallery 生成的图库