![画一排空心方块,里面有数字](https://linux22.com/image/332651/%E7%94%BB%E4%B8%80%E6%8E%92%E7%A9%BA%E5%BF%83%E6%96%B9%E5%9D%97%EF%BC%8C%E9%87%8C%E9%9D%A2%E6%9C%89%E6%95%B0%E5%AD%97.png)
我正在尝试画画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}
您所要做的就是改变参数的值,绘图就会进行相应的调整。