使用 mathtext 解析器输出 svg 文件
Using mathtext parser to output a svg file
上下文
我正在寻找一种简单的方法来将正确排版的数学(使用 LaTeX)导入 blender. A solution for this has already been given。但这意味着离开搅拌机,使用多种工具,然后返回搅拌机并导入整个东西。
Blender 自带 Python 并且可以导入 svg
我想找到其他方法,Blender 有一套基于 Python 的强大工具。我在想:我可以 Python 解析一些 TeX 输入,然后在 inside blender 中生成一个 svg(虚拟)文件吗?这样就可以解决问题了。
matplotlib“模拟”TeX
可以 install any Python library 并在搅拌机中使用它。所以这让我想到了 matplotlib 的一个可能的“hack”。
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
是一个包含所有所需信息的元组。但我找不到将其转换为(虚拟)svg 文件的方法(在 backend api 中)。
有什么想法吗?
谢谢
Matplotlib 需要一个图形(目前也是 canvas)才能真正渲染任何东西。因此,为了生成一个仅包含文本(数学文本公式)的 svg 文件,您仍然需要一个图形和一个 canvas 并且文本需要实际位于图形内部,这可以通过 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))
上下文
我正在寻找一种简单的方法来将正确排版的数学(使用 LaTeX)导入 blender. A solution for this has already been given。但这意味着离开搅拌机,使用多种工具,然后返回搅拌机并导入整个东西。
Blender 自带 Python 并且可以导入 svg
我想找到其他方法,Blender 有一套基于 Python 的强大工具。我在想:我可以 Python 解析一些 TeX 输入,然后在 inside blender 中生成一个 svg(虚拟)文件吗?这样就可以解决问题了。
matplotlib“模拟”TeX
可以 install any Python library 并在搅拌机中使用它。所以这让我想到了 matplotlib 的一个可能的“hack”。
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
是一个包含所有所需信息的元组。但我找不到将其转换为(虚拟)svg 文件的方法(在 backend api 中)。
有什么想法吗?
谢谢
Matplotlib 需要一个图形(目前也是 canvas)才能真正渲染任何东西。因此,为了生成一个仅包含文本(数学文本公式)的 svg 文件,您仍然需要一个图形和一个 canvas 并且文本需要实际位于图形内部,这可以通过 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))