Как сделать петлю от западного угла ромба до восточного угла ромба, как на рисунке?
Фигура
Код
\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
Вот один из методов, использующий три отдельных \draw
s.
\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.meta
, bending
и quotes
и arc
вместо 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
учитывались следующие соотношения:
arc
с P
и C
смещены по вертикали соответственно на 2 точки, чтобы они не перекрывались с линиями сгиба между узлами 1 и 2.