我正在开发一个数学动画软件,它使用 将 LaTeX 字符串渲染为 svg 对象dvisvgm
。我希望该库能够识别哪些 svg 形状属于某些标记(如“x”或“\sqrt”),同时考虑到某些标记会生成多个 SVG 形状。有没有办法将此信息添加到生成的 svg 中?
谢谢!
答案1
与大多数 DVI 驱动程序一样,您可以使用插入信息\special
,dvisvgm
手册详细说明了各种可能性。
这里我使用dvisvgm:raw
将原始 svg 片段插入到生成的 SVG 中。
这些片段合并到结果 SVG 中时几乎不经过任何检查,因此很容易破坏输出,但只要小心谨慎,就可以解决问题。最安全的方法可能是插入 SVG(XML)注释,但从中提取信息会更困难。在这里,我将内容包装在svg 范围<g class="...">...</g>
组中<g>
,这在大多数地方或多或少都是安全的,并使用 css 类(此处未定义)注释表达式的术语。
所以
\documentclass{article}
\protected\def\m#1#2{%
\special{dvisvgm:raw <g class="#1">}%
#2%
\special{dvisvgm:raw </g>}%
}
\begin{document}
\pagestyle{empty}
\[
\m{lhs}{\m{sqrt}{\sqrt{\m{power}3^2+\m{power}{4^2}}}}
=
\m{rhs}{5}
\]
\end{document}
生成显示为以下内容的 SVG:
但具有显示幂和平方根等的内部结构:
生成的图像实际上有顶部规则,\sqrt
我只是错误地剪辑了它,左手√
由于不相关的原因而丢失,使用最新的 texlive 2023 我得到了
从
\documentclass{article}
\begin{document}
\pagestyle{empty}
Sqrt?
\[
\sqrt{3^2+4^2}
\]
\end{document}
看上去像是某个地方有 bug。