diff options
Diffstat (limited to 'usergrps/uktug/baskervi/6_2/spqr/boxfill.tex')
-rw-r--r-- | usergrps/uktug/baskervi/6_2/spqr/boxfill.tex | 232 |
1 files changed, 232 insertions, 0 deletions
diff --git a/usergrps/uktug/baskervi/6_2/spqr/boxfill.tex b/usergrps/uktug/baskervi/6_2/spqr/boxfill.tex new file mode 100644 index 0000000000..fbc02b5799 --- /dev/null +++ b/usergrps/uktug/baskervi/6_2/spqr/boxfill.tex @@ -0,0 +1,232 @@ +%% BEGIN boxfill.tex +%% +%% Defines the \psboxfill macro. +%% For use with PSTricks v0.94 (or perhaps later). +%% +\def\fileversion{0.94} +\def\filedate{94/06/08} +%% +%% COPYRIGHT 1994, by Timothy Van Zandt, tvz@Princeton.EDU +%% See pstricks.tex or pstricks.doc for copying restrictions. + +% Preliminaries: + +\message{ v\fileversion, \filedate} + +\csname PSTboxfillLoaded\endcsname +\let\PSTboxfillLoaded\endinput + +\ifx\PSTricksLoaded\endinput\else + \def\next{\input pstricks.tex} + \expandafter\next +\fi + +\edef\TheAtCode{\the\catcode`\@} +\catcode`\@=11 + +% The box: + +\newbox\pst@fillbox +\def\psboxfill{\pst@killglue\pst@makebox\psboxfill@i} +\def\psboxfill@i{\setbox\pst@fillbox\box\pst@hbox\ignorespaces} + +% Parameters: + +\def\psset@boxfillsize#1{% + \def\pst@tempg{#1}\def\pst@temph{auto}% + \ifx\pst@tempg\pst@temph + \let\psk@boxfillsize\relax + \else + \psset@@boxfillsize#1(\z@,\z@)\@empty(\z@,\z@)(\@nil + \fi} +\def\psset@@boxfillsize#1(#2,#3)#4(#5,#6)#7(#8\@nil{% + \begingroup + \ifx\@empty#7\relax + \pst@dima\z@ + \pst@dimb\z@ + \pssetxlength\pst@dimc{#2}% + \pssetylength\pst@dimd{#3}% + \else + \pssetxlength\pst@dima{#2}% + \pssetylength\pst@dimb{#3}% + \pssetxlength\pst@dimc{#5}% + \pssetylength\pst@dimd{#6}% + \fi + \xdef\pst@tempg{% + \pst@dima=\number\pst@dima sp + \pst@dimb=\number\pst@dimb sp + \pst@dimc=\number\pst@dimc sp + \pst@dimd=\number\pst@dimd sp }% + \endgroup + \let\psk@boxfillsize\pst@tempg} + +\psset{boxfillsize={(-15cm,-15cm)(15cm,15cm)}} + +\def\psset@boxfillcolor#1{\pst@getcolor{#1}\psboxfillcolor} +\psset@boxfillcolor{black} + +\def\psset@boxfillangle#1{\pst@getangle{#1}\psk@boxfillangle} +\psset@boxfillangle{0} + +\def\psset@fillsepx#1{\pst@getlength{#1}\psk@fillsepx} +\def\psset@fillsepy#1{\pst@getlength{#1}\psk@fillsepy} +\def\psset@fillsep#1{\psset@fillsepx{#1}\let\psk@fillsepy\psk@fillsepx} +\psset@fillsep{2pt} + +\def\psset@fillcycle#1{\pst@getint{#1}\psk@fillcycle} +\psset@fillcycle{0} + +% Main macro: + +\def\psfs@boxfill{% + \ifvoid\pst@fillbox + \@pstrickserr{Fill box is empty. Use \string\psboxfill\space first.}\@ehpa + \else + \ifx\psk@boxfillsize\relax + \pst@AutoBoxFill + \else + \pst@ManualBoxFill + \fi + \fi} + +% Manual box fill: + +\def\pst@ManualBoxFill{% + \leavevmode + \begingroup + \pst@FlushCode + \begin@psclip + \pstVerb{clip}% + \expandafter\pst@AddFillBox\psk@boxfillsize + \end@psclip + \endgroup} + +\def\pst@FlushCode{% + \pst@Verb{% + /mtrxc CM def + CP CP T + \tx@STV + \psk@origin + \psk@swapaxes + \pst@newpath + \pst@code + mtrxc setmatrix + moveto + 0 setgray}% + \gdef\pst@code{}} + +\def\pst@AddFillBox#1 #2 #3 #4 {% + \begingroup + \setbox\pst@fillbox=\vbox{% + \hbox{\unhcopy\pst@fillbox\kern\psk@fillsepx\p@}% + \vskip\psk@fillsepy\p@}% + \psk@boxfillsize + \pst@cnta=\pst@dimc + \advance\pst@cnta-\pst@dima + \divide\pst@cnta\wd\pst@fillbox + \pst@cntb=\pst@dimd + \advance\pst@cntb-\pst@dimb + \pst@dimd=\ht\pst@fillbox + \divide\pst@cntb\pst@dimd + \def\pst@tempa{% + \pst@tempg + \copy\pst@fillbox + \advance\pst@cntc\@ne + \ifnum\pst@cntc<\pst@cntd\expandafter\pst@tempa\fi}% + \let\pst@tempg\relax + \pst@cntc-\tw@ + \pst@cntd\pst@cnta + \setbox\pst@fillbox=\hbox to \z@{% + \kern\pst@dima + \kern-\wd\pst@fillbox + \pst@tempa + \hss}% + \pst@cntd\pst@cntb + \ifnum\psk@fillcycle=\z@\pst@ManualFillCycle\fi + \global\setbox\pst@boxg=\vbox to\z@{% + \offinterlineskip + \vss + \pst@tempa + \vskip\pst@dimb}% + \endgroup + \setbox\pst@fillbox\box\pst@boxg + \pst@rotate\psk@boxfillangle\pst@fillbox + \box\pst@fillbox} + +\def\pst@ManualFillCycle{% + \pst@cntg=\psk@fillcycle + \pst@dimg=\wd\pst@fillbox + \divide\pst@dimg\pst@cntg + \ifnum\pst@cntg<\z@\pst@cntg=-\pst@cntg\fi + \advance\pst@cntg\m@ne + \pst@cnth=\pst@cntg + \def\pst@tempg{% + \ifnum\pst@cnth<\pst@cntg\advance\pst@cnth\@ne\else\pst@cnth\z@\fi + \moveright\pst@cnth\pst@dimg}} + +% Auto box fill: !! Fix dictionary + +\pst@def{AutoFillCycle}<% + /c ED + /n 0 def + /s { + /x x w c div n mul add def + /n n c abs 1 sub lt { n 1 add } { 0 } ifelse def + } def> + +\pst@def{BoxFill}<% + gsave + gsave \tx@STV CM grestore dtransform CM idtransform + abs /h ED abs /w ED + pathbbox + h div round 2 add cvi /y2 ED + w div round 2 add cvi /x2 ED + h div round 2 sub cvi /y1 ED + w div round 2 sub cvi /x1 ED + /y2 y2 y1 sub def + /x2 x2 x1 sub def + CP + y1 h mul sub neg /y1 ED + x1 w mul sub neg /x1 ED + clip + y2 { + /x x1 def + s + x2 { + save CP x y1 T moveto Box restore + /x x w add def + } repeat + /y1 y1 h add def + } repeat + CP x y1 T moveto Box + currentpoint currentfont grestore setfont moveto> + +\def\pst@AutoBoxFill{% + \leavevmode + \begingroup + \pst@FlushCode + \pst@Verb{\psk@boxfillangle \tx@RotBegin}% + \pstVerb{\pst@dict /Box \pslbrace end}% + \hbox to \z@{\vbox to\z@{\vss\copy\pst@fillbox\vskip-\dp\pst@fillbox}\hss}% + \pstVerb{% + tx@Dict begin \psrbrace def + \ifnum\psk@fillcycle=\z@ + /s {} def + \else + \psk@fillcycle \tx@AutoFillCycle + \fi + \pst@number{\wd\pst@fillbox}% + \psk@fillsepx add + \pst@number{\ht\pst@fillbox}% + \pst@number{\dp\pst@fillbox}% + \psk@fillsepy add add + \tx@BoxFill + end}% + \pst@Verb{\tx@RotEnd}% + \endgroup} + +\catcode`\@=\TheAtCode\relax + +\endinput + +%% END boxfill.tex |