答案1
试试这个代码;
\documentclass[12pt]{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[line width=3pt,rounded corners=3pt]
\draw (1,2) rectangle (4,4);
\draw (1,6) rectangle (4,8);
\draw (1,10) rectangle (4,12);
\draw (7,15) rectangle (10,17);
\draw (12,6) rectangle (15,8);
\draw[-latex] (2.5,12)--(2.5,16)--(7,16);
\draw[-latex] (4,7.5)--(8.5,7.5)--(8.5,15);
\draw[-latex] (4,6.5)--(12,6.5);
\draw[-latex] (4,3.5)--(13.5,3.5)--(13.5,6);
\draw[-latex] (4,2.5)--(16,2.5)--(16,16)--(10,16);
\end{tikzpicture}
\end{document}
输出为:
编辑(针对 Fractal Admirer):为了更好地查看放置线条的位置,请在 tikzpicture 代码中添加以下代码行:
\draw[gray!15,line width=.2pt] (0,0) grid (17,17.5);
\foreach \x in {0,...,17}{%
\node at (\x,0) () {\tiny \bfseries \x};
\node at (0,\x) () {\tiny \bfseries \x};
};
因此你有这个:
完成后您可以删除或注释相同的行。
答案2
尽管 Raffaele Santoro 的回答很棒,并且重现了原始方案。我建议使用nodes
和positioning
库来轻松生成像这样的图形。
有什么区别?Arectangle
只是一条线,而 anode
是一个具有名称的实体,稍后可以引用。这样,您不需要知道链接线的确切坐标,而只需知道节点锚点即可。
Postioning
库定义了一种相对于其他节点放置节点的机制。同样,我们不需要指定精确的坐标,而是指定与另一个节点的距离。
以下是绘制原始方案的替代代码,完全不指定坐标。希望对您有所帮助。
\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{tikzpicture}[
>={latex},
line width=3pt, rounded corners=3pt,
box/.style={draw, minimum width=3cm, minimum height=2cm}]
\node[box] (1) {1};
\node[box, above= 2cm of 1] (2) {2};
\node[box, above= 2cm of 2] (3) {3};
\node[box, above right=3cm and 3cm of 3] (4) {4};
\node[box, right=8cm of 2] (5) {5};
\draw[->] (3)|-(4);
\draw[->] ([yshift=-5mm]2.north east)-|(4);
\draw[->] ([yshift=5mm]2.south east) coordinate(aux)-- (aux-|5.west);
\draw[->] ([yshift=-5mm]1.north east)-|(5);
\draw[->] ([yshift=5mm]1.south east)-|([xshift=5mm]5.east)|-(4.east);
\end{tikzpicture}
\end{document}