箭头

等号诞生于 1557 年,加号和减号可以追溯到 15 世纪。而箭头——今天数学中最醒目的符号——直到 20 世纪才被普遍使用。它一旦出现,几乎立刻就成了主角:在范畴论中,对象之间的箭头比对象本身更重要。本页梳理 LaTeX 能排出的约四十种箭头,贯穿其中的只有一个想法——箭头的形状本身就在说明它的含义。多数时候,看一眼样子就知道该选哪一个。

箭头住在数学模式里

在 TeX 看来,箭头不是图形,而是一个关系符,而关系符两侧要留出固定的间距。这正是在正文里直接写 \to 会报错、而不只是难看的原因:在数学模式之外,那条间距规则根本不存在。要先进入数学模式,例如 $f\colon A \to B$。命名方式极其机械——方向(leftrightupdown)加上形状。把首字母大写就得到双线形式(\Rightarrow ⇒),加上 long 前缀就得到加长形式(\longrightarrow ⟶)。这些名字可以推导出来,不必死记。

latex
% a map, and a chain of implications
\[
  P \implies Q, \qquad x \to 0, \qquad a_n \to L \;(n \to \infty)
\]

有两个别名,知道来历之后就再也不会忘。\to\rightarrow 的别名,\gets\leftarrow 的别名——但 \gets 这个名字来自计算机科学而非数学。x \gets 1 读作「x 取得(gets)1」,也就是赋值。写出 TeX 的高德纳同时是《计算机程序设计艺术》的作者,他把描述算法的词汇直接带进了排版系统。另一个是 \iff(⟺)。把「iff」用作「当且仅当」的缩写,是数学家 保罗·哈尔莫斯 推广开的;证明末尾那个空心方块 ∎ 也出自他手,至今仍被称作哈尔莫斯符号。实用上:映射与极限用短的 \to\gets,等价命题用 \iff

水平箭头:第二条线是做什么的

水平箭头分为单线族(\leftarrow\rightarrow\leftrightarrow)和双线族(\Leftarrow\Rightarrow\Leftrightarrow),各自都有加 long 的加长版本。单线与双线之别不是装饰。按照读者共享的惯例,单线 → 表示集合或对象之间的映射,双线 ⇒ 表示命题之间的蕴涵。因此当「f: A → B」与「P ⇒ Q」出现在同一页上时,仅凭线的条数就能让读者明白这是两个不同层次的陈述。加长形式长度固定,与本页末尾的可伸缩箭头不是一回事。

命令字形意义/用途
\leftarrow向左箭头(与 \gets 相同)
\gets\leftarrow 的别名;表示赋值
\rightarrow向右箭头(与 \to 相同);用于映射
\to\rightarrow 的别名;f\colon A \to B
\leftrightarrow双向箭头
\longleftarrow向左长箭头
\longrightarrow长向右箭头
\longleftrightarrow加长的双向箭头
\Leftarrow双线向左箭头
\Rightarrow双线向右箭头;蕴涵
\Leftrightarrow双线双向箭头;等价
\Longleftarrow长双线向左箭头
\Longrightarrow长双线向右箭头
\Longleftrightarrow加长的双线双向箭头
\iff当且仅当;在 \Longleftrightarrow 前后加了空白

在偏叙述的逻辑文字中,amsmath 提供的 \implies(⟹)与 \impliedby(⟸)能让书写风格更统一。它们就是在 \Longrightarrow\Longleftarrow 两侧加了额外间距,与 \iff 的留白一致。把推理写成「P \implies Q \iff R」,符号前后就有了呼吸感,多出的空白像标点一样起作用,再长的式子也能看出该在哪里停顿。相反,一连串紧凑的 \Rightarrow 容易让式子挤成一团。

当形状即定义:映射与带钩的箭头

从这里开始,箭头成了词汇。\mapsto(↦)尾部带一竖,表示的不是「从集合 A 到集合 B」,而是「这个元素映到那个元素」。把 x \mapsto x^2f\colon \mathbb{R} \to \mathbb{R} 并列书写,就能在一行之内分清映射本身与元素之间的对应。这一记法通过数学家团体 布尔巴基 的著作传播开来。\hookrightarrow(↪)尾部的钩子有「勾住」的意象,惯例上标记包含映射——把子集原封不动地嵌入更大的集合。二者都属标准 LaTeX,无需宏包。

命令字形意义/用途
\mapsto元素之间的对应;x \mapsto x^2
\longmapsto加长的元素对应箭头
\hookleftarrow带钩的左箭头
\hookrightarrow带钩的右箭头;包含映射(单射)
latex
\[
  f\colon \mathbb{R} \to \mathbb{R}, \quad x \mapsto x^2,
  \qquad \mathbb{Z} \hookrightarrow \mathbb{Q}
\]

当你想直接声明单射或满射时,箭头的造型最为雄辩。在 amssymb 中,\rightarrowtail(↣)在尾部长出一条「尾巴」,\twoheadrightarrow(↠)则把箭头变成双层。尾巴读作「各归各的去处」,即单射;双层箭头读作「覆盖对面的全部」,即满射;两者兼备的 ⤖ 表示双射。也就是说,把箭头拆成尾、轴、头三个部件,含义便可以直接读出来。不过这类记号依赖上下文,论文中最稳妥的做法是首次出现时定义一次。另外别把 \mapsto 挪用来表示包含,也别把 \hookrightarrow\rightarrowtail 弄混。

