% % bxeepic.sty % %% package declarations \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{bxeepic}[2013/04/28 v0.2] %% preparation \def\bxpz@ee@pkgname{bxeepic} \def\bxpz@ee@error{\PackageError\bxpz@ee@pkgname} \def\bxpz@ee@warn{\PackageWarning\bxpz@ee@pkgname} % (errors) \def\bxpz@warn@peald#1{\bxpz@ee@warn {Option '#1' ignored (pict2e already loaded)}} \def\bxpz@warn@wnpnt{\bxpz@ee@warn {Poly-line commands need at least two vertices.}} \def\bxpz@warn@wnstr{\bxpz@ee@warn {Blank lines due to too low stretch value.}} % (globals) \newif\ifbxpz@injoin \newif\ifbxpz@dashset \newif\ifbxpz@eepic@dotl \newif\ifbxpz@uselbl \newif\ifbxpz@first \chardef\bxpz@boxa=8 %% public parameters %%<*> \dashlinestretch \def\dashlinestretch{0} %%<*> \drawlinestretch \def\drawlinestretch{0} %%<*> \maxovaldiam \newdimen\maxovaldiam \maxovaldiam=40pt %%<*> \epictopgridlabelsep \def\epictopgridlabelsep{2mm} %%<*> \epicbottomgridlabelsep \def\epicbottomgridlabelsep{2\unitlength} %%<*> \epicsidegridlabelsep \def\epicsidegridlabelsep{\spacewidth} %% other initial settings \AtEndOfPackage{% \drawlines \eepicdottedlines \def\bxpz@tmpa{20pt}% %\ifx\maxovalrad\bxpz@tmpa \def\maxovalrad{.5\maxovaldiam}\fi } %% internal parameters \def\bxpz@dashlen@drawline{10pt} \def\bxpz@setdash@phase{0} \def\bxpz@dflt@linecap{0} \def\bxpz@dflt@linejoin{0} %% dvipdfmx option \IfFileExists{p2e-dvipdfmx.def}{}{%else % if pict2e lacks of proper support of dvipdfmx \@ifpackageloaded{pict2e}{}{%else \DeclareOption{dvipdfmx}{% \PassOptionsToPackage{dvipdfm}{pict2e}% \def\bxpz@begin@picture@hook{\let\pdfliteral\bxpz@pdfliteral}% \def\bxpz@pdfliteral##1{\special{pdf:literal ##1}}% \let\bxpz@org@@picture\@picture \def\@picture{\bxpz@begin@picture@hook \bxpz@org@@picture}% }% }% } %% option handling \newif\ifbxpz@safe \DeclareOption{safe}{\bxpz@safetrue} \DeclareOption{nosafe}{\bxpz@safefalse} % other options are passed to pict2e \@ifpackageloaded{pict2e}{% \DeclareOption*{\bxpz@warn@peald\CurrentOption}% }{%else \DeclareOption*{\PassOptionsToPackage{\CurrentOption}{pict2e}}% }% \ExecuteOptions{nosafe} \ProcessOptions* % load pict2e if not done \@ifpackageloaded{pict2e}{}{\RequirePackage{pict2e}} % pretend that epic & eepic are already loaded \@namedef{ver@epic.sty}{2100/01/01} \@namedef{ver@eepic.sty}{2100/01/01} %%------ mode-dependent stuffs %% exits unless in right mode \ifnum\pIIe@mode<\@ne \endinput\expandafter\fi %% \ifcase\pIIe@mode\relax \or \def\bxpz@setdash@op{setdash} \or \def\bxpz@setdash@op{d} \fi \def\bxpz@beginarray@op{[} \def\bxpz@endarray@op{]} %%------ Poly-line commands %% \bxpz@asdraw / \bxpz@asjoin / \bxpz@asmode \def\bxpz@asdraw{\chardef\bxpz@lm@invoke\z@} \def\bxpz@asjoin{\chardef\bxpz@lm@invoke\@ne} \def\bxpz@asmode{\chardef\bxpz@lm@invoke\tw@} %%<*> \drawline/\dottedline/\dashline % \dottedline[CHAR]{DOTGAP}(X1,Y1)...(XN,YN) % \dashline[STRETCH]{DASHLEN}[DOTGAP](X1,Y1)...(XN,YN) % * DOTGAP is ignored % \drawline[STRETCH](X1,Y1)...(XN,YN) % * switches to \dashline in case of negative STRETCH \def\drawline{\bxpz@asdraw\bxpz@drawl@a} \def\dottedline{\bxpz@asdraw\bxpz@dotl@a} \def\dashline{\bxpz@asdraw\bxpz@dashl@a} \def\bxpz@drawl@a{\@testopt\bxpz@drawl@b\drawlinestretch} \def\bxpz@drawl@b[#1]{% \ifnum#1<\z@ \def\bxpz@nxt{\bxpz@path{\bxpz@dp@drawl@x{#1}}}% \else \let\bxpz@nxt\bxpz@drawl@c \fi \bxpz@nxt} \def\bxpz@drawl@c{\bxpz@path{\bxpz@dp@drawl}} \def\bxpz@dashl@a{\@testopt\bxpz@dashl@b\dashlinestretch} \def\bxpz@dashl@b[#1]#2{\@testopt{\bxpz@dashl@c{#1}{#2}}{}} \def\bxpz@dashl@c#1#2[#3]{\bxpz@path{\bxpz@dp@dashl{#1}{#2}}} \def\bxpz@dotl@a{\@testopt\bxpz@dotl@b{}} \def\bxpz@dotl@b[#1]#2{\bxpz@path{\bxpz@dp@dotl{#1}{#2}}} %\def\path{\bxpz@asdraw\bxpz@path{}} %% \bxpz@path{} \def\bxpz@path#1{% #1\ifcase\bxpz@lm@invoke \expandafter\bxpz@polyline \or \expandafter\bxpz@join@start \or \expandafter\bxpz@dash@mode \fi} %% \bxpz@polyline % Same as \polyline in pict2e, except that \bxpz@stroke@graph is % used instead of \pIIe@strokeGraph. \def\bxpz@polyline(#1,#2){% \@killglue \pIIe@moveto{#1\unitlength}{#2\unitlength}% \@ifnextchar\lp@r{\bxpz@polyline@a}% {\ifnum\bxpz@lm@invoke=\z@ \bxpz@warn@wnpnt \fi \ignorespaces}} \def\bxpz@polyline@a(#1,#2){% \pIIe@lineto{#1\unitlength}{#2\unitlength}% \@ifnextchar\lp@r{\bxpz@polyline@a}{\bxpz@stroke@graph\ignorespaces}} %%<*> drawjoin / dottedjoin / dashjoin environment % \begin{dottedjoin}[CHAR]{DOTGAP}...\end{dottedjoin} % \begin{dashjoin}[STRETCH]{DASHLEN}[DOTGAP]...\end{dashjoin} % \begin{drawjoin}[STRETCH]...\end{drawjoin} \def\drawjoin{\bxpz@asjoin\bxpz@drawl@a} \def\dottedjoin{\bxpz@asjoin\bxpz@dotl@a} \def\dashjoin{\bxpz@asjoin\bxpz@dashl@a} \def\bxpz@endjoin{\bxpz@join@end\aftergroup\bxpz@join@finale} \let\enddrawjoin\bxpz@endjoin \let\enddottedjoin\bxpz@endjoin \let\enddashjoin\bxpz@endjoin %%<*> \jput(X,Y){something} \def\jput(#1,#2){% \ifbxpz@injoin \xdef\bxpz@g@join@last{(#1,#2)}% \xdef\bxpz@g@join@path{\bxpz@g@join@path\bxpz@g@join@last}% \fi \put(#1,#2)} \let\bxpz@g@join@last\relax \let\bxpz@g@join@path\@empty %% \bxpz@join@start \def\bxpz@join@start{% \bxpz@renew@join \let\bxpz@dp@join\bxpz@dp \edef\bxpz@wholewidth@join{\the\@wholewidth}% \bxpz@dp@clear \bxpz@injointrue \ignorespaces} %% \bxpz@join@end \def\bxpz@join@end{\bxpz@renew@join} %% \bxpz@join@finale \def\bxpz@join@finale{% \ifbxpz@injoin\else \global\let\bxpz@g@join@last\relax \global\let\bxpz@g@join@path\@empty \fi \ignorespaces} %%<*> \flushjoin \def\flushjoin{% \bxpz@flush@join \global\let\bxpz@g@join@last\relax} %% \bxpz@renew@join \def\bxpz@renew@join{% \bxpz@flush@join \ifx\bxpz@g@join@last\relax\else \global\let\bxpz@g@join@path\bxpz@g@join@last \fi} \def\bxpz@flush@join{% \ifx\bxpz@g@join@path\@empty\else \bgroup \bxpz@asjoin \@wholewidth=\bxpz@wholewidth@join \let\bxpz@dp\bxpz@dp@join \expandafter\bxpz@polyline\bxpz@g@join@path \egroup \global\let\bxpz@g@join@path\@empty \fi} %%<*> \drawlines / \dottedlines / \dashlines \def\drawlines{\bxpz@asmode\bxpz@drawl@a} \def\dottedlines{\bxpz@asmode\bxpz@dotl@a} \def\dashlines{\bxpz@asmode\bxpz@dashl@a} %% \bxpz@dash@mode \def\bxpz@dash@mode{% \let\bxpz@dp@mode\bxpz@dp \bxpz@dp@clear \ignorespaces} %%<*>\path(X1,Y1)..(Xn,Yn) \def\path{\bxpz@asdraw \bxpz@polyline} %%------ Dash-pattern generator % A dash-pattern generator defines \bxpz@dp to be % {}{} % where means: 0 = normal; 1 = ordinary dotted line, % line-width adjustment is needed; 2 = character dotted line. %% \bxpz@dp@drawl \def\bxpz@dp@drawl{\let\bxpz@dp\bxpz@dp@drawl@val} %% \bxpz@dp@dotl{}{} \def\bxpz@dp@dotl#1#2{\bxpz@dp@start \bxpz@addto@dp@nums{\@wholewidth}{#2\unitlength}% \gdef\bxpz@g@dpflag{1}\bxpz@dp@end} %% \bxpz@dp@drawl@x{} % For \drawline with negative stretch. \def\bxpz@dp@drawl@x#1{\bxpz@dp@dashl@sub{% \@tempcnta=#1\relax\multiply\@tempcnta\tw@ \@tempdima=\bxpz@dashlen@drawline}} %% \bxpz@dp@dashl{}{} \def\bxpz@dp@dashl#1#2{\bxpz@dp@dashl@sub{% \@tempcnta=#1\relax\advance\@tempcnta-100 \@tempdima=#2\unitlength}} % \bxpz@dp@dashl@sub % Here dash gap length is calculated so that 'ink ratio' in resulted % lines equals the value derived from the given stretch value. % ink ratio: (blank)0.0 0.5 1.0(solid) % \drawline stretch: -100 .. -50 .. 0 % \dashline stretch: -100 .. 0 .. 100 \def\bxpz@dp@dashl@sub#1{\bxpz@dp@start #1% here \@tempcnta is adjusted in range -200..0 \ifnum\@tempcnta<\z@ \ifnum\@tempcnta>-200 % \@tempdimb=-\@tempcnta\@tempdima \advance\@tempcnta200 \divide\@tempdimb\@tempcnta \bxpz@addto@dp@nums{\@tempdima}{\@tempdimb}% \else % 'blank' lines \bxpz@warn@wnstr \bxpz@addto@dp@nums{\z@}{1000pt}% \fi \fi % if \@tempcnta >=0 then do nothing (solid lines) \bxpz@dp@end} % some internal stuffs \def\bxpz@dp@start{% \bgroup \global\let\bxpz@g@dp\@empty \gdef\bxpz@g@dpflag{0}} \def\bxpz@dp@end{ \egroup \edef\bxpz@dp{{\bxpz@g@dpflag}{\bxpz@g@dp}}} \def\bxpz@dp@drawl@val{{}{0}} \def\bxpz@addto@dp@nums#1#2{% \bgroup \@tempdima#1\relax \@tempdimb#2\relax \xdef\bxpz@g@dp{% \bxpz@g@dp\strip@pt\@tempdima\space\strip@pt\@tempdimb\space}% \egroup} \def\bxpz@dp@clear{\let\bxpz@dp\relax} %%------ Strokes with dash-pattern in effect %% pict2e original \pIIe@strokeGraph \def\bxpz@pIIe@strokeGraph{\begingroup \@tempswafalse\pIIe@drawGraph} % \bxpz@stroke@graph \def\bxpz@stroke@graph{\begingroup \bxpz@draw@graph} \def\bxpz@draw@graph{% \ifx\bxpz@dp\relax \let\bxpz@dp\bxpz@dp@mode \fi \ifx\bxpz@dp\bxpz@dp@drawl@val \let\bxpz@setdash\@empty \else \ifbxpz@eepic@dotl \roundcap \fi \bxpz@set@dp\bxpz@dp \ifnum \bxpz@dpflag=\@ne \bxpz@adj@linewidth \fi \xdef\bxpz@setdash{\bxpz@beginarray@op\space\bxpz@dpary \bxpz@endarray@op\space\bxpz@setdash@phase\space \bxpz@setdash@op\space}% \fi \edef\x{\pIIe@debug@comment\space\pIIe@scale@PTtoBP}% \edef\x{\x\space\bxpz@setdash\strip@pt\@wholewidth\space \pIIe@setlinewidth@op}% \edef\y{\pIIe@stroke@op}% \expandafter\pIIe@code\expandafter{% \expandafter\x\the\pIIe@GRAPH\space\y}% \global\pIIe@GRAPH{}\xdef\pIIe@CPx{}\xdef\pIIe@CPy{}% \endgroup \let\bxpz@dp\relax} %% \bxpz@set@dp\DP \def\bxpz@set@dp#1{\expandafter\bxpz@set@dp@a#1} \def\bxpz@set@dp@a#1#2{% \def\bxpz@dpary{#2}\def\bxpz@dpflag{#1}} \def\bxpz@adj@linewidth{% \ifdim\@wholewidth<0.2pt \@wholewidth=2\@wholewidth \else\ifdim\@wholewidth<1pt \@wholewidth=0.75\@wholewidth \advance\@wholewidth0.25pt \fi\fi} %%------ Circles & ovals % pict2e's original \@arc command \let\bxpz@pIIe@arc\@arc %% \@arc{}{}{} % If the arguments obey the format shown above then passes them % to \bxpz@eepic@arc; otherwise passes them to \bxpz@pIIe@arc. \def\@arc{\@ifnextchar[{\@arc}{\bxpz@arc@a}} \def\bxpz@arc@a#1{% \def\bxpz@argi{#1}\futurelet\bxpz@tok\bxpz@arc@b} \def\bxpz@arc@b{% \ifx\bxpz@tok\bgroup \expandafter\bxpz@arc@c \else \bxpz@pIIe@arc\bxpz@argi \fi} \def\bxpz@arc@c#1{% \def\bxpz@doargii{\bxpz@do{#1}}\futurelet\bxpz@tok\bxpz@arc@d} \def\bxpz@arc@d{% \ifx\bxpz@tok\bgroup \expandafter\bxpz@arc@f \else \expandafter\bxpz@arc@e \fi} \def\bxpz@arc@e{% \bxpz@pIIe@arc\bxpz@argi \let\bxpz@do\@empty\bxpz@doargii} \def\bxpz@arc@f{% \def\bxpz@do##1{\bxpz@eepic@arc\bxpz@argi{##1}}\bxpz@doargii} %% \bxpz@eepic@arc{}{}{} \def\bxpz@eepic@arc#1#2#3{% \bgroup \@tempdima=#2\p@ \@tempdimb=#3\p@ \bxpz@conv@arc@param \@tempdimc=#1\unitlength \divide\@tempdimc\tw@ \xdef\bxpz@g@tmpa{% {\the\@tempdimc}{\strip@pt\@tempdima}{\strip@pt\@tempdimb}}% \egroup \if@tempswa \def\bxpz@do{\pIIe@arc{\z@}{\z@}}% \pIIe@moveto\z@\z@ \expandafter\bxpz@do\bxpz@g@tmpa \pIIe@closepath\pIIe@fillGraph \else \def\bxpz@do{\pIIe@arc[1]{\z@}{\z@}}% \expandafter\bxpz@do\bxpz@g@tmpa \pIIe@strokeGraph \fi} %% \bxpz@conv@arc@param % Converts tpic degree arguments (s, e) to pict2e ones (S, E); values % of (\@tempdima, \@tempdimb) are changed from (s, e) to (S, E). % Let (S', E') = -(180/pi)(s, e); then: % * if e - s >= 2pi (ie. S' - 360 >= E') then (S, E) = (0, 360) % so that a whole circle is drawn; % * otherwise, adjust S' and E' to values in range [0, 360), and then % if S' < E' then decrement E' by 360, since in tpic an arc is % always drawn in clockwise direction and thus S' >= E' must hold. % Note: After scaling by 180/pi, degree values are rounded to multiples % of 2^(-10). This rounding eliminates errors in the case of 'common % angles' such as 15deg, while generally it enlarges the maximum possible % error by factor about two. \def\bxpz@conv@arc@param{% %\typeout{BEFORE:\the\@tempdima/\the\@tempdimb}% \bxpz@conv@arc@param@a\@tempdima \bxpz@conv@arc@param@a\@tempdimb \@tempdimc\@tempdima \dimen@360\p@ \advance\@tempdimc-\dimen@ \ifdim \@tempdimb>\@tempdimc \bxpz@conv@arc@param@b\@tempdima \bxpz@conv@arc@param@b\@tempdimb \ifdim \@tempdima<\@tempdimb \advance\@tempdimb-\dimen@ \fi \else \@tempdima\z@ \@tempdimb\dimen@ \fi %\typeout{AFTER : \the\@tempdima/\the\@tempdimb}% } \def\bxpz@conv@arc@param@a#1{% #1=57.29577951#1\advance#132sp \divide#164\multiply#1-64\relax} \def\bxpz@conv@arc@param@b#1{% \@whiledim#1>\z@ \do{\advance#1-\dimen@}% \@whiledim#1<\z@ \do{\advance#1\dimen@}}% %%<*> \ellipse[*]{}{} \def\ellipse{% \@ifstar{\begingroup\@tempswatrue\bxpz@ellipse}% {\begingroup\@tempswafalse\bxpz@ellipse}} \def\bxpz@ellipse#1#2{% \@tempdima=#1\unitlength\@tempdimb=#2\unitlength \ifdim\@tempdima<\z@ \@tempdima\z@ \fi \ifdim\@tempdimb<\z@ \@tempdimb\z@ \fi \divide\@tempdima\tw@ \divide\@tempdimb\tw@ \bxpz@ellipse@a \if@tempswa \pIIe@fillGraph \else \pIIe@strokeGraph \fi \endgroup} \def\bxpz@ellipse@a{% \buttcap \@ovxx\@tempdima \@ovyy\@tempdimb \@ovdx=0.55228475\@ovxx \@ovdy=0.55228475\@ovyy \pIIe@moveto\@ovxx\z@ \pIIe@curveto\@ovxx\@ovdy\@ovdx\@ovyy\z@\@ovyy \pIIe@curveto{-\@ovdx}\@ovyy{-\@ovxx}\@ovdy{-\@ovxx}\z@ \pIIe@curveto{-\@ovxx}{-\@ovdy}{-\@ovdx}{-\@ovyy}\z@{-\@ovyy}% \pIIe@curveto\@ovdx{-\@ovyy}\@ovxx{-\@ovdy}\@ovxx\z@ \pIIe@closepath} %%------ Chaikin spline curves %%<*> \spline % Same as \polyline in pict2e, except that \bxpz@stroke@graph is % used instead of \pIIe@strokeGraph. \def\spline{\bxpz@firsttrue\bxpz@spline@a} \def\bxpz@spline@a(#1,#2){% \@killglue \@xdim=#1\unitlength \@ydim=#2\unitlength \pIIe@moveto\@xdim\@ydim \@ifnextchar\lp@r{\bxpz@spline@b}% {\ifnum \bxpz@warn@wnpnt \ignorespaces}} \def\bxpz@spline@b(#1,#2){% % M1:previous midpoint (\@ovdx,\@ovdy) % P1:previous point (\@xdim,\@ydim) % M2:current midpoint (\@ovxx,\@ovyy) % P2:current point (\@tempdima,\@tempdimb) \@tempdima=#1\unitlength\@tempdimb=#2\unitlength \@ovxx\@tempdima \advance\@ovxx\@xdim \divide\@ovxx\tw@ \@ovyy\@tempdimb \advance\@ovyy\@ydim \divide\@ovyy\tw@ \ifbxpz@first \pIIe@lineto\@ovxx\@ovyy \bxpz@firstfalse \else\bgroup % quadratic Bezier curve M1--P1--M2 \pIIe@bezier@QtoC\@ovdx\@xdim\@ovdx \pIIe@bezier@QtoC\@ovdy\@ydim\@ovdy \pIIe@bezier@QtoC\@ovxx\@xdim\@xdim \pIIe@bezier@QtoC\@ovyy\@ydim\@ydim \pIIe@curveto\@ovdx\@ovdy\@xdim\@ydim\@ovxx\@ovyy \egroup\fi \@ovdx\@ovxx \@ovdy\@ovyy \@xdim\@tempdima \@ydim\@tempdimb \@ifnextchar\lp@r{\bxpz@spline@b}{\bxpz@spline@c}} \def\bxpz@spline@c{% \pIIe@lineto\@xdim\@ydim \bxpz@stroke@graph\ignorespaces} %%------ Functions not dependent on special features %%<*> \allinesthickness % In pict2e \linethickness setting applies to all kinds of lines. % For better compatibility with eepic, \allinesthickness changes % (without much aim) the LaTeX "line fonts". \def\allinethickness{\bxpz@thicklinefont \linethickness} \def\bxpz@thicklinefont{\let\@linefnt\tenlnw\let\@circlefnt\tencircw} %%<*> \Thicklines % Sets line-width to 1.5 times the width of \thicklines. \def\Thicklines{\bxpz@thicklinefont \@wholewidth\fontdimen8\tenlnw \linethickness{1.5\@wholewidth}} %%<*> \picsquare % Not of much use. \def\picsquare{% \hskip-\@halfwidth \vrule\@width\@wholewidth\@height\@halfwidth\@depth\@halfwidth\relax} %%<*> \multiputlist % \multiputlist(X,Y)(DX,DY)[tbrl]{ITEM,...} \def\multiputlist(#1,#2)(#3,#4){% \@xdim=#1\unitlength \@ydim=#2\unitlength \@killglue \@ifnextchar[{\bxpz@multiputlist@a{#3}{#4}}% {\bxpz@multiputlist@a{#3}{#4}[]}} \def\bxpz@multiputlist@a#1#2[#3]#4{% \@for\bxpz@x:={#4}\do{% \raise\@ydim\hb@xt@\z@{\kern\@xdim \@imakepicbox(0,0)[#3]\bxpz@x \hss}% \advance\@xdim#1\unitlength \advance\@ydim#2\unitlength}% \ignorespaces} %%<*> \matrixput % \matrixput(X,Y)(DX1,DY1){N1}(DX2,DY2){N2}{ITEM} \def\matrixput(#1,#2)(#3,#4)#5(#6,#7)#8#9{% \bgroup \@xdim\z@ \@ydim\z@ \setbox\bxpz@boxa\hbox{% \@multicnt=#8\relax \@whilenum\@multicnt>\z@\do{% \raise\@ydim\hb@xt@\z@{\kern\@xdim #9\hss}% \advance\@xdim#6\unitlength \advance\@ydim#7\unitlength \advance\@multicnt\m@ne}}% \@xdim=#1\unitlength \@ydim=#2\unitlength \@killglue \@multicnt=#5\relax \@whilenum\@multicnt>\z@\do{% \raise\@ydim\hb@xt@\z@{\kern\@xdim \copy\bxpz@boxa\hss}% \advance\@xdim#3\unitlength \advance\@ydim#4\unitlength \advance\@multicnt\m@ne}% \egroup \ignorespaces} %%<*> \grid % \grid(W,H)(DW,DH)[X0,Y0] \def\grid(#1,#2)(#3,#4){% \@ovxx=#1\unitlength \@ovyy=#2\unitlength \edef\bxpz@gridx{#3}\edef\bxpz@gridy{#4}% \@ifnextchar[{\bxpz@grid@a}{\bxpz@grid@a[,]}} \def\bxpz@grid@a[#1,#2]{% \@killglue \let\spacewidth\@ovri \setbox\bxpz@boxa\hbox{\space}\@ovri=\wd\bxpz@boxa \@tempdimc=\z@ \@ovdx=\bxpz@gridx\unitlength \ifx @#1@\bxpz@uselblfalse \else \@tempdima=#1\p@ \bxpz@uselbltrue \fi \@tempdimb\@ovxx \advance\@tempdimb.5\@ovdx \divide\@tempdimb\@ovdx \@tempcnta\@tempdimb \advance\@tempcnta\@ne \@whilenum\@tempcnta>\z@ \do{% \hb@xt@\z@{\kern\@tempdimc \kern-\@halfwidth \vrule\@height\@ovyy\@width\@wholewidth \hss}% \ifbxpz@uselbl \bxpz@makelbl \setbox\bxpz@boxa\hb@xt@\z@{\hss\copy\bxpz@boxa\hss}% \hb@xt@\z@{\kern\@tempdimc \vtop{\kern\epicbottomgridlabelsep\copy\bxpz@boxa}\hss}% \raise\@ovyy\hb@xt@\z@{\kern\@tempdimc \vbox{\copy\bxpz@boxa\kern\epictopgridlabelsep}\hss}% \fi \advance\@tempdima\bxpz@gridx\p@ \advance\@tempdimc\@ovdx \advance\@tempcnta\m@ne}% \@tempdimc=\z@ \@ovdy=\bxpz@gridy\unitlength \ifx @#2@\bxpz@uselblfalse \else \@tempdima=#2\p@ \bxpz@uselbltrue \fi \@tempdimb\@ovyy \advance\@tempdimb.5\@ovdy \divide\@tempdimb\@ovdy \@tempcnta\@tempdimb \advance\@tempcnta\@ne \@whilenum\@tempcnta>\z@ \do{% \raise\@tempdimc\hb@xt@\z@{% \vrule\@height\@halfwidth\@depth\@halfwidth\@width\@ovxx \hss}% \ifbxpz@uselbl \bxpz@makelbl \setbox\bxpz@boxa\vbox to\z@{\vss\copy\bxpz@boxa\vss}% \raise\@tempdimc\hb@xt@\z@{% \hss\copy\bxpz@boxa\kern\epicsidegridlabelsep}% \raise\@tempdimc\hb@xt@\z@{\kern\@ovxx \kern\epicsidegridlabelsep\copy\bxpz@boxa\hss}% \fi \advance\@tempdima\bxpz@gridy\p@ \advance\@tempdimc\@ovdy \advance\@tempcnta\m@ne}% \let\spacewidth\@undefined \ignorespaces} \def\bxpz@makelbl{% \edef\bxpz@tmpa{\noexpand\bxGridLabelForm{\strip@pt\@tempdima}}% \setbox\bxpz@boxa\hbox{\bxpz@tmpa}} %<+> \bxGridLabelForm{} % It must output the formatted string for value . which is % given as numerals (e.g. 72 or 10.333333). % The default implementation uses decimal strings of the value % rounded to integers. \def\bxGridLabelForm#1{\@tempdima#1\p@ \advance\@tempdima.5\p@ \expandafter\bxpz@gridlabelform@a\the\@tempdima\@nil} \def\bxpz@gridlabelform@a#1.#2\@nil{#1} %%<*> \putfile{}{} \def\putfile#1#2{% \def\bxpz@body{#2}% \let\bxpz@dofile\bxpz@putfile@a \let\bxpz@dofile@skipped\relax \bxpz@dofile@ifexists{#1}} \let\bxpz@fhread\@inputcheck \def\bxpz@putfile@a#1{% \openin\bxpz@fhread=#1\relax \let\bxpz@tmpa\relax \ifeof\bxpz@fhread\else \expandafter\bxpz@putfile@b \fi \closein\bxpz@fhread \ignorespaces} \def\bxpz@putfile@b{% \read\bxpz@fhread to\bxpz@line \ifx\bxpz@line\bxpz@line@par \let\bxpz@line\@empty \fi \edef\bxpz@line{\bxpz@line\space\space}% \expandafter\bxpz@putfile@c\bxpz@line \ifeof\bxpz@fhread\else \expandafter\bxpz@putfile@b \fi} \def\bxpz@putfile@c#1 {% \ifx @#1@\relax \else \ifx\bxpz@tmpa\relax \def\bxpz@tmpa{#1}% \else \put(\bxpz@tmpa,#1){\bxpz@body} \let\bxpz@tmpa\relax \fi \expandafter\bxpz@putfile@c \fi} \def\bxpz@line@par{\par} %% \bxpz@dofile@ifexists \newif\ifbxpz@dofile@ok \def\bxpz@InputIfFileExists#1#2{% \IfFileExists{#1}{\bxpz@dofile@ifex@a\bxpz@dofile{#1}}} \let\bxpz@ltx@InputIfFileExists\InputIfFileExists \def\bxpz@dofile@ifexists#1{% \let\InputIfFileExists\bxpz@InputIfFileExists \bxpz@dofile@okfalse \@iinput{#1}% \ifbxpz@dofile@ok\else \bxpz@dofile@ifex@a \bxpz@dofile@skipped \fi} \def\bxpz@dofile@ifex@a{\bxpz@dofile@oktrue \let\InputIfFileExists\bxpz@ltx@InputIfFileExists} %%------ \ifbxpz@safe %----<*safe> %%<*> \[no]eepicdottedlines % No-op in safe mode. \let\eepicdottedlines\relax \let\noeepicdottedlines\relax \else %----<*!safe> %%<*> \[no]eepicdottedlines \let\eepicdottedlines\bxpz@eepic@dotltrue \let\noeepicdottedlines\bxpz@eepic@dotlfalse %% \bxpz@redefine@linestyle\LSCMD{}{} \def\bxpz@redefine@linestyle#1#2#3{% \expandafter\bxpz@redefine@linestyle@a \csname bxpz@raw@\expandafter\@gobble\string#1\expandafter\endcsname \csname bxpz@#2\expandafter\endcsname \csname bxpz@LS/#2/#3\expandafter\endcsname \csname bxpz@SLS/#2\endcsname #1{#2}{#3}} \def\bxpz@redefine@linestyle@a#1#2#3#4#5#6#7{% % \[bxpz@raw@LSCMD]\[bxpz@]\[bxpz@LS//] % \[bxpz@SLS/]\LSCMD{}{} \let#1#5\let#3#5\def#5{\def#2{#7}#3\aftergroup#4}% \def#4{\csname bxpz@LS/#6/#2\endcsname}} % redefine linestyle commands \bxpz@redefine@linestyle\buttcap{lcap}{0} \bxpz@redefine@linestyle\roundcap{lcap}{1} \bxpz@redefine@linestyle\squarecap{lcap}{2} \bxpz@redefine@linestyle\miterjoin{ljoin}{0} \bxpz@redefine@linestyle\roundjoin{ljoin}{1} \bxpz@redefine@linestyle\beveljoin{ljoin}{2} % default values of states \let\bxpz@lcap\bxpz@dflt@linecap \let\bxpz@ljoin\bxpz@dflt@linejoin %% patch to \pIIe@circle % \buttcap moved one-level outside. \def\pIIe@circle#1{% \buttcap \begingroup \pIIe@qcircle[1]\z@{#1}\pIIe@qcircle \@ne{#1}% \pIIe@qcircle \tw@{#1}\pIIe@qcircle\thr@@{#1}% \endgroup} \fi %---- \endinput %%------ % % List of epic features not contained in pict2e % %\multiputlist(X,Y)(DX,DY)[tbrl]{ITEM,...} %\matrixput(X,Y)(DX1,DY1){N1}(DX2,DY2){N2}{ITEM} %\grid(W,H)(DW,DH)[X0,Y0] %\dottedline[CHAR]{DOTGAP}(X1,Y1)...(XN,YN) %\dashline[STRETCH]{DASHLEN}[DOTGAP](X1,Y1)...(XN,YN) %\drawline[STRETCH](X1,Y1)...(XN,YN) %\jput(X,Y){ITEM} %\begin{dottedjoin}[C]{G} ... \end{dottedjoin} %\begin{dashjoin}[S]{D}[G] ... \end{dashjoin} %\begin{drawjoin}[S] ... \end{drawjoin} %\picsquare %\putfile{FILE} %\dashlinestretch %\drawlinestretch % % List of eepic features not contained in pict2e % %\maxovaldimen (for \oval) %\allinethickness %\Thicklines %\path(X1,Y1)..(Xn,Yn) %\spline(X1,Y1)..(Xn,Yn) %\ellipse[*]{XDIAM}{YDIAM} %\arc{DIAM}{SANG}{EANG} *angle in radian, +ve = clockwise %\filltype{FILL} / \blacken / \whiten / \shade % %% EOF