2012-02-11 10 views
7

Matplotlib non sembra trovare i file nella directory di lavoro corrente quando è in esecuzione in latex. Qualcuno sa dove cerca i file?Directory di lavoro in lattice Matplotlib/percorso di ricerca

Lo sfondo è: ho un enorme preambolo che ho \input in lattice prima dell'elaborazione (un sacco di macro, vari pacchetti utente, ecc.). In un documento autonomo, faccio \input{BigFatHeader.tex}. Quindi quando uso matplotlib, provo a inserire questo file nel preambolo. Il codice python per farlo è

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

E posso verificare che il file si trova nella CWD - lo vedo quando mi ls, o posso fare os.path.isfile("BigFatHeader.tex") e ottenere Vero. Ma quando provo a tracciare qualcosa usando il latex, python sputa un grosso messaggio di errore dal processo del lattice, che culmina nel ! Errore LaTeX: file BigFatHeader.tex non trovato. Quindi presumibilmente cambia in qualche altra directory (non /tmp/; ho controllato) per fare il suo lavoro. Qualche idea su dove potrebbe essere?

Il mio esempio di lavoro minima è:

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') 

Dove BigFatHeader.tex potrebbe essere semplice come

\usepackage{bm} 
+0

Non che questo ci ha aiutato a risolvere il mio problema, ma nel caso in cui qualcuno è curioso, la directory di lavoro nella mia installazione si è rivelata '~/.matplotlib/tex.cache /'. – Mike

risposta

8

Sto avendo lo stesso errore sulla mia Ubuntu Lucid, matplotlib 1.1.0. Ci sono due opzioni:

dandogli un percorso completo:

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

funziona per me. Si noti che non si inserisce l'estensione .tex per i file da \input. Se non si desidera hardcode il percorso, si può ottenere usando 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') 

O semplicemente leggere nel vostro file in una stringa di testo e impostare la rcParams con esso.

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') 
+0

Che funziona. Inoltre non avevo pensato di leggere il file in una stringa e aggiungerlo alla stringa del preambolo. Grazie! – Mike