TikZ(有限)网格,每个单元格都有字符

TikZ(有限)网格,每个单元格都有字符

代码

\begin{tikzpicture}
\draw[step=0.5cm,color=gray] (-1,-1) grid (1,1);
\end{tikzpicture}

给我一个漂亮的有限 4x4 网格。现在我想将一个字符置于每个单元格的中心,该怎么做?

顺便问一下,我如何指定图片的绝对位置以及如何在一个方向上拉伸它(即它变成一个真正的矩形(而不是正方形))。

答案1

您可以使用\nodes 将文本放置在您想要的任何位置。默认情况下,文本以给定的坐标为中心,可以使用anchor和其他选项进行更改。

\documentclass{article}

\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
\draw[step=0.5cm,color=gray] (-1,-1) grid (1,1);
\node at (-0.75,+0.75) {A};
\node at (-0.25,+0.75) {B};
\node at (+0.25,+0.75) {C};
\node at (+0.75,+0.75) {D};
\node at (-0.75,+0.25) {E};
\node at (-0.25,+0.25) {F};
\node at (+0.25,+0.25) {G};
\node at (+0.75,+0.25) {H};
% ...
\node at (+0.75,-0.75) {Q};
\end{tikzpicture}
\end{document}

结果


或者使用循环:

\documentclass{standalone}

\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
\draw[step=0.5cm,color=gray] (-1,-1) grid (1,1);

\newcounter{mycount}
\setcounter{mycount}{`A}
\foreach \y in {+0.75,+0.25,-0.25,-0.75}
  \foreach \x in {-0.75,-0.25,0.25,0.75}
    \node at (\x,\y) {\char\value{mycount}\addtocounter{mycount}{1}};
\end{tikzpicture}%

% Or
\begin{tikzpicture}
\draw[step=0.5cm,color=gray] (-1,-1) grid (1,1);
\foreach \x/\y/\m in {+0.75/+0.75/A,-0.75/-0.75/X} % etc
    \node at (\x,\y) {\m};
\end{tikzpicture}%

\end{document}

循环结果 循环结果2


xscale=<number>您可以分别使用和沿 X 或 Y 方向缩放图像yscale=<number>。两者都使用 进行缩放scale=<number>

如果您所说的“绝对位置”是指页面上的固定位置,您可以通过相对于特殊current page节点绘制它来实现(需要remember picture,overlay图片上的选项)。如果您提供关于此内容的更多具体信息,我可以举一个例子。

答案2

我将使用以下方式放置文本matrix of nodes

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}
\begin{tikzpicture}
\draw[step=0.5cm,color=gray] (-1,-1) grid (1,1);
\matrix[matrix of nodes,nodes={inner sep=0pt,text width=.5cm,align=center,minimum height=.5cm}]{
A & B & C & D \\
E & F &  & H \\
I & J & K & L \\
M & N & O & P\\};
\end{tikzpicture}
\end{document}

矩阵

为了获得矩形节点,您可以分别调整xstep和(以及和相应地):ysteptext widthminimum height

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}
\begin{tikzpicture}
\draw[xstep=0.75cm,ystep=0.5,color=gray] (0,0) grid (3,2);
\matrix[matrix of nodes,
inner sep=0pt,
anchor=south west,
nodes={inner sep=0pt,text width=.75cm,align=center,minimum height=.5cm}
]{
A & B & C & D \\
E & F &  & H \\
I & J & K & L \\
M & N & O & P\\
};
\end{tikzpicture}
\end{document}

矩阵 矩形

答案3

使用grid来自我对“画一棵网格树”的回答,您可以访问网格中方块的中心:

% Code assumes that the grid shape has been added (e.g. in the preamble).
\begin{tikzpicture}
    \node[  draw,
            grid,
            grid lines=3,
            minimum width=2cm,
            minimum height=2cm
         ] (letters) {};
    \node at (letters.center 1 4) {A};
    \node at (letters.center 2 4) {B};
    \node at (letters.center 3 4) {C};
    \node at (letters.center 4 4) {D};
    \node at (letters.center 1 3) {E};
    \node at (letters.center 2 3) {F};
    \node at (letters.center 3 3) {G};
    \node at (letters.center 4 3) {H};
    \node at (letters.center 1 2) {I};
    \node at (letters.center 2 2) {J};
    \node at (letters.center 3 2) {K};
    \node at (letters.center 4 2) {L};
    \node at (letters.center 1 1) {M};
    \node at (letters.center 2 1) {N};
    \node at (letters.center 3 1) {O};
    \node at (letters.center 4 1) {P};
\end{tikzpicture}

结果

答案4

杰克建议将节点放置在矩阵内,并使用另一个命令绘制网格。以下代码建议使用该命令绘制节点的内容和网格matrix。在这种情况下,所有大小相同的节点都用灰色边框绘制,并且列和行之间的距离会调整为覆盖相邻的边框。

\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{matrix}

\begin{document}
\begin{tikzpicture}
\matrix[matrix of nodes,nodes={draw=gray, anchor=center, minimum size=.6cm}, column sep=-\pgflinewidth, row sep=-\pgflinewidth] (A) {
A & B & C & D \\
E & F &  & H \\
I & J & K & L \\
M & N & O & P\\};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容