Matplotlib латекс рабочий каталог / путь поиска - PullRequest
7 голосов
/ 11 февраля 2012

Matplotlib, похоже, не находит файлы в текущем рабочем каталоге при работе с латексом. Кто-нибудь знает, где он ищет файлы?

Справочная информация: у меня есть огромная преамбула, которую я \input помещаю в латекс перед обработкой (много макросов, различные пакеты использования и т. Д.). В отдельной статье я делаю \input{BigFatHeader.tex}. Поэтому, когда я использую matplotlib, я пытаюсь просто ввести этот файл в преамбулу. Код Python для этого:

matplotlib.rcParams['text.latex.preamble'].append(r'\input{BigFatHeader.tex}')

И я могу проверить, что этот файл находится в cwd - я вижу это, когда я ls, или я могу сделать os.path.isfile("BigFatHeader.tex") и получить True. Но когда я пытаюсь построить что-то с использованием латекса, python выдает большое сообщение об ошибке из процесса латекса, которое завершается ! Ошибка LaTeX: Файл BigFatHeader.tex не найден. Так что, по-видимому, он переключается в какой-то другой каталог (не /tmp/; я проверял) для выполнения своей работы. Есть идеи, где это может быть?

Мой минимальный рабочий пример:

import matplotlib
import matplotlib.pyplot as plt
matplotlib.rcParams['text.latex.preamble'] = r'\input{BigFatHeader.tex}'
matplotlib.rcParams['text.usetex'] = True
plt.plot([1,2])
plt.savefig('MWE.pdf')

Где BigFatHeader.tex может быть таким же простым, как

\usepackage{bm}

1 Ответ

8 голосов
/ 11 февраля 2012

У меня такая же ошибка на моем Ubuntu Lucid, matplotlib 1.1.0. Есть два варианта:

Даем полный путь:

matplotlib.rcParams['text.latex.preamble'] = r'\input{/home/br/sweethome/temp/BigFatHeader}'

у меня работает. Обратите внимание, что вы не ставите расширение .tex, чтобы файлы были \input. Если вы не хотите жестко задавать путь, вы можете получить его, используя os.getcwd():

import matplotlib
import matplotlib.pyplot as plt
import os

filename=r'\input{'+os.getcwd()+r'/BigFatHeader}'

matplotlib.rcParams['text.latex.preamble'] = filename
matplotlib.rcParams['text.usetex'] = True
plt.plot([1,2])
plt.savefig('MWE.pdf')

Или просто прочитайте в своем файле текстовую строку и установите rcParams вместе с ней.

import matplotlib
import matplotlib.pyplot as plt

paramstring=r'\usepackage{bm}'
matplotlib.rcParams['text.latex.preamble'] = paramstring
matplotlib.rcParams['text.usetex'] = True
plt.plot([1,2])
plt.savefig('MWE.pdf')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...