当前位置 : 首页 » 文章分类 :  开发  »  MathJax数学公式

MathJax数学公式

MathJax 公式笔记
Hexo博客中使用 MathJax js ,参考 Hexo博客(13)添加MathJax数学公式渲染

公式书写依然按照 MarkDown 语法来,基本上也和 LaTeX 相同,单$符引住的是行内公式,双$符引住的是行间公式。
MathJax公式书写参考
http://meta.math.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference

Getting Started with MathJax
http://docs.mathjax.org/en/latest/start.html

MathJax官网
https://www.mathjax.org/


MathJax行内公式

含下划线_的公式$x_mu$:$x_mu$
希腊字符$\sigma$:$\sigma$
行内公式$y=ax+b$:$y=ax+b$
行内公式$\cos 2\theta = \cos^2 \theta - \sin^2 \theta = 2 \cos^2 \theta$:$\cos 2\theta = \cos^2 \theta - \sin^2 \theta = 2 \cos^2 \theta$
行内公式$M(\beta^{\ast}(D),D) \subseteq C$:$M(\beta^{\ast}(D),D) \subseteq C $


空格

MathJax自己决定是否增加空格。所以直接输入空格是没用的。

$a\ b$ 单个空格
$a\ b$

$a \quad b$ quad 空格
$a \quad b$

$a \qquad b$ qquad 空格
$a \qquad b$


MathJax行间公式

行间公式$$ \sum_{i=0}^n i^2 = \frac{(n^2+n)(2n+1)}{6} $$
$$ \sum_{i=0}^n i^2 = \frac{(n^2+n)(2n+1)}{6} $$
行间公式$$ x = \dfrac{-b \pm \sqrt{b^2 - 4ac}}{2a} $$
$$ x = \dfrac{-b \pm \sqrt{b^2 - 4ac}}{2a} $$


MathJax大括号右多行赋值

\\公式内换行,cases实现大括号右多行赋值,&用来对齐
为了和 marked.js 兼容,公式内改为4个反斜线\\\\换行。

$$
f(n) =
\begin{cases}
n/2,  & \text{if $n$ is even} \\\\
3n+1, & \text{if $n$ is odd}
\end{cases}
$$

$$
f(n) =
\begin{cases}
n/2, & \text{if $n$ is even} \\
3n+1, & \text{if $n$ is odd}
\end{cases}
$$

又比如最长公共子序列的动态规划递推公式:

$$
lcs[i,j] =
\begin{cases}
0, & \text{if $i = 0$ or $j = 0$ } \\\\
cls[i-1, j-1] + 1,  & \text{if $i,j > 0$ and $x_i = y_j$ } \\\\
max(cls[i-1][j], cls[i][j-1]), & \text{if $i,j > 0$ and $x_i \neq y_j$ }
\end{cases}
$$

$$
lcs[i,j] =
\begin{cases}
0, & \text{if $i = 0$ or $j = 0$ } \\
cls[i-1, j-1] + 1, & \text{if $i,j > 0$ and $x_i = y_j$ } \\
max(cls[i-1][j], cls[i][j-1]), & \text{if $i,j > 0$ and $x_i \neq y_j$ }
\end{cases}
$$


MathJax多行公式对齐

比如多行公式推导中常用的等号对齐
begin{split} 表示开始多行公式,end{split}表示结束;公式中用\\表示回车到下一行,&表示对齐的位置。
为了和 marked.js 兼容,公式内改为4个反斜线\\\\换行。

$$
\begin{equation}
\begin{split}
\frac{\partial^2 f}{\partial{x^2}} &= \frac{\partial(\Delta_x f(i,j))}{\partial x} = \frac{\partial(f(i+1,j)-f(i,j))}{\partial x} \\\\
&= \frac{\partial f(i+1,j)}{\partial x} - \frac{\partial f(i,j)}{\partial x} \\\\
&= f(i+2,j) -2f(f+1,j) + f(i,j)
\end{split}
\nonumber
\end{equation}
$$

$$
\begin{equation}
\begin{split}
\frac{\partial^2 f}{\partial{x^2}} &= \frac{\partial(\Delta_x f(i,j))}{\partial x} = \frac{\partial(f(i+1,j)-f(i,j))}{\partial x} \\
&= \frac{\partial f(i+1,j)}{\partial x} - \frac{\partial f(i,j)}{\partial x} \\
&= f(i+2,j) -2f(f+1,j) + f(i,j)
\end{split}
\nonumber
\end{equation}
$$


