Seite 1 von 1

Wie ein dynamisches Kommando erstellen?

Verfasst: Mo 19. Apr 2010, 09:28
von Artur
Wie bekommt man sowas in Latex hin:
\newcommand{\produkt}[2]{#1 mal #2 ergibt: #1*#2}
Es soll also das Produkt aus den Parametern ausgegeben werden.

Verfasst: Mo 19. Apr 2010, 10:20
von phi
beispielsweise so:
\newcommand*{\produkt}[2]{#1 mal #2 ergibt: \number\numexpr#1*#2\relax}

Verfasst: Mo 19. Apr 2010, 11:58
von Artur
vielen Dank,
leider löst es mein Problem nicht. Ich wollte Aufgabenblätter erstellen und dann einen Befehl haben mit den ich bequem Linien zeichne, die Linien werden mit dem Paket tikz erstellt.
Hier ein Beispiel:
% Linien, default abstand ist 0.9cm
\newcommand{\liniert}[2][0.9]{\begin{tikzpicture}			
  											\foreach \y in {0,#1,...,#2}
    										\draw[color=gray, text=black] (0 ,\y ) -- (\textwidth,\y )
;\end{tikzpicture}
												}
Im Text kann man dann bequem diese Linien einbauen.
\liniert{4}
Dies würde mir dann fünf linien zeichnen für vier Schreibzeilen. Das Problem ist dass der Standart-Linienabstand 0.9cm ist und der Parameter 2 nicht immer genau 4 Schreibzeilen erzeugen würde.

Mit folgendem Code müsste es gehen, aber anscheindend kann die tikzpicture Umgebung dies nicht verstehen.
% Linien, default abstand ist 0.9cm
\newcommand{\liniert}[2][0.9]{\begin{tikzpicture}			
  											\foreach \y in {0,#1,...,\number\numexpr#1*#2\relax}
    										\draw[color=gray, text=black] (0 ,\y ) -- (\textwidth,\y ); {\y}
;\end{tikzpicture}
											}
So hätte man dann eine gute Fuktion mit der man Schreiblinien erzeugt.

Verfasst: Mo 19. Apr 2010, 12:23
von cliffhanger
Hi Artur,

tikz (bzw. das darunterliegende PGF) hat selbst eine ziemlich mächtige Mathematik-Engine. Die sollte sowas ohne größere Probleme berechnen können.

Siehe PGFmanual Part IV - "Mathematical Engine"

Grüße
Benedikt

Verfasst: Mo 19. Apr 2010, 12:43
von esdd
Hallo,

wie wäre es mit einem lauffähigen Minimalbeispiel? Hier trotzdem ein Vorschlag:
\documentclass{scrartcl}
\usepackage{tikz}
\newcommand{\liniert}[2][0.9]{%
 \begin{tikzpicture}         
  \foreach \n in {0,...,#2}{ %
   \draw[color=gray, text=black] (0 ,#1*\n ) -- (\textwidth,#1*\n );}
 \end{tikzpicture} 
}  
                    
\begin{document}
\liniert{4}
\end{document}
Gruß
Elke

Verfasst: Mo 19. Apr 2010, 13:56
von Artur
Hier mal ein Beispiel: Unter anderem werden auch noch Kästchen erstellt um berechnungen durchzuführen. Vielleicht kann das ja jemand gebrauchen...
% ---------------------------------------------------------------------
% ++++ header
% ---------------------------------------------------------------------
\documentclass[
      parskip=half            
      ]{scrartcl}

\usepackage[a4paper,left=2cm, right=2cm,top=2.5cm,bottom=2.5cm]{geometry}
\usepackage[ngerman]{babel}  
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}      
\usepackage{lmodern}            
\usepackage{graphicx}        
\usepackage{color}
\usepackage{tikz}
% ---------------------------------------------------------------------
% ++++ Umgebungen
% ---------------------------------------------------------------------
\newcommand{\liniert}[2][0.9]{\begin{tikzpicture}         % Linien, default abstand ist 0.9cm
                                   \foreach \y in {0,#1,...,#2}
                                  \draw[color=gray, text=black] (0 ,\y ) -- (\textwidth,\y )
                                    ;\end{tikzpicture}
                                    }
\newcommand{\kariert}[2][0.5]{\begin{tikzpicture}         % Kästchen
                                             \draw[step=#1cm,color=gray] (0 , 0) grid (\textwidth,#2*#1) %Anzahl der Kästchenreihen
                                             ;\end{tikzpicture}
                                             }
% ---------------------------------------------------------------------
% ++++ Dokument
% ---------------------------------------------------------------------
\begin{document}
\section*{Aufgabe 1}
\label{sec:Aufgabe1}
Beantworten Sie folgende Fragen:\\
normaler Linienabstand von 0.9cm:\par
\liniert{4}      
kleiner Linienabstand von 0.3, leider werden keine 4 Linienzeilen erzeugt! (da der Endwert der Schleife kein Produkt ist)\par
\liniert[0.3]{4}  
Berechnen Sie folgende Aufgaben:\\
normale Kästchengröße:\par
\kariert{3}
große Kästchengröße: hier ist die Anzahl der Kästchen äquivalent zum Parameterwert.\par
\kariert[2]{3}
\end{document}
% ---------------------------------------------------------------------
% ++++  EOF
% ---------------------------------------------------------------------
Es ist jetzt nicht unbedingt tragisch dass der Parameter liniert nicht die Anzhal der Schreibzeilen erstellt. Es ging mir bloß um Perfektion... .

Verfasst: Mo 19. Apr 2010, 15:01
von esdd
Hallo,

hier noch mal ein Vorschlag, bei dem Du die Zeilenanzahl wirklich vorgeben kannst. Außerdem habe ich den kariert-Befehl so geändert, dass am rechten Rand keine halben Kästchen entstehen.
\documentclass[parskip=half]{scrartcl} 

\usepackage[ngerman]{babel}   
\usepackage[latin1]{inputenc} 
\usepackage[T1]{fontenc}       
\usepackage{lmodern}             
\usepackage{tikz} 

\newcommand{\liniert}[2][0.9]{%
 \begin{tikzpicture}         
  \clip(0,0)rectangle(\textwidth,-#2*#1);
  \foreach \n in {1,...,#2}{ % 
   \draw[color=gray, text=black](0 ,-#1*\n )--(\textwidth,-#1*\n );} 
 \end{tikzpicture}}

\newcommand{\kariert}[2][0.5]{%
	\pgfmathtruncatemacro\anzahl{\textwidth/#1cm}
	\begin{tikzpicture}          
    \draw[step=#1,color=gray] (0,0) grid (\anzahl*#1,#2*#1); %Anzahl der Kästchenreihen 
  \end{tikzpicture}} 

\begin{document} 
\section*{Aufgabe 1} 
\label{sec:Aufgabe1} 
Beantworten Sie folgende Fragen:\\ 
normaler Linienabstand von 0.9\,cm:

\liniert{4}
       
Auch bei kleinem Linienabstand werden 4 Linien erzeugt!

\liniert[0.3]{4}

Berechnen Sie folgende Aufgaben:\\ 
normale Kästchengröße:

\kariert{5}

große Kästchengröße: hier ist die Anzahl der Kästchen äquivalent zum Parameterwert.

\kariert[2]{2}

\end{document}
Gruß
Elke

Verfasst: Mo 19. Apr 2010, 15:49
von Artur
Wow spitze, es funktioniert perfekt!!!

Tausend Dank!

Verfasst: So 28. Apr 2013, 10:59
von Theresa
Hallo!

hab diesen Thread gerade beim "Stöbern" im Forum gefunden. Wie toll ist das denn? Diese Möglichkeit, Karos zu erzeugen suche ich seit gefühlten Ewigkeiten. Und man kann auch ganz problemlos eigene Breiten einstellen. So super!

Vielen Dank an euch!
werde das gleich als Standardbefehl in alle meine Arbeiten einbinden.

Lieben Gruß, Theresa