
Ich versuche, Zehnerrahmen zu erstellen, um die Addition von Zahlen zu modellieren. Ich fände es toll, wenn die \tensframe{#1}{#2}
grünen Kreise Nr. 1 links beginnen und nach oben wachsen würden, dann die blauen Kreise Nr. 2, die vom Grün aus weitergehen und dann nach oben wachsen. Wenn Nr. 1 oder Nr. 1+Nr. 2 größer als 5 ist, muss es in die zweite Spalte übertragen werden. Weiß jemand, wie man das zum Laufen bringt?
\documentclass{article}
\usepackage{ifthen}
\usepackage{listofitems}
\usepackage{multicol}
\usepackage{tikz}
\usepackage{pgfplots}
\newcommand{\tensframe}[2]{\begin{tikzpicture}
[%
box/.style={rectangle,draw=black, minimum size=10mm},
]%
\foreach \x in {1,2}{
\foreach \y in {1,...,5}
\node[box] at (\x,\y){};
}
\foreach \x in {1,1}{
\foreach \y in {1,...,#1}
\filldraw[green] (\x,\y) circle (8pt);
}
\foreach \x in {1,1}{
\foreach \y in {#1+1,...,5}
\filldraw[blue] (\x,\y) circle (8pt);
}
\foreach \y in {1,...,#2+#1-5}
\filldraw[blue] (2,\y) circle (8pt);
\end{tikzpicture}}
\begin{document}
\tensframe{1}{5}
\vspace{1cm}
\tensframe{3}{5}
\vspace{1cm}
\tensframe{2}{1}
\end{document}
\tensframe{3}{5}
In den Zellen (2,2) und (2,3) fehlen zwei blaue Kreise
\tensframe{2}{1}
ist nicht einmal definiert (ich glaube, weil ich keinen Wertebereich für das foreach ys habe), aber wenn es funktionieren würde, hätte es grüne Zellen in (1,1) und (1,2) und eine blaue Zelle in (1,3) und würde so aussehen:
Weiß jemand, wie das codiert werden könnte? Vielen Dank
Antwort1
Nur eine Schleife. Zuerst wird der Knoten erstellt und benannt, und dieser Name wird verwendet, um ihn mit der entsprechenden Farbe zu füllen.
\documentclass{article}
\usepackage{tikz}
\newcommand{\tensframe}[2]{\begin{tikzpicture}
[%
box/.style={rectangle,draw=black, minimum size=10mm},
]%
\foreach \y in {1,...,5}{
\foreach \x [evaluate=\x as \ni using int(5*(\x-1)+\y)] 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}
\tensframe{1}{5}\ \tensframe{3}{5}\ \tensframe{2}{1}\ \tensframe{6}{2}
\end{document}
Update: Neuer Code zum Lösen von Kommentarfragen
Der folgende Code zeigt einen Vorschlag zur Lösung aktualisierter Fragen durch Kommentare: ein horizontales Schema und deren Positionierung.
In diesem Fall foreach
wurde die Schleife für zwei verschiedene Befehle geändert, einer zeichnet das Raster ( tensh
, tensv
) und ein anderer füllt es ( filltens
). Alle diese Befehle sollten innerhalb eines stehen, tikzpicture
das nicht Teil davon ist.
tens{v|h}
Der Befehl hat einen obligatorischen Parameter, nämlich den Namen des matrix
Knotens. Da das Raster jetzt ein ist node
, kann es zur Positionierung anderer Knoten referenziert oder gefüllt werden. Der optionale Parameter wird zur Positionierung verwendet.
filltens
Der Befehl hat drei obligatorische Parameter: Der erste ist der Name der Matrix, die mit Kreisen gefüllt werden soll, während der zweite und dritte die Anzahl der grünen und blauen Kreise darin angibt.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix, positioning}
\newcommand{\tensh}[2][]{%
\matrix[matrix of nodes, inner sep, nodes in empty cells,
nodes={draw, minimum size=1cm, inner sep=.3333em},
row sep=-\pgflinewidth, column sep=-\pgflinewidth,
ampersand replacement=\&, #1] (#2) {
|(#2-1)| \& |(#2-2)| \& |(#2-3)| \& |(#2-4)| \& |(#2-5)|\\
|(#2-6)| \& |(#2-7)| \& |(#2-8)| \& |(#2-9)| \& |(#2-10)|\\};
}
\newcommand{\tensv}[2][]{%
\matrix[matrix of nodes, inner sep, nodes in empty cells,
nodes={draw, minimum size=1cm, inner sep=.3333em},
row sep=-\pgflinewidth, column sep=-\pgflinewidth,
ampersand replacement=\&, #1] (#2){
|(#2-5)| \& |(#2-10)| \\ |(#2-4)| \& |(#2-9)| \\
|(#2-3)| \& |(#2-8)| \\ |(#2-2)| \& |(#2-7)| \\
|(#2-1)| \& |(#2-6)|\\};
}
\newcommand{\filltens}[3]{%
\foreach \i in {1,...,#2}
\filldraw[green] (#1-\i.center) circle (8pt);
\foreach \i [evaluate=\i as \ni using int(#2+\i)] in {1,...,#3}
\filldraw[blue] (#1-\ni.center) circle (8pt);
}
\begin{document}
\begin{tikzpicture}
\tensh{a}
\tensv[above = 5mm of a.north east, anchor=south east]{b}
\tensh[right = 5mm of b.south east, anchor=south west] {c}
\tensv[right = 5mm of a.north east, anchor=north west]{d}
\filltens{a}{2}{4}
\filltens{b}{5}{3}
\filltens{c}{7}{2}
\filltens{d}{6}{1}
\end{tikzpicture}
\end{document}
Antwort2
BEARBEITEN: Fehlerbehebung
Mit expl3, ich weiß nicht, ob das Sie interessiert
%https://tex.stackexchange.com/questions/661181/creating-newcommand-for-a-tens-frame-grid-using-tikz
\documentclass{article}
\usepackage{tikz}
\ExplSyntaxOn
\NewDocumentCommand{\tensframe}{ m m }
{
\begin{tikzpicture}
[%
box/.style={rectangle,draw=black, minimum~size=10mm},
]%
\foreach \x in {1,2}
{
\foreach \y in {1,...,5}
\node[box] at (\x,\y){};
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\int_step_inline:nn { #1 }
{
\int_compare:nNnTF {##1} < {6}
{
\int_set:Nn \l_tmpa_int { 1 }
\int_set:Nn \l_tmpb_int { ##1 }
}
{
\int_set:Nn \l_tmpa_int { 2 }
\int_set:Nn \l_tmpb_int { \int_eval:n { ##1 - 5 } }
}
\filldraw[green] (\l_tmpa_int,\l_tmpb_int) circle (8pt);
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\int_step_inline:nn { #2 }
{
\int_compare:nNnTF {#1+##1} < {6}
{
\int_set:Nn \l_tmpa_int { 1 }
\int_set:Nn \l_tmpb_int { \int_eval:n { #1+##1 } }
}
{
\int_set:Nn \l_tmpa_int { 2 }
\int_set:Nn \l_tmpb_int { \int_eval:n { #1+##1 - 5 } }
}
\filldraw[blue] (\l_tmpa_int,\l_tmpb_int) circle (8pt);
}
\end{tikzpicture}
}
\ExplSyntaxOff
\begin{document}
\tensframe{1}{5}
\vspace{1cm}
\tensframe{3}{5}
\vspace{1cm}
\tensframe{2}{1}
\vspace{1cm}
\tensframe{6}{4}
\end{document}