tikz 노드에서 시작되는 곡선 화살표를 추가하는 방법

tikz 노드에서 시작되는 곡선 화살표를 추가하는 방법

저는 tikz 그리기의 초보자입니다. 이제 tikz 노드에서 시작되는 곡선 화살표를 그리는 방법과 노드의 텍스 크기를 변경하는 방법을 모르는 문제에 직면했습니다. 아래는 내 코드입니다. 귀하의 도움에 진심으로 감사드립니다.

\documentclass[tikz]{standalone}
 \usetikzlibrary{positioning}
 \tikzset{state/.style={circle,draw=black}}
    \begin{document}

        \begin{tikzpicture}[transform shape, scale = 0.55, very thin ,node distance=0.7cm, text centered, text width = 0.85em]
        [dotnode/.style={dotted, draw=black, line width=0.1pt}]
        %\tikzstyle{every state}=[fill=none,text=black]
        \node[state] (1)[inner sep=0pt,minimum size=1pt]  {\tiny 1};
        \node[state] (2)  [above=of 1,inner sep=0pt,minimum size=1pt] {\tiny 2};
        \node[state] (3)  [above=of 2,inner sep=0pt,minimum size=1pt] {\tiny 4};
        \node[state] (4)  [above=of 3,inner sep=0pt,minimum size=1pt]{\tiny 8};
        \node[state] (5)  [above=of 4,inner sep=0pt,minimum size=1pt]{\tiny 16};
        \node[state] (6)  [above=of 5,inner sep=0pt,minimum size=1pt] {\tiny 17};
        \node[state] (7)  [above=of 6,inner sep=0pt,minimum size=1pt] {\tiny 18};
        \node[state] (8)  [above=of 7,inner sep=0pt,minimum size=1pt] {\tiny  W};

         \node[state] (9)  [right=of 1,inner sep=0pt,minimum size=1pt]{\tiny 1};
        \node[state] (10)  [above=of 9,inner sep=0pt,minimum size=1pt] {\tiny 2};
        \node[state] (11)  [above=of 10,inner sep=0pt,minimum size=1pt] {\tiny 4};
        \node[state] (12)  [above=of 11,inner sep=0pt,minimum size=1pt]{\tiny 8};
        \node[state] (13)  [above=of 12,inner sep=0pt,minimum size=1pt]{\tiny 9};
        \node[state] (14)  [above=of 13,inner sep=0pt,minimum size=1pt] {\tiny 10};
        \node[state] (15)  [above=of 14,inner sep=0pt,minimum size=1pt] {\tiny  W};      

        \node[state] (16)  [right=of 9,inner sep=0pt,minimum size=1pt]{\tiny 1};
        \node[state] (17)  [above=of 16,inner sep=0pt,minimum size=1pt] {\tiny 2};
        \node[state] (18)  [above=of 17,inner sep=0pt,minimum size=1pt] {\tiny 4};
        \node[state] (19)  [above=of 18,inner sep=0pt,minimum size=1pt]{\tiny 5};
        \node[state] (20)  [above=of 19,inner sep=0pt,minimum size=1pt]{\tiny 6};
        \node[state] (21)  [above=of 20,inner sep=0pt,minimum size=1pt] {\tiny 7};
        \node[state] (22)  [above=of 21,inner sep=0pt,minimum size=1pt] {\tiny  W};  

        \node[state] (23)  [right=of 16,inner sep=0pt,minimum size=1pt]{\tiny 1};
        \node[state] (24)  [above=of 23,inner sep=0pt,minimum size=1pt] {\tiny 2};
        \node[state] (25)  [above=of 24,inner sep=0pt,minimum size=1pt] {\tiny 3};
        \node[state] (26)  [above=of 25,inner sep=0pt,minimum size=1pt]{\tiny 4};
        \node[state] (27)  [above=of 26,inner sep=0pt,minimum size=1pt]{\tiny 5};
        \node[state] (28)  [above=of 27,inner sep=0pt,minimum size=1pt] {\tiny 6};
        \node[state] (29)  [above=of 28,inner sep=0pt,minimum size=1pt] {\tiny  W}; 

      \node[state] (30)  [right=of 23,inner sep=0pt,minimum size=1pt]{\tiny 1};
        \node[state] (31)  [above=of 30,inner sep=0pt,minimum size=1pt]{\tiny 2};
        \node[state] (32)  [above=of 31,inner sep=0pt,minimum size=1pt] {\tiny 3};
        \node[state] (33)  [above=of 32,inner sep=0pt,minimum size=1pt] {\tiny  W/2}; 


        \draw[every loop, line width = 0.12mm]
        (1) edge[blue, dashed]  node {} (2)
        (2) edge[blue, dashed]  node {} (3)
        (3) edge[blue, dashed] node {} (4)
        (4) edge[violet] node {} (5)
        (5) edge[violet, dotted] node {} (6)
        (6) edge[violet, dotted] node {} (7)
        (7) edge[violet, dotted] node {} (8)

        (9) edge[blue, dashed]  node {} (10)
        (10) edge[blue, dashed]  node {} (11)
        (11) edge[blue, dashed] node {} (12)
        (12) edge[violet] node {} (13)
        (13) edge[violet, dotted] node {} (14)
        (14) edge[violet, dotted] node {} (15)

        (16) edge[blue, dashed]  node {} (17)
        (17) edge[blue, dashed]  node {} (18)
        (18) edge[blue, dashed] node {} (19)
        (19) edge[violet] node {} (20)
        (20) edge[violet, dotted] node {} (21)
        (21) edge[violet, dotted] node {} (22)

        (23) edge[blue, dashed]  node {} (24)
        (24) edge[blue, dashed]  node {} (25)
        (25) edge[blue, dashed] node {} (26)
        (26) edge[violet] node {} (27)
        (27) edge[violet, dotted] node {} (28)
        (28) edge[violet, dotted] node {} (29)


         (2) edge[bend right=335,blue, dashed]  node {} (9);   

