在网页或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 | $$ |
公式显示如下: 注意:$$前一定要有空行
\[ \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 | $$ |
显示如下:
\[ \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 | --- |
然后在source/_includes/custom/head.html
加入脚本相关内容时,加入了 {% if page.math == true %}...{% endif %}
语句进行判断,完整的如下:
1 | {% raw %} |
这样,在post的markdown中文件中,如果你声明math
为true
,那么就会在最后生成的html文件中加上这段加载MathJax的代码;如果不声明,或在声明为空或false
,就不会添加加载MathJax的代码。
还有一个问题,就是在博客首页生成的pinboard中,如果有公式的话,就无法正常显示了。如果需要在首页的pinboard中显示公式,在source/index.html
文件中加入math
的声明。
1 | --- |
关于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}