MathJax公式自动编号

要想MathJax支持公式编号,需添加AMS支持,在脚本中添加如下MathJax配置项:

<script type="text/x-mathjax-config">
MathJax.Hub.Config({
  TeX: { equationNumbers: { autoNumber: "AMS" } }
});
</script>

我上面mathjax.ejs脚本中已加入公式编号的配置。
书写时只要使用begin{equation}环境就会自动编号:

$$
\begin{equation}
\end{equation}
$$

注意此时会自动将文档内的所有begin{equation}公式连续编号,例如:

$$
\begin{equation}
\sum_{i=0}^n F_i \cdot \phi (H, p_i) - \sum_{i=1}^n a_i \cdot ( \tilde{x_i}, \tilde{y_i}) + b_i \cdot ( \tilde{x_i}^2 , \tilde{y_i}^2 )
\end{equation}
$$

$$
\begin{equation}
\beta^*(D) = \mathop{argmin} \limits_{\beta} \lambda {||\beta||}^2 + \sum_{i=1}^n max(0, 1 - y_i f_{\beta}(x_i))
\end{equation}
$$

$$
\begin{equation}
\sum_{i=0}^n F_i \cdot \phi (H, p_i) - \sum_{i=1}^n a_i \cdot ( \tilde{x_i}, \tilde{y_i}) + b_i \cdot ( \tilde{x_i}^2 , \tilde{y_i}^2 )
\end{equation}
$$

$$
\begin{equation}
\beta^*(D) = \mathop{argmin} \limits_{\beta} \lambda {||\beta||}^2 + \sum_{i=1}^n max(0, 1 - y_i f_{\beta}(x_i))
\end{equation}
$$

禁止自动编号

在end{equation}前加\nonumber可禁止对此公式自动编号,例如:

$$
\begin{equation}
\sum_{i=0}^n F_i \cdot \phi (H, p_i) - \sum_{i=1}^n a_i \cdot ( \tilde{x_i}, \tilde{y_i}) + b_i \cdot ( \tilde{x_i}^2 , \tilde{y_i}^2 )
\nonumber
\end{equation}
$$

$$
\begin{equation}
\beta^*(D) = \mathop{argmin} \limits_{\beta} \lambda {||\beta||}^2 + \sum_{i=1}^n max(0, 1 - y_i f_{\beta}(x_i))
\end{equation}
$$

$$
\begin{equation}
\sum_{i=0}^n F_i \cdot \phi (H, p_i) - \sum_{i=1}^n a_i \cdot ( \tilde{x_i}, \tilde{y_i}) + b_i \cdot ( \tilde{x_i}^2 , \tilde{y_i}^2 )
\nonumber
\end{equation}
$$

$$
\begin{equation}
\beta^*(D) = \mathop{argmin} \limits_{\beta} \lambda {||\beta||}^2 + \sum_{i=1}^n max(0, 1 - y_i f_{\beta}(x_i))
\end{equation}
$$


MathJax公式手动编号

可以在公式书写时使用\tag{手动编号}添加手动编号,例如:

$$
\begin{equation}
\sum_{i=0}^n F_i \cdot \phi (H, p_i) - \sum_{i=1}^n a_i \cdot ( \tilde{x_i}, \tilde{y_i}) + b_i \cdot ( \tilde{x_i}^2 , \tilde{y_i}^2 ) \tag{1.2.3}
\end{equation}
$$

$$
\begin{equation}
\sum_{i=0}^n F_i \cdot \phi (H, p_i) - \sum_{i=1}^n a_i \cdot ( \tilde{x_i}, \tilde{y_i}) + b_i \cdot ( \tilde{x_i}^2 , \tilde{y_i}^2 ) \tag{1.2.3}
\end{equation}
$$

不加\begin{equation} \end{equation}也可以,例如:

$$
\beta^*(D) = \mathop{argmin} \limits_{\beta} \lambda {||\beta||}^2 + \sum_{i=1}^n max(0, 1 - y_i f_{\beta}(x_i)) \tag{我的公式3}
$$

$$
\beta^*(D) = \mathop{argmin} \limits_{\beta} \lambda {||\beta||}^2 + \sum_{i=1}^n max(0, 1 - y_i f_{\beta}(x_i)) \tag{我的公式3}
$$

