PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Eigene Variablen definieren mittels \pstVerb



Leser
03-04-2008, 17:04
Hallo zusammen,

Ich möchte mir in einer pstricks Umgebung zwei Funktionen plotten lasse und dann an bestimmten Punkten Pfeile zwischen den beiden Kurven anzeigen. Dafür verwende ich folgendes:


\newcommand\setValue[2]{%
\pstVerb{/#1 #2 def }
}

\begin{document}
\begin{figure}
\centering
\begin{pspicture}(0,-0.5)(15,7)
\pstVerb{/Func1{x 0.03 mul 20 add 57.29577951308232311 mul sin x 0.1 mul 40 add 57.29577951308232311 mul sin add -1 mul -2 sub} def }
\pstVerb{/Func2{x 5 sub 0.03 mul 20 add 57.29577951308232311 mul sin x 5 sub 0.1 mul 40 add 57.29577951308232311 mul sin add -1 mul -2 sub} def }
%\psgrid
\psset{yunit=1.2,xunit=0.12}
\psaxes[Dx=20,Dy=1]{->}(0,0)(0,0)(100,4.2)
\psplot[plotstyle=curve,linestyle=dotted,linecolor=blue]{0}{100}{Func2}

\psplot[plotstyle=curve,linestyle=dotted,linecolor=magenta]{0}{100}{Func1}
\setValue{x}{20}
\pcline[arrowscale=0.8,linewidth=0.6pt]{<->}(! 20 Func1)(! 20 Func2)\nbput[labelsep=0.1]{\color{black} 20}
\setValue{x}{40}
\pcline[arrowscale=0.8,linewidth=0.6pt]{<->}(! 40 Func1)(! 40 Func2)\nbput[labelsep=0.1]{\color{black} 40}
\setValue{x}{80}
\pcline[arrowscale=0.8,linewidth=0.6pt]{<->}(! 80 Func1)(! 80 Func2)\nbput[labelsep=0.1]{\color{black} 80}
\end{pspicture}
\end{figure}
\end{document}


Soweit funktioniert das auch alles. Das Problem ist nun, dass wenn ich danach


\subsection{Neuer Titel $\varepsilon^2_S(t)$}

verwende, alles nach dem \varepsilon auf einmal viel zu tief (1-2 Zeilen) unter der Überschrift erscheinen (siehe angehängtes Bild). Nehme ich hingegen die Zeilen mit setValue und pcline raus, geht alles. Nur halt die Pfeile nicht :(

Kann mir das einer erklären?
Muss ich das x irgendwie wieder vom Stack löschen?
Gibt es einen Befehl der den Stack sichert und danach wieder herstellt?

voss
03-04-2008, 17:24
Soweit funktioniert das auch alles. Das Problem ist nun, dass wenn ich danach


\subsection{Neuer Titel $\varepsilon^2_S(t)$}

verwende, alles nach dem \varepsilon auf einmal viel zu tief (1-2 Zeilen) unter der Überschrift erscheinen (siehe angehängtes Bild). Nehme ich hingegen die Zeilen mit setValue und pcline raus, geht alles. Nur halt die Pfeile nicht :(

Kann mir das einer erklären?
Muss ich das x irgendwie wieder vom Stack löschen?
Gibt es einen Befehl der den Stack sichert und danach wieder herstellt?

Du musst schoinmal ein komplettes Beispiel angeben, wenn man das kontrollieren
soll. Ich sehe dein Problem nicht. Habe dein Bsp allerdings ein wenig abgeändert.


\listfiles
\documentclass{article}

\usepackage{pst-plot,pst-node,multido}
\SpecialCoor
\pstVerb{/Func1 { x 0.03 mul 20 add RadtoDeg sin x 0.1
mul 40 add RadtoDeg sin add -1 mul -2 sub } def }
\pstVerb{/Func2 { x 5 sub 0.03 mul 20 add RadtoDeg sin x 5
sub 0.1 mul 40 add RadtoDeg sin add -1 mul -2 sub } def }

\begin{document}

\begin{pspicture}(0,-0.5)(15,7)
%\psgrid
\psset{yunit=1.2,xunit=0.12}
\psaxes[Dx=20,Dy=1]{->}(0,0)(100,4.2)
{\psset{plotstyle=curve,linestyle=dotted}
\psplot[linecolor=blue]{0}{100}{Func2}
\psplot[linecolor=magenta]{0}{100}{Func1} }
\psset{arrowscale=0.8,linewidth=0.6pt,arrows=<->,labelsep=0.1}
\multido{\iA=20+20}{4}{%
\pcline(! /x \iA\space def x Func1)(!x Func2)\nbput{\iA}}
\end{pspicture}

\subsection{Neuer Titel $\varepsilon^2_S(t)$}
foo

\end{document}

Herbert

Leser
03-04-2008, 19:14
1000 Dank, so geht es. Ich hatte es zunächst auch mit einem mutlido versucht, es aber nicht hinbekommen.

Wo ist der Unterschied zwischen deiner Variante

\pcline(! /x \iA\space def x Func1)(!x Func2)\nbput{\iA}}
und meiner?

\setValue{x}{20}
\pcline[arrowscale=0.8,linewidth=0.6pt]{<->}(! 20 Func1)(! 20 Func2)\nbput[labelsep=0.1]{20}

beides mal wird x auf den Stack gelegt und die Funktion berechnet? Nur das bei meiner Variante es hinterher in der Formel ein Problem gibt.

voss
03-04-2008, 19:39
1000 Dank, so geht es. Ich hatte es zunächst auch mit einem mutlido versucht, es aber nicht hinbekommen.

Wo ist der Unterschied zwischen deiner Variante

\pcline(! /x \iA\space def x Func1)(!x Func2)\nbput{\iA}}
und meiner?

\setValue{x}{20}
\pcline[arrowscale=0.8,linewidth=0.6pt]{<->}(! 20 Func1)(! 20 Func2)\nbput[labelsep=0.1]{20}

beides mal wird x auf den Stack gelegt und die Funktion berechnet? Nur das bei meiner Variante es hinterher in der Formel ein Problem gibt.

\pstVerb wirkt global für eine Seite, kann also auch andere Definitionen
durcheinanderbringen, die /x definieren. Alle PSTricks-Funktionen
arbeiten dagegen lokal, d.h. diese Definitionen können andere nicht
überschreiben.

Herbert