在写偏理科的文章的时候,多多少少会涉及到一些公式、函数的输入,本篇就来讲讲如何在 Markdown 中书写数学公式。
在此之前,我们先介绍下 LaTex 和 MashJax,Markdown 就是基于它们来实现数学公式的输入。
LaTex 简介
LaTex (读作 /ˈ lɑ ː tɛx/ 或 /ˈ leɪtɛx/ ),可以理解为是非常专业的排版工具,是国际上数学、物理、计算机等科技领域的专业排版工具,是科学文献交流和出版的事实标准。
LaTex 尤其适合处理篇幅较长、结构严谨的文档(例如学术论文),并且十分擅长处理复杂的表格和数学公式的排版,画个象棋图、分子结构式、电路图甚至乐谱都不在话下。
缺点:学习门槛高。如果不是数学、物理、计算机等领域的人来折腾这个,可能得一段时间才能上手。
简单介绍到这,如果你想深入了解下,不然看看这个教程:LaTeX 入门与进阶
MashJax 简介
MathJax 是一款运行在浏览器中的开源数学符号渲染引擎,使用 MathJax 可以方便的在浏览器中显示数学公式,不需要使用图片。
而 Typora 就是使用 MashJax 来解析 LaTex 的数学公式的,这一点也在文档里写了:
数学公式块
那么如何输入数学公式呢?数学公式比较特殊,得在数学公式块里才能正常渲染出结果,纯文本或者代码块是不行的。
在 Typora 中打开数学公式块的方法有:
- 菜单栏 → 段落 → 公式块
- 快捷键
Ctrl + Shift + M
- 输入
$$
,然后回车
效果:出现了一个输入框,后续就在这里输入公式
注意:
- 并不是所有编辑器都支持(例如知乎和公众号就不行),如果遇到了不支持的情况很正常。
- 在 VSCode 里也可以直接用这个数学公式块。
快速入门
直接看个例子,例如输入根号 2,语法为:
\sqrt{2}
效果:
2 \sqrt{2} 2
内联公式
如果你想输入的公式比较少,可以在一行内搞定,可以使用内联公式。首先在 Typora 中启用该设置:
启用后,建议重启下 Typora。
内联公式示例:
来输入一个根号2:$\sqrt{2}$
效果:来输入一个根号2: 2 \sqrt{2} 2
接下来介绍一些常见的公式语法。
在线编辑器
如果你的 Markdown 编辑器不支持,但又想快速尝试下,可以使用 LaTex 在线编辑器,一搜一大堆,例如:https://www.latexlive.com
常用公式语法
这里列出部分公式语法,更多的请参考文末的“参考资料”。
常见运算符
作用 | Markdown 代码 | 效果 |
---|---|---|
上标 | x^2 | x2 |
下标 | y_1 | y1 |
分式 | \frac{1}{2} | 1 2 \frac{1}{2} 21 |
省略号 | \cdots | ⋯ \cdots ⋯ |
矢量 | \vec{a} | a ⃗ \vec{a} a |
积分 | \int{x}dx | ∫ x d x \int{x}dx ∫xdx |
积分(带范围) | \int_{1}^{2}{x}dx | ∫ 1 2 x d x \int_{1}^{2}{x}dx ∫12xdx |
极限 | \lim{a+b} | lim a + b \lim{a+b} lima+b |
极限(带范围) | \lim_{n\rightarrow+\infty} | lim n → + ∞ \lim_{n\rightarrow+\infty} limn→+∞ |
累加 | \sum{a} | ∑ a \sum{a} ∑a |
累加(带范围) | \sum_{n=1}^{100}{a_n} | ∑ n = 1 100 a n \sum_{n=1}^{100}{a_n} ∑n=1100an |
累乘 | \prod{x} | ∏ x \prod{x} ∏x |
累乘(带范围) | \prod_{n=1}^{99}{x_n} | ∏ n = 1 99 x n \prod_{n=1}^{99}{x_n} ∏n=199xn |
向下取整 | \lfloor x \rfloor | ⌊ x ⌋ \lfloor x \rfloor ⌊x⌋ |
向上取整 | \lceil x \rceil | ⌈ x ⌉ \lceil x \rceil ⌈x⌉ |
三角函数
Markdown 代码 | 效果 |
---|---|
\sin | sin \sin sin |
\cos | cos \cos cos |
其他符号以此类推,就不一一列举了
对数函数
Markdown 代码 | 效果 |
---|---|
\ln2 | ln 2 \ln2 ln2 |
\log_28 | log 2 8 \log_28 log28 |
\lg10 | lg 10 \lg10 lg10 |
关系运算符
说明 | Markdown 代码 | 效果 |
---|---|---|
加减号 | \pm | ± \pm ± |
乘(或笛卡尔积) | \times | × \times × |
点乘 | \cdot | ⋅ \cdot ⋅ |
除 | \div | ÷ \div ÷ |
不等号 | \neq | ≠ \neq = |
等价 | \equiv | ≡ \equiv ≡ |
小于等于 | \leq | ≤ \leq ≤ |
大于等于 | \geq | ≥ \geq ≥ |
并集 | \cup | ∪ \cup ∪ |
交集 | \cap | ∩ \cap ∩ |
其它特殊字符
Markdown 代码 | 效果 |
---|---|
\forall | ∀ \forall ∀ |
\infty | ∞ \infty ∞ |
\emptyset | ∅ \emptyset ∅ |
\exists | ∃ \exists ∃ |
\nabla | ∇ \nabla ∇ |
\bot | ⊥ \bot ⊥ |
\angle | ∠ \angle ∠ |
\because | ∵ \because ∵ |
\therefore | ∴ \therefore ∴ |
空格,换行
示例:
a \quad b
效果:
a b a \quad b ab
也可以用一个斜线表示空格(注意反斜线后面要有空格)。语法:
a \ b
效果:
a b a \ b a b
换行
用两个反斜线表示换行(注意两个反斜线后面要有空格)。示例:
1 + 1 = 2
\\
2 + 2 = 4
效果:
1 + 1 = 2 2 + 2 = 4 1 + 1 = 2 \\ 2 + 2 = 4 1+1=22+2=4
注意:有些 Markdown 编辑器还未支持该语法,例如本博客使用的 MathJax。
我查了下文档,说是还未实现该功能,但是马上就会实现了。
文档地址:Automatic Line Breaking — MathJax 3.2 documentation
花括号
示例:
c(u)=\begin{cases} \sqrt\frac{1}{N}, u=0\\ \sqrt\frac{2}{N}, u\neq0\end{cases}
效果:
c ( u ) = { 1 N , u = 0 2 N , u ≠ 0 c(u)=\begin{cases} \sqrt\frac{1}{N}, u=0\\ \sqrt\frac{2}{N}, u\neq0\end{cases} c(u)=⎩ ⎨ ⎧N1,u=0N2,u=0
希腊字母
Markdown 代码 | 效果(大写) | Markdown 代码 | 效果(小写) | |
---|---|---|---|---|
A | A | \alpha | α \alpha α | |
B | B | \beta | β \beta β | |
\Gamma | Γ \Gamma Γ | \gamma | γ \gamma γ | |
\Delta | Δ \Delta Δ | \delta | δ \delta δ | |
E | E | \epsilon | ϵ \epsilon ϵ | |
\varepsilon | ε \varepsilon ε | |||
Z | Z | \zeta | ζ \zeta ζ | |
H | H | \eta | η \eta η | |
\Theta | Θ \Theta Θ | \theta | θ \theta θ | |
I | I | \iota | ι \iota ι | |
K | K | \kappa | κ \kappa κ | |
\Lambda | Λ \Lambda Λ | \lambda | λ \lambda λ | |
M | M | \mu | μ \mu μ | |
N | N | \nu | ν \nu ν | |
\Xi | Ξ \Xi Ξ | \xi | ξ \xi ξ | |
O | O | \omicron | ο \omicron ο | |
\Pi | Π \Pi Π | \pi | π \pi π | |
P | P | \rho | ρ \rho ρ | |
\Sigma | Σ \Sigma Σ | \sigma | σ \sigma σ | |
T | T | \tau | τ \tau τ | |
\Upsilon | Υ \Upsilon Υ | \upsilon | υ \upsilon υ | |
\Phi | Φ \Phi Φ | \phi | ϕ \phi ϕ | |
\varphi | φ \varphi φ | |||
X | X | \chi | χ \chi χ | |
\Psi | Ψ \Psi Ψ | \psi | ψ \psi ψ | |
\Omega | Ω \Omega Ω | \omega | ω \omega ω |
矩阵
语法:
\begin{matrix}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{matrix} \tag{1}
效果:
1 2 3 4 5 6 7 8 9 (1) \begin{matrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{matrix} \tag{1} 147258369(1)
带括号的矩阵:
\left[
\begin{matrix}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{matrix} \right]\tag{2}
效果:
[ 1 2 3 4 5 6 7 8 9 ] (2) \left[ \begin{matrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{matrix} \right]\tag{2} 147258369 (2)
Madoko
Markdown 和 Latex 代表了写作语言的两极:Markdown 追求极致的简洁,只有最少的格式控制;而 Latex 追求极致的可控,可以实现无限复杂的格式,也对语法有着严格的限制。
而这两极之间一直遗留着广阔的空白地带,是否有这样一种写作语言,在实现精美排版的同时,保持着足够的简洁和易用呢?Madoko 便是为了这一目的而生。
Madoko 是一款开源的在线编辑器,当然你也可以通过 Node 的方式本地安装并运行。
GitHub 地址:https://github.com/koka-lang/madoko
中文翻译:https://github.com/HHpetra/MadokoReferenceChinese
发布注意事项
有些平台不支持 LaTex,那么如果想要发布带有 LaTex 公式的博客到这些平台,就得先处理下,例如截图。
为此,有人做了一个工具,将 Markdown 中的 LaTeX 转化为本地图片,这个工具叫 mdtex,开源在 GitHub:github.com/rreusser/mdtex-cli
具体步骤可以参考:Markdown 一次编辑全平台发布方案,支持 LaTeX 公式! - 知乎
我用的博客框架是 VuePress,使用了插件 markdown-it-mathjax3
后能正常渲染出结果(例如本文的数学公式都能正常显示),具体步骤可以参考我的另一篇博客:显示数学公式块
参考资料
107 页的PDF 文件:“一份不太简短的 LATEX2e 介绍” 3.1 节 数学公式