显示公式

在网页或blog中引用数学公式是一件痛苦的事情。经过几番在网上的查找,算是勉强找到了一个借鉴方法。借用强大的MathJax + Latex就可以解决这个问题。废话少说,先来一个例子

\[ \begin{aligned} & \phi(x,y) = \phi \left(\sum_{i=1}^n x_ie_i, \sum_{j=1}^n y_je_j \right) = \sum_{i=1}^n \sum_{j=1}^n x_i y_j \phi(e_i, e_j) = \\ & (x_1, \ldots, x_n) \left( \begin{array}{ccc} \phi(e_1, e_1) & \cdots & \phi(e_1, e_n) \\ \vdots & \ddots & \vdots \\ \phi(e_n, e_1) & \cdots & \phi(e_n, e_n) \end{array} \right) \left( \begin{array}{c} y_1 \\ \vdots \\ y_n \end{array} \right) \end{aligned} \]

更多例子

下面是在段中插入公式:

1
段内插入LaTeX代码是这样的:$\exp(-\frac{x^2}{2})$,试试看看吧

段内插入LaTeX代码是这样的:\(\exp(-\frac{x^2}{2})\),试试看看吧

1
在段中插入公式$$J_\alpha(x) = \sum\limits_{m=0}^\infty \frac{(-1)^m}{m! \, \Gamma(m + \alpha + 1)}{\left({\frac{x}{2}}\right)}^{2 m + \alpha}$$,效果如何

在段中插入公式\[J_\alpha(x) = \sum\limits_{m=0}^\infty \frac{(-1)^m}{m! \, \Gamma(m + \alpha + 1)}{\left({\frac{x}{2}}\right)}^{2 m + \alpha}\],效果如何

更多更多例子

1
2
3
4
5
$$
\begin{align*}
& J_\alpha(x) = \sum\limits_{m=0}^\infty \frac{(-1)^m}{m! \, \Gamma(m + \alpha + 1)}{\left({\frac{x}{2}}\right)}^{2 m + \alpha}
\end{align*}
$$

公式显示如下: 注意:$$前一定要有空行

\[ \begin{align*} & J_\alpha(x) = \sum\limits_{m=0}^\infty \frac{(-1)^m}{m! \, \Gamma(m + \alpha + 1)}{\left({\frac{x}{2}}\right)}^{2 m + \alpha} \end{align*} \]

或者在一行里:

1
$$ J_\alpha(x) = \sum\limits_{m=0}^\infty \frac{(-1)^m}{m! \, \Gamma(m + \alpha + 1)}{\left({\frac{x}{2}}\right)}^{2 m + \alpha} $$

公式显示如下:

\[ J_\alpha(x) = \sum\limits_{m=0}^\infty \frac{(-1)^m}{m! \, \Gamma(m + \alpha + 1)}{\left({\frac{x}{2}}\right)}^{2 m + \alpha} \]

本文开头的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$$
\begin{aligned}
& \phi(x,y) = \phi \left(\sum_{i=1}^n x_ie_i, \sum_{j=1}^n y_je_j \right)
= \sum_{i=1}^n \sum_{j=1}^n x_i y_j \phi(e_i, e_j) = \\
& (x_1, \ldots, x_n) \left( \begin{array}{ccc}
\phi(e_1, e_1) & \cdots & \phi(e_1, e_n) \\
\vdots & \ddots & \vdots \\
\phi(e_n, e_1) & \cdots & \phi(e_n, e_n)
\end{array} \right)
\left( \begin{array}{c}
y_1 \\
\vdots \\
y_n
\end{array} \right)
\end{aligned}
$$

显示如下:

\[ \begin{aligned} & \phi(x,y) = \phi \left(\sum_{i=1}^n x_ie_i, \sum_{j=1}^n y_je_j \right) = \sum_{i=1}^n \sum_{j=1}^n x_i y_j \phi(e_i, e_j) = \\ & (x_1, \ldots, x_n) \left( \begin{array}{ccc} \phi(e_1, e_1) & \cdots & \phi(e_1, e_n) \\ \vdots & \ddots & \vdots \\ \phi(e_n, e_1) & \cdots & \phi(e_n, e_n) \end{array} \right) \left( \begin{array}{c} y_1 \\ \vdots \\ y_n \end{array} \right) \end{aligned} \]

