MC3330
28-12-2019, 09:10
Hallo,
ich habe mir für Ticks verschiedene Befehle mit NewDocumentCommand erstellt. Dabei reize ich teilweise die 9 möglichen Optionen aus, wobei die meisten Parameter einen Defaultwert haben. Das ist dann häufig etwas sperrig, wenn ich alle Parameter in der Standardeinstellung lassen möchte und nur beim 8. oder 9. etwas ändern will.
Innerhalb von TIKZ gibt es bei der Umgebung "scope" die Möglichkeit Parameter gezielt anzusprechen. Indem man zum Beispiel schreibt "\begin{scope}[yshift=1cm]"
Ist es irgendwie möglich, sowas bei NewDocumentCommand zu realisieren?
Ich habe mal ein MB zum Verständnis gemacht.
Ich würde es gerne hinbekommen, dass ich statt
"\msbzehner[0][1]"
sowas wie
"\msbzehner[laenge=1]", "\msbzehner[xshift=1]" oder "\msbzehner[laenge=1, xshift = 2]"
schreiben kann.
\documentclass{article}
\usepackage{xparse}
\usepackage{tikz}
\usetikzlibrary{math}
%%Zehner Dienes Material
%1: xshift 2: laenge
\NewDocumentCommand{\msbzehner}{ O{0} O{0.15}}{
\def \scale {#2}
\tikzmath{
\cos = cos(45)*\scale/2;
\lwmsb = 0.15 + (#2-0.25)*0.1;
\zehn = #2*10;
}
\begin{scope}[xshift=#1cm]
\fill[fill=gray!50](0,0)--(\scale,0)--(\scale,\zehn)--(0,\zehn)--cycle;
\fill[fill=gray!50](\scale,0)--(\scale+\cos,\cos)--(\scale+\cos,\zehn+\cos)--(\scale,\zehn)--cycle;
\fill[fill=gray!50](0,\zehn)--(\scale,\zehn)--(\scale+\cos,\zehn+\cos)--(\cos,\zehn+\cos)--cycle;
\draw[line width = \lwmsb mm](0,0)--(\scale,0)--(\scale+\cos,\cos)--(\scale+\cos,\zehn+\cos)--(\cos,\zehn+\cos)--(0,\zehn)--cycle;
\draw[line width = \lwmsb mm](0,\zehn)--(\scale,\zehn)--(\scale+\cos,\zehn+\cos)--(\scale,\zehn)--(\scale,0);
\foreach \n in {1,...,9} {
\tikzmath{\step = #2*\n;}
\draw[line width = \lwmsb mm](0,\step)--(\scale,\step)--(\scale+\cos,\step+\cos);
}
\end{scope}
}
\begin{document}
\begin{tikzpicture}
\msbzehner[0][0.15]
\msbzehner[3][0.3]
\msbzehner[6][0.6]
\msbzehner[9][1]
\end{tikzpicture}
\end{document}
ich habe mir für Ticks verschiedene Befehle mit NewDocumentCommand erstellt. Dabei reize ich teilweise die 9 möglichen Optionen aus, wobei die meisten Parameter einen Defaultwert haben. Das ist dann häufig etwas sperrig, wenn ich alle Parameter in der Standardeinstellung lassen möchte und nur beim 8. oder 9. etwas ändern will.
Innerhalb von TIKZ gibt es bei der Umgebung "scope" die Möglichkeit Parameter gezielt anzusprechen. Indem man zum Beispiel schreibt "\begin{scope}[yshift=1cm]"
Ist es irgendwie möglich, sowas bei NewDocumentCommand zu realisieren?
Ich habe mal ein MB zum Verständnis gemacht.
Ich würde es gerne hinbekommen, dass ich statt
"\msbzehner[0][1]"
sowas wie
"\msbzehner[laenge=1]", "\msbzehner[xshift=1]" oder "\msbzehner[laenge=1, xshift = 2]"
schreiben kann.
\documentclass{article}
\usepackage{xparse}
\usepackage{tikz}
\usetikzlibrary{math}
%%Zehner Dienes Material
%1: xshift 2: laenge
\NewDocumentCommand{\msbzehner}{ O{0} O{0.15}}{
\def \scale {#2}
\tikzmath{
\cos = cos(45)*\scale/2;
\lwmsb = 0.15 + (#2-0.25)*0.1;
\zehn = #2*10;
}
\begin{scope}[xshift=#1cm]
\fill[fill=gray!50](0,0)--(\scale,0)--(\scale,\zehn)--(0,\zehn)--cycle;
\fill[fill=gray!50](\scale,0)--(\scale+\cos,\cos)--(\scale+\cos,\zehn+\cos)--(\scale,\zehn)--cycle;
\fill[fill=gray!50](0,\zehn)--(\scale,\zehn)--(\scale+\cos,\zehn+\cos)--(\cos,\zehn+\cos)--cycle;
\draw[line width = \lwmsb mm](0,0)--(\scale,0)--(\scale+\cos,\cos)--(\scale+\cos,\zehn+\cos)--(\cos,\zehn+\cos)--(0,\zehn)--cycle;
\draw[line width = \lwmsb mm](0,\zehn)--(\scale,\zehn)--(\scale+\cos,\zehn+\cos)--(\scale,\zehn)--(\scale,0);
\foreach \n in {1,...,9} {
\tikzmath{\step = #2*\n;}
\draw[line width = \lwmsb mm](0,\step)--(\scale,\step)--(\scale+\cos,\step+\cos);
}
\end{scope}
}
\begin{document}
\begin{tikzpicture}
\msbzehner[0][0.15]
\msbzehner[3][0.3]
\msbzehner[6][0.6]
\msbzehner[9][1]
\end{tikzpicture}
\end{document}