使用 matplotlib 时,LaTeX 方程不会在 google Colaboratory 中呈现

v.t*_*ala 10 python latex matplotlib google-colaboratory

如果我以来自matplotlib 网站的包含乳胶的官方示例为例:

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'\textbf{time} (s)')
plt.ylabel(r'\textit{voltage} (mV)',fontsize=16)
plt.title(r"\TeX\ is Number "
          r"$\displaystyle\sum_{n=1}^\infty\frac{-e^{i\pi}}{2^n}$!",
          fontsize=16, color='gray')
# Make room for the ridiculously large title.
plt.subplots_adjust(top=0.8)

plt.savefig('tex_demo')
plt.show()
Run Code Online (Sandbox Code Playgroud)

并尝试在 Google Colab notebook 中运行它,它会产生一个大的堆栈跟踪,最后会显示以下消息:

 [Errno 2] No such file or directory: 'latex': 'latex'
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,我该如何解决?

我的尝试:
我认为可能会发生此错误,因为服务 VM 中缺少乳胶,因此我尝试在导入 matplotlib 之前安装 texlive:

! sudo apt-get install texlive-latex-recommended 
Run Code Online (Sandbox Code Playgroud)

这成功完成。然而 matplotlib 抱怨一些丢失的 latex *.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)
Run Code Online (Sandbox Code Playgroud)

所以我无法完成texlive-latex-extra. 我该如何继续?

Ael*_*ius 6

实际上,有一个更简单的解决方案,就@v.tralala 提出的答案而言,它需要更少的段落。安装包含所需 .sty 文件的 ubuntu 包确实就足够了,在这种情况下是texlive-latex-extradvipng。因此,请执行以下安装:

! sudo apt-get install texlive-latex-recommended 
! sudo apt install texlive-latex-extra
! sudo apt install dvipng
Run Code Online (Sandbox Code Playgroud)

要查找包含特定 .sty 文件的 ubuntu 包,请参阅:https ://tex.stackexchange.com/questions/39771/finding-a-ubuntu-package-for-a-sty-file

  • 这几乎成功了,我还必须添加`!sudo apt install cm-super` 以避免被告知我缺少 type1ec.sty (2认同)

Ima*_*deh 6

原因

基本上,问题是,type1cmtype1em默认情况下不与colab环境matplotlib安装。更多关于这个问题的信息:https : //github.com/matplotlib/matplotlib/issues/17412

解决方案

!apt install texlive-fonts-recommended texlive-fonts-extra cm-super dvipng
Run Code Online (Sandbox Code Playgroud)

type1cm是部分texlive-fonts-extratype1ec是其中一部分cm-super

所以要在 matplotlib 中设置 latex,你应该在你的 colab notebook 中有这个块:

import matplotlib
from matplotlib import rc
import matplotlib.pyplot as plt
%matplotlib inline

rc('text', usetex=True)
matplotlib.rcParams['text.latex.preamble'] = [r'\usepackage{amsmath}']
!apt install texlive-fonts-recommended texlive-fonts-extra cm-super dvipng
Run Code Online (Sandbox Code Playgroud)