我如何创建这些框线?

我如何创建这些框线?

我无法找出我遗漏了什么。我基本上是想让两行半的方框紧挨在一起,但不知何故 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时,编译器抛出了错误。为了支持这一点,这里是上述代码的另一个结果,包括两行注释行,将两个宏的结果写入框中。

浮点数与整数值。

相关内容