% FILE ROUNDBOX.TEX, version 1.1 (14.VIII.1990) % ------------------------------------------------------------------------ % AUTHOR: % Garry Glendown (see in TUGboat Vol. 10 (1989) no.3 pp.386--387) % ------------------------------------------------------------------------ % MODIFICATOR: % B. Jackowski, Tatrza\'nska 6/1, 80-331 Gda\'nsk, POLAND % % Modification includes shadow boxes, possibility of defining outer % sizes (vertical and horizontal), and possibility of choosing various % set of corners. % ``Degenerated'' roundboxes (rectangles) are also available, % although because of round-off errors (or BJ errors?) they don't % look nice sometimes. % ------------------------------------------------------------------------ % USAGE: % 1) thin frame (.4pt): % \roundbox {} % \shadowbox {} % 2) thick frame (.85pt) --- see remark 4: % \Roundbox {} % \Shadowbox {} % Outer size is optional and can have the form either `height ' or % `width ', or both---the order does not matter. This convention % is identical to that of `\hrule' and `\vrule'. You can even specify % depth; however, it is ignored. % % Usage of these commands can be preceeded by fixing an appropriate set % of corners: % \setcorners % where % -1 <= <= 7 % and % size of corner = 2*(1+)pt for >= 0. % % % REMARKS: % 1. is/are optional and MUST NOT appear in braces. % 2. Errors in this parameter are not checked, hence odd results may occur. % 3. I made some names longer and add \@ as a letter, otherwise they % might interfere. % 4. Thick corners are said to have line thickness 0.8pt, however the % corrected value 0.85pt yields better results (for 300dpi fonts). % 5. Shadows do not change the size of the box (my shadow does not increase % my weight). % 6. I'm not very happy about the elegancy of the code. I hope that some day % I or somebody else will improve it. % 7. Is it reasonable to employ also scaled circle fonts? % ------------------------------------------------------------------------ % \catcode`\@=11 % % ------------------------------------------------------------------------ % DECLARATIONS % ------------------------------------------------------------------------ % \newbox\t@mpb@x \newdimen\t@mpwd \newdimen\t@mpht \newdimen\t@mpth % \newdimen\xt@mpwd % used for making \newdimen\xt@mpht % shadows instead \newdimen\xt@mpdp % of phantoms % \newdimen\c@rnwd % width of corner (first --- doubled, finally --- true) \newdimen\c@frwd % doubled width of corner + width of frame \newdimen\c@rnsh % corner shift \newdimen\sh@dsh % shadow shift % % ------------------------------------------------------------------------ % QUARTER CIRCLES: % ------------------------------------------------------------------------ %\font\circle=circle10 \font\circlew=circlew10 \font\circle=lcircle1 \font\circlew=lcirclew % ------------------------------------------------------------------------ \newcount\cornern@ \def\@vailcorn{\immediate \write16{! AVAILABLE CORNER SETS: -1,0,1,2,...,9 --- 4th set assumed}% \cornern@=4} \def\s@tc@rn@rs{% \ifnum\cornern@<-1\@vailcorn\fi \ifnum\cornern@>9\@vailcorn\fi \ifnum\cornern@=-1 % degenerated corner set; % in fact, only the width of \luq@tr is important, the corners are % not drawn, simply the rules are longer. \def\Ph@ntc@rn{\vbox to 0.8pt{\vss\hbox to 1.6pt{}}}% \def\ph@ntc@rn{\vbox to 0.4pt{\vss\hbox to 0.8pt{}}}% \def\luq@tr{\ifx\cf\circlew \Ph@ntc@rn \else \ph@ntc@rn \fi}% \else \multiply\cornern@4 \edef\ruq@tr{{\noexpand\cf\char\the\cornern@}}% right upper qtr \advance\cornern@ 1 \edef\rlq@tr{{\noexpand\cf\char\the\cornern@}}% left upper qtr \advance\cornern@ 1 \edef\llq@tr{{\noexpand\cf\char\the\cornern@}}% left lower qtr \advance\cornern@ 1 \edef\luq@tr{{\noexpand\cf\char\the\cornern@}}% left upper qtr \fi} \def\setcorners{\afterassignment\s@tc@rn@rs \cornern@ = } \setcorners 4 % G. Glendown preferred set no 2 % ------------------------------------------------------------------------ % ROUND BOXES: % ------------------------------------------------------------------------ % \def\RB@x#1#2{% #1 - rule thickness, #2 - text % known: % \t@mpwd \t@mpht \t@mpth=#1\relax \setbox\t@mpb@x=\hbox{\luq@tr}\c@rnwd=\wd\t@mpb@x \ifdim\c@rnwd=\z@ \c@rnwd=2\t@mpth\fi \c@frwd=\t@mpth % \c@frwd is globally copied to \sh@dsh in % \s(S)hadowB@x \advance \c@frwd \c@rnwd \c@rnsh=-\t@mpth\advance \c@rnsh \c@rnwd \setbox\t@mpb@x=\hbox{#2}% \xt@mpht=\ht\t@mpb@x % pha \xt@mpwd=\wd\t@mpb@x % nt \xt@mpdp=\dp\t@mpb@x % om... \setbox\t@mpb@x=\hbox \ifdim\t@mpwd<\c@frwd spread \c@rnwd \else to \t@mpwd \fi {\hss\box\t@mpb@x\hss}% \advance\t@mpht-\c@frwd \ifdim\t@mpht<\z@ \t@mpht=\z@\fi \setbox\t@mpb@x=\hbox to \wd\t@mpb@x{\vrule width\t@mpth\hss \vbox \ifdim\t@mpht>\z@ to \t@mpht\fi {\vss\box\t@mpb@x\vss}% \hss\vrule width\t@mpth}% \c@rnwd=0.5\c@rnwd \t@mpwd=\wd\t@mpb@x \vbox spread -\c@rnsh{% \offinterlineskip \vss \hbox to \t@mpwd{\ifnum\cornern@=-1 \else \hbox to \c@rnwd{\luq@tr\hss}% \fi \leaders\hrule height\t@mpth\hfil \ifnum\cornern@=-1 \else \hbox to \c@rnwd{\hss\ruq@tr\kern-\c@rnsh}% \fi} \box\t@mpb@x \hbox to \t@mpwd{\ifnum\cornern@=-1 \else \hbox to \c@rnwd{\llq@tr\hss}% \fi \leaders\hrule height\t@mpth\hfil \ifnum\cornern@=-1 \else \hbox to \c@rnwd{\hss\rlq@tr\kern-\c@rnsh}% \fi} \vss }% }% end \def\RB@x % \def\roundbox#1#{\setbox\t@mpb@x=\hbox{\vrule #1}% Attention! trick! \t@mpwd=\wd\t@mpb@x \t@mpht=\ht\t@mpb@x \roundB@x} \def\roundB@x#1{\font\cf=lcircle1 \RB@x{.4pt}{#1}} % \def\Roundbox#1#{\setbox\t@mpb@x=\hbox{\vrule #1}% Attention! trick! \t@mpwd=\wd\t@mpb@x \t@mpht=\ht\t@mpb@x \RoundB@x} \def\RoundB@x#1{\font\cf=lcirclew \RB@x{.85pt}{#1}} % % ------------------------------------------------------------------------ % SHADOW BOXES: % ------------------------------------------------------------------------ % \def\RShB@x#1{% #1 - rule thickness % known: % \t@mpwd \t@mpht % \xt@mpwd \xt@mpht \xt@mpdp \t@mpth=#1\relax \setbox\t@mpb@x=\hbox{\luq@tr}\c@rnwd=\wd\t@mpb@x \ifdim\c@rnwd=\z@ \c@rnwd=2\t@mpth\fi \c@frwd=\t@mpth % \c@frwd is globally copied to \sh@dsh in % \s(S)hadowB@x \advance \c@frwd \c@rnwd \c@rnsh=-\t@mpth\advance \c@rnsh \c@rnwd \setbox\t@mpb@x=\hbox \ifdim\t@mpwd<\c@frwd spread \c@rnwd \else to \t@mpwd \fi {\hss\vrule width \z@ height\xt@mpht depth\xt@mpdp \hskip\xt@mpwd\hss}% \setbox\t@mpb@x=\vbox \ifdim\t@mpht>\z@ to \t@mpht\fi {\vss\box\t@mpb@x\vss}% \c@rnwd=0.5\c@rnwd \t@mpwd=\wd\t@mpb@x \setbox\t@mpb@x=\hbox to \t@mpwd{\vbox \ifnum\cornern@=-1 spread\c@rnwd \fi {\vss\box\t@mpb@x}\hss\vrule width\t@mpth}% \vbox spread -\c@rnsh{% \offinterlineskip \vss \hbox to \t@mpwd{\hfil \ifnum\cornern@=-1 \else \hbox to \c@rnwd{\hss\ruq@tr\kern-\c@rnsh}% \fi} \box\t@mpb@x \hbox to \t@mpwd{\ifnum\cornern@=-1 \else \hbox to \c@rnwd{\llq@tr\hss}% \fi \leaders\hrule height\t@mpth\hfil \ifnum\cornern@=-1 \else \hbox to \c@rnwd{\hss\rlq@tr\kern-\c@rnsh}% \fi} \vss }% }% end \def\RShB@x % \def\shadowbox#1#{\def\p@r@m{#1}\shadowB@x} \def\shadowB@x#1{\vbox{\hbox{\roundbox\p@r@m{#1}\global\sh@dsh\c@frwd \kern-\t@mpwd \kern0.5\sh@dsh \lower0.5\sh@dsh \hbox{\font\cf=lcircle1 \RShB@x{.4pt}}% \kern-0.5\sh@dsh} \kern-0.5\sh@dsh}} % \def\Shadowbox#1#{\def\p@r@m{#1}\ShadowB@x} \def\ShadowB@x#1{\vbox{\hbox{\Roundbox\p@r@m{#1}\global\sh@dsh\c@frwd \kern-\t@mpwd \kern0.5\sh@dsh \lower0.5\sh@dsh \hbox{\font\cf=lcirclew \RShB@x{.85pt}}% \kern-0.5\sh@dsh} \kern-0.5\sh@dsh}} % % ------------------------------------------------------------------------ % \catcode`\@=12 % % ------------------------------------------------------------------------ \endinput % ------------------------------------------------------------------------ % END OF ROUNDBOX.TEX % ------------------------------------------------------------------------