我正在尝试创建代数中可数直接极限的图表。以下代码
$$\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'\\}$$
生成下图:
问题:
我怎样才能让箭头
\alpha_1
、\alpha_2
、\alpha_3
到达目的地 A?如何放置标签
\alpha_{1,2}
更低(更接近箭头)?如何将对象 A 和 A' 向右移动一点(与 \alpha_i,\alpha'_i 一起)使得箭头 \alpha 不相交
\ldots
并且保持笔直?当我弯曲箭头(使用 PDFtex)时,我得到的是栅格化的箭头。我怎样才能弯曲箭头并仍然保留矢量图形?
出什么问题了
\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}