我在 tikz-cd 中有以下交换图,对我来说它看起来非常不对称:
\documentclass{standalone}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzcd}
& & I_1 \ar[rd] \arrow[loop above] & & \\
& I_K \ar[ur] & & I_2 \ar[rd] & \\
I_{K-1} \ar[ur] & & & & I_{3} \ar[d] \\
I_{K-2} \ar[u] & & & & I_{4} \ar[ld]\\
&~\ar[lu]& & ~\ar[ll,dashed, bend left]&\\
\end{tikzcd}
\end{document}
有什么方法可以解决这个问题,并且还可以使整个图表看起来更圆吗?
答案1
用于between origins
消除不对称,并调整列和行分离的值。
\documentclass{standalone}
\usepackage{amsmath}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzcd}[column sep={4.5em,between origins},row sep=1.5em]
& & I_1 \ar[rd] \arrow[loop above] & & \\
& I_K \ar[ur] & & I_2 \ar[rd] & \\
I_{K-1} \ar[ur] & & & & I_{3} \ar[d] \\
I_{K-2} \ar[u] & & & & I_{4} \ar[ld]\\
&~\ar[lu]& & ~\ar[ll,dashed, bend left]&\\
\end{tikzcd}
\end{document}
答案2
我将我的评论转化为答案。
这是一个“更循环”的解决方案,无需tikz-cd
的解决方案,没有它,这个答案(自己)。
\documentclass[tikz,border=7pt]{standalone}
\usetikzlibrary{shapes.geometric}
\tikzset{
nonagon/.style={
shape=regular polygon, regular polygon sides=9,
outer sep=0, minimum size=42mm
}
}
\begin{document}
\begin{tikzpicture}[n5/.style={opacity=0},n6/.style=n5,e6/.style={dashed,bend left=17}]
\path node[nonagon](H){}
% nodes (two are invisible)
foreach[count=\i] \x in {1,k,k-1,k-2,,,4,3,2}{(H.corner \i) node[n\i/.try] (c\i) {$I_{\x}$}}
% edges (one is dashed and bended)
foreach[count=\i] \j in {9,1,2,...,8}{(c\i) edge[->,e\i/.try] (c\j)}
% the top loop
(c1) edge [loop above,scale=1.4] ();
\end{tikzpicture}
\end{document}