我想制作一个矩形,然后将其分割。我的 MWE 如下:
\documentclass[tikz]{standalone}
\usetikzlibrary{shapes.multipart}
\begin{document}
\begin{tikzpicture}[
my shape/.style={
rectangle split
, rectangle split parts=#1
, draw
, anchor=center
}
]
\node [my shape=1, rectangle split horizontal] at (0, 0) (R1A1) {};
\node[above of=R1A1]{Test};
\node [my shape=5, rectangle split horizontal] at (0, 0)
{a \nodepart{two}b \nodepart{three}c \nodepart{four}d \nodepart{five}e};
\end{tikzpicture}
\end{document}
此代码未按预期运行。任何帮助都将不胜感激。谢谢
答案1
这里有一个选项,您可以将其转换为动画 GIF:
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{calc}
\newlength\CellWd
\setlength\CellWd{1.5cm}
\newcommand\DivRec[3]{%
\node<+->[draw,text width=6\CellWd,minimum height=30pt] (#3) {};
\foreach \a/\texto in {#2}
{\draw<+-> let
\p1=(#3.south west),
\p2=( $ (#3.north east) - (#3.north west) $ ),
\n1={veclen(\x2,\y2)/#1}
in (\x1+\a*\n1,0|-#3.north) -- (\x1+\a*\n1,0|-#3.south);
\path let
\p1=(#3.south west),
\p2=( $ (#3.north east) - (#3.north west) $ ),
\n1={veclen(\x2,\y2)/#1}
in node[xshift=-\n1/2] at (\x1+\a*\n1,0|-#3.center) {\texto};
}
}
\begin{document}
\begin{frame}
\centering
\begin{tikzpicture}
\DivRec{6}{1/m,2/z,3/a,4/d,5/l,6/v}{rect}
\end{tikzpicture}
\end{frame}
\end{document}
语法是
\DivRec{<number of divisions>}{<part/text>}{<name of node>}
其中<part/text>
是一个以逗号分隔的形式列表1/text1,2/text2,...
。长度\CellWd
与第一个参数一起\DivRec
控制矩形每个细分的宽度和总宽度(= <number of divisions>*\CellWd
)。
我使用了上面的代码和 ImageMagick
convert -delay 80 -density 300 test.pdf test.gif
生产
答案2
这是一个替代解决方案。
它使用rectangle split
类似于 OP 的代码但避免最初用 绘制分割线rectangle split draw splits=false
。
一旦绘制了节点,每个分割线都会使用迭代命令添加到path picture
节点样式的选项中。
感谢percusse
提供该功能的人,此解决方案得以实现\numname
将数字转换为文本以及marmot
谁写的\GetCurrentNodeName
宏基于Jake 的解决方案是了解当前节点的名称。
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{shapes.multipart}
\newcommand\numname[1]{%
\ifcase#1zero\or one\or two\or
three\or four\or five\or six\or
seven\or eight\or nine\fi%
}
\makeatletter
\newcommand{\GetCurrentNodeName}{\tikz@fig@name}
\makeatother
\tikzset{
my shape/.style={
rectangle split,
rectangle split horizontal,
rectangle split part align=base,
rectangle split parts = #1,
draw,
minimum height=1cm,
text width=1cm,
align=center,
anchor=center,
rectangle split draw splits=false,
path picture={
\foreach \i [count=\ni] in {2,...,#1}
\draw<+-> (\GetCurrentNodeName.\numname{\ni} split north)--
(\GetCurrentNodeName.\numname{\ni} split south);
}
}
}
\begin{document}
\begin{frame}
\centering
\begin{tikzpicture}[
]
\node<+->[my shape=5] (mynode) {
a
\nodepart{two}
b
\nodepart{three}
c
\nodepart{four}
d
\nodepart{five}
e
};
\end{tikzpicture}
\end{frame}
\end{document}