增加方格边框的厚度

增加方格边框的厚度

这是我刚刚生成的图表的代码:

\begin{tikzpicture}[fill=black]
\matrix[matrix of nodes, nodes={draw,minimum size=1cm}, nodes in empty cells,column sep=-\pgflinewidth,row sep=-\pgflinewidth](M){
           &          &   |[fill]|   &      &     &   |[fill]|   &          &    &   |[fill]|     \\

           & |[fill]| &              &              &      |[fill]|     &              &     &      |[fill]|  &      \\
  |[fill]| &         &         &        |[fill]|      &         &              &    |[fill]|      &       &      \\
          &          &   |[fill]|   &      &     &   |[fill]|   &          &    &   |[fill]|     \\
           & |[fill]| &              &              &      |[fill]|     &              &     &      |[fill]|  &      \\
     |[fill]| &         &         &        |[fill]|      &         &              &    |[fill]|      &       &      \\
          &          &   |[fill]|   &      &     &   |[fill]|   &          &    &   |[fill]|     \\
           & |[fill]| &              &              &      |[fill]|     &              &     &      |[fill]|  &      \\
 |[fill]| &         &         &        |[fill]|      &         &              &    |[fill]|      &       &      \\         
};
\end{tikzpicture}

基本上,这段代码可以帮助我在 9 x 9 的棋盘上填充白色和黑色的方块。现在,将棋盘分解为 9 个 3 x 3 的方块,我想知道是否有办法在块中的每个 3 x 3 方块的边界周围创建独特的粗边框?也就是说,我希望每个 3 x 3 方块的边界比其他线条更黑。(这是因为我正在尝试证明一个结果,而执行上述操作将有助于我更好地说明我的观点)。

编辑:嗯,根据我收到的回复,显然有几种方法可以做到这一点:一种方法是创建一个矩阵列表,然后单独指定您希望每个单元格是黑色还是白色。事实上,这种方法更加直观,而且只要您的棋盘不是太大,就相对可行。第二种方法涉及模块化算法的巧妙应用,虽然需要一点时间才能理解,但它的主要优点是您可以轻松地用颜色填充整个棋盘,这在您拥有更大的棋盘时非常有利。至少,这是我设法收集到的信息。

答案1

我不知道你是想只绘制一条边框还是全部边框,所以我为两种情况都添加了代码。基本要点是矩阵中的节点有名称,因此您可以使用

\draw[blue,thick] (M-1-1.north west) rectangle (M-3-3.south east);

完整代码:

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix[matrix of nodes, nodes={draw,minimum size=1cm}, nodes in empty cells,column sep=-\pgflinewidth,row sep=-\pgflinewidth](M){
           &          &   |[fill]|   &      &     &   |[fill]|   &          &    &   |[fill]|     \\

           & |[fill]| &              &              &      |[fill]|     &              &     &      |[fill]|  &      \\
  |[fill]| &         &         &        |[fill]|      &         &              &    |[fill]|      &       &      \\
          &          &   |[fill]|   &      &     &   |[fill]|   &          &    &   |[fill]|     \\
           & |[fill]| &              &              &      |[fill]|     &              &     &      |[fill]|  &      \\
     |[fill]| &         &         &        |[fill]|      &         &              &    |[fill]|      &       &      \\
          &          &   |[fill]|   &      &     &   |[fill]|   &          &    &   |[fill]|     \\
           & |[fill]| &              &              &      |[fill]|     &              &     &      |[fill]|  &      \\
 |[fill]| &         &         &        |[fill]|      &         &              &    |[fill]|      &       &      \\         
};
\draw[blue,thick] (M-1-1.north west) rectangle (M-3-3.south east);
\end{tikzpicture}

\begin{tikzpicture}
\matrix[matrix of nodes, nodes={draw,minimum size=1cm}, nodes in empty cells,column sep=-\pgflinewidth,row sep=-\pgflinewidth](M){
           &          &   |[fill]|   &      &     &   |[fill]|   &          &    &   |[fill]|     \\

           & |[fill]| &              &              &      |[fill]|     &              &     &      |[fill]|  &      \\
  |[fill]| &         &         &        |[fill]|      &         &              &    |[fill]|      &       &      \\
          &          &   |[fill]|   &      &     &   |[fill]|   &          &    &   |[fill]|     \\
           & |[fill]| &              &              &      |[fill]|     &              &     &      |[fill]|  &      \\
     |[fill]| &         &         &        |[fill]|      &         &              &    |[fill]|      &       &      \\
          &          &   |[fill]|   &      &     &   |[fill]|   &          &    &   |[fill]|     \\
           & |[fill]| &              &              &      |[fill]|     &              &     &      |[fill]|  &      \\
 |[fill]| &         &         &        |[fill]|      &         &              &    |[fill]|      &       &      \\         
};
\draw[blue,thick] foreach \X in {1,2,3} 
{foreach \Y in {1,2,3}
{(M-\the\numexpr3*\Y-3+1\relax-\the\numexpr3*\X-3+1\relax.north west) rectangle
(M-\the\numexpr3*\Y-3+3\relax-\the\numexpr3*\X-3+3\relax.south east)}};
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

另一种方法是使用语法x ? y : z(if x then y else z)。厚度由 自由控制[line width]。选项[shift={(1,1)}]取决于grid命令的定义。

在此处输入图片描述

\documentclass[tikz,border=5mm]{standalone}
\begin{document}
\begin{tikzpicture}
\def\n{9}
\foreach \i in {1,...,\n} 
\foreach \j in {1,...,\n}
{
\pgfmathparse{mod(\i+\n-\j,3) ? "white" : "black"}
\edef\colour{\pgfmathresult}
\fill[\colour] (\i,\j) rectangle +(1,1);
}
\draw (1,1) grid (\n+1,\n+1);
\draw[magenta,line width=1pt,shift={(1,1)}] (0,0) grid[step=3cm] (\n,\n);
\end{tikzpicture}
\end{document}

相关内容