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