外!号外!今日头条终于支持LaTeX数学公式输入了!作为一个数学作品创作者,小石头真是 普大喜奔!这真是头条给广大数学爱好者的最好新年礼物呀!

以前,要输入数学公式,必须将其转为图片,然后再插入;现在,只需打开PC端的文章编辑页面,在文章编辑区中选择公式要插入位置,然后在工具栏里下拉 “插入更多插入卡” ,再点击 “插入公式” ,就可以打开头条提供的 公式编辑器,进行录入公式了。

图1:打开公式编辑器

公式编辑器分为:工具栏、公式编辑区、公式预览区,三部分,

图2:公式编辑器

在公式编辑区输入LaTeX公式,就可以实时地在公式预览区看到公式呈现的效果,而工具栏中提供了丰富的LaTeX命令按钮,帮助我们输入LaTeX命令。

当公式输入完成后,点击确定按钮,就会将所输入的公式插入到文章编辑区中之前所选插入位置,

图3:公式成功插入

之后,还可以通过点击该公式,再次将它在公式编辑器中打开进行修。


条的数学公式采用LaTeX数学公式的语法。LaTeX是TeX的宏扩展,而TeX是著名数学家,计算机学家 Donald 为他的巨著《计算机程序设计的艺术》专门开发的计算机排版系统。后来,美国数学学会(AMS)又在LaTeX基础上提供了 “amsmath” 宏包,这就是今天的LaTeX数学公式。

TeX是一个命令式宏语言,我们在公式编辑区中所输入的公式其实就是TeX代码。TeX类似Python这样的计算机语言,只不过TeX代码的执行结果是生成格式文本,也就是预览区和文章编辑区中所呈现的东西。

TeX的这种特性,使得头条的数学公式编辑器 异于World这样的可见即可得的编辑器,要玩转它我们必须对 LaTeX数学公式的语法有一定的了解。


LaTeX数学公式由文字和命令组成,其中LaTeX文字代表自己本身,例如:

e ➤

而LaTeX命令,均以斜杠”“(称为转义符)开头,用于和普通文字区别,命令生成格式和符号, 例如:

pi ➤

通常,命令之后带有参数,例如:

sqrt 2 ➤

也可以带有多个参数,例如:

frac 1 2 ➤

除去命令名外,每个字符(包括,字母、数字、符号)是各自独立的,例如:

sqrt ab+2 ➤

要让多个字符组成一个整体需要用花括号"{, }"将它们包裹起来,例如:

sqrt {ab+2} ➤

TeX在输出格式文本时,会默认将符号之间的空格过滤掉,例如:

a b ➤

如果想要显示输出空格需要在每个空格前加转义符,例如:

a b ➤

换行同样也被过滤掉,想要换行使用 双斜杠 \ ,例如:

a \ b ➤

有些命令因为非常用,所以TeX提供了关键字,例如:上下标命令分别是^和_,

a_b, a^c, a_b^c ➤

一般数学公式中不使用这些关键字,如果非要使用可以在之前加转义符,例如:

a_b ➤

注意:花括号"{, }" 也是关键字,所以也需要转义符,例如:

[n]={1,2, ..., n} ➤

数学公式分为行内和行外之分,当公式插入在一行文字之间时,称为行内,当公式单独占据一行时,称为行外。我们可以在文章编辑区,用鼠标拖拽公式,改变它的插入位置,从而在行内行外切换。

图4:行内行外切换

同时,我们还可以通过工具栏,来调节行外公式的 对其方式情况。

图5:行外居中


于,初学者来说,常用的LaTeX数学命令并不需要记忆,因为头条公式编辑器已经将它们做成了工具栏中的快捷按钮,如下图,按下 按钮,就会在 公式编辑器 生成 命令 sqrt x ,然后只需要将 参数 x 改成我们需要的 表达式就可以了。

图6:快捷的LaTeX命令输入

但是,想要完全玩转数学公式输入,大家还需要还需掌握更多命令,以应付世界上最复杂的事物——数学。以下是小石头(作者)这两年,在头条用图片输入数学公式所积累的经验,在这里与大家分享。


在数学公式中,变量、函数参数 等 普通字符 默认为 斜体 ,而 函数名 需要写成 正体(罗马体) ,绝大多数 数学函数都已经被 LaTeX支持,例如:

sin x ➤

但是有少部分 函数没有,例如:值域 ran,这时就需要使用 operatorname 命令,例如:

operatorname{ran} f ➤

除了函数名外,某些字母被用于特殊意义时,也需要被写成 正体,例如:虚单位i,微分符号 d,这时可使用 mathrm 命令将字符指定为正体 例如:

mathrm{i}, mathrm{d}x ➤

特殊数集被要求被写成板书粗体,LaTeX支持的有,

  • 自然数集: N ➤ ;
  • 整数集: Z ➤ ;
  • 有理数集: Q ➤ ;有Bug
  • 实数集: R ➤ ;
  • 复数集: C ➤ ; 有Bug

注意:数集也可以写成(普通)粗体。

如果不支持可以使用 mathbb 命令,例如:

mathbb{A} ➤

下面的字体,也经常在数学公式中使用,

  • 意大利体 mathit{A} ➤ , 默认字体;
  • (普通)粗体 mathbf{A} ➤ ,用于向量、特殊集合;
  • 手写体 mathcal{A} ➤ ,用于 辅助线、特殊对象;
  • 花体 mathscr{A} ➤ ,用于 集族、范畴;
  • 哥特体 mathfrak{A} ➤ ,用于 可测集、特殊集合;

对每一个 特殊符号, 例如:上面的微分符号d,都要用命令指定字体,是非常麻烦的事情!我们可以用 def 命令,来创建新的命令,例如:

def d{mathrm{d}}

然后,就可以使用新命令了,例如:

