marked + mathjax 实现支持数学公式的 markdown 转 html

1. marked 介绍

marked 是一个 JavaScript 编写的全功能 Markdown 解析和编译器。marked 的目的是快速的编译超大块的 Markdown 文本而不必担心结果会出乎意料或者花费很长时间。

marked 最初是为 Node.JS 编写,现在已完全兼容客户端浏览器。

Github 库
在线 Demo
Document

在浏览器中使用:

<!doctype html>
<html>
<head>
  <meta charset="utf-8"/>
  <title>Marked in the browser</title>
</head>
<body>
  <div id="content"></div>
  <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
  <script>
  	// 1. 调用 parse 方法,将对应的 markdown 文本内容转译为 html 页面;
  	let parsedHtml = marked.parse('# Marked in browser\n\nRendered by **marked**.');

    document.getElementById('content').innerHTML = parsedHtml;
  </script>
</body>
</html>

页面如下:
在这里插入图片描述

2. mathjax 介绍

mathjax 是一个开源的 web 数学公式渲染器,由 JS 编写而成,可用于渲染符合 LaTeX、MathML,AsciMath 等规则的数学表达式。

官网
Github
document

示例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <script>
    MathJax = {
        tex: {inlineMath: [['$', '$'], ['\\(', '\\)']]}
    };
  </script>
  <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js"></script>
</head>
<body>
    <p>
        When $a \ne 0$, there are two solutions to $ax^2 + bx + c = 0$ and they are
        $$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$
    </p>
</body>
</html>

页面如下:
在这里插入图片描述

3. 动态编译并显示 markdown 页面

mathjax 的机制是在加载脚本时,扫描页面并渲染页面中包含的数学公式。

在 mathjax 脚本加载后,动态新增的页面,并不会被扫描并渲染,这个时候,需要调用 MathJax.typeset() 来执行渲染。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <script>
    MathJax = {
        tex: {inlineMath: [['$', '$'], ['\\(', '\\)']]}
    };
  </script>
  <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
</head>
<body>
    <p>
        When $a \ne 0$, there are two solutions to $ax^2 + bx + c = 0$ and they are
        $$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$
    </p>
    <hr>
    <div id="content" ></div>
    <script>
      // 1. 调用 parse 方法,将对应的 markdown 文本内容转译为 html 页面;
  	let parsedHtml = marked.parse(`When $a \\ne 0$, there are two solutions to $ax^2 + bx + c = 0$ and they are
        $$x = {-b \\pm \\sqrt{b^2-4ac} \\over 2a}.$$`);
 
    document.getElementById('content').innerHTML = parsedHtml; // 新增页面

    // 2. 执行 mathjax 渲染
    MathJax.typeset();
    </script>

</body>
</html>

特别注意:
tex 语句中包含了很多反斜杠,而在 html 页面中,反斜杠具有特殊含义,为了 MathJax 可以正常解析,需要在 markdown 的 tex 语句中使用双反斜杠,否则将会解析失败!

页面如下:
在这里插入图片描述

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值