matplotlib mathtext字体STIX two或cambria math

wnavrhmk  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(254)

我一直在努力使Word(方程式)和Matplotlib(图)之间的数学字体保持一致。在Word-equation中,我有以下选项:cambria数学,stix两个数学,dejavu数学漩涡(我不会使用最后一个)。
在matplotlib中,对于我的图,我用途:plt.rcParams['mathtext.fontset'] = 'stix'(我不使用Tex)。
当我比较Word-equation“stix two math”结果和Matplotlib“stix”结果时,它们是不同的。(为什么?)我还尝试了this,通过直接指向PC中的.otf文件来修改matlplotlib。如果我理解正确的话,这只对文本有效,而对mathtext无效(mathtext在'$ equation $'内部),所以我不能不改变mathtext以使其与word-equation一致。
有什么建议吗?谢谢,只要字体一致就可以了.但我不知道该怎么做。
版本和PC:Windows 10、Matplotlib 3.4.1、Python 3.9.13、

ut6juiuv

ut6juiuv1#

也许这对其他使用ms word和使用python(matplotlib)的图形/绘图准备手稿的人来说会很有用。
首先,设置Ms word的数学字体。默认是Cambria Math,但我们可以添加其他数学字体,如stix two,xits等。请记住,数学和常规文本的字体是不同的。设置默认数学字体:在一个.doc文件中插入一个公式,进入标签equation tools,在“转换”旁边,点击箭头,将出现一个名为equation options的窗口。选择默认值。
在matplotlib中,它取决于我们需要匹配的字体:基本的是here。根据我有限的理解,在解决我自己的问题时,有几个选择:
1.使用matplotlib的mathtext字体家族:这是matplotlib中最简单的方法,但可用的mathfont非常有限。注意:stix math字体matplotlib是有点不同,如果你安装最新的stix两个数学在您的系统上(这是正在使用在您的字处理器).示例:

import matplotlib.pyplot as plt
    plt.rcParams['text.usetex'] = False
    plt.rcParams['mathtext.fontset'] = 'stix'  # or other, 'dejavuserif'
    plt.rcParams['font.family'] = 'serif'  # or 'DejaVu Serif'
    plt.rcParams['font.serif'] = ['Times New Roman']  # 'DejaVu Serif' serif' 'Times'

字符串
有关可用字体,请参见rcParams。
1.使用Tex引擎你必须知道一点关于乳胶序言。这里有(至少)两种选择:2.a.使用pdflatex

plt.rcParams['font.family'] = 'serif'  # or 'DejaVu Serif'
    plt.rcParams['font.serif'] = ['Times New Roman']  # 'DejaVu Serif' 'serif' 'Times
    plt.rcParams['text.usetex'] = True
    plt.rcParams['text.latex.preamble'] = r'''
    \usepackage{amsmath}
    \usepackage[lcgreekalpha]{stix2}
    '''


与下面的方法相比,这个方法稍微简单一些。不过,请参阅此answer以了解更多信息。
2.b.通过pgf后端使用XeLaTeX/LuaLaTeX,如here所述。例如,我们可以使用Cambria数学:

import matplotlib.pyplot as plt
    mpl.use("pgf")
    plt.rcParams.update({
    pgf.texsystem: "lualatex",
    font.family: "serif",  # use serif/main font for text elements
    text.usetex: True,     # use inline math for ticks
    pgf.rcfonts: False,    # don't setup fonts from rc parameters
    pgf.preamble: "\n".join([
    r"\usepackage{unicode-math}",   # unicode math setup
    r"\setmainfont{Cambria}",
    r"\setmathfont{Cambria Math}"
    ])
    })
    
    or for example use other font, replace the preamble with this:
    r"\usepackage{unicode-math}",   # unicode math setup
    r"\setmainfont{Stix Two Text}",
    r"\setmathfont{Stix Two Math}[math-style=french]",


使用pgf后端,代码的工作方式略有不同:

  • 可能无法预览您的绘图,除非您将其导出为pdf并在外部pdf阅读器中打开。有一种解决方法,但有时不起作用。
  • 使用pgf后端创建图可能会有问题,例如,如果您的数据中有“Nan”。Matplotlib似乎能够解决这个问题(背后),我们总是可以看到结果图,而不是pgf后端的情况。
  • 您可能需要更改某些代码;比如可能没有\mathrm相反,有\symup.请参考此question

对于方法2,我们必须理解如何正确地设置前导码。上面给出了一些例子,但要了解更多信息,您需要参考latex文档/论坛等。
到目前为止,方法2.提供了最佳方法,因为它为数学文本提供了许多选项。它使用unicode math包,其中包含大量字体选项。更多信息是here

相关问题