【问题标题】:Using mathtext parser to output a svg file使用 mathtext 解析器输出 svg 文件
【发布时间】:2018-12-01 01:16:29
【问题描述】:

上下文

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

Blender自带Python,可以导入svg

我想另辟蹊径,blender 有一套基于 Python 的强大工具。我在想:我可以让 Python 解析一些 TeX 输入,然后生成一个 svg(虚拟)文件 inside blender。这样就可以解决问题了。

matplotlib “模拟” TeX

可以install any Python library 并在搅拌机中使用它。所以这让我想到了 matplotlib 可能的“破解”。

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

考虑以下 sn-p。

import matplotlib.mathtext as mathtext

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

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

有什么想法吗?

谢谢

【问题讨论】:

  • 删除了pyparsing标签并添加了svg标签,因为这实际上是关于将mathtext解析的输出导出到svg。 mathtext 使用 pyparsing 的事实与这个问题并没有太大关系。

标签: matplotlib svg blender


【解决方案1】:

Matplotlib 需要一个图形(目前也是一个画布)才能真正渲染任何东西。因此,为了生成一个仅内容是文本(数学文本公式)的 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))

【讨论】:

  • 谢谢!顺便说一句,你知道我在哪里可以找到关于存储在我的元组 t 中的对象的文档吗?
  • 您需要什么样的信息以及出于什么原因?
猜你喜欢
  • 2015-12-01
  • 2014-01-15
  • 2019-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
相关资源
最近更新 更多