竖直与斜向:图表的骨架

竖直与斜向的箭头在交换图中最能发挥作用。这类图表在 1945 年被大量使用——正是 塞缪尔·艾伦伯格桑德斯·麦克莱恩 创立范畴论的那篇论文——并由此确立了「以对象为顶点、以映射为边」的数学书写方式。竖直一族是单线的 \uparrow\downarrow\updownarrow 与双线的 \Uparrow\Downarrow\Updownarrow。四个斜向是 \nearrow(↗)、\searrow(↘)、\swarrow(↙)、\nwarrow(↖),名字就是东北、东南、西南、西北这几个方位。在分析学中,↗ 与 ↘ 还用来标记单调递增与单调递减的收敛。另外 \uparrow 等也可作为 \left … \right 的定界符使用。

命令字形意义/用途
\uparrow向上箭头
\downarrow向下箭头
\updownarrow上下箭头
\Uparrow双线向上箭头
\Downarrow双线向下箭头
\Updownarrow双线上下箭头
\nearrow东北箭头
\searrow东南箭头
\swarrow西南箭头
\nwarrow西北箭头

鱼叉箭头与 amssymb:单侧倒钩说明了什么

鱼叉箭头(harpoon)是只在一侧带倒钩的箭头。把上钩与下钩组合起来的 \rightleftharpoons(⇌)是化学中表示可逆反应或平衡的通用符号。单侧带钩本身就是含义所在:上下两支箭表示正反应与逆反应是两个独立的过程,这与双侧带钩的 ⇄ 并不相同。若要正式排版化学式,mhchem 宏包可以让你写成 \ce{A <=> B},并顺带处理系数与状态符号。在物理中,鱼叉箭头也出现在角动量相关的记法里。

命令字形注释
\rightharpoonup向右、只有上侧带钩的鱼叉箭头(标准)
\rightharpoondown向右、只有下侧带钩的鱼叉箭头(标准)
\leftharpoonup向左、只有上侧带钩的鱼叉箭头(标准)
\leftharpoondown向左、只有下侧带钩的鱼叉箭头(标准)
\rightleftharpoons可逆反应箭头(标准)

另一方面,双头、带尾、虚线之类的装饰性箭头并不在标准 LaTeX 之内,需要 \usepackage{amssymb}。该宏包属于美国数学会(AMS)编制的一套字体与宏,用来补足高德纳最初设计的数学字体中、一线数学家觉得不够用的符号。反过来说,下表中的每一个箭头之所以存在,都是因为有人在论文里需要它。

命令字形含义/用途 (amssymb)
\twoheadrightarrow双箭头的右箭头;满射
\twoheadleftarrow双箭头的左箭头
\rightarrowtail带尾的右箭头;单射
\leftarrowtail带尾部的左箭头
\rightrightarrows两个并排的向右箭头
\leftleftarrows两个并排的向左箭头
\rightleftarrows向右与向左并排的一对箭头
\rightsquigarrow弯曲的右箭头
\leftrightsquigarrow波浪形的左右箭头
\curvearrowright顺时针弯曲箭头
\nrightarrow否定(斜线)右箭头
\nRightarrow否定双线右箭头

承载文字并随之伸长的箭头

到目前为止的箭头长度都是固定的。amsmath 提供的 \xrightarrow{…}\xleftarrow{…}让轴身随着上方文字的宽度伸长。当映射需要命名时——A \xrightarrow{\ f\ } B——或者要在正合列、交换图的边上写附加条件时,就用它们。用 \stackrel 把文字叠在定长的 \longrightarrow 之上是更早的写法,至今仍能用,但只要文字比箭头长就会溢出,所以如今直接用可伸缩箭头更自然。

latex
\usepackage{amsmath}   % \xrightarrow, \xleftarrow
% \usepackage{mathtools} % also \xLeftarrow, \xhookrightarrow, \xmapsto
\[
  A \xrightarrow{\;f\;} B \xrightarrow{\;g\;} C,
  \qquad x \xrightarrow[n\to\infty]{} L
\]

再加上方括号里的可选参数,就能在箭头下方也放文字。写成 \xrightarrow[n \to \infty]{\ a_n\ },上方是映射的名字、下方是条件,关于极限或收敛的陈述便能收进一支箭头里。一旦要排整幅图表,tikz-cd 之类的专用宏包最终更省事,因此实用的分工是:行内只需一支箭头时用 \xrightarrow,要绘制图表本身时用 tikz-cd

总结起来,判断大致分三步。用作映射或关系时,标准 LaTeX 就够了\to\mapsto\hookrightarrow\Rightarrow)。当形状本身要承载含义——单射、满射、平衡——就取用 amssymb当箭头要承载文字并随之伸长,就用 amsmath\xrightarrow 一族。而一旦要绘制图表本身,就转向 tikz-cd。选择箭头,同时也是在无声地告诉读者:现在讨论的是哪一个层次。