将变量值注入Katex / Latex语法

时间:2017-11-30 03:58:52

标签: reactjs variables math input katex

我正在开发一个使用 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。

1 个答案:

答案 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.5y=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中的arrayr中的rlrl都不应被视为变量。解决这个问题确实存在问题,因为它需要大量的语义洞察力。

解决这个难题的一种方法是让KaTeX进行渲染,然后在生成的DOM子树中进行替换。您应该能够将变量标识为<span class="mord …">…</span>mord代表数学普通)。这意味着您依赖于KaTeX用于输出的确切表示,因此您应该确保运行固定版本的KaTeX,因为这些内部事物如有变更,恕不另行通知。还要注意这样一个事实:在某些(可能是将来的)版本中,这可能会破坏某些取决于给定框宽度的构造,尽管即使像\underbrace这样有问题的东西似乎也适用于此替换方法