以下代码绘制十进制帧来显示加法。输入是两个以不同颜色表示的数字。
\documentclass{article}
\usepackage{tikz}
\newcommand{\tensframeh}[2]{\begin{tikzpicture}
[%
box/.style={rectangle,draw=black, minimum size=10mm},
]%
\foreach \x in {1,...,5}{ \foreach \y [evaluate=\y as \ni using int(5*(\y-1)+\x)] in {1,2}{ \node[box] (\ni) at (\x,\y){};
\ifnum\ni<\numexpr#1+1\relax
\filldraw[green] (\ni.center) circle (8pt);
\else
\ifnum\ni<\numexpr#1+#2+1\relax
\filldraw[blue] (\ni.center) circle (8pt);
\fi
\fi
}
}
\end{tikzpicture}}
\begin{document}
\tensframeh{1}{5}\ \tensframeh{3}{5}\ \tensframeh{2}{1}\ \tensframeh{6}{2}
\end{document}
代码很棒,但是我只需要从上到下填充框架,然后再从左到右填充。有人知道怎么做吗?
编辑以澄清问题:命令的第一个参数应该代表绿色圆圈的数量,第二个参数应该代表所有绿色圆圈定位之后应该出现的蓝色圆圈的数量。
答案1
我可能会先画一个网格,然后将圆圈放入其中。您可以使用数学函数来mod()
放置,例如:
\documentclass{article}
\usepackage{tikz}
\newcommand{\tensframeh}[2][green]{%
\begin{tikzpicture}[
box/.style={rectangle, draw=black, minimum size=10mm},
]
\draw(0,0) grid (5,2);
\foreach \x in {1,...,#2}{
\filldraw[#1] ({ceil(\x/2)-0.5}, {mod(\x,2)+0.5})
circle[radius=8pt];
}
\end{tikzpicture}%
}
\begin{document}
\tensframeh{2}
\tensframeh{3}
\tensframeh[red]{7}
\end{document}
如果您希望上排圆圈为绿色,下排圆圈为蓝色,则可以将上述代码更改如下:
\documentclass{article}
\usepackage{tikz}
\newcommand{\tensframeh}[1]{%
\begin{tikzpicture}[
box/.style={rectangle, draw=black, minimum size=10mm},
]
\draw(0,0) grid (5,2);
\foreach \x in {1,...,#1}{
\pgfmathparse{ifthenelse(mod(\x,2) == 1,"green","blue")}
\filldraw[\pgfmathresult] ({ceil(\x/2)-0.5}, {mod(\x,2)+0.5})
circle[radius=8pt];
}
\end{tikzpicture}%
}
\begin{document}
\tensframeh{2}
\tensframeh{3}
\tensframeh{7}
\end{document}
现在,如果您想定义一个接受两个参数的命令,其中第一个参数代表绿色圆圈的数量,第二个参数代表蓝色圆圈的数量,您可以像这样更改上述代码:
\documentclass{article}
\usepackage{tikz}
\newcommand{\tensframeh}[2]{%
\begin{tikzpicture}[
box/.style={rectangle, draw=black, minimum size=10mm},
]
\draw(0,0) grid (5,2);
\pgfmathparse{#1+#2}
\foreach \x in {1,...,\pgfmathresult}{
\pgfmathparse{ifthenelse(\x <= #1,"green","blue")}
\filldraw[\pgfmathresult] ({ceil(\x/2)-0.5}, {mod(\x,2)+0.5})
circle[radius=8pt];
}
\end{tikzpicture}%
}
\begin{document}
\tensframeh{3}{5}
\tensframeh{3}{6}
\tensframeh{0}{6}
\end{document}