Freewind @ Thoughtworks scala java javascript dart 工具 编程实践 月结 math python english [comments admin] [feed]

(2013-01-07) 如何在博客上手写复杂数学公式? (MathJax)

广告: 云梯:翻墙vpn (省10元) 土行孙:科研用户翻墙http proxy (有优惠)

在伟大的http://math.stackoverflow.com上提问的时候,发现人们使用一种奇怪的语法来写数学符号和公式,比如这句:

image

对于我们来说,写那个“大于等于”和“属于”符号,是一件很困难的事。他们是怎么做的呢?看下源代码:

Relation $R$ is $xy\ge1$, and $x\in \mathbb{Z}$ and $y\in\mathbb{Z}$, is $R$ reflexive?

注意里面有很多以`$`包围起来的符号,以及用斜线开头的词,如`\in`。而显示的时候,它们就自动变成了美观的数学符号,这是怎么做的?

## MathJax和LaTeX

在[http://math.stackexchange.com/faq](http://math.stackexchange.com/faq)介绍了做法,原来使用了一个叫[MathJax](http://www.mathjax.org/)的js库来渲染,语法是一个类似于[LaTeX](http://www.onemathematicalcat.org/MathJaxDocumentation/TeXSyntax.htm)的语法:

如果一切正常,它会显示成:

image

上面这个是截的图片,再来一个真实版:

$ q \in R $

LaTeX语法

详细文档在这里:http://www.onemathematicalcat.org/MathJaxDocumentation/TeXSyntax.htm

我把常用的一些总结在这里

图片 MathJax效果 代码
[![image](/user_images/1788-5.png "image")](/user_images/1788-5.png) $\emptyset$ `\emptyset`
[![image](/user_images/1788-7.png "image")](/user_images/1788-7.png) $q \in R$ `q \in R`
[![image](/user_images/1788-9.png "image")](/user_images/1788-9.png) $q \notin R$ `q \notin R`
[![image](/user_images/1788-11.png "image")](/user_images/1788-11.png) $A \subseteq B$ `A \subseteq B`
[![image](/user_images/1788-13.png "image")](/user_images/1788-13.png) $A \subset B$ `A \subset B`
[![image](/user_images/1788-15.png "image")](/user_images/1788-15.png)
[![image](/user_images/1788-17.png "image")](/user_images/1788-17.png)
[![image](/user_images/1788-19.png "image")](/user_images/1788-19.png)
[![image](/user_images/1788-21.png "image")](/user_images/1788-21.png)
[![image](/user_images/1788-23.png "image")](/user_images/1788-23.png)
[![image](/user_images/1788-25.png "image")](/user_images/1788-25.png)
[![image](/user_images/1788-27.png "image")](/user_images/1788-27.png) $\{x | x\in\Bbb Z\}$ `\{x | x\in\Bbb Z\}`
[![image](/user_images/1788-29.png "image")](/user_images/1788-29.png) $\forall x$ `\forall x`
[![image](/user_images/1788-31.png "image")](/user_images/1788-31.png) $\exists$ `\exists`
[![image](/user_images/1788-33.png "image")](/user_images/1788-33.png) $\gt$ `\gt`
$\ge$ `\ge`
$\geq$ `\geq`
$\geqq$ `\geqq`
[![image](/user_images/1788-35.png "image")](/user_images/1788-35.png) $\lnot$ `\lnot`
[![image](/user_images/1788-37.png "image")](/user_images/1788-37.png) $\lor$ `\lor`
[![image](/user_images/1788-39.png "image")](/user_images/1788-39.png) $\land$ `\land`

后记

经过多次使用后,发现MathJax对于某些公式的显示有问题,比如{R^2},会显示得乱七八糟。看了一下math.stackoverflow.com,发现它修改了MathJax的代码以解决这些问题。但我拿不到这些代码,自己也不知道怎么修正,所以只能暂时不再使用这种方式。

现在的做法是,使用最新的MathType 6.8,它支持把公式拖到Live writer,感觉还不错。唯一有点担心的是,它利用了google的chart api来产生图形,这个服务在国内不稳定(你懂的)。

comments powered by Disqus