%% BEGIN pstricks.bug % LAST MODIFIED: October 3, 1994 % The latest version of this file can be obtained from Princeton.EDU. % This file list some bugs and latebreaking news for PSTricks, % version 0.93a, released March 12, 1993. % PROBLEMS: % 1. \scalebox can report missing number errors or worse, depending % on what is in its argument. % PATCH: Input this file. % % 2. palette.tex keeps loading pstricks.tex. % PATCH: In palette.tex, change % \ifx\pstricksloaded ... % to % \ifx\PSTricksLoaded ... % % 3. \pscirclebox doesn't leave the right amount of space. % PATCH: Input this file. % % 4. \ncbar doesn't work right. % PATCH: Input this file (AFTER inputting pst-node.tex). % % 5. Nested \multips doesn't work. % PATCH: Input this file. % % 6. \psgrid sometimes gets the size wrong by 1 unit. % PATCH: Input this file. % % 7. \begin{overlaybox} ... \end{overlaybox} cannot be used instead % of \overlaybox ... \endoverlaybox. % PATCH: Input this file. % % 8. Overlays don't interact properly with rotation. % PATCH: Input this file. % % 9. Overlays don't work properly with nodes. Specifically, they only work % when the nodes and node connections and labels are all on the same % overlay. % PATCH: Input this file, and include the command \AltOverlayMode % before the overlay in which you want to use nodes (before the whole % overlay box or slide, or in the beginning of the document). % Warning: Normally, overlay material is made invisible by translating % it off the page. With \AltOverlayMode, it is done by setting a small % clip path somewhere off the page. The material is made visible again % by issuing "initclip", which resets the clipping path completely. % This makes it incompatible with any other clipping tricks. % % 10. SpecialCoor and the : version of nrot do not work when ;!|: % do not have \catcode 12 (e.g., with french.sty). % % PATCH: Input this file, and read the following: % % FAQ: What non-standard category codes and active characters are % compatible with PSTricks? % % Using non-standard category codes can confuse PSTricks in many ways. % What follows is not comprehensive. % % Characters ()[],*=- % These must have category code 3, 7, 8, 11 or 12. % The category code must be set BEFORE inputting the PSTricks files. % % Characters <>|;!: % Same as above, but category code 13 (``active'') is also OK, in % which case the code must be 12 when the PSTricks files are input. % % Characters \{}@#$%^&_ % These should have their usual category codes when PSTricks files % are input, but then they can be set arbitrarily. % % Characters +"'.?/~` % No restrictions, but generally these should have category code 12 % when the PSTricks files are input. % % 11. Gradient fill style doesn't work the gradmidpoint=0 or gradmidpoint=1. % WORKAROUND: Until the next release, set gradmidpoint % close to, but not too close to or equal to, 0 or 1. % % 12. If using \pscharpath with protected fonts, the dashed and dotted % linestyles, setting shadow=true, and \pstextpath produce an % invalidaccess error. % WORKAROUND: Until the next release, do not use those features with % \pscharpath and protected fonts. In the next release, the dashed % and dotted line styles will work, and shadow=true and \pstextpath % will neither work nor produce errors with protected fonts. % % 13. \scalebox and \scaleboxto do not work properly with negative scaling. % % 14. With \psplot, setting labels=y or ticks=y does not suppress labels % or ticks on the x-axis. % PATCH: Get version 0.93a-patched of pst-plot.tex, distributed % which is part of the 0.93a distribution starting March 30, 1994. % % 15. When lines are very short, linestyle=dash may cause an error. % PATCH: Input this file. % % 16. \clipbox does not work. % PATCH: Input this file. % % 17. Various nodes are missing \leavevmode, which can cause irregularities % if they occur at the beginning of a paragraph. % WORKAROUND: Put \leavevmode before the offending node command. % E.g., \leavevmode\rnode{foo} % % 18. The Textures entry in the configuration file has several problems. % WORKAROUND: Contact tvz@Princeton.EDU to get a new pstricks.con. % % 19. There are two problems with using PSTricks without a header file: % 1. pst-make.tex gives an error. % 2. You get a PostScript error. % WORKAROUND: % 1. At the end of pst-make.tex, change to line % \MakeInputHpst-coil.doc}{pst-coil.tex} % to % \MakeInput{pst-coil.doc}{pst-coil.tex} % (The `H' become `{'). % 2. In pstricks.doc (before running pst-make.tex) or in % pstricks.tex (after running pst-make.tex), add the line % /T /translate load def % between the lines % /CP /currentpoint load def % /ED { exch def } bind def % % 20. Mixed coordinates do not work with \SpecialCorr % PATCH: Input this file. % % 21. Axis labels in \psplot use a hyphen instead of a minus sign. % PATCH: Get version 0.93a-patched of pst-plot.tex, % which is part of the 0.93a distribution starting March 30, 1994. % % 22. For certain plotstyle's the \fileplot command does not work. % PATCH: Get version 0.93a-patched of pst-plot.tex, % which is part of the 0.93a distribution starting March 30, 1994. % % 23. \scale does not work in \pscustom. % PATCH: Input this file. \edef\TheAtCode{\the\catcode`\@} \catcode`\@=11 % 1. \def\pst@divide#1#2#3{% \pst@@divide{#1}{#2}% \pst@dimtonum\pst@dimg{#3}} \def\pst@@divide#1#2{% \pst@dimg=#1\relax \pst@dimh=#2\relax \pst@cntg=\pst@dimh \pst@cnth=67108863 \pst@@@divide\pst@@@divide\pst@@@divide\pst@@@divide \divide\pst@dimg\pst@cntg} \def\pst@@@divide{% \ifnum \ifnum\pst@dimg<\z@-\fi\pst@dimg<\pst@cnth \multiply\pst@dimg\sixt@@n \else \divide\pst@cntg\sixt@@n \fi} \def\pst@getscale#1#2{% \pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil \@psttrue \ifdim\pst@tempg\p@=\z@ \@pstrickserr{Bad scaling argument `#1'}\@ehpa \def\pst@tempg{1 }% \@pstfalse \fi \ifdim\pst@temph\p@=\z@ \if@pst\@pstrickserr{Bad scaling argument `#1'}\@ehpa\fi \def\pst@temph{1 }% \fi \edef#2{\pst@tempg\space \pst@temph\space scale }% \ifdim\pst@tempg\p@=\p@ \ifdim\pst@temph\p@=\p@ \def#2{}% \fi\fi} \def\scalebox#1{\pst@makebox{\@scalebox{#1}}} \def\@scalebox#1{% \begingroup \pst@getscale{#1}\pst@tempa \let\pst@tempc\pst@tempg \let\pst@tempd\pst@temph \@@scalebox \endgroup} \def\@@scalebox{% \leavevmode \hbox{% \ifdim\pst@tempd\p@<\z@ \pst@dimg=\pst@tempd\ht\pst@hbox \pst@dimh=\pst@tempd\dp\pst@hbox \dp\pst@hbox=-\pst@dimg \ht\pst@hbox=-\pst@dimh \else \ht\pst@hbox=\pst@tempd\ht\pst@hbox \dp\pst@hbox=\pst@tempd\dp\pst@hbox \fi \pst@dima=\pst@tempc\wd\pst@hbox \ifdim\pst@dima<\z@\kern-\pst@dima\fi \pst@Verb{CP CP translate \pst@tempa \tx@NET}% \hbox to \z@{\box\pst@hbox\hss}% \pst@Verb{% CP CP translate 1 \pst@tempc div 1 \pst@tempd div scale \tx@NET}% \ifdim\pst@dima>\z@\kern\pst@dima\fi}} \def\scaleboxto(#1,#2){\pst@makebox{\@scaleboxto(#1,#2)}} \def\@scaleboxto(#1,#2){% \begingroup \pssetlength\pst@dima{#1}% \pssetlength\pst@dimb{#2}% \ifdim\pst@dima=\z@\else \pst@divide{\pst@dima}{\wd\pst@hbox}\pst@tempc \edef\pst@tempc{\pst@tempc\space}% \fi \ifdim\pst@dimb=\z@ \ifdim\pst@dima=\z@ \@pstrickserr{% \string\scaleboxto\space dimensions cannot both be zero}\@ehpa \def\pst@tempa{}% \def\pst@tempc{1 }% \def\pst@tempd{1 }% \else \let\pst@tempd\pst@tempc \fi \else \pst@dimc=\ht\pst@hbox \advance\pst@dimc\dp\pst@hbox \pst@divide{\pst@dimb}{\pst@dimc}\pst@tempd \edef\pst@tempd{\pst@tempd\space}% \ifdim\pst@dima=\z@ \let\pst@tempc\pst@tempd \fi \fi \edef\pst@tempa{\pst@tempc \pst@tempd scale }% \@@scalebox \endgroup} % 3. \def\pscirclebox@ii#1{% \begingroup \pst@useboxpar \setbox\pst@hbox=\hbox{#1\pscirclebox@iii\box\pst@hbox}% \ifpsboxsep \pst@dima=.5\wd\pst@hbox \pst@dimb=\ht\pst@hbox \advance\pst@dimb\dp\pst@hbox \divide\pst@dimb 2 \pst@pyth\pst@dima\pst@dimb\pst@dimc \advance\pst@dimc\pslinewidth \advance\pst@dimc\psframesep \advance\pst@dimb-\pst@dimc \setbox\pst@hbox=\hbox to2\pst@dimc{% \hss \vbox{\kern-\pst@dimb\box\pst@hbox}% \hss}% \advance\pst@dimb-\dp\pst@hbox \dp\pst@hbox=-\pst@dimb \fi \leavevmode\box\pst@hbox \endgroup} % 4. \pst@def{NCBar}<% \tx@GetPos \tx@GetArms /mtrx AngleA matrix rotate def x1a y1a mtrx itransform pop x2a y2a mtrx itransform pop sub dup 0 mtrx transform 3 -1 roll 0 gt { /y2a exch y2a add def /x2a exch x2a add def } { /y1a exch neg y1a add def /x1a exch neg x1a add def } ifelse mark x2 y2 x2a y2a x1a y1a x1 y1 tx@Dict begin false \tx@Line end /LPutVar [ x2 y2 x2 y2 x2a y2a x1a y1a x1 y1 ] cvx def /LPutPos { LPutVar \tx@AnglesMP } def> % 5. \def\multips{\begingroup\pst@getrputrot\multips@i} \def\multips@i(#1){\@ifnextchar({\@multips@ii(#1)}{\@multips@ii(0,0)(#1)}} \def\@multips@ii(#1)(#2)#3#4{% \pst@getcoor{#1}\pst@tempa \pst@@getcoor{#2}% \pst@cnta=#3\relax \init@pscode \addto@pscode{% \pst@tempa T \the\pst@cnta\space \pslbrace gsave \ifx\pst@rot\@empty\else\pst@rot rotate \fi }% \hbox to\z@{% \def\init@pscode{% \addto@pscode{% gsave \pst@number\pslinewidth SLW \pst@usecolor\pslinecolor}}% \def\use@pscode{\addto@pscode{grestore}}% \def\psclip##1{\pst@misplaced\psclip}% \def\nc@object##1##2##3##4{\pst@misplaced{node connection}}% #4}% \addto@pscode{grestore \pst@coor T \psrbrace repeat}% \leavevmode \use@pscode \endgroup \ignorespaces} % 6. \pst@def{Grid}<% newpath /a 4 string def % Empty string /b ED % Label size /c ED % Label color procedure. /n ED % Number of grid dots cvi dup 1 lt { pop 1 } if /s ED % Number subdivisions % Stack: x-unit y-unit s div dup 0 eq { pop 1 } if /dy ED % y-distance between lines. s div dup 0 eq { pop 1 } if /dx ED % x-distance between lines. % These two are integer multiples of dx and dy: dy div round dy mul /y0 ED % y-origin. dx div round dx mul /x0 ED % x-origin. % These four are integers, measuring dx and dy units: dy div round cvi /y2 ED % y2 dx div round cvi /x2 ED % x2 dy div round cvi /y1 ED % y1 dx div round cvi /x1 ED % x1 /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def % Sign of y2-y1 /w x2 x1 sub 0 gt { 1 } { -1 } ifelse def % Sign of x2-x1 % Set up the font and a few parameters for making labels: b 0 gt { /z1 b 4 div CLW 2 div add def /Helvetica findfont b scalefont setfont /b b .95 mul CLW 2 div add def } if % If Level 2, use automatic stroke adjustment. Otherwise, do by hand: systemdict /setstrokeadjust known % Level 2 { true setstrokeadjust /t { } def } { /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform } bind def } ifelse % Now make the vertical lines: gsave % Make dotted line, if appropriate n 0 gt { 1 setlinecap [ 0 dy n div ] dy n div 2 div setdash } { 2 setlinecap } ifelse % Initialize index: /i x1 def % Find y-values of endpoints. Adjust these if lines are dotted because % otherwise rounding errors or stroke adjustment can cause first or % last dot to be dropped. (Only GhostScript has exhibited problem of % dropping first dot. This is probably a bug.) /f y1 dy mul n 0 gt { dy n div 2 div h mul sub } if def /g y2 dy mul n 0 gt { dy n div 2 div h mul add } if def % Number of lines (Max 1000): x2 x1 sub w mul 1 add dup 1000 gt { pop 1000 } if { % Make label: i dx mul dup y0 moveto b 0 gt { gsave c % Color i a cvs dup % Index, as a string stringwidth pop /z2 ED % Stringwidth w 0 gt {z1} {z1 z2 add neg} ifelse h 0 gt {b neg} {z1} ifelse rmoveto show grestore } if % Make line ( on stack: i dx mul ): dup t f moveto g t L stroke % Advance index: /i i w add def } repeat grestore % Now make horizontal lines: gsave n 0 gt { 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash } { 2 setlinecap } ifelse /i y1 def /f x1 dx mul n 0 gt { dx n div 2 div w mul sub } if def /g x2 dx mul n 0 gt { dx n div 2 div w mul add } if def y2 y1 sub h mul 1 add dup 1000 gt { pop 1000 } if { newpath i dy mul dup x0 exch moveto b 0 gt { gsave c i a cvs dup stringwidth pop /z2 ED w 0 gt {z1 z2 add neg} {z1} ifelse h 0 gt {z1} {b neg} ifelse rmoveto show grestore } if dup f exch t moveto g exch t L stroke /i i h add def } repeat grestore> % 7. \def\overlaybox{% \global\setbox\theoverlaybox=\hbox\bgroup \begingroup \let\psoverlay\pst@overlay \def\overlaybox{% \@pstrickserr{Overlays cannot be nested}\@eha}% \def\putoverlaybox{% \@pstrickserr{You must end the overlay box before using \string\putoverlaybox}}% \psoverlay{main}% \ignorespaces} % 8 and 9. \pst@def{BeginOL}<% dup (all) eq exch TheOL eq or { IfVisible not { Visible /IfVisible true def } if } { IfVisible { Invisible /IfVisible false def } if } ifelse> \pst@def{InitOL}<% /OLUnit [ 3000 3000 matrix defaultmatrix dtransform ] cvx def /Visible { CP OLUnit idtransform T moveto } def /Invisible { CP OLUnit neg exch neg exch idtransform T moveto } def /BOL { \tx@BeginOL } def /IfVisible true def> \def\AltOverlayMode{% \def\pst@initoverlay##1{% \pst@Verb{% \tx@InitOL /Visible { initclip } def /Invisible { CP newpath OLUnit itransform moveto clip newpath moveto } def /TheOL (##1) def}}} % 10. \def\SpecialCoor{% \def\pst@@getcoor##1{% \begingroup \pst@activecoor \xdef\pst@tempg{##1}% \endgroup \expandafter\special@coor\pst@tempg||\@nil}% \def\pst@@getangle##1{% \begingroup \pst@activecoor \xdef\pst@tempg{##1}% \endgroup \expandafter\special@angle\pst@tempg\@empty)\@nil}% \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@special}} \begingroup \catcode`\|=13 \catcode`\;=13 \catcode`\!=13 \gdef\pst@activecoor{% \def|{\string|}% \def;{\string;}% \def!{\string!}} \endgroup \begingroup \catcode`\:=13 \gdef\pst@activerot{\def:{\string:}} \endgroup \def\psset@nrot#1{% \begingroup \pst@activerot \pst@expandafter{\@ifnextchar:{\psset@@nrot}{\psset@@rot}}{#1}\@nil \global\let\pst@tempg\psk@rot \endgroup \let\psk@nrot\pst@tempg} % 13. See 1. % 15. \pst@def{DashLine}<% % "a" is set to the length of first and last black segment, as fraction of % usual black segment. dup 0 gt { /a .5 def \tx@PathLength exch div } { pop /a 1 def \tx@PathLength } ifelse /b ED % Pattern should fit evenly in b /x ED % Length of white segment. /y ED % Length of black segment. /z y x add def % Total length of dash pattern. % If pattern is repeated n times, total length is (nz + 2(a-.5)y). % Set length to b, solve for n, round, and leave on stack: % n = round((b - 2(a-.5)y)/z) b a .5 sub 2 mul y mul sub z \tx@Div round % Adjust x and y by factor k so that % (n(kz) + 2(a-.5)(ky)) = b. % Solve for k and leave two copies on stack: % k = b/(nz + 2(a-.5)y) z mul a .5 sub 2 mul y mul add b exch \tx@Div dup % Scale x and y, set dash, and stroke: y mul /y ED x mul /x ED % Make sure x and y are both positive: x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] 0 } ifelse setdash stroke> % 16. \def\clipbox{\@ifnextchar[{\clipbox@}{\clipbox@[\z@]}} \def\clipbox@[#1]{\pst@makebox\clipbox@@{#1}} % 20. \def\mixed@coor#1#2{% \begingroup \special@@coor#1;;\@nil \let\pst@tempa\pst@coor \special@@coor#2;;\@nil \xdef\pst@tempg{\pst@tempa pop \pst@coor exch pop }% \endgroup \let\pst@coor\pst@tempg} % 23. \def\pst@getscale#1#2{% \edef\pst@tempg{#1}% \ifx\pst@tempg\@none \def#2{}% \else \pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil \ifdim\pst@tempg\p@=\z@ \@pstrickserr{Bad scaling argument `#1'}\@ehpa \def#2{}% \else \ifdim\pst@temph\p@=\z@ \@pstrickserr{Bad scaling argument `#1'}\@ehpa \def#2{}% \else \edef#2{\pst@tempg\space \pst@temph\space scale }% \fi \fi \fi} \catcode`\@=\TheAtCode\relax \endinput %% END pstricks.bug