Javascript:将 <textarea> with markdown + latex formatting 转换为 html

Javascript: convert <textarea> with markdown + latex formatting to html

提问人:Jojo197 提问时间:10/29/2023 更新时间:10/30/2023 访问量:36

问:

从本质上讲,我正在尝试创建一个输入区域,允许用户输入 markdown 和 latex(使用 $..$ 和 $$..$$),与在 R 笔记本中可以执行的操作非常相似。当用户输入文本时,我想将其转换为html格式(并将其显示在另一个div中)。

通过阅读如下所示的其他问题,我能够使 Markdown 与摊牌配合得很好

<script src="https://cdnjs.cloudflare.com/ajax/libs/showdown/1.9.0/showdown.min.js"></script>

document.getElementById('markdown-input').addEventListener('change',function(){
    var markdownConverter = new showdown.Converter();
    markdownText = document.getElementById('markdown-input').value;

    var html = markdownConverter.makeHtml(markdownText);
    document.getElementById('markdown-container').innerHTML = html;
});

我遇到的麻烦是如何让乳胶工作。我一直在阅读 Mathjax,但在试图弄清楚如何让它与它一起工作时遇到了很多麻烦,尤其是在版本 3 中。我目前有以下脚本来使用 Mathjax,但不确定如何让这些脚本与上面的代码一起使用。

<script type="text/x-mathjax-config">
    MathJax.Hub.Config({tex2jax: { inlineMath: [ ["$", "$"], ["\\(","\\)"] ], displayMath: [ ["$$","$$"], ["\\[", "\\]"] ]}});
  </script>
  <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"></script>

关于如何实现这项工作的任何建议将不胜感激。

JavaScript HTML LaTeX MathJax 摊牌

评论

0赞 Pointy 10/29/2023
一些 Markdown 浏览器内工具(如“marked”)允许代码转义,因此您可以(例如)劫持 MathJax 代码的图像或链接语法替代方案之一。我会这样做,因为你将面临决定哪个处理器应该首先运行的问题。如果你使用 Markdown 语法 hack 来做到这一点,Markdown 进程可以在 MathJax 处理的 HTTP 请求完成时留下元素(或其他任何内容)来填充。恐怕这不是一个简单的问题。<div>

答:

0赞 Jojo197 10/30/2023 #1

经过几个小时的研究,我设法让它工作。

我找到了配置 MathJax 的方法,以修改我对 MathJax js 文件的现有引用:

<script>
MathJax = {
  tex: {inlineMath: [['$', '$'], ['\\(', '\\)']]}
};
</script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js"></script>

然后是来自文档 Dynamic Content 另一部分的简单代码,它同步计算页面中的所有乳胶,我在解析 markdown 后输入了该代码:MathJax.typeset();

我不确定是否有办法将其优化为仅针对特定元素及其子元素运行,但它目前正在按照我的需要工作。