У меня есть этот код
\documentclass[10pt]{article}
\usepackage{tikz}
\usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}[->,>=stealth',auto,node distance=3cm,
thick,main node/.style={circle,draw,font=\sffamily\Large\bfseries}]
\node[main node] (1) {a};
\node[main node] (2) [right of=1] {b};
\node[main node] (3) [right of=2] {c};
\node[main node] (4) [right of=3] {d};
\path[every node/.style={font=\sffamily\small}]
(1) edge node [right] {} (2)
(2) edge node [right] {} (3)
(3) edge node [right] {} (4)
(4) edge node [left] {} (1);
\end{tikzpicture}
\end{document}
который создает этот график:
Моя цель — создать такой график:
Извините за плохой рисунок. Я пробовал разные комбинации (4) edge node [bend left] {} (1);
и (4) edge node [loop left] {} (1);
все без толку.
решение1
Чтобы продемонстрировать другой подход, этот вариант использования — именно то, для чего были созданы ключи bend left
и :bend right
\documentclass[10pt]{article}
\usepackage{tikz}
\usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}[->,>=stealth',auto,node distance=3cm,
thick,main node/.style={circle,draw,font=\sffamily\Large\bfseries}]
\node[main node] (1) {a};
\node[main node] (2) [right of=1] {b};
\node[main node] (3) [right of=2] {c};
\node[main node] (4) [right of=3] {d};
\path[every node/.style={font=\sffamily\small}]
(1) edge node [right] {} (2)
(2) edge node [right] {} (3)
(3) edge node [right] {} (4)
(4) edge[bend right] node [left] {} (1);
\end{tikzpicture}
\end{document}
Эти клавиши также принимают необязательное <angle>
значение для одновременной симметричной установки клавиш in
и out
, поэтому запись
(4) edge[bend right=90] node [left] {} (1);
приведет к
Если требуется асимметричная установка клавиш in
и ,out
решение cfrэто верный путь.
решение2
Один из подходов — использовать \draw
и указывать входящие и исходящие углы. Простое указание имен узлов построит путь относительно центра узла (хотя и не будет рисоваться оттуда). Вы также можете указать якоря узлов. Например, красная линия соединяется (4.north)
с (1.north)
.
\documentclass[10pt]{article}
\usepackage{tikz}
\usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}[->,>=stealth',auto,node distance=3cm,
thick,main node/.style={circle,draw,font=\sffamily\Large\bfseries}]
\node[main node] (1) {a};
\node[main node] (2) [right of=1] {b};
\node[main node] (3) [right of=2] {c};
\node[main node] (4) [right of=3] {d};
\draw [->] (1) -- (2);
\draw [->] (2) -- (3);
\draw [->] (3) -- (4);
\draw [->] (4) to [out=150,in=30] (1);
\draw [->,red] (4.north) to [out=150,in=30] (1.north);
\end{tikzpicture}
\end{document}
решение3
Если вопрос в этом, то есть несколько способов рисовать кривые. Вот один из них:
\documentclass[tikz]{standalone}
\usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}
[
->,
>=stealth',
auto,node distance=3cm,
thick,
main node/.style={circle, draw, font=\sffamily\Large\bfseries}
]
\node[main node] (1) {a};
\node[main node] (2) [right of=1] {b};
\node[main node] (3) [right of=2] {c};
\node[main node] (4) [right of=3] {d};
\path[every node/.style={font=\sffamily\small}]
(1) edge node [right] {} (2)
(2) edge node [right] {} (3)
(3) edge node [right] {} (4);
\draw
(4) [out=150, in=20] to (1);
\end{tikzpicture}
\end{document}
Вот способ сделать его частью оригинала \path
( edge
немного изменив углы):
\path[every node/.style={font=\sffamily\small}]
(1) edge node [right] {} (2)
(2) edge node [right] {} (3)
(3) edge node [right] {} (4)
(4) edge [out=150, in=90] (1);