Преобразование из координат pstricks в координаты postscript

Преобразование из координат pstricks в координаты postscript

Я создаю пользовательскую графическую библиотеку поверх pstricks и мне нужно преобразовать координаты pstricks в координаты postscript. У меня есть "рабочий" пример, созданный путем мучительного процесса проб и ошибок, но я уверен, что его можно сделать правильно. Читая файл pstricks.tex, у меня сложилось впечатление, что pstricks каким-то образом использует \pst@coor или - какой-то другой макрос - возможно, вы знаете лучше - для преобразования координат pstricks в координаты postscript. Я не смог расшифровать, как это работает. Итак, вот мое рабочее решение.

Мой конкретный вопрос к вам: какие собственные функции преобразования pstricks мне следует использовать вместо \fcConvertPSXUnit и \fcConvertPSYUnit в коде ниже? [Изменить] На вопрос ответил ниже Герберт. Включая его ответ в этот пост.

Если все сделано правильно, приведенный ниже код должен отображать идеальный квадратный крест (верхняя часть креста рисуется с использованием собственного pstricks, а нижняя часть рисуется с помощью функций преобразования).

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

Спасибо за ваш совет!

результат компиляции вышеуказанного файла

Код Герберта, который отвечает на мой вопрос:

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

решение1

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

если вам не нужны базовые макросы \movetoи т. п., то используйте, например:

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

внутри \pscustomи с а \makeatletterперед pspictureокружающей средой:

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

Связанный контент