数学公式编辑器(MathLive)插件介绍
该插件系本人使用codebuddy自动生存的插件!本来打算自用发现官方网站没有,就分享出来。
插件名称:数学公式编辑器(MathLive) 目录:plugin/math_editor 版本:1.0.0 适配 XIUNOX 1.1.x
功能简介
为 Xiuno BBS X 论坛的发帖编辑器集成可视化数学公式输入能力,让用户在帖子中轻松插入数学公式。
可视化输入:发帖页工具栏新增「∑ 求和」按钮,点击弹出公式编辑弹窗,内置 MathLive 所见即所得编辑器,支持虚拟键盘和 LaTeX 输入,无需手写公式代码。
一键插入:确认后以 $…$(行内)/ $$…$$(块级)LaTeX 格式插入正文,弹窗可自由拖动位置。
自动渲染:帖子详情页用 KaTeX 自动将公式渲染为精美的数学排版,行内公式与块级公式区分显示。
核心特性
纯插件实现,不改动任何核心代码,通过 hook 机制挂载
编辑器资源仅发帖页按需加载(defer 延迟),详情页 KaTeX 懒加载——无公式的帖子零额外开销
支持中/繁/英三语
移动端 + PC 端双端可用,深色模式适配
插件禁用/卸载后工具栏按钮自动消失,无残留
使用方式
后台 → 插件 → 安装并启用「数学公式编辑器」
清编译缓存 rm -f tmp/route_.php tmp/model_.php tmp/view_htm_.htm tmp/lang__bbs.php
发帖页点击工具栏「∑」按钮 → 输入公式 → 插入
详情页自动渲染公式
技术栈
MathLive 0.110(公式输入)+ KaTeX 0.18(公式渲染),资源本地打包,无外部 CDN 依赖。
插件分享
- 插件名称:
- 数学公式编辑 math_editor
- 兼容版本:
- 必须支持1.1版本
- 插件自检报告:
-
math_editor 插件自检报告(v1.0.0)
报告时间:2026-08-20 状态:P1 已修复
一、基础信息
项 值 状态
插件目录 plugin/math_editor/ ✅
版本 / 适配 1.0.0 / bbs_version: 1.1(XIUNOX 1.1.7) ✅
类型 plugin ✅
总体积 2.1M(mathlive 1.4M + katex 600K) ⚠️ 含冗余
功能 发帖页 MathLive 可视化输入公式 → $...$ 存储 → 详情页 KaTeX 渲染 ✅
二、hook 挂载一致性(8/8 通过 ✅)
hook 文件 源码标记 类型 结果
post_start.htm post.htm:104 编译期内联 ✅
post_js.htm post.htm:1000 编译期内联 ✅
thread_start.htm thread.htm:24 编译期内联 ✅
thread_js.htm thread_js.inc.htm:820 编译期内联 ✅
lang_zh_cn_bbs.php lang/zh-cn/bbs.php:9 编译期内联 ✅
lang_zh_tw_bbs.php lang/zh-tw/bbs.php:9 编译期内联 ✅
lang_en_us_bbs.php lang/en-us/bbs.php:9 编译期内联 ✅
editor_custom_btns_end.php EditorService.php:96(plugin_hook) 运行时 ✅
conf.json 的 hooks_rank 8 键与文件名完全一致。
三、文件格式规范(全部通过 ✅)
.htm hook 以 <?php 开头(无 <?php exit;)✅
.php hook 以 <?php exit; 开头 ✅
hook 无顶层 return; ✅
static/*.js 无 <?php 污染 ✅
无 jQuery / Alpine / htmx:configRequest 旧事件 ✅
conf.json 无废弃字段 id/installed/enable ✅
输出走 echo + json_encode,无裸 htmlspecialchars ✅
四、关键正确性核对
核对点 结论
$data[] 追加按钮 ✅ extract 对数字键不生效,$data 即数组引用
lang() 可用性 ✅ function_exists 守卫 + 默认值兜底
语言包 $lang['key'] ✅ 在 $lang += 后、return 前内联
HTML 实体还原顺序 ✅ & 最后替换
渲染端跳过 code/pre ✅ inSkipTag() 逐层上溯
throwOnError:false 降级 ✅ 语法错误显示原文
懒加载检测 ✅ 无公式帖子零 KaTeX 开销
P1 this 引用 ✅ 已修复,_insert 用显式 MathLiveEditor._modalInstance
五、问题清单(更新)
编号 问题 严重度 状态
P1 _insert 内 this._modalInstance 脆弱引用 中 ✅ 已修复
P2 KaTeX 与 MathLive 字体重复(约 300K) 低 ⏳ 待定
P3 拖拽 document 监听未清理 低 可接受(单例常驻,无泄漏)
六、遗留风险(非本次引入)
本机无 PHP 环境:语法人工审查,未做编译运行验证,建议服务器首次启用后观察 tmp/ 产物与 Console。
$...$ 定界符误判:正文手写美元符可能被误判,正则已缓解但无法根除。
editor_assets hook 为死代码:已正确避开,改用编译期内联 hook。
七、lint 结果
仅 4 个 HINT(<?php exit; 的 "Unreachable code",.php hook 标准写法预期),无 error / warning。
结论
插件结构合规、hook 挂载正确、无阻塞性缺陷,可正常启用。剩余 P2(字体去重省 300K)为可选优化,P3 无需处理。 - 插件类型:
- 功能增强



