五个图形中的每一个都是使用正方形、一些圆形和某种阴影的组合绘制的。我需要使用单个命令绘制每个图形,以便它们可以贴合并形成一个没有间隙的矩形,例如 7 乘以 11 的矩形。甚至可以用锯齿形代替弧线,这样当它们贴合在一起时就可以形成一个矩形,但这需要高级计算和绘图。
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[scale=.35]
\draw[fill=cyan] (4.,4.) -- (0.,4.) -- (0,0) -- (4,0) -- cycle;
\draw[fill=white, draw=none](3.5,2) circle (.8cm);
\draw[fill=white, draw=none](2,3.5) circle (.8cm);
\draw[fill=cyan] (7,0) -- (11,0) -- (11,4) -- (7,4) -- cycle;
\draw[fill=white, draw=none](10.5,2) circle (.8cm);
\draw[fill=cyan, draw=none](6.5,2) circle (.8cm);
\draw[fill=cyan, draw=none](9,4.5) circle (.8cm);
\draw[fill=cyan] (14,0) -- (18,0) -- (18,4) -- (14,4) -- cycle;
\draw[fill=cyan, draw=none](13.5,2) circle (.8cm);
\draw[fill=cyan, draw=none](18.5,2) circle (.8cm);
\draw[fill=white, draw=none](16,3.5) circle (.8cm);
\draw[fill=cyan] (21,0) -- (25,0) -- (25,4) -- (21,4) -- cycle;
\draw[fill=white, draw=none](24.5,2) circle (.8cm);
\draw[fill=white, draw=none](21.5,2) circle (.8cm);
\draw[fill=white, draw=none](23,.5) circle (.8cm);
\draw[fill=cyan, draw=none](23,4.5) circle (.8cm);
\draw[fill=cyan] (28,0) -- (32,0) -- (32,4) -- (28,4) -- cycle;
\draw[fill=cyan, draw=none](30,4.5) circle (.8cm);
\draw[fill=cyan, draw=none](32.5,2) circle (.8cm);
\draw[fill=white, draw=none](28.5,2) circle (.8cm);
\draw[fill=white, draw=none](30,.5) circle (.8cm);
\node at (2, -1) {\small type 1};
\node at (9, -1) {\small type 2};
\node at (16, -1) {\small type 3};
\node at (23, -1) {\small type 4};
\node at (30, -1) {\small type 5};
\end{tikzpicture}
\end{document}
答案1
我认为这是一个很好的练习机会前列腺素的解析器模块。请参阅手册以了解更多信息。
前景层其实是不必要的。但由于口袋是由白色圆圈绘制的,我必须绘制标签在不同的层上。
剪辑语法shift
和scale
也是不必要的。但这意味着你必须重新编码你的片段。
\documentclass[tikz]{standalone}
\usepgfmodule{parser}
\pgfdeclarelayer{foreground}
\pgfsetlayers{main,foreground}
\pgfparserdef{jigsaw}{all}{the character 1}{\def\jigsawtype{1}}
\pgfparserdef{jigsaw}{all}{the character 2}{\def\jigsawtype{2}}
\pgfparserdef{jigsaw}{all}{the character 3}{\def\jigsawtype{3}}
\pgfparserdef{jigsaw}{all}{the character 4}{\def\jigsawtype{4}}
\pgfparserdef{jigsaw}{all}{the character 5}{\def\jigsawtype{5}}
\pgfparserdef{jigsaw}{all}{the letter A} {\def\jigsawangle{0}}
\pgfparserdef{jigsaw}{all}{the character <}{\def\jigsawangle{90}}
\pgfparserdef{jigsaw}{all}{the letter V} {\def\jigsawangle{180}}
\pgfparserdef{jigsaw}{all}{the character >}{\def\jigsawangle{-90}}
\pgfparserdef{jigsaw}{all}{blank space \space}{}
\pgfparserdef{jigsaw}{all}{the character :}{\jigsawstart}
\pgfparserdef{jigsaw}{all}{the character ,}{\jigsawdrawone}
\pgfparserdef{jigsaw}{all}{the character ;}{\jigsawnewline}
\pgfparserdef{jigsaw}{all}{the character .}{\jigsawend}
\def\jigsawstart{
\path coordinate(line begin)coordinate(curser);
}
\def\jigsawdrawone{
\draw(curser)pic[rotate=\jigsawangle]{jigsaw \jigsawtype};
\path(curser)++(1,0)coordinate(curser);
}
\def\jigsawnewline{
\path(line begin)++(0,-1)coordinate(line begin)coordinate(curser);
}
\def\jigsawend{
\pgfparserswitch{final}
}
\begin{document}
\tikzset{
sq/.style={cyan,draw=white,line width=.05cm},
cl/.style={clip,fill=none},
fc/.style={cyan},
fw/.style={white},
jigsaw 1/.pic={
\tikzset{scale=.25,shift={(-2,-2)}}
\fill[sq](4,4)--(0,4)--(0,0)--(4,0)--cycle;
\fill[cl](4,4)--(0,4)--(0,0)--(4,0)--cycle;
\fill[fw](3.5,2)circle(.9);
\fill[fw](2,3.5)circle(.9);
},
jigsaw 2/.pic={
\tikzset{scale=.25,shift={(-9,-2)}}
\begin{pgfonlayer}{foreground}
\fill[fc](6.5,2)circle(.7);
\fill[fc](9,4.5)circle(.7);
\end{pgfonlayer}
\fill[sq](7,0)--(11,0)--(11,4)--(7,4)--cycle;
\fill[cl](7,0)--(11,0)--(11,4)--(7,4)--cycle;
\fill[fw](10.5,2)circle(.9);
},
jigsaw 3/.pic={
\tikzset{scale=.25,shift={(-16,-2)}}
\begin{pgfonlayer}{foreground}
\fill[fc](13.5,2)circle(.7);
\fill[fc](18.5,2)circle(.7);
\end{pgfonlayer}
\fill[sq](14,0)--(18,0)--(18,4)--(14,4)--cycle;
\fill[cl](14,0)--(18,0)--(18,4)--(14,4)--cycle;
\fill[fw](16,3.5)circle(.9);
},
jigsaw 4/.pic={
\tikzset{scale=.25,shift={(-23,-2)}}
\begin{pgfonlayer}{foreground}
\fill[fc](23,4.5)circle(.7);
\end{pgfonlayer}
\fill[sq](21,0)--(25,0)--(25,4)--(21,4)--cycle;
\fill[cl](21,0)--(25,0)--(25,4)--(21,4)--cycle;
\fill[fw](24.5,2)circle(.9);
\fill[fw](21.5,2)circle(.9);
\fill[fw](23,.5)circle(.9);
},
jigsaw 5/.pic={
\tikzset{scale=.25,shift={(-30,-2)}}
\begin{pgfonlayer}{foreground}
\fill[fc](30,4.5)circle(.7);
\fill[fc](32.5,2)circle(.7);
\end{pgfonlayer}
\fill[sq](28,0)--(32,0)--(32,4)--(28,4)--cycle;
\fill[cl](28,0)--(32,0)--(32,4)--(28,4)--cycle;
\fill[fw](28.5,2)circle(.9);
\fill[fw](30,.5)circle(.9);
}
}
\tikz{
\pgfparserparse{jigsaw}:
1>,3V,2V,2V,2V,2V,2V,2V,2V,1V,;
2>,5A,4>,5>,5>,5>,5>,5>,5>,3<,;
2>,4A,5<,5V,5V,5V,5V,5V,5V,2<,;
2>,5A,4A,5V,5V,5V,5V,5V,5V,2<,;
2>,5A,4A,5V,5V,5V,5V,5V,5V,2<,;
3>,5<,5<,4<,4<,4<,4<,5<,5V,2<,;
1A,2A,2A,2A,2A,2A,2A,2A,3A,1<,.
}
\end{document}