在 tikzpicture 中将“矩形分割”嵌套在“矩形分割”中

在 tikzpicture 中将“矩形分割”嵌套在“矩形分割”中

我创建了一个类似于堆栈的节点。

我使用的代码是:

\documentclass[11pt]{article}

\usepackage{tikz}

\usetikzlibrary{arrows}
\usetikzlibrary{shapes, positioning}

\begin{document}

\begin{tikzpicture}[stack/.style={rectangle split, rectangle split parts=4, draw}]

    \node [stack] (0) {$\:\:\:\:\:\:\:\:\vphantom{B}\:\:\:\:\:\:\:\:$
        \nodepart{two}$\vphantom{B}A$
        \nodepart{three}$\vphantom{B}B$
        \nodepart{four}$\vphantom{B}C$
    };

\end{tikzpicture}

\end{document}

得出:

屈服

现在,我想创建类似这样的东西:

目标

即四个这样的“堆栈”节点嵌套在一个大的“堆栈”节点内。不幸的是,我无法做到这一点。

答案1

您可以使用矩阵作为外部rectangle split

代码

\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{shapes.multipart, matrix, calc}
\tikzset{
  four parters/.code=%
    \newcommand*\mathparts[4]{$##1$
                \nodepart{two}$##2$
              \nodepart{three}$##3$
               \nodepart{four}$##4$}}
\begin{document}
\begin{tikzpicture}[
  stack/.style={
    rectangle split,
    rectangle split parts=4,
    minimum width=1cm,
    draw,
    execute at begin node=\strut}]
\matrix[
  every outer matrix/.append style={inner sep=.5cm},
  nodes=stack,
  matrix of nodes,
  four parters,
  draw,
  row sep=1cm] (m) {
  \mathparts{}{A}{B}{C} \\
  \mathparts{C}{}{A}{B} \\
  \mathparts{B}{C}{}{A} \\
  \mathparts{A}{B}{C}{} \\
}
foreach \row in {1, 2, 3} {
  ({$(m-\row-1.south west)!.5!(m-\pgfinteval{\row+1}-1.north west)$}-|m.west)
  coordinate (@) edge (@-|m.east)
};
\end{tikzpicture}
\end{document}

您还可以只做四个矩阵,每四个节点一个接一个地排列。

代码

\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{chains, positioning, matrix}
\begin{document}
\begin{tikzpicture}[
  stack/.style={
    draw,
    matrix of nodes,
    nodes in empty cells,
    every outer matrix/.append style={inner sep=.5cm},
    execute at begin node=\strut,
    nodes={draw, minimum width=1cm},
  },
  start chain=going below,
  node distance=+-1\pgflinewidth,
  split stack/.style args={#1/#2/#3/#4}{
    node contents={$#1$\\$#2$\\$#3$\\$#4$\\}}
]
\foreach \stack in {/A/B/C, C//A/B, B/C//A, A/B/C/}
\matrix[
  stack,
  on chain,
  name=chain-\tikzchaincount, % chains don't work nicely with matrices
  row sep=+-\pgflinewidth,
  split stack/.expand once=\stack];
\end{tikzpicture}
\end{document}

输出

它们都给出相同的输出。

在此处输入图片描述

相关内容