乐趣区

使用Markdown输出LaTex数学公式

现在大数据、人工智能、数据分析等很多技术岗位都对数学有一定的要求,数学越来越重要,很多人也开始尝试学习数学,脑子里突然就有了结合 Python 编程来学习数学的想法。在网络上搜索了很多相关资料,看到非常多不错的尝试,但是国内在这方面的资料却比较少,于是就想到开一个技术专栏。
实践出一整套便于互联网传播分享的数学公式跨平台编辑、跨环境显示是非常有必要的,如果还是停留在 Word 或 PDF 时代,那数学就会被限制在文档或图片里而无法通过最流行的网页方式进行传播,而且 Word、PDF 等文件处理软件里的数学公式编辑既麻烦,而且最重要的是与编程脱节。
数学公式的编辑与显示
要将学习心得(尤其是数学公式等)写成文档在知乎、简书、微信公众号以及网站的网页上面展示出来,使用 Markdown 以及 LaTex Math 的结合我认为是最佳的方法。
与 LaTex 文档的比较 虽然很多数学学术论文整个文档就像使用 Markdown 一样是直接使用的 LaTex 语法来编辑的,但是仔细比对之后发现直接用 LaTex 语法来写整个文档来,它的效果和 Markdown + LaTex Math 方式没有太大的区别。但是 LaTex 的语法、编辑器、配置、中文支持等都要比 Markdown 要复杂的多,而且也不及 Markdown 已经非常成熟的生态(包括工具链、社区等)。
编辑器与插件 Markdown 的编辑器非常多,对于很多初学者来说,个人比较推荐使用 VS Code。

一是 VS Code 汉化比较方便,想让更多人学会使用 Python 来学数学,有一个中文界面还是比较重要的;而且 VS Code 是跨平台的,Mac、Windows 都可以上手;
二是 VS Code 是一款极为优秀的代码编辑器,说起优秀,应该算是目前最为推荐的编辑器之一(可能没有之一);要用 Python 学数学,就不能用纯 Markdown 软件,代码编辑器是少不了的,使用 VS Code 编译 Python 和 Markdown 都极为舒适;
三是 VS Code 插件丰富,Python 的编译、Markdown 的编写与预览、LaTex Math 的显示等工具链相当完备。比如 Python 插件,只需要安装插件集合 Python Extension Pack,里面就包含了微软官方插件 Python、MagicPython、Jupyter 等优秀插件;而 Markdown 插件,推荐安装 Markdown All in One,以及 Markdown+Math。

