最近在作 SICP 的作业,用 Markdown 撰写并放在 github 上,有些题目是有数学公式的,但是 github 暂时不支持 MathJax,那么问题就来了,如果在 github markdown 支持的情况下插入数学 公式呢?当然是图片外链了。没找到对应的服务,于是自己擼了一个,希望帮助到那些和我有同样需要的 人。

使用说明

URL 规则:http://mathjax.everyx.in/[表达式类型]/[输出形式]/[表达式]

  1. 表达式: 经过 base64 编码的表达式。
  2. 表达式类型:
    • am:AsciiMath 格式
    • mml:MathML 格式
    • page:HTML5 页面
    • tex:TeX 或者 LaTeX 格式
  3. 输出形式:
    • 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

相关资源

  1. Martini
  2. Mathjax for Node