summaryrefslogtreecommitdiff
path: root/macros/generic/shade
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/generic/shade
Initial commit
Diffstat (limited to 'macros/generic/shade')
-rw-r--r--macros/generic/shade/README29
-rw-r--r--macros/generic/shade/description.pdfbin0 -> 25940 bytes
-rw-r--r--macros/generic/shade/description.tex45
-rw-r--r--macros/generic/shade/shade.mf41
-rw-r--r--macros/generic/shade/shade.tex45
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
new file mode 100644
index 0000000000..4b239d81b7
--- /dev/null
+++ b/macros/generic/shade/description.pdf
Binary files differ
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