擼了一个基于 MathJax 的在线数学公式图片外链服务
Dec 1, 2014最近在作 SICP 的作业,用 Markdown 撰写并放在 github 上,有些题目是有数学公式的,但是 github 暂时不支持 MathJax,那么问题就来了,如果在 github markdown 支持的情况下插入数学 公式呢?当然是图片外链了。没找到对应的服务,于是自己擼了一个,希望帮助到那些和我有同样需要的 人。
使用说明
URL 规则:http://mathjax.everyx.in/[表达式类型]/[输出形式]/[表达式]
- 表达式: 经过 base64 编码的表达式。
- 表达式类型:
- am:AsciiMath 格式
- mml:MathML 格式
- page:HTML5 页面
- tex:TeX 或者 LaTeX 格式
- 输出形式:
- png:png 格式的图片
- svg:svg 格式的图片
- mml: MathML 格式的代码片段
例如,我要将一个 AnsciiMath 格式的公式 \frac{1}{2}
转换成 svg \frac{1}{2}
进行 base64
编码,变成 XGZyYWN7MX17Mn0=
,然后就可以直接在 markdown 文件中插入
<img src="http://mathjax.everyx.in/am/svg/XGZyYWN7MX17Mn0=">
如果不会不懂什么 base64 编码的话,那就直接访问 http://mathjax.everyx.in/ 输入公式,选 择对应的选项就能得到对应的 svg 的 URL 了。
实现
使用 Martini 框架处理 web 请求,然后直接使用 golang 的 exec 包中的功能来调用 MathJax for Node 提供的转换工具,并取得结果返回。 代码在 https://github.com/everyx/mathjax.everyx.in ,欢迎提提交 bug。
原有的 Mathjax Node 使用了基于 java 的 Batik Project 中的 Rasterizer 包,我修改成了 基于 node 的 svg2png,并修正了一个命令行工具的 bug,修改后的 Mathjax Node 见 https://github.com/everyx/MathJax-node 。