考虑这个例子:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}
\fill [orange] (0.1,0.1) rectangle (12,8);
\node[text opacity = 0] (1) at (4,8) {C3};
\node (2) [below left of = 1] {B2};
\node (3) at (4,2) {C3};
\node (4) [below right of = 1] {D4};
% connect the dots
\path[->,>=stealth]
(1) edge [bend right=20] (2)
(2) edge [bend right=20] (3)
(3) edge [bend right=20] (4)
(4) edge [bend right=20] (1);
\draw[->,>=stealth](5,2) -- (5,4);
\draw[->,>=stealth](3,4) -- (3,2);
\end{tikzpicture}
\end{document}
我有一些问题:
首先,为什么当我指定 C3、B2 和 D4 的位置时,它们不会自动移动,即我希望 B2 和 D4 移动到节点 (1) 和 (4) 的中间?我该如何解决这个问题?我知道我可以简单地为它们全部指定“下方”,但这会使图表太小,所以我希望指定顶部和底部坐标,然后使用“底部”来完成其余操作,但这显然行不通。
其次,我怎样才能改变图表,使得图表底部的两个箭头融入主循环,即显示箭头是从主过程出来还是进入主过程?
答案1
您没有positioning
充分利用该库。语法是below left = of 1
。已弃用。此外,您可以通过随意调整距离来below left of = 1
控制距离。您必须加载库。below left = 2cm and 2cm of 1
positioning
完整代码:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{arrows,positioning,intersections}
\begin{document}
\begin{tikzpicture}
\fill [orange] (0.1,0.1) rectangle (12,8);
\node[text opacity = 0] (1) at (4,8) {C3};
\node (2) [below left = 2cm and 2cm of 1] {B2};
\node (3) [below right = 2cm and 2cm of 2] {C3};
\node (4) [below right = 2cm and 2cm of 1] {D4};
% connect the dots
\path[->,>=stealth]
(1) edge [bend right=20] (2)
(2) edge [bend right=20] node[pos=.8,inner sep=0pt,outer sep=0pt] (A) {} (3)
(3) edge [bend right=20] node[pos=.2,inner sep=0pt,outer sep=0pt] (B) {} (4)
(4) edge [bend right=20] (1);
\draw[->,>=stealth](B) to [out=30,in=180] +(2,.5);
\draw[<-,>=stealth](A) to [out=150,in=0] +(-2,.5);
\end{tikzpicture}
\end{document}
这里节点的位置1
是绝对固定的,而其他所有节点都是相对于它的位置。您可以根据需要随意调整距离。其中一种调整是
\draw[<-,>=stealth](B) to [out=220,in=90] +(-1.5,-2);
\draw[->,>=stealth](A) to [out=310,in=90] +(1.5,-2);
所有[bend right=40]
。