int 1cdot d x = x + C ➤

当然,def 命令也可以带参数,例如:

def cat#1{mathbf{#1}}

cat{Set} ➤

注意:头条文章编辑器,目前,要求每个公式必须自己定义自己的命令,公式之间自定义命令不能共享。


前面的字体是针对拉丁字母而言的,而希腊字母并不支持这些字体,但是有希腊字母有两种写法(LaTeX通过在原始命令前加var来提供另外一种写法),可以分别用于不同的地方,例如:

直径 phi ➤ ,角度 varphi ➤

伽马函数 Gamma ➤ ,伽马分布 varGamma ➤

还有些希腊字母和拉丁字母完全相同,如:A,K,因此没有对应的LaTeX命令。


对于某些运算符,例如:

累加 sum_{i=1}^n ➤

当作为行内公式时,一般要求,将 上下标写在右上下角,这时可以使用 nolimits 开关,例如:

sumnolimits_{i=1}^n ➤

反过来,当我们希望另外一些运算符,例如:

积分 int_a^b ➤

的上下标符号写在上下时,可以使用 limits 开关,例如:

intlimits_a^b ➤

注意:nolimits 和 limits 开关 仅仅对 操作符有效,对于普通符号想要使用它们,需要用 mathop 命令将其转为操作符,例如:

mathop{a}limits_b^c ➤


组合命令:

binom {n}{k} = frac{n!}{(n-k)!k!} ➤

在行内可改写为:

tbinom {n}{k} = n! / (n-k)!k! ➤


两种括号比较:

(frac 1 2), left( frac12 right) ➤

只显示一边的括号:

left. frac12 right) , left( frac12 right. ➤

定义集合时需要用 竖杠命令 mid 将 元素 和 属性分开,例如:

N = {x in Z mid x geq 0} ➤

但是,如果 属性表达式是多行时,我们需要使用 两对 left right 配合使用,并且由于 mid 不能应用,所以必须使用 原始 的 竖杠 | 搭配空格,例如:

left{x in Z left| x geq frac 1 2 right.right} ➤

在求定积分时,也有类似的技巧,例如:

0!=Gamma(1)=left.int_0^{+infty} t^0 e^t d t = -e^tright|_0^{+infty} = 1 ➤


有时候,需要更宽的空格,这时用多个空格拼接起来不划算,我们可以使用 quad 命令,例如:

x_i in R,quad i = 1, 2, ..., n ➤

转义符 在数学中也用作 差集,这时可以使用 setnimus 命令,例如:

Rsetminus0 ➤

可以用 dots 命令 取代 ... 输入来省略符 ,例如:

1, 2, dots, n ➤

算式的 省略符号 一般写在中间,用 cdots 命令,例如:

a_0x^n + a_1x^{n-1} + cdots + a_{n-1}x + a_n ➤

有时候需要标注累加式或累积式的项数,我们可以这样:

na=overbrace{a + cdots + a}^n ➤

b^m=underbrace{bcdots b}_m ➤

也可以在关系运算符上标注:

stackrel{a}{Longrightarrow} ➤

中学数学,要求用箭头表示矢量:

vec{a} ➤

类似的还有:

overline{A cap B} = overline A cup overline B ➤

a_1 + cdots + hat{a}_i + cdots + a_n ➤

注意:^{a}和 hat{a}完全类似,因为^用于了加帽命令,所以要单独输入^可写为 ^{} 或 hat{}。另外,^在LaTeX公式里无效,只能使用hat。


在公式中可是使用下列命令来控制字体大小:

{Huge A} {huge A} {LARGE A} {Large A}{large A} A{small A}{scriptsize A}{tiny A} ➤

也可以使用color命令来控制文字颜色,例如:

{color{red} R}{color{green} G}{color{blue} B} ➤


同余方程命令:

f(x) equiv c pmod m ➤ ​

f(x) bmod m = c ➤

方程组命令:

begin{cases} x_1 + x_2 = -frac b a \ x_1x_2 = frac c a end{cases} qquad left{begin{array}{c} x_1 + x_2 &=& -frac b a \ x_1x_2 &=& frac c a end{array}right.


矩阵命令:

begin{matrix} 1 & 0 \ 0 & 1 end{matrix}

添加括号(包括行列式符号):

begin{pmatrix} M end{pmatrix}, begin{bmatrix} M end{bmatrix}, begin{vmatrix} M end{vmatrix}

添加省略符和角标:

begin{bmatrix} 1 & cdots & 1 \ vdots & ddots & 0 \ 1 & 0 & 1 end{bmatrix}_{m times n}


添加分割线:

begin{array}{|c:c|} hline 1 & 0 \ hdashline 0 & 1 \ hline end{array}


算术竖式:

begin{matrix} & A & B & C & D \ times & & & & 9 \ hline & D & C & B & A end{matrix}

begin{array}{c} begin{matrix} \ Box & Box & Box & / \ \ \ \ \ \ \ \ \ end{matrix} begin{matrix} &&&Box & 7 & Box & Box & Box \ hline Box & Box & Box & Box & Box & Box & Box & Box \ Box & Box & Box & Box \ hline && Box & Box & Box \ && Box & Box & Box \ hline && Box & Box & Box & Box \ &&& Box & Box & Box \ hline &&&& Box & Box & Box & Box \ &&&& Box & Box & Box & Box \ hline &&&&&&&0 end{matrix} end{array}


了,目前小石头经常用的就这么多了,希望对大家有所帮助。

就小石头分析,头条数学公式,具体使用的是 MathJax 的 KaTeX引擎,更详细的内容大家可以参考:https://www.mathjax.org/。

(这是小石头的第一篇头条文章,结束比较匆忙,写得也比较仓促,出错之处在所难免,欢迎各位条友批评指正!)