PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Variablen in pspicture Umgebung



hypocrissy
25-08-2010, 23:49
Hallo allerseits,
ich würde gern mit Variablen innerhalb einer pspicture Umgebung definieren und verwenden.
Daher kann ich \pstVerb{} schonmal nicht verwenden, da dieser Befehl innerhalb von pspicture ein paar Dinge durcheinander bringt.
Da sich der Wert der Variablen aus Rechnungen ergibt macht, glaube ich, \def oder \newcommand auch keinen Sinn. Ich möchte gerne etwas schreiben wie
myVar:= sin(5). Nur das Ergebniss soll in myVar gespeichert werden, d.h.die Rechnung soll nicht bei jeder Verwendung von myVar erneut durchgeführt werden.
Die einzige Lösung zu, die mir dazu eingefallen ist, ist hässlich:
Speichere die Variable in einem Knoten: \pnode(! 5 sin 0){myVar} und greife dann mittels \psGetNodeCenter{myVar} auf sie zu.
Geht das nicht eleganter?

Danke
Christian

voss
25-08-2010, 23:51
Hallo allerseits,
ich würde gern mit Variablen innerhalb einer pspicture Umgebung definieren und verwenden.
Daher kann ich \pstVerb{} schonmal nicht verwenden, da dieser Befehl innerhalb von pspicture ein paar Dinge durcheinander bringt.
Da sich der Wert der Variablen aus Rechnungen ergibt macht, glaube ich, \def oder \newcommand auch keinen Sinn. Ich möchte gerne etwas schreiben wie
myVar:= sin(5). Nur das Ergebniss soll in myVar gespeichert werden, d.h.die Rechnung soll nicht bei jeder Verwendung von myVar erneut durchgeführt werden.
Die einzige Lösung zu, die mir dazu eingefallen ist, ist hässlich:
Speichere die Variable in einem Knoten: \pnode(! 5 sin 0){myVar} und greife dann mittels \psGetNodeCenter{myVar} auf sie zu.
Geht das nicht eleganter?


\pstVerb bringt nichts durcheinander, wenn du nicht gerade
bestehende Befehle überschreibst!
Zeige an einem Beispiel das Gegenteil.

Herbert

hypocrissy
26-08-2010, 00:21
Hier ein minimalbsp.


\listfiles
\documentclass{article}
\usepackage{pst-math}
\usepackage{pstricks-add}

\begin{document}
\begin{pspicture}(-3.2,-3.5)(3.5,2.6)
\psplot{0}{5}{x SIN}
\pstVerb{/myA 1 def /myB 1 def}
\pstVerb{/myA 1 def /myB 1 def}
\pstVerb{/myA 1 def /myB 1 def}
\pstVerb{/myA 1 def /myB 1 def}
\psplot[linecolor=red]{0}{5}{x SIN}
\end{pspicture}

\end{document}


Je öfter man pstVerb verwendet desto weiter wandert der rote Graph nach rechts.

rstuby
26-08-2010, 08:31
Bei mir läuft dein Beispiel leider nicht, aber versuch mal, die Leerzeichen rauszunehmen:

\pstVerb{/myA 1 def/myB 1 def}%
\pstVerb{/myA 1 def/myB 1 def}%
\pstVerb{/myA 1 def/myB 1 def}%
\pstVerb{/myA 1 def/myB 1 def}%

oder so ähnlich. Bisschen damit rumprobieren.

voss
26-08-2010, 09:03
Hier ein minimalbsp.


\listfiles
\documentclass{article}
\usepackage{pst-math}
\usepackage{pstricks-add}

\begin{document}
\begin{pspicture}(-3.2,-3.5)(3.5,2.6)
\psplot{0}{5}{x SIN}
\pstVerb{/myA 1 def /myB 1 def}%
\pstVerb{/myA 1 def /myB 1 def}%
\pstVerb{/myA 1 def /myB 1 def}%
\pstVerb{/myA 1 def /myB 1 def}%
\psplot[linecolor=red]{0}{5}{x SIN}
\end{pspicture}

\end{document}


Je öfter man pstVerb verwendet desto weiter wandert der rote Graph nach rechts.

logisch, hinten fehlen die %. Nur für grafische PSTricks-Befehle werden
Leerzeichen automatisch beseitigt. Abgesehen davon kannst du hier
auch den PS-Code direkt \psplot mitgeben:


\listfiles
\documentclass{article}
\usepackage{pst-math}
\usepackage{pst-plot}

\begin{document}

\begin{pspicture}(-3.2,-3.5)(3.5,2.6)
\psplot{0}{5}[/myA 1 def /myB 1 def]{x myA mul SIN myB div}
\psplot[linecolor=red]{0}{5}[/myA 2 def /myB 2 def]{x myA mul SIN myB div}
\end{pspicture}

\end{document}

Herbert

hypocrissy
26-08-2010, 10:41
Vielen Dank, so klappt es!
Wie ich auf zu der falschen Annahme gelangt bin:
In diesem (http://www.mrunix.de/forums/showthread.php?t=57728&highlight=\pstVerb) Thema hatten Sie gesagt:


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

Hab gesehen, dass es bei mir nicht klappt, mich dann an diesen Post erinnert und gedacht ich könnte eins und eins zusammen zählen...
Danke nochmal.

Christian

hypocrissy
28-08-2010, 10:53
Ist das eine Problem gelöst tuen sich schon wieder neue auf...
Wenn ich \psGetNodeCenter innerbalb von \pstVerb verwende gibt es die Fehlermeldung: Errror: /undefined in CM
Hierzu einm Bsp.

\documentclass{article}
\usepackage{pstricks-add}
\begin{document}
\pnode(1,1){P}
\pstVerb{/myVar \psGetNodeCenter{P} P.x P.y add def}
\end{document}

Kann man das irgendwie retten oder gibt es eine Alternative?
Vielen Dank
Christian

voss
28-08-2010, 11:10
Ist das eine Problem gelöst tuen sich schon wieder neue auf...

alles andere wäre ja auch langweilig ... :D


Wenn ich \psGetNodeCenter innerbalb von \pstVerb verwende gibt es die Fehlermeldung: Errror: /undefined in CM
Hierzu einm Bsp.

\documentclass{article}
\usepackage{pstricks-add}
\begin{document}
\pnode(1,1){P}
\pstVerb{/myVar \psGetNodeCenter{P} P.x P.y add def}
\end{document}

Kann man das irgendwie retten oder gibt es eine Alternative?


was willst du denn überhaupt erreichen??

\documentclass{article}
\usepackage{pstricks-add}
\begin{document}

\begin{pspicture}[showgrid](2,2)
\pnode(1,1){P}
\pstVerb{ /myVar { \psGetNodeCenter{P} P.x P.y add } def }
\psline(P)(!myVar dup)
\end{pspicture}

\end{document}
/myVar als Prozedur definieren, sonst wird es gleich ausgewertet, was
nicht geht, da noch gar nichts passiert ist.

Herbert

hypocrissy
28-08-2010, 19:56
Genau das hatte ich gebraucht!!!
So macht texen Spaß, dankeschön!