Matplotlib乳胶工作目录/搜索路径

Mik*_*ike 7 latex matplotlib

运行latex时,Matplotlib似乎没有在当前工作目录中找到文件.有谁知道它在哪里查找文件?

背景是:我有一个巨大的序言,我\input在处理之前进入乳胶(许多宏,各种usepackages等).在一篇独立的论文中,我做到了\input{BigFatHeader.tex}.因此,当我使用matplotlib时,我尝试在前导码中输入此文件.执行此操作的python代码是

matplotlib.rcParams['text.latex.preamble'].append(r'\input{BigFatHeader.tex}')
Run Code Online (Sandbox Code Playgroud)

而且我可以验证该文件是否在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')
Run Code Online (Sandbox Code Playgroud)

哪里BigFatHeader.tex可能很简单

\usepackage{bm}
Run Code Online (Sandbox Code Playgroud)

ev-*_*-br 8

我在我的Ubuntu Lucid,matplotlib 1.1.0上遇到了同样的错误.有两种选择:

给它一个完整的路径:

matplotlib.rcParams['text.latex.preamble'] = r'\input{/home/br/sweethome/temp/BigFatHeader}'
Run Code Online (Sandbox Code Playgroud)

适合我.请注意,您没有.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')
Run Code Online (Sandbox Code Playgroud)

或者只需将您的文件读入文本字符串并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')
Run Code Online (Sandbox Code Playgroud)