的 TL;博士 强> 包含 tex - 中的文件 pgf.preamble 的 matplotlib 需要绝对路径。
tex
pgf.preamble
matplotlib
对于未来,我建议如下 pdflatex 用于调试的“替换脚本”:
pdflatex
#!/usr/bin/env bash MAIN=/usr/bin/pdflatex cat /dev/stdin | tee /some/abs/path/to/dbg.tex | "${MAIN}" "${@}"
请务必将其另存为 pdflatex ,确保它是可执行的,确保 /usr/bin/pdflatex 是你的实际 pdflatex 并确保首先在yout中找到此包装器 PATH (参见 which pdflatex )。 什么时候跑 python 发电机,我们保留最后的 tex 输入 dbg.tex 。 这回答(2)。
/usr/bin/pdflatex
PATH
which pdflatex
python
dbg.tex
考虑到输出,我们看到:
\documentclass{minimal} \usepackage{import} \subimport{./}{foo.tex} \begin{document} text $math \mu$ \typeout{pgf_backend_query_start} \sbox0{\sffamily\fontsize{10.000000}{12.000000}\selectfont lp} \typeout{\the\wd0,\the\ht0,\the\dp0} \sbox0{\sffamily\fontsize{10.000000}{12.000000}\selectfont 0} \typeout{\the\wd0,\the\ht0,\the\dp0} \sbox0{\sffamily\fontsize{10.000000}{12.000000}\selectfont 1} \typeout{\the\wd0,\the\ht0,\the\dp0} \sbox0{\sffamily\fontsize{10.000000}{12.000000}\selectfont 2} \typeout{\the\wd0,\the\ht0,\the\dp0} \sbox0{\sffamily\fontsize{10.000000}{12.000000}\selectfont 3} \typeout{\the\wd0,\the\ht0,\the\dp0} \sbox0{\sffamily\fontsize{10.000000}{12.000000}\selectfont 4} \typeout{\the\wd0,\the\ht0,\the\dp0} \sbox0{\sffamily\fontsize{10.000000}{12.000000}\selectfont \foo{}} \typeout{\the\wd0,\the\ht0,\the\dp0}
我不知道那对什么有用。 但我猜 matplotlib 正在尝试调整它尝试编译此“测试”文档的字体设置。 那(某种)答案(1)。
现在结论(后见之明): matplotlib 将此示例文档编译在临时目录中。 显然没有 foo.tex 在这个目录中可用,所以 subimport 失败。 从那时起,很明显 \foo 将无法使用。
foo.tex
subimport
\foo
虽然不是最干净的解决方案, 这可以通过包括修复 foo.tex 通过绝对路径。 工作python生成器最终回答(3):
import matplotlib as mpl import pathlib mpl.use("pgf") mpl.rcParams.update({ "pgf.texsystem": "pdflatex", "pgf.preamble": [ r"\usepackage{import}", f'\subimport{{{pathlib.Path.cwd().resolve()}/}}{{foo.tex}}'] }) import matplotlib.pyplot as plt plt.figure(figsize=(4.5,2.5)) plt.plot(range(5)) plt.xlabel(r'\foo{}') plt.savefig('foo.pgf')
(我用 python3 和 pathlib 。 对于 python2 我们宁愿回归 os.getcwd 。)
python3
pathlib
python2