You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
233 lines
9.3 KiB
233 lines
9.3 KiB
% 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 <outer size(s)> {<text>}
|
|
% \shadowbox <outer size(s)> {<text>}
|
|
% 2) thick frame (.85pt) --- see remark 4:
|
|
% \Roundbox <outer size(s)> {<text>}
|
|
% \Shadowbox <outer size(s)> {<text>}
|
|
% Outer size is optional and can have the form either `height <dimen>' or
|
|
% `width <dimen>', 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 <number>
|
|
% where
|
|
% -1 <= <number> <= 7
|
|
% and
|
|
% size of corner = 2*(1+<number>)pt for <number> >= 0.
|
|
%
|
|
%
|
|
% REMARKS:
|
|
% 1. <outer size(s)> 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
|
|
% ------------------------------------------------------------------------
|
|
|