在 TikZ 矩阵中添加圆形边界

在 TikZ 矩阵中添加圆形边界

几乎想出了如何通过拼凑两个答案来绘制我想要的东西(@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}

在此处输入图片描述

相关内容