【问题标题】:How to avoid calling latex in matplotlib (output to pgf)如何避免在 matplotlib 中调用 latex(输出到 pgf)
【发布时间】:2019-07-02 17:53:59
【问题描述】:

我正在使用 matplotlib 及其 pgf 后端来生成我包含在我的 LaTeX beamer 文档中的绘图。当我使用未定义的乳胶命令时遇到麻烦。但是对于我的应用程序,我不需要 matplotlib 来生成带有乳胶的标签或注释,我只想要一个正确的 pgf 输出,我会在我的投影仪文档上调用 LaTeX。如果我要在笔记本中运行此代码,我希望在 xlabel 中有一个带有文字“\si{\percent}”的图。

在下面的 MWE 中,当我使用注释行(使用 \si{\percent})运行它时,matplotlib 崩溃并出现乳胶错误(“未知命令 si”)。我不想用 matplotlib 创建序言,我只想要包含 \si{\percent} 命令的 pgf 输出......

如果我使用双反斜杠,代码会通过,但双反斜杠也会出现在 pfg 输出中,因此 Latex 无法识别该命令(我猜它会看到换行符)。

我不明白 plt.rc('text', usetex=False) 的“价值”。我认为这将禁用调用 LaTeX 一起......

import numpy as np
import matplotlib as mpl
mpl.use('pgf')
from matplotlib import pyplot as plt
from matplotlib import rc
plt.style.use('bmh')
plt.rc('pgf',rcfonts=False)
plt.rc('text', usetex=False)
x = np.linspace(0,100,101)
y = np.cos(x/100)*np.exp(-x/100)
plt.plot(x,y)
#plt.xlabel(r'value (\si{\percent})')
plt.xlabel(r'value (%)')
plt.savefig('test.pgf')

【问题讨论】:

    标签: python matplotlib latex pgf


    【解决方案1】:

    您是否有任何理由不愿加入序言?这样做是一个简单的解决方案。以下对我有用:

    import numpy as np
    import matplotlib as mpl
    
    mpl.use('pgf')
    
    from matplotlib import pyplot as plt
    
    pgf_with_latex = {
            'text.usetex': False,
            'pgf.rcfonts': False,
            "pgf.preamble": [
                    r"\usepackage{siunitx}"
                    ]
    }
    
    mpl.rcParams.update(pgf_with_latex)
    
    plt.style.use('bmh')
    
    x = np.linspace(0,100,101)
    y = np.cos(x/100)*np.exp(-x/100)
    plt.plot(x,y)
    
    plt.xlabel(r'value (\si{\percent})')
    plt.savefig('test.pgf')
    

    【讨论】:

    • 感谢您的回答。我不喜欢包含序言的选项,因为我必须为我想要使用的所有软件包都这样做。在多个位置“维护”同一个列表也让人感觉不舒服(我在投影仪演示中制作和使用了 40 多个图)。
    • 不幸的是,是的,您必须包含排版情节所需的所有软件包。但是,您不必在多个位置维护此序言。您可以更改默认的 matplotlibrc 文件或创建自己的文件,然后在绘图例程开始时调用它;例如plt.style.use('mybeamer')
    • 但是我仍然会同步两个文件(matplotlibrc 和我的乳胶投影仪源)。有没有办法告诉 matplotlib 将标签、注释视为纯文本并将此文本“复制”到 pgf 文件(这样当我编译我的乳胶时,乳胶命令被解释)?
    • 抱歉,虽然你想要的看起来很合理,但我目前认为没有任何办法可以做到不改变序言。
    猜你喜欢
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 2012-01-13
    相关资源
    最近更新 更多