行内公式加\tag{}后会自动成为行间公式,例如:
$z = (p_0, ..... , p_n) \tag{公式21} $
$z = (p_0, ….. , p_n) \tag{公式21} $
又如:

$ s = r cos(a+b) = r cos(a) cos(b) - r sin(a) sin(b) \tag{1.1} $
$ t = r sin(a+b) = r sin(a) cos(b) - r cos(a) sin(b) \tag{1.2} $

$ s = r cos(a+b) = r cos(a) cos(b) - r sin(a) sin(b) \tag{1.1} $
$ t = r sin(a+b) = r sin(a) cos(b) - r cos(a) sin(b) \tag{1.2} $


将下标放到正下方

1、如果是数学符号,那么直接用 \limits 命令放在正下方,如Max函数下面的取值范围,需要放在Max的正下方。可以如下实现:

$ \max \limits_{a < x < b} f(x) $

$ \max \limits_{a < x < b} f(x) $

2、若是普通符号,那么要用 \mathop 先转成数学符号再用 \limits,如
$ \mathop{wonima} \limits_{i=1} $
$ \mathop{wonima} \limits_{i=1} $


MathJax矩阵输入

注意:为了和 marked.js 兼容,公式内改为4个反斜线\\\\换行。

可以用 $$\begin{matrix} ... \end{matrix}$$ 来表示矩阵。将矩阵元素放在 \begin\end 之间即可。
\\ 来分割行,为了和 marked.js 兼容,公式内改为4个反斜线\\\\换行
& 来分割同一行的矩阵元素。

无括号矩阵

$$
\begin{matrix}
1 & x & x^2 \\\\
1 & y & y^2 \\\\
1 & z & z^2 \\\\
\end{matrix}
$$

$$
\begin{matrix}
1 & x & x^2 \\
1 & y & y^2 \\
1 & z & z^2 \\
\end{matrix}
$$

方括号矩阵

$$
A =
\begin{bmatrix}
1 & 0 & 2 \\\\
-2 & 1 & 3 \\\\
\end{bmatrix}
$$

$$
A =
\begin{bmatrix}
1 & 0 & 2 \\
-2 & 1 & 3 \\
\end{bmatrix}
$$

矩阵运算

$$
\left(
    \begin{array}{c}
      s \\\\
      t
    \end{array}
\right)
=
\left(
    \begin{array}{cc}
      cos(b) & -sin(b) \\\\
      sin(b) & cos(b)
    \end{array}
\right)
\left(
    \begin{array}{c}
      x \\\\
      y
    \end{array}
\right)
$$

$$
\left(
\begin{array}{c}
s \\
t
\end{array}
\right)
=
\left(
\begin{array}{cc}
cos(b) & -sin(b) \\
sin(b) & cos(b)
\end{array}
\right)
\left(
\begin{array}{c}
x \\
y
\end{array}
\right)
$$

有括号有竖线矩阵

$$
\left[
    \begin{array}{cc|c}
      1&2&3\\\\
      4&5&6
    \end{array}
\right]
$$

$$
\left[
\begin{array}{cc|c}
1&2&3\\
4&5&6
\end{array}
\right]
$$

行内小矩阵

$\bigl( \begin{smallmatrix} a & b \\ c & d \end{smallmatrix} \bigr)$
这是一个行内小矩阵$\bigl( \begin{smallmatrix} a & b \ c & d \end{smallmatrix} \bigr)$,直接嵌入行内。

这里有个问题,上面的写法在矩阵内没有换行,我看了下源码,双反斜杠\\又被MarkDown渲染引擎转义为单个反斜杠了,解决方法是写三个反斜杠\\\或在双反斜杠后换行即可:
$\bigl( \begin{smallmatrix} a & b \\\ c & d \end{smallmatrix} \bigr)$
这是一个行内小矩阵$\bigl( \begin{smallmatrix} a & b \\ c & d \end{smallmatrix} \bigr)$,直接嵌入行内。


上一篇 LeetCode.1160.Find Words That Can Be Formed by Characters 拼写单词

下一篇 LeetCode.程序员面试金典.0106.CompressString 压缩字符串

阅读
评论
1,840
阅读预计9分钟
创建日期 2020-03-17
修改日期 2020-04-06
类别

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论