微信答题小程序支持latex公式显示解决方案

需求沟通:

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

效果预览图

实现原理

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

局限性

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

如何使用?

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

1. 在小程序中安装依赖

复制代码
npm install @rojer/katex-mini

安装 katex (@rojer/katex-mini@1.2.0 之后需要手动安装)

自 1.2.0 版本起,@rojer/katex-mini不再包含katex,因此你需要自行安 装katex

复制代码
npm install katex

2. 在小程序开发者工具中 - 工具 - 构建 npm,执行后会看到生成的miniprogram_npm目录

3. 在 app.wxss 加载 katex 的内置 css 样式

复制代码
@import "./miniprogram_npm/@rojer/katex-mini/index.wxss";

4. 在小程序中解析 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 () {
    const katexOption = {
      displayMode: true,
    }; // 参考 katex 的配置
    this.setData({
      nodes: parse(this.data.latex, {
        throwError: true, // 为true时,解析失败会抛出错误,否则会直接把错误信息解析为nodes结构展示
        ...katexOption,
      }),
    });
  },
});

5. 在页面中展示

复制代码
<!--index.wxml-->
<view class="container">
  <rich-text nodes="{{nodes}}"></rich-text>
  <textarea value="{{latex}}" bindinput="onInput" maxlength="1400"></textarea>
  <button bindtap="renderLatex">渲染</button>
</view>
相关推荐
lhldsg8 小时前
智慧场馆解决方案小程序开发实战:从架构设计到部署指南
java·小程序·uni-app
维双云9 小时前
配送小程序怎么做?从下单到配送全流程功能拆解。
小程序
smartpi_ai11 小时前
JL-17T 能接传感器并把数据发到小程序吗?GPIO/ADC/UART 平台可做,I2C/SPI 要二开
人工智能·小程序·语音识别
用户0296697698213 小时前
摸着石头过河:我用Go把微信加密模块给逆向了一回
微信·go
andrsted14 小时前
在线刷小程序推荐
学习·微信小程序·小程序·学习方法
Mark1085914 小时前
【踩坑】Uni-app微信小程序自定义组件在 Flex 布局中未铺满整行
微信小程序·小程序·uni-app
深瞳智检16 小时前
深瞳智检(小程序)正式上线!【免费/快捷/方便】获取YOLO检测数据集
人工智能·yolo·目标检测·小程序·数据集·cv数据收集
2601_9638702117 小时前
【计算机毕业设计】基于微信小程序的电子家谱的设计与实现
微信小程序·小程序·课程设计
zww894911118 小时前
外卖CPS小程序系统:从返利链路到订单回填的技术实现
小程序
lhldsg18 小时前
酒吧点餐小程序开发:从需求分析到技术落地实战
java·前端·小程序·架构·交友