2012-02-11 15 views
7

latexを実行しているときに、Matplotlibが現在の作業ディレクトリ内のファイルを検索していないようです。誰がファイルを探すのか知っていますか?Matplotlib latex作業ディレクトリ/検索パス

バックグラウンドは:処理する前にラテックスに私が\inputという大きなプリアンブルを持っています(たくさんのマクロ、さまざまなusepackagesなど)。スタンドアロンの用紙では、私は\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/;ではありません)。これがどこにあるのか?

マイ最小限の作業例は次のとおりです。

BigFatHeader.texは、私は私のUbuntuの明晰、matplotlibの1.1.0に同じエラーを抱えている
+0

ない、これは私の問題を解決する助けたが、場合には、誰もが好奇心であることを、私のインストールでの作業ディレクトリは '〜/ .matplotlib/tex.cache /'であることが判明しました。 – Mike

答えて

8

\usepackage{bm} 

のような単純なものかもしれません
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') 

はそれを完全なパスを与える:私のために

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

作品 2つのオプションがあります。ファイルの拡張子が.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') 
+0

それは動作します。また、ファイルを文字列に読み込んでプリアンブル文字列に追加することも考えていませんでした。ありがとう! – Mike