% Erzeugt am: 06.03.2005 00:50:20 CET % von Peter Breitfeld auf callista.local % Letzte Bearbeitung: % Time-stamp: <10.7.2006 18:53:48 pst-zusatz.sty> %% pst-zusatz.sty (C) Peter Breitfeld %% Zusätzliche Makros für pstricks %---------------- Zusätze für pstricks --------------------------------- %% Grautöne einstellen: \definecolor{Grau}{gray}{0.6} \definecolor{Hell}{gray}{0.75} \definecolor{SehrHell}{gray}{0.9} %% Gitter hinter die Zeichnung legen: \showgrid \newpsobject{showgrid}{psgrid}{subgridcolor=Hell,gridlabels=8pt,gridcolor=Grau} %% Pi zur Verwendung als Raw-PostScript definieren: \newcommand*{\PI}{3.141593\space} %-------------- Zusätze für pst-plot ----------------------------------- %% Achsenbeschriftungen in pst-plot einstellen: \ifUndefiniertCS{pshlabel}\else \renewcommand*{\pshlabel}[1]{{\footnotesize#1}} \renewcommand*{\psvlabel}[1]{{\footnotesize#1}} \fi %------------- Zusätze für pst-eucl ------------------------------------ \ifUndefiniertCS{pstGeonode}\else %%Zuerst mal immer deutsche rechte Winkel Markierungen: \psset{RightAngleType=german} %% Eigene Key-Value Definitionen zufügen \define@key[psset]{pst-eucl}{ABteil}{\edef\pz@ABteil{#1\space}} \define@key[psset]{pst-eucl}{Winkel}{\edef\pz@Winkel{#1}} \define@key[psset]{pst-eucl}{Abstand}{\edef\pz@Abstand{#1}} \define@key[psset]{pst-eucl}{Markiert}[true]{\edef\pz@Markiert{#1}} \psset{ABteil=0.5,Winkel=45,Abstand=5pt,Markiert=false} \def\pzWahr{true} % für Abfragen %% Für globales Setzen der obigen selbst definierten Parameter % \newcommand*{\pzset}[1]{\setkeys{pstz}{#1}} %% deutscher rechter Winkel für Paket pst-eucl: \pzRechter{A}{B}{C} \newcommand*{\pzRechter}[3]{{% \pstMarkAngle[MarkAngleRadius=0.26,LabelSep=0.15]{#1}{#2}{#3}{$\cdot$}}} %% Vom Knoten A ausgehend einen Punkt P zeichnen, so dass AP den Winkel w %% gegen die Horizontale bekommt und AP die Länge a %% Aufruf: \pzPunktAwa[opts]{A}{w}{a}{P} \newcommand*{\pzPunktAwa}[5][]{{% \psset{#1} \pst@getcoor{#2}\pst@tempa \pstGeonode(!% \pst@tempa /yA exch \pst@number\psyunit div def /xA exch \pst@number\psxunit div def #3 cos #4 mul xA add #3 sin #4 mul yA add ){#5}}} %% Punkt P auf AB mit AP=a bestimmen %% Aufruf: \pzPunktABa[opts]{A}{B}{a}{P} \newcommand*{\pzPunktABa}[5][]{{% \psset{#1} \pst@getcoor{#2}\pst@tempa \pst@getcoor{#3}\pst@tempb \pstGeonode(!% \pst@tempa /yA exch \pst@number\psyunit div def /xA exch \pst@number\psxunit div def \pst@tempb /yB exch \pst@number\psyunit div def /xB exch \pst@number\psxunit div def /Laenge xA xB sub 2 exp yA yB sub 2 exp add sqrt def /Teiler #4 Laenge div def xB xA sub Teiler mul xA add yB yA sub Teiler mul yA add ){#5}}} %% Einen zu AB senkrechten Punkt P durch A bestimmen, der Abstand a von AB %% hat. Der Punkt liegt links von A->B. Ist a negativ, dann liegt er rechts %% Aufruf: \pzLotPunktABa[opts]{A}{B}{a}{P} \newcommand*{\pzLotPunktABa}[5][]{{% \psset{#1} \pst@getcoor{#2}\pst@tempa \pst@getcoor{#3}\pst@tempb \pstGeonode(!% \pst@tempa /yA exch \pst@number\psyunit div def /xA exch \pst@number\psxunit div def \pst@tempb /yB exch \pst@number\psyunit div def /xB exch \pst@number\psxunit div def /Laenge xA xB sub 2 exp yA yB sub 2 exp add sqrt def /Teiler #4 Laenge div def yB yA sub neg Teiler mul xA add xB xA sub Teiler mul yA add ){#5}}} %% Strecke AB parallel verschieben auf Abstand a. Parallele ist links von %% A->B, bei negativem a rechts davon %% Aufruf: \pzParalleleABa[opts]{A}{B}{a}{A'}{B'} \newcommand*{\pzParalleleABa}[6][]{{% \psset{#1} \pzLotPunktABa{#2}{#3}{#4}{#5} \pstTranslation{#2}{#5}{#3}[#6] \ifx\pzMarkiert\pzWahr\pstSegmentMark{#5}{#6}\else\pstLineAB{#5}{#6}\fi}} %% Parallele zu AB durch C (P ist ein weiterer Punkt der Parallele) %% Aufruf: \pzParalleleABC[opts]{A}{B}{C}{P} \newcommand*{\pzParalleleABC}[5][]{{% \psset{#1} \pstTranslation{#2}{#4}{#3}[#5] \ifx\pz@Markiert\pzWahr\pstSegmentMark{#4}{#5}\else\pstLineAB{#4}{#5}\fi}} %% Mittels uput einen Label an die Strecke AB setzen. Default in der Mitte %% zwischen den beiden Punkten (Option Faktor) mit der Orientierung 45° %% (Option Winkel) und mit Abstand 5pt vom Referenzpunkt (Option Abstand) %% Aufruf: \pzLabelAB[par]{A}{B}{txt} \newcommand*{\pzLabelAB}[4][]{{% \psset{#1} \pst@getcoor{#2}\pst@tempa \pst@getcoor{#3}\pst@tempb \uput{\pz@Abstand}[\pz@Winkel](!% \pst@tempa /yA exch \pst@number\psyunit div def /xA exch \pst@number\psxunit div def \pst@tempb /yB exch \pst@number\psyunit div def /xB exch \pst@number\psxunit div def /fakt \pz@ABteil def xB xA sub fakt mul xA add yB yA sub fakt mul yA add ){#4}}} %% An AB in A einen Winkel w anlegen, dessen freier Schenkel die Länge a %% hat. Dabei wird P der Endpunkt des freien Schenkels. %% Aufruf: \pzWinkelABwa[par]{A}{B}{w}{a}{P} \newcommand*{\pzWinkelABwa}[6][]{{% \psset{#1} \pstRotation[PointSymbol=none,PointName=none,RotAngle=#4]{#2}{#3}[pzHilf] \pzPunktABa{#2}{pzHilf}{#5}{#6} \ifx\pz@Markiert\pzWahr\pstSegmentMark{#2}{#6}\else\pstLineAB{#2}{#6}\fi }} %% Inneren Teilpunkt der Strecke AB im Verhältnis t:1 (t bei A) bestimmen %% Aufruf: \pzTeilInnenABt[par]{A}{B}{t}{T} \newcommand*{\pzTeilInnenABt}[5][]{{% \psset{#1} \pst@getcoor{#2}\pst@tempa \pst@getcoor{#3}\pst@tempb \pstGeonode(!% \pst@tempa /yA exch \pst@number\psyunit div def /xA exch \pst@number\psxunit div def \pst@tempb /yB exch \pst@number\psyunit div def /xB exch \pst@number\psxunit div def xB xA sub #4 dup 1 add div mul xA add yB yA sub #4 dup 1 add div mul yA add ){#5}}} %% dasselbe für den äußeren Teilpunkt %% Aufruf: \pzTeilAussenABt[par]{A}{B}{t}{T} \newcommand*{\pzTeilAussenABt}[5][]{{% \psset{#1} \pst@getcoor{#2}\pst@tempa \pst@getcoor{#3}\pst@tempb \pstGeonode(!% \pst@tempa /yA exch \pst@number\psyunit div def /xA exch \pst@number\psxunit div def \pst@tempb /yB exch \pst@number\psyunit div def /xB exch \pst@number\psxunit div def xB xA sub #4 dup 1 sub div mul xA add yB yA sub #4 dup 1 sub div mul yA add ){#5}}} \fi