使用 tkz 指定循环过程中各个节点的位置

使用 tkz 指定循环过程中各个节点的位置

考虑这个例子:

\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 1positioning

完整代码:

\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]

在此处输入图片描述

相关内容