Archiv verlassen und diese Seite im Standarddesign anzeigen : pstricks inline postscript
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.
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
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.
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
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?
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
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.
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
Achso, ok und warum erhielt man trotzdem eine linie die den übergeben Koordinaten (2,2) in cm entsprach?
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
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.
Hallo nochmal,
wie sollte man /linie bzw. /Funktion definiert sein, damit man ihr einen String als Parameter übergeben kann?
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.