2012-02-11 27 views
7

当运行latex时,Matplotlib似乎无法在当前工作目录中找到文件。有谁知道它在哪里寻找文件?Matplotlib乳胶工作目录/搜索路径

背景是:我有一个巨大的序言,我\input成胶乳处理前(大量的宏,各种使用包等)。在一个独立的论文中,我做了\input{BigFatHeader.tex}。所以当我使用matplotlib时,我试图在前导码中输入这个文件。在Python代码做,这是

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

而且我可以验证该文件是在CWD - 我看到它时,我ls,或者我可以做os.path.isfile("BigFatHeader.tex")并获得真正的。但是当我尝试绘制使用乳胶的东西时,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} 
+0

不,这有助于解决我的问题,但如果有人想了解情况,在我的安装工作目录竟然是'〜/ .matplotlib/tex.cache /'。 – Mike 2012-02-11 20:23:25

回答

8

我有我的Ubuntu的清醒了同样的错误那么简单,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') 
+0

这是有效的。我也没有想过将文件读入字符串并将其添加到前导字符串中。谢谢! – Mike 2012-02-11 20:22:11