如何绘制具有给定语义的图表?

如何绘制具有给定语义的图表?

我需要绘制类似以下的图表:

图表

任务是绘制一个具有这种语义的图表,不一定是相同的外观。

请注意,在上图中$\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}

相关内容