我想要我的 Dynkin 图有类似这样的东西:
我无法创建的是中间的箭头。到目前为止,我设法获得了这个:
\documentclass{report}
\usepackage{amsmath,amssymb,tikz-cd}
\begin{document}
\begin{tikzcd}
\underset{1}{\bullet}
\arrow[shorten <= -6pt, shorten >= -6pt, no head, r]
& \underset{2}{\bullet}
\arrow[shorten <= -6pt, shorten >= -6pt, no head, r]
& \underset{3}{\bullet}
&[-22pt] \dots
&[-25pt] \underset{n-1}{\bullet}
\arrow[shorten <= -12pt, shorten >= -7pt, shift right=0.5, no head, r]
\arrow[shorten <= -12pt, shorten >= -7pt, shift left=0.6, no head, r]
& \underset{n}{\bullet}
\end{tikzcd}
\end{document}
这给了我这个: 如何才能获得连接最后两个节点的两个箭头中间的(仅一个)箭头?
编辑:我真的很感谢@Qrrbrbirlbel,他/她花了很多时间解决我的问题,但最后我使用了 dynkin 图表包,所以我接受了另一个答案。
答案1
答案2
中间的箭头是通过arrow
图片放置的,或者你也可以使用decorations.markings
图书馆。
我们可以设置tikzcd
在每个单元格上放置一个项目符号。我们将通过quotes
库使用标签将数字放置在项目符号下方。\mathstrut
设置中的设置使得所有这些节点具有相同的高度/深度,这将更好地对齐它们。
该dots
键可用于放置点而不是普通线。
关键dbl
是使用nfold
库和相同的1.2ex
样式every bullet
来绘制两条平行线。
使用mid arrow
图片arrow
将箭头尖端置于箭头的中间。使用<
反转方向。
通过和普通箭头的组合绘制三条平行线dbl
。(这可以改进,但这是最容易做到的。)
如果需要更多这样的功能,尤其是对于弯曲的路径,我们将需要另一种解决方案(nfold = 3
),但我们可能要确保中间的线不会画在点上,以防您想对项目符号和箭头使用不同的颜色。
使用between origins
列和行分隔符有助于将点对齐到正确的网格中,而不会被标签弄乱。
代码
\documentclass[varwidth]{standalone}
\usepackage{tikz}
\usetikzlibrary{cd, nfold, quotes}
\tikzset{
pics/arrow/.style={/tikz/sloped, /tikz/allow upside down,
code=\pgfarrowdraw{#1}}, pics/arrow/.default=>}
\tikzcdset{
dynkin/.style={
every matrix/.append style={
row sep={2em,between origins}, column sep={2.5em,between origins}},
arrows={dash, thick},
dots/.style={
path only,
/tikz/every to/.append style={
edge node={node[%
commutative diagrams/every label, font=, auto=false, sloped]{$\cdots$}}}},
dbl/.style={
start anchor=center, end anchor=center,
double distance between line centers=+1.2ex, nfold=2},
mid arrow/.default=,
mid arrow/.style={
/tikz/every to/.append style={edge node={
pic[{sloped, allow upside down,</.style={xscale=-1},##1}]
{arrow={Straight Barb[angle'=120]}}}}},
cells={nodes={circle, inner sep=+0pt, minimum size=+1.2ex, draw, fill, thick}},
/tikz/label position=below,
/tikz/every label/.style={
commutative diagrams/every label, shape=rectangle,
execute at begin node=\mathstrut, path only}}}
\tikzcdset{label dynkin/.style 2 args={execute at end picture={
\node[xshift=-.6666em,left,text depth=+0pt]at(\tikzcdmatrixname-#1.west){$#2$};}}}
\begin{document}
\begin{tikzcd}[dynkin, label dynkin={1-1}{A_n, n>0}]
|["1"]| \ar[r] & |["2"]| \ar[r] & |["3"]| \ar[r, dots] & |["n-1"]| \ar[r] & |["n"]|
\end{tikzcd}
\begin{tikzcd}[dynkin, label dynkin={1-1}{B_n, n>1}]
|["1"]| \ar[r] & |["2"]| \ar[r] & |["3"]| \ar[r, dots]
& |["n-1"]| \ar[r, dbl, mid arrow] & |["n"]|
\end{tikzcd}
\begin{tikzcd}[dynkin, label dynkin={1-1}{C_n, n>2}]
|["1"]| \ar[r] & |["2"]| \ar[r] & |["3"]| \ar[r, dots]
& |["n-1"]| \ar[r, dbl, mid arrow=<] & |["n"]|
\end{tikzcd}
\begin{tikzcd}[dynkin, label dynkin={2-1}{D_n, n>3}, row sep=tiny]
& & & & & |["n'" right]| \\
|["1"]| \ar[r] & |["2"]| \ar[r] & |["3"]| \ar[r, dots]
& |["n-1"]| \ar[r] & |["n"]| \ar[ur] \ar[dr] \\
& & & & & |["n^*" right]|
\end{tikzcd}
\begin{tikzcd}[dynkin, label dynkin={2-1}{E_6}]
& & |["3'" above]| \\
|["1"]| \ar[r] & |["2"]| \ar[r] & |["3"]| \ar[r] \ar[u]
& |["4"]| \ar[r] & |["5"]|
\end{tikzcd}
\begin{tikzcd}[dynkin, label dynkin={2-1}{E_7}]
& & |["3'" above]| \\
|["1"]| \ar[r] & |["2"]| \ar[r] & |["3"]| \ar[r] \ar[u]
& |["4"]| \ar[r] & |["5"]| \ar[r] & |["6"]|
\end{tikzcd}
\begin{tikzcd}[dynkin, label dynkin={2-1}{E_8}]
& & |["3'" above]| \\
|["1"]| \ar[r] & |["2"]| \ar[r] & |["3"]| \ar[r] \ar[u]
& |["4"]| \ar[r] & |["5"]| \ar[r] & |["6"]| \ar[r] & |["7"]|
\end{tikzcd}
\begin{tikzcd}[dynkin, label dynkin={1-1}{F_4}]
|["1"]| \ar[r] & |["2"]| \ar[r, dbl, mid arrow] & |["3"]| \ar[r] & |["4"]|
\end{tikzcd}
\begin{tikzcd}[dynkin, label dynkin={1-1}{G_2}]
|["1"]| \ar[r] \ar[r, dbl, mid arrow] & |["2"]|
\end{tikzcd}
\end{document}