matplotlib使用 LaTeX 进行文本渲染
Matplotlib可以使用LaTeX来渲染文本。这是通过在rcParams中设置 text.usetex : True
来激活,或者通过在单个 Text
对象上将 usetex
属性设置为 True
来激活。通过LaTeX进行的文本处理比Matplotlib功能强大的mathtext慢,但更灵活,因为可以使用不同的LaTeX包(字体包、数学包等)。结果可能是惊人的,尤其是当你注意在图中使用与主文档中相同的字体时。
Matplotlib对LaTeX的支持需要一个可工作的LaTeX安装。对于*Agg后端,还需要dvipng;对于PS后端,还需要PSfrag、dvip和Ghostscript。对于PDF和SVG后端,如果存在LuaTeX,它将用于加快一些后处理步骤,但请注意,它不用于解析TeX字符串本身(仅支持LaTeX)。这些外部依赖项的可执行文件必须全部位于您的PATH上。
仅支持少量字体系列(由PSNFSS方案定义)。这里列出了它们,以及相应的LaTeX字体选择命令和LaTeX包,它们将被自动使用。
generic family | fonts |
---|---|
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 fonts (衬线字体) 则使用了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 渲染数学方程:
请注意,不支持显示数学模式 ( $$ 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),这将生成更大的文件,但可能看起来更好并且可以合理扩展。需要Poppler或Xpdf的更好的解决方法可以通过将rcParams["ps.usedistiller"]
(默认值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 直接使用 dvi 文件进行文本布局。这允许 LaTeX 用于带有 pdf 和 svg 后端以及 *Agg 和 PS 后端的文本布局。将来,LaTeX 安装可能是唯一的外部依赖项。
故障排除
- 尝试删除您的
.matplotlib/tex.cache
目录。如果您不知道在哪里可以找到.matplotlib
,请参阅matplotlib 配置和缓存目录位置。 - 确保 LaTeX、dvipng 和 ghostscript 都可以正常工作并在您的
PATH
. - 确保您尝试在 LaTeX 文档中执行的操作是可能的,确保您的 LaTeX 语法有效,并且在必要时使用原始字符串以避免意外的转义序列。
-
rcParams["text.latex.preamble"]
(默认值:)''
不受官方支持。这个选项提供了很大的灵活性,以及很多导致问题的方法。请在向邮件列表报告问题之前禁用此选项。 - 如果您仍需要帮助,请参阅获得帮助。
Download Python source code: usetex.py
Download Jupyter notebook: usetex.ipynb
安装缺失的包
Linux -> Ubuntu
- 安装
latex
FileNotFoundError: [Errno 2] No such file or directory: ‘latex’: ‘latex’.
由于在系统中没有找到Latex
,因此安装:
# 查看系统中是否安装 latex
whereis latex
## 如果返回是空值,则安装
sudo apt install texlive-fonts-recommended texlive-fonts-extra
sudo apt install dvipng
- 安装 cm-super
RuntimeError: latex was not able to process the following string: b‘lp‘
sudo apt-get install cm-super
reference
@misc{BibEntry2023Mar,
title = {{使用 LaTeX 进行文本渲染 {ifmmode—elsetextemdashfi} Matplotlib 3.7.1 文档}},
year = {2023},
month = mar,
note = {[Online; accessed 22. May 2023]},
url = {https://matplotlib.org/stable/tutorials/text/usetex.html}
}
@misc{BibEntry2023May,
title = {{使用 LaTeX 进行文本渲染{
_
_
_}Matplotlib 中文网}},
year = {2023},
month = may,
note = {[Online; accessed 22. May 2023]},
url = {https://matplotlib.net/stable/tutorials/text/usetex.html}
}
@misc{BibEntry2023May,
title = {{Matplotlib error: No such file or directory: ‘latex’: ‘latex’}},
journal = {TeX – LaTeX Stack Exchange},
year = {2023},
month = may,
note = {[Online; accessed 22. May 2023]},
url = {https://tex.stackexchange.com/questions/475546/matplotlib-error-no-such-file-or-directory-latex-latex}
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net