使用 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)

Computer Modern Typewriter, 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"] (默认值:False)而有所不同。如上所述,下划线 (_) 在数学模式之外不需要转义。

注意

LaTeX 始终默认为数学使用衬线字体(即使 rcParams["font.family"] = "sans-serif")。如果需要,将 \usepackage{sfmath} 添加到 rcParams["text.latex.preamble"] 可以让 LaTeX 输出无衬线数学。

PostScript 选项#

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

可能出现的问题#

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

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

  • 在 Ubuntu 和 Gentoo 上,基本的 texlive 安装不附带 type1cm 包。您可能需要安装一些额外的包才能获得其他 LaTeX 发行版捆绑的所有好处。

故障排除#

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

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

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

  • rcParams["text.latex.preamble"] (默认值:'') 未被官方支持。 此选项提供了很大的灵活性,但也可能导致很多问题。请在报告问题之前禁用此选项。

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

由 Sphinx-Gallery 生成的图库