View Categories

如何画交换图(Tikz)

1 分钟阅读时长

推荐优先级:quiver >> amscd >> tikzcd

目前 tikzcd 的支持还很差劲,存在很多 bug ,所以尽量不要用。

利用网站quiver: #

直接截图:

https://q.uiver.app/

或者 https://blog.taskfirst.cn/tools-quiver/

或者复制 html 代码

<!-- https://q.uiver.app/#q=WzAsMixbMCwwLCJBIl0sWzIsMCwiQiJdLFswLDFdXQ== --> <iframe class="quiver-embed" src="https://q.uiver.app/#q=WzAsMixbMCwwLCJBIl0sWzIsMCwiQiJdLFswLDFdXQ==&embed" width="432" height="176" style="border-radius: 8px; border: none;"></iframe>

添加区块自定义 HTML

将html 代码粘贴进区块。

利用 Mathjax 的 CD 环境 #

如果你只需要画标准的矩形交换图正合序列,MathJax 原生支持的 amscd 环境才是最快、最轻量的解决方案。

\begin{CD} ... \end{CD} 环境中,所有的箭头都以 @ 开头。

方向基础写法 (无标签)带标签写法记忆技巧
向右@>>>@>f>>尖括号指向右边
向左@<<<@<g<<尖括号指向左边
向下@VVV@VfVVV 代表 Vertical (垂直)
向上@AAA@AgAAA 代表 Ascend (上升)
双线(等号)@= (横) / `@` (竖)
占位符@.用于那个位置没有箭头时

三明治法则 #

amscd 与其他绘图包最不同的地方。它的排版是隔行进行的:

偶数行 (2, 4, 6…)只能纵向箭头

奇数行 (1, 3, 5…):写数学对象横向箭头

$$
\begin{CD}
   A    @>f>>    B      \\  % 第一行:对象 + 横向箭头
   @VgVV         @VVhV  \\  % 第二行:只有纵向箭头 (对应 A 和 B 下方)
   C    @>k>>    D          % 第三行:对象 + 横向箭头
\end{CD}
$$

$$
\begin{CD}
A @>f>> B \\ % 第一行:对象 + 横向箭头
@VgVV @VVhV \\ % 第二行:只有纵向箭头 (对应 A 和 B 下方)
C @>k>> D % 第三行:对象 + 横向箭头
\end{CD}
$$

$$
\begin{CD}
   X      @>>>   Y   \\
   @VVV          @.  \\  % 注意这里的 @. ,它占住了 Y 下方的位置
   Z      @=     Z
\end{CD}
$$

$$
\begin{CD}
X @>>> Y \\
@VVV @. \\ % 注意这里的 @. ,它占住了 Y 下方的位置
Z @= Z
\end{CD}
$$

$$
\begin{CD}
   \mathcal{F}  @>{\text{This is a very long label}}>>  \mathcal{G}
\end{CD}
$$

利用tikz: #

利用 tikzcd 来画交换图:

[tikzcd]
A \arrow[r, "\phi"] \arrow[d, red]
      & B \arrow[d, "\psi" red] \\
    C \arrow[r, red, "\eta" blue]
      & |[blue, rotate=-15]| D
[/tikzcd]

[tikzpicture]
\draw (0,0) circle (1in);
[/tikzpicture]

tikz 画图居中展示 #

我们使用短代码

[center]

[/center]

来实现居中展示。

[center]
[tikzcd]
A \arrow[r, "\phi"] \arrow[d, red]
      & B \arrow[d, "\psi" red] \\
    C \arrow[r, red, "\eta" blue]
      & |[blue, rotate=-15]| D
[/tikzcd]
[/center]


注意:目前只支持简单的 tikz 画图,更高阶的画图还在开发研究中。

已知问题(bug) #

已知的一些问题。比如


[tikzcd]
X'
[/tikzcd]

会报错导致无法画图。需要修改成

[tikzcd]
X^\prime
[/tikzcd]

代码 A/B 也存在问题。斜线画出来的是小三角。

[tikzcd]
A/B
[/tikzcd]

应该使用

[tikzcd]
A \textrm{/}B
[/tikzcd]

发表回复