我使用以下代码绘制网格,并用某些填充或形状填充某些单元格。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,shapes}
\begin{document}
\tikzset{
pics/square/.default={1.5},
pics/square/.style = {
code = {
\draw[pic actions] (0,0) rectangle (#1,#1);
}}}
\begin{center}
\begin{tikzpicture}
\foreach \x in {1,2,...,5} {
\foreach \y in {1,2,...,5} {
\pic[fill=white] at (\x,\y) {square};
}
}
\node[regular polygon,regular polygon sides=4,draw=black,thick, fill=blue,minimum size=.8cm] at (5.5,4.5) {};
\pic[draw=black,thick,fill=red] at (2,2) {square};
\end{tikzpicture}
\end{center}
\end{document}
当我使用代码时
pics/square/.default={1},
我得到了一个方形网格。
但是当我使用代码时
pics/square/.default={1.5},
为了获得更大的网格尺寸,网格变成了矩形而不是正方形。
如何通过增加默认网格大小来解决此问题,而不增加其比例\tikzpicture
。
答案1
您可以使用grid
-命令绘制网格,然后定义命令来制作正方形。在下面我使用\sqw
来缩放网格中的正方形,这里设置为1.5
。
\documentclass[border=3mm]{standalone}
\usepackage{tikz}
\newcommand\sqw{1}
\newcommand\square[4][1]{\fill[#4] (#2*\sqw,#3*\sqw) rectangle +(#1*\sqw,#1*\sqw);}
\begin{document}
\renewcommand\sqw{1.5}
\begin{tikzpicture}
\draw[step=\sqw] (0,0) grid (5*\sqw, 5*\sqw);
\square{2}{1}{red}
\square[0.6]{1.2}{3.2}{blue}
\end{tikzpicture}
\end{document}
编辑
使用问题中的pic
和node
命令,您可以做或多或少相同的事情。问题中明确指出您不应缩放图片环境,然后其中的所有内容都必须缩放。
\documentclass[border=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,shapes}
\newcommand\sqw{1}
\tikzset{
pics/square/.default={\sqw},
pics/square/.style = {
code = {
\draw[pic actions] (0,0) rectangle (#1,#1);
}}}
\begin{document}
\renewcommand\sqw{1.5}
\begin{tikzpicture}
\draw[step=\sqw] (\sqw,\sqw) grid (6*\sqw, 6*\sqw);
\node[regular polygon,regular polygon sides=4,draw=black,thick, fill=blue,minimum size=.8*\sqw cm] at (5.5*\sqw,4.5*\sqw) {};
\pic[draw=black,thick,fill=red] at (2*\sqw,2*\sqw) {square};
\end{tikzpicture}
\end{document}
答案2
修改你的foreach
循环来匹配你的默认正方形大小。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,shapes}
\begin{document}
\tikzset{
pics/square/.default={1.5},
pics/square/.style = {
code = {
\draw[pic actions] (0,0) rectangle (#1,#1);
}}}
\begin{center}
\begin{tikzpicture}
\foreach \x in {1,2.5,...,7.5} {
\foreach \y in {1,2.5,...,7.5} {
\pic[fill=white] at (\x,\y) {square};
}
}
\node[regular polygon,regular polygon sides=4,draw=black,thick, fill=blue,minimum size=.8cm] at (6.25,6.25) {};
\pic[draw=black,thick,fill=red] at (2.5,2.5) {square};
\end{tikzpicture}
\end{center}
\end{document}