近日水群的时候,有些群友奋力地吐槽 MS Word 的公式编辑器之难用,认为这种完全用鼠标点点的东西非常低效,也没有 LaTeX 那样有逼格。事实上,说出这样的话的人,对 MS Word 的数学公式编辑缺乏一定的了解。
其实很多人不会用 Office 系列软件:会用 Word 排版文科作业,但所有样式全是“正文”;会用 PowerPoint 做动效夸张的幻灯片,但每一页的背景图都要手动添加;会用 Excel 求求平均值、排排序,但对数据透视表和汇总分析一无所知。其实这些日常生活中常用的软件,其内部大有玄机;但上述这些就不在本文的讨论范围内了,本文来讲讲数学公式的排版。
众所周知,大家都会用 LaTeX 写公式,就连本博客也是用 MathJax 进行的渲染;但 LaTeX
并不是唯一的数学公式输入方案,还有 AsciiMath 和 UnicodeMath 等。LaTeX
本身是一个泛用的排版软件,其通用性导致了它在排版数学公式的时候会较为冗长、不太可读,例如
\(\left(\lambda\odot \mu\right)_{n\in
\mathbb{Z}}=\sum\limits_{i=0}^n\left(\frac{n!}{i!}\lambda_i
\mu_{n-i}\right)\) 这一公式,其 LaTeX 源码为
\left(\lambda\odot \mu\right)_{n\in \mathbb{Z}} = \sum_{i=0}^n\left(\frac{n!}{i!}\lambda_i \mu_{n-i}\right)
,比较冗长;为了数学排版而专门设计的语言,例如
AsciiMath,会相对简短一些,例如同一公式在 AsciiMath 中写作
(lambda o. mu)_(n in ZZ) =sum_(i=0)^n ((n!)/(i!) lambda_(i) mu_(n-i))
。
为了进一步提高可读性,人们发明了 UnicodeMath,充分利用 Unicode
字符的多样性来表示数学公式,例如上述公式写作
(λ⊙μ)_(n∈ℤ)=∑_(i=0)^n▒(n!/i! λ_i μ_(n-i) )
。这便是 Word
中采用的方案。
那一个很明显的问题就来了,这些奇形怪状的字符比较难以输入;但既然本文是用中文写就的,那么本文的读者就应当清楚有一个叫输入法的东西,可以帮你输入奇怪的
Unicode 字符(汉字)。Word
也内建一个这样的“输入法”,名字叫做“数学符号自动更正”。在顶栏“公式-转换(右边的箭头)-数学符号自动更正”中,你可以看到其全表。比如说,\sum
被自动更正为 ∑
,那么你只要在公式环境下(插入公式,或者Alt-=
),输入BACKSLASH-S-U-M-SPACE,就会帮你变为
∑
。这里的自动更正选用了和 LaTeX 相似的用词,因此如果对
LaTeX 比较熟悉的可以直接上手一部分。
Word 的公式有两个模式,一个叫做“专业”,一个叫做“线性”;线性就是上述 UnicodeMath,专业就是渲染好了的实体公式,下文默认在专业模式下。
出于书写的方便,下文在写公式的时候,会写下键盘实际上输入的东西,这样读者读起来也比较方便。
- 上下标:略。
- 希腊字母:和 LaTeX 一样。
- 粗体,斜体:直接使用 Word 的粗体和斜体,快捷键是
Ctrl-B
和Ctrl-I
。也可以使用"qaq"
来表示类似于 mathrm 的效果 \(\mathrm{qaq}\) 。 - 黑板粗体:使用
\doubleZ
表示 \(\mathbb{Z}\) 。 - 德文尖角体:
\frakturC
表示 \(\mathfrak{C}\) 。 - 分数线:直接使用
a/b
表示 (LaTeX)\frac{a}{b}
。如果比较长,使用括号,例如((a+b))/(c+d)
→ \(\frac{(a+b)}{c+d}\) 。TeX 的\left, \right
不需要了,括号会自动增长。 - 根式:
\sqrt 2
,\sqrt(3&2)
表示立方根。 - 求和:
\sum_(i=1)^n a_i
。专业模式下,这一公式按下空格之后,就会把求和号的上下标展开为实体公式,然后出现一个被求和数的框,直接继续键盘输入a_i
即可。在“线性”模式下,需要输入\sum_(i=1)^n\naryand a_i
,其中 U+2592 ▒\naryand
是像\sum
这种多个参数的符号(下标、上标、被求和数),用于分割后续参数的符号。\prod
同理。 - 二元运算:一般
\times \cdot
,带圈\circ \oplus \otimes \odot
,集合与逻辑\cap \cup \wedge \vee
。他们各自有大操作数版本\bigvee
等。加减号直接使用+-
\(\pm\) 和-+
\(\mp\) 。 - 箭头:
\leftarrow \Rightarrow
等和 LaTeX 一样。 - 对于不成对的括号,使用
\open
和\close
。例如如果左括号是大括号,右括号是竖线,那么有\open{x\close|
,得到\(\left\{x\right|\) 。对于空的一边(类似 TeX 的\right.
,直接写\close
然后空格。 - 使用
\eqarray
排版多行的公式对齐;使用\matrix
排版矩阵。用法类似于\matrix(a_11&a_12&a_13@a_21&a_22&a_23)
,用@
换行、&
缩进。eqarray
类似,但&
不会提供空格,而是在行之间对齐(比如用于对齐等号)。矩阵的省略号\cdots \vdots
等和 LaTeX 差不多。 - 分类讨论使用上两条合起来,即
{ \eqarray( &x," if "x>=0 @ -&x," if "x<0) \close
最后加一个空格。外层的{ \close
用于表示分类讨论的框,内层的eqarray
表示那个两层的对齐结构。 - 向量符号、横线:
a\vec··
,x\bar··
,其中的·
表示空格。第一次空格把\vec
展开成相应的 Unicode 字符,第二次空格把它和前面的字母组合起来。前面如果是多个字母的话加括号。 - 组合数使用
(n\atop i)
,上升幂、下降幂使用a^\underbar 2
。
如果想知道更多,可以看 UnicodeMath 的标准文档 ,使用 Ctrl-F 在 PDF 内查询。
推荐使用 WordTeX 模板,其内建了 LaTeX 的字体,在正确的排版下可以做到和 LaTeX 输出的 PDF 非常类似的效果。我使用这一方法在一年内混淆了三名助教。如果需要导出 PDF,请使用 Adobe Acrobat。别的都有各种各样的小问题。
对于不支持 Word 的环境(或者说,大部分网络发布环境),可以使用 pandoc 将 Word 导出为 Markdown 等格式。