带有 xy 的复杂图表(全部都是错的)

带有 xy 的复杂图表(全部都是错的)

我正在尝试创建代数中可数直接极限的图表。以下代码

$$\vspace{-1mm}\xymatrix{
&&& A\ar@{-->}[dd]^{\exists!\alpha}\\
A_1\ar[r]^{\!\!\!\alpha_{1,2}} \ar@/^12pt/[urrr]|-{\alpha_{1}} \ar@/_12pt/[drrr]|-{\alpha'_{1}}&
A_2\ar[r]^{\!\!\!\alpha_{2,3}} \ar[urr ]|-{\alpha_{2}} \ar[drr ]|-{\alpha'_{2}}&
A_3\ar[r]^{\!\!\!\alpha_{3,4}} \ar[ur  ]|-{\alpha_{3}} \ar[dr  ]|-{\alpha'_{3}}&
\ldots\\
&&& A'\\}$$

生成下图:

在此处输入图片描述

问题:

  1. 我怎样才能让箭头\alpha_1\alpha_2\alpha_3到达目的地 A?

  2. 如何放置标签 \alpha_{1,2} 更低(更接近箭头)

  3. 如何将对象 A 和 A' 向右移动一点(与 \alpha_i,\alpha'_i 一起)使得箭头 \alpha 不相交\ldots并且保持笔直?

  4. 当我弯曲箭头(使用 PDFtex)时,我得到的是栅格化的箭头。我怎样才能弯曲箭头并仍然保留矢量图形?

  5. 出什么问题了\alpha'_3

答案1

TikZ-CD 包(cd库)可能为 CD 提供更好的界面。

在这里,我使用end arrows钥匙来自另一个答案,这样可以更轻松地在循环中创建箭头(并且使它们不妨碍所使用的内部矩阵的内容)。但这不会阻止您使用正常的\ar/\arrow宏,因为它用于虚线箭头。

在第一个图中,我弯曲箭头,使最短的箭头实际上是直的。标签使用键,这样tight它们周围就不会有太多空白

对于第二张图,我只是稍微向右移动A一下,也可以使用一个新列,但可能它与前一列之间没有实际空间。A'

这里我使用倾斜的圆角正交箭头,其端点在垂直方向上略微偏移。标签放置在使用样式来绘制箭头description

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{cd}
\tikzset{
  XY To/.tip={To[length=+3pt +3.5, width=+2pt +2.5]},
  XY To Tight/.tip={XY To[width=+2pt +1.5]},
  |-/.style={to path={|-(\tikztotarget)\tikztonodes}}}
\tikzcdset{
  tight/.style={inner sep=+.1em},
  tight desc/.style={tight, description}}
\makeatletter
\NewDocumentCommand{\tikzcd@arrowlate}{O{}}{%
  \path[{/tikz/commutative diagrams/.cd,every arrow,#1}]
    (\tikzcd@ar@start\tikzcd@startanchor)to(\tikzcd@ar@target\tikzcd@endanchor);}
\tikzcdset{
  end arrows/.style={
    /tikz/commutative diagrams/every matrix/.append style={
      append after command=
        \pgfextra{\pgfutil@g@addto@macro\tikzcd@savedpaths
          {\let\arrow\tikzcd@arrowlate#1}}}}}
\makeatother
\begin{document}
\begin{tikzcd}[
  arrows=-XY To,
  end arrows={
    \foreach[count=\j from 2] \i in {1, 2, 3}{
      \arrow[from=2-\i, to=1-4, bend left=-(\i-3)*7, "\alpha _\i"  tight, near start]
      \arrow[from=2-\i, to=3-4, bend left= (\i-3)*7, "\alpha'_\i"' tight, near start]
      \arrow[from=2-\i, to=2-\j, "\alpha_{\i, \j}" tight]
    }
  }
]
      &     &     & A  \ar[dd, bend left, dashed, "\exists!\alpha"] \\
  A_1 & A_2 & A_3 & \cdots                                          \\
      &     &     & A'
\end{tikzcd}
\begin{tikzcd}[
  arrows=-XY To Tight,
  end arrows={
    \foreach[count=\j from 2] \i in {1, 2, 3}{
      \arrow[from=2-\i, to=1-4, |-, xslant= .5, rounded corners, near start,
             "\alpha_\i" tight desc, end anchor={[yshift=-(\i-2)*1mm]}]
      \arrow[from=2-\i, to=2-\j, "\alpha_{\i, \j}" tight]
      \arrow[from=2-\i, to=3-4, |-, xslant=-.5, rounded corners, near start,
             "\alpha'_\i" tight desc, end anchor={[yshift=(\i-2)*1mm]}]
    }
  }
]
      &     &     & |[xshift=1.5em]| A  \ar[dd, dashed, "\exists!\alpha"] \\
  A_1 & A_2 & A_3 & \cdots                                                \\
      &     &     & |[xshift=1.5em]| A'
\end{tikzcd}
\end{document}

输出

在此处输入图片描述 在此处输入图片描述

答案2

我还会弯曲虚线箭头以及稍微弯曲第二条对角线箭头:

\[
\xymatrix{
&&& A\ar@/^12pt/@{-->}[dd]^{\exists!\alpha}\\
A_1\ar[r]^-{\alpha_{1,2}}
\ar@/^12pt/[urrr]|-{\alpha_{1}}
\ar@/_12pt/[drrr]|-{\alpha'_{1}}&
A_2\ar[r]^-{\alpha_{2,3}}
\ar@/^4pt/[urr]|-{\alpha_{2}} \ar@/_4pt/[drr]|-{\alpha'_{2}}&
A_3\ar[r]^-{\alpha_{3,4}} \ar[ur]|-{\alpha_{3}} \ar[dr]|-{\alpha'_{3}}&
\ldots\\
&&& A'
}
\]

请注意,\ar[r]^-{f}将标签放在实际箭头的中间。

在此处输入图片描述

为点添加一列的解决方案并不是很好。

答案3

删除 方括号中的空格\ar。这解决了问题 1 和问题 5。

\documentclass{article}
\usepackage[all]{xy}
\begin{document}
\[ 
\vspace{-1mm}\xymatrix{
&&& A\ar@{-->}[dd]^{\exists!\alpha}\\
A_1\ar[r]^{\!\!\!\alpha_{1,2}} \ar@/^12pt/[urrr]|-{\alpha_{1}} \ar@/_12pt/[drrr]|-{\alpha'_{1}}&
A_2\ar[r]^{\!\!\!\alpha_{2,3}} \ar[urr]|-{\alpha_{2}} \ar[drr]|-{\alpha'_{2}}&
A_3\ar[r]^{\!\!\!\alpha_{3,4}} \ar[ur]|-{\alpha_{3}} \ar[dr]|-{\alpha'_{3}}&
\ldots\\
&&& A'\\}
\]
\end{document}

xy 图

相关内容