\draw [->,green!30!black, dotted,scale=0.6] (7,12)--++(1,0) node [right,text=black] {A};
\draw [->,blue, dashed,scale=0.6] (7,11.5)--++(1,0) node [right,text=black] {B};
\draw [->,violet,scale=0.6] (7,11)--++(1,0) node [right,text=black] {C};
\draw [->,red, dash dot,scale=0.6] (7,10.5)--++(1,0) node [right,text=black] {D};
    \end{tikzpicture}
    \end{document}

여기에 이미지 설명을 입력하세요

답변1

나는 매트릭스를 사용하여 아래와 같이 노드를 배치하는 것을 좋아합니다.

\documentclass[tikz]{standalone}
\usetikzlibrary{positioning}
\begin{document}
    \begin{tikzpicture}[font=\tiny,>=latex,]
    \tikzset{
        state/.style={circle,draw=black,minimum size=1em,inner sep=0pt},
            % mypic
            pics/mypic/.style={code={
                    \tikzset{mypic/.cd,#1}  
                    \def\pv##1{\pgfkeysvalueof{/tikz/mypic/##1}}%
                    \edef\m{\pv{m}}%
                    \edef\w{\pv{size}}%
                    \foreach \row [count=\j] in \m  {
                        \foreach \x [count=\i] in \row {
                            \node[state] (N-\j-\i)at
                            (\i*\w-\w,-\j*\w+\w)  {\x};
                        }%foreach
                    }%foreach
            }},mypic/.cd,m/.initial={{0}},size/.initial=1,/tikz/.cd,
            %
                    % mypic
            pics/myann/.style={code={
                    \draw [->,green!30!black, dotted,scale=0.6] (0,0) --++(1,0) node [right,text=black] {A};
                    \draw [->,blue, dashed,scale=0.6] (0,-0.5) --++(1,0) node [right,text=black] {B};
                    \draw [->,violet,scale=0.6] (0,-1) --++(1,0) node [right,text=black] {C};
                    \draw [->,red, dash dot,scale=0.6] (0,-1.5) --++(1,0) node [right,text=black] {D};
            }},myann/.cd,/tikz/.cd,
            %
    }
\def\clst{
    {w},
    {18,w,w,w},
    {17,10,7,6},
    {10, 9, 6, 5},
    {8,  8,  5,  4,  w/2},
    {4,  4,  4,  3,  3},
    {2,  2,  2,  2,  2},
    {1,  1,  1,  1,  1}%
}
  \matrix (M) {
    \pic{mypic={m=\clst,size=1cm}};\\
  };
  \foreach \j in {1,...,4} {
    \foreach \i [evaluate=\i as \k using int(\i-1)] in {8,7,...,3} {
        \ifnum\i<5
            \tikzset{linestyle/.style={violet,dotted}}
        \else
        \ifnum\i=5
            \tikzset{linestyle/.style={violet}}
            \else
                \tikzset{linestyle/.style={blue,dashed}}
            \fi
        \fi
            \draw[every loop, line width = 0.12mm] 
            (N-\i-\j) edge[linestyle]  node {} (N-\k-\j);
    }
  }
\draw[every loop, line width = 0.12mm] 
(N-2-1) edge[violet, dashed]  node {} (N-1-1);

\foreach \i in {1,2,...,8}  {
    \draw[->] (N-\i-1.east) to[bend left] ++ (-45:0.5);
}

\matrix[right=0 of N-2-4.north east,anchor=south west] (N) {
    \pic{myann};\\
};
    \end{tikzpicture}
\end{document}

여기에 이미지 설명을 입력하세요

관련 정보