错误的例子

这个本来是MathJax默认的方式,但是在kramdown中无法显示

1
\[ J_\alpha(x) = \sum\limits_{m=0}^\infty \frac{(-1)^m}{m! \, \Gamma(m + \alpha + 1)}{\left({\frac{x}{2}}\right)}^{2 m + \alpha} \]

[ J_(x) = _{m=0}{2 m + } ]

krmadown

本文主要用到了krmadown,使用很简单,下载安装kramdown,在后在_config.yml文件里面配置即可

  • kramdown主页
    kramdown

  • 配置kramdown
    在_config.yml文件里

1
markdown: kramdown

链接

其实我主要是借鉴了下面两篇文字,具体如何配置,也可以在这两篇文字中找到。

MathJax加载

按照“如何加入公式”的方法加入脚本,会产生一个问题,无论这个页面有没有数学公式,都会去加载MathJax脚本,而加载这个脚本的速度非常慢。那么如何控制,哪些页面加入这个脚本,哪些页面不需要加?

首先,我在post文档中加入了一个变量math,

1
2
3
4
5
6
7
8
---
layout: post

title: "显示公式"
date: 2012-11-21 12:49
comments: true
math: true
categories: math
---

然后在source/_includes/custom/head.html加入脚本相关内容时,加入了 {% if page.math == true %}...{% endif %} 语句进行判断,完整的如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{% raw %}
{% if page.math == true %}
<!--JS for show math symbols -->
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
processEscapes: true
}
});
</script>


<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
}
});
</script>


<script type="text/x-mathjax-config">
MathJax.Hub.Queue(function() {
var all = MathJax.Hub.getAllJax(), i;
for(i=0; i < all.length; i += 1) {
all[i].SourceElement().parentNode.className += ' has-jax';
}
});
</script>


<script type="text/javascript"
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>

{% endif %}
{% endraw %}

这样,在post的markdown中文件中,如果你声明mathtrue,那么就会在最后生成的html文件中加上这段加载MathJax的代码;如果不声明,或在声明为空或false,就不会添加加载MathJax的代码。

还有一个问题,就是在博客首页生成的pinboard中,如果有公式的话,就无法正常显示了。如果需要在首页的pinboard中显示公式,在source/index.html文件中加入math的声明。

1
2
3
4
---
layout: default

math: true
---

关于Latex

本人不会Latex,那么怎么生成Latex格式的公式呢?

  • 一是可以在线生成:Online LaTeX Equation Editor
  • 二是使用mathtype。
    在mathtype的Preferences->Cut and Copy preferences...选中MathML to Tex。编辑公式后拷贝,粘贴到记事本,就可以得到Latex格式的公式。

常用latex符号

特殊字符

|— | 功能 | 语法| 显示 | |:-:|:-:|:-:| |标准函数| \sin x + \ln y +\operatorname{sgn} z | \(\sin x + \ln y +\operatorname{sgn} z\) | |其他 | \nabla \partial dx | \(\nabla \partial dx\) | |集 | \forall x\not\in\varnothing\subseteq A\cap B\cup \exists \{x,y\} \times C | \(\forall x \not\in \varnothing \subseteq A\cap B\cup \exists \{x,y\} \times C\) | |逻辑 | p\wedge \bar{q} \rightarrow p\vee \bar{q} \Rightarrow r | \(p\wedge \bar{q} \rightarrow p\vee \bar{q} \Rightarrow r\) | |根号 | \pm \sqrt{2}\approx\pm 1.4 | \(\pm \sqrt{2}\approx\pm 1.4\) | | | \sqrt[n]{x} | \(\sqrt[n]{x}\) |
|等号 | \sim \simeq \cong \le \ge \equiv \approx \ne | \(\sim \ \simeq \ \cong \ \le \ \ge \ \equiv \ \approx \ \ne\) | |几何 | \angle \perp \| | \(\angle \perp \\\|\) | |特殊 | \oplus \otimes \mp \hbar \dagger \ddagger \star \circ \cdot \bullet | $ $ | |— {: .mytable}

letax数学公式