【问题标题】:How to dynamically render Tex and LaTex formulas without refreshing the page using MathJax?如何在不使用 MathJax 刷新页面的情况下动态呈现 Tex 和 LaTex 公式?
【发布时间】:2020-09-26 09:56:44
【问题描述】:

我的 html 如下:

<textarea id="content"></textarea>
<div id="render"></div>

现在我使用这个 javascript 来动态更新 textarea 中的任何更改:

const input = document.getElementById("content");
const log = document.getElementById("render");
input.addEventListener("input", updateValue);

function updateValue(e) {
    log.textContent = e.target.value;
}

我使用 MathJax 官方 cdn 脚本来转换 TexLaTex 公式。该脚本运行良好,并在页面加载时将TexLaTex 代码作为公式加载。但是当我在textarea 中输入任何代码时,我只会看到相同的TexLatex 代码。例如。如果我输入\(\alpha\),我可能会在动态呈现textarea 的内容时得到alpha 符号,而不是得到相同的文本。我想在他们的 mathjax 演示页面中实现类似 this 的内容。我想我已经成功了一半。有什么想法吗?

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    您需要使用MathJax.Hub.queue,这样每当您在输入框中输入任何内容时,它们都会由MathJax 以正确的顺序进行操作,并将命令MathJax.Hub.Typeset("yourdivid") 排队以排版带有id 的div。

    因此,您的 html 代码将如下所示:

    <script type="text/x-mathjax-config">
    //apply config
      MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});
    </script>
    //your cdn for mathjax
    <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML">
    </script>
    <textarea id="content"></textarea>
    <div id="render"></div>
    

    您的 js 代码如下所示:

    const input = document.getElementById("content");
    const log = document.getElementById("render");
    input.addEventListener("input", updateValue);
    
    function updateValue(e) {
    console.log(e.target.value)
      log.textContent = e.target.value;
      //adding in queue 
      MathJax.Hub.Queue(["Typeset", MathJax.Hub, "render"]);
    }
    

    工作小提琴:https://jsfiddle.net/Swati911/pxLegc2o/1/

    【讨论】:

    • 有没有类似的方法可以避免const的使用。省略const input = document.getElementById("content"); const log = document.getElementById("render"); 这一行document.getElementById("content").addEventListener("input", updateValue); 有效。但是document.getElementById("render").textContent = e.target.value; 不起作用。
    • 由于我的页面有 django 循环,我想对多个元素使用相同的脚本
    • 使用类而不是 ids 然后。我对 django 了解不多,如果你能问另一个问题会很好:)
    • 没关系!看来我必须用其他一些替代方案来结束!
    猜你喜欢
    • 1970-01-01
    • 2020-03-12
    • 2019-11-25
    • 2017-12-21
    • 2017-05-11
    • 1970-01-01
    • 2017-11-04
    • 2011-06-15
    • 2018-02-14
    相关资源
    最近更新 更多