
以下は私が生成した図のコードです。
\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 つは、マトリックス リストを作成し、各セルを黒にするか白にするかを個別に指定することです。確かに、この方法ははるかに直感的で、ボードが大きすぎない限り、比較的実行可能です。2 番目の方法は、モジュラー演算をうまく適用するものであり、理解するには少し時間がかかりますが、主なメリットは、ボード全体に簡単に色を付けることができることです。これは、ボードが大きい場合に有利です。少なくとも、これは私が収集できたことです。
答え1
境界線を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
構文 (if x then y else 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}