KaTeX.js渲染数学公式

什么是KaTeX.js ?

KaTeX 是一个集成速度快且功能丰富的数学公式渲染库,专为 Web 设计。它由 Khan Academy 开发,提供接近印刷品质的数学公式展示,同时保持与浏览器的高效互动性。KaTeX 特点包括快速渲染速度、高质量的输出、独立运行、跨平台兼容以及丰富的功能集。它支持服务器端渲染,可以预渲染公式并作为纯 HTML 发送,减轻客户端负担。

入门示例

作为入门演示示例,下载源码到本地方式引入 KaTex

<!-- 引入样式和库文件 -->
<link rel="stylesheet" href="../libs/katex.css" />
<script src="../libs/katex.js"></script>

创建容器 DOM 元素,绑定 equation ID 选择器

<div id="equation">$`x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}`$</div>
<script type="text/javascript" defer>
  // 使用KaTeX渲染指定元素中的公式
  katex.render(`x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}`, document.getElementById('equation'))
</script>

效果

高级示范

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>使用KaTeX显示数学公式</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.css">
    <script defer src="https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.js"></script>
    <script defer src="https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/contrib/auto-render.min.js"
        onload="renderMathInElement(document.body);"></script>
        <script>
            function change() {
                var textarea = document.getElementById('xxx');
                console.log(textarea)
                //textarea.value = textarea.value.replace(/(\$|\n)E = mc^2(\$|\n)/g, '$\\text{E} = mc^2$');
                textarea.textContent="解:已知$$a-b=2$$,$$\therefore   \dfrac{{(1-a)}^{2}}{b}-\dfrac{{(1+b)}^{2}}{a}=\dfrac{a{(1-a)}^{2}-b{(1+b)}^{2}}{ab}=\dfrac{a-{a}^{3}-b+{b}^{3}}{ab}$$ 即$$10ab=2-4ab$$,解得$$ab=\dfrac{1}{7}$$,$$\therefore   {a}^{3}-{b}^{3}=2-4ab=2-4\times \dfrac{1}{7}=\dfrac{10}{7}.$$";
                //textarea.setAttribute('text', "$$E = mc^2$$");
                renderMathInElement(textarea);
            }
        </script>
</head>
<body>
    <h1>使用KaTeX显示数学公式</h1>
    <p>下面是一些数学公式的示例:</p>
    <p>by https://zhengkai.blog.csdn.net/</p>
    <p>下面是一些数学公式的示例:</p>
    <p>行内公式示例:这是一个行内公式 $$E = mc^2$$。</p>
    <p>块级公式示例:</p>
    <p>$$
    \int_a^b f(x) \, dx = F(b) - F(a)
    $$</p>
    <a id="xxx"></a>
    <textarea cols="80" id="2"></textarea>
    <a onclick="change()">change</a>
</body>
</html>

附加:document.getElementById如何改变a标签的文本

在JavaScript中,如果你想通过document.getElementById来改变一个<a>标签的文本,你可以这样做:

  1. 首先,确保你的<a>标签有一个id属性,这样你才能通过document.getElementById来选中它。

    原始文本

  2. 然后,使用document.getElementById来获取这个<a>标签的引用。

  3. 接着,你可以通过修改innerTexttextContent属性来改变它的文本内容。

    // 获取标签
    var link = document.getElementById('myLink');

    // 修改文本
    link.innerText = '新的文本';
    // 或者
    link.textContent = '新的文本';

innerTexttextContent都可以用来改变元素的文本内容,但它们之间有一些细微的差别:

  • innerText会考虑CSS的visibilitydisplay属性,如果元素是不可见的或不显示的,那么innerText不会返回文本内容。
  • textContent会返回元素及其子元素的全部文本内容,不考虑CSS样式的影响。

通常情况下,使用textContent就足够了,因为它更简单且不受CSS样式的影响。

自动渲染

使用 JavaScript 手动渲染还是稍微麻烦了一点,官方提供 auto-render 自动渲染扩展,通过简单的引入可以实现自动渲染。

// 引入 auto-render.js 
<script src="../libs/auto-render.js"></script>
<script type="text/javascript" defer>
  document.addEventListener('DOMContentLoaded', function () {
    renderMathInElement(document.body, {
      // 自定义选项
      // • auto-render 指定解析格式
      delimiters: [
        { left: '$$', right: '$$', display: true },
        { left: '$', right: '$', display: false },
        { left: '\\(', right: '\\)', display: false },
        { left: '\\[', right: '\\]', display: true },
      ],
      // • 不抛出异样,而是渲染公式源码
      throwOnError: false,
    })
  })
</script>

auto-render 扩展可以在页面加载时自动查找并渲染所有使用 $...$$$...$$ 包裹的公式。意味着你不需要手动调用任何函数来渲染这些公式。

KaTeX 允许调整样式,例如修改 .katex 类的 font-size 属性来改变公式的显示大小。此外,KaTeX 提供了多个扩展,如 copy-tex 扩展允许复制 LaTeX 代码,而 mhchem 扩展简化了化学方程式的编写。

官方链接

[1] Github Star: 18.1k: https://github.com/KaTeX/KaTeX
[2] 官网: https://katex.org/
[3] 地址: https://katex.org/docs/libs

相关推荐
笑非不退3 分钟前
Wpf Image 展示方式 图片处理 显示
开发语言·javascript·wpf
易辰君26 分钟前
python爬虫 - 初识爬虫
开发语言·爬虫·python
长天一色34 分钟前
【C语言系统编程】【第三部分:网络编程】3.2 数据传输和协议
c语言·开发语言·网络
Python私教36 分钟前
Vue3封装通用确认删除按钮实战案例
前端·javascript·vue.js
结衣结衣.41 分钟前
Python基础语法1
开发语言·笔记·python·学习·编程·编程语法
风雨「83」1 小时前
centos已安装python3.7环境,还行单独安装python3.10环境,如何安装,具体步骤
linux·开发语言·python
碳苯1 小时前
【rCore OS 开源操作系统】Rust HashMap应用 知识点及练习题
开发语言·rust·操作系统
hakesashou1 小时前
php与python建站的区别有哪些
开发语言·php
朔北之忘 Clancy2 小时前
2021 年 12 月青少年软编等考 C 语言二级真题解析
c语言·开发语言·c++·学习·算法·青少年编程·题解
可愛小吉2 小时前
Python 课程22-Pillow
开发语言·python·pillow