Уравнения LaTeX не отображаются в совместной лаборатории Google при использовании matplotlib

#python #matplotlib #latex #google-colaboratory

#python #matplotlib #Латекс #google-совместная лаборатория

Вопрос:

Если я возьму официальный пример, содержащий latex, с веб-сайта 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"$displaystylesum_{n=1}^inftyfrac{-e^{ipi}}{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()
 

и попробуйте запустить его в записной книжке Google Colab, он выдаст большой stacktrace со следующим сообщением в конце:

  [Errno 2] No such file or directory: 'latex': 'latex'
 

Почему это происходит и как я могу это исправить?

Мои попытки:
Я подумал, что эта ошибка может возникнуть из-за отсутствия latex в обслуживающей виртуальной машине, поэтому я попытался установить texlive перед импортом matplotlib с:

 ! sudo apt-get install texlive-latex-recommended 
 

Это завершается успешно. Однако matplotlib жалуется на отсутствие какого-либо файла latex * .sty, который после поиска в Google должен содержаться в 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. Действительно, достаточно установить пакеты ubuntu, содержащие требуемые файлы .sty, которые в данном случае являются texlive-latex-extra и dvipng . Поэтому выполните следующие установки:

 !sudo apt install cm-super dvipng texlive-latex-extra texlive-latex-recommended
 

Чтобы найти пакет ubuntu, содержащий определенный файл .sty, см.: https://tex.stackexchange.com/questions/39771/finding-a-ubuntu-package-for-a-sty-file

Комментарии:

1. Это почти сработало, мне также пришлось добавить ! sudo apt install cm-super , чтобы мне не сказали, что мне не хватает type1ec.sty

2. Спасибо, это также было указано в ответе Iman, возможно, что-то изменилось за этот период.

3. для меня это сработало отлично, спасибо!

Ответ №2:

Причина

По сути, проблема в том, что type1cm and type1em не устанавливается по умолчанию с matplotlib в среде colab. Подробнее об этом здесь: 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 .

Итак, чтобы настроить latex в 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'usepackage{amsmath}']
!apt install texlive-fonts-recommended texlive-fonts-extra cm-super dvipng
 

Ответ №3:

Так что это очень сложное решение, но я заставил его работать, по крайней мере. Проблема действительно заключалась в отсутствующем пакете 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/ amp;amp; 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
 

Эти команды будут выполнять следующее:

  1. минимальная установка texlive, которая все еще работает
  2. не уверен, что эти пакеты необходимы, но это не повредит
  3. загрузите type1cm пакет из ctan официально
  4. распакуйте архив в /tmp/type1cm
  5. установите пакет, выполнив latex команду в type1cm.ins файле. Обратите внимание, что предоставление пути непосредственно к команде latex не сработало. Также команда cd and latex должна выполняться в той же строке (за тем же! символ), в противном случае cd не имеет никакого эффекта
  6. создайте папку для пакета type1cm в дереве texmf
  7. скопируйте туда файл .sty
  8. обновите tex, чтобы он нашел новый пакет

Ресурсы:
Как установить type1cm
Куда поместить файлы * .sty в Linux texlive install