🏠

tikzcd 学习笔记

Table of Contents

1. 背景

数学家们至少从1945年起就开始使用对象和箭头组成的交换示图(Commutative Diagram)来解释他们的工作。也有说法罗素早在1919年就画了类似交换示图:

russell-1919-first-cd.png

也有讲罗素1919年所画的示图,并不是数学严格意义上的交换示图。不过,按照惯例,数学家罗素的确在使用对象和箭头来解释他的工作,所有这些示图被称为交换示图, 即使它们在数学上并不交换1。

可绘制交换示图的宏包非常之多,例如 amscd , DCPic , diagrams , kuvio , xymatrix, diagxy 等等,直到 TiKZ 出现,大家发现 TiKZ 是一个通用的绘图环境,用来画只包含对象和箭头的交换图不很顺手,因此 tikzcd 出现来使 TiKZ 画交换示图更方便整洁。

2. 入门

tikzcd 大体这么用:

\begin{tikzcd}[<options>]
  <environment contents> % <- 环境内容 
\end{tikzcd}

其中 环境内容 由 & 分隔的节点(对象),和 \arrow 标记的箭头组成。

\arrow 也可以写成 \ar 。箭头可以有标注,比如:

inserting-arrows01.png

在下图中上(u)、下(d)、左(l)、右(r)都是相对于 O 的:

explain-udlr.png

箭头,箭头标注,节点可以设置颜色,节点可以旋转。

inserting-arrows02.png

箭头标注可以接近开始,接近结束,可以在下面。

inserting-arrows03.png

箭头可以为左弯,右弯。

inserting-arrows04.png

列的间距可调。

inserting-arrows05.png

箭头的形状可以改变。

changing-arrow-tips01.png

箭头的头尾甚至可以合起来。

changing-arrow-tips02.png

箭头的有几种不同的写法。

alternative-syntax-for-arrows01.png

3. 进阶

列、行的分隔可以调节。

column-sep-small01.png

row-sep-tiny.png

箭头从哪里来,到哪里去,可以绝对指定。

to-alias-z.png

箭头可以来自节点,还可以来自空标签。

empty-label-as-ref.png

empty-label-as-ref2.png

甚至可以指定不显示的“幽灵”箭头。

phantom-arrows.png

箭头可以左右漂移。

arrows-shift.png

箭头的漂移有默认值。

arrow-shift-detault.png

箭头可以适当缩短。

arrow-shorten.png

箭头可以跨越另一个箭头。

arrow-crossing-over.png

用这个特性可以画出有立体感的示图。

arrow-crossing-over02.png

Footnotes:

1

如果连接两个节点的箭头无论选择哪条路径,复合后总是得到相同的箭头,则该示图是交换的