我正在开发一个使用 Katex 格式显示数学公式的项目。
现在我在这里面临一些问题。
为了渲染分数,katex语法为
\dfrac{x}{y}
现在,如果我的值 x 值 3 ,另一个变量 y 值 5 。< / p>
如何将值注入 Katex 语法?
我想要像
这样的东西var x = 3;
var y = 5;
\dfrac{x}{y}
katex语法中的 x 和 y 将被实际值替换。
注意:我也在使用https://github.com/talyssonoc/react-katex
渲染Katex。
答案 0 :(得分:2)
我想我会使用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
这样有问题的东西似乎也适用于此替换方法