PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : pstricks inline postscript



nameac
17-08-2010, 21:08
Hallo Setzergemeinde,

ausgehend von folgendem Mbsp.


\documentclass[a4paper,fleqn]{scrartcl}
\usepackage{pst-eps}
\usepackage{pst-plot}
\pagestyle{empty}
\begin{document}
\begin{TeXtoEPS}
\begin{pspicture}(-6,-6)(6,6)
\psgrid(0,0)(-5,-5)(5,5)

\pstverb{
/linie{
72 2.54 div dup scale
0.1 setlinewidth
newpath
1 1 moveto
x y rlineto} def
/x 1 def
/y 4 def
linie
stroke
%showpage
}
}
\end{pspicture}
\end{TeXtoEPS}
\end{document}

möchte ich die Funktion /linie gerne so nutzen, dass diese separat definiert wird und in der pspicture-Umgebung durch irgendeine Form aufgerufen werden kann, beim Aufruf soll es möglich sein die beiden Parameter x,y zu übergeben.

voss
18-08-2010, 07:55
möchte ich die Funktion /linie gerne so nutzen, dass diese separat definiert wird und in der pspicture-Umgebung durch irgendeine Form aufgerufen werden kann, beim Aufruf soll es möglich sein die beiden Parameter x,y zu übergeben.

Wenn du auch Parameter nutzen willst:

