菱形循环 (TikZ)

菱形循环 (TikZ)

如何使从钻石西角到钻石东角的环路看起来像图中这样?

数字

在此处输入图片描述

代码

       \documentclass[border=5mm]{standalone}
       \usepackage{tikz}
       \usetikzlibrary{shapes.geometric}
       \usepackage{amssymb}
       \begin{document}

        \begin{tikzpicture}[->, >=stealth, auto, semithick,
                 node distance=3cm,shorten >=2pt,shorten <=2pt,
                 mynode/.style={fill=white,draw,
                 diamond,thick,inner sep=5pt}]
        \node[mynode] (A) {$1$};
        \node[mynode] (B)[right of=A]  {$2$};
        \node[mynode] (C)[right of=B]  {$3$};
        \node[mynode] (D)[right of=C]  {$4$};

        \path[black](A.east) edge[bend left] node{S} (B.west)
                    (B.west) edge[bend left] node{U} (A.east)
                    (B.east) edge node{E} (C.west) 
                    (C.east) edge node{S} (D.west)
                    (B) edge[loop above] node{P} (B)
                    (B) edge[loop below] node{C} (B)
                    (C) edge[loop above] node{N} (C);
       \end{tikzpicture}
       \end{document}

输出

在此处输入图片描述

答案1

这是一种方法,使用三个单独的\draws。

输出

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\usepackage{amssymb}
\begin{document}

\begin{tikzpicture}[->, >=stealth, auto, semithick,
          node distance=3cm,shorten >=2pt,shorten <=2pt,
          mynode/.style={fill=white,draw,
          diamond,thick,inner sep=5pt}]
 \node[mynode] (A) {$1$};
 \node[mynode] (B)[right of=A]  {$2$};
 \node[mynode] (C)[right of=B]  {$3$};
 \node[mynode] (D)[right of=C]  {$4$};

 \path[black](A.east) edge[bend left] node{S} (B.west)
             (B.west) edge[bend left] node{U} (A.east)
             (B.east) edge node{E} (C.west) 
             (C.east) edge node{S} (D.west);
 \draw       (B.west) to[out=110,in=70,looseness=3] node{P} (B.east);
 \draw       (B.west) to[out=-110,in=-70,looseness=3] node[swap]{C} (B.east);
 \draw       (C.west) to[out=110,in=70,looseness=3] node{N} (C.east);
\end{tikzpicture}
\end{document}

答案2

另一种方法是使用库arrows.metabendingquotesarc不是loop

\documentclass[tikz, border=5mm]{standalone}
\usetikzlibrary{arrows.meta, bending, quotes, shapes.geometric}

\begin{document}
    \begin{tikzpicture}[-{Stealth[bend]}, auto, semithick,
     node distance=3cm,
     shorten >=2pt, shorten <=2pt,
     mynode/.style={diamond,draw, thick, minimum size=8mm, inner sep=0pt}
                       ]
\node[mynode] (A) {$1$};
\node[mynode] (B)[right of=A]  {$2$};
\node[mynode] (C)[right of=B]  {$3$};
\node[mynode] (D)[right of=C]  {$4$};

\path[black](A.east) edge[bend left, "S"]   (B.west)
            (B.west) edge[bend left, "U"]   (A.east)
            (B.east) edge["E"]              (C.west)
            (C.east) edge["S"]              (D.west);
\draw       ([yshift= 2pt] B.west) arc (235:-55:0.7) node[midway,below] {P};
\draw       ([yshift=-2pt] B.west) arc (-235:55:0.7) node[midway,above] {C};
\draw       (C.west) arc (235:-55:0.7) node[midway,below] {N};
    \end{tikzpicture}
\end{document}

在此处输入图片描述

在确定arc半径时end angle考虑了以下关系:

在此处输入图片描述

arcP分别C垂直移动 2pt,以使它们不与节点 1 和 2 之间的弯线重叠。

相关内容