Увеличение толщины границ в квадратной сетке

Увеличение толщины границ в квадратной сетке

Вот код диаграммы, которую я только что сгенерировал:

\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 на 9 белыми и черными квадратами. Теперь, разбив эту доску на 9 квадратов 3 на 3, я задаюсь вопросом, есть ли способ создать отличительные толстые границы вокруг границ каждого квадрата 3 на 3 в блоке? То есть, я хочу, чтобы границы каждого квадрата 3 на 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(если x, то y, иначе 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}

Связанный контент