diff options
Diffstat (limited to 'macros/generic/shade')
-rw-r--r-- | macros/generic/shade/README | 29 | ||||
-rw-r--r-- | macros/generic/shade/description.pdf | bin | 0 -> 25940 bytes | |||
-rw-r--r-- | macros/generic/shade/description.tex | 45 | ||||
-rw-r--r-- | macros/generic/shade/shade.mf | 41 | ||||
-rw-r--r-- | macros/generic/shade/shade.tex | 45 |
5 files changed, 160 insertions, 0 deletions
diff --git a/macros/generic/shade/README b/macros/generic/shade/README new file mode 100644 index 0000000000..10b6e28bab --- /dev/null +++ b/macros/generic/shade/README @@ -0,0 +1,29 @@ +Copyright 1993, 2011 Peter Schmitt, schmitp7 at univie dot ac dot at + +This shade package is released under the LaTeX Project Public License, +version 1, or (at your option) any later version. It includes this +README, description.tex, shade.mf, shade.tex, and the derived file +description.pdf + +Version 1 was released March 21, 1993. +License clarified in 2011. + +A `frequently asked question' is for ways to produce shaded boxes. + +Since the answers usually (just as recently) point either to PostScript +\special's, PiCTeX, PSTricks, etc. it seems that a `simpler' and easier to use version +is not readily available -- though I did not check this. + +A small and simple approach to shaded boxes is the use of a special font +providing shaded rectangles, and some macros which automatically compose the +desired box from these characters. + +Since, of course, the finest shading can be achieved by using single pixels +for the pattern, the best shading pattern is *device dependent*. +Furthermore, one generally defined shading pattern would imply the danger, +that - because of rounding errors - at the boundaries (between two of the +characters) `lines' would occur, and that the pattern would not look completely +uniform. Consequently, since different fonts are to be used for different +printers, the dvi file is *device dependent* in this sense, too, though the +code - both for the macros and for the metafont description - is device +independent. diff --git a/macros/generic/shade/description.pdf b/macros/generic/shade/description.pdf Binary files differnew file mode 100644 index 0000000000..4b239d81b7 --- /dev/null +++ b/macros/generic/shade/description.pdf diff --git a/macros/generic/shade/description.tex b/macros/generic/shade/description.tex new file mode 100644 index 0000000000..fde2daa6a6 --- /dev/null +++ b/macros/generic/shade/description.tex @@ -0,0 +1,45 @@ +% shade/description.tex +% see README for licensing and contact information. + +\magnification=\magstep1 +\parindent0pt \parskip 3pt +\input shade.tex + +{\tt SHADE} is a \TeX\ tool that can be used to produce shaded boxes +using neither PostScript nor Pic\TeX. + +% The syntax is: + +\shade{This text will appear on a shaded background!} + +The shading macro first packs its argument into an hbox. + +\shade{\vbox{\hsize 5cm + \leftskip=0pt plus 1fil\rightskip=0pt plus 1fil + \parfillskip=0pt + Then it measures the dimensions of this box and produces a + shaded box slightly larger then this box, using the font + shade produced by {\tt shade.mf}. Finally it + puts the box back and overlays it with the shaded box. + \par + }} + +Since the best shading is achieved at the lowest possible resolution, +the font \shade{SHADE} is {\bf not device independent} --- it uses +the printer resolution. Therefore the .dvi file is +{\bf not device independent}, either. +The macro code, however, {\bf is device independent}. +This method was used because otherwise shading, and in particular +the boundaries between two shading characters, could turn out to be not +completely uniform. +For the same reason, the font should only be used at its true size. + +The {\tt shade} package consists of three main files: + {\tt shade.mf, % MetaFont file for shading font + shade.tex, % macro file be used with LaTeX, too + description.tex. % this file, + % which can be processed by TeX as a demo file + } +It was tested with a HP LaserJet II plus. + +\bye diff --git a/macros/generic/shade/shade.mf b/macros/generic/shade/shade.mf new file mode 100644 index 0000000000..0fc67b3d17 --- /dev/null +++ b/macros/generic/shade/shade.mf @@ -0,0 +1,41 @@ +%%% shade/shade.mf +%%% shade font for use with shade.tex/sty +%%% see README for licensing and contact information. + +mode_setup; +magnification=1000; +font_identifier "Shade"; +font_coding_scheme "Shade Style Matrix"; +font_size 10pt#; + +%%% a = side of smallest shaded square (3x3 pixels) + a#:=(3/pixels_per_inch)*1in#; + define_pixels(a); +%%% greybox produces a shaded rectangle: +%%% height 2^H*a +%%% width 2^W*a +%%% ... +%%% it consists of WxH `unit squares': .*. +%%% ... +%%% its character code is 10*W + H +%%% i.e., the first digit corresponds to the width and +%%% the second digit corresponds to the height of the character + +def greybox (expr H, W) = + HH:=2**H; WW:=2**W; + beginchar(10*W+H, WW*a#, HH*a#, 0); + pickup pencircle scaled 1; + fill (1,1)--(1,3*HH)--(3*WW,3*HH)--(3*WW,1)--cycle; + pickup pencircle scaled 2; + for x = 0 step 3 until 3*HH : undraw (0,x)--(3*WW,x); endfor; + for x = 0 step 3 until 3*WW : undraw (x,0)--(x,3*HH); endfor; + endchar; + enddef; + +%%% produce characters for H and W from 0 to 5 + +for ww = 0 upto 5 : + for hh = 0 upto 5 : greybox (hh,ww); endfor; + endfor; + +bye; diff --git a/macros/generic/shade/shade.tex b/macros/generic/shade/shade.tex new file mode 100644 index 0000000000..b7b01ab809 --- /dev/null +++ b/macros/generic/shade/shade.tex @@ -0,0 +1,45 @@ +%%% shade/shade.tex (or shade.sty) +%%% shade macros for use with shade.mf +%%% see README for licensing and contact information. + +\catcode`\:11 + +\font\grey:=shade at 10truept + +\newbox\shade:box +\newdimen\fill:boundary + \setbox0=\hbox{\grey:\char0\relax}\fill:boundary=\ht0 +\newcount\fill:level \newdimen\fill:size \newdimen\fill:goal + +\long\def\shade#1{\leavevmode + \setbox\shade:box=\hbox{#1}% + \def\shade:column{}\def\shade:row{}% + \fill:level=5 \fill:goal=\wd\shade:box + \advance\fill:goal by 2\fill:boundary + \let\shade:v\relax \Fill: \shade:row\shade:v + \fill:level=5 + \fill:goal=\ht\shade:box \advance\fill:goal by \dp\shade:box + \advance\fill:goal by 2\fill:boundary + \let\shade:h\relax \Fill: \shade:column\shade:h + \fill:goal=\ht\shade:box \advance\fill:goal by \dp\shade:box + \setbox0=\vbox to\fill:goal{\offinterlineskip\grey: + \def\shade:h##1{% + \def\shade:v####1{\char####1##1\relax}% + \hbox to \wd\shade:box{\hss\shade:row\hss}} + \vss \shade:column \vss + }\ht0=\ht\shade:box \dp0=\dp\shade:box + \rlap{\box0}\box\shade:box + } +\def\Fill: {\setbox0=\hbox{\grey:\char\fill:level\relax}\fill:size=\ht0 + \fill:} +\def\fill: #1#2{% + \ifdim \fill:size>\fill:goal + \advance\fill:level by-1 + \ifnum \fill:level>-1 \let \fill:next = \Fill: + \else \let \fill:next = \fill:stop \fi + \else \edef#1{#1#2\the\fill:level}\advance\fill:goal by -\fill:size + \let \fill:next = \fill: + \fi \fill:next #1#2} +\def\fill:stop#1#2{} + +\endinput |