在Ghost Blog上尝试输出数学公式

最近在看论文,做笔记的时候就发现公式的记录比较麻烦。模模糊糊知道有个Tex还有LaTex的工具。决定在有必要将公式记录下来是可以使用,然后就进行了工具的搜索以及尝试。本文主要记录Ghost博客系统使用MathJax,并进行LaTex语法的公式排版测试,也算是一个学习经验吧。


1. LaTex与MathJax

最早是从知乎听到这个名字的,作为一个很不靠谱的数学爱好者当时就记住了这个工具。就决定使用其数学公式的编辑和排版功能。很轻松地就搜索到了MathJax这个js页面显示工具,顾名思义,MathJax可以将数学公式显示Web页面上。无论是使用LaTeX、MathML或者AsciiMath符号,这些公式都会被javascript处理为HTML、SVG或者MathML符号。通过cdn.bootcss.com上的cdn源将工具引入到博客系统中,整个过程比较顺利(博客总是更新代码了~~)。

首先,我们需要在源码中引入js文件。在当前显示的主题文件上添加几行代码就可以了。我使用的皮肤是phantom。所以可以通过一下两种方式使用MathJax:在./content/themes/phantom/default.hbs添加引入,等于在全局使用MathJax;当我们只需要在每个博文显示时就在./content/themes/phantom/post.hbs文件中添加引入。由于我是全局引用,在default.hbs内添加如下代码即可。

{{! Mathjax 数学公式 }}
<link href="http://cdn.bootcss.com/mathjax/2.5.3/MathJax.js?config=TeX-AMS-MML_HTMLorMML" rel="stylesheet">

引入文件后面的配置尾巴:config=TeX-AMS-MML_HTMLorMML为扩展,这个扩展为添加AMS数学环境以及出现错误和未定义宏的显示方式。这样数学公式的显示引擎就配置好了。

2. 测试

下一步就时测试方式。分为两种方法:

  • 使用\\[...\\]指明,将...LaTeX语句块显示为LaTeX内容(double dollar符号在显示上会有问题)
  • 使用\\(...\\)指明...单行的公式显示LaTeX内容

这里有一个注意的是由于Ghost将markdown编译为HTML,元素反斜杠(\)会当作转义字符处理。所以在上面的两种方式中其实我在后台编辑器上都是使用两个反斜杠来显示一个反斜杠。并且我们在公式块的书写中,每行的反斜杠都需要通过这种方法来表示,而行的显示则只需处理在首尾的反斜杠即可,公式中间的反斜杠还是一个就能正常显示。

比如二次方程的求根公式\( x = \dfrac{-b \pm \sqrt{b^2 - 4ac}}{2a} \)的源码为

首先是普通的输入、以及行输入和块输入的区别:

The Newton's second law is F=ma.

The Newton's second law is \(F=ma\).

The Newton's second law is
\[F=ma\]

接下来是几个常用的数学记法:

  • 希腊字母:使用反斜杠加拉丁注音字母,比如: \alpha就是\(\alpha\)、\beta就是\(\beta\);首字母大写就是大写符号,比如\delta就是\(\delta\)、\Delta就是\(\Delta\);而加粗和斜体通过添加\mathbf、\mathit到字母的前面,比如\(\Gamma \mathbf\Gamma \mathit\Gamma\)。希腊字母总表见下图:

  • 导数:通过添加\frac为分数符号、dy为微分符号和\partial偏微分符号,比如:导数 \(\frac{dy}{dx}\),偏导数 \(\frac{\partial y}{\partial t}\)。

  • 位置标记:上标使用^、下标使用_,比如 \(a^b a_b\)。

  • 向量: \vec后接符号即可,比如 \(\vec{x}\)

  • 行列式:行列式的开始为:\left|\begin{array}{cccc},其中\left|表示左定界符,begin含义表示行列式以数组开始,{cccc}表示居中,但是在ghost上左对齐和右对齐都是居中显示结果。在行列式的元素上,每行以\\表示该行的结束。&是对齐符号。

\[ \left|\begin{array}{cccc} 1 & 6 & 9 \\ 7 & 90 & f(x)\\ 9 & \psi(x) & g(x) \end{array}\right| \]

  • 矩阵: 矩阵就是在行列式的基础上,将两边的定界符中的||修改为[]即可。

\[ \left[\begin{array}{cccc} 1 & 6 & 9 \\ 7 & 90 & f(x)\\ 9 & \psi(x) & g(x) \end{array}\right] \]

  • 等式:通过=来表示等于符号,比如\(a+b=c\)。

  • 方程组:一般使用cases来排版方程组和分段函数,比如下面的方程组。其中&是对齐符号,\neq为不等号。

\[ \begin{aligned} \begin{cases} a+b&=c\\ d&=e+f+g\\ c&\neq d\\ e&\in\big(a-1,k+4\big] \end{cases} \end{aligned} \]

其他更多内容可以看《LaTex Primer》[5]的详细介绍。


参考

  1. LaTeX简单入门

  2. 在ghost上安装MathJax

  3. 希腊字母表

  4. 行列式、矩阵、方程组的表示

  5. LaTex Primer