我正在从事一个使用 katex 格式显示数学公式的项目。
现在我在这里面临一些问题。
用于渲染分数Katex语法为
dfrac{x}{y}
现在,如果我有一个变量 x 的值 3 和另一个变量 y y of Value 5 5 。/p> 如何将值注入 katex 语法? 我想拥有 其中 x 和 y in katex语法将被实际值替换。 注意:我也在使用https://github.com/talyssonoc/reaeact-katex 渲染katex。var x = 3;
var y = 5;
dfrac{x}{y}
我想我会使用宏替换。尝试通过任何机械生成公式将公式表示为frac{x}{y}
。然后,您可以替换变量名称或代替这些宏的值。这样的东西:
katex.render("\frac{\x}{\y}", element, {
macros: {
"\x": String(x),
"\y": String(y),
}
});
如果您没有一种方法来控制公式最初的构建方式,那么这仅将问题从将值替换为公式而将命令替换为命令。在这种情况下,您可能想将输入字符串归为命令…
和其他字母。命令保持原样,而其他字母则由可变替换。
要小心的一件事是分组:输入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}
array
中的a
或rlrl
中的r
都不应被视为变量。解决此问题确实是有问题的,因为它需要大量的语义洞察力。
解决这一难题的一种方法是让Katex进行渲染,然后在由此产生的DOM子树中进行替换。您应该能够将变量识别为<span class="mord …">…</span>
(mord
代表数学普通的代表)。这意味着您取决于Katex用于其输出的确切表示,因此您应该确保运行固定版本的Katex,因为这些内部事物可能会更改,恕不另行通知。还要注意以下事实:在某些(可能的未来)版本中,这可能会破坏某些取决于给定盒子的宽度的构造,尽管甚至像underbrace
一样有问题,目前似乎也可以使用这种替代方法。