我有一个带箭头和循环的数字矩阵。我遇到的问题是,有些循环的大小取决于循环的方向。循环定义为入点和出点之间相差 60 度(循环的中点对应 0、90、180、270)。
在所附图片中,从中间一列可以看出环路大小的差异,矩阵元素上方的环路大于矩阵元素下方的环路。此外,角元素的环路小于边元素的环路。
有人能指出我做错了什么,或者如何使循环看起来大小相同但“旋转”吗? MWE 及其输出如下所示。
\documentclass[tikz]{standalone}
\usepackage{tikz-cd}
\usetikzlibrary{fit,backgrounds}
\begin{document}
\newcommand{\aU}{\arrow[bend left]{u}{}}
\newcommand{\aD}{\arrow[bend left]{d}{}}
\newcommand{\aL}{\arrow{l}{}}
\newcommand{\aR}{\arrow{r}{}}
\newcommand{\aS}[2]{\arrow[loop, out=#1, in=#2,looseness=4]{}{}}
\newcommand{\aSc}[1]{\arrow[loop, out=#1+30, in=#1-30,looseness=4]{}{}}%Self, clockwise
\newcommand{\aSa}[1]{\arrow[loop, out=#1-30, in=#1+30,looseness=4]{}{}}%Self, anti-clockwise
\begin{tikzcd}[nodes={inner sep=1pt,minimum size=3ex},cramped,column sep=scriptsize, row sep=scriptsize,
every matrix/.append style={name=m},execute at end picture={
\begin{scope}[on background layer]
\node[rounded corners,fill=black!10,minimum width=1cm, fit=(m-1-2) (m-4-2)](c1) {};
\end{scope};
}]
2\aD\aSc{135} & 1\aL\aSc{90} & 0\aL\aD\aSc{45} \\
6\aU\aD\aSa{180} & 5\aL\aSc{90} & 4\aL\aU\aD\aSc{0} \\
10\aU\aD\aSc{180} & 9\aL\aSa{270} & 8\aL\aU\aD\aSc{0} \\
14\aU\aSc{225} & 13\aL\aSa{270} & 12\aL\aU\aSc{315}
\end{tikzcd}
\end{document}
答案1
看起来节点的中心并不位于数字本身的中心。并且循环是围绕节点中心构建的。此外,矩形节点形状无助于使循环相等。作为一种解决方法,您可以使用节点形状circle
(请注意,我必须将最小节点大小也增加到 3.5ex 才能使所有圆相等):
\usepackage{tikz-cd}
\usetikzlibrary{fit,backgrounds}
\begin{document}
\newcommand{\aU}{\arrow[bend left]{u}{}}
\newcommand{\aD}{\arrow[bend left]{d}{}}
\newcommand{\aL}{\arrow{l}{}}
\newcommand{\aR}{\arrow{r}{}}
\newcommand{\aS}[2]{\arrow[loop, out=#1, in=#2,looseness=4]{}{}}
\newcommand{\aSc}[1]{\arrow[loop, out=#1+30, in=#1-30,looseness=4]{}{}}%Self, clockwise
\newcommand{\aSa}[1]{\arrow[loop, out=#1-30, in=#1+30,looseness=4]{}{}}%Self, anti-clockwise
\begin{tikzcd}[nodes={inner sep=1pt,minimum size=3.5ex,circle},cramped,column sep=scriptsize, row sep=scriptsize,
every matrix/.append style={name=m},execute at end picture={
\begin{scope}[on background layer]
\node[rectangle,rounded corners,fill=black!10,minimum width=1cm, fit=(m-1-2) (m-4-2)](c1) {};
\end{scope};
}]
2\aD\aSc{135} & 1\aL\aSc{90} & 0\aL\aD\aSc{45} \\
6\aU\aD\aSa{180} & 5\aL\aSc{90} & 4\aL\aU\aD\aSc{0} \\
10\aU\aD\aSc{180} & 9\aL\aSa{270} & 8\aL\aU\aD\aSc{0} \\
14\aU\aSc{225} & 13\aL\aSa{270} & 12\aL\aU\aSc{315}
\end{tikzcd}
\end{document}
结果: