因此,我正在使用matplotlib中的pgf backend
在我的TeX文档中包括一些自动编译的对我Tex文档其他部分(图,书目)的引用。
import matplotlib
matplotlib.use('pgf')
import matplotlib.pyplot as plt
plt.figure()
plt.txt(0.0,0.5,r'Some text compiled in latex \cite{my_bib_tag}')
plt.savefig("myfig.pgf", bbox_inches="tight", pad_inches=0)
然后在我的tex文档中有如下几行:
\usepackage[dvipsnames]{xcolor}
%yada yada yada
\begin{figure}
\input{myfig.pgf}
\end{figure}
这很好用,但是当我尝试为文本添加一些透明度时,它不起作用。例如在设置时:
plt.txt(0.0,0.5,r'Some text compiled in latex \cite{my_bib_tag}', alpha=0.5)
文本显示为不变,如果我尝试通过使用xcolor包中的\textcolor
(或LateX中的任何其他命令,例如透明包)在编译中进行编辑,则在编译Python时会遇到解析错误。
我尝试了转义字符,但是以某种方式我无法使其正常工作。
plt.txt(0.0,0.5,r'\textcolor{gray}{Some text compiled in latex \cite{my_bib_tag}}', alpha=0.5)
#raise ValueError !Undefined Control Sequence
编辑1:我尝试在所需的序言中添加所需的软件包,但是在保存到pgf(带有pgf后端)时不起作用,它使用了Agg后端(我认为是预期的行为)。但是我需要将其保存在pgf中,以便对引用进行动态解析。
import matplotlib
import matplotlib.pyplot as plt
matplotlib.rcParams["text.usetex"] = True
matplotlib.rcParams["text.latex.preamble"].append(r'\usepackage[dvipsnames]{xcolor}')
matplotlib.verbose.level = 'debug-annoying'
plt.figure()
plt.text(0.0,0.5,r'\textcolor{gray}{Some text compiled in latex \cite{my_bib_tag}}', alpha=0.5)
#works in .png, does not work in .pgf
#plt.savefig("myfig.png", bbox_inches="tight", pad_inches=0)
编辑2:一种解决方法是在plt.text中使用颜色参数,但是如果我想使用更复杂的LateX样式该怎么办...
答案 0 :(得分:1)
由于@ImportanceOfBeingErnest,我终于使它可与pgf后端一起使用:
import matplotlib
matplotlib.use('pgf')
import matplotlib.pyplot as plt
pgf_with_custom_preamble = {
"text.usetex": True, # use inline math for ticks
"pgf.rcfonts": False, # don't setup fonts from rc parameters
"pgf.preamble": [
"\\usepackage[dvipsnames]{xcolor}", # load additional packages
]
}
matplotlib.rcParams.update(pgf_with_custom_preamble)
plt.figure()
plt.text(0.0,0.5,r'\textcolor{gray}{Some text compiled in latex \cite{my_biblio_tag}}')
plt.savefig("myfig.pgf", bbox_inches="tight", pad_inches=0)