Konvertierung von PStricks-Koordinaten in Postscript-Koordinaten

Konvertierung von PStricks-Koordinaten in Postscript-Koordinaten

Ich erstelle eine benutzerdefinierte Grafikbibliothek auf Basis von pstricks und muss die Koordinaten von pstricks in Postscript-Koordinaten umwandeln. Ich habe ein „funktionierendes“ Beispiel, das ich mir durch mühsames Ausprobieren zusammengebastelt habe, aber ich bin sicher, dass es richtig funktioniert. Beim Lesen der Datei pstricks.tex hatte ich den Eindruck, dass pstricks irgendwie \pst@coor oder – vielleicht wissen Sie es besser – ein anderes Makro verwendet, um die Koordinaten von pstricks in Postscript-Koordinaten umzuwandeln. Ich konnte nicht entschlüsseln, wie das funktioniert. Hier ist also meine funktionierende Lösung.

Meine konkrete Frage an Sie lautet: Welche nativen Pstricks-Konvertierungsfunktionen sollte ich anstelle von \fcConvertPSXUnit und \fcConvertPSYUnit im folgenden Code verwenden? [Bearbeiten] Die Frage wurde unten von Herbert beantwortet. Seine Antwort ist in diesem Beitrag enthalten.

Bei korrekter Ausführung sollte der folgende Code ein perfektes quadratisches Kreuz anzeigen (der obere Teil des Kreuzes wird mithilfe nativer Pstricks gezeichnet und der untere Teil mithilfe der Konvertierungsfunktionen).

\documentclass{article}
\usepackage{auto-pst-pdf} 
%to convert points to numbers, macro copied from stackexchange
\makeatletter
\begingroup
\catcode `P=12  % digits and punct. catcode
\catcode `T=12  % digits and punct. catcode
\lowercase{%
\def\x{\def\rem@pt##1.##2PT{##1\ifnum##2>\z@.##2\fi}}}
\expandafter\endgroup\x%
\newcommand{\stripPoints}[1]{\expandafter\rem@pt\the#1}
\newcommand{\fcConvertPSXUnit}{\stripPoints{\psxunit} 72.27 div 8000 mul mul\space %
\pst@number\pst@dima\space %3 sub 
72.27 div 8000 mul sub  %
}%
\newcommand{\fcConvertPSYUnit}{\stripPoints{\psyunit} 72.27 div -8000 mul mul\space %
\pst@number\pst@dimb\space 72.27 div -8000 mul sub %
}%
\makeatother

\begin{document}
\psset{xunit=1.2cm, yunit=1.2cm}
\begin{pspicture}(-2.3,-2.7)(2.1,2.55)%
\psline (0,0)(0,1)%
\psline (0,0)(1,0)%
\pstVerb{ %
100 setlinewidth %
newpath %
0 \fcConvertPSXUnit 0 \fcConvertPSYUnit moveto %
-1 \fcConvertPSXUnit 0 \fcConvertPSYUnit lineto %
0 \fcConvertPSXUnit 0 \fcConvertPSYUnit moveto %
0 \fcConvertPSXUnit -1 \fcConvertPSYUnit lineto %
stroke %
}%
\end{pspicture}
\end{document}

Danke für deinen Rat!

das Ergebnis der Kompilierung der obigen Datei

Der Code von Herbert, der meine Frage beantwortet:

\documentclass{article}
\usepackage{auto-pst-pdf}
\usepackage{pstricks} %that should had been included

\begin{document}

\psset{xunit=1.2cm, yunit=1.2cm}
\begin{pspicture}(-2.3,-2.7)(2.1,2.55)%
\makeatletter
\psline (0,0)(0,1)%
\psline (0,0)(1,0)%
\pscustom{ %
\code{ %
100 setlinewidth %
newpath %
0  0 \tx@ScreenCoor\space moveto %
-1 0 \tx@ScreenCoor\space lineto %
0 0 \tx@ScreenCoor\space moveto %
0 -1 \tx@ScreenCoor\space lineto %
stroke %
}%
}%
\makeatother

\end{pspicture}
\end{document}

Antwort1

\documentclass{article}
\usepackage{pstricks} 

\begin{document}
\psset{xunit=1.2cm, yunit=1.2cm}
\begin{pspicture}[showgrid](-2.3,-2.7)(2.1,2.55)
\psline (0,0)(0,1)
\psline (0,0)(1,0)
\pscustom{
  \moveto(0,0) 
  \lineto(-1,0) 
  \moveto(0,0) 
  \lineto(0,-1) 
  \stroke[linewidth=2pt,linecolor=red] 
}
\end{pspicture}
\end{document}

\movetowenn Sie die grundlegenden Makros usw. nicht möchten, verwenden Sie beispielsweise:

\code{0 0 moveto -1 0 \tx@ScreenCoor\space lineto}

innen \pscustomund mit einem \makeatlettervor der pspictureUmgebung:

\documentclass{article}
\usepackage{auto-pst-pdf}
\usepackage{pstricks}
\begin{document}

\makeatletter
\psset{xunit=1.2cm, yunit=1.2cm}
\begin{pspicture}(-2.3,-2.7)(2.1,2.55)
\psline (0,0)(0,1)
\psline (0,0)(1,0)
\pscustom{% 
\code{
newpath 
2 setlinewidth 
0  0 \tx@ScreenCoor\space moveto 
-1 0 \tx@ScreenCoor\space lineto 
0 0 \tx@ScreenCoor\space moveto 
0 -1 \tx@ScreenCoor\space lineto 
stroke 
}}%
\end{pspicture}
\makeatother
\end{document}

verwandte Informationen