使用mathtext解析器输出svg文件

时间:2018-11-29 22:12:27

标签: matplotlib svg blender

上下文

我正在寻找一种将排版数学(使用LaTeX)正确导入blender的简单方法。此has already been given的解决方案。但这意味着退出搅拌器,使用多种工具,然后返回搅拌器并导入整个东西。

Blender随附于Python,可以导入svg

我想找到另一种方法,blender具有一组基于Python的强大工具。我当时在想:我可以让Python解析一些TeX输入,然后生成一个内部混合器的svg(虚拟)文件。这样可以解决问题。

matplotlib“模拟” TeX

可以install any Python library并在搅拌机中使用它。因此,这让我想到了matplotlib的可能“入侵”。

mathtext是一个模块,用于为字符串提供解析器,该字符串具有类似于TeX的数学表达式语法。 svg是可用的“后端”之一。

请考虑以下代码段。

import matplotlib.mathtext as mathtext

parser = mathtext.MathTextParser('svg')

t = parser.parse(r'$\int_{0}^{t} x^2 dx = \frac{t^3}{3}$')

t是具有所有所需信息的元组。但是我找不到在backend api中将其转换为(虚拟)svg文件的方法。

有什么想法吗?

谢谢

1 个答案:

答案 0 :(得分:3)

Matplotlib需要一个图形(目前还需要一个画布)才能实际渲染任何东西。因此,为了生成一个仅包含文本(svgtext公式)的svg文件,您仍然需要一个图形和一个画布,并且文本需要实际驻留在图形内部,这可以通过fig.text(..)实现。 然后,您可以通过fig.savefig(..)将图形保存到svg。使用bbox_inches="tight"选项可确保图形被裁剪到文本范围。并将facecolor设置为透明颜色会删除图形的背景色。

from matplotlib.backends.backend_agg import FigureCanvasAgg
from matplotlib.figure import Figure

fig = Figure(figsize=(5, 4), dpi=100)
canvas = FigureCanvasAgg(fig)

fig.text(.5, .5, r'$\int_{0}^{t} x^2 dx = \frac{t^3}{3}$', fontsize=40)
fig.savefig("output.svg", bbox_inches="tight", facecolor=(1,1,1,0))

enter image description here