%
% see pstricks.tex for license and copyright
%
% ----------- hv 20120219 -------------------
\newpsstyle{gridstyle}{subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=8pt}
\newpsstyle{gridstyleA}{subgriddiv=5,gridcolor=red!30,subgridcolor=green!20!black!10,gridlabels=0pt}
\newif\ifshowgrid
\newdimen\sh@wgridXunit
\newdimen\sh@wgridYunit
\def\pst@@showgrid#1#2#3\@nil{% hv 20130403
\def\showgridp@s{0}%
\ifx#1b\showgridtrue\else% bottom
\ifx#1f\showgridfalse\else
\ifx#1t
\ifx#2r \showgridtrue\else% true->bottom
\showgridtrue\def\showgridp@s{1}\fi% top
\fi\fi\fi
\ifnum\showgridp@s>0\relax
\sh@wgridXunit=\psxunit
\sh@wgridYunit=\psyunit
\fi
}
\define@key[psset]{pstricks}{showgrid}[b]{\expandafter\pst@@showgrid#1!!\@nil}
\define@boolkey[psset]{pstricks}[Pst@]{showframe}[true]{}
\define@boolkey[psset]{pstricks}[Pst@]{calcframe}[true]{}
\psset[pstricks]{showgrid=f,showframe=false,calcframe=false}
\define@boolkey[psset]{pstricks}[Pst@]{pgffunctions}[true]{}
\psset[pstricks]{pgffunctions=false}
%
\newdimen\pst@shift
\newif\ifPst@shift@star
\define@key[psset]{pstricks}{shift}[0]{%
\ifx#1*
\global\Pst@shift@startrue
\pst@shift=\p@
\else
\global\Pst@shift@starfalse
\pssetlength\pst@dimg{#1}
\global\pst@shift\pst@dimg% only the outer pspicture env can have a shift
\fi}
\psset[pstricks]{shift=0}
%
% The main pspciture environment
%------------------------------- pspicture ------------------------------
%
\def\ps@readmargin#1,#2,#3,#4,#5\@nil{%
\ifx\\#2\\
% \typeout{>>> Case 1 para}%
\pst@getlength{#1}\ps@margin@left
\let\ps@margin@right\ps@margin@left
\let\ps@margin@top\ps@margin@left
\let\ps@margin@bottom\ps@margin@left
\else
\ifx\\#3\\%
% \typeout{>>> Case 2 para: #1,#2}%
\pst@getlength{#1}\ps@margin@left
\def\ps@margin@right{0}%
\pst@getlength{#2}\ps@margin@bottom
\def\ps@margin@top{0}
\else
% \typeout{>>> Case 4 para: #1,#2,#3,#4}%
\pst@getlength{#1}\ps@margin@left
\pst@getlength{#2}\ps@margin@bottom
\pst@getlength{#3}\ps@margin@right
\pst@getlength{#4}\ps@margin@top
\fi\fi
%\typeout{>>>>>>>>>\ps@margin@left,\ps@margin@bottom,\ps@margin@right,\ps@margin@top}%
}%
\define@key[psset]{pstricks}{margin}[0pt]{\ps@readmargin#1,,,,\@nil}
\psset[pstricks]{margin=0pt}
%
\ExplSyntaxOn
\define@key[psset]{pstricks}{alt}[]{\tl_set:Ne\l__tag_graphic_alt_tl{\text_purify:n{#1}}}
%\define@boolkey[psset]{pstricks}[]{artifact}[true]{}
\define@key[psset]{pstricks}{artifact}{%
\bool_set_true:N \l__tag_graphic_artifact_bool
\bool_set_false:N \l__tag_graphic_BBox_bool
}
\define@key[psset]{pstricks}{actualtext}[]{%
\tl_set:Ne\l__tag_graphic_actual_tl{\text_purify:n{#1}}
\bool_set_false:N \l__tag_graphic_BBox_bool
}
\define@key[psset]{pstricks}{correct-BBox}{%
\bool_set_true:N \l__tag_graphic_bboxcorr_bool
\seq_set_split:Nnn\l__tag_graphic_bboxcorr_seq{~}{#1~0pt~0pt~0pt~0pt}%
}
\define@key[psset]{pstricks}{tag}[]{%
\str_case:nnF {#1}{
{artifact}
{
\bool_set_true:N \l__tag_graphic_artifact_bool
\bool_set_false:N \l__tag_graphic_BBox_bool
}
{false}{\tag_stop:}
}
{\tl_set:Nn\l__tag_graphic_struct_tl{#1}}
}
\ExplSyntaxOff
\newcount\ps@imagectr
\ps@imagectr=0
%\newif\ifPst@findcoor
%\Pst@findcoorfalse
%
\def\pspicture{\begingroup\pst@ifstar\pst@picture}
\def\pst@picture{\@ifnextchar[{\pst@@picture}{\pst@@picture[]}}
\def\pst@@picture[#1]{%
% showgrid=false% for nested pspicture environemnets
\def\pst@tempA{showgrid=false,#1}% added 20250612 hv
\psset{#1}% sets the shift and grid option
\@ifnextchar({\pst@@picture@i[#1]}{\pst@@picture@@i[#1]}}%
\def\pst@@picture@@i[#1]{%
\def\pic@coor{(0,0)(0,0)}%
\gdef\pscoor{(10,10)}%
\ifPst@calcframe
\typeout{>>>Check for file \jobname-\the\numexpr\ps@imagectr+1.psaux}%
\IfFileExists{\jobname-\the\numexpr\ps@imagectr+1.psaux}
{\input{\jobname-\the\numexpr\ps@imagectr+1.psaux}%
\xdef\pic@coor{(0,0)\pscoor}%
\typeout{----->>\pic@coor}%
\typeout{----->>\pscoor}%
}
{%\gdef\pscoor{(10,10)}
%\def\pic@coor{(0,0)(0,0)(10,10)}
}%
% \typeout{>>>\pscoor}%
\fi
\edef\@temp{[\noexpand#1]\pscoor}%
\expandafter\pst@@picture@i\@temp}
%
\def\pst@@picture@i[#1]#2(#3,#4){\@ifnextchar(% ignore anything between [] and ()
{\pst@@@picture[#1](#3,#4)}%
{\pst@@@picture[#1](0,0)(#3,#4)}}
%
\def\pst@@@picture[#1](#2,#3)(#4,#5){%
\pssetxlength\pst@dima{#2}%
\pssetylength\pst@dimb{#3}%
\pssetxlength\pst@dimc{#4}%
\pssetylength\pst@dimd{#5}%
\pstVerb{/xCanvasLeft \pst@number\pst@dima def
/yCanvasLeft \pst@number\pst@dimb def
/xCanvasRight \pst@number\pst@dimc def
/yCanvasRight \pst@number\pst@dimd def
}%
\ifdim\pst@dima>\pst@dimc
\pst@dimg=\pst@dima
\pst@dima=\pst@dimc
\pst@dimc=\pst@dimg
\fi
\ifdim\pst@dimb>\pst@dimd
\pst@dimg=\pst@dimb
\pst@dimb=\pst@dimd
\pst@dimd=\pst@dimg
\fi
\setbox\pst@hbox=\hbox\bgroup
\begingroup\KillGlue
\@ifundefined{@latexerr}{}{\let\unitlength\psunit}%
\edef\pic@coor{(#2,#3)(#2,#3)(#4,#5)}%
% ----------- 1.10/12 beg hv -------------------
% \psset{showgrid=false}% % for nested pspicture environemnets
% \def\pst@tempA{#1}%
% \ifx\pst@tempA\@empty\else\psset{#1}\fi% sets the shift and grid option
\ifx\pst@bgcolor\@empty\else\psframe*[linecolor=\pst@bgcolor](#2,#3)(#4,#5)\fi
\ifshowgrid\ifnum\showgridp@s=0\psgrid[style=gridstyle]\fi\fi
% ----------- 1.10/12 end hv -------------------
\ignorespaces% % 2008-12-07
\ifPst@calcframe\pstVerb{ .trackbbox }\global\advance\ps@imagectr by 1 \fi
\ifPst@pgffunctions\pstVerb{ pgffunctions }\fi% hv 2013-04-17
}
%\def\pic@coor{(0,0)(0,0)(10,10)}
\def\endpspicture{%
\ifPst@calcframe
\ifPSTlualatex
\pstVerb{
.trackedbbox % xmin ymin xmax ymax
% Die Koordinaten sind relativ zur Seite, also verschieben wir sie
% zum aktuellen Punkt.
currentpoint matrix translate dup invertmatrix dup 4 1 roll
transform
/YMAX exch def /XMAX exch def
transform
/YMIN exch def /XMIN exch def
% Now we have all absolute coordinates
\ifPst@showframe
% Um jetzt an diesen Koordinaten zu zeichnen, ist das natürlich
% ungünstig und wir müssen zurück schieben... (Oder den Code
% umordnen, aber warum einfach wenns auch kompliziert geht ;P)
XMIN YMIN XMAX XMIN sub YMAX YMIN sub % lower left, width, height
4 copy
gsave
currentpoint translate newpath rectstroke
newpath 0 0 moveto % x0 y0 x1 y1
\ps@margin@top\space add \ps@margin@bottom\space add 4 1 roll % y1 x0 y0 x1
\ps@margin@right\space add \ps@margin@left\space add 4 1 roll % x1 y1 x0 y0
\ps@margin@bottom\space sub 4 1 roll % y0 x1 y1 x0
\ps@margin@left\space sub 4 1 roll % x0 y0 x1 y1
[3 3] 0 setdash rectstroke
grestore
\fi
(\jobname-\the\
[email protected]) (w) file /CoorFile exch def
(\\gdef\\pscoor{\string\() CoorFile exch writestring
XMIN %\pst@number\psxunit div
\ps@margin@left\space sub 20 string cvs CoorFile exch writestring
(pt, ) CoorFile exch writestring
YMIN %\pst@number\psyunit div
\ps@margin@bottom\space sub 20 string cvs CoorFile exch writestring
(pt\string\)\string\() CoorFile exch writestring
XMAX %\pst@number\psxunit div
\ps@margin@right\space add 20 string cvs CoorFile exch writestring
(pt, ) CoorFile exch writestring
YMAX %\pst@number\psyunit div
\ps@margin@top\space add 20 string cvs CoorFile exch writestring
(pt\string\)}\% ) CoorFile exch writestring
%(Unit is \pst@number\psyunit/\pst@number\psyunit) 40 string cvs CoorFile exch writestring
CoorFile closefile
}%
\else
\global\Pst@calcframefalse
\PackageError{PSTricks}{You need to run lualatex for calculating the bounding box or set calcframe=false}{}%\@ehpa
\fi
\fi
\ifshowgrid\ifnum\showgridp@s>0
\psgrid[xunit=\sh@wgridXunit,yunit=\sh@wgridYunit,style=gridstyle]\fi\fi
\pst@killglue
\endgroup
\egroup
\ht\pst@hbox=\pst@dimd
\dp\pst@hbox=-\pst@dimb
\setbox\pst@hbox=\hbox{%
\kern-\pst@dima
\ifPst@shift@star%\typeout{==pstricks== old behaviour of the shift option}% shift=*
\advance\pst@dimd-\pst@dimb
\pst@dimd=0.5\pst@dimd
\else\pst@dimd-\pst@shift\fi
\advance\pst@dimd\pst@dimb
\lower\pst@dimd\box\pst@hbox
\kern\pst@dimc}%
\if@star\setbox\pst@hbox=\hbox{\psclipbox@@\z@}\fi
\leavevmode
\ifPst@draft
\expandafter\ifx\csname @latexerr\endcsname\relax
\box\pst@hbox
\else% do we have LaTeX?
\fboxsep=0pt
\fbox{\rule[-\pst@shift]{0pt}{\ht\pst@hbox}\rule{\wd\pst@hbox}{0pt}}%
\fi
\else
\box\pst@hbox
\fi
\endgroup
\psset[pstricks]{shift=0}% reset value
}
%
\@namedef{pspicture*}{\pspicture*}
\@namedef{endpspicture*}{\endpspicture}
%
%