\documentclass[a4paper,fleqn]{scrartcl}
\usepackage{pstricks}
\pagestyle{empty}
\SpecialCoor
\makeatletter
\def\linie{\pst@object{linie}}
\def\linie@i(#1,#2){%
\begingroup%
\pst@killglue%
\use@par%
\psline[linewidth=1mm](1,1)(!1 #1 add 1 #2 add)%
\endgroup\ignorespaces}
\begin{document}

\begin{pspicture}[showgrid](-6,-6)(6,6)
\linie(1,4)
\linie[linecolor=blue](1,-4)
\end{pspicture}

\end{document}

Für pst-eps solltest du lieber
\usepackage[pdf]{pstricks} benutzen und dann

pdflatex -shell-escape datei
verwenden.

Herbert

nameac
18-08-2010, 13:18
Wenn du auch Parameter nutzen willst:

\documentclass[a4paper,fleqn]{scrartcl}
\usepackage{pstricks}
\pagestyle{empty}
\SpecialCoor
\makeatletter
\def\linie{\pst@object{linie}}
\def\linie@i(#1,#2){%
\begingroup%
\pst@killglue%
\use@par%
\psline[linewidth=1mm](1,1)(!1 #1 add 1 #2 add)%
\endgroup\ignorespaces}
\begin{document}

\begin{pspicture}[showgrid](-6,-6)(6,6)
\linie(1,4)
\linie[linecolor=blue](1,-4)
\end{pspicture}

\end{document}

Hallo Herbert, ich glaube da habe ich mich falsch ausgedrückt bzw. erkenne ich noch nicht wie ich die Lösung allgemein anwenden kann. Eigentlich wollte ich fragen, wenn ich eine beliebige ps-Funktion schreibe z.B. wie die /linie wie könnte man die in dem Prinzip umsetzen wie du das konkrete Bsp. umgestzt hast? Damit meine ich etwas in der Art:


\documentclass[a4paper,fleqn]{scrartcl}
\usepackage{pstricks}
\pagestyle{empty}
\SpecialCoor
\makeatletter
\def\linie{\pst@object{linie}}
\def\linie@i(#1,#2){%
\pstverb{
/x #1 def
/y #4 def
newpath
1 1 moveto
x y rlineto
}
\endgroup\ignorespaces}
\begin{document}

\begin{pspicture}[showgrid](-6,-6)(6,6)
\linie(1,4)
\linie[linecolor=blue](1,-4)
\end{pspicture}

\end{document}



Für pst-eps solltest du lieber
\usepackage[pdf]{pstricks} benutzen und dann

pdflatex -shell-escape datei
verwenden.

Herbert

Dazu habe ich auf anhieb leider nichts gefunden, dass mir erklärt was das bedeutet, der von mir gewählte Rahmen basiert auf
pst-eps:
Export of PSTricks environments
Herbert Voß
November 5, 2006

um die pspicture Umgebung mittels

dvips spirale.dvi -E -o spirale.eps
als eps auszulagern.

voss
18-08-2010, 14:05
Hallo Herbert, ich glaube da habe ich mich falsch ausgedrückt bzw. erkenne ich noch nicht wie ich die Lösung allgemein anwenden kann. Eigentlich wollte ich fragen, wenn ich eine beliebige ps-Funktion schreibe z.B. wie die /linie wie könnte man die in dem Prinzip umsetzen wie du das konkrete Bsp. umgestzt hast? Damit meine ich etwas in der Art:


ah, verstanden:


\documentclass[a4paper,fleqn]{scrartcl}
\usepackage{pstricks}
\pagestyle{empty}
\SpecialCoor
\makeatletter
\def\linie{\pst@object{linie}}% liest Optionen ein und macht mit @i weiter
\def\linie@i(#1){%
\begin@OpenObj% erlaubt Pfeile
\pst@getcoor{#1}\pst@tempA% hole die Koordinaten
\addto@pscode{
\pst@tempA /y ED /x ED
1 1 moveto
x y rlineto
}%
\end@OpenObj% stroke, Linienfarbe usw ... setzen
}
\begin{document}

\begin{pspicture}[showgrid](-6,-6)(6,6)
\linie(1,4)
\linie[linecolor=blue](1;170)% polarcoordinaten
\end{pspicture}

\end{document}



Dazu habe ich auf anhieb leider nichts gefunden, dass mir erklärt was das bedeutet, der von mir gewählte Rahmen basiert auf
um die pspicture Umgebung mittels

dvips spirale.dvi -E -o spirale.eps
als eps auszulagern.

schau mal hier:
http://tug.org/PSTricks/main.cgi?file=pdf/pdfoutput#autopstpdf

Herbert

nameac
18-08-2010, 21:01
Vielen Dank, kann man sich über die verwendeten Makros
\def\linie{\pst@object{linie}}% liest Optionen ein und macht mit @i weiter
\def\linie@i(#1){%
\begin@OpenObj% erlaubt Pfeile
\pst@getcoor{#1}\pst@tempA% hole die Koordinaten
\addto@pscode{


falls das so genannt wird, irgendwo belesen?

voss
18-08-2010, 22:00
Vielen Dank, kann man sich über die verwendeten Makros
\def\linie{\pst@object{linie}}% liest Optionen ein und macht mit @i weiter
\def\linie@i(#1){%
\begin@OpenObj% erlaubt Pfeile
\pst@getcoor{#1}\pst@tempA% hole die Koordinaten
\addto@pscode{


falls das so genannt wird, irgendwo belesen?

Beispielsweise
ftp://ftp.tug.org/tex/PSTricks/pst-code.pdf
oder verschiedenes auf
http://tug.org/PSTricks/main.cgi?file=doc/docs

Am besten irgendein einfacheres Paket nehmen und den Code ansehen.

Herbert

nameac
19-08-2010, 15:58
Hallo Herbert,

bis jetzt habe ich einwenig gelesen und rumprobiert, aber leider erschließt sich mir nicht, warum moveto nicht funktioniert.


\documentclass[a4paper,fleqn]{scrartcl}
\usepackage{pstricks}
\pagestyle{empty}
\SpecialCoor
\makeatletter
\def\linie{\pst@object{linie}}% liest Optionen ein und macht mit @i weiter
\def\linie@i(#1){%
\begin@OpenObj% erlaubt Pfeile
\pst@getcoor{#1}\pst@tempA% hole die Koordinaten
\addto@pscode{
\pst@tempA /y ED /x ED
x y moveto
1 2 lineto
}%
\end@OpenObj% stroke, Linienfarbe usw ... setzen
}
\begin{document}

\begin{pspicture}[showgrid=true](-6,-6)(6,6)
%\rput(1,2){\linie(2,4)}
\linie[linecolor=red](2,2)
%\linie[linecolor=blue](1;170)% polarcoordinaten
\end{pspicture}

\end{document}

mit


72 2.54 div dup scale funktioniert es , aber dann ergibt sich eine neue Linienstärke die sich nicht verändern lässt.

voss
19-08-2010, 20:04
bis jetzt habe ich einwenig gelesen und rumprobiert, aber leider erschließt sich mir nicht, warum moveto nicht funktioniert.


\documentclass[a4paper,fleqn]{scrartcl}
\usepackage{pstricks}
\pagestyle{empty}
\SpecialCoor
\makeatletter
\def\linie{\pst@object{linie}}% liest Optionen ein und macht mit @i weiter
\def\linie@i(#1){%
\begin@OpenObj% erlaubt Pfeile
\pst@getcoor{#1}\pst@tempA% hole die Koordinaten
\addto@pscode{
\pst@tempA /y ED /x ED
x y moveto
% 1 2 lineto
1 2 \tx@ScreenCoor lineto
}%
\end@OpenObj% stroke, Linienfarbe usw ... setzen
}
\begin{document}

\begin{pspicture}[showgrid=true](-6,-6)(6,6)
%\rput(1,2){\linie(2,4)}
\linie[linecolor=red](2,2)
%\linie[linecolor=blue](1;170)% polarcoordinaten
\end{pspicture}

\end{document}
.

1 2 bezieht sich ja auf PostScript Pixel, also pt. Und das ist hier so gut
wie (0,0). Du musst die Koordinaten erst auf die Bildschirmkoordinqten
umrechnen (siehe rote Ergänzung), denn du meinst ja eigentlich 1cm,2cm

Herbert

nameac
19-08-2010, 20:19
Achso, ok und warum erhielt man trotzdem eine linie die den übergeben Koordinaten (2,2) in cm entsprach?

voss
19-08-2010, 20:32
Achso, ok und warum erhielt man trotzdem eine linie die den übergeben Koordinaten (2,2) in cm entsprach?

\pst@getcoor macht die Umrechnung für dich

mach "x y pstack moveto" und sieh dir die GhostScript-Ausgabe
an, dann siehst du die umgerechneten Koordinaten.

56.9054909
56.9054909

Herbert

nameac
19-08-2010, 20:41
Du hast recht, daran hatte ich zwar gedacht aber mich hatte immer wieder verwirrt, das die Linie von (0,0) ausging, dabei endetete sie da. Hätte ich mal rlineto verwendet wäre mir das aufgefalllen, danke.

nameac
21-08-2010, 14:16
Hallo nochmal,

wie sollte man /linie bzw. /Funktion definiert sein, damit man ihr einen String als Parameter übergeben kann?

voss
21-08-2010, 17:40
wie sollte man /linie bzw. /Funktion definiert sein, damit man ihr einen String als Parameter übergeben kann?


\def\linie@i(#1)#2{%


dann kannst du es als linie(1,2){was-auch-immer} aufrufen.

Herbert