小程序上支持Latex(不依赖服务端)

小程序Latex渲染解决方案

基于 KaTeX 构建的小程序原生 LaTeX 渲染组件(不依赖服务端渲染)

效果预览图

在这里插入图片描述

源码地址

https://github.com/rojer95/katex-mini

实现原理

基于 katex 库,解析 latex 公式生成虚拟 dom 树对象,将 dom 对象翻译成小程序的 rich-text 支持的 nodes 由小程序渲染

局限性

  • 依赖微信小程序的 rich-text 组件渲染,请注意小程序基础库 1.4.0 开始支持
  • 由于 katex 库过大会大量占用小程序包体大小。

包体过大解决方式

  • 【推荐】使用小程序分包:小程序分包文档
  • 【不推荐】如果你希望再小一点,可以将解析模块放在服务端,提供解析接口,再将结果展示在 rich-text 中(已实现)虽然这里使用了服务端,但是这里是产出json格式的nodes而非图片,相对于将latex转为图片的方案也好很多

有没有完整题目编排方案?

DSlate 富文本编辑器 :支持 Latex、图文、混合编排的编辑器,可以直接导出小程序 rich-text 支持格式的 JSON 数据。点击查看DEMO

预览图
在这里插入图片描述

如何使用?

在原生小程序项目中直接使用

Demo: https://github.com/rojer95/katex-mini/tree/master/demo

1. 在小程序中安装依赖
npm install @rojer/katex-mini
2. 在小程序开发者工具中 - 工具 - 构建 npm,执行后会看到生成的miniprogram_npm目录
3. 在 app.wxss 加载 katex 的内置 css 样式
@import "./miniprogram_npm/@rojer/katex-mini/index.wxss";
4. 在 app.js 的 onLaunch 中加载 katex
// app.js
import { loadKatex } from "@rojer/katex-mini";
App({
  onLaunch() {
    // 通过动态方式加载katex代码,节省小程序包体大小
    wx.request({
      url: "https://lib.baomitu.com/KaTeX/latest/katex.min.js",
      success: ({ data: code }) => {
        loadKatex(code);
        wx.katex = true;
      },
    });
  },
});
5. 在小程序中解析 latex
// 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 () {
    this.setData({
      nodes: parse(this.data.latex),
    });
  },
});
6. 在页面中展示
<!--index.wxml-->
<view class="container">
  <rich-text nodes="{{nodes}}"></rich-text>
  <textarea value="{{latex}}" bindinput="onInput" maxlength="1400"></textarea>
  <button bindtap="renderLatex">渲染</button>
</view>

在Taro中直接使用

Demo: https://github.com/rojer95/katex-mini-taro-demo

1、clone 项目
git clone git@github.com:rojer95/katex-mini-taro-demo.git
2、项目根目录安装依赖
yarn
3、编译
yarn dev:weapp
4、编译后:
  • 打开小程序开发者工具, 打开 dist 目录
  • 可以修改文本框内容 Latex 公式,点击渲染查看效果

使用API调用方式

Demo: https://github.com/rojer95/katex-mini-api

1、导入 wxss

katex-mini.wxsshttps://cdn.jsdelivr.net/npm/@rojer/katex-mini/dist/index.wxss

// 在app.wxss中
@import "katex-mini.wxss";
2、请求接口
wx.request({
  url: "https://katex-mini-api.vercel.app",
  data: {
    latex: "a=b+c",
  },
  dataType: "json",
  success(res) {
    this.setData({
      nodes: res.data,
    });
  },
});
3、放到 RichText 组件里
<rich-text nodes="{{ nodes }}" />

写在最后

如果能帮到你,希望能给我一个Star。感谢!

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rojer95

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值