使用 matplotlib 时,LaTeX 方程不会在 google Colaboratory 中呈现
Posted
技术标签:
【中文标题】使用 matplotlib 时,LaTeX 方程不会在 google Colaboratory 中呈现【英文标题】:LaTeX equations do not render in google Colaboratory when using matplotlib 【发布时间】:2019-09-08 20:00:28 【问题描述】:如果我以matplotlib website中包含乳胶的官方示例为例:
from matplotlib import rc
rc('font',**'family':'sans-serif','sans-serif':['Helvetica'])
rc('text', usetex=True)
import numpy as np
import matplotlib.pyplot as plt
# Example data
t = np.arange(0.0, 1.0 + 0.01, 0.01)
s = np.cos(4 * np.pi * t) + 2
plt.rc('text', usetex=True)
plt.rc('font', family='serif')
plt.plot(t, s)
plt.xlabel(r'\textbftime (s)')
plt.ylabel(r'\textitvoltage (mV)',fontsize=16)
plt.title(r"\TeX\ is Number "
r"$\displaystyle\sum_n=1^\infty\frac-e^i\pi2^n$!",
fontsize=16, color='gray')
# Make room for the ridiculously large title.
plt.subplots_adjust(top=0.8)
plt.savefig('tex_demo')
plt.show()
并尝试在 Google Colab 笔记本中运行它,它会生成一个大堆栈跟踪,最后会显示以下消息:
[Errno 2] No such file or directory: 'latex': 'latex'
为什么会发生这种情况,我该如何解决?
我的尝试: 我认为这个错误可能会发生,因为服务虚拟机中缺少乳胶,所以我尝试在导入 matplotlib 之前安装 texlive:
! sudo apt-get install texlive-latex-recommended
这成功完成。然而 matplotlib 抱怨一些丢失的乳胶 *.sty 文件在谷歌搜索后应该包含在 texlive-latex-extra
包中。但是在安装额外包的过程中出现了一些错误:
Err:5 http://security.ubuntu.com/ubuntu bionic-updates/main amd64 ruby2.5 amd64 2.5.1-1ubuntu1.1
404 Not Found [IP: 91.189.88.162 80]
Get:16 http://archive.ubuntu.com/ubuntu bionic/universe amd64 texlive-latex-extra all 2017.20180305-2 [10.6 MB]
Err:13 http://security.ubuntu.com/ubuntu bionic-updates/main amd64 libruby2.5 amd64 2.5.1-1ubuntu1.1
404 Not Found [IP: 91.189.88.162 80]
Get:17 http://archive.ubuntu.com/ubuntu bionic/universe amd64 texlive-plain-generic all 2017.20180305-2 [23.6 MB]
Fetched 41.5 MB in 4s (11.3 MB/s)
所以我无法完成texlive-latex-extra
的安装。我该如何继续?
【问题讨论】:
【参考方案1】:实际上有一个更简单的解决方案,相对于@v.tralala 提出的答案需要更少的段落。安装包含所需 .sty 文件的 ubuntu 软件包确实足够了,在本例中为 texlive-latex-extra
和 dvipng
。因此,请执行以下安装:
! sudo apt-get install texlive-latex-recommended
! sudo apt install texlive-latex-extra
! sudo apt install dvipng
要查找包含特定 .sty 文件的 ubuntu 包,请参阅:https://tex.stackexchange.com/questions/39771/finding-a-ubuntu-package-for-a-sty-file
【讨论】:
这几乎成功了,我还必须添加! sudo apt install cm-super
以避免被告知我缺少 type1ec.sty
谢谢,Iman的回答中也指出了这一点,可能这段时间发生了一些变化。【参考方案2】:
原因
基本上,问题是type1cm
和type1em
在colab环境中默认没有安装matplotlib。更多关于这个问题的信息:https://github.com/matplotlib/matplotlib/issues/17412
解决方案
!apt install texlive-fonts-recommended texlive-fonts-extra cm-super dvipng
type1cm
是 texlive-fonts-extra
的一部分,type1ec
是 cm-super
的一部分。
所以要在 matplotlib 中设置乳胶,你应该在你的 colab 笔记本中有这个块:
import matplotlib
from matplotlib import rc
import matplotlib.pyplot as plt
%matplotlib inline
rc('text', usetex=True)
matplotlib.rcParams['text.latex.preamble'] = [r'\usepackageamsmath']
!apt install texlive-fonts-recommended texlive-fonts-extra cm-super dvipng
【讨论】:
感谢您提供完整的代码单元以使其正常工作。【参考方案3】:所以这是一个非常 hacky 的解决方案,但我让它至少可以工作。问题确实是缺少 texlive 包。安装 texlive-latex-recommended
后,仍然需要一个 type1cm.sty
文件才能使 matplotlib 示例正常工作。由于无法轻松安装额外的包,我手动安装了 type1cm 包。为此,我在导入 matplotlib 之前执行了以下命令:
! sudo apt-get install texlive-latex-recommended #1
! sudo apt-get install dvipng texlive-fonts-recommended #2
! wget http://mirrors.ctan.org/macros/latex/contrib/type1cm.zip #3
! unzip type1cm.zip -d /tmp/type1cm #4
! cd /tmp/type1cm/type1cm/ && sudo latex type1cm.ins #5
! sudo mkdir /usr/share/texmf/tex/latex/type1cm #6
! sudo cp /tmp/type1cm/type1cm/type1cm.sty /usr/share/texmf/tex/latex/type1cm #7
! sudo texhash #8
这些命令将执行以下操作:
-
最小的 texlive 安装仍然有效
不确定这些包是否必要,但不会造成太大影响
从ctan官方下载
type1cm
包
解压到 /tmp/type1cm
通过在type1cm.ins
文件上运行latex
命令来安装软件包。请注意,直接提供到 latex 命令的路径不起作用。 cd
和 latex
命令也必须在同一行执行(在同一个 ! 符号后面),否则 cd 无效
在 texmf 树中为 type1cm 包创建文件夹
在那里复制 .sty 文件
更新 tex 以便它找到新的包
资源:How to install type1cmWhere to place *.sty files in Linux texlive install
【讨论】:
以上是关于使用 matplotlib 时,LaTeX 方程不会在 google Colaboratory 中呈现的主要内容,如果未能解决你的问题,请参考以下文章
Matplotlib 中文用户指南 4.7 使用 LaTeX 渲染文本
在没有乳胶的matplotlib方程标签中使用特殊字符 ddagger