我几乎想出了如何通过拼凑两个答案来绘制我想要的东西(@IgnasiTiKZ 对象矩阵以及@alexraaschtikz 矩阵中的 L 形框)。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix, backgrounds}
\begin{document}
\begin{tikzpicture}[
mycell/.style={draw, minimum size=1cm},
dot1/.style={mycell,
append after command={\pgfextra \fill (\tikzlastnode)
circle[radius=10pt]; \endpgfextra}},
dot2/.style={mycell,
append after command={\pgfextra \fill[white] (\tikzlastnode)
circle[radius=10pt]; \endpgfextra}},
dot3/.style={mycell,
append after command={\pgfextra \draw[thick] (\tikzlastnode)
circle[radius=10pt]; \endpgfextra}}, ]
\matrix (m) [matrix of nodes, row sep=-\pgflinewidth, column sep=-\pgflinewidth,
nodes={mycell}, nodes in empty cells]
{
|[dot2]|&&&|[dot1]|&&\\
&&&&&\\
&&&&|[dot1]|&\\
|[dot1]|&&&&&\\
&&&&&\\
&|[dot3]|&&&&\\
};
\begin{scope}[on background layer]
\path [fill=black!10]
(m-1-1.north west) -- (m-2-1.south west)
-- (m-2-2.south east) -- (m-3-2.south east)
-- (m-3-5.south east) -- (m-2-5.north east)
-- (m-2-3.north east) -- (m-1-3.north east)
-- cycle;
\draw (m-1-1.north west) -- (m-2-1.south west)
-- (m-2-2.south east) -- (m-3-2.south east)
-- (m-3-5.south east) -- (m-2-5.north east)
-- (m-2-3.north east) -- (m-1-3.north east)
-- cycle;
\end{scope}
\end{tikzpicture}
\end{document}
创建
我希望 m-1-1 位置的白色圆盘(点 2)具有黑色边界,就像 m-6-2(点 3)中一样。我幼稚地尝试合并\draw
和,但\fill
没有成功。如果我想要的是我拼接的代码的技巧,我愿意接受完全不同的解决方案。
答案1
对于赞成者:请不要赞成这个非常琐碎的答案!
使用\draw[fill=white, thick]
而不是简单的\fill[white]
。
此外,您不需要两次写灰色区域的路径,一次填充,一次绘制,您可以使用独特的命令来完成(我very thick
只添加了它以突出显示)。
正如 percusse 在他的评论中指出的那样,您可以使用垂直路径(|-
)来缩短您的代码,并且正如您自己意识到的那样,dot3
这是没用的,因为您可以dot2
在两种白点情况下使用它。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix, backgrounds}
\begin{document}
\begin{tikzpicture}[
mycell/.style={draw, minimum size=1cm},
dot1/.style={mycell,
append after command={\pgfextra \fill (\tikzlastnode)
circle[radius=10pt]; \endpgfextra}},
dot2/.style={mycell,
append after command={\pgfextra \draw[fill=white, thick] (\tikzlastnode)
circle[radius=10pt]; \endpgfextra}},
]
\matrix (m) [matrix of nodes, row sep=-\pgflinewidth, column sep=-\pgflinewidth,
nodes={mycell}, nodes in empty cells]
{
|[dot2]|&&&|[dot1]|&&\\
&&&&&\\
&&&&|[dot1]|&\\
|[dot1]|&&&&&\\
&&&&&\\
&|[dot2]|&&&&\\
};
\begin{scope}[on background layer]
\draw[fill=black!10, very thick] (m-1-1.north west) |- (m-2-2.south east) |- (m-3-5.south east) |- (m-2-3.north east) |-cycle;
\end{scope}
\end{tikzpicture}
\end{document}