LaTex Math 的语法
LaTex Math 的语法多且杂,我们是没法完全记住这些语法的,能记住也不提倡吧,我连 Markdown 语法都没能全记住。查询手册在手,天下我有,这里比较推荐名校莱斯 Rice 大学的一个语法手册,莱斯大学 LaTex Math 在线 PDF 手册。
当然安装了上述插件的 VS Code 也是有 LaTex Math 语法提示的。用英文字符反斜杠就可以为你提示。下面我们就结合这个 PDF 里 LaTex Math 的语法在 Markdown 里面进行实战,以及对这些语法的使用进行一些简单的讲解。
希腊字母 使用 $LaTex 希腊字母语法 $,也就是将 LaTex 的希腊字母语法用两个美元符号围住即可。比如以下案例:
$\Gamma$、$\iota$、$\sigma$、$\phi$、$\upsilon$、$\Pi$、$\Bbbk$、$\heartsuit$、$\int$、$\oint$
输出的结果就是这样子啦~ $\Gamma$、$\iota$、$\sigma$、$\phi$、$\upsilon$、$\Pi$、$\Bbbk$、$\heartsuit$、$\int$、$\oint$
值得注意的是希腊字母有大写和小写之分,这个大小写是由 LaTex 的首字母是否大小写来控制的。
三角函数、对数、指数 三角函数、对数、指数的写法以及其他符号的语法和字母是一样的,也是使用 $LaTex 符号 $,也就是将 LaTex 的希腊字母语法用两个美元符号围住即可,我们来看下面的案例:
$\tan$、$\sin$、$\cos$、$\lg$、$\arcsin$、$\arctan$、$\min$、$\max$、$\exp$、$\log$
输出的结果如下: $\tan$、$\sin$、$\cos$、$\lg$、$\arcsin$、$\arctan$、$\min$、$\max$、$\exp$、$\log$
运算符 运算符的写法也是如此,不过要注意的是加号、减号、等于号、大于、小于的写法有点不同,是直接用符号即可,这个要注意一下。
$+$、$-$、$=$、$>$、$<$、$\times$、$\div$、$\equiv$、$\leq$、$\geq$、$\neq$
输出的结果就是:$+$、$-$、$=$、$>$、$<$、$\times$、$\div$、$\equiv$、$\leq$、$\geq$、$\neq$
集合符号 集合是高中数学就会学习的知识,也是非常重要的基础概念,集合的符号也比较多,所以会特地把它们单独列出来,虽然它们的语法和上面没有区别。
$\cup$、$\cap$、$\in$、$\notin$、$\ni$、$\subset$、$\subseteq$、$\supset$、$\supseteq$、$\infty$
输出的结果就是:$\cup$、$\cap$、$\in$、$\notin$、$\ni$、$\subset$、$\subseteq$、$\supset$、$\supseteq$、$\infty$
数学符号非常多,这里只是列举了一些常用的符号,更多符号细节既可以查看莱斯大学的 PDF。
数学公式与 Markdown Math
前面只是介绍了单一的数学符号显示问题,但是一段完整的数学公式则包含多个数学符号、数值,在介绍数学公式之前,我们需要先来了解一下内联与块状的概念。内联输出与块状输出前面我们在输出每个符号的时候,都用两个美元符号 $$,这种方式就是内联,所谓内联就是我们可以把数学符号嵌入到文字段落里面,比如:
函数式:$f(x)=\frac{P(x)}{Q(x)}$
函数式:$f(x)=\frac{P(x)}{Q(x)}$,我们可以看到这段公式在文字段落里面。如果我们需要输出的数学公式比较复杂,或者我们需要凸出并独立显示公式,这个时候我们就需要使用到公式的块状输出,块状输出的语法使用 4 个美元符号 $$ 数学公式 $$,我们来看案例。
$$f(x)=\frac{P(x)}{Q(x)}$$
使用块状输出,函数会居中显示,值得一提的是我们在使用块状输出数学公式时,在 Markdown 里需要换行来写公式。$$f(x)=\frac{P(x)}{Q(x)}$$
简单的四则运算我们先来看简单的四则运算怎么用 Markdown Math 编写,
$2x – 5y = 8$
$3x + 9y = -12$
$7x \times 2y \neq 3z$
注意这里的 \times 是乘号,\neq 是不等于,输出的效果如下:$2x – 5y = 8$ $3x + 9y = -12$ $7x \times 2y \neq 3z$
指数输出 Markdown Math 的指数运算符是 ^,这个在 Python 里位运算符,Python 的指数运算符是 **,这个注意区别即可。
$x^3+x^9$
$x^y$
输出的结果为:$x^3+x^9$ $x^y$
n 次方根输出 \sqrt{}是开平方,注意数值使用大括号 {} 围住,而开 n 次方的语法是 \sqrt[n]{},n 次方的 n 用中括号 [] 围住,我们来看下面的案例:
$\sqrt{3x-1}+\sqrt[5]{2y^5-4}$
输出的结果是:$\sqrt{3x-1}+\sqrt[5]{2y^5-4}$
三角公式三角公式通常括号、字母、符号、运算符混杂的比较厉害,所以书写的时候要特别注意,我们来看下面的例子:
$$\cos (2\theta) = \cos^2 \theta – \sin^2 \theta$$
输出的结果如下:$$\cos (2\theta) = \cos^2 \theta – \sin^2 \theta$$
输出分数输出带有分子分母的分数的语法为 \frac{分子}{分母},使用大括号把分子、分母都围住。
$$\frac{x}{2y} +\frac{x-y}{x+y} $$
输出的结果如下:$$\frac{x}{2y} +\frac{x-y}{x+y} $$
求和输出求和公式比较复杂,会涉及到上标和下标,在输出指数 ^ 时我们可以把它看成是上标,使用_来输出下标,我们来看具体案例:
$$\sum_{n=1}^\infty k$$
输出的结果如下:$$\sum_{n=1}^\infty k$$
极限的输出在我们了解了上下标的概念之后,输出极限就会使用到下标,
$$\lim\limits_{x \to \infty} \exp(-x) = 0$$
输出的结果:$$\lim\limits_{x \to \infty} \exp(-x) = 0$$
阶乘的输出
$$\frac{n!}{k!(n-k)!} = \binom{n}{k}$$
输出的结果如下:$$\frac{n!}{k!(n-k)!} = \binom{n}{k}$$
Markdown Math 输出矩阵使用 \begin{matrix}和 \end{matrix}围住即可输出矩阵,矩阵之间用 $ 来空格,用 \\ 来换行。
$$
\begin{matrix}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{matrix}
$$
输出的结果是:
$$
\begin{matrix}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{matrix}
$$
复杂数学公式
分段函数的编写分段函数是非常复杂的,这时候会用到 LaTex 的 cases 语法,用 \begin{cases}和 \end{cases}围住即可,中间则用 \\ 来分段,具体我们来看下面的例子。
$$
X(m,n)=
\begin{cases}
x(n),\\
x(n-1)\\
x(n-1)
\end{cases}
$$
分段函数输出的结果如下:
$$
X(m,n)=
\begin{cases}
x(n),\\
x(n-1)\\
x(n-1)
\end{cases}
$$
Markdown Math 也就是 LaTex 语法输出数学公式的基本用法,我们先介绍到这里,后面我们会在学习过程中接触到时再来研究。
Markdown Math 的跨平台显示
让数学公式可以在知乎、简书、公众号等自媒体平台以及网页和博客系统 Wordpress 上优雅的显示,这样才有利于数学公式的阅读与传播。知乎、简书、掘金上显示数学公式简书的 Markdown 编辑器可以比较完美的支持 Markdown 语法以及 Markdown Math 语法,可以直接把用 VS Code 写的 Markdown 文件里的内容复制粘贴过去,然后进行一些简单的修改就可以了。而知乎自带数学公式的插入,如果直接导入 Markdown 文件显示会出现一些问题,需要把数学公式用知乎自带的 Tex 编辑器重新书写,只需要把 $$ 删除即可。
在网页上显示数学公式由于我们的网页可以不用 Markdown,用 HTML 替换 Markdown 排版语法就可以,所以我们只需要专注于如何在网页上显示数学公式即可。比较完美的解决方案是使用 mathjax,我们只需要在 <head> 标签内插入 mathjaxjs 即可。比如下面的案例,大家只需要把下面的代码复制下来并保存为 html 文件即可,不过要注意的是内联式的语法会有些不同,不再是 $ 符号与公式 $,而是:\(符号与公式 \)
<!DOCTYPE html>
<html>
<head>
<meta charset=”utf-8″>
<meta name=”viewport” content=”width=device-width”>
<script type=”text/javascript” async
src=”https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML” async>
</script>
</head>
<body>
<p>
当 \(a \ne 0\)时, \(ax^2 + bx + c = 0\) 会有两个解,它们是:
$$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$
</p>
</body>
</html>
数学公式在公众号上的显示微信公众号封闭且奇葩,美化微信公众号的排版虽然用的是 html 和 css 语法,但是有很多需要注意的地方,因此排版也相对来说比较麻烦,相比知乎、简书等自媒体平台来说,公众号的排版也可以做到更美观。不过要想让数学公式在公众号上显示就比较麻烦,微信公众号是不支持 LaTex 语法的,所以需要把公式做成图片,其他不支持 LaTex 的自媒体平台也可以这么处理。
公众号显示数学公式有一个比较简单好用的方法就是[Md2All]http://md.aclickall.com/,可以直接把 VS Code 编辑的 Markdown 文档粘贴到里面,还能进行精美的排版,但是这个方法有两个问题,一个是生成的图片比较模糊,有碍观瞻;第二就是如果数学公式过多,就需要用七牛云的 CDN,配置的方法也比较简单,总体来说 Md2All 综合效果最佳的方案,相比于其他方法更方便,也能一梭子把 Markdown 文档以及数学公式进行优雅的公众号排版。

退出移动版