在微信小程序上渲染Latex公式(不依赖服务端渲染,使用KaTeX)
135
stars
42
commits
SCSS
primary language
Oct 25, 2025
updated
基于 KaTeX 构建的小程序原生 LaTeX 渲染组件(不依赖服务端渲染)

基于 katex 库,解析 latex 公式生成虚拟 dom 树对象,将 dom 对象翻译成小程序的 rich-text 支持的 nodes 由小程序渲染
rich-text 组件渲染,请注意小程序基础库 1.4.0 开始支持虽然这里使用了服务端,但是这里是产出json格式的nodes而非图片,相对于将latex转为图片的方案也好很多自1.3.0起,支持呈现文本中的所有数学,用法如下:
import { renderMathInText } from "@rojer/katex-mini";
const innerMathText =
"这是一个行内公式 $ f(x) = sum_{n=0}^{infty} \\frac{f^{(n)}(a)}{n!} (x - a)^n $ ,这是一个行间的公式 $$ \\int_a^b f(x) , dx = F(b) - F(a) $$ \n这是新起一行的文字";
const nodes = renderMathInText(innerMathText, {
delimiters: [
{ left: "$$", right: "$$", display: true },
{ left: "$", right: "$", display: false },
],
});
// 将渲染得到的nodes交给小程序RichText组件渲染
this.setData({
nodes,
});
renderMathInText的 参数参考: https://katex.org/docs/autorender#api
效果预览图:
| 小程序效果 |
|---|
![]() |
DSlate 富文本编辑器 :支持 Latex、图文、混合编排的编辑器,可以直接导出小程序 rich-text 支持格式的 JSON 数据。DEMO
预览图:
| 编辑器 | 小程序效果 |
|---|---|
![]() | ![]() |
npm install @rojer/katex-mini
⚠️ 自 1.2.0 版本起,
@rojer/katex-mini不再包含katex,因此你需要自行安装katex
npm install katex
miniprogram_npm目录app.wxss 加载 katex 的内置 css 样式@import "./miniprogram_npm/@rojer/katex-mini/index.wxss";
// index.js
import parse from "@rojer/katex-mini";
Page({
data: {
nodes: [],
latex:
"\\displaystyle \\frac{1}{\\Bigl(\\sqrt{\\phi \\sqrt{5}}-\\phi\\Bigr) e^{\\frac25 \\pi}} = 1+\\frac{e^{-2\\pi}} {1+\\frac{e^{-4\\pi}} {1+\\frac{e^{-6\\pi}} {1+\\frac{e^{-8\\pi}} {1+\\cdots} } } }",
},
onInput: function (e) {
this.setData({
latex: e.detail.value,
});
},
renderLatex: function () {
const katexOption = {
displayMode: true,
}; // 参考 katex 的配置
this.setData({
nodes: parse(this.data.latex, {
throwError: true, // 为true时,解析失败会抛出错误,否则会直接把错误信息解析为nodes结构展示
...katexOption,
}),
});
},
});
<!--index.wxml-->
<view class="container">
<rich-text nodes="{{nodes}}"></rich-text>
<textarea value="{{latex}}" bindinput="onInput" maxlength="1400"></textarea>
<button bindtap="renderLatex">渲染</button>
</view>
git clone https://github.com/rojer95/katex-mini-taro-demo.git
yarn
yarn dev:weapp
API 的 Demo 源码: https://github.com/rojer95/katex-mini-api
// 在app.wxss中
@import "katex-mini.wxss";
katex-mini.wxss的下载地址: https://cdn.jsdelivr.net/npm/@rojer/katex-mini/dist/index.wxss
wx.request({
url: "https://katex-mini-api.vercel.app",
data: {
latex: "a=b+c",
},
dataType: "json",
success(res) {
this.setData({
nodes: res.data,
});
},
});
<rich-text nodes="{{ nodes }}" />
如果能帮到你,希望能给我一个Star。感谢!
SCSS
58.9%
TypeScript
41.1%
在微信小程序上渲染Latex公式(不依赖服务端渲染,使用KaTeX)
135
stars
42
commits
SCSS
primary language
Oct 25, 2025
updated
基于 KaTeX 构建的小程序原生 LaTeX 渲染组件(不依赖服务端渲染)

