使用 LaTeX 渲染文本#

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

Matplotlib 的 LaTeX 支持需要一个可用的 LaTeX 安装.对于 Agg 后端,还需要 dvipng;对于 PS 后端,还需要 PSfrag,dvips_ 和 Ghostscript.对于 PDF 和 SVG 后端,如果存在 LuaTeX,它将用于加速一些后处理步骤,但请注意,它不用于解析 TeX 字符串本身(仅支持 LaTeX).这些外部依赖项的可执行文件都必须位于您的 PATH 上.

仅支持少量字体系列(由 PSNFSS 方案定义).它们在此处列出,带有相应的 LaTeX 字体选择命令和 LaTeX 包,这些命令和包会自动使用.

通用族

字体

serif ( \rmfamily )

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

sans-serif ( \sffamily )

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

cursive ( \rmfamily )

Zapf Chancery ( chancery )

monospace ( \ttfamily )

Computer Modern Typewriter, Courier ( courier )

默认字体系列(不需要加载任何 LaTeX 包)是 Computer Modern.所有其他系列都是 Adobe 字体.Times 和 Palatino 各自都有自己的配套数学字体,而其他 Adobe 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 ,如上面的演示中所示,将产生相同的结果.

输入编码 inputenc 支持非 ASCII 字符(例如,上面 y 轴标签中的度数符号).

备注

为了与非 usetex 情况保持一致,Matplotlib 特别处理换行符,因此单行换行符会产生换行符(而不是在标准 LaTeX 中被解释为空格).

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

备注

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

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

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

备注

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

PostScript 选项#

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

可能出现的问题#

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

  • 如果将 MiKTeX 与 Computer Modern 字体配合使用时,出现奇怪的 Agg 和 PNG 结果,请转到 MiKTeX/Options 并更新您的格式文件.

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

疑难解答#

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

  • 确保 LaTeX,dvipng 和 Ghostscript 均在工作状态,并且位于您的 PATH 上.

  • 确保您尝试执行的操作在 LaTeX 文档中是可行的,您的 LaTeX 语法是有效的,并且如果需要,您正在使用原始字符串以避免意外的转义序列.

  • rcParams["text.latex.preamble"] (default: '') 未得到正式支持.此选项提供了很大的灵活性,以及导致问题的许多方法.请在报告问题之前禁用此选项.

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

Gallery generated by Sphinx-Gallery