TikZ:创建具有可变宽度的堆栈

TikZ:创建具有可变宽度的堆栈

我是 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 widthtext 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}

例子

相关内容