javascript - 如何通过 JavaScript 动态插入 MathJax (Latex)?

标签 javascript html mathjax

我有一个 LaTeX(我使用 MathJax 来复制)公式,它在 HTML 中完美运行,但是当我尝试通过 .innerHTML 注入(inject)它时,它失败了。

在正常的 HTML 下我得到这个: enter image description here

但是当我在 JS 中使用这段代码时:

document.getElementById("si_suvat_equation").innerHTML = 
"<span>\begin{gather} s = ut + \frac{1}{2}  at^{2}\\ \notag end{gather}</span>";

然后我得到这个: enter image description here

那么我如何才能让我注入(inject)的 HTML 看起来像原始 HTML 呢?我假设 JS 正在读取某些内容,就好像它是代码一样,而不是仅仅将其原始注入(inject)。但我不知道如何改变它,所以它只注入(inject)原始代码。

最佳答案

一些要做的事情:

  • 在 JavaScript 字符串文字中,反斜杠具有特殊含义。有几种方法可以解决这个问题,但由于在 LaTeX 语法中反斜杠非常常见,因此最好使用 String.raw 以便将反斜杠视为文字反斜杠。

  • end{gather} 之前缺少一个反斜杠

  • 数学需要用分隔符括起来,默认为 $$

  • MathJax 有一个函数 typeset您可以使用它让MathJax引擎再次处理网页以排版新添加的内容。请注意引用的文档,因为您可能需要使用 typesetPromise 来代替。

这是一个演示,其中静态内容已正确加载,并且应显示动态公式的 div 已使用按钮初始化。当您单击它时,将执行动态代码,然后调用 typeset。正如您所看到的,此动态内容现在也已正确排版:

document.querySelector("button").addEventListener("click", () => {
    document.getElementById("si_suvat_equation").innerHTML = 
String.raw`<span>$$\begin{gather} s = ut + \frac{1}{2}  at^{2}\\ \notag \end{gather}$$</span>`;
    MathJax.typeset();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.2/es5/tex-mml-chtml.js"></script>

<div>$$\begin{gather} s = ut + \frac{1}{2}  at^{2}\\ \notag \end{gather}$$ </div>

<div id="si_suvat_equation"><button>Load</button></div>

此代码片段在“控制台”中显示一条消息,该消息与此堆栈代码片段的沙盒环境相关。它不会在更标准的环境中显示。

关于javascript - 如何通过 JavaScript 动态插入 MathJax (Latex)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74394705/

相关文章:

javascript - 使用 Cycle2 的响应式轮播

java - 如何获取jsp中定义在同一jsp页面上的select的值

HTML - 扩展名错误的图像

javascript - 将 Content MathML 转换为 javascript 中的中缀/数学符号字符串

disqus - 是否可以在 DisQus 中使用 MathJax?

javascript - 如果声明问题不起作用

javascript - javascript 中的分页显示每页元素的数量

javascript - 使用 'connection' 关键字连接到 Node JS websocket 时出现问题

ie7 和 i6 上的 Jquery Slider 间距 fubar

mathjax - 在 Mathjax 中编写下标?