Wie ein dynamisches Kommando erstellen?

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Artur
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 56
Registriert: Mi 24. Mär 2010, 15:43

Wie ein dynamisches Kommando erstellen?

Beitrag 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.

phi
Moderator
Moderator
Beiträge: 420
Registriert: Fr 6. Feb 2009, 21:28

Beitrag von phi »

beispielsweise so:
\newcommand*{\produkt}[2]{#1 mal #2 ergibt: \number\numexpr#1*#2\relax}

Artur
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 56
Registriert: Mi 24. Mär 2010, 15:43

Beitrag 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.

cliffhanger
Forum-Century
Forum-Century
Beiträge: 137
Registriert: Di 25. Aug 2009, 11:25
Wohnort: Regensburg

Beitrag 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

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag 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

Artur
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 56
Registriert: Mi 24. Mär 2010, 15:43

Beitrag 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... .

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag 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
Zuletzt geändert von esdd am Do 29. Aug 2013, 22:24, insgesamt 1-mal geändert.

Artur
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 56
Registriert: Mi 24. Mär 2010, 15:43

Beitrag von Artur »

Wow spitze, es funktioniert perfekt!!!

Tausend Dank!

Theresa

Beitrag 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

Antworten