我无法找出我遗漏了什么。我基本上是想让两行半的方框紧挨在一起,但不知何故 a10 似乎不见了。有人能帮忙吗?提前谢谢!
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[
node distance = 0pt,
square/.style = {draw=blue!60, fill=blue!5, very thick,
minimum height=3em, minimum width=3em, % <---
outer sep=0pt},
square2/.style = {draw=red!60, fill=red!5, very thick,
minimum height=3em, minimum width=3em, % <---
outer sep=0pt},
]
\node[square] (a00) {};
\foreach \i in {0,1}{
\foreach \j in {1,2,3}{
\pgfmathsetmacro\k{\j-1}
\node[square,right=of a\i\k] (a\i\j) {};
}
\pgfmathsetmacro\k{\i+1}
\node[square,below=of a\i0] (a\k0) {};
}
\end{tikzpicture}
\end{document}
答案1
显然\pgfmathsetmacro
返回浮点结果。您需要整数值才能使代码正常工作。改用\pgfmathtruncatemacro
。下面是经过修改的代码,以便不会产生错误。但是,可能存在另一个错误。您写道
我基本上是想让两行半的盒子紧挨在一起
但这会产生两行,每行四个框,第三行只有一个框。这可能是您想要的,但也可能不是。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[
node distance = 0pt,
square/.style = {draw=blue!60, fill=blue!5, very thick,
minimum height=3em, minimum width=3em, % <---
outer sep=0pt},
square2/.style = {draw=red!60, fill=red!5, very thick,
minimum height=3em, minimum width=3em, % <---
outer sep=0pt},
]
\node[square] (a00) {};
\foreach \i in {0,1}{
\foreach \j in {1,2,3}{
\pgfmathtruncatemacro{\k}{\j-1}
\node[square,right=of a\i\k] (a\i\j) {};
%\pgfmathsetmacro\kk{\j-1}
%\node[square,right=of a\i\k] (a\i\j) {\textbackslash kk= \kk, \textbackslash k = \k};
}
\pgfmathtruncatemacro{\k}{\i+1}
\node[square,below=of a\i0] (a\k0) {};
}
\end{tikzpicture}
\end{document}
以上代码产生以下结果:
补充:之前没有抛出错误的原因是,第一行节点的名称中包含浮点数,即 a01.0 或 a1.00 等等。对于 a1.00,编译器感到困惑,因为它期望 a1.00(因为它是在第一次迭代中创建的,其中\node[square,below=of a\i0] (a\k0) {};
是\i
一个整数,而\k
是一个浮点数)。因此,在第二次迭代中,当\i
等于 1,但节点的名称是a1.00
时,编译器抛出了错误。为了支持这一点,这里是上述代码的另一个结果,包括两行注释行,将两个宏的结果写入框中。