我是 TikZ 新手,想绘制一个简单的堆栈图。该图应如下所示:
[a] [b] [c] [d] |-|
|j|
[f ] | |
| |
[g ] | |
| |
[h ] |_|
我希望我的 ASCII 艺术作品能被看到。现在我尝试使用类似以下方法:
\begin{tikzpicture}[x=20pt, y=20pt, node distance=1pt,outer sep = 0pt]
\tikzstyle{box}=[rectangle,draw,anchor=north west,text centered]
\tikzstyle{smallbox}=[box,minimum height=20pt,minimum width=40pt,text width=4em]
\tikzstyle{normalbox}=[box,minimum height=20pt,minimum width=80pt,text width=16em]
\tikzstyle{bigbox}=[box,minimum height=40pt,minimum width=80pt,text width=16em]
\node[smallbox,fill=green!20] (a) at (1,1) {a};
\node[smallbox,fill=green!20] (b) [right = of a] {b};
\node[smallbox,fill=green!20] (c) [right = of b] {c};
\node[smallbox,fill=green!20] (d) [right = of c] {d};
\node[normalbox,fill=green!20] (f) [below = of a] {f};
\node[bigbox,fill=green!20] (g) [below = of f] {g};
\node[normalbox,fill=green!20] (h) [below = of g] {h};
\end{tikzpicture}
但是堆栈没有正确对齐,并且j
右侧的垂直堆栈()也出现了问题。
感谢您的帮助。
答案1
- 指定
below
总是将锚点设置为north
,因此您必须指定below of = a
节点 f前指定锚点。否则,您的锚点规范将被覆盖。 - f 的锚点
north west
应该在 下方a.south west
,而不是 下方a.south
(这是默认设置)。 - 在节点大小计算中,您忘记了
text width
不包括inner sep
,默认情况下为 0.3333em(因此每个框额外有 0.6666em 加上节点之间距离的 3 倍,我们必须减去大框的内部 sep)。 - 同时指定
minimum width
和text width
是多余的,特别是当文本宽度较大时。 - 定位 j 节点的工作方式类似。
完整代码如下:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[x=20pt, y=20pt, node distance=1pt,outer sep = 0pt]
\tikzstyle{box}=[rectangle,draw,anchor=north west,text centered, fill=green!20, inner sep=0.3333em]
\tikzstyle{smallbox}=[box,minimum height=20pt,text width=4em]
\tikzstyle{normalbox}=[box,minimum height=20pt,text width={16em + 3*0.6666em + 3pt}]
\tikzstyle{bigbox}=[normalbox,minimum height=40pt]
\node[smallbox] (a) at (1,1) {a};
\node[smallbox] (b) [right = of a] {b};
\node[smallbox] (c) [right = of b] {c};
\node[smallbox] (d) [right = of c] {d};
\node[below = of a.south west, normalbox] (f) {f};
\node[bigbox] (g) [below = of f] {g};
\node[normalbox] (h) [below = of g] {h};
\node[box, right = of d.north east, anchor=north west,text width=4em, minimum height=103pt] (j) {j};
\end{tikzpicture}
\end{document}