Markdown与数学公式
在写偏理科的文章的时候,多多少少会涉及到一些公式、函数的输入,本篇就来讲讲如何在 Markdown 中书写数学公式。
在此之前,我们先介绍下 LaTex 和 MathJax,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}
效果:
内联公式
如果你想输入的公式比较少,可以在一行内搞定,可以使用内联公式。首先在 Typora 中启用该设置:
启用后,建议重启下 Typora。
内联公式示例:
来输入一个根号2:$\sqrt{2}$
效果:来输入一个根号2:\(\sqrt{2}\)
接下来介绍一些常见的公式语法。
在线编辑器
如果你的 Markdown 编辑器不支持,但又想快速尝试下,可以使用 LaTex 在线编辑器,一搜一大堆,例如:https://www.latexlive.com
常用公式语法
这里列出部分公式语法,更多的请参考文末的“参考资料”。
常见运算符
作用 | Markdown 代码 | 效果 |
---|---|---|
上标 | x^2 |
x2 |
下标 | y_1 |
y1 |
分式 | \frac{1}{2} |
\(\frac{1}{2}\) |
省略号 | \cdots |
\(\cdots\) |
矢量 | \vec{a} |
\(\vec{a}\) |
积分 | \int{x}dx |
\(\int{x}dx\) |
积分(带范围) | \int_{1}^{2}{x}dx |
\(\int_{1}^{2}{x}dx\) |
极限 | \lim{a+b} |
\(\lim{a+b}\) |
极限(带范围) | \lim_{n\rightarrow+\infty} |
\(\lim_{n\rightarrow+\infty}\) |
累加 | \sum{a} |
\(\sum{a}\) |
累加(带范围) | \sum_{n=1}^{100}{a_n} |
\(\sum_{n=1}^{100}{a_n}\) |
累乘 | \prod{x} |
\(\prod{x}\) |
累乘(带范围) | \prod_{n=1}^{99}{x_n} |
\(\prod_{n=1}^{99}{x_n}\) |
向下取整 | \lfloor x \rfloor |
\(\lfloor x \rfloor\) |
向上取整 | \lceil x \rceil |
\(\lceil x \rceil\) |
三角函数
Markdown 代码 | 效果 |
---|---|
\sin |
\(\sin\) |
\cos |
\(\cos\) |
其他符号以此类推,就不一一列举了
对数函数
Markdown 代码 | 效果 |
---|---|
\ln2 |
\(\ln2\) |
\log_28 |
\(\log_28\) |
\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
效果:
换行
用两个反斜线表示换行(注意两个反斜线后面要有空格)。示例:
1 + 1 = 2
\\
2 + 2 = 4
效果:
注意:有些 Markdown 编辑器还未支持该语法,例如本博客使用的 MathJax。
我查了下文档,说是还未实现该功能,但是马上就会实现了。
花括号
示例:
c(u)=\begin{cases} \sqrt\frac{1}{N}, u=0\\ \sqrt\frac{2}{N}, u\neq0\end{cases}
效果:
希腊字母
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}
效果:
带括号的矩阵:
\left[
\begin{matrix}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{matrix} \right]\tag{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 节 数学公式