【问题标题】:Force LaTeX font to match default matplotlib font强制 LaTeX 字体匹配默认的 matplotlib 字体
【发布时间】:2016-05-25 21:55:47
【问题描述】:

我已经看到这个问题在这里和那里弹出,但还没有找到合适的答案。

在 matplotlib 中绘制绘图时,插入符号和数学函数(如分数、指数等)的唯一方法是使用 TeX 格式。但是,默认情况下,TeX 格式使用不同的字体并将文本斜体。例如,如果我想要一个轴标签来说明以下内容:

光子/cm^2/s/埃

我必须做到以下几点:

ax1.set_ylabel(r'Photons/$cm^2$/s/$\AA$')

这会产生一个非常丑陋的标签,它使用 2 种不同的字体,并且有一些斜体字。

如何永久更改 TeX (不是相反) 的字体,使其与 matplotlib 使用的默认字体匹配?

我见过其他解决方案,例如告诉用户使用 \mathrm{} 手动使绘图中的所有文本相同,但这非常乏味。我还看到了更改 matplotlib 的默认字体以匹配 TeX 的解决方案,这对我来说似乎完全倒退了。

【问题讨论】:

    标签: python matplotlib tex


    【解决方案1】:

    事实证明,解决方案相当简单,我的一位同事找到了解决方案。

    如果我要使用这行代码来创建标题:

    fig.suptitle(r'$H_2$ Emission from GJ832')
    

    结果将是“H2 Emission from GJ832”,这说明了我遇到的问题。但是,事实证明 $$ 内的任何内容都转换为数学类型,因此分配了斜体。

    如果我们把那行代码改成下面这样:

    fig.suptitle(r'H$_2$ Emission from GJ832')
    

    那么结果是没有斜体的“H2 Emission from GJ832”。所以这是一个示例,我们可以将数学类型限制为仅包含文本的数学部分,即创建 2 的下标。

    但是,如果我将代码更改为以下内容:

    fig.suptitle(r'H$_{two}$ Emission from GJ832')
    

    结果将是“Htwo Emission from GJ832”,它再次引入了斜体字。在这种情况下,对于必须在美元符号内包含文本(或正在创建单位符号)的任何情况,您可以通过以下方式轻松删除斜体:

    fig.suptitle(r'H$_{\rm two}$ Emission from GJ832')
    

    或者在创建符号的情况下:

    ax2.set_xlabel(r'Wavelength ($\rm \AA$)')
    

    前者导致“H两个 GJ832发射”

    后者在“波长(A)”中 其中 A 是埃符号。

    通过在美元符号中的文本或符号之前调用 \rm,这两种方法都会产生所需的结果,并且没有任何斜体。结果没有斜体,包括由 \AA 创建的埃符号。

    虽然这不会改变 TeX 格式的默认设置,但它是解决问题的简单方法,不需要任何新的包。无论如何,谢谢罗兰史密斯的建议。我希望这可以帮助其他在同一问题上苦苦挣扎的人。

    【讨论】:

      【解决方案2】:

      对于排版单位,使用siunitx 包(带有mode=text)而不是数学模式。

      更新:上述内容仅在您在 rc 设置中定义了text.usetex : True 时有效。

      来自matplotlib docs

      请注意,您不需要安装 TeX,因为 matplotlib 提供了自己的 TeX 表达式解析器、布局引擎和字体。

      还有:

      常规文本和数学文本可以在同一个字符串中交错。 Mathtext 可以使用 Computer Modern 字体(来自 (La)TeX)、STIX 字体(旨在与 Times 很好地融合)或您提供的 Unicode 字体。可以使用自定义变量mathtext.fontset选择mathtext字体

      读到这里,听起来如果不使用 TeX,设置 mathtext.fontset 和 matplotlib 使用的常规字体一样可以解决问题。

      【讨论】:

      • 这实际上不是一个糟糕的解决方案,除了需要学习新的语法。但是,我不是在使用 SI 单位,而是使用 cgs 单位(我在包装中没有看到只有几个单位,但它们恰好是我经常使用的一些单位)。感谢您的回复!
      • @Will.Evo 你可能没有使用 TeX。查看更新的答案。
      • 罗兰,感谢您的回复。我正在使用 TeX 并找到了一个非常简单的解决方案。感谢您的帮助!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      • 2011-08-25
      相关资源
      最近更新 更多