一个面向数学领域的 Agent Skill:把 LaTeX 或公式截图转换为统一风格、 可调参数、可取点和可继续绘制的交互动画。
本项目同时包含 Skill 规范和编辑器运行时。只安装 SKILL.md 不会包含
assets/、references/、scripts/ 和 examples/,因此不能提供动画库或
编辑器。
对于需要管理动画文档的用户,应使用完整 Git checkout 作为运行项目:
git clone https://github.com/megemini/lucky-math.git
Agent 如果发现运行资源缺失,应先查找已有的 lucky-math checkout;如果不存在,
应使用上面的仓库地址 clone 完整仓库,而不是重新生成一个等价的独立查看器。
编辑器必须从仓库根目录通过 scripts/serve.py 启动。
使用服务器启动时,动画库会保存到运行根目录的 data/library.json,因此同一
个项目使用不同端口启动时仍共享动画库。直接打开静态 HTML 仍可查看和编辑,
但只能使用当前浏览器 origin 的 localStorage,不适合作为多会话的统一库。
如果运行时项目位于更大的工作区,可用 scripts/serve.py --workspace-root
让项目图片和服务器库都以工作区为根目录。
已有文档如果暂时包含 workspace root 内的绝对图片路径,服务器也会通过受限的
/api/source 兼容读取;新生成的文档仍必须使用相对路径,服务器不会暴露
workspace root 之外的文件。
生成新的 JSON 后不要直接打开默认的 examples/sine.json。应把生成文件作为
--document 传给服务器;如果文件位于仓库外层工作区,则同时指定
--workspace-root。例如 JSON 在工作区根目录而 Skill 在
.trae/skills/lucky-math/ 下时,服务器的根目录应是工作区根目录,编辑器
URL 中也应保留该 JSON 的 document 参数。
服务器会把该参数生成成相对于服务器根目录的绝对路径,避免
.trae/skills/lucky-math/ 这样的嵌套目录导致少解析一级 ..。
Agent 生成的确认文档统一写入 data/documents/<slug>.json,源截图复制到
data/images/;不要散落到项目根目录、examples/ 或 data/library.json
旁边。这些目录已被 .gitignore 忽略,属于运行时数据区。文档路径全部使用
data/documents/xxx.json 相对形式,配合 --document 打开。
-
将
.env.example复制为.env。没有 OCR 或模型时可通过--backend none或--latex输入。 -
对截图运行:
python scripts/ocr_formula.py formula.png another-formula.png -
把输出中的每一条 LaTeX 展示给用户确认或修改,再写入
references/schema.md约定的 JSON。 -
运行
python3 scripts/serve.py --open --document examples/sine.json,服务会 启动并打开已经加载示例的编辑器;也可以在浏览器打开 HTML 后手动导入 JSON。
- OpenVINO PaddleOCR-VL 公式 OCR(默认)、远程 Job API、stdio MCP 和 legacy 本地 PaddleOCR-VL-REC 适配器;模型缺失时可从 ModelScope 自动下载;
- 多图片/多公式统一到一个画布,原始截图随文档保存;
- 动画方式由 Skill 和用户共同选择,支持移动取样点、逐步绘制、参数扫描、
含
t的时间函数和静态图; - 统一坐标轴、网格、渐近线、文字、横线、竖线、斜线、圆和矩形组件;
- 参数 slots、时间动画、鼠标取点,以及显式/隐式曲线和辅助线的动态交点坐标;
- 辅助图元支持全部清除、清除最后一个、斜线角度显示,以及按角度和长度绘制斜线;
- 编号 tip 教学批注:在曲线关键位置(零点、极值等)锚定带编号的备注标记,悬浮查看详情,编号可作为 Agent 对话中继续讨论的引用句柄,并支持画布内显隐开关;
- 参数对比辅助线:手动调整参数改变曲线时,自动以虚线补绘原始曲线,便于与改动后的曲线对比,且 tip 始终留在原始曲线位置;参数调回原值后辅助线自动消失;
- 浏览器本地动画库:分类、搜索、加载、导入、导出和删除;
scripts/serve.py:启动本地服务、打开页面,并可选自动加载指定 JSON;- 无 npm 构建步骤。MathJax 仅用于可选的公式排版增强。
SKILL.md:Agent 的使用规则和标准流程;scripts/ocr_formula.py:OCR 后端统一适配器;scripts/openvino_ocr.py:OpenVINO PaddleOCR-VL 公式识别器;vendor/paddleocr_vl/:OpenVINO PaddleOCR-VL 模块代码;assets/math-animation.html:编辑器与动画库页面;references/:JSON 数据协议和组件词汇;examples/sine.json:可直接导入的正弦曲线示例;tests/:不联网的 OCR、表达式安全和编辑器契约测试。
python3 scripts/validate_bundle.py
python3 -m unittest discover -s tests -v
node --check assets/math-animation.js
默认检查不会启动本地 OpenVINO 模型,也不会调用远程服务;OpenVINO OCR 需要 在已配置依赖的虚拟环境中单独验证。
