(在Win10上使用Python 3.6.1,在一个virtualenv中,基本上只安装了numpy / pandas / matplotlib,用于处理数字运算的东西。我没有安装Tkinter,而是希望保持这种方式。)< / p>
我有以下测试代码,试图静态呈现MathML文本:
import matplotlib
matplotlib.use('agg')
import matplotlib.pyplot as plot
def render(mathml):
plot.clf()
plot.rc('font', family='monospace', size=72)
plot.axis('off')
plot.text(0, 0, f'{mathml}')
plot.savefig(f'hax.png')
render('$lorem^{ipsum}$')
结果test.png
以默认字体(DejaVu Sans Oblique)而不是等宽字体显示文本:
明确指定字体(例如family='Courier New'
)也无效,更改输出格式也无效。文本已正确调整大小,并且没有错误或警告出现-输出只是没有显示正确的字体。
这是怎么回事?我该如何解决?
答案 0 :(得分:2)
数学字体的选项根据the tutorial
DejaVu Sans(默认),DejaVu Serif,Computer Modern字体(来自(La)TeX),STIX字体(用于与Times完美融合)或您提供的Unicode字体
通过默认设置,您可以使用\mathtt
获得类似“打字机”的感觉
import matplotlib.pyplot as plt
def render(mathml):
plt.clf()
plt.rc('font', size=72)
plt.axis('off')
plt.text(0, 0, f'$\\mathtt{{{mathml}}}$')
plt.show()
render('lorem^{ipsum}')
可以通过mathtext.fontset
rc参数在自定义字体集上使用Mathtext。
plt.rcParams["mathtext.fontset"] = "custom"
对于快递新字体,它可能看起来像
import matplotlib.pyplot as plt
def render(mathml):
plt.clf()
plt.rc('font', size=72)
plt.rc('mathtext', fontset="custom", tt="Courier New")
plt.axis('off')
plt.text(0, 0, f'$\\mathtt{{{mathml}}}$')
plt.show()
render('lorem^{ipsum}')