使用 LaTeX 进行文本渲染#

Matplotlib 可以使用 LaTeX 来渲染文本。这可以通过 在您的 rcParams 中设置,或者通过在单个对象上将属性设置为 True 来激活。通过 LaTeX 处理文本比 Matplotlib 非常强大的mathtext 慢,但更灵活,因为可以使用不同的 LaTeX 包(字体包、数学包等)。结果可能是惊人的,尤其是当您注意在图形中使用与主文档中相同的字体时。text.usetex : TrueusetexText

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

默认字体系列(不需要加载任何 LaTeX 包)是 Computer Modern。所有其他系列都是 Adob​​e 字体。Times 和 Palatino 都有自己的数学字体,而其他 Adob​​e serif 字体则使用 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"](默认值:False)。如上所述,下划线 ( _) 不需要在数学模式之外转义。

PostScript 选项#

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

可能的挂断#

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

  • 将 MiKTeX 与 Computer Modern 字体一起使用,如果您得到奇怪的 *Agg 和 PNG 结果,请转到 MiKTeX/Options 并更新您的格式文件

  • 在 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"](默认值:)''不受官方支持。这个选项提供了很大的灵活性,以及​​很多导致问题的方法。请在向邮件列表报告问题之前禁用此选项。

  • 如果您仍需要帮助,请参阅获得帮助

由 Sphinx-Gallery 生成的画廊