将变量值注入Katex / Latex语法

问题描述 投票:0回答:1

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

reactjs variables math input katex
1个回答
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那样有问题的东西似乎也适用于此替换方法。

© www.soinside.com 2019 - 2024. All rights reserved.