画一排空心方块,里面有数字

画一排空心方块,里面有数字

我正在尝试画画n空心正方形,里面有数字。目标是用n球和n盒子类型的问题。我可以使用本网站的帮助来绘制圆圈。我使用以下方法绘制圆圈:

\documentclass{article}
\usepackage{tikz}
\newcommand*\circled[1]{\tikz[baseline=(char.base)]{
        \node[shape=circle,draw,inner sep=8pt] (char) {#1};}}
\begin{document}
\circled{1} \circled{2} \circled{3} $\ldots$ \circled{k}
\end{document}

我一直在寻找类似正方形的东西。有什么帮助吗?

编辑:我尝试了 egreg 的评论并放入shape=rectangle。但是我如何绘制打开的框?

答案1

只需写出形状名称即可声明形状,shape=基本形状则无需声明。此外,rectangle是默认形状,因此您也无需声明它。

我们绘制没有任何边框的节点,然后应用一条围绕节点的路径。我添加了minimum size=1cm使它们变成正方形。

输出

在此处输入图片描述

代码

\documentclass{article}
\usepackage{tikz}
\newcommand*\rect[1]{
    \tikz[baseline=(char.base)]{
        \node[inner sep=8pt, minimum size=1cm] (char) {#1};
        \draw (char.north west) -- (char.south west) -| (char.north east);
        }
}
\begin{document}
\rect{1} \rect{2} \rect{3} $\ldots$ \rect{k}
\end{document}

自动化版本

这会产生与上一个代码相同的输出(间距可能略有不同),但它只接受一个参数:循环创建打开框的元素列表。由于设置了异常,因此$\ldots$不会创建任何路径。

\documentclass{article}
\usepackage{tikz}
\newcommand*\rect[1]{
    \tikz[baseline=(char.base)]{
    \foreach \x [count=\xx] in {#1}{
        \def\mdot{$\ldots$}
        \node[inner sep=8pt, minimum size=1cm] (char) at (\xx*1.5, 0) {\x};
        \ifx\x\mdot
        \else
            \draw (char.north west) -- (char.south west) -| (char.north east);
        \fi
        }
    }
}
\begin{document}
\rect{1, 2, 3, $\ldots$, k}
\end{document}

答案2

PSTricks 解决方案:

\documentclass{article}

\usepackage{pstricks}
\usepackage{multido}
\usepackage{xfp}

\def\numberBox(#1,#2)#3{%
  \rput(#1,#2){%
    \psline(\fpeval{-0.5*\width},\height)(\fpeval{-0.5*\width},0)%
           (\fpeval{0.5*\width},0)(\fpeval{0.5*\width},\height)}
  \rput(#1,\fpeval{#2+0.5*\height}){#3}}

% parameters
\def\boxes{3}       % number of boxes before the \cdots
\def\width{1}       % width of each box
\def\height{\width} % height of each box
\def\spacing{0.3}   % distance between boxes

\begin{document}

\begin{pspicture}(\fpeval{(\boxes+2)*\width+\boxes*\spacing},\height)
  \multido{\r = \fpeval{0.5*\width}+\fpeval{\width+\spacing}, \i = 1+1}{\boxes}%
    {\numberBox(\r,0){$\i$}}
  \rput(\fpeval{(\boxes+0.5)*\width+(\boxes-0.5)*\spacing},\fpeval{0.5*\height})%
    {$\cdots$}
  \rput(\fpeval{(\boxes+1.5)*\width+\boxes*\spacing},0)%
    {\numberBox(0,0){$k$}}
\end{pspicture}

\end{document}

输出

您所要做的就是改变参数的值,绘图就会进行相应的调整。

相关内容