我需要绘制类似以下的图表:
任务是绘制一个具有这种语义的图表,不一定是相同的外观。
请注意,在上图中$\sqsupseteq$
表示偏序,箭头表示函数的应用。
$\upuparrows$
并且$\downdownarrows$
是某些功能。
答案1
即使您的图表不是交换图,该tikz-cd
包也可以在这里很好地使用。
我添加了一个键define shortcut
,它只将其两个参数传递给\providecommand*
(类似,\newcommand*
但如果宏已经定义,则不会发出任何抱怨)。这在这里用于创建仅在图片内有效的短宏名称。
shift left
和键shift right
可用于在节点之间移动箭头。它通常(默认为.56ex
)用于将箭头移动少量,这就是我在您的示例中更改其默认值的原因。 被column sep
移除,这样 就sqsupseteq
不会那么孤单, 会row sep
在两条线之间留出更多空间。
该tikz-cd
包(也可以通过\usetikzlibrary{cd}
加载quotes
包来加载,使您能够"<content>"
轻松地沿路径添加节点。(babel
如果您使用babel
定义"
为活动角色的包,也要加载库。)
如果您希望获得正确的数学间距,则\sqsupseteq
需要进行更多微调。
代码
\documentclass[tikz]{standalone}
\usepackage{tikz-cd,amsmath,amssymb}
\DeclareMathOperator{\ID}{ID}
\DeclareMathOperator{\id}{id}
\tikzcdset{define shortcut/.code 2 args=\providecommand*#1{#2}}
\begin{document}
\begin{tikzcd}[
shift left/.default=.5cm,
define shortcut/.list={
\dda\downdownarrows,
\uua\upuparrows,
\Strd{\textsf{Strd}},
\ua{\uparrow}
},
column sep=+0pt,
row sep=large,
]
\dda \ID^{\Strd}_{\uparrow A[n]}
\dar[shift right, "\uua"]\dar[shift left, <-, "\dda"]
& \sqsupseteq
& \ua^{\Strd}\id_{A[n]} = \id^{\Strd}_{\ua A[n]}
\dar[shift right, "\uua"]\dar[shift left, <-, "\dda"] \\
%
\ID^{\Strd}_{\uparrow A[n]} & \sqsupseteq & \uua\ua^{\Strd}\id_{A[n]} = \uua\id^{\Strd}_{\ua A[n]}
\end{tikzcd}
\end{document}