推荐优先级:quiver >> amscd >> tikzcd
目前 tikzcd 的支持还很差劲,存在很多 bug ,所以尽量不要用。
利用网站quiver: #
直接截图:
或者 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 | @VfVV | V 代表 Vertical (垂直) |
| 向上 | @AAA | @AgAA | A 代表 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]