我正在开发一个使用Katex格式显示数学公式的项目。
现在我在这里面临一些问题。
为了渲染分数,katex语法是
\dfrac{x}{y}
现在,如果我有一个值为3的变量x和另一个值为5的变量y。
我如何将值注入Katex语法?
我希望有类似的东西
var x = 3;
var y = 5;
\dfrac{x}{y}
其中latex语法中的x和y将替换为实际值。
注意:我也在使用https://github.com/talyssonoc/react-katex
渲染Katex。
我想我会用macro substitution。尝试通过生成配方的任何机器将您的公式表示为\frac{\x}{\y}
。然后,您可以替换变量名称或值来代替这些宏。像这样的东西:
katex.render("\\frac{\\x}{\\y}", element, {
macros: {
"\\x": String(x),
"\\y": String(y),
}
});
如果您无法控制最初如何构造公式,那么这只会将问题从将值替换为公式以将命令替换为公式。在这种情况下,您可能希望将输入字符串标记为commands \…
和其他字母。命令保持不变,而其他字母则受变量替换。
需要注意的一件事是分组:输入\frac xy
渲染得很好,但是以天真的方式替换x=34.5
和y=5.67
,结果\frac 34.55.67
(这是文本和宏替换将给你的东西)呈现为\frac{3}{4}.55.67
。因此,确保公式中的每个宏都包含在{…}
中,或者在{…}
中进行替换时添加另一个级别的"\\x": "{" + x + "}"
。在公式中包含{…}
的宏有一个好处,你不必担心宏吃掉后续空间:\text{\x is 2}
是坏的但\text{{\x} is 2}
更好。
但即使分组正确完成,这种方法并不完美,因为并非所有非命令都是变量。例如,对于\begin{array}{rlrl}…\end{array}
,a
中的array
和r
中的rlrl
都不应被视为变量。解决这个问题确实存在问题,因为它需要大量的语义洞察力。
解决这个难题的一种方法是让KaTeX进行渲染,然后在生成的DOM子树中进行替换。你应该能够将变量识别为<span class="mord …">…</span>
(mord
代表数学普通)。这意味着您依赖于KaTeX用于输出的确切表示,因此您应该确保运行固定版本的KaTeX,因为这些内部事物如有变更,恕不另行通知。还要注意这样一个事实:在某些(可能是将来的)版本中,这可能会破坏某些取决于给定框宽度的构造,尽管即使像\underbrace
那样有问题的东西似乎也适用于此替换方法。