基于 katex 库,解析 latex 公式生成虚拟 dom 树对象,将 dom 对象翻译成小程序的 rich-text 支持的 nodes 由小程序渲染
rich-text 组件渲染,请注意小程序基础库 1.4.0 开始支持虽然这里使用了服务端,但是这里是产出json格式的nodes而非图片,相对于将latex转为图片的方案也好很多自1.3.0起,支持呈现文本中的所有数学,用法如下:
import { renderMathInText } from "@rojer/katex-mini";
const innerMathText =
"这是一个行内公式 $ f(x) = sum_{n=0}^{infty} \\frac{f^{(n)}(a)}{n!} (x - a)^n $ ,这是一个行间的公式 $$ \\int_a^b f(x) , dx = F(b) - F(a) $$ \n这是新起一行的文字";
const nodes = renderMathInText(innerMathText, {
delimiters: [
{ left: "$$", right: "$$", display: true },
{ left: "$", right: "$", display: false },
],
});
// 将渲染得到的nodes交给小程序RichText组件渲染
this.setData({
nodes,
});
renderMathInText的 参数参考: https://katex.org/docs/autorender#api
效果预览图:
| 小程序效果 |
|---|
![]() |
DSlate 富文本编辑器 :支持 Latex、图文、混合编排的编辑器,可以直接导出小程序 rich-text 支持格式的 JSON 数据。DEMO
预览图:
| 编辑器 | 小程序效果 |
|---|---|
![]() | ![]() |
npm install @rojer/katex-mini
⚠️ 自 1.2.0 版本起,
@rojer/katex-mini不再包含katex,因此你需要自行安装katex
npm install katex
miniprogram_npm目录app.wxss 加载 katex 的内置 css 样式@import "./miniprogram_npm/@rojer/katex-mini/index.wxss";
// index.js
import parse from "@rojer/katex-mini";
Page({
data: {
nodes: [],
latex:
"\\displaystyle \\frac{1}{\\Bigl(\\sqrt{\\phi \\sqrt{5}}-\\phi\\Bigr) e^{\\frac25 \\pi}} = 1+\\frac{e^{-2\\pi}} {1+\\frac{e^{-4\\pi}} {1+\\frac{e^{-6\\pi}} {1+\\frac{e^{-8\\pi}} {1+\\cdots} } } }",
},
onInput: function (e) {
this.setData({
latex: e.detail.value,
});
},
renderLatex: function () {
const katexOption = {
displayMode: true,
}; // 参考 katex 的配置
this.setData({
nodes: parse(this.data.latex, {
throwError: true, // 为true时,解析失败会抛出错误,否则会直接把错误信息解析为nodes结构展示
...katexOption,
}),
});
},
});
<!--index.wxml-->
<view class="container">
<rich-text nodes="{{nodes}}"></rich-text>
<textarea value="{{latex}}" bindinput="onInput" maxlength="1400"></textarea>
<button bindtap="renderLatex">渲染</button>
</view>
git clone https://github.com/rojer95/katex-mini-taro-demo.git
yarn
yarn dev:weapp
API 的 Demo 源码: https://github.com/rojer95/katex-mini-api
// 在app.wxss中
@import "katex-mini.wxss";
katex-mini.wxss的下载地址: https://cdn.jsdelivr.net/npm/@rojer/katex-mini/dist/index.wxss
wx.request({
url: "https://katex-mini-api.vercel.app",
data: {
latex: "a=b+c",
},
dataType: "json",
success(res) {
this.setData({
nodes: res.data,
});
},
});
<rich-text nodes="{{ nodes }}" />
如果能帮到你,希望能给我一个Star。感谢!
SCSS
58.9%
TypeScript
41.1%