核心用法
tex-render 是一款专为LaTeX数学公式可视化设计的工具技能,采用 MathJax (TeX→SVG) 与 svg2img (SVG→PNG) 双阶段转换架构。用户通过命令行传入LaTeX表达式,脚本自动完成编译、渲染与格式转换,最终输出标准PNG图像文件及可选的SVG矢量图。
典型工作流程:
1. 识别响应中需可视化的LaTeX公式(支持 $$...$$、$...$、\[...\]、\(...\) 等包裹格式)
2. 执行渲染命令:node .../tex-render/scripts/render.js "<LaTeX>" [输出路径]
3. 解析stdout返回的JSON获取 png 文件路径
4. 将PNG图像嵌入回复,最终以纯文本形式完成解释(不再包含原始LaTeX代码)
关键特性:
- 智能输入归一化:自动剥离外层数学环境标记
- 双输出格式:同时生成SVG(保留矢量精度)与PNG(通用兼容)
- 内联模式支持:
--inline参数生成适合行内文字伴生的紧凑尺寸 - 灵活路径控制:默认输出至
~/.openclaw/media/tex-render/,或自定义命名路径
显著优点
- 零配置开箱即用:仅需一次
npm install安装两个依赖(mathjax-node、svg2img),无复杂环境搭建 - 高质量渲染输出:基于成熟的MathJax引擎,确保复杂公式(积分、矩阵、多行对齐)的排版准确性
- 自动化工作流整合:专为AI Agent设计,标准化输入输出协议便于批量处理与文档生成流水线集成
- 跨平台兼容:纯Node.js实现,摆脱传统LaTeX发行版(TeX Live/MiKTeX)的系统依赖
- 安全沙箱执行:无网络请求、无代码执行,仅本地文件操作
潜在局限
- 仅支持数学模式:无法渲染完整LaTeX文档(无文本段落、图表、参考文献等环境)
- 字体与样式固定:依赖MathJax内置字体集,无法自定义宏包或加载外部字体
- 性能瓶颈:大公式或批量渲染时,Node.js单进程可能成为吞吐瓶颈
- 错误信息有限:MathJax解析失败时,终端输出较简略,需人工定位语法错误
- 依赖维护风险:mathjax-node与svg2img均非活跃维护项目,存在长期兼容性隐患
适合人群
- AI助手/Agent开发者:需在对话中实时生成公式可视化
- 技术文档撰写者:快速为Markdown、Wiki、Slide嵌入数学图像
- 教育内容生产者:批量生成习题解析中的公式插图
- 科研人员:临时转换LaTeX片段用于邮件、即时通讯等非TeX环境
常规风险
| 风险类别 | 具体描述 | 缓解建议 |
|---------|---------|---------|
| 输入注入 | LaTeX本身具备\write18等危险原语,但MathJax-node仅处理纯数学模式,禁用大部分宏 | 避免传入完整LaTeX文档,仅信任数学表达式 |
| 路径遍历 | 输出路径参数若未校验,理论上可写入任意目录 | 封装调用时验证路径参数,限制在媒体目录内 |
| 资源耗尽 | 极长公式或恶意构造的嵌套结构可能耗尽内存 | 设置Node.js内存上限,监控渲染超时 |
| 依赖漏洞 | svg2img底层依赖Puppeteer/PhantomJS(版本相关),存在已知CVE | 锁定依赖版本,定期审计npm audit |
综合评级:该技能功能聚焦、实现简洁,安全边界清晰,适合在受控环境中作为LaTeX可视化基础设施组件部署。