![在 tikzpicture 中将“矩形分割”嵌套在“矩形分割”中](https://linux22.com/image/458074/%E5%9C%A8%20tikzpicture%20%E4%B8%AD%E5%B0%86%E2%80%9C%E7%9F%A9%E5%BD%A2%E5%88%86%E5%89%B2%E2%80%9D%E5%B5%8C%E5%A5%97%E5%9C%A8%E2%80%9C%E7%9F%A9%E5%BD%A2%E5%88%86%E5%89%B2%E2%80%9D%E4%B8%AD.png)
我创建了一个类似于堆栈的节点。
我使用的代码是:
\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}
输出
它们都给出相同的输出。