考虑下面的代码。
\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{backgrounds}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13}
\usepgfplotslibrary{fillbetween}
\usetikzlibrary{patterns}
\pgfplotsset{ticks=none}
\newcommand{\newvar}{\pgfmathsetmacro}
\begin{document}
\begin{tikzpicture}[scale=1, transform shape]
\newvar{\num}{5}
\newvar{\val}{\num-1}
\coordinate (A) at (0, 0);
\coordinate (B) at (1, 0);
\coordinate (C) at (0, 1);
\coordinate (D) at (0, 2);
\coordinate (E) at (1, 2);
\tikzset{
square/.pic={
\draw[line width=1mm, pic actions] (0, 0) -- (1, 0) -- (1, 1) -- (0, 1) -- cycle;
}
}
\tikzset{
tile1/.pic={
\foreach \i in {(A), (B), (C), (D), (E)}{
\draw \i pic {square} ;
}
}
}
\begin{scope}[scale=1]
\foreach \i in {0,...,\num}{
\foreach \j in {0,...,\val}{
\path (3*\j+\i, -\j+3*\i) pic {tile1};
}
}
\end{scope}
\end{tikzpicture}
\end{document}
首先我定义了square/.pic
它只是单位正方形的轮廓。
然后我定义了坐标 (A)、(B)、(C)、(D) 和 (E)。这些定义的方式是,如果将单位正方形放置在每个坐标处,则生成的图形为 C 形瓷砖。这是在 中执行的tile1/.pic
。
在代码的末尾,我们可以看到两个 for 循环,它们应该将各种平移放置tile1/.pic
在平面上,以实现镶嵌。
然而,我得到的输出却很少:
PS:请随时提供任何一般的编码建议。
答案1
不能像这样翻译符号坐标,这里也不需要使用这些。(另外我不会使用你的命令\newvar
。它有点意外地起作用了。而且我删除了未使用的包和库。)以下有效。
\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\newcommand{\newvar}{\pgfmathsetmacro}
\begin{document}
\begin{tikzpicture}[scale=1, transform shape]
\pgfmathtruncatemacro{\num}{5}
\pgfmathtruncatemacro{\val}{\num-1}
\tikzset{
square/.pic={
\draw[line width=1mm, pic actions] (0, 0) -- (1, 0) -- (1, 1) -- (0, 1) -- cycle;
}
}
\tikzset{
tile1/.pic={
\foreach \i in {(0, 0),(1, 0),(0, 1),(0, 2),(1, 2)}{
\draw \i pic {square} ;
}
}
}
\begin{scope}[scale=1]
\foreach \i in {0,...,\num}{
\foreach \j in {0,...,\val}{
\path (3*\j+\i, -\j+3*\i) pic {tile1};
}
}
\end{scope}
\end{tikzpicture}
\end{document}