代码
\begin{tikzpicture}
\draw[step=0.5cm,color=gray] (-1,-1) grid (1,1);
\end{tikzpicture}
给我一个漂亮的有限 4x4 网格。现在我想将一个字符置于每个单元格的中心,该怎么做?
顺便问一下,我如何指定图片的绝对位置以及如何在一个方向上拉伸它(即它变成一个真正的矩形(而不是正方形))。
答案1
您可以使用\node
s 将文本放置在您想要的任何位置。默认情况下,文本以给定的坐标为中心,可以使用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}
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
和(以及和相应地):ystep
text width
minimum 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}