% sha.sty -- Donald Arseneau
% \pixel is the output pixel size.  Default is 300 dpi.
% 
% Shading *should* be part of a dvi-driver standard.  But only postscript
% handles it properly.
% 
% You can shade from within TeX, but it is **VERY** inefficient...
%
\newdimen\pixel
\pixel=1in \divide\pixel300
%
%  The contents of \shadebox define the shading pattern.
%
\newbox\shadebox
\setbox\shadebox\hbox{\kern \pixel
   \vrule\@height2\pixel\@depth-1\pixel \@width\pixel
   \kern \pixel
   \vrule\@height4\pixel\@depth-3\pixel \@width\pixel
}
%
% \shade works like \mbox, except the contents are shaded.  The height
% and depth of the shaded area is at least the height and depth of ")".
% There is one extra space entered at the beginning and end of the 
% parameter text.
%
\def\shade#1{\leavevmode\begingroup
 \setbox\@tempboxa\hbox{ {#1} \mathstrut}%
 \rlap{\lower\dp\@tempboxa\hbox to\wd\@tempboxa{\shadefill\@tempboxa}}%
 \box\@tempboxa \endgroup}
%
% \shadefill{boxnumber} draws a block of shading with height equal to 
% the height PLUS depth of the box number. The width of the shading is
% flexible: 0pt plus 1 fill (like \hfill).
%
\def\shadefill#1{\setbox\@tempboxa\vbox to\z@{\vss
   \@tempdima\ht#1\advance\@tempdima\dp#1%
   \cleaders \copy\shadebox \vskip\@tempdima}%
  \cleaders\box\@tempboxa \hfill}
%
% \shadecells is for shading {tabular} entries.  It has the same
% usage as \cline, except that instead of drawing a line under 
% a range of entries, it shades over them.
%
\def\shadecells#1{\@shadecells[#1]}
\def\@shadecells[#1-#2]{\noalign{\global\@cla#1\relax
\global\advance\@cla\m@ne
\ifnum\@cla>\z@\global\let\@gtempa\@shcellA\else
  \global\let\@gtempa\@shcellB\fi
\global\@clb#2\relax
\global\advance\@clb-\@cla}\@gtempa}
%
\def\@shcellA{\multispan\@cla&\@shcellB}
%
\def\@shcellB{\multispan\@clb \unskip 
 \shadefill\@arstrutbox
\cr}
%
\endinput
% % sample:
% \documentstyle[sha]{article}
% 
% \begin{document}
% 
% \noindent
% \begin{tabular}{c@{\extracolsep{12pt}}cccccc}
% 1&2&3&4&5&6&7\\
% one&two&three&four&five&six&seven\\\shadecells{3-4}
% Doc&Happy&Sleepy&Sneezy&Bashful&Grumpy&Dopey\\\shadecells{1-1}\shadecells{6-6}
% Sunday&Monday&Tuesday&Wednesday&Thursday&Friday&Saturday\\\shadecells{4-6}
% \end{tabular}
% 
% Test \shade{this} and even something \fbox{\shade{more}} special!
% \end{document}

