Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Parameter bei NewDocumentCommand gezielt ansteuern

  1. #1
    Registrierter Benutzer
    Registriert seit
    12.11.2008
    Beiträge
    219

    Parameter bei NewDocumentCommand gezielt ansteuern

    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.



    Code:
    \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}

  2. #2
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.859
    Das geht sogar mit \newcommand -- z.B. mit dem pgfkeys-Paket, das von tikz bereits geladen wird.
    Code:
    \documentclass{article}
    \usepackage{tikz}
    \usetikzlibrary{math}
    
    %%Zehner Dienes Material
    \pgfkeys{/SWIZZ/side color/.initial=gray!50,
      /SWIZZ/top color/.initial=gray!50,
      /SWIZZ/front color/.initial=gray!50,
      /SWIZZ/xshift/.initial=0,
      /SWIZZ/magnification/.initial=0.15}
    
      \newcommand*\msbzehner[1][xshift=0,magnification=0.15]{%
      \pgfkeys{/SWIZZ/.cd,#1}
      \pgfkeysgetvalue{/SWIZZ/magnification}{\scale}
      \tikzmath{
        \cos = cos(45)*\scale/2;
        \lwmsb = 0.15 + (\scale-0.25)*0.1;
        \zehn = \scale*10;
      }
      \begin{scope}[xshift=\pgfkeysvalueof{/SWIZZ/xshift}cm]
        \fill[fill=\pgfkeysvalueof{/SWIZZ/front color}](0,0)--(\scale,0)--(\scale,\zehn)--(0,\zehn)--cycle;
        \fill[fill=\pgfkeysvalueof{/SWIZZ/side color}](\scale,0)--(\scale+\cos,\cos)--(\scale+\cos,\zehn+\cos)--(\scale,\zehn)--cycle;
        \fill[fill=\pgfkeysvalueof{/SWIZZ/top color}](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 = \scale*\n;}
          \draw[line width = \lwmsb mm](0,\step)--(\scale,\step)--(\scale+\cos,\step+\cos);
        }
      \end{scope}
    }
    
    \begin{document}
    \begin{tikzpicture}
      \msbzehner
    
      \msbzehner[xshift=3,magnification=0.3]
    
      \msbzehner[xshift=6,magnification=0.6]
    
      \msbzehner[xshift=9,magnification=1, front color=blue!30, top color=red!20, side color=blue!50]
    
    \end{tikzpicture}
    \end{document}
    Die Beschreibung zum pgfkeys-Paket findest Du in der pgf/tikz-Doku unter "Key Management".

    Guten Rutsch
    Rainer
    There's nothing a good whack with a hammer won't fix!

  3. #3
    Registrierter Benutzer
    Registriert seit
    12.11.2008
    Beiträge
    219
    Großartig, herzlichen Dank. Ich wünsche ebenfalls einen guten Rutsch.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •