summaryrefslogtreecommitdiff
path: root/info/laan
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 /info/laan
Initial commit
Diffstat (limited to 'info/laan')
-rw-r--r--info/laan/bridge/bridge.tex415
-rw-r--r--info/laan/paradigm/baker.eps40
-rw-r--r--info/laan/paradigm/barnwindowii.eps38
-rw-r--r--info/laan/paradigm/bentley.eps15
-rw-r--r--info/laan/paradigm/eschera.eps17
-rw-r--r--info/laan/paradigm/escherb.eps25
-rw-r--r--info/laan/paradigm/escherknotiii.epsabr25
-rw-r--r--info/laan/paradigm/escherknotmf.eps20
-rw-r--r--info/laan/paradigm/flower.eps17
-rw-r--r--info/laan/paradigm/gurariabc.eps20
-rw-r--r--info/laan/paradigm/gurarisq.eps15
-rw-r--r--info/laan/paradigm/jvr.eps44
-rw-r--r--info/laan/paradigm/linebundle.eps15
-rw-r--r--info/laan/paradigm/malbork.eps28
-rw-r--r--info/laan/paradigm/paradigm.gam431
-rw-r--r--info/laan/paradigm/paradigm.hea587
-rw-r--r--info/laan/paradigm/paradigm.itm216
-rw-r--r--info/laan/paradigm/paradigm.lin755
-rw-r--r--info/laan/paradigm/paradigm.lps566
-rw-r--r--info/laan/paradigm/paradigm.opt463
-rw-r--r--info/laan/paradigm/paradigm.postscript1483
-rw-r--r--info/laan/paradigm/paradigm.ps2751
-rw-r--r--info/laan/paradigm/paradigm.src759
-rw-r--r--info/laan/paradigm/paradigm.srt723
-rw-r--r--info/laan/paradigm/paradigm.two622
-rw-r--r--info/laan/paradigm/polygon.eps16
-rw-r--r--info/laan/paradigm/polygonii.eps20
-rw-r--r--info/laan/paradigm/prpie.eps98
-rw-r--r--info/laan/paradigm/readme.fst22
-rw-r--r--info/laan/paradigm/seal.eps26
-rw-r--r--info/laan/paradigm/sine.eps22
-rw-r--r--info/laan/paradigm/sinedisks.eps13
-rw-r--r--info/laan/paradigm/textalongarc.eps20
-rw-r--r--info/laan/paradigm/textalongspiral.eps45
l---------info/laan/pwt/README1
-rw-r--r--info/laan/pwt/pwt.aft293
-rw-r--r--info/laan/pwt/pwt.cus433
-rw-r--r--info/laan/pwt/pwt.fmt1467
-rw-r--r--info/laan/pwt/pwt.his84
-rw-r--r--info/laan/pwt/pwt.ind506
-rw-r--r--info/laan/pwt/pwt.int707
-rw-r--r--info/laan/pwt/pwt.mat1167
-rw-r--r--info/laan/pwt/pwt.obs5
-rw-r--r--info/laan/pwt/pwt.ref292
-rw-r--r--info/laan/pwt/pwt.scr452
-rw-r--r--info/laan/pwt/pwt.sur139
-rw-r--r--info/laan/pwt/pwt.tab1875
-rw-r--r--info/laan/pwt/pwt.tls365
-rw-r--r--info/laan/pwt/pwt.tot154
-rw-r--r--info/laan/pwt/pwt.txt1255
-rw-r--r--info/laan/pwt/readme.fst66
51 files changed, 19633 insertions, 0 deletions
diff --git a/info/laan/bridge/bridge.tex b/info/laan/bridge/bridge.tex
new file mode 100644
index 0000000000..e90050f007
--- /dev/null
+++ b/info/laan/bridge/bridge.tex
@@ -0,0 +1,415 @@
+
+\documentstyle[twocolumn]{article}
+%
+\setlength{\textwidth}{7in}
+\setlength{\textheight}{9in}
+\setlength{\oddsidemargin}{-.4in}
+\setlength{\topmargin}{-.5in}
+\newlength{\br}
+\setlength{\br}{8em}
+%
+\renewcommand{\c}{\(\clubsuit\)}
+\renewcommand{\d}{\(\diamondsuit\)}
+\newcommand{\h}{\(\heartsuit\)}
+\newcommand{\s}{\(\spadesuit\)}
+%
+\newcommand{\hand}[4]{
+ \begin{minipage}[t]{\br}%I chose \br=8em
+ \begin{tabbing}
+ %width of parbox depends on the parameters:
+ %min{\br, max{string #1, ..., string #4}}
+ \(\spadesuit\) \= #1 \\
+ \(\heartsuit\) \> #2 \\
+ \(\diamondsuit\)\> #3 \\
+ \(\clubsuit\) \> #4
+ \end{tabbing}
+ \end{minipage} }%end \hand
+%
+\newsavebox{\NESW}
+\savebox{\NESW}[4em]{%
+\raisebox{-1.5\baselineskip}%
+{\fbox{\small W
+ \raisebox{2.6ex}{N}
+ \hspace*{-1em}
+ \raisebox{-2.6ex}{S}
+ {E}
+ }
+} }%end \NESW
+%
+\newcommand{\crdima}[6]{%
+\begin{tabular}[t]{lll}
+ #1 & #3 & #2\\
+ #4 & \usebox{\NESW} & #5\\
+ & #6 &
+\end{tabular}
+}%end \crdima
+%
+\newenvironment{bidding}%
+{\begin{tabbing}
+ xxxxxx\=xxxxxx\=xxxxxx\=xxxxxx \kill
+ West \>North \>East \> South\\
+}{\end{tabbing} }%end bidding
+%
+\begin{document}
+\title{Typesetting Bridge\\
+ via \LaTeX}
+\author{C.G. van der Laan\\
+Rekencentrum RUG\\
+9700 AV Groningen\\
+The Netherlands\\
+Earn/Bitnet: cgl@hgrrug5\\
+\date{}}
+\maketitle
+\begin{abstract}
+\LaTeX\ macros and a bidding environment
+for typesetting bridge card distributions and bidding
+sequences are given.
+Examples borrowed from bridge literature are supplied.
+\end{abstract}
+%
+\section{Card deals}
+In bridge literature diagrams of distribution of cards over
+the hands are often given in order to demonstrate bidding
+sequences or to explain play technique.
+In order to do this systematically and to abstract from layout details
+I wrote a macro --- \verb=crdima= --- with six parameters
+\begin{description}
+\item[first parameter:] text, especially who is the dealer and what is the
+ vulnerability. For example: N/None, for North dealer and
+ vulnerability none.
+\item[second parameter:] text, for example indication of play,
+ e.g., number \verb=Play 1= or otherwise, e.g., \\
+ \verb=\begin{minipage}[t]{\br}=\\
+ \verb= Play:\\demo=\\
+ \verb=\end{minipage}=
+\item[next four parameters:] the four hands in the sequence N, W, E, S.
+ Each hand is a call of the \verb=hand= macro
+with four parameters: the \s, \h, \d, \c\ cards.
+\end{description}
+Example
+\begin{quote}
+\begin{verbatim}
+\crdima{N/None}{%
+ \begin{minipage}[t]{\br}
+ Play:\\demo
+ \end{minipage}}%
+ {\hand{J74}{AJ}{QJT2}{Q874}}%
+ {\hand{A3}{K76}{963}{KJ952}}%
+ {\hand{K86}{T9542}{874}{T3}}%
+ {\hand{QT952}{Q83}{AK5}{A6}}%
+\end{verbatim}
+\end{quote}
+yields
+\begin{quote}
+\crdima{N/None}{%
+ \begin{minipage}[t]{\br}
+ Play:\\demo
+ \end{minipage}}%
+ {\hand{J74}{AJ}{QJT2}{Q874}}%
+ {\hand{A3}{K76}{963}{KJ952}}%
+ {\hand{K86}{T9542}{874}{T3}}%
+ {\hand{QT952}{Q83}{AK5}{A6}}%
+\end{quote}
+%
+{\bf Remarks}\\
+By this levelling I circumvented the limit of the
+number of parameters. Because
+parameter substitution is done by `text'
+replacement there is no `(strong) type checking'
+as in modern high-level programming languages. \\
+There is no check on the correctness of the cards (correct number,
+distribution, multiple occurrence or omission), nor on the correct sequence
+of the parameters. In SGML compliance with the input syntax can be
+imposed with enhanced user convenience and alleviated proofreading, but
+at the expense of elaborate coding, \cite{JG}.
+No test on the
+correctness of the sequence of the hands is ever possible, however.\\
+The \verb=crdima= macro can be used
+to display all phases of the play.
+Hands can be suppressed at discretion of the user
+by empty actual parameters.
+A renounce can be supplied via \verb=--=.
+In the listings of the commands used for the examples
+the \verb=quote= environment command is omitted.
+\\[1ex]
+For tournaments (bridge) plays are often dealt by computer.
+At the end of tournaments players appreciate prints
+of the deals. For that purpose my (Pascal) deal program
+generates ASCII output --- for simple display on the PC ---
+as well as \LaTeX\ input, optionally. This input is printed
+with the aid of \verb=crdima=. Parameter testing is superfluous
+for \LaTeX\ input generated this way.
+%
+\section{Bidding}
+In the context of bidding theory I use a bidding environment.
+The given card deal takes the following ACOL bidding
+\begin{quote}
+\begin{bidding}
+-- \> 1\c\> no \> 1\s\\
+no \> 2\s\> no \> 4\s\\
+a.p.
+\end{bidding}
+\end{quote}
+obtained via
+\begin{quote}
+\begin{verbatim}
+\begin{bidding}
+-- \> 1\c\> no \> 1\s\\
+no \> 2\s\> no \> 4\s\\
+a.p.
+\end{bidding}
+\end{verbatim}
+\end{quote}
+{\bf Remark} The bidding environment is independent of the language
+of the bidding (West etc.\ can easily be adapted),
+the bidding system as well as the number of bid
+rounds.
+\section{Macro texts}
+%
+%\verbinput{tcmac.tex}
+%
+\begin{verbatim}
+\newcommand{\hand}[4]{
+ \begin{minipage}[t]{\br}%I chose \br=8em
+ \begin{tabbing}
+ %width of parbox depends on the parameters:
+ %min{\br, max{string #1, ..., string #4}}
+ \(\spadesuit\) \= #1 \\
+ \(\heartsuit\) \> #2 \\
+ \(\diamondsuit\)\> #3 \\
+ \(\clubsuit\) \> #4
+ \end{tabbing}
+ \end{minipage} }%end \hand
+%
+\newsavebox{\NESW}
+\savebox{\NESW}[4em]{%
+\raisebox{-1.5\baselineskip}%
+{\fbox{\small W
+ \raisebox{2.6ex}{N}
+ \hspace*{-1em}
+ \raisebox{-2.6ex}{S}
+ {E}
+ }
+} }%end \NESW
+%
+\newcommand{\crdima}[6]{%
+\begin{tabular}[t]{lll}
+ #1 & #3 & #2\\
+ #4 & \usebox{\NESW} & #5\\
+ & #6 &
+\end{tabular}
+}%end \crdima
+%
+\newenvironment{bidding}%
+{\begin{tabbing}
+ xxxxxx\=xxxxxx\=xxxxxx\=xxxxxx \kill
+ West \>North \>East \> South\\
+}{\end{tabbing} }%end bidding
+%
+\end{verbatim}%
+%
+To eliminate data integrity errors
+the listings of the above macros and
+the listings of the commands used in the examples are `included'
+via a transparent verbatim like environment, \cite{HM};
+so the same files were used for execution and listing.
+%
+\section{Some more examples}
+In order to illustrate general bidding theory
+from the point of view of one hand only,
+the \verb=hand= macro can be used.
+The following layout, heavily used in \cite{EC},
+\begin{quote}
+\hand{AKJ42}{AK9}{T832}{T}\hspace{.5\br}
+\begin{minipage}[t]{\br}
+\begin{bidding}
+-- \> 1\s\> no \> 1NT \\
+2\c\> ?
+\end{bidding}
+\end{minipage}
+\end{quote}
+is obtained via
+\begin{quote}
+\begin{verbatim}
+\hand{AKJ42}{AK9}{T832}{T}\hspace{.5\br}
+\begin{minipage}[t]{\br}
+\begin{bidding}
+-- \> 1\s\> no \> 1NT \\
+2\c\> ?
+\end{bidding}
+\end{minipage}
+\end{verbatim}
+\end{quote}
+For issues related to defense play one often displays
+only the dummy hand and your own hand.
+The following example --- layout and text ---
+is from \cite{Br}.
+\begin{quote}
+\crdima{}{}{}{\hand{AJ632}{43}{KQ7}{A85}}%
+ {}{\hand{985}{852}{AJ5}{KQT3}}\\
+\begin{bidding}
+1\s\> no \> 2\h \> no\\
+2NT\> no \> 4\h \> a.p.
+\end{bidding}
+\end{quote}
+\begin{quote}
+Against 4\h\ South starts \c K, taken
+with \c A. Leader continues \h AKQ. On the third
+round of \h's, partner discards \d 9 (indicates
+interest in \s). Leader continues with \d 2,
+how do you continue?
+\end{quote}
+The example is obtained via
+\begin{quote}
+\begin{verbatim}
+\crdima{}{}{}{\hand{AJ632}{43}{KQ7}{A85}}%
+ {}{\hand{985}{852}{AJ5}{KQT3}}\\
+\begin{bidding}
+1\s\> no \> 2\h \> no\\
+2NT\> no \> 4\h \> a.p.
+\end{bidding}
+\end{verbatim}
+\end{quote}
+{\bf Remark} In a similar way W--N, N--E, E--S hands,
+or W--E, N--S hands, or one hand only, with NESW diagram,
+can be displayed simply by a suitable call of \verb=crdima=. \\[2ex]
+%
+Finally, an endplay --- positional squeeze ---
+from \cite{HWK}\ is given.
+\begin{quote}
+\crdima{}{S leads \c A}%
+ {\hand{AJ}{K}{--}{--}}%
+ {\hand{KQ}{A}{--}{--}}%
+ {\hand{7}{9}{T}{--}}%
+ {\hand{2}{4}{--}{A}}
+\end{quote}
+The example is obtained via
+\begin{quote}
+\begin{verbatim}
+\crdima{}{S leads \c A}%
+ {\hand{AJ}{K}{--}{--}}%
+ {\hand{KQ}{A}{--}{--}}%
+ {\hand{7}{9}{T}{--}}%
+ {\hand{2}{4}{--}{A}}
+\end{verbatim}
+\end{quote}
+%
+\section{Variation}
+An elementary, and in a sense more general, crdima macro is
+\begin{quote}
+\begin{verbatim}
+\newcommand{\crdimaele}[9]{%
+\begin{tabular}[t]{lll}
+#1 & #2 & #3\\
+#4 & #5 & #6\\
+#7 & #8 & #9
+\end{tabular}}%end crdimaele
+\end{verbatim}
+\end{quote}
+All the given examples can be handled with \verb=crdimaele=.
+\verb=crdimaele= applied to
+the original deal without NESW diagram reads
+\begin{quote}
+\begin{verbatim}
+\crdimaele{N/None}%
+ {\hand{J74}{AJ}{QJT2}{Q874}}%
+ {\begin{minipage}[t]{\br}
+ Play: demo; no NESW diagram
+ \end{minipage}}%
+ {\hand{A3}{K76}{963}{KJ952}}%
+ {}%
+ {\hand{K86}{T9542}{874}{T3}}%
+ {}%
+ {\hand{QT952}{Q83}{AK5}{A6}}%
+ {}
+\end{verbatim}
+\end{quote}
+with result
+\begin{quote}
+\newcommand{\crdimaele}[9]{%
+\begin{tabular}[t]{lll}
+#1 & #2 & #3\\
+#4 & #5 & #6\\
+#7 & #8 & #9
+\end{tabular}}%end crdimaele
+\crdimaele{N/None}%
+ {\hand{J74}{AJ}{QJT2}{Q874}}%
+ {\begin{minipage}[t]{\br}
+ Play: demo; no NESW diagram
+ \end{minipage}}%
+ {\hand{A3}{K76}{963}{KJ952}}%
+ {}%
+ {\hand{K86}{T9542}{874}{T3}}%
+ {}%
+ {\hand{QT952}{Q83}{AK5}{A6}}%
+ {}
+\end{quote}
+{\bf Remarks} \\
+A NESW diagram is obtained with
+\verb=\usebox{\NESW}= --- or something
+you have designed yourself ---
+as fifth parameter.\\
+An elegant solution to the problem of having a default
+NESW figure which could be overruled by another figure
+is the optional parameter mechanism, which --- helas ---
+is lacking in the macro facility of \LaTeX. The same applies
+to the bidding environment with the default bid sequence
+N E S W. Again via the mechanism of optional parameters
+one could provide another bid sequence order or
+abbreviations suited for other languages.
+For the hand parameters one could think of the mechanism of named
+parameters with complete freedom of the sequence order
+of the parameters: one could easily provide the hands
+in the order N E S W, the deal order.
+%
+\section*{Conclusions}
+The author claims that bridge publications can be typeset easily
+with high quality via \LaTeX\ and the given macros.
+Proofreading of deals not generated by computer remains
+tiresome.\\
+The lack of the facility of optional parameters in the
+\verb=\newcommand= command and the \verb=newenvironment=
+environment is felt as an understandable inelegancy.
+%
+\section*{Acknowledgements}
+The author is grateful to Victor Eijkhout and Nico Poppelier
+for their suggested improvements.
+%
+\begin{thebibliography}{99}
+\bibitem{Br} BRIDGE. Monthly of the NBB (Dutch
+Bridge Union).
+\bibitem{EC} Crowhurst, E.\ (1986):
+ACOL in competition. Pelham. London.
+\bibitem{JG}Grootenhuis, J.\ (priv.\ comm.):
+Kaartverdelingen en biedverloop bij bridgen
+--- Een SGML tutorial. (Dutch).
+\bibitem{HWK}Kelder, J., B.\ van der Velde (1986):
+Dwangposities tegen \'e\'en tegenstander. Becht. A'dam. (Dutch).
+Translated from:\\
+Kelsey, H.W.\ (1985, paperback):\\
+Simple squeezes. Gollancz. London.
+\bibitem{LL} Lamport, L.\ (1986):
+\LaTeX, a document preparation system. Addison-Wesley.
+\bibitem{HM}Mulders, H.P.A.\ (priv.\ comm.):
+\verb=\verbinput=.
+\end{thebibliography}
+{\bf P.S.} \ Dear Ron,\\
+I hope you are not too annoyed with my polishing of the article.
+Agreed, I should have done that before submitting the paper.
+Sorry once again.
+But now the good news. At this moment --- the really (sic!) end of my
+polishing process ---I asked myself the questions: `Is this article
+worth publishing?', `Isn't it so that the macros are that simple such that
+everybody not only could but would write them from scratch?'.
+I for myself wouldn't and certainly didn't.
+I polished and polished and paid attention to as much details as I
+could think of under guidance of: abstraction, adaptability,
+beauty, clearity, compactness, completeness, correctness, efficiency,
+elegance, flexibility, modularity, modesty, relevance, robustness,
+simplicity, transparency, and usefulness. \\
+Best wishes,
+Kees (I wouldn't mind publishing this note as well).
+\end{document}
+%
+
+
diff --git a/info/laan/paradigm/baker.eps b/info/laan/paradigm/baker.eps
new file mode 100644
index 0000000000..60dc0b457e
--- /dev/null
+++ b/info/laan/paradigm/baker.eps
@@ -0,0 +1,40 @@
+%!PS
+%%BoundingBox: -80 -80 80 80
+%%Creator: cgl (inspired by Woody Baker)
+%%CreationDate: 1996.05.21:1858
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+%200 500 translate
+%
+4{%one quarter
+-15 25 moveto
+0 -10 rlineto
+60 0 rlineto
+0 -30 rlineto
+10 0 rlineto
+0 40 rlineto
+-70 0 rlineto
+0 10 rlineto
+80 0 rlineto
+0 -60 rlineto
+-30 0 rlineto
+0 10 rlineto
+10 0 rlineto
+%
+35 -25 moveto
+0 -10 rlineto
+20 0 rlineto
+10 10 rlineto
+%
+45 15 moveto
+10 10 rlineto
+90 rotate
+}repeat
+%
+stroke
+%
+/Courier findfont 10 scalefont setfont
+-55 -75 moveto
+(Courtesy Woody Baker)show
+showpage
diff --git a/info/laan/paradigm/barnwindowii.eps b/info/laan/paradigm/barnwindowii.eps
new file mode 100644
index 0000000000..a5fe8a57d9
--- /dev/null
+++ b/info/laan/paradigm/barnwindowii.eps
@@ -0,0 +1,38 @@
+%!PS Barn Window II
+%%BoundingBox: -40 -40 40 40
+%%Creator: cgl
+%%CreationDate: May 29 1996
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+%300 500 translate
+%
+/l 36 def
+/r {l 22.5 sin mul} def
+/m {l 22.5 cos mul} def
+8{r .5 mul 0 moveto
+ l 0 lineto
+ currentpoint %begin circular arc
+ 22.5 rotate m 0%center
+ r %radius
+ -90 90 arc
+ 22.5 rotate
+}repeat
+%inner circle
+/rin {r .5 mul} def
+rin 0 moveto
+0 0 rin 0 360 arc
+%outer circle
+/rout {r m add} def
+rout 0 moveto
+0 0 rout 0 360 arc
+%extra circles
+/rin {r .25 mul} def
+22.5 rotate
+8{m rin add 0 moveto
+ m 0 rin 0 360 arc
+ 45 rotate
+}repeat
+stroke
+showpage
+%end
diff --git a/info/laan/paradigm/bentley.eps b/info/laan/paradigm/bentley.eps
new file mode 100644
index 0000000000..40af96a287
--- /dev/null
+++ b/info/laan/paradigm/bentley.eps
@@ -0,0 +1,15 @@
+%!PS EPSF
+%%Title: Bentley's double loop
+%%Creator: cgl (inspired by Bentleyj)
+%%CreationDate: May 30 1996
+%%BoundingBox: -100 -105 100 105
+%%EndProlog
+10{1 1 10{100 0 moveto
+ gsave
+ dup 36 mul rotate
+ 100 0 lineto stroke
+ grestore
+ } for
+ 36 rotate
+} repeat
+showpage \ No newline at end of file
diff --git a/info/laan/paradigm/eschera.eps b/info/laan/paradigm/eschera.eps
new file mode 100644
index 0000000000..ad36e3f510
--- /dev/null
+++ b/info/laan/paradigm/eschera.eps
@@ -0,0 +1,17 @@
+%!PS Escher's impossible triangle
+%%BoundingBox: -40 -40 40 40
+%%Creator: cgl (inspired by Guy Shaw)
+%%CreationDate: 1996.05.23:1858
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+%100 500 translate
+3{25 34 moveto
+ 25 -34 lineto
+ 17 -38.2 lineto
+ 17 20 lineto
+ -17.6 0 lineto
+120 rotate
+}repeat
+stroke
+showpage \ No newline at end of file
diff --git a/info/laan/paradigm/escherb.eps b/info/laan/paradigm/escherb.eps
new file mode 100644
index 0000000000..5a3ea87dd9
--- /dev/null
+++ b/info/laan/paradigm/escherb.eps
@@ -0,0 +1,25 @@
+%!PS
+%%BoundingBox: -40 -40 40 40
+%%Creator: cgl (inspired by Guy Shaw)
+%%CreationDate: 1996.05.23:1858
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+%Essential part
+%300 500 translate
+25 34 moveto currentpoint
+0 -68 rlineto currentpoint%down
+ -120 rotate
+25 34 lineto%preserve symmetry
+ 120 rotate currentpoint
+17 20 lineto currentpoint
+-17.6 0 lineto currentpoint
+%labels
+/Courier findfont 8 scalefont setfont
+moveto -5 -3 rmoveto (5) show
+moveto 1 1 rmoveto (4) show
+moveto 2 -5 rmoveto (3) show
+moveto 2 0 rmoveto (2) show
+moveto 2 0 rmoveto (1) show
+stroke
+showpage
diff --git a/info/laan/paradigm/escherknotiii.epsabr b/info/laan/paradigm/escherknotiii.epsabr
new file mode 100644
index 0000000000..31946a9aae
--- /dev/null
+++ b/info/laan/paradigm/escherknotiii.epsabr
@@ -0,0 +1,25 @@
+%!PS EPSF
+%%BoundingBox: -40 -31 40 43
+%%Creator: MetaPost and JJW, CGL
+%%CreationDate: June 17 1996
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+3{-21.6507 12.5 moveto
+-21.6507 27.74551 -13.78212 42.5003
+ 0 42.5003 curveto
+13.78212 42.5003 21.6507 27.74551
+ 21.6507 12.5 curveto
+21.6507 -0.24506 16.04897 -12.19249
+ 6.58395 -20.3313 curveto
+%
+-14.3152 15.86746 moveto
+-12.43301 23.58928 -7.45113 29.75021
+ 0 29.75021 curveto
+9.64748 29.75021 15.15549 19.42186
+ 15.15549 8.75 curveto
+15.15549 -2.07904 9.37823 -12.08548
+ 0 -17.5 curveto
+120 rotate
+}repeat stroke showpage
+%%EOF \ No newline at end of file
diff --git a/info/laan/paradigm/escherknotmf.eps b/info/laan/paradigm/escherknotmf.eps
new file mode 100644
index 0000000000..32370ae4f3
--- /dev/null
+++ b/info/laan/paradigm/escherknotmf.eps
@@ -0,0 +1,20 @@
+%!PS EPSF
+%%Title: Escher knot (mf prompted)
+%%Creator: cgl (inspired Knotplot)
+%%CreationDate: June 1996
+%%BoundingBox: -80 -80 80 80
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+%150 650 translate
+3{-43.30139 25 moveto
+ -43.30139 55.49103 -27.56424 85.00061
+ 0 85.00061 curveto
+ 27.56424 85.00061 43.30139 55.49103
+ 43.30139 25 curveto
+ 43.30139 -5.94014 26.79497 -34.5299
+ 0 -50 curveto
+120 rotate
+}repeat
+%pathbox = = = = ???p
+stroke showpage
diff --git a/info/laan/paradigm/flower.eps b/info/laan/paradigm/flower.eps
new file mode 100644
index 0000000000..cd39433b4b
--- /dev/null
+++ b/info/laan/paradigm/flower.eps
@@ -0,0 +1,17 @@
+%!PS EPSF
+%%Title: flower.eps
+%%Creator: cgl
+%%CreationDate: June 4 1996
+%%BoundingBox: -50 -50 50 50
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+/r 36 def
+10{r r moveto%begin drawing point
+ r 0 r 90 180 arc
+ currentpoint%origin
+ 0 r r 270 360 arc
+ 36 rotate
+}repeat
+stroke
+showpage
diff --git a/info/laan/paradigm/gurariabc.eps b/info/laan/paradigm/gurariabc.eps
new file mode 100644
index 0000000000..979f573bca
--- /dev/null
+++ b/info/laan/paradigm/gurariabc.eps
@@ -0,0 +1,20 @@
+%!PS EPS
+%%Title: Guarai's ABC
+%%BoundingBox: 0 -45 100 90
+%%Creator: Gurari
+%%CreationDate: copied June 17 1996
+%%Pages: 1
+%%EndComments
+%%EndProlog
+%%Page: 1 1
+%300 500 translate
+/Times-Bold findfont 45 scalefont setfont
+-40 rotate
+1 -.03 0{setgray
+ 0 0 moveto
+ (ABC) show
+ 3 rotate
+ } for
+0 0 moveto -4 rotate
+1 setgray (ABC) show
+showpage
diff --git a/info/laan/paradigm/gurarisq.eps b/info/laan/paradigm/gurarisq.eps
new file mode 100644
index 0000000000..d95dfe63a7
--- /dev/null
+++ b/info/laan/paradigm/gurarisq.eps
@@ -0,0 +1,15 @@
+%!PS Gurari squares
+%%BoundingBox: -200 -40 200 125
+%%Creator: cgl
+%%CreationDate: June 20 1996
+%%EndProlog
+%300 500 translate
+/r 50 def
+0 0 moveto 90 rotate
+50{r 0 rmoveto
+ 1 1 4{0 r rlineto
+ 90 rotate}for
+ -30 rotate
+ .9 .9 scale
+}repeat
+stroke showpage
diff --git a/info/laan/paradigm/jvr.eps b/info/laan/paradigm/jvr.eps
new file mode 100644
index 0000000000..5273a7e86f
--- /dev/null
+++ b/info/laan/paradigm/jvr.eps
@@ -0,0 +1,44 @@
+%!PS
+%%Creator: J.V. Romanovsky
+%%CreationDate: 1996?
+%%BoundingBox: -200 -200 200 200
+%%EndProlog
+%%Page: 0 1%
+/rl{rlineto}def % to reduce the code
+/FS {gsave setgray fill grestore stroke}def
+ % gsave ... grestore are used to save the graphic environment
+ % it is necessary if you want to use the current path several
+ % times, as here: to fill and to stroke
+/s3 0.75 sqrt def /unit 40 def
+ % Two constants, 'unit' defines the size of construction
+/U { unit mul 0 exch rl} def
+ % Verical line for several units
+/R { unit mul % Transfer the number of units to length
+ dup % Copy it
+ s3 mul % Calculate X-offset
+ exch % Hide it
+ 0.5 mul % Calculate Y-offset
+ rl} def % Draw the line with the given offset pair
+/L { unit mul dup s3 mul neg % neg is the only modificaion
+ exch 0.5 mul rl}def
+ % Right and left lines for several lines
+/M{ s3 unit mul 0.5 unit mul translate -120 rotate} def
+ % Rotation of the picture to scan the vertices of the central
+ % triangle
+%200 400 translate
+/P1{ 0 0 moveto 2 R -1 L -2 U 4 R -1 U -9 R 4 U -1 L -2 U
+ 3 R 4 U -4 R 3 U -1 L -2 U -1 L} def
+ % Sorry, only copying the source Escher draft
+ % and no own imagination
+ % Three parts of the picture are made with the same procedure
+%mark origin
+%0 10 moveto
+%0 -10 lineto
+%10 0 moveto
+%-10 0 lineto
+%stroke
+P1 0.6 FS M
+P1 0.8 FS M
+P1 0.95 FS M
+showpage
+% End
diff --git a/info/laan/paradigm/linebundle.eps b/info/laan/paradigm/linebundle.eps
new file mode 100644
index 0000000000..95f30d401a
--- /dev/null
+++ b/info/laan/paradigm/linebundle.eps
@@ -0,0 +1,15 @@
+%!PS
+%%Title: linebundle.eps
+%%Creator: cgl
+%%CreationDate: June 4 1996
+%%BoundingBox: -40 -40 40 40
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+/r 36 def
+10{0 0 moveto
+ r 0 lineto
+ 36 rotate
+}repeat
+stroke
+showpage \ No newline at end of file
diff --git a/info/laan/paradigm/malbork.eps b/info/laan/paradigm/malbork.eps
new file mode 100644
index 0000000000..ec53c48c44
--- /dev/null
+++ b/info/laan/paradigm/malbork.eps
@@ -0,0 +1,28 @@
+%!PS
+%%BoundingBox: -40 -40 40 40
+%%
+%%Creator: cgl
+%%CreationDate: 1996.05.21:1858
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+
+%100 400 translate
+
+%
+45 rotate
+10 0 moveto
+4{20 0 37.5 12.5 25 25 curveto
+ 12.5 37.5 0 20 0 10 curveto
+ 90 rotate}repeat
+
+%inside lops
+5 0 moveto
+4{5 35 35 5 0 5 curveto
+ 90 rotate}repeat
+
+%circle
+36 0 moveto
+0 0 36 0 360 arc
+stroke
+showpage
diff --git a/info/laan/paradigm/paradigm.gam b/info/laan/paradigm/paradigm.gam
new file mode 100644
index 0000000000..b22198c1e0
--- /dev/null
+++ b/info/laan/paradigm/paradigm.gam
@@ -0,0 +1,431 @@
+%August 1995, C.G. van der laan, cgl@rc.service.rug.nl
+\input blue.tex
+\loadtocmacros
+%\tolerance500\hbadness=499\hfuzz=5pt
+\parindent=1pc
+\everyverbatim{\unmc}
+
+\bluetitle Paradigms: It's all in the game
+
+\bluesubtitle Dialogue with \TeX
+
+\blueissue \maps{96}1
+
+\beginscript
+
+\bluehead BLUe's Design VI
+
+Hi folks.
+In {\oldstyle1989} Greene contributed
+`Playing in \TeX's mind' to TUG {\oldstyle89}.
+Having fun with \TeX{} has been on my mind all the time.
+Of late, I thought of tic-tac-too as an exercise in programming
+dialogues in \TeX, in a simple and elegant way, with hopefully
+some paradigms emerging, suited for educational purposes.
+The play is simple but nevertheless entails essential aspects
+of having a dialogue with \TeX.
+Below I first strip the play to the essentials and
+from there build the user-friendly, but otherwise modest, code.
+At the end the \TeX ing peculiarities are summarized.
+
+\bluehead The play
+
+Tic-tac-too is played by two persons on a board with $3{\times}3$ fields.
+Each player marks a field in turn and the one who has first
+three marks in a row has won.
+\def\data{+\cs o\cs+\rs \cs o\cs+\rs o\cs \cs +}
+$$\ruled\btable\data$$
+
+\bluehead Prototyping
+
+The dialogue with \TeX{} goes through the log file, also called transcript.
+
+The board is represented by the defs \cs{1}, \dots\cs{9} row-wise.
+Each player owns a mark called \cs{markplayer} and \cs{markopponent}.
+A user is prompted to input a value\Dash 1, 2, ... or 9\Dash
+which indicates the field where to put his mark.
+The program keeps track of the kind of mark, via a toggle.
+To end the game the user can input 0.
+
+The above resulted in the following bare-to-the-bones
+implementation of tic-tac-too.
+\beginverbatim
+\def\showboard{\immediate\write0{\1\2\3}
+ \immediate\write0{\4\5\6}
+ \immediate\write0{\7\8\9}}
+\def\initialize{\def\1{-}\def\2{-}\def\3{-}
+ \def\4{-}\def\5{-}\def\6{-}
+ \def\7{-}\def\8{-}\def\9{-}}
+\def\play{\initialize \loop\showboard
+ \ifx\mark\markplayer
+ \let\mark\markopponent\else
+ \let\mark\markplayer\fi
+ \immediate\write0{Supply index for \mark:}
+ \read0to\index \expandafter
+ \xdef\csname\index\endcsname{\mark}
+\ifnum\index>0 \repeat}%end \play
+\def\markplayer{+}\def\markopponent{o}
+\endlinechar-1 %TB20.18
+\play \bye
+!endverbatim
+Remarks.
+Because of the toggling of the \cs{mark} an \cs{xdef} was needed.
+
+One could code that the player and opponent are both
+taking care of during each traversal of the loop.
+However, apart from that it makes the code longer it is also clumsy, and
+if careless one has to account for multiple exits of the loop.
+I assumed states in which the loop is traversed.
+The next steps are not for the faint of heart.
+
+\bluehead Real-life version
+
+Given the above prototype implementation we can refine,
+add more bells-and-whistles. Basically these add-ons are in two directions
+\bitem improve the user interface
+\bitem let the program do more, such as deciding who has won.
+\smallbreak
+
+\bluesubhead Improving the user interface
+
+Explain the conventions adopted, especially what the indices stand for.
+
+Always nice is to allow for personalization, i.e.\ the system prompt asks for
+YOU, with your name.
+This entails that the players must be asked to identify themselves and that
+the toggling must be extended.
+
+Another feature is that the program prompts the remaining indices to choose from.
+
+And what about robustness? I decided not to implement robustness with respect
+to lowercase or uppercase y or n, for example.
+I also refrained from checking whether the supplied index is allowed.\ftn
+{Not that difficult, actually,
+ because the set of allowed indices is maintained.}
+
+\bluesubhead Let the program do more
+
+The most important aspect is to add intelligence to the program to check
+for a winner.
+
+The play restarts automatically
+
+\bluesubhead The code
+
+The board is represented by the defs
+\cs{1}, \cs{2}, \dots \cs{9}, the $3{\times}3$ board row-wise.
+
+
+The structure of the program is similar to the prototype,
+with \cs{play} elaborated and the check \cs{checkforgameend} added.
+\beginverbatim
+\immediate\write0{Tic-tac-too
+ Aug 1995, cgl@rc.service.rug.nl}
+\let\ea\expandafter
+\newcount\k\newcount\value\newcount\checksum
+\newif\ifsol
+\newtoks\set %Index set
+\def\del#1{\def\lop##1#1##2\pol{\set{##1##2}}
+ \ea\lop\the\set\pol}
+%
+\def\showboard{\immediate\write0{}
+\immediate\write0{\1\2\3}
+\immediate\write0{\4\5\6}
+\immediate\write0{\7\8\9}}
+%
+%Initialization
+\def\initialize{\set{123456789}\solfalse
+ \immediate\write0{New names of players?
+ (default \player\space and \opponent)}
+ \read0to\yorn
+ \if y\yorn
+ \immediate\write0{Name player}
+ \read0to\player
+ \immediate\write0{Name opponent}
+ \read0to\opponent
+ \fi\k0
+ \loop\advance\k1
+ \ea\def\csname\the\k\endcsname{-}
+ \ifnum\k<10
+ \repeat
+ \immediate\write0{Empty board}
+}%end initialization
+%Test for solution
+\def\sol#1#2#3{{\advance\count#1\count#2
+ \advance\count#1\count#3
+ \ifnum\count#1=\checksum \global\soltrue\fi}}
+\def\checkforgameend{%
+\sol123\ifsol\message{\who\space won}\k0 \else
+\sol456\ifsol\message{\who\space won}\k0 \else
+\sol789\ifsol\message{\who\space won}\k0 \else
+\sol147\ifsol\message{\who\space won}\k0 \else
+\sol258\ifsol\message{\who\space won}\k0 \else
+\sol369\ifsol\message{\who\space won}\k0 \else
+\sol159\ifsol\message{\who\space won}\k0 \else
+\sol357\ifsol\message{\who\space won}\k0 \else
+\fi\fi\fi\fi\fi\fi\fi\fi}
+%Play
+\def\play{\initialize\begingroup
+\loop\showboard
+ \ifx\who\player\value-1 \checksum-3
+ \let\who\opponent
+ \let\mark\markopponent
+ \else\value1 \checksum3
+ \let\who\player
+ \let\mark\markplayer
+ \fi
+ \immediate\write0{\who, supply index
+ for \mark:}
+ \immediate\write0{Choose from: \the\set.
+ (0 terminates)}
+ \read0t\ea o\csname\who\endcsname
+ \k\csname\who\endcsname
+ \ea\xdef\csname\the\k\endcsname{\mark}
+ \count\k\value
+ \checkforgameend
+\ifnum\k>0 \ea\del\ea{\the\k}
+\repeat\endgroup
+\immediate\write0{Play another game?}
+\read0to\newplayyorn
+\if y\newplayyorn\ea\play\fi}%end Play
+%
+%Defaults
+\def\player{Kees} \def\opponent{Ina}
+\def\markplayer{+} \def\markopponent{o}
+%
+\immediate\write0{}
+\immediate\write0{Board numbering}
+\immediate\write0{123}
+\immediate\write0{456}
+\immediate\write0{789}
+%
+\play \bye
+!endverbatim
+Remark. In order to get the personalized prompts \cs{Kees}, or \cs{Ina}
+the following coding was needed.
+\beginverbatim
+\read0t\ea o\csname\who\endcsname
+!endverbatim
+The few lines that follow look unnecessary complex
+but are entailed by the above.
+
+\bluehead What more?
+
+It is intrigueing to ponder about adding even more intelligence.
+For example to let the game prompt for obligatory moves,
+or to let the program terminate when draw is inevitable, that is when there
+is no possible solution left.
+In order to achieve this I chose to
+\bitem maintain the set of possible solutions, instead of checking all possible
+ solutions\ftn{This entails that non-feasible candidates are eliminated
+ from the set of candidate solutions.}
+\bitem update the set of solutions after each move, and
+ look for a solution or a draw
+\bitem look for obligatory moves.
+\smallbreak
+With respect to robustness the input can be checked for whether the index
+is allowed, casu quo a y(es) or n(o).
+
+\beginverbatim
+\immediate\write0{Tic-tac-too
+ Aug 1995, cgl@rc.service.rug.nl}
+\let\ea\expandafter \let\nx\noexpand
+\newcount\k\newcount\kk
+\newcount\value\newcount\checksum
+\newcount\feasible\newcount\prompt
+%Solution lines
+\newcount\hi\newcount\hii\newcount\hiii
+\newcount\vi\newcount\vii\newcount\viii
+\newcount\di\newcount\dii
+\newif\ifsol
+\newif\ifnotfound
+%Index set and deletion from index set
+\newtoks\set %Index set
+\def\del#1{\def\lop##1#1##2\pol{\set{##1##2}}
+ \ea\lop\the\set\pol}
+%
+\def\showboard{\immediate\write0{}
+\immediate\write0{\1\2\3}
+\immediate\write0{\4\5\6}
+\immediate\write0{\7\8\9}}
+%
+%Initialization
+\def\initialize{\set{123456789}\solfalse
+ \hi0 \hii0 \hiii0 \vi0 \vii0\viii0
+ \di0 \dii0 \feasible8 \prompt0
+%Cell no associated with solution subsets
+\ea\def\csname solset1\endcsname{%
+ \ls\hi\ls\vi\ls\di}
+\ea\def\csname solset2\endcsname{%
+ \ls\hi\ls\vii}
+\ea\def\csname solset3\endcsname{%
+ \ls\hi\ls\viii\ls\dii}
+\ea\def\csname solset4\endcsname{%
+ \ls\hii\ls\vi}
+\ea\def\csname solset5\endcsname{%
+ \ls\hii\ls\vii\ls\di\ls\dii}
+\ea\def\csname solset6\endcsname{%
+ \ls\hii\ls\viii}
+\ea\def\csname solset7\endcsname{%
+ \ls\hiii\ls\vi\ls\dii}
+\ea\def\csname solset8\endcsname{%
+ \ls\hiii\ls\vii}
+\ea\def\csname solset9\endcsname{%
+ \ls\hiii\ls\viii\ls\di}
+ \immediate\write0{New names of players?
+ (default \player\space and \opponent)}
+ \read0to\yorn
+ \if y\yorn
+ \immediate\write0{Name player}
+ \read0to\player
+ \immediate\write0{Name opponent}
+ \read0to\opponent
+ \fi\k0
+ \loop\advance\k1
+ \ea\def\csname\the\k\endcsname{-}
+ \ifnum\k<10
+ \repeat
+ \immediate\write0{Empty board}
+}%end initialization
+%
+%Test for solution
+\def\ls#1{%#1 is a solution counter
+ \ifnum#1=0 \advance#1\value
+ \else\ifnum\sign#1=\value \advance#1\value
+ \else\advance\feasible-1
+ \delete#1 %from solution sets
+ \ifnum\feasible=0 \showboard
+ \message{***Draw***}\k0
+ \fi
+ \fi
+ \fi
+ %Check for solution
+ \ifnum#1=\checksum \showboard
+ \message{***\who*** won}\k0
+ \fi}
+%
+\def\sign#1{\ifnum#1>0 1\else -1\fi}
+\def\solsetk{\csname solset\the\k\endcsname}
+%
+\def\delete#1{%#1 is a solution counter to be
+ %deleted from all solution sets
+{\kk0
+\def\ls##1{\ifx#1##1\else\nx\ls\nx##1\fi}
+\loop\advance\kk1
+\ifnum\kk<10
+\ea\xdef\csname solset\the\kk\endcsname
+ {\csname solset\the\kk\endcsname}
+\repeat}}%end \delete
+%
+\def\fifo#1{\ifx#1\ofif\ofif\fi
+ \process#1\fifo}
+\def\ofif#1\fifo{\fi}
+\def\lstry#1{%#1 is a counter denoting
+ %a solution
+ \ifnum#1=0
+ \else\ifnum\sign#1=\value
+ \advance#1\value
+ %Check for solution
+ \ifnum#1=\checksum \global\prompt\k
+ \fi\fi
+ \fi}
+\def\process#1{\ifnum\prompt=0
+ {\k=#1 \let\ls\lstry \solsetk}\fi}
+%
+\def\readprocess#1{\if#1\csname\who\endcsname
+ \notfoundfalse\fi}
+%
+\def\readindex{{\let\process\readprocess
+ \loop\read0t\ea o\csname\who\endcsname
+ %\who value in \set?
+ \notfoundtrue\ea\fifo\the\set0\ofif
+ \ifnotfound
+ \immediate\write0{Please supply index
+ from \the \set}
+ \repeat
+ \global\k\csname\who\endcsname}}
+%
+%Play
+\def\play{\initialize\begingroup
+\loop\showboard%\show\ the\solset
+ \ifx\who\player\value-1 \checksum-3
+ \let\who\opponent
+ \let\mark\markopponent
+ \else\value1 \checksum3
+ \let\who\player
+ \let\mark\markplayer
+ \fi
+ %Is there a winning move?
+ %(Prefails obligatory move)
+ {\prompt0 \ea\fifo\the\set\ofif
+ \ifnum\prompt>0 \global\prompt0 \fi}
+ %The idea is that the player must see it
+ %him/herself. Of course the program knows
+ %about the winning move.
+ %Obligatory move? (criterion 0<\prompt (<10)
+ \ifnum\prompt>0 \immediate\write0{Sorry \who,
+ obligatory move \the\prompt}\k\prompt
+ \else
+ \immediate\write0{\who, supply index
+ for \mark:}
+ \immediate\write0{Choose from: \the\set.
+ (0 terminates)}
+ \readindex
+ \fi
+ %put mark on board
+ \ea\xdef\csname\the\k\endcsname{\mark}
+ %update solutions associated with \k
+ \solsetk
+%k=0 is stopping criterion
+\ifnum\k>0 \ea\del\ea{\the\k}%
+ %Look ahead for obligatory move:
+ % Can \who gain in next turn?
+ \prompt0 \ea\fifo\the\set\ofif
+\repeat\endgroup
+\immediate\write0{Play another game?}
+\read0to\newplayyorn
+\if y\newplayyorn\ea\play\fi}%end Play
+%
+%Defaults
+\def\player{Kees} \def\opponent{Ina}
+\def\markplayer{+} \def\markopponent{o}
+%And off we go
+\immediate\write0{}
+\immediate\write0{Board numbering}
+\immediate\write0{123}
+\immediate\write0{456}
+\immediate\write0{789}
+\immediate\write0{}
+\play \bye
+!endverbatim
+
+\bluehead Is this all?
+
+Especially the code in the last section has become complex. Should we make it more complex?
+For the moment I stopped.
+However, it is tempting to increase the order to {\oldstyle4},
+and to extend the play to {\oldstyle3} dimensions.
+My case rest.
+
+\bluehead Paradigms
+
+The following functionalites have been encountered and a way how to code
+these in \TeX{} have been worked out.
+\bitem loop traversal in various states
+\bitem global Boolean, \cs{global}\cs{soltrue}
+\bitem maintaining an index set,
+ deleting an element from a set
+\bitem test for an empty set
+\bitem high-level parameterization, for example
+ a personalized prompt within a state-dependent loop
+\bitem \cs{read} with a {\em reference\/} to a prompt through\\
+ |\read0t\ea o\csname\who\endcsname|
+\bitem check on what is read is allowed.
+\smallbreak
+Starting from the bare-to-bones prototype it is quite something to arrive
+at a solution, which carries some intelligence and robustness \smiley.
+\medskip
+Have fun, and all the best.
+\makesignature
+\pasteuptoc
+\endscript
diff --git a/info/laan/paradigm/paradigm.hea b/info/laan/paradigm/paradigm.hea
new file mode 100644
index 0000000000..f4d52bde07
--- /dev/null
+++ b/info/laan/paradigm/paradigm.hea
@@ -0,0 +1,587 @@
+%November 1994, Aug 1995, March 1996
+%Paradigm: Headache?
+%C.G. van der Laan, cgl@rc.service.rug.nl
+\input blue.tex \loadtocmacros
+\tolerance500\hbadness=499\hfuzz=5pt
+\parindent=1pc
+\everyverbatim{\emc}
+
+\bluetitle Paradigms: Headache?
+
+\blueissue \maps{94}2 (revision March\on1996)
+
+\beginscript
+
+\bluehead BLUe's Design II
+
+Hi folks. When using \LaTeX{}
+I was plagued in the past by the little glob of white space
+on the first line after a head.
+It made me clear that `spaces are harmful,' to paraphrase Dijkstra.
+When designing \bluetex{} I had to look at the problem again
+among other things, and to
+\bitem provide a simple suite, with hardly no knowledge of the user
+ assumed about parameter separators
+\bitem gobble redundant spaces as much as possible
+\bitem allow also processing on the fly of the title
+\bitem choose a coding style, and
+\bitem choose a `markup language.'
+\smallbreak
+
+My starting point was \cs{beginsection} \TB~\on355.
+I chose |head| as root name conform to TUGboat.
+
+\bluesubhead The revision
+
+is about the superfluousness of the \#
+as last element of a parameter specification,
+from a functional point of view.
+
+The treatment of \cs{chapterhead} from BLUe's Reports
+has been appended of August \on1995.
+
+A quick and dirty LP functionality to exhibit a ToC
+has been added of August \on1995.
+This ToC is not meant to be published but just
+ to assist developing notes,
+ to keep track of the structure, the setup,
+which\Dash as reality taught me\Dash
+develops too while writing.
+
+Really handy, believe me\winksmiley.
+
+\bluehead Headers
+
+I will design \cs{beginhead} and \cs{endhead},
+next to the minimal markup variant |\head{ ...}|.\ftn
+{The subhead variants are similar but different in detail.
+ Especially in undoing glue when heads follow-up
+ each other without intervening text. Beware!}
+
+\bluesubhead Design goals
+
+From a typography point of view I would like to
+\bitem discourage to set the title alone at the end of a page
+\bitem typeset (flexible) vertical space (big) before and after (med) the title
+\bitem gobble spaces at the beginning of the title
+\bitem set the title in bold face (and the current size) unindented
+\bitem don't indent the first line of the text after.
+\smallbreak
+
+\bluesubhead What are the problems?
+
+The markup language constructs have to be chosen.
+In macro expansion the two-part macro
+\TeX nique should be the basis. In blue's format I adopted
+the pairs |\begin<tag>| and |\end<tag>|.
+
+In order to set the title loose from the context
+we have to determine values for the glue,
+and be sure that it disappears at the top of a page.
+The coding solution below has different values for the
+parameters as supplied in \cs{beginsection}.
+From experiments it turned out that the values supplied by Knuth
+don't give nice results with blue.fmt.
+Too much glue was inserted for my taste.
+
+Another problem is to prevent the head title
+to be printed at the bottom of a page on its own.
+The latter is related to the `widow-orphan' phenomenon.
+
+The coding of the minimal markup variant without parsing
+but with processing of the fly of
+`the argument' has to be resolved in some elegant way.
+
+The idea of a |\pre<tag>| and |\post<tag>| is general.
+It parameterizes the placement of a document element
+within context. Important! Whether you talk about titles,
+displays, tables, graphs, or you name it. Perhaps
+this should be generalized in something like
+|\pasteup<tag>|.
+
+\beginverbatim
+\def\beginhead{\the\prehead\bgroup\headfont}
+\def\endhead{\egroup\the\posthead}
+%with auxiliaries
+\prehead{\vskip0pt plus2ex
+ \penalty-250\vskip0pt plus1ex
+ \bigskip\noindent}
+\posthead{\medskip\nobreak
+ \noindent\ignorewhitespace}%Mod Nov 94
+!endverbatim
+
+\bluesubhead Take a deep breath
+
+The minimal markup form, {\em with the same functionality}, reads
+
+\beginverbatim
+\def\head{\beginhead\bgroup
+ \aftergroup\endhead
+ \afterassignment\ignorespaces
+ \let\dummy=}
+!endverbatim
+
+Explanation.
+The replacement text starts \cs{beginhead} and a group.
+Immediately after the opening of the group \cs{aftergroup}
+takes care that the second part of the two-part macro will be invoked
+at the right place.
+The opening brace after the invocation of \cs{head}
+is read away by assigning it to \cs{dummy}.
+Spaces after the opening brace are ignored, due to
+\cs{afterassignment}\cs{ignorespaces}.
+The \TeX nique---moving the group opening---has been
+borrowed from plain's \cs{footnote}, \TB~\on363.
+There it is used at the end of the replacement text of \cs{fo@t}.
+\beginquote
+What is the difference with the macro with a \# as last element of the
+parameter specification?\ftn
+{The \# as last character of the parameter text makes that
+ the opening brace and what follows
+ is placed after the replacement text of \cs{head}, \TB~\on204.}
+\endquote
+At first sight it looks identical. However, the difference is twofold.
+The situation with the \# at the end of the parameter text differs
+because
+\bitem an opening brace after the invocation of \cs{head} is syntactically required
+\bitem no braces are needed for the last argument, because $\{$ is
+ a parameter separator.\ftn{The example, \TB~\on204,
+ used the invocation
+ |\a3pt{x}|, while without \# as last element of the parameter list
+ the markup would have read |\a{3pt}{x}|.}
+\smallbreak
+
+Because of these extra safeguards,
+I stayed with the \# as end of the parameter list,
+for building one-part macros on top of two-part macros.
+Quite something isn't it?
+
+\bluesubhead Paradigm
+
+We should build upon two-part macros.
+In order to add the short variant to {\em similar\/} two-part
+macros the following template can be used.
+
+\beginverbatim
+\def\<tag>#{\begin<tag>\bgroup
+ \aftergroup\end<tag>
+ \afterassignment\ignorespaces
+ \let\dummy=}
+!endverbatim
+
+\bluesubhead Take a deeper breath
+
+When using the above template in practice,
+it occurred to me that \TeX{} could handle that too.
+For \cs{head} the desired functionality is that
+
+\beginverbatim
+\onepartmacro{head}
+!endverbatim
+
+will build the macro \cs{head} based upon
+the two-part macros \cs{beginhead} and \cs{endhead}.
+
+The naive coding\Dash which does not work, but makes
+the purpose quite clear\Dash reads
+
+\beginverbatim
+\def\onepartmacro#1{\def\#1##{\begin#1
+ \bgroup\aftergroup\end#1
+ \afterassignment\ignorespaces
+ \let\dummy=}}
+!endverbatim
+
+Several desired functionalities have to be coded
+in \TeX's peculiar way, with as result
+
+\beginverbatim
+\def\onepartmacro#1{{
+\ea\let\csname begin#1\endcsname=\relax
+\ea\let\csname end#1\endcsname=\relax
+\toks0={\bgroup\aftergroup}
+\toks1={\afterassignment\ignorespaces
+ \let\dummy=}
+\ea\xdef\csname#1\endcsname##{%
+ \csname begin#1\endcsname
+ \the\toks0 \csname end#1\endcsname
+ \the\toks1 }}}
+!endverbatim
+
+Explanation.
+A lot of the trickery about partial expansion, \TB~\on216, has been applied.
+
+First a \cs{csname} is used to compose the names from the root name.
+
+Second the one-part macro is defined via an \cs{xdef}
+with suppression of the expansion of the
+|\begin<name>|, |\end<name>|, and the other tags.
+It is an \cs{xdef} to keep the auxiliaries used local.
+The first is handled via the property that a control sequence
+equal to a character, and in general to an unexpandable token, is not expanded.
+The second is handled by the property that a \cs{the}
+on a token list is a one-step expansion.
+
+\bluesubhead Some remarks
+
+Note that I did not gobble spaces at the end of the title argument.
+In the headtitle they won't harm because
+the title is set on a line of its own.\ftn
+{In the other heads the space at the end of the argument can be there on purpose.
+ Watch out!}
+
+Processing a title on the fly is needed for verbatims
+and in general when we don't like the `eyes' of \TeX{}
+to set catcodes differently from those the script expects
+when digested in the `stomach.'
+
+\bluesubsubhead The bad news
+
+Minimal markup for \cs{head} and the like can be
+felt as an anachronism.
+With \AllTeX{} intelligent editors we don't need minimal markup anymore.
+
+\bluesubsubhead Disclaimer
+
+The above template does not work for all two-part macros,
+for example not for my btable (or any \cs{halign}).\ftn
+{See however, `Paradigms: Two-part macros.'}
+
+\bluesubsubhead The good news
+
+Via this mechanism we can abstract
+at the {\em user level\/} from token variables and definitions.
+The user can supply the information as if it was a token variable.
+The using of the long form or the minimal form has been reduced
+to a matter of taste. And that is a good thing.
+
+\def\head{\beginhead\bgroup
+ \aftergroup\endhead
+ \let\dummy=}
+
+\bluehead Tests?
+
+This note itself contains examples of use in its original form.
+
+\thisverbatim{\catcode`\|=12 }
+\beginverbatim
+\beginhead|Head text
+ in verbatim|\endhead
+ Text after\\next line
+
+\head{Head text, with |this|
+ in verbatim}
+ Text after\\next line
+!endverbatim
+
+ with results
+\medskip
+\beginlines
+\kern-\medskipamount
+
+\beginhead|Head text in verbatim|\endhead
+%\head{{\tt Head text in verbatim}}
+ Text after\\next line
+
+\head{Head text, with |this| in verbatim}
+ Text after\\next line
+\medskip
+\endlines
+\medbreak
+Run it,\ftn{blue.tex is available form the CTAN,
+ as is the accompanying article BLUe's Format.}
+and have fun. All the best.
+
+\bluehead Note added in proof
+
+In order to allow blank lines after the heading in the script,
+I replaced \cs{ignorespaces} in \cs{endhead} by
+\cs{ignorewhitespace}.\ftn{Due to Phil Taylor.
+ TUG's \cs{ignorespacesandpars} would probably do too.}
+
+A blank line after a heading is natural for a text without explicit markup.
+Knuth started from natural markup and stayed close to that, IMHO.
+His markup tags to format the chapter (titles and contents) in \TB{}
+file are
+
+\beginverbatim
+\beginchapter
+\endchapter
+!endverbatim
+
+Imagine ASCII text with visual layout, and in order to markup
+the title {\em and text\/} insert the above commands, with the natural
+blank line already there to end the arguments of \cs{beginchapter}.
+Knuth's \cs{beginchapter} not only takes care of the title but also
+handles the chapter contents {\em on the fly\/} until \cs{endchapter}
+is encountered.
+Really much different from \LaTeX's approach, to name but
+one general set of markup tags.
+
+\bluesubhead Knuth and natural markup
+
+Imagine that the ASCII text of a section reads
+\beginverbatim
+Section 1. Title
+
+Now starts the section text
+proper...
+And this is the last line of it.
+!endverbatim
+
+What is the simplest and most natural markup for this?
+First the requirements
+\bitem section should be flexible towards language variation
+\bitem title should be processed on the fly.
+\smallbreak
+
+A solution is the following extension heavily inspired by
+\cs{beginchapter} of manmac.
+
+\beginverbatim
+\def\beginsection#1 #2#3. {\bgroup
+ \def\par{\egroup\endhead}%
+ \beginhead#1 #2#3. }
+\posthead{\nobreak\medskip
+ \noindent\ignorewhitespace}
+%
+\let\endsection\relax%or forget about it
+%
+\def\ignorewhitespace{\begingroup
+%Due to Phil Taylor EuroTeX 94
+\catcode`\ =9
+\catcode`\^^I=9
+\catcode`\^^L=9
+\catcode`\^^M=9
+\futurelet\dummy\endgroup}
+!endverbatim
+
+The marked up script is obtained by only inserting \cs{beginsection}!
+
+\beginverbatim
+\beginsection Section 1. Title
+
+Now starts the section text
+proper...
+And this is the last line of it.
+!endverbatim
+
+The beauty of the above approach, Knuth's IMHO, is that the total section
+is handled, the title as well as the contents part, with the title
+proper part processed on the fly.
+Moreover, it is as close to natural markup as I can think of.
+(trivial) Language problems are absent.
+One can abstract from `Section' via a toks variable \cs{sectionname}.
+Automatic numbering can be inserted too, but the question is
+whether it is really handy, especially in view of subsections and the
+like.
+
+\bluehead Copied from BLUe's Report
+
+In BLUe's Report I have dealt with more complicate header matters,
+which show up when we like to reuse the title for inclusion in
+the ToC, ToE and ilks. It turns out that `\cs{bluechapter}'
+is much more complicated than `\cs{bluehead}.'
+Below the storing of titles and their reuse is dealt with among other things.
+Because of storing\Dash which fixes the catcodes\Dash
+the titles are not processed on the fly.
+
+\bluesubhead Chapter head matters
+
+The required functionalities\Dash the specs so to say\Dash are to
+\bitem start a new page
+\bitem store the title for reuse (running head, table of contents)
+\bitem maintain and store the chapter counter (for use with the exercises,
+ table of contents, and the like)
+\bitem write the title and title counter value to the contents file
+\bitem typeset the title on a new page with some white space after
+\bitem reset counters which start anew per chapter (headings, exercise number,
+ and the like)
+\bitem provide the right \cs{headline} and \cs{footline} with the title,
+ chapter title, and page number
+\bitem suppress the headline on the first page of a chapter (or supply for
+ an otherwise special headline)
+\bitem process the title on the fily to allow for example verbatim
+\bitem condition the writing of the title and title counter value
+ to the examples file.
+\smallbreak
+
+Quite something, isn't?
+That is why title matters are not trivial.
+The conditioning of writing the title to the examples file is there,
+because we don't like the title etc. to appear in that file if the chapter
+lacks examples.
+
+\beginverbatim
+\def\beginchapterhead{\the\prechapterhead
+ \storechaptertitle}
+%
+\def\storechaptertitle#1\endchapterhead{%
+ \global\chaptertitle={#1}\endchapterhead}
+%
+\def\endchapterhead{\centerline{\chapterfont
+ \the\chapternumbering\the\chaptertitle}
+ \the\postchapterhead\ignorewhitespace}
+!endverbatim
+
+This approach looks promising.
+What has to be done before is the concern of \cs{prechapterhead}.
+\cs{storechaptertitle} does what its name suggests.
+The formatting of the number of the chapter is the concern
+of \cs{chapternumbering}.
+\cs{postchapterhead} takes care of leftovers.
+Default \cs{chapternumbering} is empty, that is, no number will be typeset.
+
+Undoubtedly, the careful reader would object that the title is stored
+and that the catcodes are set before processing.
+That is right, of course, but via \cs{everychapterhead}\Dash in
+\cs{prechapterhead}\Dash
+we can guarantee that symbols will have the right catcodes.
+\cs{storechaptertitle} is there to allow the short variant
+|\chapterhead{...}|.
+The combination of storing and in-line verbatim does not work. Beware.\ftn
+{For me this does not hinder because I don't like these kinds of font changes
+ in a chapter header.}
+
+\beginverbatim
+\prechapterhead{\newpage\null\vskip4pc
+ \bgroup\catcode`\^=7
+ \the\everychapterhead\the\thischapterhead
+ \global\advance\chaptercnt1 }
+%
+\postchapterhead{\egroup
+ \headcnt0 \exercisecnt0 \examplecnt0
+ \write\toc{\nx\separator
+ {\alfanum\the\chaptercnt}
+ {\the\chaptertitle}}
+ %suppress headline first page chapter
+ \headline{\global\headline
+ {\hbox to\pagewd
+ {\sl\the\chaptertitle\hfill
+ \the\title}}}%
+ \footline{\hbox to\pagewd{\small
+ \rlap{Draft \today}\hfill\dash
+ {\oldstyle\the\pagenumber}\dash
+ \hfill\llap{\copyright
+ \the\crowner}}}%
+%Example is redefined here such that on
+%first use if ever in the chapter, it
+%redefines itself into the regular macro,
+%while writing the chapter titles to the
+%table-of-examples, ToE, file.
+%In this way chapter titles of chapters
+%without examples will not be written to
+%the ToE.
+ \def\example{\write\toe{\nx\separator
+ {\alfanum\the\chaptercnt}
+ {\the\chaptertitle}}
+ \let\example\regularexample
+ \example}
+ \thischapterhead{}\vskip3pc}
+!endverbatim
+
+The material is enclosed within a group to keep the effect
+of \cs{thischapter} local.
+
+\cs{example} is defined such that only when it is used
+the title and number of the chapter will be written to the file
+associated with \cs{toe}. \cs{regularexample} writes the example title
+and number to the file associated with \cs{toe}.
+
+Intriguing is \cs{alfanum}. The purpose is to control whether a number
+or a letter should appear. This is particularly useful with appendices.
+\beginverbatim
+\def\setupappendices{\thischapterhead=
+ {\chaptercnt64 \gdef\alfanum{\char}%
+ \global\chapternumbering=
+ {\alfanum\the\chaptercnt: }}}
+!endverbatim
+
+And what about the one-part macro on top?
+The above was already complicated.
+What is the problem for a one-part macro?
+For most of the cases we can do with a simple variant.
+However, when we like to process math, especially the circumflex,
+as part of the title more work has to be done. The mechanism has been
+explained in `Paradigm: Two-part macros.'
+
+\beginverbatim
+\def\chapterhead{\bgroup
+ \def\storechaptertitle##1{\egroup
+ \global\chaptertitle{##1}%
+ \endchapterhead}\beginchapterhead}
+!endverbatim
+
+As a tribute to manmac I also defined the following limited variant.\ftn
+{The circumflex in math in the title will hiccup. Most of the time we
+ don't need that.}
+
+\beginverbatim
+\def\bluechapter#1\par{\beginchapterhead
+ #1\unskip\endchapterhead}
+!endverbatim
+
+A trivial user interface on top which counteracts the curly braces mania
+at the expense of processing on the fly.\ftn
+{What does on-the-fly mean anyway, when we have to store the title for multiple use?
+ The answer is that we would like to allow for math too. No verbatims however.}
+
+\bluehead A little LP functionality
+
+Of late with notes I needed to generate automatically a small rudimentary
+ToC to assist my writing and developing notes. Just quick and dirty.
+For that purpose I provided the following for the |\blue(sub(sub))head|-s.\ftn
+{Be aware that these head titles are not processed on the fly.
+ In March \on1996 I replaced writing to a file by maintaing the toc in a toks variable,
+ because in general it is not a mouth-only process the writing can go astray.
+ It did with |$\longrightarrow$|. Actually, for this toc assitant I did not need
+ the output functionality of adding page numbers.}
+
+\beginverbatim
+\newtoks\tocvar
+\let\bh\bluehead
+\long\def\bluehead#1\par{\bh#1\par
+\tocvar\ea{\the\tocvar\par#1}}
+\let\bsh\bluesubhead
+\long\def\bluesubhead#1\par{\bsh#1\par
+\tocvar\ea{\the\tocvar\par\quad#1}}
+\let\bssh\bluesubsubhead
+\long\def\bluesubsubhead#1\par{\bssh#1\par
+\tocvar\ea{\the\tocvar\par\qquad#1}}
+\let\be\blueexample
+\long\def\blueexample#1\par{\be#1\par
+\tocvar\ea{\the\tocvar\par\qquad ex: #1}}
+!endverbatim
+
+For pasting up the ToC I supplied.
+\beginverbatim
+\long\def\pasteuptoc{\newcol
+ \bluehead Contents\par
+ \the\tocvar
+ \let\makesignature\relax}
+!endverbatim
+
+Finally, I merged the above into BLUe's format system.
+The toks storage allocation for \cs{tocvar}
+and \cs{loadtocmacros} in blue.tex, and
+the rest in tools.dat.
+
+The user can supply
+\cs{loadtocmacros} at the beginning after |\input blue.tex|, and
+\cs{pasteuptoc} just before \cs{endscript}.
+
+In this way these macros don't conflict, just an extra
+to support your notes with a ToC at the end, to maintain
+the overview.\ftn{Note that \cs{report} already provides for a ToC.}
+
+\bluehead Acknowledgements
+
+Phil Taylor is kindly acknowledged for his \cs{ignorewhitespace}
+as generalization of \cs{ignorespaces}, and his suggestion to assign
+\cs{relax} to tokens to inhibit expansion instead of a number.
+The latter is done on \TB~\on216.
+
+Have fun, and all the best.
+\makesignature
+\pasteuptoc
+\endscript \ No newline at end of file
diff --git a/info/laan/paradigm/paradigm.itm b/info/laan/paradigm/paradigm.itm
new file mode 100644
index 0000000000..e3e25928b9
--- /dev/null
+++ b/info/laan/paradigm/paradigm.itm
@@ -0,0 +1,216 @@
+%November 1994,
+%Paradigm: plain's item extended
+%C.G. van der laan, cgl@rc.service.rig.nl
+\input blue.tex \loadtocmacros
+\loadindexmacros\preindex{\head{Index}}
+\tolerance500\hbadness=499\hfuzz=5pt
+\parindent=1pc
+\everyverbatim{\emc}
+
+\bluetitle Paradigms: Plain's \cs{item}-s extended
+
+\blueissue \maps{94}2 {\small revision March \on1996}
+
+\beginscript
+
+\bluehead A new series
+
+Hi folks. After having given birth to BLUe's Format\Dash yes YAF,
+yet another format, to paraphrase YACC\Dash I considered it of
+general interest to spread gems to the world outside
+via MAPS and hopefully via TTN's `Hey \Dash{} It works' column.
+
+The reason for me doing so is that apparently trivial
+design aspects need careful attention in this macro
+expansion branch of software engineering.
+We have to start allover from the basics---slowly and
+carefully---and end up with paradigms of macro expansion
+coding.
+
+I intend a series of backside of the envelope contributions.
+
+\bluehead BLUe's Design I
+
+^^|\item|
+When you like plain's \cs{item}-s so much as I do then this is for you.
+Hang on!
+In practice we all like bulleted \cs{item}-s and
+\cs{item}-s with automatic numbering and lettering.
+It looks like---biased by \LaTeX---that we need some
+|\begin<tag>| and |\end<tag>| to begin and end.
+Not so!
+
+It can be done simpler, with nearly the same
+minimal markup as with \cs{item}.
+The extra is to end the list by \cs{smallbreak},
+which is nearly natural.\ftn{I use \cs{smallskip} after \cs{item}-s
+ for setting the list slightly apart from what follows.
+ When a header follows, or you just like to
+ end the list, say \cs{endlist} which \TeX nically ends
+ the group.}
+
+Remember \TB~\on102, where Knuth states
+\beginquote
+`It is customary to put \cs{medskip} before and after
+ a group of of itemized paragraphs, and to say \cs{noindent}
+before any closing remarks that apply to all of the cases.'
+\endquote
+I decided not to include \cs{noindent} because
+the list is set apart already.
+
+\bluesubhead Appetizer
+
+The coding of the bulleted item reads\ftn{\TB, exercise \on14.\on20.}
+
+\beginverbatim
+\def\bitem{\item{$\bullet$}}
+!endverbatim
+
+\bluesubhead Coding AN-items
+
+^^|\Aitem|
+With automatic numbering and lettering we have
+to stop the automatism of increasing the counter and
+to reset the counter for subsequent use
+at the end of the list.
+
+In \cs{item} nothing special had to be done.
+Ending the paragraph via a blank line (or \cs{par})
+was enough.
+We cannot modify \cs{par} locally
+because \cs{par} starts the replacement text of
+\cs{item} (and \cs{itemitem} as well).
+So the natural markup to let a blank line (or \cs{par})
+end the list is not possible.
+
+I could not work along the remark made in \TB{} ex\on14.\on29{} either,
+because this goes wrong with nesting, read with the use of \cs{itemitem}.
+
+My solution is a mixture of coding borrowed from
+\cs{item} page \on355,
+\cs{beginchapter} \on418, and of
+\cs{d@nger} \on419{} of \TB.\ftn
+{The more I come to think of it the more ways of doing boil up.
+ How to decide which one is the best?}
+
+\def\ftntxt{{\rm Do you see the extension for \cs{Aitem}?}}
+\beginverbatim
+\newcount\itemno
+\def\nitem{\bgroup
+ \def\nitem{\advance\itemno1
+ \item{\the\prenum
+ {\oldstyle\the\itemno
+ }\the\postnum}}
+ \def\smallbreak{\endgraf\egroup
+ \smallbreak}
+ \let\smallskip\smallbreak\nitem}
+\def\aitem{\bgroup\itemno96!ftn!ftntxt
+ \def\aitem{\advance\itemno1
+ \item{\char\itemno.}}
+ \def\smallbreak{\endgraf\egroup
+ \smallbreak}
+ \let\smallskip\smallbreak
+ \aitem}
+\def\endlist{\endgraf\egroup}
+%and the defaults
+\prenum{(}\postnum{)}
+!endverbatim
+
+We not only have to end the paragraph(s) but also to end the scope.
+
+\blueexample Numbered and nested items
+
+\prenum{}\postnum{.}
+\beginverbatim
+Text preceding\\next line
+\prenum{}\postnum{.}
+\nitem first numbered item\\next line
+\itemitem- sublist\\next line
+\nitem second numbered item\\next line
+\itemitem- sublist\\next line
+\smallbreak
+Text in between\\next line
+\aitem first lettered item\\next line
+\aitem second lettered item\\next line
+\smallbreak
+Text after\\next line.
+!endverbatim
+with result
+\medskip
+Text preceding\\next line
+\nitem first numbered item\\next line
+\itemitem- sublist\\next line
+\nitem second numbered item\\next line
+\itemitem- sublist\\next line
+\smallbreak
+Text in between\\next line
+\aitem first lettered item\\next line
+\aitem second lettered item\\next line
+\smallbreak
+Text after\\
+next line.
+
+\bluesubhead Enumerated items
+
+Along the same line we can add an enumerated item as follows.
+
+\beginverbatim
+\def\eitem{\bgroup
+ \def\eitem##1{\item{##1}}%
+ \def\smallbreak{\endgraf
+ \egroup\smallbreak}%
+ \let\smallskip\smallbreak
+ \eitem}
+!endverbatim
+
+\bluesubhead Verbatim items
+
+Of late\ftn{In my tutorial flyer `Macro writing,' \on1995.}
+I needed a list of items with each item only verbatim texts.
+
+To use \vrt{} at the end and the beginning of each line
+and to add |\\| or so at the end is
+in the spirit of \TB, as done with \cs{displaylines}.
+Not bad but a nuisance to insert all those \vrt s.
+
+Another modular solution was to use \cs{bitem} and after that
+
+\beginverbatim
+\preverbatim{}\postverbatim{}\beginverbatim
+!endverbatim
+
+and to end each item entry by
+
+\thisverbatim{\catcode`\!=12 \catcode`\*=0 }
+\beginverbatim
+!endverbatim
+*endverbatim
+
+The minimal markup solution is to provide a \cs{verbitem} tag which
+assumes only verbatim text as entry.
+
+Pitfalls.
+The second and so on tag must begin with !verbitem.\\
+The tag must appear on a line of its own.\\
+End with !smallbreak.
+
+\beginverbatim
+\def\bitem{\begingroup
+ \def\bitem{\item{$\bullet$}}%
+ \def\smallbreak{\endverbatim
+ \endgraf\endgroup\smallbreak}%
+ \let\smallskip\smallbreak
+ \bitem
+ \def\item{\endverbatim%to close
+ \par\hang\textindent}%
+}
+\def\verbitem{\bitem
+\preverbatim{}\postverbatim{}%
+\beginverbatim}
+!endverbatim
+
+Have fun, and all the best
+\makesignature
+\pasteuptoc
+\sortindex\pasteupindex
+\endscript
diff --git a/info/laan/paradigm/paradigm.lin b/info/laan/paradigm/paradigm.lin
new file mode 100644
index 0000000000..332b591ad8
--- /dev/null
+++ b/info/laan/paradigm/paradigm.lin
@@ -0,0 +1,755 @@
+%July 1995, modified Feb 1996
+%Paradigma: line bundle
+%C.G. van der laan, cgl@rc.service.rug.nl
+\input blue.tex
+\loadtocmacros
+\def\xytxt#1{%Function: place text #1 at x, y
+ \xy{\vbox to0pt{\vss
+ \hbox to0pt{\strut#1\hss}\kern0pt}}}
+\tolerance500\hbadness=499\hfuzz=8pt
+%\parindent0pt %=1pc
+\everyverbatim{\emc}
+
+\bluetitle Paradigms: The winds and halfwinds
+
+\bluesubtitle Details matter
+
+\blueissue \maps{96}1
+
+%\blueauthor Kees van der Laan
+
+\bluepictures\pythtreepic\spiralpic\windpic\trimodelpic\tritreepic
+ \bintreepic\rotatedbintreepic\chartpic
+
+\beginscript
+\everyverbatim{\unmc}
+\bluehead BLUe's Design V
+
+Hi folks.
+How to draw lines at {\oldstyle45}$^\circ$ in \TeX{} is exercised.
+This simple-looking and innocent problem touches on fundamental issues,
+such as should we adhere to the Cartesian picture environment
+approach,\ftn{The \LaTeX{} picture environment for example.}
+or do we need something else now and then?
+
+This work emerged from studying Gurari's approach to graphics
+incented by a suggestion in Jos Winnink's review, \maps{94}2.
+
+The discussion below explains what has been used in BLUe's format system
+in the turtle graphics\ftn
+{Knuth already used the `Turtle' idea in his dragon figures.
+ For those interested in turtle graphics consult for example
+ S. Papert: Mindstorms.}
+macros, especially in the coding of
+\cs{N}, \cs{E}, \cs{S}, \cs{W},
+\cs{NE}, \cs{SE}, \cs{SW}, \cs{NW}, next to
+\cs{ESE}, and \cs{WSW}.
+Examples are included which show what can be attained by these
+basic functionalities.
+It is also shown how the obtained pictures can be stored
+in the picture database |pic.dat| for reuse
+with different scaling or positioning.
+
+In the Appendix some tree diversions have been given.
+
+\bluehead What is the problem?
+
+\TeX's \cs{hrule} and \cs{vrule} primitives are a gem and very powerful.
+It would be nice to have similar primitives for any direction.
+In absence of these we can use line pieces provided in fonts.
+However, the latter approach suffers from the following drawbacks
+\bitem for a few discrete directions only
+\bitem line lengths are discrete too
+\bitem line thickness is inflexible.
+\smallbreak
+
+\bluehead Why?
+
+The need for general and flexible line elements arose when I faced the problem how
+to draw classical fractals.\ftn{Inspired by Gurari's work on \TeX{} and graphics.}
+The very least is the possibility to draw lines at {\oldstyle45}$^\circ$\Dash the halfwinds.
+
+\blueexample Pythagorean tree
+
+$$\pythtreepic$$
+How to do this in \TeX\ftn
+{For the coding of \cs{pythtree} see later. Or
+ Macro writing\Dash with confidence.}?
+
+Through the picture environment?
+Too clumsy, and cumbersome when changing the order, for example.
+
+Through \PS?
+This is possible, especially it provides for lines at all
+orientations.\ftn{J V Romanovsky has provided a concise \PS{} program.}
+
+Through \MF? Definitely, see my \MF{} anthology.
+
+However, why not go for how far we can get just by \TeX?
+
+And what about the relevancy? I'm very pleased by the spin-off how to
+typeset binary trees or charts, even rotated without the use of \PS.
+See the Appendix or the Publishing with \TeX{} user's guide.
+
+What we need is not the Cartesian picture environment approach,
+but the good old penplotter \TeX niques, better known
+in the pedagogical world as `Turtle graphics.'
+
+\bluehead Turtle graphics
+
+The basic idea is that the position of the turtle is maintained in
+the dimen variables \cs{x} and \cs{y},
+with the reference point left invariant.
+The accompanying figure shows the effect of \cs{N1}: draw the line
+(\cs{x}, \cs{y})\dash(\cs{x}, \cs{y}+1), i.e.\ the turtle moves up.
+After completion \cs{y} has been increased by \cs{unitlength}.
+
+%Perhaps I better put it in pic.dat
+\vskip2.5\bigskipamount
+$$\unitlength.5ex
+ \y=0pt\x-10\unitlength
+ {\W{4}\E{40}}\S{4}%
+ {\advance\y-2\unitlength\xytxt{ Ref.\ point}}%
+ \N{20}\whiteE{20}\S4\whiteS4\xytxt{ (x,y)}$$
+\vskip1.5\bigskipamount
+The movements\Dash our first steps in the turtle graphics world\Dash
+can be achieved by the control sequences
+\bitem \cs{N}, \cs{E}, \cs{S}, \cs{W} mean draw north, east, south and west,
+ similar for \cs{NE}, \cs{SE}, \cs{SW}, and \cs{NW}
+\bitem \cs{whiteN}, \cs{whiteE}, \cs{whiteS}, \cs{whiteW} mean
+ {\em white}-draw north, east, south and west, i.e., the turtle just moves.\ftn{The
+ halfwinds can be composed from the winds in this case.}
+\smallbreak
+
+\blueexample Spiral
+
+To get the flavour another classical picture, which shows
+that we don't have to worry about coordinates.
+$$\spiralpic$$
+The spiral is marked up essentially as follows\ftn{For the
+ placement within context details
+ consult \cs{spiralpic} in pic.dat.}
+\beginverbatim
+\unitlength.5ex \k30
+\loop\E{\the\k}\advance\k-1
+ \S{\the\k}\advance\k-1
+ \W{\the\k}\advance\k-1
+ \N{\the\k}\advance\k-1
+\ifnum\k>4 \repeat
+!endverbatim
+\vskip-\medskipamount
+\bluehead Basics
+
+Essential for the understanding is familiarity with \TeX's
+{\em boxes of size zero}, to know the effect of \cs{kern}-s and
+\cs{h/vss}-s inside, and of combinations of these boxes.
+Before reading on peruse the following.
+
+\bluesubhead Kerns and stretchorshrink-s
+
+within boxes of size zero.
+
+\blueexample With and without boxes of size zero
+
+\beginverbatim
+\newdimen\x \x=4ex \newdimen\y \y=2ex
+.\hbox to 0pt{\kern\x a\hss}.
+\kern10ex and \kern10ex
+.\kern\x a.
+
+and
+
+.\hbox to0pt{\kern\x\vbox to0pt
+ {\vss\hbox{a}\kern\y}\hss}.
+\kern10ex and \kern10ex
+.\kern\x\raise\y\hbox{a}.
+!endverbatim
+with result
+%\newdimen\x \newdimen\y
+\bgroup
+\x4ex \y2ex
+$$.\hbox to0pt{\kern\x a\hss}.
+\kern10ex and \kern10ex
+.\kern\x a.$$
+and
+$$.\hbox to0pt{\kern\x\vbox to0pt
+ {\vss\hbox{a}\kern\y}\hss}.
+\kern10ex and \kern10ex
+.\kern\x\raise\y\hbox{a}.$$
+\egroup
+By this mechanism we can move to
+any point on the page and put there what we wish.
+The essential issue of the box of zero width is that
+the {\em reference point is left invariant.}
+It is the same before and after.
+
+\bluesubhead Putting it together
+
+In vertical mode the \cs{hbox}-es are aligned on the reference point, and
+when the heights and depths are zero the \cs{hbox}-es overprint,
+and the order of specification is immaterial.
+
+In (restricted) horizontal mode \cs{hbox}-es of width zero overprint
+and can be given in any order, \TB{} {\oldstyle389}.
+
+In math mode the zero size boxes overprint.
+In display math the invariant reference point is centered horizontally.
+
+Coding in \TeX{} simple? Forget it!
+So unusual, but \dots con\-sequent, utmost consequent, sigh.
+
+\bluesubhead Coding flashbacks
+
+The codes which follow are the fifth or so version.
+The zeroeth version was there to please me, excited me.
+Recursive programming worked as I expected.
+Then I had a version which served to try out as many examples as I could think of.
+During the process of collecting examples I strove after consistency of the codes.
+Why did I use integer arithmetic anyway?
+I had no good reason and I decided to
+use dimensions and do the arithmetic through the dimensions,
+and widened en-passant the allowed arguments of the winds and
+halfwinds to expand to `factor'-s.
+
+And what about the context?
+
+It seemed necessary to abstract from the multitude of boxes and to come up with
+an enveloping hbox of width zero.
+
+Finally, details were taken care of, such as how do the macros behave in the various
+contexts.
+Do the winds and halfwinds behave the same?
+It turned out that they did not. So I had to go back from where I started.
+I considered the early versions as prototypes and started
+anew guided by specs,
+with simplicity and robustness as yardsticks,
+stating precisely how the elements should behave.
+By all means no sinecure, but IMHO with all respect,
+a must in software engineering.\ftn{In fact I had this article nearly finished
+ when I realized that the vertical rules induce a vbox of the size of the
+ rules, while other directions when boxed yielded a box of size zero.
+ Not nice and confusing, although for the article and in my hands it was ok.
+ Nevertheless, I decided to go for a uniform approach. When boxed the dimensions
+ of the box should be zero.}
+Indeed, a superficially, simple problem.
+
+Is that all? Essentially yes, but \dots details matter.
+
+\bluehead The winds and halfwinds
+
+The intuitive idea is to compose lines out of elements, from what I call atoms.
+I used squares, casu quo rectangles, as atoms, and
+stacked these as follows.\ftn{In order to make it visible
+ \cs{linethickness} has been set to 1ex. Experiments with bullets and \LaTeX's line fonts
+ did not yield the pleasing exact results.}
+
+Essential is how lines leave a mathematical point.
+The accompanying model picture is obtained through the following macros.
+\beginverbatim
+\let\0\N \let\1\NE \let\2\E \let\3\SE
+\let\4\S \let\5\SW \let\6\W \let\7\NW
+\linethickness1ex
+\setbox\hlfwndelm=\hbox{\vrule
+ width\the\linethickness
+ height\the\linethickness depth0pt}
+\unitlength10ex
+\def\draw{\csname\the\dir\endcsname1}
+$$\loop\ifnum\dir<8{\draw}\advance\dir1\repeat$$
+!endverbatim
+
+\thispicture{\linethickness1ex}
+$$\windpic$$
+Remarks. \cs{N} etc.\ draw in the implied directions with length of the argument
+and \cs{unitlength} as scaling.
+
+
+
+
+\bluehead Pondering aloud
+
+Can we attain compatibility with \TeX's rules primitives?
+I don't think so, alas. On the other hand we have to
+reconsider the leaving of the rules from a point.
+
+\bluesubhead Thickness
+
+What is meant by thickness if we stack instead of tile?
+What is the perceived blackness?
+
+I presumed that stacking with square elements
+of size \cs{linethickness}${\times}$\cs{linethickness}\Dash
+ like in the example figure\Dash
+yields the same blackness as a rule of thickness \cs{linethickness}.\ftn{I also
+ supplied macros\Dash tiled variants\Dash for \cs{NW} and \cs{NE}.}
+
+\bluesubhead Size
+
+Usually the size along the x-axis must be provided.
+I prefer to have the real size specified independently from the orientation
+of the line.
+However, the resulting size is not necessarily \#1${\times}$\cs{unitlength}.\ftn{To put
+ it in another way: the required length must be a multiple of the atom size.}
+In general the result differs at most by half the atom size,
+because it is composed of a multiple of the atomic element.
+We have to correct by $\sqrt2$ to compensate for the direction, when we
+pace along one of the axes.
+In the example the required length is {\oldstyle10}ex,
+with as result the stacking of {\oldstyle7} atoms of size {\oldstyle1}ex.
+
+For large lines one could think of combining \LaTeX's line{\oldstyle10}
+line elements with the smaller elements.
+I refrained from that for two reasons.
+Firstly, the \LaTeX's NW line element\Dash the |\char'145|\Dash
+did not fit exactly in the box, and
+secondly, the inflexibility of the thickness of the font elements.
+
+\bluehead Design specs
+
+With awareness of the above I specified the following for the
+microscopic level\Dash the wind and halfwind commands proper\Dash
+and for the macroscopic level\Dash the placement within context.
+
+\bluesubhead Microscopics
+
+The functionality is
+to draw a line of the specified length in the direction as implied by the
+control sequence name.
+The general specifications read as follows.
+\bitem as argument a `factor' is expected, to yield the required length
+ \#1${\times}$\cs{unitlength}\ftn{The idea is that not only integer values
+ can be specified but also decimal fractions.}
+\bitem parameterization is by \cs{linethickness}
+\bitem after drawing, the position of the turtle is at the end of each line,
+ the reference point has been left invariant, and all
+ the boxes have zero width, height and depth.
+\smallbreak
+Extra for the four halfwinds the following.
+\bitem parameterization is by \cs{hlfwndelm} and \cs{linethickness}
+ in there
+\bitem draw a line of $\approx$ the specified size
+\bitem the atoms are stacked diagonally, at the corners.
+\smallbreak
+
+\bluesubhead Macroscopics
+
+The placement within context is the concern of the user.
+Because of the zero dimensions of the boxes it is a nuisance
+to skip or kern when using a picture to create the open space,
+the niche for the picture.
+Moreover, when the picture does not take dimensions we are in trouble
+at page breaks. Therefore assistance is badly needed.
+The picture environment idea combined with
+databases come to rescue.
+The {\it use\/} of prefab pictures has been simplified in this way,
+while there is flexibility via \cs{thispicture} to override the defaults.
+
+Pictures can be stored in BLUe's format pic.dat database.
+Within each database element the default placement within context can be povided for.
+Through the use of \cs{everypicture} and/or \cs{thispicture} the defaults can be
+overriden.
+This approach complies with the general principles adopted in BLUe's format system.
+
+\bluehead Coding the winds and halfwinds
+
+In the fourth version, where emphasis was put on that all boxes have zero dimensions,
+I also decided to separate to get at the (x, y) position from what is put there.
+This is much in the spirit of the second \cs{point} macro of \TB{} {\oldstyle389}, and
+adheres to the {\it separation of concerns\/} adage.\ftn{IMHO it makes the code more
+ trustworthy and circumvents pitfalls.
+ Especially, the mixing up of the kerns needed to get at (x, y)
+ with the kerns to position what has to be put at (x, y).}
+
+The dimension variables \cs{x} and \cs{y} have after completion the values
+of the coordinates of the end of the line.
+\beginverbatim
+\newbox\hlfwndelm
+\newdimen\linethickness \linethickness1ex%.2pt
+\newdimen\auxdim %linesize
+%
+\def\xy#1{%Function: place #1 at x, y
+ \vbox to0pt{\kern-\y
+ \hbox to0pt{\kern\x#1\hss}\vss}}
+%
+\def\xytxt#1{%Function: place text #1 at x, y
+ \xy{\vbox to0pt{\vss
+ \hbox to0pt{\strut#1\hss}\kern0pt}}}
+%
+\def\N#1{\xy{\kern-.5\linethickness
+ \vbox to0pt{\vss
+ \hrule height#1\unitlength
+ width\linethickness}}%
+\advance\y#1\unitlength}
+%
+\def\S#1{\advance\y-#1\unitlength{\N{#1}}}
+%
+\def\E#1{\xy{\vbox to0pt{\vss
+ \hrule width#1\unitlength
+ height\linethickness
+ depth0pt\vss
+}}\advance\x#1\unitlength}
+%
+\def\W#1{\advance\x-#1\unitlength{\E{#1}}}
+%
+\def\NE#1{\auxdim#1\unitlength\correction
+\loop\advance\auxdim-\wd\hlfwndelm
+\ifdim\auxdim>-.5\wd\hlfwndelm
+ \xy{\vbox to0pt{\vss\copy\hlfwndelm}}%
+ \advance\x\wd\hlfwndelm
+ \advance\y\ht\hlfwndelm
+\repeat}
+%
+\def\NW#1{\auxdim#1\unitlength\correction
+\loop\advance\auxdim-\wd\hlfwndelm
+\ifdim\auxdim>-.5\wd\hlfwndelm
+ \advance\x-\wd\hlfwndelm
+ \xy{\vbox to0pt{\vss\copy\hlfwndelm}}%
+ \advance\y\ht\hlfwndelm
+\repeat}
+%
+\def\SW#1{\auxdim#1\unitlength\correction
+\loop\advance\auxdim-\wd\hlfwndelm
+\ifdim\auxdim>-.5\wd\hlfwndelm
+ \advance\x-\wd\hlfwndelm
+ \advance\y-\ht\hlfwndelm
+ \xy{\vbox to0pt{\vss\copy\hlfwndelm}}%
+\repeat}
+%
+\def\SE#1{\auxdim#1\unitlength\correction
+\loop\advance\auxdim-\wd\hlfwndelm
+\ifdim\auxdim>-.5\wd\hlfwndelm
+ \advance\y-\ht\hlfwndelm
+ \xy{\vbox to0pt{\vss\copy\hlfwndelm}}%
+ \advance\x\wd\hlfwndelm
+\repeat}
+%For \NE and \NW the titled variants read
+\def\NE#1{\auxdim#1\unitlength\correction
+\loop\advance\auxdim-.5\wd\hlfwndelm
+\ifdim\auxdim>-.25\wd\hlfwndelm
+ \xy{\vbox to0pt{\vss\copy\hlfwndelm}}%
+ \advance\x.5\wd\hlfwndelm
+ \advance\y.5\ht\hlfwndelm
+\repeat}
+%
+\def\NW#1{\auxdim#1\unitlength\correction
+\loop\advance\auxdim-.5\wd\hlfwndelm
+\ifdim\auxdim>-.25\wd\hlfwndelm
+ \xy{\vbox to0pt{\vss
+ \llap{\copy\hlfwndelm}}}%
+ \advance\x-.5\wd\hlfwndelm
+ \advance\y.5\ht\hlfwndelm
+\repeat}
+!endverbatim
+
+\bluehead Coding a database element
+
+As promised in the Macroscopics section the visibility of the picture\Dash
+ that is the size\Dash
+has to be added when the picture is stored in the database for (re)use.
+In order to do so I added two extra layers.
+The structure of a pic.dat database element, and
+a picture environment on top of for example
+gkp's environment to allow user flexibility.
+
+If we assume that the picture
+proper has been created within gkp's
+\beginverbatim
+\def\gkpbeginpicture(#1,#2)(#3,#4)%
+%#1, #2 xsize, ysize (dimensionless)
+%#3, #4 xshift, yshift (dimensionless)
+{...}
+\def\gkpendpicture{...}
+!endverbatim
+then the flexibility layer reads
+\thispicture{\emc}
+\beginverbatim
+\def\beginpicture{\bgroup
+ \the\everypicture\the\thispicture
+ \gkpbeginpicture(\the\xdim,\the\ydim)%
+ (\the\xoffset,\the\yoffset)%
+ <pictureproper>}
+\def\endpicture{...}
+!endverbatim
+A pic.dat database entry consists of a quadruple:
+\cs{lst} list element tag,
+\cs{<name>pic} the name,
+a group with defaults,\ftn{Demarcated by explicit braces.} and
+the picture proper enclosed by
+\cs{beginpicture} and \cs{endpicture}.
+\beginverbatim
+\lst\<name>pic{<defaults>}
+\beginpicture
+<pictureproper>
+\endpicture
+!endverbatim
+
+\blueexample Coding the database element bintreepic
+
+The \cs{bintreepic} element of the pic.dat database reads as follows.\ftn{Note
+ that there is much flexibilty here. Also the \cs{bintree} macros can be
+ reused as such. \cs{bintreepic} comes down to an invoke of this macro
+ with some flexibilty added.}
+\beginverbatim
+\lst\bintreepic{\bgroup
+ \unitlength.5ex\kk32
+ \xoffset{-32} \yoffset{-2}%
+ \xdim{66}\ydim{5}%
+ \def\eertnib##1\bintree{\fi}
+\beginpicture\bintree\endpicture\egroup}
+%with in the kernel blue.tex
+\def\bintree{\S1\ifnum\kk=2 \eertnib\fi
+ \divide\kk2 {\W{\the\kk}\bintree}%
+ \E{\the\kk}\bintree}
+%and accounting for the leaves
+\def\eertnib#1\bintree{\fi\global\advance\k1
+ \whiteS1\xytxt{ \csname\the\k\endcsname}}
+!endverbatim
+
+\bluehead Coding recursion
+
+Long I believed that tail recursion\Dash as used for example in the
+\cs{loop} \dots \cs{repeat}\Dash is not sufficient. We also have
+to cope with `Ackermann-like splittings' of the recursion.
+For the case of the Pythagorean tree for example, this means that at each recursion
+level we have to take care of the left branch and the right branch, i.e.\ two invocations
+must be done.
+This interferes with how to handle the termination of the recursion.
+A problem? \TeX{} too difficult?
+Hang on there are at least two elegant and general solutions.
+
+\bluesubhead Recursion termination
+
+\blueexample $n$!
+
+As pedagogical example the calculation of $n$!
+\beginverbatim
+\n=... %counter var
+\nfac=1 %default
+\def\fac{\ifnum\n=1 \caf\fi
+ \multiply\nfac\n \advance\n-1 \fac}
+\def\caf#1\fac{\fi}
+!endverbatim
+The termination is obtained because \cs{fac} is used as end terminator
+in the definition of \cs{caf}. \cs{fac} is implicitly gobbled, and
+the process backtracks, resulting finally in termination.
+
+\blueexample Pythagorean tree
+
+Without explanation the Pythagorean tree recursive macro
+is given below.\ftn
+{Hopefully, it is self-explanatory, at least
+ with respect to the main flow. By the way in what order
+ is the tree drawn?}
+At each level we have two invocations\Dash the branching\Dash
+to take care of the left and right branch.
+\beginverbatim
+\def\pythtree{\ifnum\level=1 \eerthtyp\fi
+ \advance\level-1
+ \multiply\kk23\divide\kk32%\sqrt2
+ {\leftbranch\draw\pythtree}%
+ \rightbranch\draw\pythtree}
+\def\eerthtyp#1\pythtree{\fi}
+!endverbatim
+No build up of \cs{fi}-s, no use of \cs{expandafter} nor \cs{let}.
+The \cs{let} mechanism has been used throughout in \TB.
+
+\bluesubhead A la Knuth
+
+In the coding of \cs{squine}\Dash a quadratic spline\Dash
+Knuth showed how to terminate (tail) recursions in \TeX.
+For \cs{fac} this results in the following.
+\beginverbatim
+\def\fac{\ifnum\n>1 \expandafter\dofac\fi}
+\def\dofac{\multiply\nfac\n
+ \advance\n-1 \fac}
+!endverbatim
+
+For the Pythagorean tree the result reads as follows.
+\beginverbatim
+\def\pythtree{\ifnum\level>1
+ \expandafter\dopyth\fi}
+\def\dopyth{\advance\level-1
+ \multiply\kk23\divide\kk32
+ {\leftbranch\draw\pythtree}%
+ \rightbranch\draw\pythtree}
+!endverbatim
+Earlier I noticed the elegance of introducing an extra level, especially
+to circumvent too many \cs{expandafter}-s in a row.
+
+As an aside the use reads
+\beginverbatim
+\let\0\N \let\1\NE \let\2\E \let\3\SE
+\let\4\S \let\5\SW \let\6\W \let\7\NW
+\def\leftbranch{\advance\dir7
+ \ifnum\dir>7 \advance\dir-8 \fi}%mod 8
+\def\rightbranch{\advance\dir1
+ \ifnum\dir>7 \advance\dir-8 \fi}%mod 8
+\def\draw{\csname\the\dir\endcsname{\the\kk}}
+\def\pythtree{\ifnum\level>1
+ \expandafter\dopyth\fi}
+\def\dopyth{\advance\level-1
+ \multiply\kk23\divide\kk32
+ {\leftbranch\draw\pythtree}%
+ \rightbranch\draw\pythtree}
+$$\unitlength0.1pt\kk128 %Size
+ \level5%Order
+ \N{\the\kk} %Trunk
+ \pythtree$$
+\tracingstats1
+\bye
+!endverbatim
+
+\bluehead Trinaries
+
+For {\oldstyle45}$^\circ$ lines I used square elements.
+Why not use a rectangular element for {\oldstyle30}$^\circ$ lines
+in conformance to the direction?
+
+{\catcode`\^=7 \blueexample Lines at {\oldstyle30}$^\circ$
+
+}
+$$\trimodelpic$$
+This model is obtained by
+\beginverbatim
+$$\x0pt\y0pt
+ {\N{10}}{\ESE{10}}{\WSW{10}}$$
+%with initializations
+\linethickness1ex
+\setbox\trielm=\hbox{\vrule
+ width1.74\linethickness
+ height\linethickness\relax}
+%To account for element in 30 degrees direction
+\unitlengthy\ht\trielm %default.2pt
+\unitlengthx\wd\trielm %default.3482pt
+\unitlength\unitlengthy%default.2pt
+%and the macros
+\def\WSW#1{\auxdim#1\unitlength\divide\auxdim2
+ \loop\advance\auxdim-\unitlengthy
+ \ifdim\auxdim>-.5\unitlengthy
+ \advance\x-\unitlengthx
+ \advance\y-\unitlengthy
+ \xy{\vbox to0pt{\vss\copy\trielm}}%
+ \repeat}
+%
+\def\ESE#1{\auxdim#1\unitlength\divide\auxdim2
+ \loop\advance\auxdim-\unitlengthy
+ \ifdim\auxdim>-.5\unitlengthy
+ \advance\y-\unitlengthy
+ \xy{\vbox to0pt{\vss\copy\trielm}}%
+ \advance\x\unitlengthx
+ \repeat}
+!endverbatim
+
+\blueexample Trinary tree
+
+$$\N{128}\tritreepic$$
+\beginverbatim
+$$\x0pt\y0pt\level6 \kk128\N{128}\tritree$$
+%with trinary tree macro
+\def\tritree{\ifnum1=\level \eertirt\fi
+ \advance\level-1 \divide\kk2
+ {\N{\the\kk}\tritree}%
+ {\ESE{\the\kk}\tritree}%
+ \WSW{\the\kk}\tritree}
+\def\eertirt#1\tritree{\fi}
+!endverbatim
+Remark. The \cs{unitlength}-s are default
+ equal to the sides of the elementary rectangular block.
+ The size of the tree can be controlled by \cs{kk}.
+
+\bluehead Epilogue
+
+The lines at {\oldstyle45}$^\circ$ have little compatibility
+with \TeX's rules, alas, especially with non-neglible thickness.
+I was surprised to realize that \TeX's defaults for rules are
+not symmetric around their axes in relation to the reference point.
+\medskip\noindent
+Have fun, and all the best.
+
+\makesignature\let\makesignature\relax
+
+\bluehead Appendix: Binary tree and chart
+
+\blueexample Binary tree
+
+\beginverbatim
+\bluepictures\bintreepic\par
+$$\bintreepic$$
+!endverbatim
+with result
+$$\bintreepic$$
+
+How can we add leaves\ftn{See the PWT user guide for the answer.}?
+
+\bluesubhead Rotated tree
+
+Once we understand turtle graphics, rotating a tree can be done easily
+by shifting the meaning of the directions, and adjusting the
+positioning of the leaves.\ftn{A white lie. The tree is actually mirrored
+ because I like the leaves to be numbered from the top.
+ In general we can rotate via \PS.}
+
+\blueexample Rotated tree
+
+\begindemo
+\thispicture{\def\1{cgl}
+ \def\2{PWT}\def\3{July}
+ \def\4{1995}\def\5{\dots}
+ \yoffset{-16}\ydim{28}}
+$$\rotatedbintreepic$$
+!yields
+\thispicture{\def\1{cgl}\def\2{PWT}
+ \def\3{July}\def\4{1995}
+ \def\5{\dots}\def\6{}\def\7{}
+ \yoffset{-16}\ydim{28}}
+$$\rotatedbintreepic$$
+\enddemo
+\cs{bintree} and \cs{eertnib} come with blue.tex, and
+\cs{rotatedtreepic} is included in pic.dat.
+The \cs{rotatedtreepic} entry reads as follows.
+\beginverbatim
+\lst\rotatedbintreepic{%July 1995, cgl
+\bgroup\unitlength1ex%
+ \let\W\N \let\exchange\E
+ \let\E\S \let\S\exchange
+ \def\1{x}\def\2{y}\def\3{a}\def\4{b}%
+ \def\5{piet}\def\6{hans}\def\7{etc.}%
+ \k0\kk16\xdim{10}\ydim{30}%
+\beginpicture\bintree\endpicture\egroup
+\thispicture{}}
+!endverbatim
+
+\bluesubhead Chart
+
+Through the \cs{bintree} macro we can also
+obtain charts elegantly.
+
+\blueexample Chart, \TB{} ex{\oldstyle22}.{\oldstyle14} {\oldstyle248}
+
+$$\chartpic$$
+obtained via
+\beginverbatim
+%labels in preorder (default in \chartpic)
+\def\1{LMB, 1912}
+\def\2{MJHB, 1882}\def\5{PAME, 1884}
+\def\3{JHB, 1838} \def\4{MDB, 1840}
+\def\6{EFE, 1845} \def\7{CLW, 1850}
+\ekk8
+\k0\unitlength2ex\x0pt\y0pt\kk8
+\hbox{\bintree}
+%with auxiliaries
+\let\Eold\E
+\def\E{\global\advance\k1
+ \xytxt{ \csname\the\k\endcsname}\Eold}
+!endverbatim
+Remark. An aid in finding the numbers of the branches is
+to delete \cs{csname} and \cs{endcsname} in \cs{E} .
+The way of traversal at hand is called preorder.
+
+When using \cs{chartpic} from |pic.dat| the texts along the branches
+\Dash |\def\1{...} etc.|\Dash
+have to be supplied within a \cs{thispicture},
+to override the defaults.
+\medbreak
+\makesignature
+\pasteuptoc
+\endscript
diff --git a/info/laan/paradigm/paradigm.lps b/info/laan/paradigm/paradigm.lps
new file mode 100644
index 0000000000..8f8ad6666d
--- /dev/null
+++ b/info/laan/paradigm/paradigm.lps
@@ -0,0 +1,566 @@
+%Paradigm: Loops. Aug 1995, revised Feb 1996
+%C.G. van der laan, cgl@rc.service.rig.nl
+\input blue.tex \loadtocmacros %\tolerance500\hbadness=499\hfuzz=5pt
+\everyverbatim{\emc}
+
+\bluetitle Paradigms: Loops
+
+\blueissue \maps{96}2
+
+\bluepictures\flowchartlooppic\pythpic
+
+%And to test van der Goot's variant it is supplied here
+\def\loop#1\repeat{\def\body{#1}\doloop}
+\def\doloop{\body\else\poolod\fi\doloop}
+\def\poolod#1\doloop{\fi}
+\beginscript
+
+\bluehead BLUe's Design VII
+
+Hi folks.
+When you like plain's \cs{loop}-s so much as I do then this is for you.
+Hang on!
+\DeK's loop implements the flow, \TB{} \on219{}
+
+\begindemo
+\def\loop#1\repeat{%
+ \def\body{#1}\iterate}
+\def\iterate{\body
+ \let\next\iterate
+ \else\let\next\relax
+ \fi\next}
+!yields
+\flowchartlooppic
+\enddemo
+
+with as pseudosyntax for the tags
+
+\cs{loop}$\langle pretst\rangle$\cs{if...}%
+$\langle posttst\rangle$\cs{repeat}.
+
+Special cases result when either
+$\langle pretst\rangle$, or
+$\langle posttst\rangle$ is empty.
+The former is equivalent to for example
+PASCAL's {\bf while} \dots {\bf do} \dots, and the latter to
+{\bf repeat}\dots {\bf until}.
+From this I conclude that all those \cs{while} casu quo \cs{repeat} flavors
+are not needed.
+Syntactic sugar? Yes, IMHO, with all respect.
+
+In practice we all need repetitions either via a loop or
+via tail recursion, which by the way are equivalent.
+The loop notation is simpler to use than tail recursion, I guess.
+
+\bluehead Van der Goot's loop
+
+Van der Goot implemented the loop construction as a straight tail recursion.
+An eye-opener! I have simplified it into the following.\ftn{The unusual in the coding
+ is the infinite loop. I have to unlearn much. In the old days of ALGOL \on60{}
+ I was taught to avoid side-effects and infinite loops of course.
+ With the expression language ALGOL \on68{} all storing was a side-effect.
+ Now with the interpretive languages it is beneficial to think in infinite loops.}
+
+\beginverbatim
+\def\Loop#1\Pool{#1\Loop#1\Pool}
+\def\Break#1\Pool{}
+%a trivial example of use
+\count0=10
+\Loop a \advance\count0 by-1
+ \ifnum\count0=0 \expandafter\Break\fi
+\Pool
+\end
+!endverbatim
+
+For more details see his Midnight suite, |loop.doc| and |loop.tex|.\ftn{Available
+ on the \TeX-Alive TUG CD.}
+
+Remark. Either \cs{expandafter} is needed or the \cs{Break} should take
+\cs{fi} as replacement text.
+The above with \cs{expandafter} is convenient with nesting of loops.
+
+\bluehead Loops in markup
+
+I used a loop in the markup for turtle graphics, especially for the
+stochastic Sierpi\'nski carpets\Dash to throw the dice repeatedly\Dash
+and for a spiral. In the markup for the spiral below
+\cs{E}, \dots \cs{N} mean draw in the directions east, \dots north.
+
+\blueexample Spiral
+
+$$\vbox to3cm{\vss
+ \hsize0pt \offinterlineskip
+ \unitlength.5ex \y0pt \x0pt
+ \loop\N{\the\k}\advance\k+1
+ \W{\the\k}\advance\k+1
+ \S{\the\k}\advance\k+1
+ \E{\the\k}\advance\k+1
+ \ifnum\k<30 \repeat
+\vss}$$
+
+\thisverbatim{\unmc}
+\beginverbatim
+$$\vbox to3cm{\vss
+ \hsize0pt \offinterlineskip
+ \unitlength.5ex \y0pt \x0pt
+ \loop\N{\the\k}\advance\k+1
+ \W{\the\k}\advance\k+1
+ \S{\the\k}\advance\k+1
+ \E{\the\k}\advance\k+1
+ \ifnum\k<30 \repeat
+\vss}$$
+!endverbatim
+
+Remark. One can also start at a corner. However, for reuse of these kinds of pictures
+I consider it more convenient to start at the center of symmetry.
+
+Most of the time I use the tail recursion via my FIFO or (binary)
+tree macros.
+My favorite FIFO example is the outline exercise
+\TB{} ex{\oldstyle11}.{\oldstyle5}.
+I solved this via nested FIFO
+ processing
+\item{-} words via \cs{fifow}, and
+\item{-} characters via \cs{fifo}.
+\smallbreak
+
+\blueexample Outlines
+
+\beginverbatim
+\fifow Tough exercise \wofif \unskip.
+%with
+\def\fifow#1 {\ifx\wofif#1\wofif\fi
+ \processw{#1}\fifow}
+\def\processw#1{\fifo#1 \ofif\ }
+\def\process#1{\boxit#1}
+\def\boxit#1{\setbox0=\hbox{#1}%
+ \hbox{\lower\dp0\vbox{\hrule
+ \hbox{\vrule\phantom#1\vrule}%
+ \hrule}}}
+!endverbatim
+\def\fifow#1 {\ifx\wofif#1\wofif\fi
+ \processw{#1}\fifow}
+\def\processw#1{\fifo#1\ofif\ }
+\def\process#1{\boxit#1}
+\def\boxit#1{\setbox0=\hbox{#1}%
+ \hbox{\lower\dp0\vbox{\hrule
+ \hbox{\vrule\phantom#1\vrule}%
+ \hrule}}}
+\qquad\qquad\qquad
+\fifow Tough exercise \wofif \unskip.
+
+Another nice example is writing lines verbatim to a file, that is manmac's
+\cs{copytoblankline} recast in FIFO terms.\ftn{See FIFO and LIFO sing the BLUes.}
+
+\blueexample Sorting citation lists
+
+Suppose, we have
+\beginverbatim
+\def\lst{\\\ia\\\ib\\\ic}
+\def\ia{314}\def\ib{27}\def\ic{1}
+!endverbatim
+{%scope for \\
+\newif\ifnoe
+\def\ia{314}\def\ib{27}\def\ic{1}
+\def\lst{\\\ia\\\ib\\\ic}
+\def\\{ } \immediate\write16{Numbers unsorted \lst}
+%
+\def\dblbsl#1{\ifnum#1<\min\let\min=#1\fi}
+%
+then sorting \cs{lst} yields
+\loop\ifx\empty\lst\noefalse
+ \else\noetrue\fi
+\ifnoe\def\\{\let\\=\dblbsl\let\min=}
+ \lst%find true minimum
+ \min%typeset minimum
+ {\def\\##1{\ifx\min##1\else
+ \noexpand\\\noexpand##1\fi}%
+ \xdef\lst{\lst}}%delete minimum
+\repeat.
+}%end scope for \\
+
+The above is obtained as follows.
+
+\thisverbatim{\unmc}
+\beginverbatim
+\def\dblbsl#1{\ifnum#1<\min\let\min=#1\fi}
+%
+\Loop\ifx\empty\lst\expandafter\break\fi
+ \def\\{\let\\=\dblbsl\let\min=} %space
+ \lst%find minimum
+ \min%typeset minimum
+ {\def\\#1{\ifx#1\min \else\nx\\%
+ \nx#1\fi}\xdef\lst{\lst}}%
+\Pool
+%with auxiliaries
+\def\Loop#1\Pool{#1\Loop#1\Pool}
+\def\break#1\Pool{}
+!endverbatim
+
+The coding implements the looping of the basic steps
+\item- find minimum (via \cs{lst},
+ and suitable definition of \DeK's active list separator |\\|)
+\item- typeset minimum (via \cs{min})
+\item- delete minimum from the list (via another appropriate
+ definition of the list element tag).
+\smallbreak
+
+Remarks.
+\cs{dblbsl} is mnemonics for double backslash.
+The deletion of elements from the list works with \cs{ifx}.
+The variant with \cs{ifnum} does not work as such (!)
+because a \cs{relax} is inserted by \TeX.\ftn
+{The \cs{relax} can be suppressed by inserting an unexpandable token
+ like \cs{noexpand} \cs{empty}. Courtesy Bernd Raichle.}
+
+The problem occurred in sorting citation lists of bibliography references
+which are specified by their symbolic names.\ftn
+{In BLUe's bibliography I have explained how to circumvent
+ the sorting of citation lists of references.}
+
+\blueexample Reading a file line by line
+
+\beginverbatim
+\Loop\ifeof\readfile\Break\fi
+ \read\readfile to\inputline
+ <process \inputline>
+\Pool
+%with auxiliary
+\def\Break#1\Pool{\fi}
+!endverbatim
+
+This use occurred in the Convertor Assistant BLUe-2-\LaTeX,
+well \dots it is the main loop.
+
+\bluesubhead Relevancy
+
+From my experience as exemplified above,
+I conclude that loops are mainly of interest for macro writers and
+not so much for the casual \AllTeX{} user.
+
+\bluehead Macro writers attention
+
+Knuth's loop does not allow for the use of \cs{else} in the exit code
+because it is already part of the macro \cs{loop}.
+Kabelschacht \on1987\Dash and Spivak \on1989\Dash needed the use of \cs{else}.
+
+\blueexample Kabelschacht's loop
+
+Kabelschacht removed the \cs{else} from the loop code as follows.
+
+\beginverbatim
+\def\loop#1\repeat{\def\iterate{#1\ea
+ \iterate\fi}\iterate}
+%a trivial example of use
+\count0=10
+\loop\advance\count0 by-1
+ \ifnum\count0=0
+ \else do what has to be done
+\repeat
+!endverbatim
+
+Remarks.
+The exit is via the then-branche in contrast with Knuth's loop.
+Suppressed are some efficiency aspects with respect to storage.
+Kabelschacht's claim that his
+loop is a {\em generalization\/} of plain's loop must be seen
+in the light of not being restricted to quit a loop via the else-branch.
+
+The reason, I can think of,
+for introducing another loop macro, while the most
+general form has been implemented already,
+is the existence of commands like \cs{ifvoid}, and \cs{ifeof}, and
+the absence of their negatives \cs{ifnonvoid}, respectively \cs{ifnoneof}.
+In those cases we like to continue the loop via the \cs{else} branch.
+For the latter case this means to continue
+the loop when the file is {\em not\/} ended.
+This can be obtained via modifying the loop \`a la Kabelschacht or more elegantly
+via van der Goot's macro.
+
+Another approach is to use a \cs{newif} parameter,
+better known as `boolean' or `logical' in other programming languages,
+together with Knuth's loop.
+A \cs{newif} parameter, \cs{ifneof},
+can be used to test for an end of file or casu quo, an end of a list.
+
+\beginverbatim
+\ifx\lst\empty\neofalse\else\noetrue\fi\ifneo
+!endverbatim
+
+\blueexample Reading a list via Knuth's loop
+
+\beginverbatim
+\newif\ifneo
+\def\lst{a b c}\neotrue
+\loop\ifx\lst\empty\neofalse\fi
+ \ifneo \def\lst{}
+\repeat
+!endverbatim
+
+Related to the above coding of the logical $\neg$, are the codings
+of the logical and, $\wedge$, and or, $\vee$, via
+
+$$\vbox{\offinterlineskip\halign{#\enspace\hfil\vrule&\enspace#\hfil\strut\cr
+\strut Functional code&\TeX\ coding\cr
+\noalign{\hrule}
+$\neg$|\if...|
+ &|\if...\notfalse\else|\cr
+ &|\nottrue\fi\ifnot|\cr
+|\if...|$\wedge$|\if...|
+ &|\andtrue\if...\if...| \cr
+ &|\else\andfalse| \cr
+ &|\else\andfalse\fi\fi| \cr
+ &|\ifand| \cr
+|\if...|$\vee$|\if...|
+ &|\ortrue| \cr
+ &|\if...\else\if...\else| \cr
+ &|\orfalse\fi\fi \ifor| \cr
+ &|%alternative| \cr
+ &|\orfalse| \cr
+ &|\if...\ortrue\fi| \cr
+ &|\if...\ortrue\fi| \cr
+ &|\ifor| \cr
+}}$$
+with the \cs{newif}-s: \cs{ifnot}, \cs{ifand}, and \cs{ifor}.\ftn
+{By the way, now I have you on the line about Booleans,
+ did you ever understand the macro \cs{newif}?
+ If not let me tell you that \cs{global} |\<name>true| and its false
+ counterpart make sense, but \cs{global} \cs{newif} |\if<name>| does not.
+ \TeX{} {\em does not\/} complain but the `allocation' remains non-global.
+ A bit inconsistent with the global allocations of other data like
+ counters\smiley.}
+
+
+\bluehead Nesting of loops
+
+My favorite example of nesting of loops is the bubble sort.\ftn{\cs{cmp}
+ stands for comparison. \cs{xch} stands for exchange.
+ For a pseudocode see Paradigms: Sorting.}
+
+\thisverbatim{\unmc}
+\beginverbatim
+\def\bubblesort{%Data in defs \1, \2,...\<n>.
+{\loop\ifnum1<\n{\k\n
+ \loop\ifnum1<\k \advance\k-1
+ \cmp{\deref\k}{\deref\n}%
+ \ifnum1=\status\xch\k\n\fi
+ \repeat}\advance\n-1
+ \repeat}}%end \bubblesort
+%with auxiliary
+\def\deref#1{\csname\the#1\endcsname}
+\let\cmp\cmpn %from blue.tex or provide
+%\def\cmp#1#2{%Yields
+% status=0, 1, 2 for =, >, <
+%{...}
+!endverbatim
+
+\bluesubhead Inconsistency pitfall
+
+I experience the non-expansion of a counter variable\Dash
+ or the non-dereference of it as you wish\Dash
+within a \cs{csname} counter-intuitive.
+The counter must be preceded by \cs{the}, see \cs{deref}.
+I understand the difference with the situation
+that a value might be assigned but in this constructs this is out of order.
+
+Another nesting of `loops' is in the earlier mentioned linear sorting fo citation lists,
+where the inner loop is the \cs{xdef}.
+
+\bluesubhead Braces around inner loops are mandatory
+
+Pittman argued that there is a need for other loop codings.
+\beginquote
+`Recently, I encountered an application that required a set of nested loops
+and local-only assignments and definitions.
+\TeX's \cs{loop} \dots \cs{repeat} con\-struc\-tion proved to be
+inadequate because of the requirement
+that the inner loop be grouped.'
+\endquote
+In `Syntactic Sugar' I have shown that his problem can be solved
+from a table point of view.\ftn{It is also in the tables chapter of PWT.}
+
+However, Pittman was definitely right with respect to bracing the inner loop,
+because of the parameter separator \cs{repeat}.
+If braces are omitted, the first \cs{repeat} is mistaken for the outer one,
+with the result that the text of the outer loop will
+{\em not\/} become the first \cs{body}.
+The good way is, to make the inner \cs{repeat} invisible for the
+outer loop level, by enclosing the inner loop in braces.
+
+With non-explicit nesting\Dash for example the inner loop is the
+replacement text of a macro\Dash we still need scope braces,
+because otherwise the \cs{body} of the outer loop
+will be silently redefined by the body of the inner loop.
+
+\bluesubhead Dialogue with \TeX
+
+Nestings of loops occur when in dialogue with \TeX{} only certain answers
+are allowed.
+
+\blueexample Checking user input
+
+\beginverbatim
+%Insist on allowed answers only
+\def\iw{\immediate\write0}
+\def\readyesornotoanswer{{%
+ \def\yes{yes}\def\no{no}
+ \Loop\iw{Please provide yes or no:}
+ \read-1 to\answer
+ \ifx\answer\yes\ea\Break\fi
+ \ifx\answer\no \ea\Break\fi
+ \Pool\xdef\answer{\answer}}}
+%
+\let\yes\Break\let\no\relax
+\endlinechar-1 %TB20.18
+\Loop\message{Are you happy? }
+ \readyesornotoanswer
+ \ea\csname\answer\endcsname
+ \iw{Too bad, I insist...}
+\Pool
+\bye
+!endverbatim
+Remarks. The \cs{xdef} makes the answer globally available.
+En-passant a little `switch functionality in \TeX' is realized via \cs{csname}.
+
+\bluehead Hidden counter
+
+I like a hidden counter very much.\ftn{As in ALGOL \on68{}, METAFONT/MetaPost, or PostScript.}
+In \TeX{} we don't have a garbage collector and therefore
+there is no gains in storage. However, to alleviate
+the user from the details of the allocation of
+storage of the counter I provided the following.\ftn{Bernd Raichle has implemented local
+ storage allocation macros. Although I can see the benefits of his robust approach especially
+ together with push-the-button packages like \LaTeX, I refrained from it, because
+ for my applications I know that the bounds\Dash only {\oldstyle 256} locations are
+ available\Dash are not severe. Moreover, intelligibility is hampered, and I like to add
+ just a little to \TeX, as little as possible.}
+\beginverbatim
+\def\preloop{%To create loopcnt, a
+ %local loopcounter
+ \bgroup \advance\count10 by 1
+ \countdef\loopcnt=\count10
+ %Symbolic name
+ \loopcnt=1 %(default)
+ }%end \preloop
+\def\postloop{\loopcnt=0 %Restore
+ \egroup}%end \postloop
+!endverbatim
+
+I used the above in the coding of the Tower of Hanoi game.
+The paradigm in there is that it is used together with \cs{aftergroup}\Dash shortcut \cs{ag}\Dash
+to create {\em dynamically\/} a data structure, i.e.\ the tower of which the size is specified
+by the user.
+\thisverbatim{\unmc}
+\beginverbatim
+% \def\I{\disksep\i\disksep\ii
+% \disksep\iii...\disksep\`n'}
+%next to the defs for \i,\ii,...\`n'.
+\preloop\ag\def\ag\I\ag{%
+ \loop
+ \ea\xdef\csname\romannumeral\loopcnt
+ \endcsname{\the\loopcnt}
+ \ag\disksep\ea\ag\csname
+ \romannumeral\loopcnt\endcsname
+ \ifnum\loopcnt<\n
+ \advance\loopcnt by1
+ \repeat \ag}
+\postloop
+!endverbatim
+Note that \cs{disksep} is \DeK's active list separator, which I use abundantly in macro writing.
+I call it the list element tag, because it is also needed before the first element.\ftn{I use
+ them also with more than one argument,
+ especially in selective loading of entries from a database.
+ The above construction of a list is also used in my test example for sorting random
+ words. Each character is obtained randomly and placed after the loop to form words of
+ random length. Neat.}
+
+\bluehead Flip-flop traversal
+
+In programming it occurs that loops are traversed with the first
+traversal different from the others. In practice I needed\Dash
+ well, it was more elegant\Dash
+in a play to handle only one player in each traversal but toggle the players:
+player, opponent, player, opponent, etc.
+\def\data{+\cs o\cs+\rs \cs o\cs+\rs o\cs \cs +}
+$$\ruled\btable\data$$
+The play at hand was tic-tac-toe, and the prototype implementation
+which demonstrates the toggling reads as follows.
+\beginverbatim
+\def\play{\initialize
+\loop\showboard
+ \ifx\mark\markplayer\let\mark\markopponent
+ \else\let\mark\markplayer
+ \fi\iw{Supply index for \mark:}
+ \read0to\index
+ \ea\xdef\csname\index\endcsname{\mark}
+\ifnum\index>0
+\repeat}
+\def\markplayer{+}\def\markopponent{o}
+\endlinechar-1 %TB20.18
+\play \bye
+%with auxiliaries
+%(\iw is shortcut for \immediate\write0)
+\def\showboard{\iw{\1\2\3}...\iw{\7\8\9}}
+\def\initialize{\def\1{-}...\def\9{-}}
+!endverbatim
+
+In a general sense I need often in a repetitive situation to do something different
+at the beginning or at the end. Examples are my implementation of
+\item-\cs{nitem}\Dash
+numbered item and ilks
+\item-to suppress the first headline of a chapter, and
+\item-the |\\| in the linear sorting at the beginning.
+
+\bluehead Trees
+
+Another intriguing repetitive or tail-recursive situation occurs when
+coding trees in \TeX.\ftn{Well also in METAFONT and PostScript.}
+For fun\Dash though the undertone is serious\Dash
+I have added a tree from the Pythagorean family, borrowed from |pic.dat|.
+
+$$\thispicture{\level6 \ydim{70}}\pythpic$$
+
+The essence of the implementation in \TeX{} of the repetition is shown below.
+For the full coding consult |pic.dat|.
+\beginverbatim
+\let\drawsq\ldrawsq %left drawing square
+\def\pyth{\ifnum\level=1 \htyp\fi
+ \drawsq\advance\level-1
+ \multiply\kk18\divide\kk25
+ {\turn7\x\leftx \y\lefty
+ \let\drawsq\ldrawsq\pyth}%
+ \turn1\x\rightx \y\righty
+ \let\drawsq\rdrawsq\pyth}
+\def\htyp##1\pyth{\fi}
+!endverbatim
+\cs{turn} turns over a multiple of {\oldstyle45}$^\circ$.
+(\cs{leftx}, \cs{lefty}) and (\cs{rightx}, \cs{righty})
+contain the coordinates to start drawing a left square and
+a right square, respectively.
+
+\bluehead Conclusion
+
+Many slightly different codings for a loop are around.
+This contributes to the reasons why understanding macro collections is so hard.
+It is so easy to come up with a variant, inhibiting intelligibility and trustworthyness.
+
+I consider van der Goot's loop the simplest and most general,
+though Knuth's loop is usually sufficient for me.
+
+\bluehead Looking back
+
+It is fun to flashback at for example Child's \TeX{} Selftest, \on1989,
+and to conclude that much of the perceived important \TeX ing nitty-gritties
+is not needed\Dash not to mention all those essential issues which are lacking\Dash
+when developing something like BLUe's format system.
+
+This is precisely the reason why I pay so much attention to flashbacks,
+to summarize the paradigms, to bring to light what is needed in practical work,
+in such a way that the essence can be reused easily.
+Towards a discipline of \TeX ing.
+My case rest.
+\medbreak
+Have fun, and all the best
+\makesignature
+\pasteuptoc
+\endscript \ No newline at end of file
diff --git a/info/laan/paradigm/paradigm.opt b/info/laan/paradigm/paradigm.opt
new file mode 100644
index 0000000000..e44d9d414f
--- /dev/null
+++ b/info/laan/paradigm/paradigm.opt
@@ -0,0 +1,463 @@
+%November 1994, March 1996.
+%Paradigm: Parameterization---Options
+%C.G. van der laan, cgl@rc.service.rug.nl
+\input blue.tex \loadtocmacros
+\tolerance500\hbadness=499\hfuzz=9pt
+\parindent=1pc
+
+\everyverbatim{\emc}
+
+\bluetitle Paradigms: Parameterization I
+
+\bluesubtitle Options
+
+\blueissue \maps{95}1
+
+\beginscript
+
+\bluehead BLUe's Design IV
+
+Hi folks. Much parameterization in \TeX{} has already been
+taken care of via the various modes of \TeX, that is by the states
+script elements can be processed in.
+How ingenious and handy that may be, it is not sufficient.
+
+Knuth also provided switching commands for fonts, formats and
+language.\ftn{For example \cs{eightpoint}, \cs{report} (well in
+ \bluetex),
+ and \cs{language1}. Similar to the font switching macros I used
+ \cs{english}, \cs{dutch} and the like, to activate all
+ language dependent parameters for typesetting bridge
+ with the right words. Early \LaTeX{} had several
+ words `hardwired' in the code in English.
+ The latter was the reason for Johannes Braams to give birth
+ to Babel, to parameterize and concentrate language specific
+ issues, and to allow easy switching
+ from one language to another.}
+
+Then there are the various parameters\Dash integer, dimen,
+glue, muglue\Dash as listed in \TB{} \on272\dash\on274.
+
+Markup tags can be parameterized via (at most \on9) arguments.
+However, there exist also for this purpose (global) token variables\Dash
+the |\every<tag>|s\Dash with \cs{output} and \cs{errhelp} as special cases.
+
+To remind the reader of Knuth's \cs{every}s, I have
+enumerated them below.
+\beginverbatim
+\everypar
+\everymath, and \everydisplay
+\everyhbox, and \everyvbox
+\everyjob
+\everycr
+!endverbatim
+For using them, it is important to know where the token variables are
+precisely inserted.\ftn{For example, in a setbox the right-hand
+ side of \cs{afterassignment}
+ is inserted after the opening brace of the box and
+ followed by the tokens of |\everyh/vbox|.}
+
+For my taste Knuth's |\every<tag>|s
+have not been appreciated as they should have been, the more so
+when extended by the analogons |\this<tag>|s.\ftn{This functionality of |\this<tag>|
+ can be obtained via the use of |\every<tag>| within a group. However, readability
+ of the marked up script is served by the use of |\this<tag>|-s.}
+This in contrast with the abundant use of arguments,
+especially the so-called optional arguments.
+
+\bluesubhead Why?
+
+The purpose of this note is to show that
+optional arguments have led to cumbersome \TeX{} coding, while
+the same functionality can be attained more easily via the use of
+|\this<tag>|s.
+In general one can devote a monograph to markup language
+parameterization, I guess.
+
+\bluehead Examples of use of \cs{every}s
+
+I inspected \TB{} for examples of use by Knuth himself.
+
+\bluesubhead \cs{everypar}
+
+An example of use is given in Appendix~D \on381, about
+verbatim listings with line numbers. In \bluetex{} I enriched this
+approach by allowing selective line numbering.
+I mean by the latter that I can number parts,
+starting with any suitable number.
+This is handy when macro sets are accompanied by a table of contents
+(as should always be the case), which contains references to
+the line numbers of the macro set.
+From \bluetex{} the following.
+
+\thisverbatim{\catcode`\*=0
+ \catcode`\!=12 }
+\beginverbatim
+\def\setupverbatim{\makeactive\`%
+ \let\!=!\makeescape\!%Knuth&Levy
+ \def\par{\leavevmode\endgraf}%381
+ \obeylines \uncatcodespecials
+ \obeyspaces}
+%
+\def\numvrb{\vrblin0
+ \everypar{\advance\vrblin1
+ \llap{\sevenrm\the\vrblin\quad}}}
+%
+\def\nonum{\everypar={}}
+*endverbatim
+
+Note that the line numbers can be adjusted via modifying the counter \cs{vrblin}.
+
+Another example is provided on \on393, in Paragraph maneuvers.
+It is about automatically inserting \cs{hangindent} and \cs{hangafter}.
+
+In manmac it is used in
+\bitem \cs{endchapter}, as |\everypar{\sl}|, to set the quotations slanted.
+\bitem \cs{beginlines}, as |\everypar{\strut}|, to insert a strut.
+\smallbreak
+
+\bluesubsubhead A pitfall
+
+What is the unexpected result of
+
+\beginverbatim
+\par%or other ending of a paragraph
+{\bf New paragraph} blah blah
+!endverbatim
+
+with |\everypar{\hang}| active\ftn{Courtesy Alan Reese}?
+And why?\ftn{Courtesy Jeremy Henty.}
+Note that \cs{bf} is only there to make the pitfall look realistic.
+
+Answer.
+Without braces the text comes out as a block. With the braces at the
+beginning there is no effect of the automatically inserted \cs{hang}.
+The explanantion reads as follows.
+When processing ordinary text, \TeX{} does not enter horizontal mode
+until it encounters a letter. In the troublesome paragraph the first
+letter is inside a group. When the group ends all local assignments
+are undone, and the effect of the \cs{hang} instruction\Dash
+the contents of \cs{everypar} is inserted within the group\Dash
+is forgotten.
+A solution is to precede the group by \cs{leavevmode},
+because the \cs{everypar} will be executed before the group then.
+
+\bluesubhead \cs{everydisplay}
+
+This is used in the solution of exercise \on19.\on4 to obtain non-centered displays.
+
+\beginverbatim
+\def\leftdisplay#1$${\leftline
+ {\indent$\displaystyle{#1}$}$$}
+\everydisplay{\leftdisplay}
+!endverbatim
+
+This is refined in Appendix~D \on376, to allow for equation numbers as well.
+In `Math into BLUes' I have worked on the Appendix~D version, and also indicated how
+a single formula can be non-centered.
+This is also included in \bluetex.
+
+\bluesubhead \cs{everyjob}
+
+The example is exercise \on24.\on5.
+In Salomon's courseware an example is given to open automatically
+files at the beginning of each \TeX{} job.
+
+\bluesubhead \cs{everycr}
+
+A practical example is given in \TB~\on140, to inhibit a page break.
+
+\beginverbatim
+$$\everycr{\noalign{\penalty10000}}
+\halign{\indent#\hfil\qquad&...\cr
+If a letter is in style&then...\cr
+\noalign{\vskip 2pt}
+$D,D',T,T'$&text size&\cr
+$S,S'$&script size&\sevenrm\cr
+$\SS,\SS'$&scriptscript size&
+ \fiverm\cr}$$
+!endverbatim
+
+It is also used in plain, Appendix~B \on362, in the macro \cs{displ@y}.
+
+In \TB{} file I did not find examples of use of
+\cs{everymath},
+\cs{everyhbox}, and
+\cs{everyvbox}.
+
+In \bluetex{} I introduced \cs{everyscript}.
+My use is to allow for more than one script to be processed,
+via |\everyscript{\notlastscript}|.
+I also introduced \cs{everyverbatim}, and some more.
+
+\head{Options via |\this<tag>|s}%Needed processing on the fly, so no \bluehead
+First an example. I used it for the first time with verbatims.
+
+\thisverbatim{\emc\catcode`\*=0
+ \catcode`\!=12 }
+\beginverbatim
+\thisverbatim{\emc}%enable metacode
+\beginverbatim
+\def\<tag>{...
+ ...}
+!endverbatim%! is the escape character
+*endverbatim
+
+Not only can metalinguistic variables be handled nicely
+within verbatims, but also the changing of catcodes and
+file verbatim inclusion go easy with the use of these token variables.
+
+The verbatim suite of \bluetex{} can be used with \AllTeX, because
+the mechanism is simple, and not in conflict.
+File verbatim inclusion goes as follows\ftn
+{It is true, that I need one escape character.}
+
+\thisverbatim{\emc\catcode`\*=0
+ \catcode`\!=12 }
+\beginverbatim
+\thisverbatim{\input <file>}
+\beginverbatim
+Some text after the file.
+!endverbatim
+*endverbatim
+
+\bluehead The parsing of options
+
+Eijkhout in `\TeX{} by Topic' gives a template for coping with
+optional parameters.\ftn{I adapted the macros a little.}
+The work is done by \cs{OptArgCom}, with as optional
+argument either the default or the one supplied.
+The markup starts with \cs{Com} followed either
+by a left bracket\Dash a convention to start an option\Dash
+or the argument.
+
+\thisverbatim{\emc}
+\beginverbatim
+\def\Com{\futurelet\testchar\MaybeOptArgCom}
+\def\MaybeOptArgCom{\ifx[\testchar
+ \expandafter\OptArgCom\else
+ \expandafter\NoOptArgCom\fi}
+\def\OptArgCom[#1]#2{...}
+\def\NoOptArgCom{\OptArgCom[<default>]}
+%with use
+\Com[...]{...}!qquad!hbox!bgroup or!egroup!qquad\Com{...}
+!endverbatim
+
+With the concept of \cs{thisCom} the coding template and
+markup might look like the following.
+
+\thisverbatim{\emc}
+\beginverbatim
+\thisCom{<default>}
+\def\Com#1{...\the\thisCom...
+ \thisCom{<default>}}%restore default
+%with use
+\thisCom{...}%Provides option(s), if any
+\Com{...}
+!endverbatim
+
+Explanation.
+The contents of the token variable
+is available to the macro. It can be virtually anything.
+At the end of the macro the default is restored.
+IMHO, with all respect, the latter approach is simpler
+than the parsing of optional arguments.
+
+\bluehead Head example
+
+\bluetex{} allows as markup
+
+\beginverbatim
+\beginhead...\endhead!qquad !hbox!bgroup or!egroup!qquad\head{ ...}
+!endverbatim
+
+And what about the coding?
+In the `Paradigms: Headache?' I have shown the \bluetex{} coding
+
+\beginverbatim
+\def\beginhead{\the\prehead\bgroup\headfont}
+\def\endhead{\egroup\the\posthead}
+%with auxiliaries
+\prehead{\vskip0pt plus2ex
+ \penalty-250\vskip0pt plus1ex
+ \bigskip\noindent}
+\posthead{\medskip\nobreak
+ \noindent\ignorewhitespace}
+%and minimal variant
+\def\head#{\beginhead\bgroup
+ \aftergroup\endhead
+ \afterassignment\ignorespaces
+ \let\dummy=}
+!endverbatim
+
+Note that in \bluetex, I also introduced the token variables
+|\pre<tag>|, and |\post<tag>|, to parameterize
+the placement within context. The advantage of doing so is
+that these tags have only one function and can therefore
+be customized easily.\ftn
+{A white lie. In \cs{report} format I also reused the headtitle
+ in the ToC, ToE, and in the running header.}
+
+\bluesubhead Relation with tugboat.sty
+
+Submissions for TUGboat need as markup for headings the following.
+
+\beginverbatim
+\head...\endhead!qquad !hbox!bgroup or!egroup!qquad\head*...*
+!endverbatim
+
+where in the short variant the spaces around the *s are neglected.
+TUGboat provides as toplevel coding
+\beginverbatim
+\def\head{\begingroup
+ \def\CurrentTag{head}%
+ \@allowindentfalse
+ \@defaultoptions
+ \@savingargumenttrue
+ \def\\{\break}%
+ \@checkoptions}
+\def\endhead{\endgraf
+ \ifcase\headlevel\or
+ \@domainhead \or
+ \@dosubhead \or
+ \@dosubsubhead\fi
+ \endgroup\@next}
+!endverbatim
+
+What can be seen from the above is that both codings are based
+on two-part macros. The coding for TUGboat uses general
+mechanisms not restricted to \cs{head},
+and is therefore difficult to understand.\ftn
+{An example is finding the answer to the question whether the `argument' is processed
+ on the fly. \cs{@savingstrue} suggests that it is stored. Try to confirm
+ the assumption in the code, and you will agree that even reading
+ the code is difficult, let alone to adapt it. To borrow
+ macros for use in other collections is also inhibited, as Wietse
+ Dol communicated to me. Of course, it is a good thing to go for
+ general mechanisms in macro writing. But the right balance between
+ metacodes and single shot coding is the royal road, IMHO, with all respect.}
+Especially, when one realizes that next to the parsing of options,
+the minimal variant is also handled. (The parsing looks for *s).
+Clever, very clever.
+But the functionality can be attained simpler, with the extra bonus of
+easy maintenance and customization, IMHO, with all respect.
+
+\bluesubhead Relation with ams.ppt
+
+Submissions to AMS (in ams.ppt) need as markup for headings
+
+\beginverbatim
+\head...\endhead
+!endverbatim
+
+The coding reads
+
+\beginverbatim
+\outer\def\head#1\endhead{%
+ \add@missing\endroster
+ ...
+ \add@missing\endproclaim
+ \penaltyandskip@{-200}\aboveheadskip
+ {\headfont@\raggedcenter@
+ \interlinepenalty\@M
+ #1\endgraf}\headmark{#1}%
+ \nobreak\vskip\belowheadskip}
+%
+\let\headmark\eat@
+!endverbatim
+
+The \cs{end@missing} checks whether the head occurs within the environment.
+\cs{eat@} gobbles its argument.
+There is no \cs{nofrillscheck}. This is done, however, in \cs{subhead}.
+The coding of the check is difficult to understand, not in the least because it
+allows for options.\ftn
+{I was told that AMS considers to abandon \cs{nofrills} altogether.}
+
+\bluesubhead \LaTeX's \cs{section}
+
+The style defines \cs{section} as an invocation to \cs{@startsection}.
+From latex.doc the following.
+
+\beginverbatim
+%\@startsection{name}{level}{indent}
+% {beforeskip}{afterskip}{style}
+% optional * [altheading]%
+% {heading}
+%Generic command to start a section.
+%Name : e.g. subsection
+%Level : a number, denoting depth of
+% section e.g., chapter=1,
+% section=2 etc.
+%Indent: Indentation of heading from
+% left margin
+%Beforeskip: Absulute value is skip to
+% leave above the heading.
+% If negative, then paragraph
+% indent of text following
+% heading is suppressed.
+%Afterskip : if positive then skip to leave
+% below heading, else negative of
+% skip to right
+% of run-in heading.
+%Style : commands to set style.
+%If * missing then increments the counter. If
+%it is present, then there should be no
+%[altheading] argument. Use the counter
+%`secnumdepth' whose value is the highest
+%section level that is to be numbered.
+!endverbatim
+
+This is just the top of the iceberg, but generic it is for sure.
+My choice would be the following.
+To go first for making it as simple as possible,
+and perhaps if the need is still there,
+use generic coding in order to save on development and maintenance costs.
+
+\bluehead Knuth's options after an opening tag
+
+There is a beautiful example of allowing for options in manmac.
+It is used in \TB~\on29.
+All what follows after the opening tag \cs{begindisplay} up to the end-of-line
+is taken as (optional) argument, and inserted in the
+alignment display between \$\$ and \cs{halign}.\ftn
+{No curly braces nor other opening and closings like [ and ].
+ And when you don't need the option functionalty you won't notice.
+ It does not hinder or impose on you.
+ Minimal markup? Yes, definitely.}
+
+\beginverbatim
+\begindisplay\hbadness10000
+\hbox spread-.666667em{The badness
+ of this line is 100.}&
+ \quad(very tight)\cr
+...
+\enddisplay
+!endverbatim
+
+This example shows what Knuth had on his mind with respect to
+options and explains why he did not introduce |\this<tag>|s.
+The coding is a litlle more complicated but systematic.
+
+Can it be applied applied throughout a format?
+With \cs{beginverbatim} I stumbled upon problems in
+applying options to the in-line verbatim \vrt\dots\vrt.
+
+\bluehead Epilogue
+
+The paradigm is that too general, monolithic, codes are difficult
+to understand and to maintain.
+Borrowing macros from these collections is near to impossible.
+|\this<tag>| is a simple alternative for
+coping with optional arguments, and is used in \bluetex.
+
+Knuth suggested a solid naming convention for two-part macros:
+|\begin<tag>|, |\end<tag>|, and
+for the second step macro |\start<tag>|, if any.
+
+This naming convention has been adopted in \bluetex,
+next to |\<tag>| for one-part minimal variants.
+
+Have fun, and all the best.
+\makesignature
+\pasteuptoc
+\endscript \ No newline at end of file
diff --git a/info/laan/paradigm/paradigm.postscript b/info/laan/paradigm/paradigm.postscript
new file mode 100644
index 0000000000..c92955bf0c
--- /dev/null
+++ b/info/laan/paradigm/paradigm.postscript
@@ -0,0 +1,1483 @@
+%Started May 1996, C.G. van der laan, cgl@rc.service.rug.nl
+%Version June 1996
+\newif\ifdraft\drafttrue
+\draftfalse
+\ifdraft\else\input psfig \fi
+%Watch out for double ! in verbatim, especially with %!!PS
+\input blue.tex \loadtocmacros\tolerance500\hbadness=499\hfuzz=5pt
+ \parindent=1pc\everyverbatim{\unmc}
+%Needed EPS files: baker.eps, barnwindowii.eps, bentley.eps,
+% eschera.eps, escherb.eps, escherknotmf.eps,
+% escherknotiii.epsabr, flower.eps,
+% gurariabc.eps, gurarisq.eps
+% jvr.eps, linebundle.eps, malbork.eps,
+% polygon.eps, polygonii.eps, prpie.eps,
+% sine.eps, sinedisks.eps, seal.eps,
+% textalongarc.eps, textalongspiral.eps.
+
+\bluetitle Paradigms: Just a little bit of PostScript
+
+\blueissue \maps{96}2
+
+\bluepictures\metapostpic\pstexpic
+
+\blueabstract It is all about creating EPS\Dash with graphics\Dash
+ to be merged with \AllTeX{} scripts.
+ The emphasis is on creating raw PostScript for simple symmetrical pictures.
+ Asides, like
+ incorporating accurate graphs of math functions,
+ typesetting text along curved paths, or
+ tables set sideways have been addressed.
+ A poor man's mftoeps approach is touched upon:
+ (declarative) METAFONT into (imperative) PostScript.
+
+\bluekeywords Declarative program, education, EPS, Escher, graphics,
+ imperative code, \AllTeX,
+ math graphs, METAFONT, merging EPS and \AllTeX,
+ MetaPost, mftoeps, PostScript,
+ sideways tables, text along curved paths.
+
+\beginscript
+
+\bluehead BLUe's Design X
+
+Hi folks.
+The user's guide which comes with BLUe's format system\Dash
+Publishing with \TeX, PWT for short\Dash
+is processed {\em completely\/} by \TeX, {\em no\/} other tools such as
+\PS{} are needed.\ftn{Nobody knows what the future has in store, but for
+ the moment I consider it a good thing that the PWT guide can be processed
+ just by \TeX, well \dots with BLUe's format.}
+However, of late I exercised \MF
+\Dash well, eventually MetaPost with the help of Jos Winnink\Dash
+for graphics to be included in \TeX{} documents, and finally embarked PostScript
+straightaway to create EPS pictures.
+
+$$\metapostpic$$
+
+\PS{} is involuntary needed to (electronically) paste up the graphics, and
+as resulting file format.\ftn{For exchange the {\tt.tex} and
+ (hand-coded) {\tt.eps} files are much better suited
+ because of their conciseness. This can't be beaten, not even by
+ Adobe's PDF\Dash Portable Document Format.}
+
+If we come to think of graphics as
+$$\vbox{\hbox{just doing the `right' strokes or fills}}$$
+then \PS{} provides the means for this:
+ lines, splines and circular arcs,
+to be drawn or filled.\ftn{PostScript II also provides for colors and
+ processing in a network.}
+I use the sidestep
+$$\vbox{\hbox{\MF{} $\rightarrow $MetaPost $\rightarrow$ EPS}}$$
+for general pictures but also for obtaining the right (control) points
+explicitly from a decalarative specification in \MF,
+as shown by Escher's knot at the end.\ftn{Another way
+ for arriving at the EPS code is
+ to use Jackowski's |mftoeps| package or to use MetaPost.}
+
+$$\pstexpic$$
+
+With respect to graphics \PS{} can be seen as a {\em little\/} language
+in the UNIX tradition.\ftn{See Bentley's Little languages in
+ `More programming pearls\Dash\-Confes\-sions from a coder.' Addison-Wesley.}
+A little bit of \PS{} adheres the 80\%--20\% adage:
+80\% of the effects (or more) with
+20\% of the energy (or less).
+
+One can with a little knowledge of \PS{} code graphics immediately
+and {\em completely\/} in \PS.
+The more so because of the ubiquitous public domain GhostScript
+previewers to verify the result,
+next to of course the \PS{} laser printers.
+
+Furthermore, text is just a special case of graphics, and merging
+just a little bit of text\Dash malenki Russians would say\Dash
+with the graphics goes equally simple at first glance.
+
+And to end the lovesong the inclusion of accurate graphs of mathematical functions
+goes well via coding these in \PS{} and including these as figures.
+(Of course Hobby's graph extension could be used as well, or other advanced
+ graphics packages.)
+This is illustrated by a graph of the sine function to convey the idea.
+
+PStricks is about {\em interfacing}. Not assuming knowledge of \PS.
+This note discusses mainly {\em merging}.
+Is about extending your \TeX pertise
+with just a little\Dash tsjut-tsjut Russians would say\Dash
+knowledge of \PS{} rewarded by high returns.
+
+Below I'll summarize what is needed from \PS, and illustrate the use of it
+with a few examples, introducing en route the operators we need given the example.
+
+\bluehead PostScript
+
+\bluesubhead Processing
+
+\PS{} comes with a user's guide (cookbook) and reference manual,
+the so-called blue and red books in the Adobe \PS{} series.
+For processing \PS{} an interpreter is needed, such as
+a \PS{} laser printer or a GhostScript previewer.
+For inclusion in \AllTeX{} I use the psfig macros.\ftn{Courtesy Trevor J. Darrell.}
+Goossens in his PostScript and \AllTeX, \maps{92}1, nicely details about
+inclusion of PostScript.\ftn{See also the \LaTeX{} Companion.}
+
+As with PDF I consider the post-processing capability {\em independently\/} from
+the tool which created the \PS{} source, very powerful and flexible.
+
+\bluesubhead Subset 0 from the language
+
+\PS{} is stack-oriented.
+This means that operations are prescribed in polish-reverse notation,
+also known as prefix notation,
+similar to the HP pocket calculators.
+Addition\Dash use of operator |add|\Dash for example is notated as follows.
+
+\beginverbatim
+2 3 add%yields 5 on the stack, 2 3 consumed
+!endverbatim
+
+\PS{} is artificially structured via structure information in
+comments, double \%-ed comments. Programs which obey the Adobe
+structure are called conforming and this is usually needed for inclusion
+within \AllTeX, especially the BoundingBox line is required.
+
+\blueexample Conforming EPS structure
+
+\beginverbatim
+%!!PS EPS
+%%Title: <name>
+%%Creator: <name>
+%%CreationData: <date>
+%%BoundingBox: <llx> <lly> <urx> <ury>
+%%DocumentFonts: (atend)
+%%EndComments
+<prolog>
+%%EndProlog
+%%Page: 0 1
+<page 1>
+%%Page: 1 2
+<page 2>
+%%Trailer
+<...>
+%%DocumentFonts: Times-Roman ...
+%%Pages: 3
+%%EOF
+!endverbatim
+
+Creating and drawing paths is done by separate operators.
+For creating paths operations like
+|moveto| are provided while drawing goes via |stroke|.
+
+\beginverbatim
+0 0 moveto 0 10 lineto%create path
+stroke%draw a v-line of 10pt height
+!endverbatim
+
+Variables\Dash names to be associated with their values\Dash
+are handled via the so-called dictionaries.
+The functionality can also be obtained via procedures.
+
+\beginverbatim
+/size {10} def
+!endverbatim
+
+The so-called literal name is preceded by a slash to distinguish the declaration
+from its invoke. The invoke is done by just the name, also called executable name.
+The procedure text is surrounded by curly braces.
+Parameters are absent too. The (operand) stack is used.
+
+For graphics we have a CurrentTransformMatrix\Dash CTM\Dash which maps the
+user space on the device space, the printer or screen.
+Equally powerful is the concept of encapsulating graphics via
+|gsave| and |grestore|, that is the graphics state is local\Dash encapsulated\Dash
+after |gsave| until |grestore|.
+
+Next to the CTM \PS{} maintains the currentpoint and currentpath.
+
+Batagelj, \maps{95}1\Dash Combining \TeX{} and \PS\Dash
+provides an in a nutshell overview.\ftn
+ {Nice are the hints to remove repeated parts from files which are
+ generated by CorelDRAW and Mathematica, in order to reduce the size
+ of the automatically generated and to be included files.
+ (The idea is to remove duplicate `dictionaries' which are included with each result.)
+ The example of how to include graphs of math functions in a document is
+ {\em very\/} useful.
+ However, with respect to his first picture I would prefer to use the
+ inherent symmetry in the data as opposed to providing all the data.}
+Another introduction is in Fokker en van Oostrum's `Plaatjes in een tekst,'
+\maps{94}2, next to a survey of drawing software.
+\bluesubhead Summary of (graphics) commands
+
+The following snapshot is borrowed from Gurari, well \dots a little modified.\ftn{%
+ Gurari E.M (1994):
+ \TeX{} \& \LaTeX\Dash Drawing \& Literate Programming.
+ McGraw Hill. ISBN 0-07-025208-4.}
+Its main purpose is to show that the number of relevant graphics primitives
+is low.
+The functionalities will be dealt with along the way in the examples.
+For the details of the commands or the list of operators
+see the red book.\ftn{A complete list with functional summaries is
+ in the red book section 6.2 Operator summary.}
+
+$$\everyverbatim{\emc}
+\vbox{\halign{\hfil#\cr
+\bf Arithmetic and math operators\hfill\cr
+|<num>| |<num>| mul $num$ \cr
+|<num>| sine $num$ \cr
+%
+\bf Path construction operators\hfill\cr
+currentpoint $x$ $y$ \cr
+|<x>| |<y>| moveto \cr
+|<dx>| |<dy>| rmoveto \cr
+|<x>| |<y>|lineto \cr
+|<dx>| |<dy>| rlineto \cr
+$\langle q_{1x}\rangle$ $\langle q_{1y}\rangle$ $\langle q_{2x}\rangle$
+ $\langle q_{2y}\rangle$ $\langle p_{2x}\rangle$ $\langle p_{2y}\rangle$
+ curveto \cr
+$\langle c_x\rangle$ $\langle c_y\rangle$ $\langle r\rangle$
+ $\langle ang_1\rangle$ $\langle ang_2\rangle$ arc \cr
+%
+\bf String operators\hfill\cr
+|<string>| |<num>| |<num>| getinterval \cr
+%
+\bf Character and font operators\hfill\cr
+{\tt\char92}|<fontname>| findfont \cr
+ \ |<fontsize>| scalefont setfont \cr
+|<string>| show \cr
+|{<body>}| |<string>| kshow \cr
+%
+\bf Graphics state operators\hfill\cr
+|<num>| setgray \cr
+|<num>| setlinewidth \cr
+%
+\bf Dictionary operators\hfill\cr
+/|<defname> {<body>}| def \cr
+%
+\bf Coordinate system and matrix operators\hfill\cr
+|<num>| |<num>| translate \cr
+|<num>| |<num>| scale \cr
+|<num>| rotate \cr
+%
+\bf Relational, boolean, and bitwise operators\hfill\cr
+|<num>|\||<string>| |<num>|\||<string>| le $bool$\cr
+%
+\bf Control operators\hfill\cr
+|<bool> {<truepart>} {<falsepart>}| ifelse \cr
+|<num> {<body>}| repeat \cr
+|<from> <step> <to>{<body>}| for \cr }
+}$$
+
+With prefix
+ $\langle in\rangle\> \langle operator\rangle\>\langle result\rangle$
+is elegant.
+
+\bluesubhead What is not allowed as EPS?
+
+I'm not knowledgeable enough to answer that question, nor do I know of
+a full-blown definition of EPS.
+For the moment it is some subset which works with all interpretors,
+with my subset 0 in there.
+When one restricts oneself to the basics of graphics, arithmetic and similar
+operations then the boundary area between EPS and full \PS\Dash
+or its various implementations\Dash is not in sight.
+
+\bluesubhead Documentation
+
+The red book\Dash the reference manual\Dash is generally recommended, though
+the blue book\Dash the tutorial and cookbook\Dash is also nice.\ftn{I used the
+ \PS I red book and this is well-suited to get the flavour.
+ For \TeX{} and METAFONT %\MF{} %font not available
+ this is similar. To grasp the basic ideas
+ Knuth's first book is a more concise survey of the main lines of thought than
+ \TB{} and {\sl The METAFONTbook}.}
+
+\blueexample Pie chart from the blue book
+
+$$\ifdraft\vbox to3in{\vss\hbox{Pie chart}\vss}
+\else\psfig{file=prpie.eps,height=3in}
+\fi$$
+
+The invoke is essentially as follows and shows that the codes can be used
+straightforwardly.\ftn{It is not standard \PS. We have to construct some kind of
+ library to use the PostScript programs from.
+ Maybe the CTAN as global network library?
+ Copied on the various CD-ROMS?}
+It is no longer necessary to mesh around with the picture environment or so,
+to achieve the effect.
+
+\beginverbatim
+%preliminary matter
+(January Pie Sales)
+ 24 12 %... array size
+ [ [(Blueberry) .12 ]
+ [(Cherry) .30 ]
+ [(Apple) .26 ]
+ [(Boston Cream) .16 ]
+ [(Other) .04 ]
+ [(Vanilla Cream) .12 ]
+ ] 306 396%translate center to
+ 140 %size
+ DrawPieChart
+showpage
+!endverbatim
+
+There is also a \PS-FAQ, consult
+
+|ftp wilma.cs.brown.edu:|\\
+\null\qquad \qquad |pub/comp.lang.postscript|.
+
+It contains an annotated bibliography as well.
+
+The examples from Adobe's blue book are available on the net.
+
+\bluesubhead Proofing
+
+For previewing or printing, {\em as such\/}
+I have to include a shift to move the picture away from the lower left corner,
+say
+
+\beginverbatim
+300 500 translate
+!endverbatim
+
+\bluesubhead Inclusion
+
+I usually build a figure symmetrically around the origin and then include
+it via
+
+\beginverbatim
+$$\psfig{file=<name>,height=<number><unit>}$$
+!endverbatim
+
+A unit can be |in|(ch), |cm|, and ilks. \cs{psfig} is very vulnerable to
+ spaces because of \TeX's parsing. So no spaces in there.
+Now and then I forget to inactivate the |translate| needed while previewing.
+No real problem.
+
+\bluesubsubhead BoundingBox
+
+Providing the right BoundingBox coordinates has all to do with
+proper placement within context, the look-and-feel.
+Default \PS{} assumes the origin\Dash in user space\Dash
+at the lower left corner of the paper\Dash in device space.
+
+Surround the picture by as-if lines and supply the coordinates, in points as units
+in user space coordinates,
+of the lower left corner and the upper right corner in the
+BoundingBox specification.
+Simple is to build a picture around its symmetry point\Dash
+and let this coincide with the origin\Dash
+with as pleasing result that the horizontal positioning comes out centered,
+when used within math display.
+Vertically, I add a 10 or so
+extra on either side in the BoundingBox specification,
+but that depends on the character of the picture.
+
+Some preview systems can measure the BoundingBox and allow adjustment
+interactively.\ftn{For a summary of tools to assist finding the BoundingBox
+ coordinates see, Reckdahl K (1995): Using EPS graphics in \LaTeX{}
+ documents. reckdahl@leland.stanford.edu.}
+
+\bluesubhead Writing PostScript
+
+A line bundle and a variant of it are introduced to
+show how to create simple EPS.
+
+\bluesubsubhead A line bundle
+
+$$\ifdraft\vbox to1in{\vss\hbox{Line bundle}\vss}
+\else\psfig{file=linebundle.eps,height=1in}
+\fi$$
+
+How to do this in \PS? A line as such is simple.
+First a |moveto| and then a |lineto|. So a way is to create a loop and repeatedly
+draw from the origin to the end of the various lines.
+This can be done elegantly by using appropriately the CTM.
+
+\beginverbatim
+%!!PS EPS
+%%Title: Line bundle
+%%Creator: cgl
+%%CreationDate: June 4 1996
+%%BoundingBox: -40 -45 40 45
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+/r 36 def
+10{0 0 moveto r 0 lineto
+ 36 rotate
+}repeat stroke showpage
+!endverbatim
+
+Explanation.
+The idea is that first a simple line is draw, for example along the x-axes.
+What happens if after that we rotate? Right, the mapping is changed.
+And what happens if we supply the {\em same\/} line after this?
+Indeed, it will show up rotated. Because \PS{} is an interpretive
+language we can realize this specification after the rotate via a loop,
+which for this simple case reads |10{...}repeat|.\ftn{Do you see the variant
+ for drawing a polygon? This duality linebundle and polygon has been used
+ by Gabo and is about what he called stereometry versus perimetry,
+ the structure versus the surface}
+
+\beginquote
+Appropriately maintaining the CTM for symmetrical pictures can yield simple
+looking \PS{} programs.
+\endquote
+
+\bluesubsubhead A flower
+
+$$\ifdraft\vbox to1in{\vss\hbox{Flower}\vss}
+\else\psfig{file=flower.eps,height=1in}
+\fi$$
+
+This exercises the use of |arc|.
+
+\beginverbatim
+%!!PS EPS
+%%Title: Flower
+%%Creator: cgl (Courtesy Papert)
+%%CreationDate: June 4 1996
+%%BoundingBox: -40 -45 40 45
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+/r 36 def
+10{r r moveto%begin drawing point
+ r 0 r 90 180 arc
+ currentpoint%origin
+ 0 r r 270 360 arc
+ 36 rotate
+}repeat stroke showpage
+!endverbatim
+
+Explanation.
+We have the same structure as the previous program but the `line' is now
+a little more elaborated: two arcs of a circle.
+\PS{} provides an operator for drawing circular arcs, called arc.
+The arc has $(x,y)$ as centre, r as radius,
+$ang_1$ the angle of a vector from $(x,y)$ of length $r$
+to the first endpoint of the arc, and
+$ang_2$ the angle of a vector from $(x,y)$ of length $r$
+to the second endpoint of the arc.\ftn{The arc is drawn counter clockwise.
+ |arcn| draws clockwise.}
+These arguments are expected to be on the stack.
+
+\beginverbatim
+x y r ang1 ang2 !bf arc
+!endverbatim
+
+Important is to realize that arc {\em counts\/} its angle from (x, 0) and that
+the {\em drawing\/} starts from the point on the stack
+
+The specification of the flower in \MF/\MP{} reads essentially as follows.
+
+\beginverbatim
+for k:= 1 upto 10:
+draw(origin{up}..{right}(up+right){down}..
+ {left}origin) rotated 36k;
+endfor
+!endverbatim
+
+Explanantion.
+\MF{} allows for specification of the directions\ftn{There is also a
+ quartercircle which apart from orientation is drawn similarly.}
+$up =(0,1), right=(1,0)$.
+
+IMHO, with all respect the \MF{} and \PS{} programs are similar
+modulo some syntactic sugar.
+However, the extra possibility of specifying the directions is more convenient
+than using control points.
+But perhaps that is a matter of taste, although the handling of control points
+is powerful as B\'ezier himself has shown in the past.
+From this I conclude that for these simple kinds of pictures we can as well use
+\PS{} straightaway.
+
+\bluehead Some more Graphics
+
+\blueexample Malbork window
+
+This is all about using |curveto|, especially choosing suitable control points.
+
+$$\ifdraft\vbox to1in{\vss\hbox{Malbork window}\vss}
+\else\psfig{file=malbork.eps,height=1in}
+\fi$$
+
+\beginverbatim
+%!!PS EPS
+%%Title: Malbork Window
+%%Creator: cgl
+%%CreationDate: May 21 1996
+%%BoundingBox: -40 -40 40 40
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+45 rotate 10 0 moveto
+4{20 0 37.5 12.5 25 25 curveto
+ 12.5 37.5 0 20 0 10 curveto
+ 90 rotate
+}repeat%inside lops next
+5 0 moveto
+4{5 35 35 5 0 5 curveto
+ 90 rotate
+}repeat%enclosing circle next
+36 0 moveto
+0 0 36 0 360 arc
+stroke showpage
+!endverbatim
+
+Explanation.
+|translate| changes the CTM,
+with the effect that the device coordinates are shifted. (Useful for
+use of \PS{} alone out of context.)
+
+|rotate| changes the CTM, and because of being an interpretive language
+the various loop traversals map the {\em same\/} user coordinates on the
+rotated device coordinates.
+
+$\langle number\rangle \{\dots\}$ |repeat| is a loop to be traversed
+$\langle number\rangle$ of times.
+
+|curveto| adds a spline to the current path
+from the currentpoint to the last point on the stack.
+The first two points are the so-called control points of the spline.\ftn{Much similar
+ as in METAFONT. Choosing for the inner lop the control
+ points in this way is borrowed from
+ Haralambous Y (1995): Some METAFONT techniques.
+ \tubissue{16}(1), 46\dash53. It is also supplied in the description
+ of |curveto| in the red book.}
+
+|arc| adds a circular arc to the current path from the currentpoint.
+
+The details of the arguments for the operators are nicely documented in the
+red book.
+
+\blueexample Escher's impossible triangle
+
+This is all about {\em wrong\/} projections.
+However, these kinds of pictures are intriguing and fun.
+I consider them well-suited to illustrate \PS's drawing capabilities.
+
+$$\ifdraft\vbox to1in{\vss\hbox{Escher's impossible triangle}\vss}
+\else\psfig{file=eschera.eps,height=1in}
+\fi$$
+
+\beginverbatim
+%!!PS EPS
+%%Title: Escher's impossible triangle
+%%Creator: cgl (inspired by Guy Shaw)
+%%CreationDate: May 23 1996
+%%BoundingBox: -40 -40 40 40
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+3{25 34 moveto
+ 25 -34 lineto
+ 17 -38.2 lineto
+ 17 20 lineto
+ -17.6 0 lineto
+120 rotate
+}repeat stroke showpage
+!endverbatim
+
+\on5{} points, the right stroke and a rotation or two, that's it.
+End of story.
+
+However, it is all about finding those \on5{} points.
+
+$$\ifdraft\vbox to1in{\vss\hbox{the 5 points}\vss}
+\else\psfig{file=escherb.eps,height=1in}
+\fi$$
+
+\beginverbatim
+%!!PS EPS
+%%Title: Essential stroke
+%%Creator: cgl (inspired by Guy Shaw)
+%%CreationDate: May 23 1996
+%%BoundingBox: -40 -40 40 40
+%%Pages: 1
+%%EndProlog
+%%Page: 0 1
+25 34 moveto currentpoint
+0 -68 rlineto currentpoint%down
+ -120 rotate
+25 34 lineto%preserve symmetry
+ 120 rotate currentpoint
+17 20 lineto currentpoint
+-17.6 0 lineto currentpoint
+%labels
+/Courier findfont 8 scalefont setfont
+moveto -5 -3 rmoveto (5) show
+moveto 1 1 rmoveto (4) show
+moveto 2 -5 rmoveto (3) show
+moveto 2 0 rmoveto (2) show
+moveto 2 0 rmoveto (1) show
+stroke showpage
+!endverbatim
+
+Explanation.
+The essential stroke figure also illustrates the integration
+of text in this case digits.
+|currentpoint| pushes the point on the stack.
+The last |moveto|-s pop these coordinates up.
+|rmoveto| moves {\em relatively.}
+
+\smallbreak
+And what about their relationships, and
+what about the minimal information to be prescribed?
+
+Looking more closely it turns out that {\em only\/} the first point is all
+that is needed.
+The rest is implicit to the nature of the figure.\ftn{Of course
+ one can also think of other equivalent parameters like size and thickness.}
+
+\beginverbatim
+%!!PS EPS
+%%Title: Escher's Impossible triangle II
+%%Creator: cgl
+%%CreationDate: May 23 1996
+%%BoundingBox: -40 -40 40 40
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+%Parameterized over p1
+/point {25 34} def%note x<y
+%
+3{point moveto
+currentpoint neg lineto%down
+ -120 rotate
+point lineto%preserve symmetry
+ 120 rotate
+currentpoint 2 div neg lineto
+currentpoint 3 sqrt mul sub 0 lineto
+120 rotate
+}repeat stroke showpage
+!endverbatim
+
+Explanation.
+|currentpoint| yields the coordinates of the current point of the path on the stack.
+The other operations do what their names suggest.
+The temporarily change of the CTM within the loop expresses the
+rotation symmetry relation between points \on1{} and \on3.
+
+\blueexample Bentley's polygon
+
+This code is all about a double loop and using the loop variable from the stack,
+next to using the |gsave| and |grestore| advantageously.
+
+$$\ifdraft\vbox to1in{\vss\hbox{Bentley's polygon}\vss}
+\else\psfig{file=bentley.eps,height=1in}
+\fi$$
+
+\beginverbatim
+%!!PS EPS
+%%Title: Bentley's double loop
+%%Creator: cgl
+%%CreationDate: May 30 1996
+%%BoundingBox: -100 -105 100 105
+%%EndProlog
+10{1 1 9{100 0 moveto
+ gsave
+ 36 mul rotate%loopcount*36
+ 100 0 lineto stroke
+ grestore
+ } for
+ 36 rotate
+}repeat showpage
+!endverbatim
+
+Explanantion.
+|gsave| and |grestore| are needed to draw locally, that is at the end
+the graphics state\Dash currentpoint, currentpath and CTM\Dash
+is restored with the values at the beginning.
+\on1{} \on1{} \on9{} stand for beginvalue step and endvalue of the |for| counter.
+
+\blueexample Another double loop
+
+A set of nested polygons provide also a double loop situation.
+
+$$\ifdraft\vbox to1in{\vss\hbox{Polygons}\vss}
+\else\psfig{file=polygon.eps,height=1in}
+\fi$$
+
+\beginverbatim
+%!!PS EPS Nested pentagons
+%%Title: Pentagons
+%%Creator: cgl
+%%CreationDate: June 17 1996
+%%BoundingBox: -100 -100 100 100
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+10 10 100{dup 0 moveto
+ 5{72 rotate
+ dup 0 lineto
+ }repeat
+}for stroke showpage
+!endverbatim
+
+\blueexample Polygons with splines as sides
+
+This generalization of polygons was introduced by Jackowski at Euro\TeX{} \on95.
+A special case of \MF's interpath functionality is shown en-passant.
+
+$$\ifdraft\vbox to1in{\vss\hbox{flexess}\vss}
+\else\psfig{file=polygonii.eps,height=1in}
+\fi$$
+
+\beginverbatim
+%!!PS EPS Nested `squares'
+%%Title: polygon.eps II
+%%Creator: cgl
+%%CreationDate: June 17 1996
+%%BoundingBox: -100 -100 100 100
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+/r 100 def
+/r1 {r .25 mul} def
+/r3 {r .75 mul} def
+25{r 0 moveto
+ 4{r3 r3 r1 r1 0 r curveto
+ 90 rotate
+ }repeat
+ .9 .9 scale
+}repeat stroke showpage
+!endverbatim
+
+\blueexample Barn window
+
+This is all about playing with circles and circular arcs.\ftn{The first example
+ in the blue book collection provides a similar picture with gradually
+ changing scales of grey.}
+
+$$\ifdraft\vbox to1in{\vss\hbox{Barn window}\vss}
+\else\psfig{file=barnwindowii.eps,height=1in}
+\fi$$
+
+\beginverbatim
+%!!PS EPS
+%%Title: Barn Window II
+%%Creator: cgl
+%%CreationDate: May 29 1996
+%%BoundingBox: -45 -45 45 45
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+/l 36 def
+/r {l 22.5 sin mul} def
+/m {l 22.5 cos mul} def
+8{r .5 mul 0 moveto
+ l 0 lineto
+ currentpoint %begin circular arc
+ 22.5 rotate m 0%center
+ r %radius
+ -90 90 arc
+ 22.5 rotate
+}repeat
+%inner circle
+/rin {r .5 mul} def
+rin 0 moveto
+0 0 rin 0 360 arc
+%outer circle
+/rout {r m add} def
+rout 0 moveto
+0 0 rout 0 360 arc
+%extra circles
+/rin {r .25 mul} def
+22.5 rotate
+8{m rin add 0 moveto
+ m 0 rin 0 360 arc
+ 45 rotate
+}repeat stroke showpage
+!endverbatim
+
+I'm sure I'll come back some day and look again through this window,
+but then pastel colored.
+
+\blueexample Baker's inspiration
+
+$$\ifdraft\vbox to1in{\vss\hbox{Woody Baker's picture}\vss}
+\else\psfig{file=baker.eps,height=1in}
+\fi$$
+
+This example is similar to Escher's impossible triangle.
+Find the essential stroke and rotate.
+
+\beginverbatim
+%!!PS EPS
+%%Creator: cgl (inspired by Woody Baker)
+%%CreationDate: May 1996
+%%BoundingBox: -80 -80 80 80
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+4{-15 25 moveto
+ 0 -10 rlineto
+ 60 0 rlineto
+ 0 -30 rlineto
+ 10 0 rlineto
+ 0 40 rlineto
+ -70 0 rlineto
+ 0 10 rlineto
+ 80 0 rlineto
+ 0 -60 rlineto
+ -30 0 rlineto
+ 0 10 rlineto
+ 10 0 rlineto
+%
+ 35 -25 moveto
+ 0 -10 rlineto
+ 20 0 rlineto
+ 10 10 rlineto
+%
+ 45 15 moveto
+ 10 10 rlineto
+90 rotate
+}repeat stroke
+%
+/Courier findfont 10 scalefont setfont
+-55 -75 moveto
+(Courtesy Woody Baker)show
+showpage
+!endverbatim
+
+\blueexample Romanovsky's real Escher
+
+$$\ifdraft\vbox to1in{\vss\hbox{JVR's picture}\vss}
+\else\psfig{file=jvr.eps,height=1in}
+\fi$$
+
+Grey scales can be obtained simply via $\langle number\rangle$ |setgray|,
+with $\langle number\rangle \in [0, 1]$.
+0 denotes black and 1 is white.
+The idea is to construct the essential path\Dash
+ the stroke denoted by a grey scale\Dash
+and to use this \on3{} times.
+
+\bluehead Math graphs
+
+In \AllTeX{} documents it is a problem\ftn{Communicated by Nico Temme.
+ He solved the problem by doing the calculations in PASCAL.
+ For advanced manipulations Mathematica or Mapple
+ are generally used where the resulting EPS is pasted up in the
+ \AllTeX{} script as usual.}
+how to include accurate graphs of mathematical functions.
+Because of \PS's arithmetic and graphics capabilities it is
+handy to use \PS.
+
+\blueexample Sine function
+
+$$\ifdraft\vbox to1in{\vss\hbox{sine function}\vss}
+\else\psfig{file=sine.eps,height=1in}
+\fi$$
+
+\beginverbatim
+%!!PS EPS
+%%Title: Sine function
+%%Creator: cgl (inspired by Batagelj)
+%%CreationDate: May 27 1996
+%%BoundingBox: -200 -110 200 110
+%%EndProlog
+/Courier findfont 15 scalefont setfont
+%figure scaled by 100
+%x-axes and label
+-200 0 moveto 200 0 lineto
+-15 -15 rmoveto (x) show
+%y-axes and label
+0 -110 moveto 0 110 lineto
+-35 -10 rmoveto (sin) show
+%function
+-180 0 moveto
+-180 10 180{%from step to
+ dup sin 100 mul%(x, 100sin x)
+ lineto
+}for stroke showpage
+!endverbatim
+
+The invoke might read as follows.
+
+\beginverbatim
+$$\psfig{file=sine.eps,height=1in}$$
+!endverbatim
+
+\bluehead Text set along curved paths
+
+A teaser. With the advent of scalable and rotationable outline fonts
+this is possible too.
+
+\blueexample Along a circle
+
+$$\ifdraft \vbox to 1in{\vss\hbox{text along an arc}\vss}
+\else \psfig{file=textalongarc.eps,height=1in}
+\fi$$
+
+\beginverbatim
+%!!PS EPS
+%%Title: Typesetting along arcs
+%%Creator: cgl
+%%CreationDate: June 4 1996
+%%BoundingBox: -100 50 100 125
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+/Courier findfont 10 scalefont setfont
+/text (happybirthday) def
+50 rotate
+0 1 12{0 100 moveto
+ text exch 1 getinterval show
+ -10 rotate
+}for stroke showpage
+!endverbatim
+
+Joseph Romanovsky communicated that |kshow|\Dash kerning (and more general
+positioning) under user control\Dash
+is available which allows a general
+def to be executed between two characters of a string.
+
+\blueexample Along a spiral
+
+The blue book provides an example of typesetting along a path\Dash
+ a quotation of Woody Allen\Dash
+where the path accentuates his filmmaker profession.
+The example below shows a nice effect with little knowledge of \PS,
+essentially the use of |kshow|.
+
+$$\ifdraft \vbox to 2in{\vss\hbox{text along spiral}\vss}
+\else \psfig{file=textalongspiral.eps}
+\fi$$
+
+\beginverbatim
+%!!PS EPS
+%%Title: Text along spiral
+%%Creator: J.V. Romanovsky
+%%BoundingBox: -100 -90 60 70
+%%EndProlog
+/Courier findfont 20 scalefont setfont
+-100 0 moveto 50 rotate
+{-10 rotate 3 0 rmoveto .98 .98 scale}
+ (Olga Grineva my charming
+ St Peterburg hostess)kshow
+showpage
+!endverbatim
+
+\blueexample Seals
+
+The problem has been discussed by Hoenig at Euro\TeX{} \on92,
+and Zlatu\v{s}ka at Euro\TeX{} \on95, both biased by \MF.
+\PS{} alone is suited too with an overall simpler process.
+Combining two earlier supplied examples yields Zlatu\v{s}ka's seal
+in principle.\ftn{The blue book also provides a seal\Dash
+Symphony No.\on9\Dash
+ but that is more complex and ipso facto requires more knowledge of \PS{}
+ to understand what is going on, IMHO, with all respect.
+ To set this poster from the blue book is no more difficult than the
+ use of |arc|, however. My example gives you the feeling that you
+ understand what is going on, I hope.}
+
+\beginverbatim
+%!!PS EPS
+%%Title: Seal, in principle
+%%Creator: cgl
+%%CreationDate: June 6 1996
+%%BoundingBox: -110 -45 110 100
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+%150 650 translate
+/Courier findfont 10 scalefont setfont
+/text (happy postscripting to you) def
+/r 100 def
+gsave
+ 90 rotate %begin orientation
+ 0 r moveto%begin point
+{-7.04 rotate 0 r moveto} text kshow
+grestore%next the central Escher
+3{25 34 moveto
+ 25 -34 lineto
+ 17 -38.2 lineto
+ 17 20 lineto
+ -17.6 0 lineto
+120 rotate
+}repeat stroke showpage
+!endverbatim
+
+$$\ifdraft \vbox to 1.5in{\vss\hbox{seal}\vss}
+\else \psfig{file=seal.eps,height=1.5in}
+\fi$$
+
+Remark. The difference of fonts in the main text and that used by \PS{}
+ is no longer there when \PS{} fonts are used throughout, be it
+ the \PS{} version of the CM family.
+
+\blueexample Gurari's squares
+
+$$\ifdraft \vbox to 1in{\vss\hbox{Gurari's squares}\vss}
+ \else \psfig{file=gurarisq.eps,height=1in}
+ \fi$$
+
+\beginverbatim
+%!!PS Gurari squares
+%%BoundingBox: -200 -110 200 110
+%%Creator: cgl
+%%CreationDate: June 20 1996
+%%EndProlog
+/r 22 def
+/square {1 1 4{0 r rlineto
+ 90 rotate}for} def
+0 0 moveto 90 rotate
+50{r 0 rmoveto square
+ -30 rotate .9 .9 scale
+}repeat stroke showpage
+!endverbatim
+
+\blueexample Gurari's ABC
+
+Very nice this suggestion of motion.
+
+$$\ifdraft \vbox to 1.5in{\vss\hbox{Gurari's speedy ABC}\vss}
+ \else \psfig{file=gurariabc.eps,height=1.5in}
+ \fi$$
+
+\beginverbatim
+%!PS EPS
+%%Title: Guarai's ABC
+%%BoundingBox: 0 -45 100 75
+%%Creator: Gurari
+%%CreationDate: copied June 17 1996
+%%Pages: 1
+%%EndComments
+%%EndProlog
+%%Page: 1 1
+/Times-Bold findfont 45 scalefont setfont
+-40 rotate
+1 -.03 0{setgray
+ 0 0 moveto
+ (ABC) show
+ 3 rotate
+ } for
+0 0 moveto -4 rotate
+1 setgray (ABC) show
+showpage
+!endverbatim
+
+\blueexample Walking along the S-curve
+
+In {\sl The METAFONTbook\/} ex\on13.\on10{} is about drawing overlapping
+disks along a path, the S-figure.
+How to do this in \PS{} straightaway?
+There is no `point of' a path operator so the best we can attain is
+to walk along a math function.
+
+$$\ifdraft \vbox to 1in{\vss\hbox{S-figure}\vss}
+ \else \psfig{file=sinedisks.eps,height=1in}
+ \fi$$
+
+\beginverbatim
+%!PS Sine with overlapping disks
+%%BoundingBox: -200 -110 200 110
+%%Creator: cgl (METAFONTbook ex13.10)
+%%CreationDate: June 17 1996
+%%EndProlog
+newpath
+-180 10 180{dup sin 100 mul%(x, 100sin x)
+ 12.5 0 360 arc
+ gsave 1 setgray fill grestore
+ stroke
+}for showpage
+!endverbatim
+
+Explanation. |1 setgray fill| is the erase functionality, encapsulated to
+yield what we want.
+
+\bluehead Tables set sideways
+
+Another teaser is to set tables rotated.
+Rokicki provided rotate macros along with his |dvips|, among others.
+I have borrowed the essence from his rotate macros
+and recast into the following.
+
+\beginverbatim
+\def\rotate#1%stuff
+ #2%degrees in PS direction
+{\setbox\abox=\hbox{#1}%
+ \adim\ht\abox\advance\adim by\dp\abox
+ \hbox to\adim{\vbox to\wd\abox
+ {\vskip\wd\abox
+ \special{ps: gsave
+ currentpoint currentpoint translate
+ #2 neg rotate
+ neg exch neg exch translate}%
+ \box\abox\vss}\hss}%
+ \special{ps: currentpoint
+ grestore moveto}%
+}%end rotate
+!endverbatim
+
+The point is that it is not much.
+The |ps:| is dependent on the system still, alas.
+
+\blueexample Rotated table
+
+The example works under UNIX with Rokicky's |dvips|.
+%under UNIX
+\newdimen\adim
+\newbox\abox
+%
+\def\rotate#1%stuff
+ #2%degrees in PS direction
+{\setbox\abox=\hbox{#1}%
+ \adim\ht\abox\advance\adim by\dp\abox
+ \hbox to\adim{\vbox to\wd\abox{\vskip\wd\abox
+ \special{ps: gsave currentpoint currentpoint
+ translate #2 neg rotate
+ neg exch neg exch translate}%
+ \box\abox\vss}\hss}%
+ \special{ps: currentpoint grestore moveto}%
+}%end rotate
+
+\begindemo
+\def\data{1\cs2\rs
+ 3\cs4 }
+pre
+\rotate{\framed
+ \btable\data}
+ {90}
+post
+!yields
+\def\data{1\cs2\rs 3\cs4 }
+pre
+\rotate{\framed\btable\data}{90}
+post
+\enddemo
+
+Remark.
+Gurari (1994) has provided some more examples of \PS$\leftrightarrow$(Al)Dra\TeX{}
+interaction. Real interfacing.
+Apart from portability problems it gets quite complicated.
+For the moment I refrain and code the `pictures' in raw \PS{}
+assisted by \MF{} for prompting control points of those curves
+which can be specified elegantly in a declarative way.
+
+\bluehead METAFONT/MetaPost user interface
+
+Sometimes it is more natural to specify points and {\em directions}.
+It is true that specifying a control point along the direction
+can yield the same effect but the distance between the point
+and its control point influences the shape.
+
+\blueexample Escher's knot
+
+This example is all about specifying directions.
+
+$$\ifdraft\vbox to1in{\vss\hbox{Escher knot II}\vss}
+\else\psfig{file=escherknotmf.eps,height=1in}
+\fi$$
+
+In \MF{} the coding would read as follows.
+
+\beginverbatim
+%Escher's Knot. June 96. cgl@rc.service.rug.nl
+def openit = openwindow currentwindow
+ from origin to (screen_rows,screen_cols)
+ at (-2r,3r)enddef;
+pickup pencircle scaled 1;
+tracingstats:=proofing:=1; screenstrokes;
+pair p[];
+%parameters
+r:=100; alfa=90;
+%
+p2:=(0,.85r); %independent from p1,3,4
+p4:=(0,-.5r);
+%dependent points because of symmetry
+p1:=p4 rotated -120;
+p3:=p4 rotated 120;
+path q;
+q=p1{dir alfa}..{(1,0)}p2..
+ {dir(-alfa)}p3..{dir(alfa-240)}p4;
+draw q;
+draw q rotated 120;
+draw q rotated-120;
+showit;
+end
+!endverbatim
+
+By the nature of the figure not only points are related but
+also their directions.
+How to cope with this in \PS?
+It can be done but is not so elegant, honestly speaking cumbersome.
+But \dots there is a solution or two, hang on.
+
+\beginverbatim
+%!!PS EPS
+%%Title: Escher knot II
+%%Creator: cgl (inspired by Knotplot)
+%%CreationDate: June 1996
+%%BoundingBox: -95 -95 95 95
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+%
+/angle 90 def
+/r 100 def
+/point {0 -.5 r mul}def
+/p1 {-.25 r mul 3 sqrt mul .25 r mul moveto
+ currentpoint
+ angle sin 2 mul add exch
+ angle cos 2 mul add exch
+ -20 .85 r mul
+ 0 .85 r mul
+ curveto stroke} def
+/p3 { .25 r mul 3 sqrt mul .25 r mul moveto
+ %Control point
+ currentpoint
+ angle sin -15 mul add exch
+ angle cos 15 mul add exch
+ %Control point:
+ % 58.62 -.5 r mul 5 add%angle 90
+ 0 angle -240 add cos -15 mul add
+ -.5 r mul angle -240 add sin -15 mul add
+ 0 -.5 r mul
+ curveto stroke} def
+3{p1
+ gsave -1 1 scale p1 grestore%reflect
+ p3
+ 120 rotate
+}repeat showpage
+!endverbatim
+
+Explanation.
+The essential curve is split into \on3{} pieces: p$_1$,\dots p$_3$.
+The first two are related by reflection.
+The third must properly match. In the Columbus's egg paragraph
+the straight |.eps| code is given,
+biased by the knowledge of the (control) points.
+
+\bluesubhead A teaser
+
+More complicated is when the line is changed into a tube, and
+when we have to deal with hidden lines.
+In \MF{} the code could read as follows, where use is made of
+|intersectiontimes| and of subpaths.\ftn{This code works as such on my Mac
+ with Bluesky's PD METAFONT. For other environments build a character
+ from it, or adapt it for use in MetaPost, or even simpler copy the
+ bread-and-butter EPS code which is appended at the end.}
+
+\blueexample Escher's knot III
+
+This example is all about getting from a {\em declarative\/} specification
+in \MF{} to a {\em imperative\/} EPS code.
+
+$$\ifdraft\vbox to1in{\vss\hbox{Escher knot III}\vss}
+\else\psfig{file=escherknotiii.epsabr,height=1in}
+\fi$$
+
+First the declarative \MF{} code.
+\beginverbatim
+%Escher Knot III. June 96. cgl@rc.service.rug.nl
+def openit = openwindow currentwindow
+ from origin to (screen_rows,screen_cols)
+ at (-2r,3r)enddef;
+pickup pencircle scaled 1;
+tracingstats:=proofing:=1; screenstrokes;
+numeric t, u, v, w;
+pair p[]; path q[];
+def assignpoints=
+ p2:=(0,.85r); %independent from p1,3,4
+ p4:=(0,-.5r);
+ %dependent points because of symmetry
+ p1:=p4 rotated -120;
+ p3:=p4 rotated 120;
+enddef;
+%
+alfa=90;r:=100; assignpoints;
+q1:=p1{dir alfa}..{(1,0)}p2..
+ {dir(-alfa)}p3..{dir(alfa-240)}p4;
+%inside
+ r:=.75r; assignpoints;
+q2:=p1{dir alfa}..{(1,0)}p2..
+ {dir(-alfa)}p3..{dir(alfa-240)}p4;
+(t,u)= subpath (2.5,3) of q1
+ intersectiontimes (q2 rotated -120);
+(v,w)= q2 intersectiontimes
+ (q1 rotated 120);
+%showvariable t,u;
+draw subpath (0,2.5 + t/2) of q1;
+draw subpath (0,2.5 + t/2) of q1
+ rotated 120;
+draw subpath (0,2.5 + t/2) of q1
+ rotated-120;
+%showvariable v,w;
+draw subpath (v,3) of q2;
+draw subpath (v,3) of q2 rotated 120;
+draw subpath (v,3) of q2 rotated-120;
+showit;
+end
+!endverbatim
+
+To give the reader an impression of what \MP{} will yield
+|escherknotIII.eps|, the imperative code, is included.\ftn{A white lie. I have edited the file
+ and reduced the data\Dash and deleted
+ |dtransform|, |idtransform| and the various |set...|\Dash
+ for the \on6{} strokes into only \on2{} and rotated these.
+ METAFONT allowed me to declaratively specify the picture while
+ MetaPost provided me with the essential path data.
+ Well\dots even METAFONT can be asked to provide those (control) points.}
+
+\beginverbatim
+%!!PS EPS
+%%BoundingBox: -40 -31 40 43
+%%Creator: MetaPost and JJW, CGL
+%%CreationDate: June 17 1996
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+3{-21.6507 12.5 moveto
+-21.6507 27.74551 -13.78212 42.5003
+ 0 42.5003 curveto
+13.78212 42.5003 21.6507 27.74551
+ 21.6507 12.5 curveto
+21.6507 -0.24506 16.04897 -12.19249
+ 6.58395 -20.3313 curveto
+%
+-14.3152 15.86746 moveto
+-12.43301 23.58928 -7.45113 29.75021
+ 0 29.75021 curveto
+9.64748 29.75021 15.15549 19.42186
+ 15.15549 8.75 curveto
+15.15549 -2.07904 9.37823 -12.08548
+ 0 -17.5 curveto
+120 rotate
+}repeat stroke showpage
+!endverbatim
+
+As can be seen from the last code it is all about finding the right
+(control) points and draw the strokes, as remarked at the beginning of this note.
+The difference between the declarative \MF{} specification and
+the resulting (unedited) \MP{} code is striking.
+When the last code is shown first one would say, ah\dots \PS{}
+is easy just data and some strokes.
+The resulting code is equivalent to Woody Baker's code:
+just the right stroke and a rotation or two.
+
+KnotPlot on the net provides a more complicated version where
+the light reflection is emulated by shades of grey.
+The gzipped file is \on64KB, however.
+A world of difference.
+
+\bluesubhead Columbus' egg
+
+Why not use \MF{} to create `the (control) points' from the descriptive picture
+and use these in raw \PS{} straightaway?
+
+After assigning
+|precontrol|-s and |postcontrol|-s to pairs and
+inserting |show|-s, \MF{} yielded for the simple Escher knot the data
+in the transcript file.
+A little editing of this log file resulted in the following
+imperative EPS code.
+
+\beginverbatim
+%!!PS EPS
+%%Title: Escher knot (mf prompted)
+%%Creator: cgl
+%%CreationDate: June 1996
+%%BoundingBox: -80 -80 80 80
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+3{-43.30139 25 moveto
+ -43.30139 55.49103 -27.56424 85.00061
+ 0 85.00061 curveto
+ 27.56424 85.00061 43.30139 55.49103
+ 43.30139 25 curveto
+ 43.30139 -5.94014 26.79497 -34.5299
+ 0 -50 curveto
+120 rotate
+}repeat stroke showpage
+!endverbatim
+
+I presume the functionality is similar to Jackowski's |mftoeps|.
+The above method is my Poor Man's \MF2EPS, with concise, very concise
+and intelligible EPS as result.
+
+\bluehead Acknowledgements
+
+First of all Don Knuth and John Hobby thank you.
+
+Thank you Joseph Romanovsky for
+showing by example the power of \PS, and for
+your cooperation on the \MF$\leftrightarrow$\PS{} duality.
+
+Thank you Bogus\l{}aw Jackowski for your `\PS{} for \TeX ies'
+at Bacho\TeX{} \on96, suggesting that \PS{} as such is beneficial
+for \TeX ies, next to your mftoeps.
+
+Thank you Eitan Gurari and anonymous \TeX ies of which I borrowed material,
+not in the least Adobe for providing \PS{} to start with.
+
+Piet Tutelaers provided me with a copy of the PSFAQ, and
+Erik Frambach traced the file with examples from the blue book, next to KnotPlot.
+
+As usual Jos Winnink proofed the paper and lend a helping hand in
+procrusting towards MAPS inclusion if not for processing |escherknot.mf|
+into |escherknot.eps| via \MP.
+
+\bluehead Conclusion
+
+To code symmetrical and simple curves in raw \PS{} is fun and yields elegant
+scripts and concise files.
+To merge text with graphics is fun too, and the teaser to set along curved paths
+can be done by \PS{} elegantly.
+Another teaser of drawing math curves accurately along with \AllTeX{} is solved also
+by means of \PS.
+Powerful too is to {\em extend\/} the inclusion of .eps files
+at the dvi level by a little more interaction between \AllTeX{} and \PS.
+Rotating a box, with as applications for example
+typesetting tables in landcape, is possible in \PS, at the expense of system
+dependency because of the \cs{special}-s.
+
+{\em Merging\/} a little knowledge of \PS{} with \TeX pertise is powerful.
+PStricks concentrates on {\em interfacing\/} \AllTeX{} with \PS{} at the expense
+of burdening \AllTeX{} too much, IMHO, with all respect.
+For \cs{rotate} I interfaced too. However, for typesetting along curved
+paths I would not think of interfacing via rotated boxes or so.
+
+Of course, people who do need advanced features or have special wishes
+might better use Adobe Illustrator, CorelDRAW, Mathematica, or Adobe Photoshop,
+and not to forget the pleasing MetaPost.
+
+To understand and learn \TeX{} did take me a couple of years.
+To acqaint myself with \MF{} did cost me a few months.
+Learning just a little bit of \PS{} was a matter of weeks, and
+when concentrating
+on paths and (control) points the |moveto|, |arc| and |curveto|
+can be grasped in a late afternoon.
+
+Although the blue book contains also examples of typesetting text,
+I consider \TeX{} unsurpassed for this. The best of both worlds is to
+combine \AllTeX{} and \PS.
+
+Maybe we should follow Adobe and extend the use of \PS{} by PDF\Dash
+or use the alternative HTML\Dash to facilitate WWW surfing.
+
+\bluehead What more?
+
+For pictures I use a \TeX{} controlled database with the beneficial side-effect
+that I don't have to worry about file systems when using pictures
+(tools, references and ilks) on different machines.
+I would welcome a similar functionality for my collection of \PS{}
+pictures to be used with \cs{psfig}.
+
+A next step is the manipulation of colors either via \MP{} or \PS{} directly.
+Jackowski uses Adobe Illustrator for example to enrich interactively
+the systematic EPS pictures created by \MF.
+Indeed interesting, very interesting,
+but beyond my possibilities for some time to come.
+Neither do I have access to color \PS{} printers as yet, alas.
+My case rests.
+
+Have fun, and all the best.
+\makesignature
+\pasteuptoc
+\endscript
diff --git a/info/laan/paradigm/paradigm.ps b/info/laan/paradigm/paradigm.ps
new file mode 100644
index 0000000000..b36acc71e8
--- /dev/null
+++ b/info/laan/paradigm/paradigm.ps
@@ -0,0 +1,2751 @@
+%!PS-Adobe-2.0
+%%Creator: dvips 5.47 Copyright 1986-91 Radical Eye Software
+%%Title: paradigm.dvi
+%%Pages: 13 1
+%%BoundingBox: 0 0 596 843
+%%EndComments
+%%BeginProcSet: tex.pro
+/TeXDict 200 dict def TeXDict begin /N /def load def /B{bind def}N /S /exch
+load def /X{S N}B /TR /translate load N /isls false N /vsize 10 N /@rigin{
+isls{[0 1 -1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+Resolution VResolution vsize neg mul TR matrix currentmatrix dup dup 4 get
+round 4 exch put dup dup 5 get round 5 exch put setmatrix}N /@letter{/vsize 10
+N}B /@landscape{/isls true N /vsize -1 N}B /@a4{/vsize 10.6929133858 N}B /@a3{
+/vsize 15.5531 N}B /@ledger{/vsize 16 N}B /@legal{/vsize 13 N}B /@manualfeed{
+statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N
+/FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn begin
+/FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array
+/BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo setfont}2
+array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx FMat N df-tail}
+B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{pop nn dup definefont
+setfont}B /ch-width{ch-data dup length 5 sub get}B /ch-height{ch-data dup
+length 4 sub get}B /ch-xoff{128 ch-data dup length 3 sub get sub}B /ch-yoff{
+ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B
+/ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0
+N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S
+dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0
+ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice
+ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ch-image}
+imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn /base get cc ctr
+put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf
+div put}if put /ctr ctr 1 add N}B /I{cc 1 add D}B /bop{userdict /bop-hook
+known{bop-hook}if /SI save N @rigin 0 0 moveto}N /eop{clear SI restore
+showpage userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
+known{start-hook}if /VResolution X /Resolution X 1000 div /DVImag X /IE 256
+array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for}N /p /show load N
+/RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X
+/rulex X V}B /V statusdict begin /product where{pop product dup length 7 ge{0
+7 getinterval(Display)eq}{pop false}ifelse}{false}ifelse end{{gsave TR -.1 -.1
+TR 1 1 scale rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1
+-.1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /a{
+moveto}B /delta 0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{
+S p tail}B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B
+/j{3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w
+}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
+a}B /bos{/SS save N}B /eos{clear SS restore}B end
+%%EndProcSet
+%%BeginProcSet: special.pro
+TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N /vs
+792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP false N /BBcalc false N
+/p 3 def}B /@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{
+@scaleunit div /vsc X}B /@hsize{/hs X /CLIP true N}B /@vsize{/vs X /CLIP true
+N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{10 div /rwi X}
+B /@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X /BBcalc true N}B
+/magscale true def end /@MacSetUp{userdict /md known{userdict /md get type
+/dicttype eq{md begin /letter{}N /note{}N /legal{}N /od{txpose 1 0 mtx
+defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{
+itransform moveto}}{transform{itransform lineto}}{6 -2 roll transform 6 -2
+roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll
+itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array
+astore /gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{
+PaintBlack}if}N /txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR
+pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
+get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
+not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if
+yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR pop pop 270
+rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get
+ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not
+and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip
+not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}
+ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy
+TR .96 dup scale neg S neg S TR}if}N /cp{pop pop showpage pm restore}N end}if}
+if}N /normalscale{Resolution 72 div VResolution 72 div neg scale magscale{
+DVImag dup scale}if}N /psfts{S 65536 div N}N /startTexFig{/psf$SavedState save
+N userdict maxlength dict begin /magscale false def normalscale currentpoint
+TR /psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
+/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx psf$llx
+sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx
+psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR /showpage{}N
+/erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{psf$llx psf$lly
+psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll
+S lineto S lineto S lineto closepath clip newpath moveto}N /endTexFig{end
+psf$SavedState restore}N /@beginspecial{SDict begin /SpecialSave save N gsave
+normalscale currentpoint TR @SpecialDefaults}N /@setspecial{CLIP{newpath 0 0
+moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR
+hsc vsc scale ang rotate BBcalc{rwi urx llx sub div dup scale llx neg lly neg
+TR}if /showpage{}N /erasepage{}N /copypage{}N newpath}N /@endspecial{grestore
+clear SpecialSave restore end}N /@defspecial{SDict begin}N /@fedspecial{end}B
+/li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{/SaveX currentpoint /SaveY X N 1
+setlinecap newpath}N /st{stroke SaveX SaveY moveto}N /fil{fill SaveX SaveY
+moveto}N /ellipse{/endangle X /startangle X /yrad X /xrad X /savematrix matrix
+currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix
+setmatrix}N end
+%%EndProcSet
+TeXDict begin 1000 300 300 @start /Fa 4 117 df<01F800070E000C03001C03803801C0
+7801E07000E0F000F0F000F0F000F0F000F0F000F0F000F0F000F07000E07801E03801C01C0380
+1E0780070E0001F80014157E941A>111 D<FFFC001C0F001C03801C03C01C03C01C03C01C03C0
+1C03C01C03801C0F001FFC001C00001C00001C00001C00001C00001C00001C00001C00001C0000
+FF800012157F9417>I<1F1030F06030C030C010C010C000E0007E003FC01FE003F00078003800
+18801880188010C030F0608FC00D157E9413>115 D<7FFFF06070304070104070108070088070
+088070080070000070000070000070000070000070000070000070000070000070000070000070
+0000700007FF0015157F9419>I E /Fb 13 112 df<000100000300000700000780000B80000B
+800013800013800023C00021C00041C00041C00081C00081C00100E001FFE00200E00200E00400
+E00400700800701C0070FE03FE17177F961A>65 D<1FFFFE03C00E038006038006038002038002
+03800203808007010007010007030007FF000703000703000E02040E02040E00040E000C0E0008
+0E00181C00381C0070FFFFF017177F9618>69 D<1FFFFE03C00E03800603800603800203800203
+800203808007010007010007030007FF000703000703000E02000E02000E00000E00000E00000E
+00001C00001E0000FFC00017177F9617>I<1FC0003F8003E0005C0002E000780002E000B80002
+E000B8000270013800027001380002700238000470047000043804700004380870000438087000
+0438107000041C107000081C20E000081C40E000081C40E000080E80E000080E80E000080F00E0
+00180E01C000380601C000FE040FF80021177F9620>77 D<1FC01FE001C0038002E0030002E002
+00027002000238020002380200021C0200041C0400040E0400040E040004070400040784000403
+84000801C8000801C8000800E8000800E80008007800080078001800300038001000FE0010001B
+177F961A>I<003F0001C1C00300600E00301C003818001830001C70001C70001CE0001CE0001C
+E0001CE0001CE00038E00038E00038E00070E000607000E03001C01803000E0E0003F00016177C
+961B>I<3FFFFC703C1C60380C403804C038048038048038040038000070000070000070000070
+0000700000700000E00000E00000E00000E00000E00000E00001C00001E0003FFE0016177C9619
+>84 D<0FF83F8001E01C0000E0180000E0100000702000007040000038800000398000001D0000
+001E0000000E0000000E0000001F00000037000000278000004380000083C0000101C0000201E0
+000600E0000400F0001C00F000FF03FE0019177F961A>88 D<7E001E001C001C001C001C001C00
+1C00380039F03E0C3806380738077007700770077007700E700CF018C87087C010177D9614>98
+D<03E00C3018183018701C7FF8E000E000E000E0006008701038600F800E0E7E8D10>101
+D<1F80000780000700000700000700000700000700000700000E00000E3E000EC3000F03800E03
+800E03801C07001C07001C07001C07001C07001C0700380E00380E00FF3FC012177F9614>104
+D<1F80000780000700000700000700000700000700000700000E00000E0FC00E0F000E0C000E10
+000E60001CC0001DE0001CF0001C70001C78001C3800383C00383E00FE7F8012177F9613>107
+D<03F00C18180C300E700E600EE00EE00EE00EE00C601C703838600F800F0E7E8D12>111
+D E /Fc 4 122 df<07001880304060404080FF00C000C000C0008000C040C08043003C000A0E
+7B8D10>101 D<38F04518463846308C000C000C000C001800180018001800300030000D0E7D8D
+0F>114 D<1C1026184618461886100C100C100C101820182018401840088007000D0E7D8D10>
+118 D<1C0826184618461886300C300C300C30186018601860186008C007C000C0008071807300
+66003C000D147D8D11>121 D E /Fd 42 122 df<183C7C340404080810106080060C799C0C>
+39 D<000400080030006000C0008001800300060006000C000C00180018003800300030007000
+7000600060006000E000E000E000E000E000E000E000E000600060006000600020003000300018
+0008000C00040002000E2A7C9E10>I<0100008000400060002000300010001800180018001C00
+0C000C000C000C000C000C000C000C001C001C001C0018001800380038003000300070006000E0
+00C001C001800300030006000C0018003000600080000E2A809E10>I<7FF0FFE00C027F890E>
+45 D<000020000000300000007000000070000000F0000000F0000001F0000003780000027800
+0006780000047800000C780000087C0000183C0000103C0000203C0000203C0000403C0000403E
+0000FFFE0000801E0001001E0001001E0002001E0002000F0004000F0004000F001E001F00FF80
+FFF01C1D7F9C1F>65 D<0FFFFC0000F8070000F0038000F003C000F001C000F001E000F001E001
+E001C001E003C001E003C001E0078001E00F0001E03C0003FFF80003C01E0003C00F0003C00780
+03C0078003C007800780078007800780078007800780078007800F0007801E000F003C000F0078
+00FFFFE0001B1C7E9B1D>I<0007F010001C0C300070026000C001E0038000E0070000E00E0000
+600E0000601C0000403C00004038000040780000007800000078000000F0000000F0000000F000
+0000F0000000F0000000F0000080F0000100700001007000010038000200380004001C0004000C
+001800060020000380C000007F00001C1E7C9C1E>I<0FFFFFE000F801E000F000E000F0004000
+F0004000F0004000F0004001E0004001E0404001E0400001E0400001E0C00001E1C00003FF8000
+03C1800003C0800003C0800003C0800003C0808007800080078000800780010007800100078003
+00078006000F000E000F003E00FFFFFC001B1C7E9B1C>69 D<0FFFFFC000F803C000F001C000F0
+008000F0008000F0008000F0008001E0008001E0408001E0400001E0400001E0C00001E1C00003
+FF800003C1800003C0800003C0800003C0800003C0800007800000078000000780000007800000
+07800000078000000F0000000F800000FFF800001A1C7E9B1B>I<0007F010001C0C3000700260
+00C001E0038000E0070000E00E0000600E0000601C0000403C0000403800004078000000780000
+0078000000F0000000F0000000F0000000F000FFF0F0000F80F0000780F0000F0070000F007000
+0F0038000F0038000F001C001F000C001E000600660003818200007E00001C1E7C9C21>I<0FFF
+8000F80000F00000F00000F00000F00000F00001E00001E00001E00001E00001E00001E00003C0
+0003C00003C00003C00003C00003C0000780000780000780000780000780000780000F00000F80
+00FFF800111C7F9B0F>73 D<0FF80007FC00F8000FC000BC000F8000BC00178000BC00178000BC
+00278000BC002780011E004F00011E004F00011E008F00011E008F00011E010F00010F010F0002
+0F021E00020F021E00020F041E00020F041E000207881E000207901E000407903C000407A03C00
+0407A03C000407C03C000403C03C000403803C000C038078001E03007C00FF8307FF80261C7E9B
+26>77 D<0FF807FE00F800F000FC006000BC004000BE0040009E0040009E0040010F0080010F00
+8001078080010780800103C0800103C0800201E1000201E1000200F1000200F1000200F9000200
+790004007E0004003E0004003E0004001E0004001E0004000E000C000C001E000400FF8004001F
+1C7E9B1F>I<0007F00000381C0000E00E0001C0030003800380070001C00E0001C01E0001E01C
+0000E03C0000E0380000E0780000F0780000F0780000F0F00001E0F00001E0F00001E0F00001E0
+F00003C0F00003C0F00003C0700007807000070078000F0038001E003C001C001C0038000E00E0
+000383800000FE00001C1E7C9C20>I<0FFFFC0000F80F0000F0038000F003C000F001C000F001
+C000F001C001E003C001E003C001E003C001E0038001E0070001E00E0003C03C0003FFE00003C0
+000003C0000003C0000003C000000780000007800000078000000780000007800000078000000F
+0000000F800000FFF000001A1C7E9B1C>I<0FFFF80000F80E0000F0078000F003C000F001C000
+F001E000F001E001E003C001E003C001E0038001E0070001E00E0001E03C0003FFE00003C07000
+03C0380003C03C0003C01C0003C01E0007803C0007803C0007803C0007803C0007803C0007803C
+080F003C100F801C10FFF01C20000007C01D1D7E9B1F>82 D<003F0400C0CC0180380300380600
+180E00180E00180E00181E00101E00001F00000F80000FF80007FF0003FF8001FFC0003FE00003
+E00001E00000E00000E04000E04000E04000E04000C06001C0E00180F00300CC0E0083F800161E
+7E9C17>I<1FFFFFF03C07C0F03007803020078020600780204007802040078020400F0020800F
+0020000F0000000F0000000F0000000F0000001E0000001E0000001E0000001E0000001E000000
+1E0000003C0000003C0000003C0000003C0000003C0000003C000000780000007C00001FFFE000
+1C1C7C9B1E>I<FFF0FFE0FF801F001F003C000F001F0018000F000F0010000F001F0010000F00
+1F0020000F002F0020000F002F0060000F804F00400007804F8040000780878080000780878080
+0007810781000007810781000007820782000007C20782000003C407C4000003C403C4000003C8
+03C8000003C803C8000003D803D0000003D003D0000003F003E0000001E003E0000001E001C000
+0001C001C0000001C001800000018001800000018001800000291D7B9B2B>87
+D<07F0001C18001E0C001C0E00180E00000E00000E0001FE000F0E001C1C00301C00701C00E01C
+40E01C40E03C40E05C80709D803F0E0012127D9115>97 D<3F00000F00000E00000E00000E0000
+0E00000E00000E00001C00001C00001C00001C78001D86001E03003C03803801803801803801C0
+3801C03801C0700380700380700380700300700700700E00F00C00CC300083C000121D7C9C17>
+I<01F8071C0C1E181C38183000700070007000E000E000E000600060047008301018200FC00F12
+7D9112>I<0003F00000F00000E00000E00000E00000E00000E00000E00001C00001C00001C000
+F1C0030DC00C03C01C0380380380300380700380700380700380E00700E00700E0070060070060
+0700700F00301E00186F00078FC0141D7D9C17>I<01F8070C0C061C073803300370037FFF7000
+E000E000E00060006002300430081C3007C010127E9112>I<000F800039C00061C000E3C001C1
+8001C00001C00001C0000380000380000380003FF8000380000380000700000700000700000700
+000700000700000E00000E00000E00000E00000E00000E00001C00001E0000FFC000121D7F9C0D
+>I<000038003CCC00C69C018308038380070380070380070380070380070700030600038C0004
+F0000400000C00000C00000FFE0007FF800FFFC01801C02000C06000E0C000C0C000C060018020
+0300180E0007F000161C809215>I<07E00001E00001C00001C00001C00001C00001C00001C000
+038000038000038000038F8003B0C003C0E00780E00780E00700E00700E00700E00700E00E01C0
+0E01C00E01C00E01C00E01C00E01C01C03801E03C0FF9FF0141D7F9C17>I<00C001C001C00180
+00000000000000000000000000001F80078003800700070007000700070007000E000E000E000E
+000E000E001C001E00FF800A1D7F9C0C>I<07E00001E00001C00001C00001C00001C00001C000
+01C0000380000380000380000387F80381E003818007020007040007080007100007700007F800
+0F38000E3C000E1C000E1E000E0E000E0F001C07001C0F80FF9FE0151D7F9C16>107
+D<07E001E001C001C001C001C001C001C003800380038003800380038007000700070007000700
+07000E000E000E000E000E000E001C001E00FF800B1D7F9C0C>I<1F8FC0FC00079061060003E0
+7607000780780700078078070007007007000700700700070070070007007007000E00E00E000E
+00E00E000E00E00E000E00E00E000E00E00E000E00E00E001C01C01C001E01E01E00FF8FF8FF80
+21127F9124>I<1F8F8007B0C003C0E00780E00780E00700E00700E00700E00700E00E01C00E01
+C00E01C00E01C00E01C00E01C01C03801E03C0FF9FF014127F9117>I<00FC000307000E01801C
+01C03800C03000C07000E07000E07000E0E001C0E001C0E001C0600180600380700700380E001C
+180007E00013127E9115>I<0FC78003D86001E03003C03803803803801803801C03801C03801C
+0700380700380700380700700700700700E00F01C00EC3000E3C000E00000E00000E00001C0000
+1C00001C00001C0000FF8000161A809117>I<00F0400308C00E05C01C03803803803803807003
+80700380700380E00700E00700E00700600700700700700F00301E00186E00078E00000E00000E
+00000E00001C00001C00001C00001C0000FF80121A7D9116>I<1F9C07EE03CF078E078C070007
+00070007000E000E000E000E000E000E001C001E00FFC010127F9110>I<03F20C0E1806100430
+0438043E001FE00FF007F8003C401C400C400C6018E010D0608FC00F127F9110>I<0200020002
+00060006000C001C003C00FFE01C001C0038003800380038003800380070007040704070407040
+7080708031001E000B1A7C9910>I<FC1F803C07801C0380380700380700380700380700380700
+380700700E00700E00700E00700E00701E00701E00703C00305E001F9F8011127C9117>I<FF0F
+E03C03801C03001C02001C06001C04001E08000E08000E10000E10000E200007200007400007C0
+0007800007000003000002000013127C9116>I<FF3FCFE03C0F038038060300380E02001C0F02
+001C1704001C1704001C2708001C2308001C4310000E4390000E83A0000E83A0000F03C0000F01
+C0000E01800006018000040100001B127C911E>I<0FF0FE03C03801C03001C02001C06001C040
+01E08000E08000E10000E10000E200007200007400007C00007800007000003000002000002000
+004000004000708000F10000F10000E60000780000171A809116>121 D
+E /Fe 83 126 df<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0600000000060F0F0600419779816>
+33 D<0387000387000387000387000387000387007FFFC0FFFFE0FFFFE0070E00070E00070E00
+0E1C000E1C000E1C000E1C00FFFFE0FFFFE07FFFC01C38001C38001C38001C38001C38001C3800
+13197F9816>35 D<00C00001C00001C00001C00007F0001FFC003FFE007DCF0071C780E1C380E1
+C780E1C780F1C30079C0003FC0001FF00007FC0001FE0001CF0001C70061C380F1C380F1C380E1
+C38071C70079DF003FFE001FF80007E00001C00001C00000C00011207E9C16>I<3801807C0380
+7C0380EE0700EE0700EE0E00EE0E00EE0E00EE1C007C1C007C3800383800007000007000007000
+00E00000E00001C00001C00001C0000380000383800707C00707C00E0EE00E0EE00E0EE01C0EE0
+1C0EE03807C03807C018038013207F9C16>I<30787C3C1C1C1C1C3878F0E040060D789816>39
+D<00E001E0038007000E001C001C0038003800700070007000E000E000E000E000E000E000E000
+E000E000700070007000380038001C001C000E000700038001E000E00B217A9C16>I<C000E000
+700038001C000E000E000700070003800380038001C001C001C001C001C001C001C001C001C003
+8003800380070007000E000E001C0038007000E000C0000A217B9C16>I<01C00001C00001C000
+01C00071C700F9CF807FFF001FFC0007F00007F0001FFC007FFF00F9CF8071C70001C00001C000
+01C00001C00011127E9516>I<01C00001C00001C00001C00001C00001C00001C00001C000FFFF
+80FFFF80FFFF8001C00001C00001C00001C00001C00001C00001C00001C00011137E9516>I<38
+7C7E7E3E0E1E1C78F060070B798416>I<FFFF80FFFF80FFFF8011037E8D16>I<70F8F8F8700505
+788416>I<000180000380000380000700000700000E00000E00001C00001C0000380000380000
+700000700000E00000E00001C00001C0000380000380000700000700000E00000E00001C00001C
+0000380000380000700000700000E00000E00000C0000011207E9C16>I<03E0000FF8001FFC00
+1E3C00380E00780F00700700700700E00380E00380E00380E00380E00380E00380E00380E00380
+F00780700700700700780F003C1E001E3C001FFC000FF80003E00011197E9816>I<0180038003
+8007800F807F80FF80738003800380038003800380038003800380038003800380038003800380
+7FF87FFC7FF80E197C9816>I<07E0001FF8003FFC00783E00E00700F00780F003806003800003
+80000380000700000700000E00001C0000380000700000E00001C0000380000F00001E03803803
+807FFF80FFFF807FFF8011197E9816>I<07E0001FF8003FFC00781E0078070030070000070000
+0700000E00003E0007FC0007F00007FC00001E00000700000300000380000380600380F00380E0
+0700781E003FFC001FF80007E00011197E9816>I<007C0000FC0000DC0001DC00039C00039C00
+071C000F1C000E1C001E1C003C1C00381C00781C00F01C00FFFFE0FFFFE0FFFFE0001C00001C00
+001C00001C00001C0001FFC001FFC001FFC013197F9816>I<3FFE003FFE003FFE003800003800
+003800003800003800003800003800003BF0003FFC003FFE003C0F003007000003800003806003
+80F00380F00380E00700781E003FFC001FF80007E00011197E9816>I<00F80003FC0007FE000F
+07001C0F00380F00780600700000700000E3F800EFFC00FFFE00F80F00F00700F00380E00380E0
+03807003807003807007803807003C1E001FFC000FF80003E00011197E9816>I<E00000FFFF80
+FFFF80FFFF80E00F00E01E00001C0000380000780000700000E00000E00001C00001C00001C000
+038000038000038000038000070000070000070000070000070000070000070000111A7E9916>
+I<07F0001FFC003FFE007C1F00F00780E00380E00380E003807007007C1F001FFC0007F0001FFC
+003C1E00700700F00780E00380E00380E00380F007807007007C1F003FFE001FFC0007F0001119
+7E9816>I<03E0000FF8001FFC003C1E00700E00700700E00700E00780E00380E00380E0078070
+0780780F803FFF801FFB800FE380000700000700300700780E00781C007078003FF0001FE0000F
+800011197E9816>I<70F8F8F870000000000000000070F8F8F8700512789116>I<387C7C7C3800
+0000000000000038787C7C3C1C1C3870E0400618799116>I<000180000780001F80003E0000F8
+0001F00007C0000F80003E0000FC0000F00000FC00003E00000F800007C00001F00000F800003E
+00001F8000078000018011157E9616>I<7FFF00FFFF80FFFF8000000000000000000000000000
+0000FFFF80FFFF807FFF00110B7E9116>I<C00000F00000FC00003E00000F800007C00001F000
+00F800003E00001F80000780001F80003E0000F80001F00007C0000F80003E0000FC0000F00000
+C0000011157E9616>I<00F80003FC0007FE000F07001C3F80387F8078FF8071C3C071C3C0E381
+C0E381C0E381C0E381C0E381C0E381C0E381C071C38071C38078FF00387E001C3C000F03C007FF
+C003FF0000FC0012197E9816>64 D<00E00001F00001F00001B00001B00003B80003B80003B800
+031800071C00071C00071C00071C00071C000E0E000E0E000FFE000FFE001FFF001C07001C0700
+1C07007F1FC0FF1FE07F1FC013197F9816>I<7FF800FFFE007FFF001C0F001C07801C03801C03
+801C03801C07801C07001FFF001FFE001FFE001C1F001C03801C03C01C01C01C01C01C01C01C01
+C01C03C01C07807FFF80FFFF007FFC0012197F9816>I<01F18007FB800FFF801F0F803C078038
+0380700380700380F00000E00000E00000E00000E00000E00000E00000E00000F0000070038070
+03803803803C07001F0F000FFE0007FC0001F00011197E9816>I<7FF800FFFE007FFF001C0F00
+1C07801C03C01C01C01C01C01C01E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E0
+1C01C01C01C01C03C01C07801C0F807FFF00FFFE007FF8001319809816>I<7FFFC0FFFFC07FFF
+C01C01C01C01C01C01C01C01C01C00001C00001C1C001C1C001FFC001FFC001FFC001C1C001C1C
+001C00001C00E01C00E01C00E01C00E01C00E07FFFE0FFFFE07FFFE013197F9816>I<FFFFE0FF
+FFE0FFFFE01C00E01C00E01C00E01C00E01C00001C00001C1C001C1C001FFC001FFC001FFC001C
+1C001C1C001C00001C00001C00001C00001C00001C0000FF8000FFC000FF800013197F9816>I<
+03E30007FF000FFF001E1F003C0F00380700700700700700F00000E00000E00000E00000E00000
+E03F80E07FC0E03F80F00700700700700700380F003C0F001E1F000FFF0007F70003E70012197E
+9816>I<FFFEFFFEFFFE0380038003800380038003800380038003800380038003800380038003
+800380038003800380FFFEFFFEFFFE0F197D9816>73 D<07FE07FF07FE00380038003800380038
+003800380038003800380038003800380038003800386038F038F0707FF07FE01F8010197D9816
+>I<7F0FE0FF8FF07F0FE01C07801C0F001C0E001C1C001C3C001C78001CF0001CE0001DF0001F
+F0001FF8001F38001E1C001C1C001C0E001C0E001C07001C07001C03807F07E0FF8FF07F07E014
+19809816>I<FFC000FFC000FFC0001C00001C00001C00001C00001C00001C00001C00001C0000
+1C00001C00001C00001C00001C00001C00001C00401C00E01C00E01C00E01C00E0FFFFE0FFFFE0
+FFFFE013197F9816>I<FC07E0FE0FE0FE0FE03A0B803B1B803B1B803B1B803B1B803B1B803BBB
+8039B38039B38039B38039B38039F38038E38038E380380380380380380380380380380380FE0F
+E0FE0FE0FE0FE013197F9816>I<7E1FC0FF3FE07F1FC01D07001D87001D87001D87001DC7001D
+C7001CC7001CC7001CE7001CE7001CE7001C67001C67001C77001C77001C37001C37001C37001C
+17007F1F00FF9F007F0F0013197F9816>I<1FFC003FFE007FFF00780F00F00780E00380E00380
+E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380F00780
+F00780780F007FFF003FFE001FFC0011197E9816>I<7FF800FFFE007FFF001C0F801C03801C03
+C01C01C01C01C01C01C01C03C01C03801C0F801FFF001FFE001FF8001C00001C00001C00001C00
+001C00001C00001C00007F0000FF80007F000012197F9816>I<7FE000FFF8007FFC001C1E001C
+0F001C07001C07001C07001C07001C0F001C1E001FFC001FF8001FFC001C1C001C0E001C0E001C
+0E001C0E001C0E201C0E701C0E707F07E0FF87E07F03C014197F9816>82
+D<07E3001FFF003FFF00781F00F00700E00700E00700E00000F000007800003F80001FF00007FC
+0000FE00000F00000700000380000380600380E00380E00700F80F00FFFE00FFFC00C7F0001119
+7E9816>I<7FFFE0FFFFE0FFFFE0E0E0E0E0E0E0E0E0E0E0E0E000E00000E00000E00000E00000
+E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00007FC000FFE0007
+FC0013197F9816>I<FE0FE0FF1FE0FE0FE03803801C07001C07001C07001C07000E0E000E0E00
+0E0E000E0E00060C00071C00071C00071C00071C0003180003B80003B80003B80001B00001F000
+01F00000E00013197F9816>86 D<FC07E0FE0FE0FC07E07001C07001C07001C030018038038038
+038038038038E38039F38039F38039B38019B30019B30019B30019B30019B30019B3001913001B
+1B000F1E000F1E000E0E0013197F9816>I<FFF0FFF0FFF0E000E000E000E000E000E000E000E0
+00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000FFF0
+FFF0FFF00C20789C16>91 D<C00000E00000E000007000007000003800003800001C00001C0000
+0E00000E000007000007000003800003800001C00001C00000E00000E000007000007000003800
+003800001C00001C00000E00000E0000070000070000038000038000018011207E9C16>I<FFF0
+FFF0FFF00070007000700070007000700070007000700070007000700070007000700070007000
+7000700070007000700070007000700070FFF0FFF0FFF00C207F9C16>I<FFFF80FFFF80FFFF80
+11037E7E16>95 D<081C3C7870E0E0E0E0F0F87830060D789B16>I<1FE0003FF0007FF800783C
+00300E00000E00000E0003FE001FFE003E0E00700E00E00E00E00E00E00E00783E007FFFE03FE7
+E00F83E013127E9116>I<7E0000FE00007E00000E00000E00000E00000E00000E3E000EFF000F
+FF800F83C00F00E00E00E00E00700E00700E00700E00700E00700E00700E00E00F01E00F83C00F
+FF800EFF00063C001419809816>I<03F80FFC1FFE3C1E780C7000E000E000E000E000E000F000
+700778073E0E1FFC0FF803F010127D9116>I<003F00007F00003F000007000007000007000007
+0003C7000FF7001FFF003C1F00780F00700700E00700E00700E00700E00700E00700E00700700F
+00700F003C1F001FFFE00FE7F007C7E014197F9816>I<03E00FF81FFC3C1E780E7007E007FFFF
+FFFFFFFFE000E000700778073C0F1FFE0FFC03F010127D9116>I<001F00007F8000FF8001E780
+01C30001C00001C0007FFF00FFFF00FFFF0001C00001C00001C00001C00001C00001C00001C000
+01C00001C00001C00001C00001C0003FFE007FFF003FFE0011197F9816>I<03E3C007F7E00FFF
+E01C1CC0380E00380E00380E00380E00380E001C1C000FF8001FF0001BE0003800001800001FFC
+001FFF003FFF807803C0E000E0E000E0E000E0E000E07001C07C07C03FFF800FFE0003F800131C
+7F9116>I<7E0000FE00007E00000E00000E00000E00000E00000E3C000EFE000FFF000F87800F
+03800E03800E03800E03800E03800E03800E03800E03800E03800E03800E03807FC7F0FFE7F87F
+C7F01519809816>I<018003C003C0018000000000000000007FC07FC07FC001C001C001C001C0
+01C001C001C001C001C001C001C001C07FFFFFFF7FFF101A7D9916>I<00300078007800300000
+0000000000001FF81FF81FF8003800380038003800380038003800380038003800380038003800
+38003800380038003800386070F0F0FFE07FC03F800D237E9916>I<7E0000FE00007E00000E00
+000E00000E00000E00000E7FE00E7FE00E7FE00E0F000E1E000E3C000E78000EF0000FF0000FF8
+000FBC000F1E000E0E000E07000E07807F87F0FFCFF07F87F01419809816>I<FFC000FFC000FF
+C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001
+C00001C00001C00001C00001C00001C00001C000FFFF80FFFF80FFFF8011197E9816>I<F9C380
+FFEFC0FFFFE03C78E03C78E03870E03870E03870E03870E03870E03870E03870E03870E03870E0
+3870E0FE7CF8FE7CF8FE3C781512809116>I<7E3C00FEFE007FFF000F87800F03800E03800E03
+800E03800E03800E03800E03800E03800E03800E03800E03807FC7F0FFE7F87FC7F01512809116
+>I<03E0000FF8001FFC003C1E00780F00700700E00380E00380E00380E00380E00380F0078070
+0700780F003C1E001FFC000FF80003E00011127E9116>I<7E3E00FEFF007FFF800F83C00F00E0
+0E00E00E00700E00700E00700E00700E00700E00700E00E00F01E00F83C00FFF800EFF000E3C00
+0E00000E00000E00000E00000E00000E00007FC000FFE0007FC000141B809116>I<07C7000FE7
+001FF7003C1F00700F00700F00E00700E00700E00700E00700E00700E00700700F00700F003C3F
+003FF7001FE70007C700000700000700000700000700000700000700003FE0007FF0003FE0141B
+7E9116>I<FF0FC0FF3FE0FF7FE007F04007C00007800007800007000007000007000007000007
+0000070000070000070000FFFC00FFFC00FFFC0013127F9116>I<0FEC3FFC7FFCF03CE01CE01C
+70007F801FF007F8003C600EE00EF00EF81EFFFCFFF8C7E00F127D9116>I<0300000700000700
+000700000700007FFF00FFFF00FFFF000700000700000700000700000700000700000700000701
+0007038007038007038007870003FE0001FC0000F80011177F9616>I<7E1F80FE3F807E1F800E
+03800E03800E03800E03800E03800E03800E03800E03800E03800E03800E03800E0F800FFFF007
+FBF803E3F01512809116>I<7F1FC0FF1FE07F1FC01C07001E0F000E0E000E0E000E0E00071C00
+071C00071C00071C0003B80003B80003B80001F00001F00000E00013127F9116>I<FF1FE0FFBF
+E0FF1FE038038038038038038038038038E38019F30019F30019B3001DB7001DB7001DB7001DB7
+000F1E000F1E000F1E0013127F9116>I<7F1FC07F3FC07F1FC00F1C00073C0003B80003F00001
+F00000E00001E00001F00003B800073C00071C000E0E007F1FC0FF3FE07F1FC013127F9116>I<
+7F1FC0FF9FE07F1FC01C07000E07000E0E000E0E00070E00071C00071C00039C00039C00039800
+01B80001B80000F00000F00000F00000E00000E00000E00001C00079C0007BC0007F80003F0000
+3C0000131B7F9116>I<3FFFC07FFFC07FFFC0700780700F00701E00003C0000780001F00003E0
+000780000F00001E01C03C01C07801C0FFFFC0FFFFC0FFFFC012127F9116>I<001F80007F8000
+FF8001E00001C00001C00001C00001C00001C00001C00001C00001C00001C00003C0007F8000FF
+0000FF00007F800003C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001
+E00000FF80007F80001F8011207E9C16>I<E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0
+E0E0E0E0E0E0E0E0E0E0E00320779C16>I<7C0000FF0000FF800003C00001C00001C00001C000
+01C00001C00001C00001C00001C00001C00001E00000FF00007F80007F8000FF0001E00001C000
+01C00001C00001C00001C00001C00001C00001C00001C00003C000FF8000FF00007C000011207E
+9C16>I E /Ff 5 58 df<18F8181818181818FF08097D880F>49 D<7F00C1C0C0C000C0018007
+0018407F80FF800A097E880F>I<20803F003C00200020003F00218000C000C0C0C080C041803E
+000A0D7E880F>53 D<0F00118021806000C000DE00E180C0C0C0C0C0C060C021801E000A0D7E8C
+0F>I<1E006100C080C0C0C0C0C0C061C01EC000C00080618063003C000A0D7E880F>57
+D E /Fg 8 84 df<40E04003037D8209>46 D<0C001C00EC000C000C000C000C000C000C000C00
+0C000C000C000C000C000C000C000C00FFC00A137D9211>49 D<1F0060C06060F070F030603000
+700070006000C001C00180020004000810101020207FE0FFE00C137E9211>I<0FC03070703870
+3870380038003000E00FC0007000380018001C601CF01CF018E03860701FC00E137F9211>I<00
+3000003000007800007800007800009C00009C00011E00010E00010E0002070002070004038007
+FF800403800801C00801C01000E03800E0FE07FC16147F9319>65 D<FE000FE01E000F00170017
+001700170017001700138027001380270011C0470011C0470010E0870010E0870010E087001071
+070010710700103A0700103A0700101C0700101C0700381C0700FE083FE01B147F931E>77
+D<FFFC001C07001C03801C01C01C01C01C01C01C01C01C01C01C03801C07001FFC001C00001C00
+001C00001C00001C00001C00001C00001C0000FF800012147F9316>80 D<1F1030F06030C030C0
+10C010E00070007F003FC00FF000F000380018801880188018C030F0608FC00D147E9312>83
+D E /Fh 17 121 df<60F0F0600404798312>46 D<3F807FC070E0207000700FF03FF07870E070
+E070E07070F03FFE1F3E0F0E7E8D12>97 D<07F01FF8383870106000E000E000E000E000600070
+3838381FF007E00D0E7E8D12>99 D<00F800F8003800380038003807B81FF8387870386038E038
+E038E038E0386038707838781FFE0FBE0F147F9312>I<07801FE0387070706038E038FFF8FFF8
+E0006000703838381FF007C00D0E7E8D12>I<007E00FF01C70382038003807FFEFFFE03800380
+038003800380038003800380038003803FF83FF81014809312>I<06000F000F00060000000000
+0000FF00FF000700070007000700070007000700070007000700FFF0FFF00C157D9412>105
+D<F71C00FFBE0079E70079E70071C70071C70071C70071C70071C70071C70071C70071C700F9E7
+80F8E380110E808D12>109 D<F9E0FFF03E383C3838383838383838383838383838383838FE3E
+FE3E0F0E7F8D12>I<0F803FE038E07070E038E038E038E038E038F078707038E03FE00F800D0E
+7E8D12>I<FBE0FFF03C38381C380C380E380E380E380E380C381C3C383FF03BC0380038003800
+38003800FE00FE000F157F8D12>I<FCF8FDFC1F1C1E081E001C001C001C001C001C001C001C00
+FFC0FFC00E0E7E8D12>114 D<1FF03FF06070C070E0007F003FE00FF000786018E018F030FFE0
+DFC00D0E7E8D12>I<06000E000E000E007FF8FFF80E000E000E000E000E000E000E000E380E38
+0E3807F003C00D127F9112>I<F8F8F8F838383838383838383838383838383838383838781FFE
+0FBE0F0E7F8D12>I<FC7EFC7E38383C781C701C701C700EE00EE00EE006C007C007C003800F0E
+7F8D12>I<7C7C7C7C1CF00EE00FC007C00380078007C00EE01EF01C70FC7EFC7E0F0E7F8D12>
+120 D E /Fi 5 59 df<0400FC000C000C000C000C000C000C000C000C000C000C000C00FFC00A
+0E7D8D12>49 D<3FC04070E038E0184018003800300060018003080C081FF07FF0FFF00D0E7E8D
+12>I<03E00C1018183038203860004000C000C780D860E030E010C018C018C018401860186010
+202018400F800D157E9412>54 D<0F80304060204030C010C018C018C0184038603830580F9800
+1800100030E030E060C04041803E000D147E8D12>57 D<60F0F06004047D830A>I
+E /Fj 10 58 df<1F8060604020C030C030C030C030C030402060601F800C0B7E8A10>48
+D<0400FC000C000C000C000C000C000C000C000C00FFC00A0B7D8A10>I<1FC060606030003000
+3000600180061018107FE0FFE00C0B7E8A10>I<1F8020C0606060600060004000800F8000C000
+600030C030C030806060C01F800C107E8A10>I<01800180038005800D801980118021804180C1
+80FFF001800180018001800FF00C107E8A10>I<20403F802E002000200020002F803040206000
+3000300030C030806060C01F000C107E8A10>I<07C01820306060606000C000CF80D0C0E060C0
+30C030C0306030606030C00F800C107E8F10>I<40007FF07FE080408080008001000200040004
+000C000800180018001800180018000C117D8B10>I<0F8030C060606060606038C01D800F0033
+C060E0C070C030C030C02070C01F800C107E8F10>I<1F0030C06060C020C030C030C030607030
+B01F3000300060606060C021801E000C107E8A10>I E /Fk 8 106 df<0003FE0000000FFF8000
+003C01E00000F000780001C0001C00030000060006000003000C0000018018000000C018000000
+C030000000603000000060600000003060000000306000000030C000000018C000000018C00000
+0018C000000018C000000018C000000018C000000018C000000018C00000001860000000306000
+00003060000000303000000060300000006018000000C018000000C00C00000180060000030003
+0000060001C0001C0000F0007800003C01E000000FFF80000003FE000025277E9D2A>13
+D<000000040000000002000000000200000000010000000000800000000040FFFFFFFFF8FFFFFF
+FFF8000000004000000000800000000100000000020000000002000000000400250E7E902A>33
+D<020000080004000004000400000400080000020010000001002000000080FFFFFFFFF0FFFFFF
+FFF0200000008010000001000800000200040000040004000004000200000800240E7D902A>36
+D<007FF801FFF80780000E0000180000300000300000600000600000C00000C00000C00000FFFF
+F8FFFFF8C00000C00000C000006000006000003000003000001800000E000007800001FFF8007F
+F8151A7D961C>50 D<003C00E001C0018003800380038003800380038003800380038003800380
+03800380030007001C00F0001C0007000300038003800380038003800380038003800380038003
+8003800380018001C000E0003C0E297D9E15>102 D<F0001C0007000300038003800380038003
+8003800380038003800380038003800380018001C000E0003C00E001C001800380038003800380
+038003800380038003800380038003800380030007001C00F0000E297D9E15>I<008001800300
+030003000600060006000C000C000C00180018001800300030003000600060006000C000C00060
+00600060003000300030001800180018000C000C000C0006000600060003000300030001800080
+092A7C9E10>I<C000C0006000600060003000300030001800180018000C000C000C0006000600
+0600030003000300018001800300030003000600060006000C000C000C00180018001800300030
+003000600060006000C000C000092A7E9E10>I E /Fl 30 124 df<04081030206040C0C0C0C0
+C0C0C0C04060203010080406167D8F0B>40 D<804020301018080C0C0C0C0C0C0C0C0818103020
+408006167E8F0B>I<40E0602020408003077D8208>44 D<40E04003037D8208>46
+D<1E0061804080C0C0C0C0C0C0C0C0C0C0C0C0C0C0408061801E000A0D7E8C0E>48
+D<18F818181818181818181818FF080D7D8C0E>I<3E00418080C0C0C000C000C0018003000400
+084030407F80FF800A0D7E8C0E>I<3E0041806180018003001E00018000C000C0C0C0C0C04180
+3E000A0D7E8C0E>I<0300070007000B00130023006300C300FFC00300030003001FC00A0D7E8C
+0E>I<20803F003C00200020003F00218000C000C0C0C080C041803E000A0D7E8C0E>I<0F001180
+21806000C000DE00E180C0C0C0C0C0C060C021801E000A0D7E8C0E>I<40007FE07FC080808100
+02000200040004000C000C000C000C000C000B0E7E8D0E>I<1E0023006180618071003E003F00
+6380C0C0C0C0C0C061803F000A0D7E8C0E>I<1E006100C080C0C0C0C0C0C061C01EC000C00080
+618063003C000A0D7E8C0E>I<FFF000301C003006003003003001003001803001803001803001
+80300100300300300600301C00FFF000110E7E8D15>68 D<3F8006000600060006000600060006
+00060006000600C60084007800090E7D8D0E>74 D<3C00620003001F006300C300C320C3203FC0
+0B097E880E>97 D<1F0021804000C000C000C000400020801F0009097E880D>99
+D<1E0061004180FF80C000C000400020801F0009097E880D>101 D<060B181818FE1818181818
+18187E080E7F8D09>I<1DE022206300630022003C0060003F003F8040C0C0C0C0C061803F000B
+0E7E880E>I<207020000000F030303030303030FC060F7F8E08>105 D<F0303030303030303030
+303030FC060E7F8D08>108 D<F78038C030C030C030C030C030C030C0FDF00C097E8810>110
+D<F78038403060303030303030306038C03780300030003000FC000C0D7E8810>112
+D<FE33303030303030FC08097E880B>114 D<7C8484F03C0682C2BC07097E880B>I<08081838FE
+181818181919190E080D7F8C0B>I<F3C030C030C030C030C030C030C031C01EF00C097E8810>I<
+FFF00C017F850E>123 D E /Fm 4 12 df<F8000000FF80000007E0000000780000001C000000
+070000000380000000C0000000600000003000000018000000180000000C000000060000000600
+000003000000030000000180000001800000018000000180000000C0000000C0000000C0000000
+C0000000C0000000401A1B988132>8 D<00000040000000C0000000C0000000C0000000C00000
+00C0000001800000018000000180000001800000030000000300000006000000060000000C0000
+0018000000180000003000000060000000C0000003800000070000001C00000078000007E00000
+FF800000F80000001A1B989A32>I<40000000C0000000C0000000C0000000C0000000C0000000
+600000006000000060000000300000003000000018000000180000000C00000006000000060000
+00030000000180000000C000000060000000380000001C0000000700000003C0000000F8000000
+3FE0000007E01B1B809A32>I<000007E000003FE00000F8000003C00000070000001C00000038
+00000060000000C00000018000000300000006000000060000000C000000180000001800000030
+00000030000000600000006000000060000000C0000000C0000000C0000000C0000000C0000000
+400000001B1B808132>I E /Fn 34 123 df<07E01C38300C700E60066006E007E007E007E007
+E007E007E007E00760066006700E300C1C3807E010147E9215>48 D<01000F00F7000700070007
+00070007000700070007000700070007000700070007000700FFF80D137C9215>I<0FE0303840
+1C400EC00FE0074007000F000E001C0038007000C00101060108031FFE7FFEFFFE10137E9215>
+I<07E01838201C201C781E780E781E301E001C001C0038006007E00030001C001C000E000F000F
+600FF00FF00FE00F800E401C201C183007E0101C7E9215>I<000C00000C00001C00003C00003C
+00005C00009C00019C00011C00021C00061C00041C00081C00101C00301C00201C00401C00C01C
+00FFFFC0001C00001C00001C00001C00001C00001C00001C0001FFC0121B7F9215>I<300C3FF8
+3FF03FC020002000200020002000200023E02C38300C200C000E0006000700076007F007F007E0
+078006400E400C2018183007C0101C7E9215>I<00F0030C06040C0E181E301E300C7000700060
+00E3E0E430E818F00CF00EE006E007E007E007E007E007600760077006300E300C18180C3003E0
+101D7E9B15>I<4000007FFF807FFF007FFF004002008004008004008008000010000010000020
+0000400000400000C00000C0000180000180000380000380000380000380000780000780000780
+00078000078000078000030000111C7E9215>I<07E00C301008300C6006600660066006700638
+0C3C081F300FE003E007F01878303C600E6007C007C003C003C003C00360026006300C1C1807E0
+101D7E9B15>I<07C00C301818300C700C600EE006E006E007E007E007E0076007600F300F1817
+0C2707C700060006000E300C780C78187018203030C00F80101C7E9215>I<60F0F06004047C83
+0C>I<60F0F0701010101020204080040C7C830C>I<01E3000717000C0F00180F00380E00300E00
+700E00700E00E01C00E01C00E01C00E01C00E03880E03880E038806078803199001E0E0011127E
+9116>97 D<3F00070007000E000E000E000E001C001C001C001C0039E03A303C1838187018701C
+701C701CE038E038E038E030E070E060E0C061C023001E000E1D7E9C12>I<01F0030C0E0C1C1E
+383C301870007000E000E000E000E000E000E0046008601030601F800F127E9112>I<0007E000
+00E00000E00001C00001C00001C00001C000038000038000038000038001E7000717000C0F0018
+0F00380E00300E00700E00700E00E01C00E01C00E01C00E01C00E03880E03880E0388060788031
+99001E0E00131D7E9C16>I<01F007080C0818043808300870307FC0E000E000E000E000E000E0
+046008601030600F800E127E9113>I<0001E0000630000E78000CF0001C60001C00001C00001C
+00003C0000380000380003FFC000380000380000700000700000700000700000700000E00000E0
+0000E00000E00000E00001C00001C00001C00001C00001C000018000038000038000630000F300
+00F60000E4000078000015257E9C14>I<007180018B800307800607800E07000C07001C07001C
+0700380E00380E00380E00380E00381C00381C00381C00183C0008F80007380000380000380000
+7000607000F06000F0E000E180007E0000111A7F9114>I<0FC00001C00001C000038000038000
+0380000380000700000700000700000700000E3E000EC3000F03800E03801E03801C03801C0380
+1C0380380700380700380700380E00700E20700E20701C20701C40E00C80600700131D7E9C18>
+I<01C003C003C001800000000000000000000000001C00270047004700870087000E000E001C00
+1C001C003800388038807080710032001C000A1C7E9B0E>I<1F80038003800700070007000700
+0E000E000E000E001C001C001C001C0038003800380038007000700070007000E400E400E400E4
+0064003800091D7E9C0C>108 D<381F81F04E20C6184640E81C4680F01C8F00F01C8E00E01C0E
+00E01C0E00E01C1C01C0381C01C0381C01C0381C01C0703803807138038071380380E1380380E2
+700700643003003820127E9124>I<381F004E61804681C04701C08F01C08E01C00E01C00E01C0
+1C03801C03801C03801C0700380710380710380E10380E2070064030038014127E9119>I<00F8
+00030C000E06001C0300180300300300700380700380E00700E00700E00700E00E00E00E00E01C
+0060180060300030E0000F800011127E9114>I<07078009C86008D03008E03011C03011C03801
+C03801C0380380700380700380700380600700E00700C00701800783000E86000E78000E00000E
+00001C00001C00001C00001C00003C0000FF8000151A819115>I<01C206260C1E181E381C301C
+701C701CE038E038E038E038E070E070E07060F023E01CE000E000E001C001C001C001C003C01F
+F80F1A7E9113>I<383C4E424687470F8E1E8E0C0E000E001C001C001C001C0038003800380038
+007000300010127E9113>I<01F0060C04040C0E180C1C001F000FE00FF003F80038201C7018F0
+18F010803060601F800F127E9113>I<00C001C001C001C00380038003800380FFF00700070007
+000E000E000E000E001C001C001C001C00382038203840384018800F000C1A80990F>I<1C00C0
+2701C04701C04701C08703808703800E03800E03801C07001C07001C07001C0700180E20180E20
+180E201C1E200C264007C38013127E9118>I<07878008C84010F0C020F1E020E3C040E18000E0
+0000E00001C00001C00001C00001C000638080F38080F38100E5810084C60078780013127E9118
+>120 D<1C00C02701C04701C04701C08703808703800E03800E03801C07001C07001C07001C07
+00180E00180E00180E001C1E000C3C0007DC00001C00001800603800F03000F06000E0C0004180
+003E0000121A7E9114>I<038107C10FE6081C1008001000200040008001000200040008041004
+2C1877F843F081C010127E9113>I E /Fo 7 85 df<03FF000FFFC01E01E03800707000387000
+38700038E0001CE0001CE0001CE0001CE0001CE0001CFFFFFCFFFFFCE0001CE0001CE0001CE000
+1CE0001CE0001CE0001CE0001CE0001CE0001C16197D981C>65 D<7FFFF0FFFFF0E00000E00000
+E00000E00000E00000E00000E00000E00000E00000E00000E00000FFFFC0FFFFC0E00000E00000
+E00000E00000E00000E00000E00000E00000FFFFF07FFFF014197D981A>69
+D<7FFFF0FFFFF0E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000
+00FFFFC0FFFFC0E00000E00000E00000E00000E00000E00000E00000E00000E00000E000001419
+7D981A>I<E00000E0E00000E0F00001E0F00001E0F80003E0FC0007E0FC0007E0EE000EE0EE00
+0EE0E7001CE0E7001CE0E38038E0E1C070E0E1C070E0E0E0E0E0E0E0E0E0E071C0E0E071C0E0E0
+3B80E0E01F00E0E01F00E0E00E00E0E00E00E0E00000E0E00000E01B197D9821>77
+D<E0001CE0001CF0001CF8001CFC001CEE001CE7001CE3801CE1C01CE0E01CE0701CE0701CE038
+1CE01C1CE00E1CE0071CE0039CE001DCE000FCE0007CE0003CE0001CE0001CE0001CE0001C1619
+7D981C>I<03FFF0000FFFFC001E001E0038000700700003807000038070000380E00001C0E000
+01C0E00001C0E00001C0E00001C0E00001C0E00001C0E00001C0E00001C0E00001C0E00001C0E0
+0001C07000038070000380380007001F003E000FFFFC0001FFE0001A197F981C>I<FFFFFEFFFF
+FE0038000038000038000038000038000038000038000038000038000038000038000038000038
+000038000038000038000038000038000038000038000038000038000038001719809817>84
+D E /Fp 12 122 df<1F0020804040C060C060C060C060C060C060C06060C060C01F000B0D7E8C
+11>48 D<0800F8001800180018001800180018001800180018001800FF80090D7D8C11>I<1F80
+20E0707070300030006000E0018003100C101FE07FE0FFE00C0D7F8C11>I<0F8030E070707070
+70700070006000C00F8000E00070003800386038F038F038E07060E01F800D137F8C11>I<00C0
+00C001C002C006C004C008C018C010C020C040C0C0C0FFF800C000C000C000C000C007F80D137F
+8C11>I<60C07F807F0048004000400040005F00618040C000C000E000E0E0E0E0E0E0C041C063
+801E000B137E8C11>I<0780086010E020E060004000C000CF00D180E0C0C060C060C060C06040
+60604020C031800F000B137E9211>I<40007FF87FF04020802080400080010001000300020006
+00060006000E000E000E000E000E0004000D147E8D11>I<0F80106020206030603070307C603E
+C01F801FE031F060F0C038C018C018C018603030600F800D137F9211>I<1E00318060C040C0C0
+40C060C060C060C06060E031601E600060004000C0E080E18043003C000B137E8C11>I<0E3C13
+CE238E430C43000300030006000608C608E610CA2071C00F0D7F8C13>120
+D<38184C184C188C3098301830183030603060306030E011C00EC000C00080E180E30046003C00
+0D137F8C11>I E /Fq 29 122 df<FFC0FFC0FFC00A037D890F>45 D<3078F06005047C830D>I<
+060F0F06000000000000000000003078F06008127C910D>58 D<007FF000078000070000070000
+0700000700000E00000E00000E00000E00001C00001C00001C00001C0000380000380000380000
+380000700000700000700000700060E000E0E000C0C00081C0008380004700003C0000141D7B9B
+16>74 D<01FE0007F8003E000780002E000F00002E001700002E001700002E002700004E002E00
+004E004E00004E004E00004E008E00008E011C00008E011C00008E021C00008E021C0001070438
+000107043800010708380001071038000207107000020720700002072070000207407000040740
+E000040780E000040700E0000C0700E0001C0601E000FF861FFC00251C7D9B25>77
+D<01FFFC00003C070000380380003801C0003801C0003801C0007003C0007003C0007003C00070
+038000E0078000E0070000E00E0000E0380001FFE00001C0000001C0000001C000000380000003
+8000000380000003800000070000000700000007000000070000000F000000FFE000001A1C7D9B
+1C>80 D<000F8400304C00403C0080180100180300180300180600100600100600000700000700
+0003E00003FC0001FF00007F800007C00001C00001C00000C00000C02000C02000C06001806001
+80600300600200F00400CC180083E000161E7D9C17>83 D<03CC063C0C3C181C38383038703870
+38E070E070E070E070E0E2C0E2C0E261E462643C380F127B9115>97 D<3F00070007000E000E00
+0E000E001C001C001C001C0039C03E60383038307038703870387038E070E070E070E060E0E0C0
+C0C1C0618063003C000D1D7B9C13>I<01F007080C08181C3838300070007000E000E000E000E0
+00E000E008E010602030C01F000E127B9113>I<001F8000038000038000070000070000070000
+0700000E00000E00000E00000E0003DC00063C000C3C00181C00383800303800703800703800E0
+7000E07000E07000E07000E0E200C0E200C0E20061E4006264003C3800111D7B9C15>I<01E007
+100C1018083810701070607F80E000E000E000E000E000E0086010602030C01F000D127B9113>
+I<0003C0000670000C70001C60001C00001C0000380000380000380000380000380003FF800070
+0000700000700000700000700000E00000E00000E00000E00000E00001C00001C00001C00001C0
+0001C000038000038000038000030000030000070000C60000E60000CC00007800001425819C0D
+>I<00F3018F030F06070E0E0C0E1C0E1C0E381C381C381C381C383830383038187818F00F7000
+70007000E000E0C0C0E1C0C3007E00101A7D9113>I<0FC00001C00001C0000380000380000380
+000380000700000700000700000700000E78000E8C000F0E000E0E001C0E001C0E001C0E001C0E
+00381C00381C00381C00383800703880703880707080707100E03200601C00111D7D9C15>I<01
+800380010000000000000000000000000000001C002600470047008E008E000E001C001C001C00
+38003800710071007100720072003C00091C7C9B0D>I<1F800380038007000700070007000E00
+0E000E000E001C001C001C001C0038003800380038007000700070007000E400E400E400E40068
+003800091D7C9C0B>108 D<3C1E0780266318C04683A0E04703C0E08E0380E08E0380E00E0380
+E00E0380E01C0701C01C0701C01C0701C01C070380380E0388380E0388380E0708380E0710701C
+0320300C01C01D127C9122>I<3C3C002646004687004707008E07008E07000E07000E07001C0E
+001C0E001C0E001C1C00381C40381C40383840383880701900300E0012127C9117>I<01E00718
+0C0C180C380C300E700E700EE01CE01CE01CE018E038E030E06060C031801E000F127B9115>I<
+07870004D98008E0C008E0C011C0E011C0E001C0E001C0E00381C00381C00381C0038180070380
+0703000707000706000E8C000E70000E00000E00001C00001C00001C00001C00003C0000FF8000
+131A7F9115>I<3C3C26C2468747078E068E000E000E001C001C001C001C003800380038003800
+7000300010127C9112>114 D<01F006080C080C1C18181C001F001FC00FF007F0007800386030
+E030C030806060C01F000E127D9111>I<00C001C001C001C00380038003800380FFE007000700
+07000E000E000E000E001C001C001C001C00384038403840388019000E000B1A7D990E>I<1E03
+00270700470700470700870E00870E000E0E000E0E001C1C001C1C001C1C001C1C003838803838
+801838801839001C5900078E0011127C9116>I<1E06270E470E4706870287020E020E021C041C
+041C041C0818083808181018200C4007800F127C9113>I<1E0183270387470387470383870701
+8707010E07010E07011C0E021C0E021C0E021C0E04180C04181C04181C081C1C100C263007C3C0
+18127C911C>I<070E0019910010E38020E38041C30041C00001C00001C0000380000380000380
+00038000070200670200E70400CB04008B080070F00011127D9113>I<1E03270747074707870E
+870E0E0E0E0E1C1C1C1C1C1C1C1C38383838183818381C7007F00070007000E0E0C0E1C0818047
+003C00101A7C9114>I E /Fr 1 66 df<00C00000C00000C00001600001600002300002300002
+3000041800041800080C000FFC00080C00100600100600300700FC1FC012117F9016>65
+D E /Fs 75 125 df<00FC000782000E07001C07001C02001C00001C00001C00001C0000FFFF00
+1C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF1FE0
+1317809614>12 D<00FF000707000E07001C07001C07001C07001C07001C07001C0700FFFF001C
+07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FFBFE013
+17809614>I<00FC7E000703C1000E0783801C0703801C0701001C0700001C0700001C0700001C
+070000FFFFFF801C0703801C0703801C0703801C0703801C0703801C0703801C0703801C070380
+1C0703801C0703801C0703801C070380FF1FCFF01C1780961D>I<01C0000320000610000E1000
+0E10000E10000E20000E40000E80000780FE0700380700200B802013804031C04061E08060E100
+E07100E03A00E01C02700E0238370C0FC1F817177F961B>38 D<60F0F070101020204040040A7D
+960A>I<0102040C1818303070606060E0E0E0E0E0E0E0E0E0E060606070303018180C04020108
+227D980E>I<8040203018180C0C0E060606070707070707070707070606060E0C0C1818302040
+8008227E980E>I<60F0F070101020204040040A7D830A>44 D<FF80FF80090280870C>I<60F0F0
+6004047D830A>I<07C018303018701C600C600CE00EE00EE00EE00EE00EE00EE00EE00EE00E60
+0C600C701C30181C7007C00F157F9412>48 D<03000700FF000700070007000700070007000700
+07000700070007000700070007000700070007007FF00C157E9412>I<0F8030E040708030C038
+E0384038003800700070006000C00180030006000C08080810183FF07FF0FFF00D157E9412>I<
+0FE030306018701C701C001C00180038006007E000300018000C000E000EE00EE00EC00C401830
+300FE00F157F9412>I<00300030007000F001F001700270047008701870107020704070C070FF
+FE0070007000700070007003FE0F157F9412>I<20303FE03FC0240020002000200020002F8030
+E020700030003800384038E038E0388030406020C01F000D157E9412>I<01F00608080C181C30
+1C70006000E000E3E0EC30F018F00CE00EE00EE00E600E600E300C3018183007C00F157F9412>
+I<40007FFE7FFC7FF8C008801080200040008000800100010003000200060006000E000E000E00
+0E000E0004000F167E9512>I<07E018302018600C600C700C78183E101F600FC00FF018F8607C
+601EC00EC006C006C004600C38300FE00F157F9412>I<07C0183030186018E00CE00CE00EE00E
+E00E601E301E186E0F8E000E000C001C70187018603020C01F800F157F9412>I<60F0F0600000
+0000000060F0F060040E7D8D0A>I<1F8060E08070E070E070407000E001C00180030002000200
+020002000200000000000000000006000F000F0006000C177E9611>63 D<00FC000303000C00C0
+10002020781020C410418208438388830384870384870384870384870384870384830384438384
+41838820C5882078F01000000C001C0300F000FF0016177E961B>I<0010000038000038000038
+00005C00005C00005C00008E00008E00008E0001070001070003078002038002038007FFC00401
+C00401C00800E00800E01800E03800F0FE03FE17177F961A>I<FFFE001C03801C00E01C00601C
+00701C00701C00701C00701C00E01C01C01FFF801FFFC01C00E01C00701C00301C00381C00381C
+00381C00381C00701C00E01C01C0FFFF0015177F9619>I<00FC100383300E00B01C0070380030
+300030700010600010E00010E00000E00000E00000E00000E00000E00010600010700010300020
+3800201C00400E008003830000FC0014177E9619>I<FFFF001C01C01C00E01C00301C00381C00
+181C001C1C000C1C000E1C000E1C000E1C000E1C000E1C000E1C000E1C000C1C001C1C001C1C00
+381C00301C00601C01C0FFFF0017177F961B>I<FFFFE01C00E01C00601C00201C00101C00101C
+00101C04001C04001C04001C0C001FFC001C0C001C04001C04081C04081C00081C00181C00101C
+00101C00301C00F0FFFFF015177F9618>I<FFFFE01C00E01C00601C00201C00101C00101C0010
+1C04001C04001C04001C0C001FFC001C0C001C04001C04001C04001C00001C00001C00001C0000
+1C00001C0000FFC00014177F9617>I<007E080381980600580C00381800183000187000087000
+08E00008E00000E00000E00000E00000E003FEE000387000387000383000381800380C00380600
+380380D8007F0817177E961C>I<FF83FE1C00701C00701C00701C00701C00701C00701C00701C
+00701C00701C00701FFFF01C00701C00701C00701C00701C00701C00701C00701C00701C00701C
+0070FF83FE17177F961A>I<FFE00E000E000E000E000E000E000E000E000E000E000E000E000E
+000E000E000E000E000E000E000E000E00FFE00B177F960D>I<0FFC00E000E000E000E000E000
+E000E000E000E000E000E000E000E000E000E000E000E0E0E0E0E0C1C061801F000E177E9612>
+I<FF80FE1C00781C00601C00401C00801C01001C06001C08001C10001C38001C78001C9C001D0E
+001E0E001C07001C03801C01C01C01C01C00E01C00701C00781C007CFF80FF18177F961B>I<FF
+C0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C
+00001C00201C00201C00201C00601C00601C00401C00C01C03C0FFFFC013177F9616>I<FE0003
+F81E0003C0170005C0170005C0170005C0138009C0138009C011C011C011C011C011C011C010E0
+21C010E021C0107041C0107041C0107041C0103881C0103881C0101D01C0101D01C0100E01C010
+0E01C0380E01C0FE040FF81D177F9620>I<FC00FE1E00381F001017001013801011C01011C010
+10E010107010103810103810101C10100E10100F101007101003901001D01001D01000F0100070
+100030380030FE001017177F961A>I<00FC000303000E01C01C00E03800703000307000386000
+18E0001CE0001CE0001CE0001CE0001CE0001CE0001C7000387000383000303800701C00E00E01
+C003030000FC0016177E961B>I<FFFE001C03801C00C01C00601C00701C00701C00701C00701C
+00601C00C01C03801FFE001C00001C00001C00001C00001C00001C00001C00001C00001C00001C
+0000FF800014177F9618>I<FFFC001C03801C00C01C00E01C00701C00701C00701C00701C00E0
+1C00C01C03801FFE001C07801C01C01C00E01C00E01C00E01C00E01C00E01C00E11C00E11C0072
+FF803C18177F961A>82 D<0FC4302C601C400CC004C004C004E00070007F003FE00FF801FC001C
+000E0006800680068006C004E008D81087E00F177E9614>I<7FFFF86038184038084038088038
+048038048038040038000038000038000038000038000038000038000038000038000038000038
+0000380000380000380000380007FFC016177F9619>I<FF80FE1C00381C00101C00101C00101C
+00101C00101C00101C00101C00101C00101C00101C00101C00101C00101C00101C00101C00100E
+0020060020030040018180007E0017177F961A>I<FF07FC3F803C01E00E001C00E004001C00E0
+04001C017004000E017008000E017008000E023808000702381000070238100007041C10000384
+1C200003841C200003880E200001C80E400001C80E400001D80F400000F007800000F007800000
+F007800000600300000060030000006003000021177F9624>87 D<FF83FC1F01E00E0080070080
+07810003820001C20001E40000E800007800007800003800007C00005E00008E00018700010780
+0203800601C00401E00C00E01C00F0FF03FE17177F961A>I<FFC03F801E001C000F0008000700
+1000078030000380200001C0400001E0400000E0800000F1800000710000003A0000003E000000
+1C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C000000FF8000
+191780961A>I<202040408080E0F0F060040A7D960A>96 D<1FC0386038301038003803F81E38
+30387038E039E039E07970FF1F1E100E7F8D12>I<FC00001C00001C00001C00001C00001C0000
+1C00001C00001C00001CF8001F06001C03001C03801C01801C01C01C01C01C01C01C01C01C0180
+1C03801C03001B0E0010F8001217809614>I<07F01838303870106000E000E000E000E0006000
+70083008183007C00D0E7F8D10>I<007E00000E00000E00000E00000E00000E00000E00000E00
+000E0007CE001C3E00300E00700E00600E00E00E00E00E00E00E00E00E00600E00700E00301E00
+182E0007CFC012177F9614>I<0FC0186030307038E018FFF8E000E000E0006000700830101830
+07C00D0E7F8D10>I<03E006700E701C201C001C001C001C001C00FF801C001C001C001C001C00
+1C001C001C001C001C001C001C00FF800C1780960B>I<0F9E18E33060707070707070306018C0
+2F80200060003FE03FF83FFC600EC006C006C006600C38380FE010157F8D12>I<FC00001C0000
+1C00001C00001C00001C00001C00001C00001C00001C7C001D8E001E07001C07001C07001C0700
+1C07001C07001C07001C07001C07001C07001C0700FF9FE01317809614>I<183C3C1800000000
+007C1C1C1C1C1C1C1C1C1C1C1C1CFF081780960A>I<0300078007800300000000000000000000
+001F800380038003800380038003800380038003800380038003800380038003804380E300E700
+7C00091D82960B>I<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C3F80
+1C1C001C18001C20001C40001CC0001FE0001CF0001C70001C78001C3C001C1E001C1E00FF3FC0
+1217809613>I<FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00
+1C001C001C001C001C001C00FF80091780960A>I<FC7C1F001D8E63801E0781C01C0701C01C07
+01C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C0FF9FE7F81D
+0E808D1E>I<FC7C001D8E001E07001C07001C07001C07001C07001C07001C07001C07001C0700
+1C07001C0700FF9FE0130E808D14>I<07C018303018600C600CE00EE00EE00EE00EE00E701C30
+18183007C00F0E7F8D12>I<FCF8001F0E001C03001C03801C01801C01C01C01C01C01C01C01C0
+1C01801C03801C07001F0E001CF8001C00001C00001C00001C00001C0000FF80001214808D14>
+I<07C2001C2600381E00700E00600E00E00E00E00E00E00E00E00E00600E00700E00301E001C2E
+0007CE00000E00000E00000E00000E00000E00007FC012147F8D13>I<FCF01D381E381C101C00
+1C001C001C001C001C001C001C001C00FF800D0E808D0E>I<1F4060C0C040C040E000FF007F80
+1FC001E080608060C060E0C09F000B0E7F8D0E>I<080008000800180018003800FF8038003800
+3800380038003800380038403840384038401C800F000A147F930E>I<FC3F001C07001C07001C
+07001C07001C07001C07001C07001C07001C07001C07001C0F000E170003E7E0130E808D14>I<
+FE1F3C0E3C0C1C081C080E100E100720072003C003C003C001800180100E7F8D13>I<FCFE7C38
+38383838101C3C201C3C201C4C200E4E400E4E400E864007878007878007038003030003030016
+0E7F8D19>I<FE3F3C181C100E20074007C0038001C002E004F008701838383CFC7F100E7F8D13>
+I<FE1F3C0E3C0C1C081C080E100E100720072003C003C003C00180018001000100E200E200A400
+780010147F8D13>I<FFF0C0E080E081C08380878007000E001E081C08381870107030FFF00D0E
+7F8D10>I<FFFF801101808812>I<FFFFFFFFC02201808823>I E /Ft 14
+122 df<70F8F8F87000000070F8F8F870050D7D8C0B>58 D<001C0000001C0000003E0000003E
+0000007F0000006F000000EF800000C7800000C780000183C0000183C0000301E0000301E00007
+FFF00007FFF0000E00F8000C0078000C007800FF01FF80FF01FF8019147F931C>65
+D<FFC0FF00FFC0FF001E0070001E00C0001E0380001E0700001E0E00001E1C00001E3C00001EFE
+00001FDE00001F8F00001E0780001E03C0001E01E0001E01F0001E00F0001E007800FFC0FF80FF
+C0FF8019147E931D>75 D<1FE078707838783C303C01FC1F3C783CF03CF03CF03C785F3F8F100D
+7F8C12>97 D<FC0000FC00003C00003C00003C00003C00003C00003DF8003F0E003C07003C0380
+3C03C03C03C03C03C03C03C03C03C03C03803C07003E0E0031F80012147F9315>I<07F01C3C38
+3C703CF018F000F000F000F0007000380C1C1807F00E0D7F8C11>I<003F00003F00000F00000F
+00000F00000F00000F0007EF001C1F00380F00700F00F00F00F00F00F00F00F00F00F00F00700F
+00380F001C3FC007EFC012147F9315>I<0FC01C3038387018F01CF01CFFFCF000F0007000380C
+1C1807F00E0D7F8C11>I<07E01C38781E700EF00FF00FF00FF00FF00F700E781E3C3C07E0100D
+7F8C13>111 D<F8E0F9783A783A783C303C003C003C003C003C003C00FF00FF000D0D7F8C10>
+114 D<1FE060E0C060C060FE007FC03FE01FF00070C030C030F060DF800C0D7F8C0F>I<0C000C
+000C001C001C003FC0FFC03C003C003C003C003C003C003C603C603C601C400F800B127F910F>
+I<FE7F1FFE7F1F3C1C0C3C3E1C1E3E181E3F180F67300F67B00FE7F007C3E007C3E00381C00381
+C0180D7F8C1B>119 D<FE0F80FE0F803E06001E0C001F0C000F18000F980007B00007F00003E0
+0003E00001E00001C00001C000618000F38000F30000E600007C000011137F8C14>121
+D E /Fu 81 125 df<007E1F0001C1B1800303E3C00703C3C00E03C1800E01C0000E01C0000E01
+C0000E01C0000E01C0000E01C000FFFFFC000E01C0000E01C0000E01C0000E01C0000E01C0000E
+01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C000
+0E01C0007F87FC001A1D809C18>11 D<007E0001C1800301800703C00E03C00E01800E00000E00
+000E00000E00000E0000FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01
+C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07F87F8151D809C17>I<007FC001C1C003
+03C00703C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFFFC00E01C00E01C00E01C00E
+01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07F
+CFF8151D809C17>I<1C1C3C3870C0800607779C15>19 D<C0C061803F000C000A047B9915>I<01
+800E003800C00009047F8F0C>32 D<0F0000C0188000C030600380703807006027FB00E0100600
+E0100C00E0100C00E0101800E0101800E0103000E0106000602060007020C00030418000188180
+000F0303C00006062000060C10000C1C08001818080018380400303804006038040060380400C0
+380400C03804018038040300180803001C0806000C100C000620040003C01E217E9E23>37
+D<60F0F8680808081010204080050C7C9C0C>39 D<004000800100020006000C000C0018001800
+300030007000600060006000E000E000E000E000E000E000E000E000E000E000E000E000600060
+006000700030003000180018000C000C00060002000100008000400A2A7D9E10>I<8000400020
+00100018000C000C000600060003000300038001800180018001C001C001C001C001C001C001C0
+01C001C001C001C001C0018001800180038003000300060006000C000C00180010002000400080
+000A2A7E9E10>I<60F0F0701010101020204080040C7C830C>44 D<FFE0FFE00B0280890E>I<60
+F0F06004047C830C>I<00010003000600060006000C000C000C00180018001800300030003000
+60006000C000C000C0018001800180030003000300060006000C000C000C001800180018003000
+30003000600060006000C000C00010297E9E15>I<03C00C301818300C300C700E60066006E007
+E007E007E007E007E007E007E007E007E007E007E007E00760066006700E300C300C18180C3007
+E0101D7E9B15>I<030007003F00C7000700070007000700070007000700070007000700070007
+0007000700070007000700070007000700070007000F80FFF80D1C7C9B15>I<07C01830201C40
+0C400EF00FF80FF807F8077007000F000E000E001C001C00380070006000C00180030006010C01
+180110023FFE7FFEFFFE101C7E9B15>I<07E01830201C201C781E780E781E381E001C001C0018
+0030006007E00030001C001C000E000F000F700FF80FF80FF80FF00E401C201C183007E0101D7E
+9B15>I<000C00000C00001C00003C00003C00005C0000DC00009C00011C00031C00021C00041C
+000C1C00081C00101C00301C00201C00401C00C01C00FFFFC0001C00001C00001C00001C00001C
+00001C00001C0001FFC0121C7F9B15>I<03E00C301008200C20066006600660067006780C3E08
+3FB01FE007F007F818FC307E601E600FC007C003C003C003C00360026004300C1C1007E0101D7E
+9B15>56 D<03C00C301818300C700C600EE006E006E007E007E007E007E0076007700F300F1817
+0C2707C700060006000E300C780C78187010203030C00F80101D7E9B15>I<60F0F06000000000
+00000000000060F0F06004127C910C>I<7FFFFFC0FFFFFFE00000000000000000000000000000
+000000000000000000000000000000000000FFFFFFE07FFFFFC01B0C7E8F20>61
+D<0FE03038401CE00EF00EF00EF00E000C001C0030006000C00080018001000100010001000100
+01000000000000000000000003000780078003000F1D7E9C14>63 D<003F800000C06000030018
+00040004000800020010000100201F00802070808040E0404040C0384041C03840818038208380
+3820838038208380382083803820838038208180382041C0382040C0384040E078402070988020
+1F0F00100000000800000004000000030001E000C01F80003FF0001B1D7E9C20>I<0006000000
+06000000060000000F0000000F0000000F00000017800000178000001780000023C0000023C000
+0023C0000041E0000041E0000041E0000080F0000080F0000180F8000100780001FFF80003007C
+0002003C0002003C0006003E0004001E0004001E000C001F001E001F00FF80FFF01C1D7F9C1F>
+I<FFFFC00F00F00F00380F003C0F001C0F001E0F001E0F001E0F001E0F001C0F003C0F00780F01
+F00FFFE00F00780F003C0F001E0F000E0F000F0F000F0F000F0F000F0F000F0F001E0F001E0F00
+3C0F0078FFFFE0181C7E9B1D>I<001F808000E0618001801980070007800E0003801C0003801C
+00018038000180780000807800008070000080F0000000F0000000F0000000F0000000F0000000
+F0000000F0000000F0000000700000807800008078000080380000801C0001001C0001000E0002
+00070004000180080000E03000001FC000191E7E9C1E>I<FFFFC0000F00F0000F003C000F000E
+000F0007000F0007000F0003800F0003C00F0001C00F0001C00F0001E00F0001E00F0001E00F00
+01E00F0001E00F0001E00F0001E00F0001E00F0001C00F0001C00F0003C00F0003800F0007800F
+0007000F000E000F001C000F007000FFFFC0001B1C7E9B20>I<FFFFFC0F003C0F000C0F00040F
+00040F00060F00020F00020F02020F02000F02000F02000F06000FFE000F06000F02000F02000F
+02000F02010F00010F00020F00020F00020F00060F00060F000C0F003CFFFFFC181C7E9B1C>I<
+FFFFF80F00780F00180F00080F00080F000C0F00040F00040F02040F02000F02000F02000F0600
+0FFE000F06000F02000F02000F02000F02000F00000F00000F00000F00000F00000F00000F0000
+0F8000FFF800161C7E9B1B>I<001F808000E0618001801980070007800E0003801C0003801C00
+018038000180780000807800008070000080F0000000F0000000F0000000F0000000F0000000F0
+000000F000FFF0F0000F80700007807800078078000780380007801C0007801C0007800E000780
+07000B800180118000E06080001F80001C1E7E9C21>I<FFF3FFC00F003C000F003C000F003C00
+0F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000FFFFC
+000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F00
+3C000F003C000F003C000F003C00FFF3FFC01A1C7E9B1F>I<FFF00F000F000F000F000F000F00
+0F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F
+00FFF00C1C7F9B0F>I<1FFF00F800780078007800780078007800780078007800780078007800
+780078007800780078007800787078F878F878F878F0F040E021C01F00101D7F9B15>I<FFF03F
+E00F000F000F000C000F0008000F0010000F0020000F0040000F0080000F0100000F0200000F04
+00000F0E00000F1F00000F2F00000F2780000F4780000F83C0000F01E0000F01E0000F00F0000F
+00F8000F0078000F003C000F003C000F001E000F001F000F001F80FFF07FF01C1C7E9B20>I<FF
+F8000F80000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F
+00000F00000F00000F00000F00000F00080F00080F00080F00180F00180F00100F00300F00700F
+01F0FFFFF0151C7E9B1A>I<FF8000FF800F8000F8000F8000F8000BC00178000BC00178000BC0
+01780009E002780009E002780008F004780008F004780008F00478000878087800087808780008
+78087800083C107800083C107800083C107800081E207800081E207800081E207800080F407800
+080F40780008078078000807807800080780780008030078001C03007800FF8307FF80211C7E9B
+26>I<FF007FC00F800E000F8004000BC0040009E0040009E0040008F0040008F8040008780400
+083C0400083C0400081E0400080F0400080F0400080784000807C4000803C4000801E4000801E4
+000800F40008007C0008007C0008003C0008003C0008001C0008000C001C000C00FF8004001A1C
+7E9B1F>I<003F800000E0E0000380380007001C000E000E001C0007003C000780380003807800
+03C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F0
+0001E0700001C0780003C0780003C0380003803C0007801C0007000E000E0007001C0003803800
+00E0E000003F80001B1E7E9C20>I<FFFF800F00E00F00780F003C0F001C0F001E0F001E0F001E
+0F001E0F001E0F001C0F003C0F00780F00E00FFF800F00000F00000F00000F00000F00000F0000
+0F00000F00000F00000F00000F00000F0000FFF000171C7E9B1C>I<003F800000E0E000038038
+0007001C000E000E001C0007003C00078038000380780003C0780003C0700001C0F00001E0F000
+01E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0700001C0780003C0780003C038
+0003803C0E07801C1107000E208E000720DC0003A0F80000F0E020003FE0200000602000007060
+000078E000003FC000003FC000001F8000000F001B257E9C20>I<FFFF00000F01E0000F007800
+0F003C000F001C000F001E000F001E000F001E000F001E000F001C000F003C000F0078000F01E0
+000FFF00000F03C0000F00E0000F00F0000F0078000F0078000F0078000F0078000F0078000F00
+78000F0078100F0078100F0038100F003C20FFF01C20000007C01C1D7E9B1F>I<07E0801C1980
+300580700380600180E00180E00080E00080E00080F00000F800007C00007FC0003FF8001FFE00
+07FF0000FF80000F800007C00003C00001C08001C08001C08001C0C00180C00180E00300D00200
+CC0C0083F800121E7E9C17>I<7FFFFFC0700F01C0600F00C0400F0040400F0040C00F0020800F
+0020800F0020800F0020000F0000000F0000000F0000000F0000000F0000000F0000000F000000
+0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000
+001F800003FFFC001B1C7F9B1E>I<FFF07FC00F000E000F0004000F0004000F0004000F000400
+0F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004
+000F0004000F0004000F0004000F0004000F0004000F0004000700080007800800038010000180
+100000C020000070C000001F00001A1D7E9B1F>I<FFE00FF01F0003C00F0001800F0001000F80
+0300078002000780020003C0040003C0040003C0040001E0080001E0080001F0080000F0100000
+F0100000F830000078200000782000003C4000003C4000003C4000001E8000001E8000001F8000
+000F0000000F00000006000000060000000600001C1D7F9B1F>I<FFE0FFE0FF1F001F003C1E00
+1E00180F001F00100F001F00100F001F001007801F00200780278020078027802003C027804003
+C043C04003C043C04003E043C04001E081E08001E081E08001E081E08000F100F10000F100F100
+00F100F100007900FA00007A007A00007A007A00003E007C00003C003C00003C003C00003C003C
+00001800180000180018000018001800281D7F9B2B>I<7FF0FFC00FC03E000780180003C01800
+03E0100001E0200001F0600000F0400000788000007D8000003D0000001E0000001F0000000F00
+00000F8000000F80000013C0000023E0000021E0000041F00000C0F8000080780001007C000300
+3C0002001E0006001F001F003F80FFC0FFF01C1C7F9B1F>I<7FFFF07C01F07001E06003C06003
+C0400780400F80400F00401E00001E00003C00007C0000780000F00000F00001E00003E00003C0
+100780100780100F00101F00301E00203C00203C00607800E0F803E0FFFFE0141C7E9B19>90
+D<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
+C0FEFE07297C9E0C>I<FEFE060606060606060606060606060606060606060606060606060606
+06060606060606060606FEFE0729809E0C>93 D<0810204040808080B0F87830050C7D9C0C>96
+D<1FC000307000783800781C00301C00001C00001C0001FC000F1C00381C00701C00601C00E01C
+40E01C40E01C40603C40304E801F870012127E9115>I<FC00001C00001C00001C00001C00001C
+00001C00001C00001C00001C00001C00001C7C001D86001E03001C01801C01C01C00C01C00E01C
+00E01C00E01C00E01C00E01C00E01C00C01C01C01C01801E030019060010F800131D7F9C17>I<
+07E00C301878307870306000E000E000E000E000E000E00060007004300418080C3007C00E127E
+9112>I<003F0000070000070000070000070000070000070000070000070000070000070003E7
+000C1700180F00300700700700600700E00700E00700E00700E00700E00700E007006007007007
+00300700180F000C370007C7E0131D7E9C17>I<03E00C301818300C700E6006E006FFFEE000E0
+00E000E00060007002300218040C1803E00F127F9112>I<00F8018C071E061E0E0C0E000E000E
+000E000E000E00FFE00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00
+0E007FE00F1D809C0D>I<00038003C4C00C38C01C3880181800381C00381C00381C00381C0018
+18001C38000C300013C0001000003000001800001FF8001FFF001FFF803003806001C0C000C0C0
+00C0C000C06001803003001C0E0007F800121C7F9215>I<FC00001C00001C00001C00001C0000
+1C00001C00001C00001C00001C00001C00001C7C001C87001D03001E03801C03801C03801C0380
+1C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380FF9FF0141D7F9C17>
+I<18003C003C0018000000000000000000000000000000FC001C001C001C001C001C001C001C00
+1C001C001C001C001C001C001C001C001C00FF80091D7F9C0C>I<00C001E001E000C000000000
+000000000000000000000FE000E000E000E000E000E000E000E000E000E000E000E000E000E000
+E000E000E000E000E000E000E060E0F0C0F1C061803E000B25839C0D>I<FC00001C00001C0000
+1C00001C00001C00001C00001C00001C00001C00001C00001C3FC01C0F001C0C001C08001C1000
+1C20001C40001CE0001DE0001E70001C78001C38001C3C001C1C001C0E001C0F001C0F80FF9FE0
+131D7F9C16>I<FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00
+1C001C001C001C001C001C001C001C001C001C001C001C00FF80091D7F9C0C>I<FC7E07E0001C
+838838001D019018001E01E01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C00
+1C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C
+00FF8FF8FF8021127F9124>I<FC7C001C87001D03001E03801C03801C03801C03801C03801C03
+801C03801C03801C03801C03801C03801C03801C03801C0380FF9FF014127F9117>I<03F0000E
+1C00180600300300700380600180E001C0E001C0E001C0E001C0E001C0E001C060018070038030
+03001806000E1C0003F00012127F9115>I<FC7C001D86001E03001C01801C01C01C00C01C00E0
+1C00E01C00E01C00E01C00E01C00E01C01C01C01C01C01801E03001D06001CF8001C00001C0000
+1C00001C00001C00001C00001C0000FF8000131A7F9117>I<03C1000C3300180B00300F007007
+00700700E00700E00700E00700E00700E00700E00700600700700700300F00180F000C370007C7
+00000700000700000700000700000700000700000700003FE0131A7E9116>I<FCE01D301E781E
+781C301C001C001C001C001C001C001C001C001C001C001C001C00FFC00D127F9110>I<1F9030
+704030C010C010E010F8007F803FE00FF000F880388018C018C018E010D0608FC00D127F9110>
+I<04000400040004000C000C001C003C00FFE01C001C001C001C001C001C001C001C001C001C10
+1C101C101C101C100C100E2003C00C1A7F9910>I<FC1F801C03801C03801C03801C03801C0380
+1C03801C03801C03801C03801C03801C03801C03801C03801C07800C07800E1B8003E3F014127F
+9117>I<FF07E03C03801C01001C01000E02000E020007040007040007040003880003880003D8
+0001D00001D00000E00000E00000E00000400013127F9116>I<FF3FCFE03C0F03801C0701801C
+0701001C0B01000E0B82000E0B82000E1182000711C4000711C4000720C40003A0E80003A0E800
+03C0680001C0700001C0700001803000008020001B127F911E>I<7F8FF00F03800F0300070200
+03840001C80001D80000F00000700000780000F800009C00010E00020E000607000403801E07C0
+FF0FF81512809116>I<FF07E03C03801C01001C01000E02000E02000704000704000704000388
+0003880003D80001D00001D00000E00000E00000E000004000004000008000008000F08000F100
+00F300006600003C0000131A7F9116>I<7FFC70386038407040F040E041C003C0038007000F04
+0E041C043C0C380870087038FFF80E127F9112>I<FFFFF01401808B15>I<FFFFFFFFFF80290180
+8B2A>I E /Fv 53 122 df<003FC00001F0300003C0380007C07C000F807C000F807C000F8038
+000F8000000F8000000F8000000F800000FFFFFC00FFFFFC000F807C000F807C000F807C000F80
+7C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F
+807C007FE1FF807FE1FF80191D809C1B>12 D<003FFC0001F07C0003C07C0007C07C000F807C00
+0F807C000F807C000F807C000F807C000F807C000F807C00FFFFFC00FFFFFC000F807C000F807C
+000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F80
+7C000F807C000F807C007FF3FF807FF3FF80191D809C1B>I<78FCFCFEFE7A0202040408083040
+070E7D9C0D>39 D<0020004001800380030006000E001C001C003C0038003800780078007800F8
+00F000F000F000F000F000F000F000F000F000F800780078007800380038003C001C001C000E00
+0600030003800180004000200B297C9E13>I<800040003000380018000C000E00070007000780
+0380038003C003C003C003E001E001E001E001E001E001E001E001E001E003E003C003C003C003
+8003800780070007000E000C00180038003000400080000B297D9E13>I<78FCFCFEFE7A020204
+0408083040070E7D850D>44 D<000180000380000380000700000700000700000E00000E00001C
+00001C00001C0000380000380000380000700000700000E00000E00000E00001C00001C00001C0
+000380000380000380000700000700000E00000E00000E00001C00001C00001C00003800003800
+00700000700000700000E00000E00000C0000011297D9E18>47 D<03F8000F1E001C07003C0780
+3803807803C07803C07803C0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0
+F803E0F803E0F803E07803C07803C03803803C07801C07000F1E0003F800131B7E9A18>I<78FC
+FCFCFC7800000000000078FCFCFCFC7806127D910D>58 D<0FF0303C601EF01FF81FF81F701F00
+3E003C007000E001C00180018003000300030003000300000000000000000007800FC00FC00FC0
+0FC00780101D7D9C17>63 D<00038000000380000007C0000007C0000007C000000FE000000FE0
+00001FF000001BF000001BF0000031F8000031F8000061FC000060FC0000E0FE0000C07E0000C0
+7E0001803F0001FFFF0003FFFF8003001F8003001F8006000FC006000FC00E000FE00C0007E0FF
+C07FFEFFC07FFE1F1C7E9B24>65 D<FFFFF800FFFFFF000FC01F800FC00FC00FC007C00FC007E0
+0FC007E00FC007E00FC007E00FC007E00FC007C00FC00F800FC03F000FFFFE000FC00F800FC007
+C00FC007E00FC003E00FC003F00FC003F00FC003F00FC003F00FC003F00FC007E00FC007E00FC0
+1FC0FFFFFF00FFFFFC001C1C7E9B22>I<001FE02000FFF8E003F80FE007C003E00F8001E01F00
+00E03E0000E03E0000607E0000607C000060FC000000FC000000FC000000FC000000FC000000FC
+000000FC000000FC0000007C0000607E0000603E0000603E0000C01F0000C00F80018007C00300
+03F80E0000FFFC00001FE0001B1C7D9B22>I<FFFFF800FFFFFF000FC01FC00FC007E00FC001F0
+0FC001F80FC000F80FC000FC0FC0007C0FC0007C0FC0007E0FC0007E0FC0007E0FC0007E0FC000
+7E0FC0007E0FC0007E0FC0007E0FC0007C0FC0007C0FC0007C0FC000F80FC000F80FC001F00FC0
+07E00FC01FC0FFFFFF00FFFFF8001F1C7E9B25>I<FFFFFF00FFFFFF000FC01F000FC007000FC0
+03000FC003800FC003800FC181800FC181800FC181800FC180000FC380000FFF80000FFF80000F
+C380000FC180000FC180000FC180600FC180600FC000E00FC000C00FC000C00FC001C00FC001C0
+0FC003C00FC00F80FFFFFF80FFFFFF801B1C7E9B1F>I<FFFFFF00FFFFFF000FC01F000FC00700
+0FC003000FC003800FC003800FC001800FC181800FC181800FC180000FC180000FC380000FFF80
+000FFF80000FC380000FC180000FC180000FC180000FC180000FC000000FC000000FC000000FC0
+00000FC000000FC00000FFFF0000FFFF0000191C7E9B1E>I<000FF008007FFE3801FC07F807E0
+01F80F8000781F0000783F0000383E0000387E0000187C000018FC000000FC000000FC000000FC
+000000FC000000FC000000FC007FFFFC007FFF7C0001F87E0001F83E0001F83F0001F81F0001F8
+0F8001F807E001F801FC07F8007FFE78000FF818201C7D9B26>I<FFFFFFFF07E007E007E007E0
+07E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007
+E0FFFFFFFF101C7F9B12>73 D<07FFF007FFF0001F80001F80001F80001F80001F80001F80001F
+80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80301F80781F
+80FC1F80FC1F80FC1F00783E00387C000FF000141C7F9B19>I<FFFF00FFFF000FC0000FC0000F
+C0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000F
+C0030FC0030FC0030FC0070FC0070FC0060FC00E0FC01E0FC07EFFFFFEFFFFFE181C7E9B1D>76
+D<FFC00003FFFFE00007FF0FE00007F00DF0000DF00DF0000DF00DF0000DF00CF80019F00CF800
+19F00C7C0031F00C7C0031F00C3E0061F00C3E0061F00C1F00C1F00C1F00C1F00C1F00C1F00C0F
+8181F00C0F8181F00C07C301F00C07C301F00C03E601F00C03E601F00C01FC01F00C01FC01F00C
+01FC01F00C00F801F00C00F801F0FFC0701FFFFFC0701FFF281C7E9B2D>I<FFE003FFFFE003FF
+0FF000300FF800300DFC00300CFE00300C7E00300C3F00300C1F80300C1FC0300C0FE0300C07F0
+300C03F0300C01F8300C01FC300C00FE300C007F300C003F300C001FB00C001FF00C000FF00C00
+07F00C0003F00C0001F00C0000F00C0000F0FFC00070FFC00030201C7E9B25>I<003FE00001F0
+7C0003C01E000F800F801F0007C01E0003C03E0003E07E0003F07C0001F07C0001F0FC0001F8FC
+0001F8FC0001F8FC0001F8FC0001F8FC0001F8FC0001F8FC0001F87C0001F07E0003F07E0003F0
+3E0003E03F0007E01F0007C00F800F8003C01E0001F07C00003FE0001D1C7D9B24>I<FFFFF800
+FFFFFE000FC03F800FC00F800FC007C00FC007E00FC007E00FC007E00FC007E00FC007E00FC007
+C00FC007C00FC00F800FC03F000FFFFC000FC000000FC000000FC000000FC000000FC000000FC0
+00000FC000000FC000000FC000000FC000000FC00000FFFC0000FFFC00001B1C7E9B21>I<FFFF
+F00000FFFFFE00000FC03F00000FC00F80000FC007C0000FC007E0000FC007E0000FC007E0000F
+C007E0000FC007E0000FC007C0000FC00F80000FC03E00000FFFF000000FC07C00000FC03E0000
+0FC03F00000FC01F80000FC01F80000FC01F80000FC01F80000FC01F80000FC01F80000FC01F81
+800FC01F81800FC00FC180FFFC07C300FFFC01FE00211C7E9B24>82 D<07F8201FFEE03C07E078
+01E07000E0F000E0F00060F00060F80000FE0000FFE0007FFE003FFF003FFF800FFFC007FFE000
+7FE00003F00001F00000F0C000F0C000F0C000E0E000E0F001C0FC03C0EFFF0083FC00141C7D9B
+1B>I<7FFFFFE07FFFFFE0781F81E0701F80E0601F8060E01F8070C01F8030C01F8030C01F8030
+C01F8030001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80
+00001F8000001F8000001F8000001F8000001F8000001F8000001F800007FFFE0007FFFE001C1C
+7E9B21>I<FFFC03FFFFFC03FF0FC000300FC000300FC000300FC000300FC000300FC000300FC0
+00300FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC000300F
+C000300FC000300FC0003007C0003007C0006003E000E001F001C000FC0780007FFE00000FF800
+201C7E9B25>I<FFFC7FFE0FFCFFFC7FFE0FFC0FC007E000C00FC007F000C00FE003F001C007E0
+03F0018007E007F8018003F007F8030003F007F8030003F80CFC070001F80CFC060001F81CFE06
+0001FC187E0E0000FC187E0C0000FC387F0C00007E303F1800007E303F1800007F601FB800003F
+601FB000003FE01FF000003FC00FF000001FC00FE000001FC00FE000000F8007C000000F8007C0
+00000F0003C0000007000380000007000380002E1C7F9B31>87 D<7FFE1FFE007FFE1FFE0007F0
+01800003F803800001FC07000000FC06000000FE0C0000007F1C0000003F380000003FB0000000
+1FE00000000FE00000000FE000000007F000000003F800000007F80000000FFC0000000CFE0000
+00187E000000387F000000703F800000601F800000C01FC00001C00FE000018007F000030007F0
+00FFF03FFF80FFF03FFF80211C7F9B24>I<0FF8001C1E003E0F803E07803E07C01C07C00007C0
+007FC007E7C01F07C03C07C07C07C0F807C0F807C0F807C0780BC03E13F80FE1F815127F9117>
+97 D<FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F3F80
+1FE1E01F80701F00781F003C1F003C1F003E1F003E1F003E1F003E1F003E1F003E1F003C1F003C
+1F00781F80701EC1E01C3F00171D7F9C1B>I<03FC000E0E001C1F003C1F00781F00780E00F800
+00F80000F80000F80000F80000F800007800007801803C01801C03000E0E0003F80011127E9115
+>I<000FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001F001F9F00F
+07F01C03F03C01F07801F07801F0F801F0F801F0F801F0F801F0F801F0F801F07801F07801F03C
+01F01C03F00F0FFE03F9FE171D7E9C1B>I<01FC000F07001C03803C01C07801C07801E0F801E0
+F801E0FFFFE0F80000F80000F800007800007C00603C00601E00C00F038001FC0013127F9116>
+I<007F0001E38003C7C00787C00F87C00F83800F80000F80000F80000F80000F8000FFF800FFF8
+000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80
+000F80007FF8007FF800121D809C0F>I<03F8F00E0F381E0F381C07303C07803C07803C07803C
+07801C07001E0F000E0E001BF8001000001800001800001FFF001FFFC00FFFE01FFFF07801F8F0
+0078F00078F000787000707800F01E03C007FF00151B7F9118>I<FF0000FF00001F00001F0000
+1F00001F00001F00001F00001F00001F00001F00001F0FC01F31E01F40F01F80F81F80F81F00F8
+1F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8FFE7FFFFE7FF181D7F
+9C1B>I<1E003F003F003F003F001E00000000000000000000000000FF00FF001F001F001F001F
+001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B1E7F9D0E>I<FF0000FF00001F
+00001F00001F00001F00001F00001F00001F00001F00001F00001F0FF81F0FF81F03801F07001F
+0C001F18001F70001FF8001FFC001FBC001F3E001F1F001F0F001F0F801F07C01F03E0FFC7FCFF
+C7FC161D7F9C19>107 D<FF00FF001F001F001F001F001F001F001F001F001F001F001F001F00
+1F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B1D7F9C0E>I<FF0F
+C07E00FF31E18F001F40F207801F80FC07C01F80FC07C01F00F807C01F00F807C01F00F807C01F
+00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C0
+FFE7FF3FF8FFE7FF3FF825127F9128>I<FF0FC0FF31E01F40F01F80F81F80F81F00F81F00F81F
+00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8FFE7FFFFE7FF18127F911B>I<
+01FC000F07801C01C03C01E07800F07800F0F800F8F800F8F800F8F800F8F800F8F800F87800F0
+7800F03C01E01E03C00F078001FC0015127F9118>I<FF3F80FFE1E01F80F01F00781F007C1F00
+3C1F003E1F003E1F003E1F003E1F003E1F003E1F003C1F007C1F00781F80F01FC1E01F3F001F00
+001F00001F00001F00001F00001F0000FFE000FFE000171A7F911B>I<FE3E00FE47001E8F801E
+8F801E8F801F07001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0000FF
+F000FFF00011127F9114>114 D<1FD830786018E018E018F000FF807FE07FF01FF807FC007CC0
+1CC01CE01CE018F830CFC00E127E9113>I<0300030003000300070007000F000F003FFCFFFC1F
+001F001F001F001F001F001F001F001F001F0C1F0C1F0C1F0C0F08079803F00E1A7F9913>I<FF
+07F8FF07F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F
+00F81F01F80F01F80786FF01F8FF18127F911B>I<FFC1FCFFC1FC1F00601F80E00F80C00FC0C0
+07C18007C18003E30003E30001F60001F60001FE0000FC0000FC0000780000780000300016127F
+9119>I<FF8FF8FEFF8FF8FE1F03E0301F03E0301F83E0700F83F0600F86F06007C6F0C007CEF8
+C007EC79C003EC7D8003F83D8001F83F0001F83F0001F01F0000F01E0000E00E0000E00E001F12
+7F9122>I<FFC7FCFFC7FC1F81800F838007C70003EE0001FC0001F80000F800007C0000FE0001
+DF00039F00070F800607C00C03E0FF07FCFF07FC16127F9119>I<FFC1FCFFC1FC1F00601F80E0
+0F80C00FC0C007C18007C18003E30003E30001F70001F60000FE0000FC0000FC00007800007800
+003000003000007000706000F86000F8C000F980007300003E0000161A7F9119>I
+E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300
+TeXDict begin @a4
+%%EndSetup
+%%Page: 1 1
+bop -118 15 1063 2 v -118 81 a Fv(P)o(aradigms:)19 b(Just)c(a)h(little)c(bit)
+j(of)g(P)o(ostScript)-68 159 y Fu(Kees)g(v)n(an)e(der)i(Laan)-118
+238 y Ft(Keyw)o(ords:)60 b Fs(Declarativ)o(e)11 b(program,)g(education,)f
+(EPS,)j(Esc)o(her,)f(graph-)-118 280 y(ics,)i(imp)q(erativ)o(e)d(co)q(de,)i
+(\(L)243 274 y Fr(A)265 280 y Fs(\)T)298 286 y(E)318 280 y(X)q(,)h(math)f
+(graphs,)g(MET)m(AF)o(ONT,)j(merging)-118 321 y(EPS)f(and)f(\(L)62
+315 y Fr(A)84 321 y Fs(\)T)117 327 y(E)137 321 y(X)q(,)h(MetaP)o(ost,)g(mfto)
+q(eps,)e(P)o(ostScript,)h(sidew)o(a)o(ys)g(tables,)-118 363
+y(text)c(along)g(curv)o(ed)g(paths.)341 421 y Ft(Abstract)-68
+475 y Fs(It)e(is)h(all)f(ab)q(out)f(creating)g(EPS|with)h(graphics|to)e(b)q
+(e)j(merged)d(with)-68 516 y(\(L)-43 510 y Fr(A)-21 516 y Fs(\)T)12
+522 y(E)32 516 y(X)15 b(scripts.)22 b(The)14 b(emphasis)e(is)j(on)e(creating)
+f(ra)o(w)j(P)o(ostScript)-68 558 y(for)c(simple)f(symmetrical)f(pictures.)14
+b(Asides,)e(lik)o(e)f(incorp)q(oratin)o(g)e(ac-)-68 599 y(curate)g(graphs)g
+(of)h(math)g(functions,)e(t)o(yp)q(esetting)g(text)i(along)f(curv)o(ed)-68
+641 y(paths,)17 b(or)g(tables)f(set)g(sidew)o(a)o(ys)h(ha)o(v)o(e)f(b)q(een)g
+(addressed.)30 b(A)17 b(p)q(o)q(or)-68 682 y(man's)7 b(mfto)q(eps)g(approac)o
+(h)f(is)j(touc)o(hed)d(up)q(on:)13 b(\(declarativ)o(e)o(\))6
+b(MET)m(A-)-68 724 y(F)o(ONT)13 b(in)o(to)d(\(imp)q(erativ)o(e\))e(P)o
+(ostScript.)-118 878 y Fv(BLUe's)15 b(Design)f(X)-118 956 y
+Fu(Hi)j(folks.)26 b(The)18 b(user's)g(guide)f(whic)o(h)g(comes)g(with)f
+(BLUe's)i(for-)-118 1006 y(mat)9 b(system|Publishing)h(with)h(T)448
+1013 y(E)471 1006 y(X,)g(PWT)g(for)g(short|is)g(pro-)-118 1056
+y(cessed)h Fq(c)n(ompletely)i Fu(b)o(y)d(T)282 1063 y(E)305
+1056 y(X,)f Fq(no)k Fu(other)d(to)q(ols)f(suc)o(h)h(as)g(P)o(ostScript)-118
+1105 y(are)20 b(needed.)92 1090 y Fp(1)148 1105 y Fu(Ho)o(w)o(ev)o(er,)h(of)e
+(late)g(I)h(exercised)h Fo(MET)o(AF)n(ONT)p Fu(|)-118 1155
+y(w)o(ell,)14 b(ev)o(en)o(tually)g(MetaP)o(ost)h(with)g(the)g(help)g(of)f
+(Jos)i(Winnink|)-118 1205 y(for)f(graphics)g(to)g(b)q(e)g(included)h(in)e(T)
+461 1213 y(E)484 1205 y(X)h(do)q(cumen)o(ts,)g(and)g(\014nally)-118
+1255 y(em)o(bark)o(ed)e(P)o(ostScript)i(straigh)o(ta)o(w)o(a)o(y)d(to)i
+(create)h(EPS)g(pictures.)p 306 1797 215 2 v 305 1851 2 56
+v 520 1851 V 306 1851 215 2 v 388 1828 a(.ps)p 413 1796 1 54
+v 300 1726 a(dvips,)e(or)h Fn(:)7 b(:)g(:)91 1689 y Fm(\013)p
+117 1689 297 1 v 414 1689 V 594 w(\010)p 91 1715 1 2 v 735
+1715 V 91 1717 V 735 1717 V 91 1743 a(\012)p 117 1743 297 1
+v 414 1743 V 594 w(\011)p 198 1689 1 54 v 92 1582 215 2 v 91
+1636 2 56 v 305 1636 V 92 1636 215 2 v 164 1613 a Fu(.eps)p
+198 1582 1 54 v 112 1515 a(MetaP)o(ost)91 1475 y Fm(\013)p
+117 1475 83 1 v 200 1475 V 165 w(\010)p 91 1501 1 2 v 306 1501
+V 91 1503 V 306 1503 V 91 1528 a(\012)p 117 1528 83 1 v 200
+1528 V 165 w(\011)p 198 1474 1 54 v 92 1368 215 2 v 91 1422
+2 56 v 305 1422 V 92 1422 215 2 v 164 1399 a Fu(.mp)p 627 1689
+1 54 v 521 1582 215 2 v 520 1636 2 56 v 734 1636 V 521 1636
+215 2 v 594 1623 a(.dvi)p 627 1582 1 54 v 541 1512 a(\(an)o(y\)T)661
+1519 y(E)684 1512 y(X)520 1475 y Fm(\013)p 546 1475 83 1 v
+629 1475 V 165 w(\010)p 520 1501 1 2 v 735 1501 V 520 1503
+V 735 1503 V 520 1528 a(\012)p 546 1528 83 1 v 629 1528 V 165
+w(\011)p 627 1474 1 54 v 521 1368 215 2 v 520 1422 2 56 v 734
+1422 V 521 1422 215 2 v 594 1407 a Fu(.tex)p 687 1362 54 1
+v 740 1415 1 54 v 692 1357 54 1 v 745 1410 1 54 v 757 1367
+a Fl(\(e\)psfig)-68 1921 y Fu(P)o(ostScript)k(is)f(in)o(v)o(olun)o(tary)f
+(needed)j(to)f(\(electronically\))f(paste)-118 1971 y(up)k(the)g(graphics,)g
+(and)g(as)g(resulting)g(\014le)g(format.)694 1956 y Fp(2)-68
+2022 y Fu(If)f(w)o(e)h(come)f(to)h(think)g(of)f(graphics)h(as)92
+2100 y(just)g(doing)f(the)i(`righ)o(t')d(strok)o(es)j(or)f(\014lls)-118
+2178 y(then)i(P)o(ostScript)h(pro)o(vides)e(the)i(means)d(for)i(this:)21
+b(lines,)15 b(splines)-118 2228 y(and)e(circular)i(arcs,)f(to)f(b)q(e)i(dra)o
+(wn)e(or)h(\014lled.)593 2213 y Fp(3)630 2228 y Fu(I)f(use)i(the)f(sidestep)
+118 2307 y Fo(MET)o(AF)n(ONT)h Fk(!)p Fu(MetaP)o(ost)f Fk(!)f
+Fu(EPS)-118 2385 y(for)c(general)h(pictures)h(but)f(also)f(for)g(obtaining)f
+(the)j(righ)o(t)e(\(con)o(trol\))-118 2435 y(p)q(oin)o(ts)j(explicitly)f
+(from)f(a)h(decalarativ)o(e)h(sp)q(eci\014cation)h(in)e Fo(MET)o(A)p
+Fu(-)-118 2484 y Fo(F)n(ONT)p Fu(,)j(as)g(sho)o(wn)f(b)o(y)h(Esc)o(her's)i
+(knot)d(at)h(the)g(end.)700 2469 y Fp(4)p -118 2534 600 2 v
+-154 2568 a Fj(1)-118 2580 y Fs(Nob)q(o)q(dy)g(kno)o(ws)g(what)g(the)h
+(future)e(has)h(in)h(store,)f(but)g(for)g(the)h(momen)o(t)d(I)-118
+2623 y(consider)f(it)j(a)f(go)q(o)q(d)g(thing)f(that)g(the)h(PWT)i(guide)d
+(can)g(b)q(e)i(pro)q(cessed)d(just)-118 2665 y(b)o(y)g(T)-50
+2671 y(E)-30 2665 y(X)q(,)g(w)o(ell)h Fi(:)5 b(:)h(:)g Fs(with)11
+b(BLUe's)h(format.)-154 2697 y Fj(2)-118 2709 y Fs(F)m(or)h(exc)o(hange)e
+(the)i Fh(.tex)g Fs(and)f(\(hand-co)q(ded\))e Fh(.eps)j Fs(\014les)g(are)g(m)
+o(uc)o(h)f(b)q(etter)-118 2752 y(suited)d(b)q(ecause)f(of)h(their)g
+(conciseness.)j(This)f(can't)d(b)q(e)i(b)q(eaten,)e(not)i(ev)o(en)f(b)o(y)
+-118 2794 y(Adob)q(e's)h(PDF|P)o(ortable)g(Do)q(cumen)o(t)f(F)m(ormat.)-154
+2826 y Fj(3)-118 2838 y Fs(P)o(ostScript)g(I)q(I)i(also)g(pro)o(vides)e(for)i
+(colors)g(and)f(pro)q(cessing)f(in)i(a)h(net)o(w)o(ork.)-154
+2870 y Fj(4)-118 2882 y Fs(Another)18 b(w)o(a)o(y)h(for)g(arriving)e(at)i
+(the)g(EPS)g(co)q(de)f(is)i(to)f(use)g(Jac)o(k)o(o)o(wski's)-118
+2924 y Fh(mftoeps)9 b Fs(pac)o(k)n(age)g(or)j(to)f(use)g(MetaP)o(ost.)-118
+-55 y Fg(MAPS)g Fn(96)p Fg(.)p Fn(2)1252 b Fq(Par)n(adigms:)19
+b(Just)14 b(a)i(little)d(bit)h(of)h(PostScript)1437 781 y Fu(P/G-script)1428
+745 y Fm(\013)p 1454 745 83 1 v 1537 745 V 164 w(\010)p 1428
+771 1 2 v 1642 771 V 1428 773 V 1642 773 V 1428 798 a(\012)p
+1454 798 83 1 v 1537 798 V 164 w(\011)p 1535 744 1 54 v 1428
+638 215 2 v 1427 692 2 56 v 1642 692 V 1428 692 215 2 v 1510
+669 a Fu(.ps)p 1535 637 1 54 v 1487 567 a(dvips)1428 530 y
+Fm(\013)p 1454 530 83 1 v 1537 530 V 164 w(\010)p 1428 556
+1 2 v 1642 556 V 1428 558 V 1642 558 V 1428 584 a(\012)p 1454
+584 83 1 v 1537 584 V 164 w(\011)p 1535 530 1 54 v 1428 423
+215 2 v 1427 477 2 56 v 1642 477 V 1428 477 215 2 v 1501 464
+a Fu(.dvi)p 1594 418 54 1 v 1648 471 1 54 v 1600 412 54 1 v
+1653 465 1 54 v 1664 423 a Fl(.eps)p 1535 423 V 1448 353 a
+Fu(\(an)o(y\)T)1568 360 y(E)1591 353 y(X)1428 316 y Fm(\013)p
+1454 316 83 1 v 1537 316 V 164 w(\010)p 1428 342 1 2 v 1642
+342 V 1428 344 V 1642 344 V 1428 369 a(\012)p 1454 369 83 1
+v 1537 369 V 164 w(\011)p 1535 315 1 54 v 1428 209 215 2 v
+1427 263 2 56 v 1642 263 V 1428 263 215 2 v 1501 248 a Fu(.tex)p
+1594 203 54 1 v 1648 256 1 54 v 1600 198 54 1 v 1653 251 1
+54 v 1664 208 a Fl(\(e\)psfig)p 1535 208 V 1482 142 a Fu(editor)1428
+101 y Fm(\013)p 1454 101 83 1 v 1537 101 V 164 w(\010)p 1428
+127 1 2 v 1642 127 V 1428 129 V 1642 129 V 1428 155 a(\012)p
+1454 155 83 1 v 1537 155 V 164 w(\011)p 1643 128 54 1 v 1696
+181 1 54 v 1696 396 1 161 v 1054 875 a Fu(With)k(resp)q(ect)j(to)d(graphics)h
+(P)o(ostScript)g(can)g(b)q(e)h(seen)f(as)g(a)1004 925 y Fq(little)15
+b Fu(language)d(in)g(the)i(UNIX)f(tradition.)1684 910 y Fp(5)1720
+925 y Fu(A)g(little)g(bit)f(of)h(P)o(ost-)1004 975 y(Script)i(adheres)i(the)e
+(80\045{20\045)e(adage:)20 b(80\045)14 b(of)g(the)i(e\013ects)h(\(or)1004
+1025 y(more\))c(with)h(20\045)e(of)i(the)g(energy)h(\(or)f(less\).)1054
+1077 y(One)25 b(can)h(with)e(a)h(little)f(kno)o(wledge)h(of)f(P)o(ostScript)i
+(co)q(de)1004 1127 y(graphics)19 b(immedia)o(tely)d(and)j Fq(c)n(ompletely)j
+Fu(in)c(P)o(ostScript.)33 b(The)1004 1177 y(more)8 b(so)i(b)q(ecause)h(of)d
+(the)i(ubiquitous)f(public)g(domain)e(GhostScript)1004 1227
+y(preview)o(ers)16 b(to)f(v)o(erify)g(the)g(result,)h(next)f(to)g(of)f
+(course)i(the)g(P)o(ost-)1004 1277 y(Script)e(laser)g(prin)o(ters.)1054
+1329 y(F)m(urthermore,)f(text)i(is)f(just)h(a)f(sp)q(ecial)g(case)h(of)f
+(graphics,)g(and)1004 1379 y(merging)i(just)h(a)g(little)g(bit)g(of)f
+(text|malenki)f(Russians)j(w)o(ould)1004 1429 y(sa)o(y|with)13
+b(the)h(graphics)g(go)q(es)h(equally)e(simple)f(at)i(\014rst)h(glance.)1054
+1482 y(And)c(to)h(end)g(the)g(lo)o(v)o(esong)e(the)i(inclusion)f(of)g
+(accurate)i(graphs)1004 1531 y(of)21 b(mathematical)d(functions)j(go)q(es)h
+(w)o(ell)e(via)h(co)q(ding)g(these)h(in)1004 1581 y(P)o(ostScript)k(and)g
+(including)f(these)i(as)f(\014gures.)54 b(\(Of)26 b(course)1004
+1631 y(Hobb)o(y's)19 b(graph)f(extension)i(could)f(b)q(e)g(used)h(as)f(w)o
+(ell,)g(or)g(other)1004 1681 y(adv)n(anced)12 b(graphics)g(pac)o(k)n(ages.\))
+17 b(This)11 b(is)h(illustrated)f(b)o(y)h(a)f(graph)1004 1731
+y(of)i(the)i(sine)f(function)g(to)f(con)o(v)o(ey)h(the)h(idea.)1054
+1783 y(PStric)o(ks)h(is)g(ab)q(out)f Fq(interfacing)p Fu(.)23
+b(Not)16 b(assuming)e(kno)o(wledge)1004 1833 y(of)c(P)o(ostScript.)17
+b(This)10 b(note)h(discusses)h(mainly)c Fq(mer)n(ging)p Fu(.)16
+b(Is)11 b(ab)q(out)1004 1883 y(extending)22 b(y)o(our)f(T)1327
+1890 y(E)1350 1883 y(Xp)q(ertise)i(with)e(just)g(a)g(little|tsjut-tsjut)1004
+1933 y(Russians)13 b(w)o(ould)g(sa)o(y|kno)o(wledge)g(of)f(P)o(ostScript)j
+(rew)o(arded)f(b)o(y)1004 1982 y(high)f(returns.)1054 2035
+y(Belo)o(w)19 b(I'll)e(summarize)h(what)h(is)g(needed)h(from)e(P)o
+(ostScript,)1004 2085 y(and)11 b(illustrate)g(the)g(use)h(of)f(it)f(with)h(a)
+g(few)g(examples,)f(in)o(tro)q(ducing)1004 2135 y(en)k(route)h(the)f(op)q
+(erators)h(w)o(e)f(need)h(giv)o(en)e(the)i(example.)1004 2248
+y Fv(P)o(ostScript)1004 2367 y(Pro)q(cessing)54 b Fu(P)o(ostScript)13
+b(comes)f(with)g(a)g(user's)i(guide)e(\(co)q(ok-)1004 2417
+y(b)q(o)q(ok\))21 b(and)h(reference)i(man)o(ual,)c(the)i(so-called)f(blue)h
+(and)f(red)1004 2467 y(b)q(o)q(oks)k(in)g(the)h(Adob)q(e)g(P)o(ostScript)g
+(series.)53 b(F)m(or)25 b(pro)q(cessing)1004 2517 y(P)o(ostScript)19
+b(an)f(in)o(terpreter)i(is)e(needed,)j(suc)o(h)e(as)f(a)g(P)o(ostScript)1004
+2566 y(laser)f(prin)o(ter)g(or)f(a)h(GhostScript)f(preview)o(er.)27
+b(F)m(or)17 b(inclusion)e(in)1004 2616 y(\(L)1034 2609 y Fg(A)1058
+2616 y Fu(\)T)1097 2624 y(E)1120 2616 y(X)c(I)g(use)h(the)f(ps\014g)g
+(macros.)1559 2601 y Fp(6)1594 2616 y Fu(Go)q(ossens)h(in)e(his)h(P)o
+(ostScript)1004 2666 y(and)j(\(L)1115 2659 y Fg(A)1139 2666
+y Fu(\)T)1178 2674 y(E)1201 2666 y(X,)g(MAPS)g Fn(92)p Fu(.)p
+Fn(1)p Fu(,)e(nicely)i(details)g(ab)q(out)f(inclusion)g(of)1004
+2716 y(P)o(ostScript.)1204 2701 y Fp(7)p 1004 2768 600 2 v
+968 2803 a Fj(5)1004 2815 y Fs(See)c(Ben)o(tley's)f(Little)h(languages)e(in)j
+(`More)f(programming)d(p)q(earls|Confes-)1004 2859 y(sions)11
+b(from)f(a)h(co)q(der.')j(Addison-W)m(esley)m(.)968 2891 y
+Fj(6)1004 2902 y Fs(Courtesy)c(T)m(rev)o(or)h(J.)h(Darrell.)968
+2934 y Fj(7)1004 2946 y Fs(See)f(also)f(the)h(L)1209 2940 y
+Fr(A)1227 2946 y Fs(T)1246 2952 y(E)1266 2946 y(X)h(Companion.)-118
+3014 y Fl(Draft)e(June)f Ff(25)p Fl(,)i Ff(1996)818 b Fl({1{)2005
+3013 y(c)1990 3014 y Fk(\015)p Fl(cgl)p eop
+%%Page: 2 2
+bop -68 13 a Fu(As)18 b(with)f(PDF)g(I)h(consider)g(the)g(p)q(ost-pro)q
+(cessing)h(capabilit)o(y)-118 63 y Fq(indep)n(endently)j Fu(from)15
+b(the)i(to)q(ol)f(whic)o(h)h(created)i(the)e(P)o(ostScript)-118
+113 y(source,)e(v)o(ery)f(p)q(o)o(w)o(erful)f(and)h(\015exible.)-118
+184 y Fv(Subset)26 b(0)i(from)e(the)h(language)68 b Fu(P)o(ostScript)25
+b(is)g(stac)o(k-)-118 234 y(orien)o(ted.)41 b(This)22 b(means)e(that)i(op)q
+(erations)g(are)g(prescrib)q(ed)h(in)-118 284 y(p)q(olish-rev)o(erse)12
+b(notation,)d(also)h(kno)o(wn)g(as)h(pre\014x)g(notation,)f(simi-)-118
+333 y(lar)g(to)g(the)h(HP)g(p)q(o)q(c)o(k)o(et)g(calculators.)17
+b(Addition|use)10 b(of)f(op)q(erator)-118 383 y Fe(add)p Fu(|for)j(example)h
+(is)h(notated)g(as)g(follo)o(ws.)-68 454 y Fe(2)21 b(3)h(add\045yields)e(5)h
+(on)h(the)f(stack,)f(2)i(3)f(consumed)-68 565 y Fu(P)o(ostScript)e(is)f
+(arti\014cially)f(structured)j(via)d(structure)k(infor-)-118
+615 y(mation)c(in)i(commen)o(ts,)f(double)h(\045-ed)g(commen)o(ts.)33
+b(Programs)-118 664 y(whic)o(h)13 b(ob)q(ey)g(the)h(Adob)q(e)g(structure)h
+(are)f(called)f(conforming)e(and)-118 714 y(this)17 b(is)h(usually)e(needed)j
+(for)f(inclusion)e(within)h(\(L)706 707 y Fg(A)730 714 y Fu(\)T)769
+722 y(E)793 714 y(X,)h(esp)q(e-)-118 764 y(cially)12 b(the)j(BoundingBo)o(x)e
+(line)h(is)g(required.)-118 835 y(Example)i Fd(\(Conforming)c(EPS)i
+(structure\))-68 907 y Fe(\045!PS)21 b(EPS)-68 956 y(\045\045Title:)f(<name>)
+-68 1006 y(\045\045Creator:)f(<name>)-68 1056 y(\045\045CreationData:)f
+(<date>)-68 1106 y(\045\045BoundingBox:)h(<llx>)h(<lly>)h(<urx>)g(<ury>)-68
+1156 y(\045\045DocumentFonts:)d(\(atend\))-68 1205 y(\045\045EndComments)-68
+1255 y(<prolog>)-68 1305 y(\045\045EndProlog)-68 1355 y(\045\045Page:)i(0)i
+(1)-68 1405 y(<page)e(1>)-68 1454 y(\045\045Page:)g(1)i(2)-68
+1504 y(<page)e(2>)-68 1554 y(\045\045Trailer)-68 1604 y(<...>)-68
+1654 y(\045\045DocumentFonts:)e(Times-Roman)i(...)-68 1704
+y(\045\045Pages:)g(3)-68 1753 y(\045\045EOF)-68 1864 y Fu(Creating)15
+b(and)h(dra)o(wing)e(paths)i(is)g(done)g(b)o(y)f(separate)i(op)q(era-)-118
+1914 y(tors.)g(F)m(or)9 b(creating)h(paths)g(op)q(erations)f(lik)o(e)g
+Fe(moveto)f Fu(are)i(pro)o(vided)-118 1963 y(while)j(dra)o(wing)g(go)q(es)i
+(via)e Fe(stroke)p Fu(.)-68 2035 y Fe(0)21 b(0)h(moveto)e(0)i(10)f
+(lineto\045create)e(path)-68 2084 y(stroke\045draw)g(a)j(v-line)e(of)i(10pt)f
+(height)-68 2195 y Fu(V)m(ariables|names)16 b(to)j(b)q(e)g(asso)q(ciated)g
+(with)g(their)g(v)n(alues|)-118 2245 y(are)10 b(handled)g(via)g(the)g
+(so-called)g(dictionaries.)17 b(The)10 b(functionalit)o(y)-118
+2294 y(can)k(also)f(b)q(e)i(obtained)e(via)g(pro)q(cedures.)-68
+2366 y Fe(/size)20 b({10})h(def)-68 2476 y Fu(The)14 b(so-called)g(literal)g
+(name)f(is)h(preceded)j(b)o(y)d(a)g(slash)g(to)g(dis-)-118
+2526 y(tinguish)c(the)i(declaration)f(from)e(its)j(in)o(v)o(ok)o(e.)k(The)11
+b(in)o(v)o(ok)o(e)g(is)g(done)-118 2576 y(b)o(y)17 b(just)g(the)h(name,)f
+(also)g(called)g(executable)h(name.)27 b(The)18 b(pro-)-118
+2625 y(cedure)e(text)f(is)f(surrounded)i(b)o(y)e(curly)h(braces.)21
+b(P)o(arameters)14 b(are)-118 2675 y(absen)o(t)g(to)q(o.)k(The)d(\(op)q
+(erand\))f(stac)o(k)h(is)e(used.)-68 2725 y(F)m(or)c(graphics)g(w)o(e)h(ha)o
+(v)o(e)f(a)g(Curren)o(tT)m(ransformMatrix|CTM|)-118 2775 y(whic)o(h)k(maps)f
+(the)i(user)g(space)g(on)f(the)h(device)g(space,)g(the)f(prin)o(ter)-118
+2825 y(or)f(screen.)20 b(Equally)11 b(p)q(o)o(w)o(erful)i(is)f(the)h(concept)
+h(of)e(encapsulating)-118 2874 y(graphics)f(via)f Fe(gsave)f
+Fu(and)i Fe(grestore)p Fu(,)e(that)i(is)g(the)g(graphics)g(state)-118
+2924 y(is)j(lo)q(cal|encapsulated|after)f Fe(gsave)g Fu(un)o(til)g
+Fe(grestore)p Fu(.)-118 -55 y Fg(MAPS)e Fn(96)p Fg(.)p Fn(2)1252
+b Fq(Par)n(adigms:)19 b(Just)14 b(a)i(little)d(bit)h(of)h(PostScript)1054
+35 y Fu(Next)d(to)g(the)h(CTM)f(P)o(ostScript)h(main)o(tains)d(the)j(curren)o
+(tp)q(oin)o(t)1004 85 y(and)h(curren)o(tpath.)1054 135 y(Batagelj,)9
+b(MAPS)h Fn(95)p Fu(.)p Fn(1)p Fu(|Com)n(bini)o(ng)c(T)1700
+142 y(E)1723 135 y(X)k(and)f(P)o(ostScript|)1004 184 y(pro)o(vides)15
+b(an)g(in)f(a)h(n)o(utshell)g(o)o(v)o(erview.)1639 169 y Fp(8)1679
+184 y Fu(Another)h(in)o(tro)q(duction)1004 234 y(is)10 b(in)g(F)m(okk)o(er)g
+(en)h(v)n(an)e(Oostrum's)h(`Plaatjes)f(in)h(een)h(tekst,')g(MAPS)1004
+284 y Fn(94)p Fu(.)p Fn(2)p Fu(,)h(next)j(to)e(a)h(surv)o(ey)g(of)g(dra)o
+(wing)f(soft)o(w)o(are.)1004 359 y Fv(Summary)23 b(of)h(\(graphics\))e
+(commands)65 b Fu(The)21 b(follo)o(wing)1004 409 y(snapshot)f(is)f(b)q(orro)o
+(w)o(ed)h(from)d(Gurari,)j(w)o(ell)e Fn(:)7 b(:)g(:)e Fu(a)19
+b(little)g(mo)q(di-)1004 459 y(\014ed.)1080 444 y Fp(9)1117
+459 y Fu(Its)14 b(main)d(purp)q(ose)k(is)e(to)g(sho)o(w)h(that)f(the)h(n)o
+(um)o(b)q(er)f(of)f(rele-)1004 509 y(v)n(an)o(t)i(graphics)g(primitiv)o(es)f
+(is)h(lo)o(w.)k(The)d(functionalities)e(will)g(b)q(e)1004 558
+y(dealt)e(with)g(along)f(the)i(w)o(a)o(y)e(in)h(the)h(examples.)k(F)m(or)11
+b(the)g(details)g(of)1004 608 y(the)j(commands)e(or)i(the)g(list)g(of)f(op)q
+(erators)i(see)g(the)f(red)h(b)q(o)q(ok.)2015 593 y Fp(10)1093
+716 y Fv(Arithmetic)e(and)i(math)g(op)q(erators)1534 766 y
+Fk(h)p Fn(num)p Fk(i)f(h)p Fn(num)p Fk(i)h Fu(m)o(ul)c Fn(num)1664
+816 y Fk(h)p Fn(num)p Fk(i)j Fu(sine)g Fn(num)1093 866 y Fv(P)o(ath)h
+(construction)e(op)q(erators)1665 916 y Fu(curren)o(tp)q(oin)o(t)i
+Fn(x)f(y)1695 965 y Fk(h)p Fn(x)p Fk(i)g(h)p Fn(y)q Fk(i)h
+Fu(mo)o(v)o(eto)1636 1015 y Fk(h)p Fn(dx)p Fk(i)e(h)p Fn(dy)q
+Fk(i)i Fu(rmo)o(v)o(eto)1738 1065 y Fk(h)p Fn(x)p Fk(i)f(h)p
+Fn(y)q Fk(i)p Fu(lineto)1665 1115 y Fk(h)p Fn(dx)p Fk(i)f(h)p
+Fn(dy)q Fk(i)i Fu(rlineto)1215 1165 y Fk(h)p Fn(q)1250 1171
+y Fg(1)p Fp(x)1287 1165 y Fk(i)f(h)p Fn(q)1352 1171 y Fg(1)p
+Fp(y)1388 1165 y Fk(i)g(h)p Fn(q)1453 1171 y Fg(2)p Fp(x)1491
+1165 y Fk(i)g(h)p Fn(q)1556 1171 y Fg(2)p Fp(y)1592 1165 y
+Fk(i)g(h)p Fn(p)1659 1171 y Fg(2)p Fp(x)1696 1165 y Fk(i)g(h)p
+Fn(p)1763 1171 y Fg(2)p Fp(y)1800 1165 y Fk(i)g Fu(curv)o(eto)1410
+1215 y Fk(h)p Fn(c)1444 1221 y Fp(x)1465 1215 y Fk(i)g(h)p
+Fn(c)1529 1221 y Fp(y)1549 1215 y Fk(i)g(h)p Fn(r)q Fk(i)g(h)p
+Fn(ang)1728 1221 y Fg(1)1747 1215 y Fk(i)g(h)p Fn(ang)1860
+1221 y Fg(2)1878 1215 y Fk(i)g Fu(arc)1093 1264 y Fv(String)g(op)q(erators)
+1349 1314 y Fk(h)p Fn(str)q(ing)q Fk(i)h(h)p Fn(num)p Fk(i)f(h)p
+Fn(num)p Fk(i)g Fu(getin)o(terv)n(al)1093 1364 y Fv(Character)i(and)f(fon)o
+(t)f(op)q(erators)1567 1414 y Fe(\\)p Fk(h)p Fn(f)t(ontname)p
+Fk(i)i Fu(\014ndfon)o(t)1465 1464 y Fk(h)p Fn(f)t(ontsiz)r(e)p
+Fk(i)g Fu(scalefon)o(t)e(setfon)o(t)1714 1513 y Fk(h)p Fn(str)q(ing)q
+Fk(i)h Fu(sho)o(w)1521 1563 y Fe({)p Fk(h)p Fn(body)q Fk(i)p
+Fe(})f Fk(h)p Fn(str)q(ing)q Fk(i)h Fu(ksho)o(w)1093 1613 y
+Fv(Graphics)f(state)h(op)q(erators)1703 1663 y Fk(h)p Fn(num)p
+Fk(i)f Fu(setgra)o(y)1613 1713 y Fk(h)p Fn(num)p Fk(i)g Fu(setlinewidth)1093
+1762 y Fv(Dictionary)g(op)q(erators)1495 1812 y Fu(/)p Fk(h)p
+Fn(def)t(name)p Fk(i)23 b Fe({)p Fk(h)p Fn(body)q Fk(i)p Fe(})14
+b Fu(def)1093 1862 y Fv(Co)q(ordinate)h(system)g(and)g(matrix)f(op)q(erators)
+1542 1912 y Fk(h)p Fn(num)p Fk(i)g(h)p Fn(num)p Fk(i)g Fu(translate)1615
+1962 y Fk(h)p Fn(num)p Fk(i)h(h)p Fn(num)p Fk(i)f Fu(scale)1724
+2012 y Fk(h)p Fn(num)p Fk(i)g Fu(rotate)1093 2061 y Fv(Relational,)f(b)q(o)q
+(olean,)i(and)h(bit)o(wise)d(op)q(erators)1262 2111 y Fk(h)p
+Fn(num)p Fk(i)p Fe(|)p Fk(h)p Fn(str)q(ing)q Fk(i)i(h)p Fn(num)p
+Fk(i)p Fe(|)p Fk(h)p Fn(str)q(ing)q Fk(i)g Fu(le)f Fn(bool)1093
+2161 y Fv(Con)o(trol)g(op)q(erators)1230 2211 y Fk(h)p Fn(bool)q
+Fk(i)22 b Fe({)p Fk(h)p Fn(tr)q(uepar)q(t)p Fk(i)p Fe(})f({)p
+Fk(h)p Fn(f)t(al)q(separ)q(t)p Fk(i)p Fe(})16 b Fu(ifelse)1539
+2261 y Fk(h)p Fn(num)p Fk(i)22 b Fe({)p Fk(h)p Fn(body)q Fk(i)p
+Fe(})14 b Fu(rep)q(eat)1391 2310 y Fk(h)p Fn(f)t(r)q(om)p Fk(i)24
+b(h)p Fn(step)p Fk(i)e(h)p Fn(to)p Fk(i)p Fe({)p Fk(h)p Fn(body)q
+Fk(i)p Fe(})15 b Fu(for)1054 2386 y(With)e(pre\014x)i Fk(h)p
+Fn(in)p Fk(i)9 b(h)p Fn(oper)q(ator)q Fk(i)h(h)p Fn(r)q(esul)q(t)p
+Fk(i)15 b Fu(is)e(elegan)o(t.)p 1004 2438 600 2 v 968 2473
+a Fj(8)1004 2484 y Fs(Nice)e(are)g(the)g(hin)o(ts)f(to)h(remo)o(v)o(e)f(rep)q
+(eated)f(parts)h(from)h(\014les)f(whic)o(h)h(are)g(gen-)1004
+2526 y(erated)f(b)o(y)h(CorelDRA)l(W)h(and)f(Mathematica,)e(in)j(order)e(to)i
+(reduce)e(the)h(size)1004 2567 y(of)k(the)f(automaticall)o(y)e(generated)h
+(and)h(to)h(b)q(e)g(included)e(\014les.)25 b(\(The)15 b(idea)1004
+2609 y(is)d(to)f(remo)o(v)o(e)e(duplicate)g(`dictionaries')g(whic)o(h)i(are)g
+(included)e(with)i(eac)o(h)g(re-)1004 2651 y(sult.\))19 b(The)13
+b(example)d(of)j(ho)o(w)g(to)f(include)f(graphs)h(of)g(math)g(functions)f(in)
+h(a)1004 2692 y(do)q(cumen)o(t)e(is)i Fc(very)17 b Fs(useful.)g(Ho)o(w)o(ev)o
+(er,)12 b(with)h(resp)q(ect)d(to)j(his)f(\014rst)g(picture)e(I)1004
+2734 y(w)o(ould)h(prefer)e(to)i(use)g(the)g(inheren)o(t)e(symmetry)f(in)j
+(the)g(data)f(as)h(opp)q(osed)f(to)1004 2776 y(pro)o(viding)f(all)i(the)g
+(data.)968 2807 y Fj(9)1004 2819 y Fs(Gurari)k(E.M)h(\(1994\):)23
+b(T)1357 2825 y(E)1377 2819 y(X)17 b(&)f(L)1474 2813 y Fr(A)1492
+2819 y Fs(T)1511 2825 y(E)1531 2819 y(X)q(|Dra)o(wing)f(&)i(Literate)d
+(Program-)1004 2861 y(ming.)g(McGra)o(w)d(Hill.)16 b(ISBN)11
+b(0-07-025208)o(-4.)952 2893 y Fj(10)1004 2904 y Fs(A)i(complete)c(list)i
+(with)h(functional)d(summaries)g(is)j(in)g(the)f(red)g(b)q(o)q(ok)g(section)
+1004 2946 y(6.2)g(Op)q(erator)f(summary)m(.)-118 3014 y Fl(Draft)g(June)f
+Ff(25)p Fl(,)i Ff(1996)818 b Fl({2{)2005 3013 y(c)1990 3014
+y Fk(\015)p Fl(cgl)p eop
+%%Page: 3 3
+bop -118 13 a Fv(What)22 b(is)f(not)g(allo)o(w)o(ed)f(as)j(EPS?)62
+b Fu(I'm)18 b(not)h(kno)o(wledge-)-118 63 y(able)e(enough)h(to)f(answ)o(er)h
+(that)g(question,)g(nor)g(do)f(I)g(kno)o(w)g(of)g(a)-118 113
+y(full-blo)o(wn)g(de\014nition)j(of)f(EPS.)h(F)m(or)f(the)i(mom)o(en)o(t)d
+(it)h(is)h(some)-118 163 y(subset)f(whic)o(h)f(w)o(orks)g(with)f(all)g(in)o
+(terpretors,)j(with)d(m)o(y)f(subset)-118 212 y(0)21 b(in)g(there.)42
+b(When)21 b(one)h(restricts)h(oneself)e(to)h(the)g(basics)f(of)-118
+262 y(graphics,)10 b(arithmetic)f(and)h(similar)d(op)q(erations)k(then)f(the)
+h(b)q(ound-)-118 312 y(ary)17 b(area)g(b)q(et)o(w)o(een)i(EPS)e(and)g(full)f
+(P)o(ostScript|or)h(its)h(v)n(arious)-118 362 y(implemen)o(tatio)o(ns|is)11
+b(not)j(in)f(sigh)o(t.)-118 445 y Fv(Do)q(cumen)o(tation)49
+b Fu(The)10 b(red)g(b)q(o)q(ok|the)g(reference)i(man)o(ual|)-118
+495 y(is)j(generally)h(recommended,)f(though)g(the)h(blue)g(b)q(o)q(ok|the)g
+(tu-)-118 544 y(torial)d(and)g(co)q(okb)q(o)q(ok|is)g(also)h(nice.)495
+529 y Fp(11)-118 625 y Fu(Example)i Fd(\(Pie)f(c)o(hart)f(from)e(the)i(blue)g
+(b)q(o)q(ok\))-55 648 y
+ 14777212 14208860 -14143078 -14143078 14143078 12827443 startTexFig
+-55 648 a
+%%BeginDocument: prpie.eps
+
+/PieDict 24 dict def
+PieDict begin
+ /DrawSlice
+ { /grayshade exch def
+ /endangle exch def
+ /startangle exch def
+ /thelabel exch def
+
+ newpath 0 0 moveto
+ 0 0 radius startangle endangle arc
+ closepath
+ 1.415 setmiterlimit
+
+ gsave
+ grayshade setgray
+ fill
+ grestore
+ stroke
+ gsave
+ startangle endangle add 2 div rotate
+ radius 0 translate
+ newpath
+ 0 0 moveto labelps .8 mul 0 lineto stroke
+ labelps 0 translate
+ 0 0 transform
+ grestore
+ itransform
+ /y exch def /x exch def
+ x y moveto
+
+ x 0 lt
+ { thelabel stringwidth pop neg 0 rmoveto }
+ if
+ y 0 lt { 0 labelps neg rmoveto }if
+ thelabel show
+ } def
+
+ /findgray
+ { /i exch def /n exch def
+ i 2 mod 0 eq
+ { i 2 div n 2 div round add n div }
+ { i 1 add 2 div n div }
+ ifelse
+ } def
+end
+
+/DrawPieChart
+ { PieDict begin
+ /radius exch def
+ /ycenter exch def /xcenter exch def
+ /PieArray exch def
+ /labelps exch def /titleps exch def
+ /title exch def
+
+ gsave
+ xcenter ycenter translate
+
+ /Helvetica findfont titleps scalefont setfont
+ title stringwidth pop 2 div neg radius neg
+ titleps 3 mul sub moveto
+ title show
+ /Helvetica findfont labelps scalefont setfont
+ /numslices PieArray length def
+ /slicecnt 0 def
+ /curangle 0 def
+
+ PieArray
+ { /slicearray exch def
+ slicearray aload pop
+ /percent exch def
+ /label exch def
+ /perangle percent 360 mul def
+ /slicecnt slicecnt 1 add def
+ label curangle curangle perangle add
+ numslices slicecnt findgray DrawSlice
+ /curangle curangle perangle add def
+ } forall
+ grestore
+ end
+ } def
+
+(January Pie Sales) 24 12
+ [ [(Blueberry) .12 ]
+ [(Cherry) .30 ]
+ [(Apple) .26 ]
+ [(Boston Cream) .16 ]
+ [(Other) .04 ]
+ [(Vanilla Cream) .12 ]
+ ] 0 0 140 DrawPieChart
+
+showpage
+%%EndDocument
+ -55 648 a
+ endTexFig
+-68 1623 a Fu(The)j(in)o(v)o(ok)o(e)e(is)i(essen)o(tially)f(as)h(follo)o(ws)e
+(and)i(sho)o(ws)g(that)f(the)-118 1673 y(co)q(des)g(can)e(b)q(e)h(used)h
+(straigh)o(tforw)o(ardly)m(.)546 1658 y Fp(12)600 1673 y Fu(It)e(is)h(no)f
+(longer)g(nec-)-118 1723 y(essary)g(to)g(mesh)f(around)g(with)g(the)h
+(picture)g(en)o(vironmen)o(t)f(or)g(so,)-118 1773 y(to)h(ac)o(hiev)o(e)g(the)
+g(e\013ect.)-68 1851 y Fe(\045preliminary)19 b(matter)-68 1901
+y(\(January)h(Pie)h(Sales\))-25 1951 y(24)h(12)f(\045...)g(array)g(size)-25
+2001 y([)h([\(Blueberry\))d(.12)i(])19 2051 y([\(Cherry\))f(.30)h(])19
+2100 y([\(Apple\))f(.26)h(])19 2150 y([\(Boston)f(Cream\))h(.16)g(])19
+2200 y([\(Other\))f(.04)h(])19 2250 y([\(Vanilla)f(Cream\))g(.12)i(])-25
+2300 y(])g(306)f(396\045translate)e(center)i(to)19 2350 y(140)86
+b(\045size)19 2399 y(DrawPieChart)-68 2449 y(showpage)-68 2565
+y Fu(There)15 b(is)e(also)h(a)f(P)o(ostScript-F)-5 b(A)o(Q,)15
+b(consult)p -118 2617 600 2 v -170 2651 a Fj(11)-118 2663 y
+Fs(I)i(used)f(the)g(P)o(ostScriptI)e(red)i(b)q(o)q(ok)g(and)g(this)g(is)h(w)o
+(ell-suited)e(to)i(get)f(the)-118 2706 y(\015a)o(v)o(our.)d(F)m(or)d(T)93
+2712 y(E)113 2706 y(X)h(and)e(MET)m(AF)o(ONT)k(this)d(is)g(similar.)j(T)m(o)e
+(grasp)e(the)g(basic)-118 2750 y(ideas)h(Kn)o(uth's)g(\014rst)h(b)q(o)q(ok)f
+(is)h(a)h(more)e(concise)f(surv)o(ey)h(of)h(the)g(main)f(lines)g(of)-118
+2794 y(though)o(t)f(than)i Fb(The)g(T)188 2800 y(E)208 2794
+y(X)q(b)q(o)q(ok)f Fs(and)h Fb(The)g(MET)m(AF)o(ONTb)q(o)q(ok)p
+Fs(.)-170 2825 y Fj(12)-118 2837 y Fs(It)k(is)h(not)f(standard)f(P)o
+(ostScript.)26 b(W)m(e)16 b(ha)o(v)o(e)f(to)g(construct)f(some)h(kind)f(of)
+-118 2881 y(library)f(to)h(use)g(the)g(P)o(ostScript)f(programs)f(from.)24
+b(Ma)o(yb)q(e)14 b(the)f(CT)m(AN)k(as)-118 2924 y(global)10
+b(net)o(w)o(ork)g(library?)j(Copied)e(on)g(the)g(v)n(arious)f(CD-R)o(OMS?)
+-118 -55 y Fg(MAPS)h Fn(96)p Fg(.)p Fn(2)1252 b Fq(Par)n(adigms:)19
+b(Just)14 b(a)i(little)d(bit)h(of)h(PostScript)1054 35 y Fe(ftp)43
+b(wilma.cs.brown.e)o(du:)1170 85 y(pub/comp.lang.pos)o(tscri)o(pt)p
+Fu(.)1054 134 y(It)14 b(con)o(tains)g(an)f(annotated)h(bibliograph)o(y)e(as)i
+(w)o(ell.)1054 184 y(The)i(examples)f(from)f(Adob)q(e's)i(blue)g(b)q(o)q(ok)f
+(are)i(a)o(v)n(ailable)c(on)1004 234 y(the)h(net.)1004 308
+y Fv(Pro)q(o\014ng)57 b Fu(F)m(or)15 b(previewing)g(or)g(prin)o(ting,)g
+Fq(as)h(such)j Fu(I)c(ha)o(v)o(e)g(to)1004 358 y(include)d(a)g(shift)g(to)g
+(mo)o(v)o(e)e(the)j(picture)g(a)o(w)o(a)o(y)e(from)g(the)h(lo)o(w)o(er)g
+(left)1004 408 y(corner,)j(sa)o(y)1054 482 y Fe(300)21 b(500)g(translate)1004
+619 y Fv(Inclusion)54 b Fu(I)13 b(usually)f(build)h(a)g(\014gure)h
+(symmetrically)c(around)1004 668 y(the)k(origin)f(and)h(then)g(include)g(it)g
+(via)1054 743 y Fe($$\\psfig{file=<n)o(ame>,)o(heigh)o(t=<nu)o(mber>)o(<uni)o
+(t>}$$)1054 854 y Fu(A)h(unit)g(can)g(b)q(e)h Fe(in)p Fu(\(c)o(h\),)f
+Fe(cm)p Fu(,)g(and)g(ilks.)21 b Fe(\\psfig)14 b Fu(is)h(v)o(ery)h(vul-)1004
+904 y(nerable)c(to)g(spaces)h(b)q(ecause)h(of)d(T)1541 912
+y(E)1564 904 y(X's)h(parsing.)17 b(So)12 b(no)f(spaces)i(in)1004
+954 y(there.)23 b(No)o(w)15 b(and)g(then)h(I)f(forget)g(to)g(inactiv)n(ate)g
+(the)h Fe(translate)1004 1004 y Fu(needed)f(while)f(previewing.)k(No)13
+b(real)h(problem.)1054 1066 y Fv(BoundingBo)n(x)55 b Fu(Pro)o(viding)12
+b(the)i(righ)o(t)g(BoundingBo)o(x)f(co-)1004 1116 y(ordinates)j(has)f(all)f
+(to)h(do)g(with)g(prop)q(er)i(placemen)o(t)d(within)h(con-)1004
+1166 y(text,)24 b(the)e(lo)q(ok-and-feel.)40 b(Default)20 b(P)o(ostScript)j
+(assumes)e(the)1004 1215 y(origin|in)7 b(user)k(space|at)e(the)h(lo)o(w)o(er)
+f(left)g(corner)i(of)d(the)i(pap)q(er|)1004 1265 y(in)j(device)i(space.)1054
+1315 y(Surround)f(the)h(picture)g(b)o(y)e(as-if)h(lines)f(and)h(supply)g(the)
+h(co)q(or-)1004 1365 y(dinates,)e(in)g(p)q(oin)o(ts)h(as)f(units)h(in)f(user)
+h(space)h(co)q(ordinates,)e(of)g(the)1004 1415 y(lo)o(w)o(er)h(left)g(corner)
+h(and)f(the)h(upp)q(er)g(righ)o(t)f(corner)h(in)f(the)h(Bound-)1004
+1464 y(ingBo)o(x)h(sp)q(eci\014cation.)29 b(Simple)15 b(is)j(to)f(build)f(a)h
+(picture)h(around)1004 1514 y(its)12 b(symmetry)e(p)q(oin)o(t|and)g(let)i
+(this)g(coincide)g(with)f(the)i(origin|)1004 1564 y(with)c(as)g(pleasing)g
+(result)h(that)g(the)g(horizon)o(tal)e(p)q(ositioning)g(comes)1004
+1614 y(out)14 b(cen)o(tered,)j(when)e(used)g(within)f(math)f(displa)o(y)m(.)
+19 b(V)m(ertically)m(,)13 b(I)1004 1664 y(add)19 b(a)g(10)g(or)g(so)g(extra)h
+(on)f(either)h(side)g(in)e(the)i(BoundingBo)o(x)1004 1714 y(sp)q
+(eci\014cation,)13 b(but)h(that)f(dep)q(ends)h(on)f(the)h(c)o(haracter)g(of)e
+(the)i(pic-)1004 1763 y(ture.)1054 1813 y(Some)19 b(preview)i(systems)g(can)g
+(measure)f(the)h(BoundingBo)o(x)1004 1863 y(and)14 b(allo)o(w)e(adjustmen)o
+(t)h(in)o(teractiv)o(ely)m(.)1642 1848 y Fp(13)1004 1937 y
+Fv(W)l(riting)j(P)o(ostScript)56 b Fu(A)16 b(line)g(bundle)g(and)g(a)g(v)n
+(arian)o(t)f(of)g(it)1004 1987 y(are)f(in)o(tro)q(duced)h(to)f(sho)o(w)f(ho)o
+(w)h(to)g(create)h(simple)d(EPS.)1054 2049 y Fv(A)k(line)e(bundle)1385
+2078 y
+ 4736286 4736286 -2631270 -2631270 2631270 2631270 startTexFig
+1385 2078 a
+%%BeginDocument: linebundle.eps
+/r 36 def
+10{0 0 moveto
+ r 0 lineto
+ 36 rotate
+}repeat
+stroke
+showpage
+%%EndDocument
+ 1385 2078 a
+ endTexFig
+1054 2452 a Fu(Ho)o(w)h(to)g(do)g(this)g(in)g(P)o(ostScript?)23
+b(A)15 b(line)g(as)g(suc)o(h)h(is)f(simple.)1004 2502 y(First)20
+b(a)f Fe(moveto)f Fu(and)h(then)h(a)f Fe(lineto)p Fu(.)33 b(So)19
+b(a)g(w)o(a)o(y)g(is)g(to)g(cre-)1004 2552 y(ate)c(a)f(lo)q(op)g(and)g(rep)q
+(eatedly)i(dra)o(w)e(from)f(the)i(origin)f(to)g(the)h(end)1004
+2602 y(of)h(the)i(v)n(arious)e(lines.)27 b(This)17 b(can)g(b)q(e)h(done)f
+(elegan)o(tly)f(b)o(y)h(using)1004 2652 y(appropriately)c(the)i(CTM.)1054
+2726 y Fe(\045!PS)21 b(EPS)1054 2776 y(\045\045Title:)f(Line)h(bundle)p
+1004 2817 600 2 v 952 2852 a Fj(13)1004 2863 y Fs(F)m(or)9
+b(a)g(summary)e(of)i(to)q(ols)f(to)h(assist)g(\014nding)e(the)i(BoundingBo)o
+(x)d(co)q(ordinates)1004 2905 y(see,)16 b(Rec)o(kdahl)d(K)j(\(1995\):)22
+b(Using)15 b(EPS)g(graphics)e(in)i(L)1793 2899 y Fr(A)1811
+2905 y Fs(T)1830 2911 y(E)1850 2905 y(X)h(do)q(cumen)o(ts.)1004
+2946 y(rec)o(kdahl@lelan)o(d.st)o(anf)o(ord)o(.ed)o(u.)-118
+3014 y Fl(Draft)10 b(June)f Ff(25)p Fl(,)i Ff(1996)818 b Fl({3{)2005
+3013 y(c)1990 3014 y Fk(\015)p Fl(cgl)p eop
+%%Page: 4 4
+bop -68 14 a Fe(\045\045Creator:)19 b(cgl)-68 64 y(\045\045CreationDate:)f
+(June)j(4)h(1996)-68 114 y(\045\045BoundingBox:)d(-40)i(-45)g(40)g(45)-68
+164 y(\045\045Pages:)f(1)-68 214 y(\045\045EndProlog)-68 263
+y(\045\045Page:)g(1)i(1)-68 313 y(/r)f(36)g(def)-68 363 y(10{0)g(0)g(moveto)g
+(r)g(0)h(lineto)-3 413 y(36)f(rotate)-68 463 y(}repeat)f(stroke)h(showpage)
+-68 574 y Fu(Explanation.)16 b(The)d(idea)f(is)h(that)f(\014rst)i(a)e(simple)
+f(line)h(is)g(dra)o(w,)-118 624 y(for)d(example)f(along)g(the)j(x-axes.)16
+b(What)9 b(happ)q(ens)i(if)d(after)i(that)g(w)o(e)-118 674
+y(rotate?)18 b(Righ)o(t,)10 b(the)j(mapping)c(is)j(c)o(hanged.)17
+b(And)12 b(what)g(happ)q(ens)-118 723 y(if)i(w)o(e)h(supply)g(the)h
+Fq(same)i Fu(line)c(after)i(this?)21 b(Indeed,)16 b(it)e(will)g(sho)o(w)-118
+773 y(up)g(rotated.)k(Because)e(P)o(ostScript)e(is)g(an)f(in)o(terpretiv)o(e)
+i(language)-118 823 y(w)o(e)f(can)f(realize)h(this)g(sp)q(eci\014cation)g
+(after)f(the)h(rotate)g(via)f(a)g(lo)q(op,)-118 873 y(whic)o(h)h(for)f(this)h
+(simple)f(case)h(reads)h Fe(10{...}repeat)p Fu(.)769 858 y
+Fp(14)-68 935 y Fu(Appropriately)21 b(main)o(taini)o(ng)d(the)k(CTM)f(for)f
+(symmetri-)-68 984 y(cal)15 b(pictures)i(can)g(yield)e(simple)f(lo)q(oking)g
+(P)o(ostScript)j(pro-)-68 1034 y(grams.)-68 1108 y Fv(A)f(\015o)o(w)o(er)263
+1112 y
+ 4736286 4736286 -3289088 -3289088 3289088 3289088 startTexFig
+263 1112 a
+%%BeginDocument: flower.eps
+/r 36 def
+10{r r moveto%begin drawing point
+ r 0 r 90 180 arc
+ currentpoint%origin
+ 0 r r 270 360 arc
+ 36 rotate
+}repeat
+stroke
+showpage
+%%EndDocument
+ 263 1112 a
+ endTexFig
+-68 1478 a Fu(This)d(exercises)k(the)d(use)h(of)e Fe(arc)p
+Fu(.)-68 1552 y Fe(\045!PS)21 b(EPS)-68 1602 y(\045\045Title:)f(Flower)-68
+1651 y(\045\045Creator:)f(cgl)j(\(Courtesy)e(Papert\))-68 1701
+y(\045\045CreationDate:)e(June)j(4)h(1996)-68 1751 y(\045\045BoundingBox:)d
+(-40)i(-45)g(40)g(45)-68 1801 y(\045\045Pages:)f(1)-68 1851
+y(\045\045EndProlog)-68 1901 y(\045\045Page:)g(1)i(1)-68 1950
+y(/r)f(36)g(def)-68 2000 y(10{r)g(r)g(moveto\045begin)f(drawing)g(point)-3
+2050 y(r)i(0)f(r)h(90)f(180)g(arc)-3 2100 y(currentpoint\045origi)o(n)-3
+2150 y(0)h(r)f(r)h(270)f(360)g(arc)-3 2199 y(36)g(rotate)-68
+2249 y(}repeat)f(stroke)h(showpage)-68 2361 y Fu(Explanation.)15
+b(W)m(e)9 b(ha)o(v)o(e)g(the)i(same)d(structure)k(as)d(the)h(previous)-118
+2410 y(program)i(but)i(the)g(`line')e(is)h(no)o(w)g(a)h(little)f(more)f(elab)
+q(orated:)18 b(t)o(w)o(o)-118 2460 y(arcs)11 b(of)f(a)g(circle.)18
+b(P)o(ostScript)11 b(pro)o(vides)f(an)h(op)q(erator)g(for)f(dra)o(wing)-118
+2510 y(circular)16 b(arcs,)g(called)f(arc.)23 b(The)16 b(arc)f(has)h(\()p
+Fn(x;)7 b(y)q Fu(\))16 b(as)f(cen)o(tre,)i(r)f(as)-118 2560
+y(radius,)c Fn(ang)84 2566 y Fg(1)116 2560 y Fu(the)h(angle)f(of)h(a)f(v)o
+(ector)i(from)d(\()p Fn(x;)c(y)q Fu(\))13 b(of)f(length)h Fn(r)h
+Fu(to)-118 2610 y(the)f(\014rst)g(endp)q(oin)o(t)f(of)g(the)h(arc,)f(and)g
+Fn(ang)548 2616 y Fg(2)579 2610 y Fu(the)h(angle)e(of)h(a)g(v)o(ector)-118
+2660 y(from)g(\()p Fn(x;)7 b(y)q Fu(\))13 b(of)g(length)h Fn(r)g
+Fu(to)f(the)i(second)f(endp)q(oin)o(t)g(of)f(the)h(arc.)909
+2644 y Fp(15)-118 2709 y Fu(These)h(argumen)o(ts)e(are)h(exp)q(ected)i(to)e
+(b)q(e)h(on)e(the)i(stac)o(k.)p -118 2754 600 2 v -170 2788
+a Fj(14)-118 2800 y Fs(Do)9 b(y)o(ou)e(see)i(the)f(v)n(arian)o(t)f(for)h(dra)
+o(wing)g(a)g(p)q(olygon?)k(This)d(dualit)o(y)e(linebundle)-118
+2841 y(and)16 b(p)q(olygon)e(has)i(b)q(een)g(used)f(b)o(y)h(Gab)q(o)g(and)f
+(is)i(ab)q(out)e(what)i(he)f(called)-118 2882 y(stereometry)8
+b(v)o(ersus)j(p)q(erimetry)m(,)d(the)j(structure)e(v)o(ersus)h(the)h(surface)
+-170 2914 y Fj(15)-118 2926 y Fs(The)g(arc)g(is)h(dra)o(wn)f(coun)o(ter)e
+(clo)q(c)o(kwise.)14 b Fh(arcn)c Fs(dra)o(ws)h(clo)q(c)o(kwise.)-118
+-51 y Fg(MAPS)g Fn(96)p Fg(.)p Fn(2)1252 b Fq(Par)n(adigms:)19
+b(Just)14 b(a)i(little)d(bit)h(of)h(PostScript)1054 39 y Fe(x)21
+b(y)h(r)g(ang1)e(ang2)37 b Fv(arc)1054 151 y Fu(Imp)q(ortan)o(t)11
+b(is)h(to)h(realize)g(that)f(arc)h Fq(c)n(ounts)k Fu(its)12
+b(angle)h(from)d(\(x,)1004 201 y(0\))j(and)h(that)f(the)i Fq(dr)n(awing)h
+Fu(starts)f(from)d(the)i(p)q(oin)o(t)f(on)g(the)h(stac)o(k)1054
+250 y(The)22 b(sp)q(eci\014cation)g(of)f(the)h(\015o)o(w)o(er)g(in)f
+Fo(MET)o(AF)n(ONT)p Fu(/)p Fo(MET)o(A)p Fu(-)1004 300 y Fa(post)14
+b Fu(reads)h(essen)o(tially)e(as)h(follo)o(ws.)1054 375 y Fe(for)21
+b(k:=)g(1)h(upto)f(10:)1054 425 y(draw\(origin{up}.)o(.{rig)o(ht}\(u)o(p+rig)
+o(ht\){d)o(own})o(..)1141 474 y({left}origin\))e(rotated)h(36k;)1054
+524 y(endfor)1054 636 y Fu(Explanan)o(tion.)c Fo(MET)o(AF)n(ONT)c
+Fu(allo)o(ws)d(for)i(sp)q(eci\014cation)h(of)e(the)1004 686
+y(directions)1179 671 y Fp(16)1229 686 y Fn(up)i Fu(=)f(\(0)p
+Fn(;)c Fu(1\))p Fn(;)g(r)q(ig)q(ht)k Fu(=)h(\(1)p Fn(;)7 b
+Fu(0\).)1054 736 y(IMHO,)15 b(with)g(all)f(resp)q(ect)j(the)f
+Fo(MET)o(AF)n(ONT)g Fu(and)f(P)o(ostScript)1004 786 y(programs)g(are)i
+(similar)e(mo)q(dulo)f(some)i(syn)o(tactic)h(sugar.)26 b(Ho)o(w-)1004
+835 y(ev)o(er,)d(the)f(extra)f(p)q(ossibilit)o(y)f(of)g(sp)q(ecifying)h(the)h
+(directions)f(is)1004 885 y(more)d(con)o(v)o(enien)o(t)h(than)f(using)h(con)o
+(trol)f(p)q(oin)o(ts.)33 b(But)19 b(p)q(erhaps)1004 935 y(that)c(is)g(a)g
+(matter)f(of)g(taste,)i(although)e(the)i(handling)e(of)g(con)o(trol)1004
+985 y(p)q(oin)o(ts)g(is)g(p)q(o)o(w)o(erful)f(as)h(B)o(\023)-20
+b(ezier)16 b(himself)c(has)i(sho)o(wn)g(in)f(the)i(past.)1004
+1035 y(F)m(rom)10 b(this)j(I)f(conclude)h(that)f(for)g(these)i(simple)d
+(kinds)h(of)g(pictures)1004 1085 y(w)o(e)i(can)g(as)g(w)o(ell)f(use)i(P)o
+(ostScript)g(straigh)o(ta)o(w)o(a)o(y)m(.)1004 1184 y Fv(Some)g(more)g
+(Graphics)1004 1283 y Fu(Example)h Fd(\(Malb)q(ork)e(windo)o(w\))1004
+1333 y Fu(This)9 b(is)h(all)e(ab)q(out)i(using)f Fe(curveto)p
+Fu(,)g(esp)q(ecially)h(c)o(ho)q(osing)f(suitable)1004 1383
+y(con)o(trol)14 b(p)q(oin)o(ts.)1385 1437 y
+ 4736286 4736286 -2631270 -2631270 2631270 2631270 startTexFig
+1385 1437 a
+%%BeginDocument: malbork.eps
+
+
+45 rotate
+10 0 moveto
+4{20 0 37.5 12.5 25 25 curveto
+ 12.5 37.5 0 20 0 10 curveto
+ 90 rotate}repeat
+
+5 0 moveto
+4{5 35 35 5 0 5 curveto
+ 90 rotate}repeat
+
+36 0 moveto
+0 0 36 0 360 arc
+stroke
+showpage
+%%EndDocument
+ 1385 1437 a
+ endTexFig
+1054 1828 a Fe(\045!PS)21 b(EPS)1054 1878 y(\045\045Title:)f(Malbork)g
+(Window)1054 1927 y(\045\045Creator:)f(cgl)1054 1977 y(\045\045CreationDate:)
+f(May)k(21)f(1996)1054 2027 y(\045\045BoundingBox:)e(-40)i(-40)g(40)g(40)1054
+2077 y(\045\045Pages:)f(1)1054 2127 y(\045\045EndProlog)1054
+2176 y(\045\045Page:)g(1)i(1)1054 2226 y(45)f(rotate)g(10)g(0)h(moveto)1054
+2276 y(4{20)f(0)g(37.5)g(12.5)g(25)h(25)f(curveto)1097 2326
+y(12.5)g(37.5)g(0)h(20)f(0)h(10)f(curveto)1076 2376 y(90)g(rotate)1054
+2425 y(}repeat\045inside)e(lops)i(next)1054 2475 y(5)g(0)h(moveto)1054
+2525 y(4{5)f(35)g(35)h(5)f(0)h(5)f(curveto)1097 2575 y(90)h(rotate)1054
+2625 y(}repeat\045enclosin)o(g)d(circle)i(next)1054 2675 y(36)g(0)h(moveto)
+1054 2724 y(0)f(0)h(36)f(0)h(360)f(arc)1054 2774 y(stroke)f(showpage)p
+1004 2863 600 2 v 952 2897 a Fj(16)1004 2909 y Fs(There)14
+b(is)h(also)f(a)g(quartercircle)e(whic)o(h)i(apart)f(from)h(orien)o(tation)d
+(is)k(dra)o(wn)1004 2950 y(similarly)m(.)-118 3018 y Fl(Draft)10
+b(June)f Ff(25)p Fl(,)i Ff(1996)818 b Fl({4{)2005 3017 y(c)1990
+3018 y Fk(\015)p Fl(cgl)p eop
+%%Page: 5 5
+bop -68 13 a Fu(Explanation.)36 b Fe(translate)18 b Fu(c)o(hanges)j(the)g
+(CTM,)f(with)g(the)-118 63 y(e\013ect)f(that)e(the)h(device)f(co)q(ordinates)
+h(are)g(shifted.)28 b(\(Useful)17 b(for)-118 113 y(use)e(of)e(P)o(ostScript)i
+(alone)e(out)h(of)f(con)o(text.\))-68 163 y Fe(rotate)c Fu(c)o(hanges)i(the)h
+(CTM,)e(and)g(b)q(ecause)j(of)d(b)q(eing)g(an)h(in)o(ter-)-118
+212 y(pretiv)o(e)k(language)f(the)h(v)n(arious)f(lo)q(op)g(tra)o(v)o(ersals)h
+(map)d(the)k Fq(same)-118 262 y Fu(user)f(co)q(ordinates)f(on)g(the)h
+(rotated)f(device)h(co)q(ordinates.)-68 312 y Fk(h)p Fn(number)q
+Fk(if)p Fn(:)7 b(:)g(:)n Fk(g)i Fe(repeat)f Fu(is)h(a)g(lo)q(op)g(to)g(b)q(e)
+h(tra)o(v)o(ersed)g Fk(h)p Fn(number)q Fk(i)-118 362 y Fu(of)j(times.)-68
+412 y Fe(curveto)e Fu(adds)j(a)f(spline)g(to)g(the)g(curren)o(t)i(path)e
+(from)f(the)h(cur-)-118 461 y(ren)o(tp)q(oin)o(t)d(to)g(the)h(last)f(p)q(oin)
+o(t)f(on)h(the)h(stac)o(k.)17 b(The)10 b(\014rst)h(t)o(w)o(o)f(p)q(oin)o(ts)
+-118 511 y(are)k(the)h(so-called)e(con)o(trol)h(p)q(oin)o(ts)g(of)f(the)h
+(spline.)690 496 y Fp(17)-68 561 y Fe(arc)19 b Fu(adds)i(a)f(circular)g(arc)h
+(to)f(the)h(curren)o(t)h(path)e(from)e(the)-118 611 y(curren)o(tp)q(oin)o(t.)
+-68 661 y(The)12 b(details)g(of)f(the)i(argumen)o(ts)e(for)g(the)i(op)q
+(erators)g(are)f(nicely)-118 710 y(do)q(cumen)o(ted)i(in)f(the)i(red)f(b)q(o)
+q(ok.)-118 782 y(Example)i Fd(\(Esc)o(her's)g(imp)q(ossible)c(triangle\))-118
+832 y Fu(This)e(is)f(all)g(ab)q(out)h Fq(wr)n(ong)j Fu(pro)r(jections.)18
+b(Ho)o(w)o(ev)o(er,)10 b(these)i(kinds)d(of)-118 882 y(pictures)k(are)g(in)o
+(triguing)d(and)i(fun.)18 b(I)12 b(consider)h(them)e(w)o(ell-suited)-118
+931 y(to)j(illustrate)f(P)o(ostScript's)i(dra)o(wing)e(capabilities.)263
+985 y
+ 4736286 4736286 -2631270 -2631270 2631270 2631270 startTexFig
+263 985 a
+%%BeginDocument: eschera.eps
+3{25 34 moveto
+ 25 -34 lineto
+ 17 -38.2 lineto
+ 17 20 lineto
+ -17.6 0 lineto
+120 rotate
+}repeat
+stroke
+showpage
+%%EndDocument
+ 263 985 a
+ endTexFig
+-68 1373 a Fe(\045!PS)21 b(EPS)-68 1423 y(\045\045Title:)f(Escher's)g
+(impossible)g(triangle)-68 1473 y(\045\045Creator:)f(cgl)j(\(inspired)41
+b(by)22 b(Guy)f(Shaw\))-68 1523 y(\045\045CreationDate:)40
+b(May)21 b(23)h(1996)-68 1573 y(\045\045BoundingBox:)d(-40)i(-40)g(40)g(40)
+-68 1622 y(\045\045Pages:)f(1)-68 1672 y(\045\045EndProlog)-68
+1722 y(\045\045Page:)g(1)i(1)-68 1772 y(3{25)42 b(34)22 b(moveto)-25
+1822 y(25)g(-34)f(lineto)-25 1871 y(17)h(-38.2)e(lineto)-25
+1921 y(17)i(20)f(lineto)-47 1971 y(-17.6)g(0)h(lineto)-68 2021
+y(120)f(rotate)-68 2071 y(}repeat)f(stroke)h(showpage)-68 2181
+y Fn(5)16 b Fu(p)q(oin)o(ts,)h(the)g(righ)o(t)f(strok)o(e)h(and)g(a)f
+(rotation)g(or)h(t)o(w)o(o,)f(that's)-118 2231 y(it.)i(End)c(of)f(story)m(.)
+-68 2281 y(Ho)o(w)o(ev)o(er,)h(it)f(is)h(all)e(ab)q(out)i(\014nding)g(those)g
+Fn(5)g Fu(p)q(oin)o(ts.)263 2335 y
+ 4736286 4736286 -2631270 -2631270 2631270 2631270 startTexFig
+263 2335 a
+%%BeginDocument: escherb.eps
+25 34 moveto currentpoint
+0 -68 rlineto currentpoint%down
+ -120 rotate
+25 34 lineto%preserve symmetry
+ 120 rotate currentpoint
+17 20 lineto currentpoint
+-17.6 0 lineto currentpoint
+/Courier findfont 8 scalefont setfont
+moveto -5 -3 rmoveto (5) show
+moveto 1 1 rmoveto (4) show
+moveto 2 -5 rmoveto (3) show
+moveto 2 0 rmoveto (2) show
+moveto 2 0 rmoveto (1) show
+stroke
+showpage
+%%EndDocument
+ 263 2335 a
+ endTexFig
+-68 2723 a Fe(\045!PS)21 b(EPS)p -118 2759 600 2 v -170 2793
+a Fj(17)-118 2805 y Fs(Muc)o(h)10 b(similar)g(as)g(in)h(MET)m(AF)o(ONT.)i
+(Cho)q(osing)d(for)g(the)g(inner)g(lop)g(the)g(con-)-118 2845
+y(trol)e(p)q(oin)o(ts)g(in)h(this)g(w)o(a)o(y)g(is)h(b)q(orro)o(w)o(ed)d
+(from)h(Haralam)o(b)q(ous)f(Y)j(\(1995\):)j(Some)-118 2884
+y(MET)m(AF)o(ONT)i(tec)o(hniques.)h(TUGb)q(oat)c Fi(16)p Fs(,)h
+Fi(1)p Fs(,)f(46{53.)17 b(It)c(is)f(also)g(supplied)-118 2924
+y(in)f(the)g(description)d(of)k Fh(curveto)d Fs(in)i(the)g(red)g(b)q(o)q(ok.)
+-118 -55 y Fg(MAPS)g Fn(96)p Fg(.)p Fn(2)1252 b Fq(Par)n(adigms:)19
+b(Just)14 b(a)i(little)d(bit)h(of)h(PostScript)1054 35 y Fe(\045\045Title:)20
+b(Essential)g(stroke)1054 85 y(\045\045Creator:)f(cgl)j(\(inspired)41
+b(by)22 b(Guy)f(Shaw\))1054 134 y(\045\045CreationDate:)d(May)k(23)f(1996)
+1054 184 y(\045\045BoundingBox:)e(-40)i(-40)g(40)g(40)1054
+234 y(\045\045Pages:)f(1)1054 284 y(\045\045EndProlog)1054
+334 y(\045\045Page:)g(0)i(1)1054 383 y(25)43 b(34)21 b(moveto)g(currentpoint)
+1054 433 y(0)43 b(-68)21 b(rlineto)g(currentpoint\045dow)o(n)1097
+483 y(-120)g(rotate)1054 533 y(25)43 b(34)21 b(lineto\045preserve)e(symmetry)
+1119 583 y(120)i(rotate)g(currentpoint)1054 633 y(17)43 b(20)21
+b(lineto)g(currentpoint)1054 682 y(-17.6)g(0)g(lineto)g(currentpoint)1054
+732 y(\045labels)1054 782 y(/Courier)f(findfont)g(8)i(scalefont)e(setfont)
+1054 832 y(moveto)g(-5)i(-3)f(rmoveto)f(\(5\))i(show)1054 882
+y(moveto)e(1)i(1)f(rmoveto)g(\(4\))g(show)1054 931 y(moveto)f(2)i(-5)f
+(rmoveto)g(\(3\))g(show)1054 981 y(moveto)f(2)i(0)f(rmoveto)g(\(2\))g(show)
+1054 1031 y(moveto)f(2)i(0)f(rmoveto)g(\(1\))g(show)1054 1081
+y(stroke)f(showpage)1054 1190 y Fu(Explanation.)h(The)16 b(essen)o(tial)g
+(strok)o(e)g(\014gure)g(also)f(illustrates)1004 1240 y(the)j(in)o(tegration)f
+(of)g(text)i(in)e(this)h(case)g(digits.)29 b Fe(currentpoint)1004
+1290 y Fu(pushes)13 b(the)g(p)q(oin)o(t)f(on)g(the)h(stac)o(k.)18
+b(The)12 b(last)g Fe(moveto)p Fu(-s)f(p)q(op)h(these)1004 1340
+y(co)q(ordinates)j(up.)j Fe(rmoveto)12 b Fu(mo)o(v)o(es)h Fq(r)n(elatively.)
+1054 1400 y Fu(And)f(what)g(ab)q(out)g(their)g(relationships,)g(and)g(what)f
+(ab)q(out)h(the)1004 1449 y(minim)o(al)e(information)h(to)j(b)q(e)h(prescrib)
+q(ed?)1054 1499 y(Lo)q(oking)8 b(more)h(closely)h(it)f(turns)i(out)e(that)h
+Fq(only)k Fu(the)c(\014rst)g(p)q(oin)o(t)1004 1549 y(is)16
+b(all)f(that)h(is)g(needed.)25 b(The)17 b(rest)g(is)f(implicit)d(to)j(the)h
+(nature)f(of)1004 1599 y(the)e(\014gure.)1188 1584 y Fp(18)1054
+1668 y Fe(\045!PS)21 b(EPS)1054 1718 y(\045\045Title:)f(Escher's)g
+(Impossible)g(triangle)g(II)1054 1768 y(\045\045Creator:)f(cgl)1054
+1818 y(\045\045CreationDate:)f(May)k(23)f(1996)1054 1868 y
+(\045\045BoundingBox:)e(-40)i(-40)g(40)g(40)1054 1918 y(\045\045Pages:)f(1)
+1054 1967 y(\045\045EndProlog)1054 2017 y(\045\045Page:)g(1)i(1)1054
+2067 y(\045Parameterized)d(over)i(p1)1054 2117 y(/point)f({25)h(34})h
+(def\045note)e(x<y)1054 2167 y(\045)1054 2216 y(3{point)g(moveto)1054
+2266 y(currentpoint)f(neg)i(lineto\045down)1097 2316 y(-120)g(rotate)1054
+2366 y(point)42 b(lineto\045preserve)19 b(symmetry)1119 2416
+y(120)i(rotate)1054 2465 y(currentpoint)e(2)j(div)f(neg)g(lineto)1054
+2515 y(currentpoint)e(3)j(sqrt)f(mul)g(sub)g(0)h(lineto)1054
+2565 y(120)f(rotate)1054 2615 y(}repeat)f(stroke)h(showpage)1054
+2724 y Fu(Explanation.)36 b Fe(currentpoint)18 b Fu(yields)i(the)h(co)q
+(ordinates)f(of)1004 2774 y(the)c(curren)o(t)h(p)q(oin)o(t)e(of)g(the)h(path)
+f(on)g(the)h(stac)o(k.)23 b(The)16 b(other)g(op-)1004 2824
+y(erations)21 b(do)f(what)g(their)h(names)e(suggest.)39 b(The)21
+b(temp)q(orarily)p 1004 2861 V 952 2895 a Fj(18)1004 2907 y
+Fs(Of)13 b(course)e(one)g(can)h(also)f(think)g(of)h(other)f(equiv)n(alen)o(t)
+f(parameters)f(lik)o(e)j(size)1004 2946 y(and)f(thic)o(kness.)-118
+3014 y Fl(Draft)f(June)f Ff(25)p Fl(,)i Ff(1996)818 b Fl({5{)2005
+3013 y(c)1990 3014 y Fk(\015)p Fl(cgl)p eop
+%%Page: 6 6
+bop -118 13 a Fu(c)o(hange)15 b(of)f(the)h(CTM)g(within)f(the)h(lo)q(op)f
+(expresses)j(the)e(rotation)-118 63 y(symmetry)d(relation)h(b)q(et)o(w)o(een)
+j(p)q(oin)o(ts)d Fn(1)h Fu(and)g Fn(3)p Fu(.)-118 139 y(Example)i
+Fd(\(Ben)o(tley's)f(p)q(olygon\))-118 190 y Fu(This)10 b(co)q(de)i(is)e(all)g
+(ab)q(out)g(a)h(double)f(lo)q(op)g(and)g(using)h(the)g(lo)q(op)f(v)n(ari-)
+-118 239 y(able)i(from)f(the)i(stac)o(k,)f(next)h(to)g(using)f(the)h
+Fe(gsave)e Fu(and)i Fe(grestore)-118 289 y Fu(adv)n(an)o(tageously)m(.)271
+346 y
+ 4499462 4736286 -6578176 -6907084 6578176 6907084 startTexFig
+271 346 a
+%%BeginDocument: bentley.eps
+10{1 1 10{100 0 moveto
+ gsave
+ dup 36 mul rotate
+ 100 0 lineto stroke
+ grestore
+ } for
+ 36 rotate
+} repeat
+showpage
+%%EndDocument
+ 271 346 a
+ endTexFig
+-68 740 a Fe(\045!PS)21 b(EPS)-68 789 y(\045\045Title:)f(Bentley's)g(double)g
+(loop)-68 839 y(\045\045Creator:)f(cgl)-68 889 y(\045\045CreationDate:)f(May)
+k(30)f(1996)-68 939 y(\045\045BoundingBox:)e(-100)i(-105)42
+b(100)21 b(105)-68 989 y(\045\045EndProlog)-68 1038 y(10{1)g(1)g(9{100)g(0)h
+(moveto)128 1088 y(gsave)128 1138 y(36)f(mul)g(rotate\045loopcount*36)128
+1188 y(100)g(0)h(lineto)e(stroke)128 1238 y(grestore)-3 1288
+y(})i(for)-3 1337 y(36)f(rotate)-68 1387 y(}repeat)f(showpage)-68
+1500 y Fu(Explanan)o(tion.)d Fe(gsave)c Fu(and)h Fe(grestore)e
+Fu(are)j(needed)g(to)f(dra)o(w)-118 1550 y(lo)q(cally)m(,)c(that)j(is)f(at)h
+(the)g(end)g(the)g(graphics)g(state|curren)o(tp)q(oin)o(t,)-118
+1600 y(curren)o(tpath)k(and)f(CTM|is)f(restored)j(with)d(the)i(v)n(alues)e
+(at)h(the)-118 1650 y(b)q(eginning.)h Fn(1)d(1)f(9)g Fu(stand)h(for)g(b)q
+(egin)o(v)n(alue)f(step)h(and)g(endv)n(alue)f(of)-118 1700
+y(the)h Fe(for)g Fu(coun)o(ter.)-118 1776 y(Example)i Fd(\(Another)f(double)f
+(lo)q(op\))-118 1826 y Fu(A)h(set)h(of)e(nested)j(p)q(olygons)d(pro)o(vide)h
+(also)f(a)h(double)g(lo)q(op)f(situa-)-118 1876 y(tion.)263
+1932 y
+ 4736286 4736286 -6578176 -6578176 6578176 6578176 startTexFig
+263 1932 a
+%%BeginDocument: polygon.eps
+10 10 100{dup 0 moveto
+ 5{72 rotate
+ dup 0 lineto
+ }repeat
+}for stroke
+showpage
+%%EndDocument
+ 263 1932 a
+ endTexFig
+-68 2327 a Fe(\045!PS)21 b(EPS)g(Nested)f(pentagons)-68 2376
+y(\045\045Title:)g(Pentagons)-68 2426 y(\045\045Creator:)f(cgl)-68
+2476 y(\045\045CreationDate:)f(June)j(17)h(1996)-68 2526 y
+(\045\045BoundingBox:)d(-100)i(-100)g(100)g(100)-68 2576 y(\045\045Pages:)f
+(1)-68 2625 y(\045\045EndProlog)-68 2675 y(\045\045Page:)g(1)i(1)-68
+2725 y(10)f(10)g(100{dup)g(0)g(moveto)-3 2775 y(5{72)g(rotate)41
+2825 y(dup)g(0)g(lineto)41 2874 y(}repeat)-68 2924 y(}for)g(stroke)f
+(showpage)-118 -55 y Fg(MAPS)11 b Fn(96)p Fg(.)p Fn(2)1252
+b Fq(Par)n(adigms:)19 b(Just)14 b(a)i(little)d(bit)h(of)h(PostScript)1004
+124 y Fu(Example)h Fd(\(P)o(olygons)e(with)f(splines)h(as)g(sides\))1004
+174 y Fu(This)20 b(generalization)f(of)g(p)q(olygons)h(w)o(as)f(in)o(tro)q
+(duced)i(b)o(y)f(Jac)o(k-)1004 224 y(o)o(wski)c(at)g(EuroT)1284
+232 y(E)1308 224 y(X)g Fn(95)p Fu(.)26 b(A)17 b(sp)q(ecial)f(case)i(of)e
+Fo(MET)o(AF)n(ONT)p Fu('s)h(in-)1004 274 y(terpath)e(functionalit)o(y)d(is)i
+(sho)o(wn)g(en-passan)o(t.)1385 330 y
+ 4736286 4736286 -6578176 -6578176 6578176 6578176 startTexFig
+1385 330 a
+%%BeginDocument: polygonii.eps
+/r 100 def
+/r1 {r .25 mul} def
+/r3 {r .75 mul} def
+25{r 0 moveto
+ 4{r3 r3 r1 r1 0 r curveto
+ 90 rotate
+ }repeat
+ .9 .9 scale
+}repeat
+stroke showpage
+%%EndDocument
+ 1385 330 a
+ endTexFig
+1054 724 a Fe(\045!PS)21 b(EPS)g(Nested)f(`squares')1054 774
+y(\045\045Title:)g(polygon.eps)f(II)1054 824 y(\045\045Creator:)g(cgl)1054
+874 y(\045\045CreationDate:)f(June)j(17)h(1996)1054 924 y
+(\045\045BoundingBox:)d(-100)i(-100)g(100)g(100)1054 973 y(\045\045Pages:)f
+(1)1054 1023 y(\045\045EndProlog)1054 1073 y(\045\045Page:)g(1)i(1)1054
+1123 y(/r)f(100)g(def)1054 1173 y(/r1)g({r)g(.25)g(mul})g(def)1054
+1222 y(/r3)g({r)g(.75)g(mul})g(def)1054 1272 y(25{r)g(0)g(moveto)1119
+1322 y(4{r3)g(r3)g(r1)h(r1)f(0)h(r)f(curveto)1163 1372 y(90)g(rotate)1163
+1422 y(}repeat)1119 1471 y(.9)h(.9)f(scale)1054 1521 y(}repeat)f(stroke)h
+(showpage)1004 1660 y Fu(Example)16 b Fd(\(Barn)f(windo)o(w\))1004
+1711 y Fu(This)f(is)f(all)g(ab)q(out)h(pla)o(ying)e(with)i(circles)h(and)e
+(circular)h(arcs.)1995 1696 y Fp(19)1385 1767 y
+ 4736286 4736286 -2631270 -2631270 2631270 2631270 startTexFig
+1385 1767 a
+%%BeginDocument: barnwindowii.eps
+/l 36 def
+/r {l 22.5 sin mul} def
+/m {l 22.5 cos mul} def
+8{r .5 mul 0 moveto
+ l 0 lineto
+ currentpoint %begin circular arc
+ 22.5 rotate m 0%center
+ r %radius
+ -90 90 arc
+ 22.5 rotate
+}repeat
+/rin {r .5 mul} def
+rin 0 moveto
+0 0 rin 0 360 arc
+/rout {r m add} def
+rout 0 moveto
+0 0 rout 0 360 arc
+/rin {r .25 mul} def
+22.5 rotate
+8{m rin add 0 moveto
+ m 0 rin 0 360 arc
+ 45 rotate
+}repeat
+stroke
+showpage
+%%EndDocument
+ 1385 1767 a
+ endTexFig
+1054 2161 a Fe(\045!PS)21 b(EPS)1054 2211 y(\045\045Title:)f(Barn)h(Window)f
+(II)1054 2261 y(\045\045Creator:)f(cgl)1054 2310 y(\045\045CreationDate:)f
+(May)k(29)f(1996)1054 2360 y(\045\045BoundingBox:)e(-45)i(-45)g(45)g(45)1054
+2410 y(\045\045Pages:)f(1)1054 2460 y(\045\045EndProlog)1054
+2510 y(\045\045Page:)g(1)i(1)1054 2560 y(/l)f(36)h(def)1054
+2609 y(/r)f({l)h(22.5)e(sin)i(mul})f(def)1054 2659 y(/m)g({l)h(22.5)e(cos)i
+(mul})f(def)1054 2709 y(8{r)g(.5)g(mul)g(0)44 b(moveto)1097
+2759 y(l)22 b(0)g(lineto)1097 2809 y(currentpoint)63 b(\045begin)21
+b(circular)f(arc)p 1004 2858 600 2 v 952 2892 a Fj(19)1004
+2904 y Fs(The)8 b(\014rst)g(example)e(in)i(the)f(blue)g(b)q(o)q(ok)g
+(collection)f(pro)o(vides)g(a)i(similar)f(picture)1004 2946
+y(with)k(gradually)e(c)o(hanging)g(scales)i(of)g(grey)m(.)-118
+3014 y Fl(Draft)f(June)f Ff(25)p Fl(,)i Ff(1996)818 b Fl({6{)2005
+3013 y(c)1990 3014 y Fk(\015)p Fl(cgl)p eop
+%%Page: 7 7
+bop -25 13 a Fe(22.5)21 b(rotate)g(m)g(0\045center)-25 63 y(r)305
+b(\045radius)-25 113 y(-90)21 b(90)h(arc)-25 163 y(22.5)f(rotate)-68
+212 y(}repeat)-68 262 y(\045inner)f(circle)-68 312 y(/rin)h({r)g(.5)g(mul})g
+(def)-68 362 y(rin)g(0)43 b(moveto)-68 412 y(0)21 b(0)h(rin)f(0)h(360)f(arc)
+-68 461 y(\045outer)f(circle)-68 511 y(/rout)g({r)i(m)f(add})g(def)-68
+561 y(rout)g(0)43 b(moveto)-68 611 y(0)21 b(0)h(rout)f(0)g(360)h(arc)-68
+661 y(\045extra)e(circles)-68 710 y(/rin)h({r)g(.25)g(mul})g(def)-68
+760 y(22.5)g(rotate)-68 810 y(8{m)g(rin)g(add)g(0)h(moveto)-25
+860 y(m)g(0)f(rin)h(0)f(360)g(arc)-25 910 y(45)h(rotate)-68
+960 y(}repeat)e(stroke)h(showpage)-68 1075 y Fu(I'm)9 b(sure)k(I'll)d(come)h
+(bac)o(k)h(some)e(da)o(y)h(and)h(lo)q(ok)e(again)h(through)-118
+1125 y(this)j(windo)o(w,)e(but)j(then)f(pastel)g(colored.)-118
+1205 y(Example)i Fd(\(Bak)o(er's)f(inspiration\))263 1227 y
+ 4736286 4736286 -5262540 -5262540 5262540 5262540 startTexFig
+263 1227 a
+%%BeginDocument: baker.eps
+4{%one quarter
+-15 25 moveto
+0 -10 rlineto
+60 0 rlineto
+0 -30 rlineto
+10 0 rlineto
+0 40 rlineto
+-70 0 rlineto
+0 10 rlineto
+80 0 rlineto
+0 -60 rlineto
+-30 0 rlineto
+0 10 rlineto
+10 0 rlineto
+35 -25 moveto
+0 -10 rlineto
+20 0 rlineto
+10 10 rlineto
+45 15 moveto
+10 10 rlineto
+90 rotate
+}repeat
+stroke
+/Courier findfont 10 scalefont setfont
+-55 -75 moveto
+(Courtesy Woody Baker)show
+showpage
+%%EndDocument
+ 263 1227 a
+ endTexFig
+-68 1601 a Fu(This)g(example)g(is)g(similar)f(to)h(Esc)o(her's)j(imp)q
+(ossible)c(triangle.)-118 1650 y(Find)f(the)i(essen)o(tial)f(strok)o(e)h(and)
+f(rotate.)-68 1729 y Fe(\045!PS)21 b(EPS)-68 1779 y(\045\045Creator:)e(cgl)j
+(\(inspired)41 b(by)22 b(Woody)e(Baker\))-68 1828 y(\045\045CreationDate:)e
+(May)k(1996)-68 1878 y(\045\045BoundingBox:)d(-80)i(-80)g(80)g(80)-68
+1928 y(\045\045Pages:)f(1)-68 1978 y(\045\045EndProlog)-68
+2028 y(\045\045Page:)g(1)i(1)-68 2078 y(4{-15)e(25)i(moveto)19
+2127 y(0)f(-10)h(rlineto)-3 2177 y(60)f(0)h(rlineto)19 2227
+y(0)f(-30)h(rlineto)-3 2277 y(10)f(0)h(rlineto)19 2327 y(0)f(40)h(rlineto)-25
+2376 y(-70)f(0)h(rlineto)19 2426 y(0)f(10)h(rlineto)-3 2476
+y(80)f(0)h(rlineto)19 2526 y(0)f(-60)h(rlineto)-25 2576 y(-30)f(0)h(rlineto)
+19 2625 y(0)f(10)h(rlineto)-3 2675 y(10)f(0)h(rlineto)-68 2725
+y(\045)-3 2775 y(35)f(-25)h(moveto)19 2825 y(0)f(-10)h(rlineto)-3
+2875 y(20)f(0)h(rlineto)-3 2924 y(10)f(10)h(rlineto)-118 -55
+y Fg(MAPS)11 b Fn(96)p Fg(.)p Fn(2)1252 b Fq(Par)n(adigms:)19
+b(Just)14 b(a)i(little)d(bit)h(of)h(PostScript)1054 35 y Fe(\045)1119
+85 y(45)22 b(15)f(moveto)1119 134 y(10)h(10)f(rlineto)1054
+184 y(90)g(rotate)1054 234 y(}repeat)f(stroke)1054 284 y(\045)1054
+334 y(/Courier)g(findfont)g(10)h(scalefont)f(setfont)1054 383
+y(-55)h(-75)g(moveto)1054 433 y(\(Courtesy)f(Woody)g(Baker\)show)1054
+483 y(showpage)1004 624 y Fu(Example)c Fd(\(Romano)o(vsky's)c(real)h(Esc)o
+(her\))1385 642 y
+ 4736286 4736286 -13156352 -13156352 13156352 13156352 startTexFig
+1385 642 a
+%%BeginDocument: jvr.eps
+/rl{rlineto}def % to reduce the code
+/FS {gsave setgray fill grestore stroke}def
+ % gsave ... grestore are used to save the graphic environment
+ % it is necessary if you want to use the current path several
+ % times, as here: to fill and to stroke
+/s3 0.75 sqrt def /unit 40 def
+ % Two constants, 'unit' defines the size of construction
+/U { unit mul 0 exch rl} def
+ % Verical line for several units
+/R { unit mul % Transfer the number of units to length
+ dup % Copy it
+ s3 mul % Calculate X-offset
+ exch % Hide it
+ 0.5 mul % Calculate Y-offset
+ rl} def % Draw the line with the given offset pair
+/L { unit mul dup s3 mul neg % neg is the only modificaion
+ exch 0.5 mul rl}def
+ % Right and left lines for several lines
+/M{ s3 unit mul 0.5 unit mul translate -120 rotate} def
+ % Rotation of the picture to scan the vertices of the central
+ % triangle
+/P1{ 0 0 moveto 2 R -1 L -2 U 4 R -1 U -9 R 4 U -1 L -2 U
+ 3 R 4 U -4 R 3 U -1 L -2 U -1 L} def
+ % Sorry, only copying the source Escher draft
+ % and no own imagination
+ % Three parts of the picture are made with the same procedure
+P1 0.6 FS M
+P1 0.8 FS M
+P1 0.95 FS M
+showpage
+%%EndDocument
+ 1385 642 a
+ endTexFig
+1054 1012 a Fu(Grey)c(scales)h(can)g(b)q(e)g(obtained)f(simply)e(via)h
+Fk(h)p Fn(number)q Fk(i)i Fe(setgray)p Fu(,)1004 1062 y(with)h
+Fk(h)p Fn(number)q Fk(i)h(2)f Fu([0)p Fn(;)c Fu(1].)15 b(0)c(denotes)h(blac)o
+(k)f(and)g(1)g(is)g(white.)17 b(The)1004 1112 y(idea)d(is)g(to)g(construct)i
+(the)e(essen)o(tial)h(path|the)f(strok)o(e)h(denoted)1004 1162
+y(b)o(y)f(a)f(grey)h(scale|and)g(to)g(use)h(this)f Fn(3)f Fu(times.)1004
+1266 y Fv(Math)i(graphs)1004 1343 y Fu(In)e(\(L)1085 1336 y
+Fg(A)1109 1343 y Fu(\)T)1148 1351 y(E)1172 1343 y(X)g(do)q(cumen)o(ts)g(it)g
+(is)g(a)g(problem)1688 1328 y Fp(20)1736 1343 y Fu(ho)o(w)g(to)g(include)g
+(ac-)1004 1393 y(curate)i(graphs)f(of)f(mathematical)d(functions.)18
+b(Because)e(of)d(P)o(ost-)1004 1443 y(Script's)i(arithmetic)e(and)h(graphics)
+h(capabilities)e(it)i(is)f(handy)g(to)1004 1493 y(use)h(P)o(ostScript.)1004
+1570 y(Example)h Fd(\(Sine)e(function\))1264 1589 y
+ 8572672 4736286 -13156352 -7235993 13156352 7235993 startTexFig
+1264 1589 a
+%%BeginDocument: sine.eps
+/Courier findfont 15 scalefont setfont
+-200 0 moveto 200 0 lineto
+-15 -15 rmoveto (x) show
+0 -110 moveto 0 110 lineto
+-35 -10 rmoveto (sin) show
+-180 0 moveto
+-180 10 180{%from step to
+ dup sin 100 mul%(x, 100sin x)
+ lineto
+} for
+stroke
+showpage
+%%EndDocument
+ 1264 1589 a
+ endTexFig
+1054 1985 a Fe(\045!PS)21 b(EPS)1054 2034 y(\045\045Title:)f(Sine)h(function)
+1054 2084 y(\045\045Creator:)e(cgl)j(\(inspired)41 b(by)22
+b(Batagelj\))1054 2134 y(\045\045CreationDate:)c(May)k(27)f(1996)1054
+2184 y(\045\045BoundingBox:)e(-200)i(-110)42 b(200)22 b(110)1054
+2234 y(\045\045EndProlog)1054 2283 y(/Courier)e(findfont)g(15)h(scalefont)f
+(setfont)1054 2333 y(\045figure)g(scaled)h(by)g(100)1054 2383
+y(\045x-axes)f(and)h(label)1054 2433 y(-200)g(0)g(moveto)g(200)g(0)h(lineto)
+1054 2483 y(-15)f(-15)g(rmoveto)f(\(x\))i(show)1054 2533 y(\045y-axes)e(and)h
+(label)1054 2582 y(0)g(-110)g(moveto)g(0)g(110)h(lineto)1054
+2632 y(-35)f(-10)g(rmoveto)f(\(sin\))h(show)1054 2682 y(\045function)1054
+2732 y(-180)g(0)g(moveto)p 1004 2773 600 2 v 952 2807 a Fj(20)1004
+2819 y Fs(Comm)o(unicated)8 b(b)o(y)j(Nico)g(T)m(emme.)j(He)e(solv)o(ed)e
+(the)g(problem)f(b)o(y)i(doing)f(the)1004 2861 y(calculations)h(in)j(P)m
+(ASCAL.)i(F)m(or)e(adv)n(anced)e(manipulat)o(ion)o(s)g(Mathematica)1004
+2904 y(or)e(Mapple)g(are)g(generally)e(used)h(where)h(the)g(resulting)e(EPS)j
+(is)f(pasted)f(up)i(in)1004 2946 y(the)g(\(L)1090 2940 y Fr(A)1112
+2946 y Fs(\)T)1145 2952 y(E)1165 2946 y(X)h(script)f(as)g(usual.)-118
+3014 y Fl(Draft)f(June)f Ff(25)p Fl(,)i Ff(1996)818 b Fl({7{)2005
+3013 y(c)1990 3014 y Fk(\015)p Fl(cgl)p eop
+%%Page: 8 8
+bop -68 13 a Fe(-180)21 b(10)g(180{\045from)f(step)h(to)-3
+63 y(dup)g(sin)g(100)h(mul\045\(x,)e(100sin)g(x\))-3 113 y(lineto)-68
+163 y(}for)h(stroke)f(showpage)-68 309 y Fu(The)14 b(in)o(v)o(ok)o(e)f(migh)o
+(t)f(read)i(as)g(follo)o(ws.)-68 417 y Fe($$\\psfig{file=si)o(ne.ep)o(s,hei)o
+(ght=)o(1in}$)o($)-118 681 y Fv(T)l(ext)i(set)f(along)f(curv)o(ed)h(paths)
+-118 806 y Fu(A)20 b(teaser.)40 b(With)20 b(the)h(adv)o(en)o(t)f(of)g
+(scalable)g(and)h(rotationable)-118 856 y(outline)13 b(fon)o(ts)h(this)g(is)g
+(p)q(ossible)g(to)q(o.)-118 982 y(Example)i Fd(\(Along)e(a)f(circle\))14
+1064 y
+ 12598512 4736286 -6578176 3289088 6578176 8222720 startTexFig
+14 1064 a
+%%BeginDocument: textalongarc.eps
+/Courier findfont 10 scalefont setfont
+/text (happybirthday) def
+60 rotate
+0 1 12{0 100 moveto
+ dup%double loop var
+ text exch 1 getinterval show
+ -10 rotate
+}for
+stroke
+showpage
+%%EndDocument
+ 14 1064 a
+ endTexFig
+-68 1540 a Fe(\045!PS)21 b(EPS)-68 1590 y(\045\045Title:)f(Typesetting)f
+(along)i(arcs)-68 1640 y(\045\045Creator:)e(cgl)-68 1689 y
+(\045\045CreationDate:)f(June)j(4)h(1996)-68 1739 y(\045\045BoundingBox:)d
+(-100)i(50)g(100)g(125)-68 1789 y(\045\045Pages:)f(1)-68 1839
+y(\045\045EndProlog)-68 1889 y(\045\045Page:)g(1)i(1)-68 1938
+y(/Courier)e(findfont)g(10)h(scalefont)f(setfont)-68 1988 y(/text)g
+(\(happybirthday\))f(def)-68 2038 y(50)i(rotate)-68 2088 y(0)g(1)h(12{0)f
+(100)g(moveto)-25 2138 y(text)g(exch)g(1)h(getinterval)d(show)-25
+2188 y(-10)i(rotate)-68 2237 y(}for)g(stroke)f(showpage)-68
+2383 y Fu(Joseph)10 b(Romano)o(vsky)d(comm)o(unicated)g(that)i
+Fe(kshow)p Fu(|k)o(erning)-118 2433 y(\(and)i(more)e(general)i(p)q
+(ositioning\))f(under)h(user)h(con)o(trol|is)e(a)o(v)n(ail-)-118
+2483 y(able)i(whic)o(h)g(allo)o(ws)f(a)h(general)g(def)h(to)f(b)q(e)h
+(executed)h(b)q(et)o(w)o(een)f(t)o(w)o(o)-118 2533 y(c)o(haracters)j(of)d(a)g
+(string.)-118 2658 y(Example)j Fd(\(Along)e(a)f(spiral\))-118
+2725 y Fu(The)i(blue)g(b)q(o)q(ok)f(pro)o(vides)h(an)f(example)f(of)h(t)o(yp)
+q(esetting)i(along)d(a)-118 2775 y(path|a)e(quotation)h(of)f(W)m(o)q(o)q(dy)g
+(Allen|where)i(the)g(path)f(accen-)-118 2825 y(tuates)j(his)e(\014lmmak)o(er)
+e(profession.)18 b(The)c(example)f(b)q(elo)o(w)g(sho)o(ws)-118
+2875 y(a)g(nice)g(e\013ect)i(with)d(little)g(kno)o(wledge)h(of)f(P)o
+(ostScript,)i(essen)o(tially)-118 2924 y(the)g(use)h(of)e Fe(kshow)p
+Fu(.)-118 -55 y Fg(MAPS)e Fn(96)p Fg(.)p Fn(2)1252 b Fq(Par)n(adigms:)19
+b(Just)14 b(a)i(little)d(bit)h(of)h(PostScript)1140 39 y
+ 12498534 10525081 -6578176 -6578176 5920358 3946905 startTexFig
+1140 39 a
+%%BeginDocument: textalongspiral.eps
+/Courier findfont 20 scalefont setfont
+gsave
+-100 0 moveto 50 rotate
+{-10 rotate 3 0 rmoveto .98 .98 scale}
+(Olga Grineva my charming
+ St Peterburg hostess)kshow
+stroke
+grestore
+500 100 translate
+/l 36 def
+/r {l 22.5 sin mul} def
+/m {l 22.5 cos mul} def
+8{r .5 mul 0 moveto
+ l 0 lineto
+ currentpoint %begin circular arc
+ 22.5 rotate m 0%center
+ r %radius
+ -90 90 arc
+ 22.5 rotate
+}repeat
+/rin {r .5 mul} def
+rin 0 moveto
+0 0 rin 0 360 arc
+/rout {r m add} def
+rout 0 moveto
+0 0 rout 0 360 arc
+/rin {r .25 mul} def
+22.5 rotate
+8{m rin add 0 moveto
+ m 0 rin 0 360 arc
+ 45 rotate
+}repeat
+stroke
+showpage
+showpage
+%%EndDocument
+ 1140 39 a
+ endTexFig
+1054 797 a Fe(\045!PS)21 b(EPS)1054 847 y(\045\045Title:)f(Text)h(along)g
+(spiral)1054 897 y(\045\045Creator:)e(J.V.)i(Romanovsky)1054
+947 y(\045\045BoundingBox:)e(-100)i(-90)g(60)g(70)1054 997
+y(\045\045EndProlog)1054 1046 y(/Courier)f(findfont)g(20)h(scalefont)f
+(setfont)1054 1096 y(-100)h(0)g(moveto)g(50)g(rotate)1054 1146
+y({-10)g(rotate)f(3)i(0)f(rmoveto)g(.98)g(.98)g(scale})1076
+1196 y(\(Olga)f(Grineva)h(my)g(charming)1097 1246 y(St)h(Peterburg)e
+(hostess\)kshow)1054 1295 y(showpage)1004 1433 y Fu(Example)c
+Fd(\(Seals\))1004 1482 y Fu(The)k(problem)f(has)h(b)q(een)h(discussed)h(b)o
+(y)e(Ho)q(enig)g(at)f(EuroT)2012 1490 y(E)2036 1482 y(X)1004
+1532 y Fn(92)p Fu(,)g(and)f(Zlatu)n(\024)-19 b(sk)n(a)18 b(at)h(EuroT)1501
+1540 y(E)1524 1532 y(X)g Fn(95)p Fu(,)g(b)q(oth)f(biased)h(b)o(y)f
+Fo(MET)o(A)p Fu(-)1004 1582 y Fo(F)n(ONT)p Fu(.)10 b(P)o(ostScript)i(alone)e
+(is)g(suited)h(to)q(o)f(with)h(an)f(o)o(v)o(erall)f(simpler)1004
+1632 y(pro)q(cess.)35 b(Com)o(bining)16 b(t)o(w)o(o)i(earlier)h(supplied)g
+(examples)f(yields)1004 1682 y(Zlatu)n(\024)-19 b(sk)n(a's)13
+b(seal)h(in)g(principle.)1498 1667 y Fp(21)1054 1756 y Fe(\045!PS)21
+b(EPS)1054 1806 y(\045\045Title:)f(Seal,)h(in)g(principle)1054
+1856 y(\045\045Creator:)e(cgl)1054 1906 y(\045\045CreationDate:)f(June)j(6)h
+(1996)1054 1956 y(\045\045BoundingBox:)d(-110)i(-45)g(110)g(100)1054
+2006 y(\045\045Pages:)f(1)1054 2055 y(\045\045EndProlog)1054
+2105 y(\045\045Page:)g(1)i(1)1054 2155 y(\045150)f(650)g(translate)1054
+2205 y(/Courier)f(findfont)g(10)h(scalefont)f(setfont)1054
+2255 y(/text)h(\(happy)f(postscripting)f(to)j(you\))f(def)1054
+2304 y(/r)g(100)g(def)1054 2354 y(gsave)1119 2404 y(90)h(rotate)e(\045begin)h
+(orientation)1119 2454 y(0)h(r)f(moveto\045begin)f(point)1054
+2504 y({-7.04)g(rotate)h(0)g(r)h(moveto})e(text)h(kshow)1054
+2553 y(grestore\045next)e(the)i(central)f(Escher)1054 2603
+y(3{25)43 b(34)21 b(moveto)1097 2653 y(25)h(-34)f(lineto)p
+1004 2692 600 2 v 952 2727 a Fj(21)1004 2738 y Fs(The)c(blue)f(b)q(o)q(ok)g
+(also)g(pro)o(vides)f(a)i(seal|Symphon)n(y)d(No.)p Fi(9)p Fs(|but)i(that)g
+(is)1004 2780 y(more)c(complex)f(and)h(ipso)h(facto)f(requires)f(more)h(kno)o
+(wledge)g(of)g(P)o(ostScript)1004 2821 y(to)g(understand)d(what)j(is)g(going)
+f(on,)h(IMHO,)h(with)f(all)g(resp)q(ect.)j(T)m(o)e(set)f(this)1004
+2863 y(p)q(oster)h(from)g(the)h(blue)g(b)q(o)q(ok)f(is)h(no)g(more)g
+(di\016cult)f(than)g(the)h(use)g(of)g Fh(arc)p Fs(,)1004 2904
+y(ho)o(w)o(ev)o(er.)f(My)d(example)e(giv)o(es)h(y)o(ou)g(the)g(feeling)f
+(that)h(y)o(ou)g(understand)d(what)1004 2946 y(is)11 b(going)g(on,)f(I)i(hop)
+q(e.)-118 3014 y Fl(Draft)e(June)f Ff(25)p Fl(,)i Ff(1996)818
+b Fl({8{)2005 3013 y(c)1990 3014 y Fk(\015)p Fl(cgl)p eop
+%%Page: 9 9
+bop -25 13 a Fe(17)22 b(-38.2)e(lineto)-25 63 y(17)i(20)f(lineto)-47
+113 y(-17.6)g(0)h(lineto)-68 163 y(120)f(rotate)-68 212 y(}repeat)f(stroke)h
+(showpage)33 331 y
+ 12006484 7104430 -7235993 -2631270 7235993 5920358 startTexFig
+33 331 a
+%%BeginDocument: seal.eps
+/Courier findfont 10 scalefont setfont
+/text (happy postscripting to you) def
+/r 100 def
+gsave
+ 90 rotate %begin orientation
+ 0 r moveto%begin point
+{-7.04 rotate 0 r moveto} text kshow
+grestore
+3{25 34 moveto
+ 25 -34 lineto
+ 17 -38.2 lineto
+ 17 20 lineto
+ -17.6 0 lineto
+120 rotate
+}repeat
+stroke
+showpage
+%%EndDocument
+ 33 331 a
+ endTexFig
+-68 850 a Fu(Remark.)28 b(The)18 b(di\013erence)i(of)d(fon)o(ts)h(in)f(the)i
+(main)d(text)i(and)-118 900 y(that)13 b(used)g(b)o(y)g(P)o(ostScript)h(is)e
+(no)h(longer)g(there)h(when)f(P)o(ostScript)-118 950 y(fon)o(ts)j(are)h(used)
+g(throughout,)f(b)q(e)h(it)f(the)h(P)o(ostScript)g(v)o(ersion)f(of)-118
+999 y(the)e(CM)g(family)m(.)-118 1076 y(Example)i Fd(\(Gurari's)e(squares\))
+50 1093 y
+ 11461808 4736286 -13156352 -2631270 13156352 8222720 startTexFig
+50 1093 a
+%%BeginDocument: gurarisq.eps
+/r 50 def
+0 0 moveto 90 rotate
+50{r 0 rmoveto
+ 1 1 4{0 r rlineto
+ 90 rotate}for
+ -30 rotate
+ .9 .9 scale
+}repeat
+stroke showpage
+%%EndDocument
+ 50 1093 a
+ endTexFig
+-68 1487 a Fe(\045!PS)21 b(Gurari)f(squares)-68 1537 y(\045\045BoundingBox:)f
+(-200)i(-110)42 b(200)21 b(110)-68 1586 y(\045\045Creator:)e(cgl)-68
+1636 y(\045\045CreationDate:)f(June)j(20)h(1996)-68 1686 y(\045\045EndProlog)
+-68 1736 y(/r)f(22)g(def)-68 1786 y(/square)f({1)h(1)h(4{0)f(r)h(rlineto)128
+1835 y(90)f(rotate}for})f(def)-68 1885 y(0)h(0)h(moveto)e(90)i(rotate)-68
+1935 y(50{r)f(0)g(rmoveto)g(square)-3 1985 y(-30)g(rotate)g(.9)g(.9)h(scale)
+-68 2035 y(}repeat)e(stroke)h(showpage)-118 2174 y Fu(Example)16
+b Fd(\(Gurari's)e(ABC\))-118 2224 y Fu(V)m(ery)g(nice)g(this)g(suggestion)g
+(of)g(motion.)247 2281 y
+ 5257277 7104430 0 -2960179 6578176 5920358 startTexFig
+247 2281 a
+%%BeginDocument: gurariabc.eps
+/Times-Bold findfont 45 scalefont setfont
+-40 rotate
+1 -.03 0{setgray
+ 0 0 moveto
+ (ABC) show
+ 3 rotate
+ } for
+0 0 moveto -4 rotate
+1 setgray (ABC) show
+showpage
+%%EndDocument
+ 247 2281 a
+ endTexFig
+-68 2825 a Fe(\045PostScript)19 b(EPS)-68 2874 y(\045\045Title:)h(Guarai's)g
+(ABC)-68 2924 y(\045\045BoundingBox:)f(0)i(-45)43 b(100)21
+b(75)-118 -55 y Fg(MAPS)11 b Fn(96)p Fg(.)p Fn(2)1252 b Fq(Par)n(adigms:)19
+b(Just)14 b(a)i(little)d(bit)h(of)h(PostScript)1054 35 y Fe(\045\045Creator:)
+k(Gurari)1054 85 y(\045\045CreationDate:)f(copied)j(June)g(17)g(1996)1054
+134 y(\045\045Pages:)f(1)1054 184 y(\045\045EndComments)1054
+234 y(\045\045EndProlog)1054 284 y(\045\045Page:)g(1)i(1)1054
+334 y(/Times-Bold)d(findfont)h(45)i(scalefont)e(setfont)1054
+383 y(-40)h(rotate)1054 433 y(1)g(-.03)g(0{setgray)1250 483
+y(0)g(0)h(moveto)1250 533 y(\(ABC\))f(show)1250 583 y(3)g(rotate)1228
+633 y(})h(for)1054 682 y(0)f(0)h(moveto)e(-4)i(rotate)1054
+732 y(1)f(setgray)g(\(ABC\))f(show)1054 782 y(showpage)1004
+923 y Fu(Example)c Fd(\(W)m(alking)c(along)h(the)h(S-curv)o(e\))1004
+974 y Fu(In)j Fd(The)g(MET)m(AF)o(ONTb)q(o)q(ok)j Fu(ex)p Fn(13)p
+Fu(.)p Fn(10)15 b Fu(is)i(ab)q(out)g(dra)o(wing)f(o)o(v)o(er-)1004
+1023 y(lapping)h(disks)h(along)e(a)i(path,)g(the)h(S-\014gure.)30
+b(Ho)o(w)17 b(to)h(do)g(this)1004 1073 y(in)e(P)o(ostScript)h(straigh)o(ta)o
+(w)o(a)o(y?)23 b(There)18 b(is)e(no)g(`p)q(oin)o(t)f(of)s(')g(a)h(path)1004
+1123 y(op)q(erator)e(so)g(the)g(b)q(est)g(w)o(e)g(can)g(attain)f(is)g(to)g(w)
+o(alk)g(along)f(a)h(math)1004 1173 y(function.)1264 1231 y
+ 8572672 4736286 -13156352 -7235993 13156352 7235993 startTexFig
+1264 1231 a
+%%BeginDocument: sinedisks.eps
+newpath
+-180 10 180{dup sin 100 mul%(x, 100sin x)
+ 12.5 0 360 arc
+ gsave 1 setgray fill grestore
+ stroke
+} for
+showpage
+%%EndDocument
+ 1264 1231 a
+ endTexFig
+1054 1627 a Fe(\045PostScript)19 b(Sine)i(with)g(overlapping)f(disks)1054
+1677 y(\045\045BoundingBox:)f(-200)i(-110)42 b(200)22 b(110)1054
+1726 y(\045\045Creator:)d(cgl)j(\(METAFONTbook)d(ex13.10\))1054
+1776 y(\045\045CreationDate:)f(June)j(17)h(1996)1054 1826 y
+(\045\045EndProlog)1054 1876 y(newpath)1054 1926 y(-180)f(10)g(180{dup)f(sin)
+i(100)f(mul\045\(x,)f(100sin)h(x\))1141 1975 y(12.5)g(0)g(360)h(arc)1141
+2025 y(gsave)f(1)g(setgray)g(fill)g(grestore)1141 2075 y(stroke)1054
+2125 y(}for)g(showpage)1054 2239 y Fu(Explanation.)16 b Fe(1)21
+b(setgray)g(fill)10 b Fu(is)h(the)h(erase)g(functionalit)o(y)m(,)1004
+2289 y(encapsulated)j(to)f(yield)f(what)h(w)o(e)g(w)o(an)o(t.)1004
+2393 y Fv(T)l(ables)h(set)g(sidew)o(a)o(ys)1004 2471 y Fu(Another)j(teaser)h
+(is)e(to)g(set)i(tables)e(rotated.)29 b(Rokic)o(ki)16 b(pro)o(vided)1004
+2521 y(rotate)f(macros)f(along)g(with)g(his)h Fe(dvips)p Fu(,)e(among)g
+(others.)21 b(I)15 b(ha)o(v)o(e)1004 2570 y(b)q(orro)o(w)o(ed)c(the)g
+(essence)i(from)c(his)h(rotate)h(macros)e(and)i(recast)h(in)o(to)1004
+2620 y(the)i(follo)o(wing.)1054 2697 y Fe(\\def\\rotate#1\045st)o(uff)1293
+2747 y(#2\045degrees)20 b(in)i(PS)f(direction)1054 2797 y
+({\\setbox\\abox=\\h)o(box{#)o(1}\045)1076 2846 y(\\adim\\ht\\abox\\a)o
+(dvanc)o(e\\adi)o(m)e(by\\dp\\abox)1076 2896 y(\\hbox)h(to\\adim{\\vbox)f
+(to\\wd\\abox)1076 2946 y({\\vskip\\wd\\abox)-118 3014 y Fl(Draft)10
+b(June)f Ff(25)p Fl(,)i Ff(1996)818 b Fl({9{)2005 3013 y(c)1990
+3014 y Fk(\015)p Fl(cgl)p eop
+%%Page: 10 10
+bop -47 13 a Fe(\\special{ps:)20 b(gsave)19 63 y(currentpoint)f(currentpoint)
+g(translate)19 113 y(#2)i(neg)g(rotate)19 163 y(neg)g(exch)g(neg)g(exch)g
+(translate}\045)-47 212 y(\\box\\abox\\vss}\\hss}\045)-47 262
+y(\\special{ps:)f(currentpoint)106 312 y(grestore)g(moveto}\045)-68
+362 y(}\045end)g(rotate)-68 475 y Fu(The)14 b(p)q(oin)o(t)g(is)g(that)h(it)f
+(is)g(not)g(m)o(uc)o(h.)k(The)d Fe(ps:)k Fu(is)14 b(dep)q(enden)o(t)-118
+525 y(on)g(the)g(system)g(still,)e(alas.)-118 602 y(Example)k
+Fd(\(Rotated)e(table\))-118 653 y Fu(The)g(example)f(w)o(orks)h(under)g(UNIX)
+h(with)e(Rokic)o(ky's)g Fe(dvips)p Fu(.)-68 720 y Fe(\\def\\data{1\\cs2\\)o
+(rs)150 770 y(3\\cs4)20 b(})-68 820 y(pre)-68 869 y(\\rotate{\\framed)106
+919 y(\\btable\\data})84 969 y({90})-68 1019 y(post)492 940
+y Fu(pre)15 b
+
+ gsave currentpoint currentpoint translate 90 neg rotate neg exch neg exch translate
+564 942 142 2 v 564 1085 2 143 v 586 998 a Fu(1)48 b(2)586
+1069 y(3)41 b(4)p 704 1085 V 564 1087 142 2 v 710 940 a
+ currentpoint grestore moveto
+724 940 a Fu(p)q(ost)-68 1117 y(Remark.)21 b(Gurari)15 b(\(1994\))g(has)h
+(pro)o(vided)f(some)g(more)f(exam-)-118 1167 y(ples)f(of)g(P)o(ostScript)p
+Fk($)p Fu(\(Al\)DraT)408 1175 y(E)431 1167 y(X)h(in)o(teraction.)j(Real)c(in)
+o(terfac-)-118 1217 y(ing.)20 b(Apart)15 b(from)e(p)q(ortabilit)o(y)g
+(problems)h(it)g(gets)h(quite)g(compli-)-118 1267 y(cated.)20
+b(F)m(or)14 b(the)h(momen)o(t)d(I)i(refrain)g(and)g(co)q(de)i(the)f
+(`pictures')f(in)-118 1316 y(ra)o(w)g(P)o(ostScript)g(assisted)h(b)o(y)f
+Fo(MET)o(AF)n(ONT)h Fu(for)f(prompting)e(con-)-118 1366 y(trol)h(p)q(oin)o
+(ts)g(of)g(those)h(curv)o(es)h(whic)o(h)f(can)f(b)q(e)h(sp)q(eci\014ed)h
+(elegan)o(tly)-118 1416 y(in)e(a)h(declarativ)o(e)g(w)o(a)o(y)m(.)-118
+1519 y Fv(MET)l(AF)o(ONT/MetaP)o(ost)h(user)g(in)o(terface)-118
+1597 y Fu(Sometimes)g(it)i(is)g(more)f(natural)g(to)h(sp)q(ecify)h(p)q(oin)o
+(ts)f(and)g Fq(dir)n(e)n(c-)-118 1646 y(tions)p Fu(.)27 b(It)17
+b(is)g(true)h(that)f(sp)q(ecifying)g(a)f(con)o(trol)h(p)q(oin)o(t)f(along)g
+(the)-118 1696 y(direction)11 b(can)g(yield)f(the)i(same)e(e\013ect)i(but)f
+(the)h(distance)f(b)q(et)o(w)o(een)-118 1746 y(the)j(p)q(oin)o(t)g(and)f(its)
+h(con)o(trol)g(p)q(oin)o(t)f(in\015uences)j(the)e(shap)q(e.)-118
+1823 y(Example)i Fd(\(Esc)o(her's)g(knot\))-118 1874 y Fu(This)e(example)e
+(is)i(all)f(ab)q(out)g(sp)q(ecifying)h(directions.)263 1931
+y
+ 4736286 4736286 -5262540 -5262540 5262540 5262540 startTexFig
+263 1931 a
+%%BeginDocument: escherknotmf.eps
+3{-43.30139 25 moveto
+ -43.30139 55.49103 -27.56424 85.00061
+ 0 85.00061 curveto
+ 27.56424 85.00061 43.30139 55.49103
+ 43.30139 25 curveto
+ 43.30139 -5.94014 26.79497 -34.5299
+ 0 -50 curveto
+120 rotate
+}repeat
+stroke showpage
+%%EndDocument
+ 263 1931 a
+ endTexFig
+-68 2300 a Fu(In)g Fo(MET)o(AF)n(ONT)h Fu(the)f(co)q(ding)g(w)o(ould)f(read)h
+(as)g(follo)o(ws.)-68 2376 y Fe(\045Escher's)20 b(Knot.)g(June)h(96.)h
+(cgl@rc.service.)o(rug.n)o(l)-68 2426 y(def)f(openit)f(=)i(openwindow)e
+(currentwindow)-3 2476 y(from)h(origin)g(to)g(\(screen_rows,scre)o(en_co)o
+(ls\))-3 2526 y(at)g(\(-2r,3r\)enddef;)-68 2576 y(pickup)f(pencircle)g
+(scaled)h(1;)-68 2625 y(tracingstats:=pr)o(oofin)o(g:=1;)d(screenstrokes;)-68
+2675 y(pair)j(p[];)-68 2725 y(\045parameters)-68 2775 y(r:=100;)f(alfa=90;)
+-68 2825 y(\045)-68 2874 y(p2:=\(0,.85r\);)f(\045independent)g(from)i(p1,3,4)
+-68 2924 y(p4:=\(0,-.5r\);)-118 -55 y Fg(MAPS)11 b Fn(96)p
+Fg(.)p Fn(2)1252 b Fq(Par)n(adigms:)19 b(Just)14 b(a)i(little)d(bit)h(of)h
+(PostScript)1054 35 y Fe(\045dependent)k(points)i(because)f(of)i(symmetry)
+1054 85 y(p1:=p4)e(rotated)h(-120;)1054 134 y(p3:=p4)f(rotated)42
+b(120;)1054 184 y(path)21 b(q;)1054 234 y(q=p1{dir)f(alfa}..{\(1,0\)}p2.)o(.)
+1141 284 y({dir\(-alfa\)}p3..{)o(dir\(a)o(lfa-2)o(40\)}p)o(4;)1054
+334 y(draw)h(q;)1054 383 y(draw)g(q)g(rotated)g(120;)1054 433
+y(draw)g(q)g(rotated-120;)1054 483 y(showit;)1054 533 y(end)1054
+649 y Fu(By)9 b(the)h(nature)h(of)d(the)i(\014gure)g(not)g(only)e(p)q(oin)o
+(ts)i(are)g(related)g(but)1004 699 y(also)j(their)i(directions.)k(Ho)o(w)13
+b(to)h(cop)q(e)h(with)f(this)g(in)f(P)o(ostScript?)1004 748
+y(It)21 b(can)f(b)q(e)h(done)g(but)g(is)f(not)h(so)f(elegan)o(t,)i(honestly)f
+(sp)q(eaking)1004 798 y(cum)o(b)q(ersome.)c(But)d Fn(:)7 b(:)g(:)f
+Fu(there)15 b(is)f(a)f(solution)g(or)h(t)o(w)o(o,)f(hang)h(on.)1054
+877 y Fe(\045!PS)21 b(EPS)1054 927 y(\045\045Title:)f(Escher)g(knot)h(II)1054
+977 y(\045\045Creator:)e(cgl)j(\(inspired)41 b(by)22 b(Knotplot\))1054
+1026 y(\045\045CreationDate:)c(June)j(1996)1054 1076 y(\045\045BoundingBox:)e
+(-95)i(-95)g(95)g(95)1054 1126 y(\045\045Pages:)f(1)1054 1176
+y(\045\045EndProlog)1054 1226 y(\045\045Page:)g(1)i(1)1054
+1275 y(\045)1054 1325 y(/angle)e(90)i(def)1054 1375 y(/r)f(100)g(def)1054
+1425 y(/point)f({0)i(-.5)f(r)g(mul}def)1054 1475 y(/p1)g({-.25)g(r)g(mul)g(3)
+h(sqrt)f(mul)43 b(.25)21 b(r)h(mul)f(moveto)1163 1524 y(currentpoint)1163
+1574 y(angle)f(sin)i(2)f(mul)g(add)h(exch)1163 1624 y(angle)e(cos)i(2)f(mul)g
+(add)h(exch)1163 1674 y(-20)f(.85)g(r)h(mul)1163 1724 y(0)f(.85)g(r)h(mul)
+1163 1774 y(curveto)e(stroke})g(def)1054 1823 y(/p3)h({)h(.25)f(r)g(mul)g(3)h
+(sqrt)f(mul)43 b(.25)21 b(r)h(mul)f(moveto)1163 1873 y(\045Control)f(point)
+1163 1923 y(currentpoint)1163 1973 y(angle)g(sin)i(-15)f(mul)g(add)43
+b(exch)1163 2023 y(angle)20 b(cos)43 b(15)22 b(mul)f(add)43
+b(exch)1163 2072 y(\045Control)20 b(point:)1163 2122 y(\045)h(58.62)g(-.5)g
+(r)h(mul)f(5)h(add\045angle)e(90)1163 2172 y(0)217 b(angle)21
+b(-240)g(add)g(cos)h(-15)f(mul)g(add)1185 2222 y(-.5)g(r)g(mul)g(angle)g
+(-240)g(add)g(sin)h(-15)f(mul)g(add)1163 2272 y(0)g(-.5)g(r)h(mul)1163
+2321 y(curveto)e(stroke})g(def)1054 2371 y(3{p1)1097 2421 y(gsave)h(-1)g(1)h
+(scale)f(p1)g(grestore\045reflect)1097 2471 y(p3)1097 2521
+y(120)h(rotate)1054 2571 y(}repeat)e(showpage)1054 2686 y Fu(Explanation.)26
+b(The)17 b(essen)o(tial)g(curv)o(e)h(is)f(split)f(in)o(to)g
+Fn(3)h Fu(pieces:)1004 2736 y(p)1027 2742 y Fg(1)1046 2736
+y Fu(,)p Fn(:)7 b(:)g(:)t Fu(p)1135 2742 y Fg(3)1154 2736 y
+Fu(.)18 b(The)c(\014rst)g(t)o(w)o(o)f(are)h(related)g(b)o(y)f(re\015ection.)
+19 b(The)14 b(third)1004 2786 y(m)o(ust)9 b(prop)q(erly)i(matc)o(h.)16
+b(In)11 b(the)g(Colum)o(bus's)e(egg)h(paragraph)g(the)1004
+2836 y(straigh)o(t)j Fe(.eps)e Fu(co)q(de)j(is)f(giv)o(en,)f(biased)h(b)o(y)f
+(the)i(kno)o(wledge)e(of)g(the)1004 2886 y(\(con)o(trol\))i(p)q(oin)o(ts.)
+-118 3014 y Fl(Draft)c(June)f Ff(25)p Fl(,)i Ff(1996)811 b
+Fl({10{)2005 3013 y(c)1990 3014 y Fk(\015)p Fl(cgl)p eop
+%%Page: 11 11
+bop -118 13 a Fv(A)16 b(teaser)57 b Fu(More)15 b(complicated)e(is)h(when)h
+(the)g(line)e(is)h(c)o(hanged)-118 63 y(in)o(to)i(a)g(tub)q(e,)h(and)g(when)g
+(w)o(e)g(ha)o(v)o(e)f(to)g(deal)h(with)f(hidden)g(lines.)-118
+113 y(In)d Fo(MET)o(AF)n(ONT)i Fu(the)f(co)q(de)g(could)f(read)h(as)g(follo)o
+(ws,)d(where)k(use)f(is)-118 163 y(made)f(of)g Fe(intersectiontimes)d
+Fu(and)k(of)f(subpaths.)725 147 y Fp(22)-118 243 y Fu(Example)j
+Fd(\(Esc)o(her's)g(knot)e(I)q(I)q(I\))-118 294 y Fu(This)g(example)f(is)h
+(all)f(ab)q(out)i(getting)f(from)e(a)i Fq(de)n(clar)n(ative)j
+Fu(sp)q(eci-)-118 344 y(\014cation)c(in)h Fo(MET)o(AF)n(ONT)h
+Fu(to)f(a)f Fq(imp)n(er)n(ative)j Fu(EPS)f(co)q(de.)251 405
+y
+ 5115182 4736286 -2631270 -2039234 2631270 2828615 startTexFig
+251 405 a
+%%BeginDocument: escherknotiii.epsabr
+3{-21.6507 12.5 moveto
+-21.6507 27.74551 -13.78212 42.5003
+ 0 42.5003 curveto
+13.78212 42.5003 21.6507 27.74551
+ 21.6507 12.5 curveto
+21.6507 -0.24506 16.04897 -12.19249
+ 6.58395 -20.3313 curveto
+-14.3152 15.86746 moveto
+-12.43301 23.58928 -7.45113 29.75021
+ 0 29.75021 curveto
+9.64748 29.75021 15.15549 19.42186
+ 15.15549 8.75 curveto
+15.15549 -2.07904 9.37823 -12.08548
+ 0 -17.5 curveto
+120 rotate
+}repeat stroke showpage
+
+%%EndDocument
+ 251 405 a
+ endTexFig
+-68 779 a Fu(First)f(the)g(declarativ)o(e)g Fo(MET)o(AF)n(ONT)h
+Fu(co)q(de.)-68 857 y Fe(\045Escher)20 b(Knot)h(III.)g(June)g(96.)g
+(cgl@rc.service.rug)o(.nl)-68 907 y(def)g(openit)f(=)i(openwindow)e
+(currentwindow)-3 957 y(from)h(origin)g(to)g(\(screen_rows,scre)o(en_co)o
+(ls\))-3 1006 y(at)g(\(-2r,3r\)enddef;)-68 1056 y(pickup)f(pencircle)g
+(scaled)h(1;)-68 1106 y(tracingstats:=pr)o(oofin)o(g:=1;)d(screenstrokes;)-68
+1156 y(numeric)i(t,)h(u,)h(v,)f(w;)-68 1206 y(pair)g(p[];)g(path)g(q[];)-68
+1255 y(def)g(assignpoints=)-47 1305 y(p2:=\(0,.85r\);)f(\045independent)f
+(from)i(p1,3,4)-47 1355 y(p4:=\(0,-.5r\);)-47 1405 y(\045dependent)f(points)h
+(because)f(of)h(symmetry)-47 1455 y(p1:=p4)g(rotated)f(-120;)-47
+1505 y(p3:=p4)h(rotated)42 b(120;)-68 1554 y(enddef;)-68 1604
+y(\045)-68 1654 y(alfa=90;r:=100;)e(assignpoints;)-68 1704
+y(q1:=p1{dir)19 b(alfa}..{\(1,0\)}p2..)19 1754 y({dir\(-alfa\)}p3..{)o
+(dir\(a)o(lfa-)o(240\)})o(p4;)-68 1803 y(\045inside)106 1853
+y(r:=.75r;)h(assignpoints;)-68 1903 y(q2:=p1{dir)f(alfa}..{\(1,0\)}p2..)-47
+1953 y({dir\(-alfa\)}p3..{dir)o(\(alfa)o(-240)o(\)}p4;)-68
+2003 y(\(t,u\)=)h(subpath)h(\(2.5,3\))f(of)h(q1)-3 2052 y(intersectiontimes)d
+(\(q2)k(rotated)e(-120\);)-68 2102 y(\(v,w\)=)g(q2)i(intersectiontime)o(s)411
+2152 y(\(q1)f(rotated)g(120\);)-68 2202 y(\045showvariable)e(t,u;)-68
+2252 y(draw)i(subpath)f(\(0,2.5)h(+)g(t/2\))g(of)g(q1;)-68
+2302 y(draw)g(subpath)f(\(0,2.5)h(+)g(t/2\))g(of)g(q1)520 2351
+y(rotated)f(120;)-68 2401 y(draw)h(subpath)f(\(0,2.5)h(+)g(t/2\))g(of)g(q1)
+520 2451 y(rotated-120;)-68 2501 y(\045showvariable)e(v,w;)-68
+2551 y(draw)i(subpath)f(\(v,3\))h(of)g(q2;)-68 2600 y(draw)g(subpath)f
+(\(v,3\))h(of)g(q2)h(rotated)e(120;)-68 2650 y(draw)h(subpath)f(\(v,3\))h(of)
+g(q2)h(rotated-120;)-68 2700 y(showit;)p -118 2748 600 2 v
+-170 2783 a Fj(22)-118 2794 y Fs(This)9 b(co)q(de)g(w)o(orks)g(as)g(suc)o(h)f
+(on)h(m)o(y)g(Mac)g(with)g(Bluesky's)f(PD)h(MET)m(AF)o(ONT.)-118
+2838 y(F)m(or)j(other)e(en)o(vironmen)o(ts)f(build)i(a)h(c)o(haracter)d(from)
+i(it,)h(or)g(adapt)e(it)i(for)g(use)-118 2881 y(in)j(MetaP)o(ost,)h(or)f(ev)o
+(en)g(simpler)f(cop)o(y)g(the)h(bread-and-b)o(utt)o(er)e(EPS)i(co)q(de)-118
+2924 y(whic)o(h)c(is)g(app)q(ended)e(at)i(the)g(end.)-118 -55
+y Fg(MAPS)g Fn(96)p Fg(.)p Fn(2)1252 b Fq(Par)n(adigms:)19
+b(Just)14 b(a)i(little)d(bit)h(of)h(PostScript)1054 35 y Fe(end)1054
+149 y Fu(T)m(o)k(giv)o(e)h(the)h(reader)g(an)f(impression)f(of)h(what)g
+Fo(MET)o(A)p Fa(post)1004 198 y Fu(will)14 b(yield)h Fe(escherknotIII.eps)p
+Fu(,)d(the)k(imp)q(erativ)o(e)f(co)q(de,)h(is)f(in-)1004 248
+y(cluded.)1133 233 y Fp(23)1054 325 y Fe(\045!PS)21 b(EPS)1054
+375 y(\045\045BoundingBox:)e(-40)i(-31)g(40)g(43)1054 424 y(\045\045Creator:)
+e(MetaPost)i(and)g(JJW,)g(CGL)1054 474 y(\045\045CreationDate:)d(June)j(17)h
+(1996)1054 524 y(\045\045Pages:)e(1)1054 574 y(\045\045EndProlog)1054
+624 y(\045\045Page:)g(1)i(1)1054 674 y(3{-21.6507)d(12.5)i(moveto)1054
+723 y(-21.6507)f(27.74551)g(-13.78212)g(42.5003)1141 773 y(0)i(42.5003)e
+(curveto)1054 823 y(13.78212)g(42.5003)g(21.6507)h(27.74551)1119
+873 y(21.6507)f(12.5)h(curveto)1054 923 y(21.6507)f(-0.24506)g(16.04897)g
+(-12.19249)1119 972 y(6.58395)g(-20.3313)h(curveto)1054 1022
+y(\045)1054 1072 y(-14.3152)f(15.86746)g(moveto)1054 1122 y(-12.43301)g
+(23.58928)g(-7.45113)g(29.75021)1119 1172 y(0)i(29.75021)e(curveto)1054
+1221 y(9.64748)g(29.75021)g(15.15549)g(19.42186)1119 1271 y(15.15549)g(8.75)h
+(curveto)1054 1321 y(15.15549)f(-2.07904)g(9.37823)g(-12.08548)1119
+1371 y(0)i(-17.5)e(curveto)1054 1421 y(120)h(rotate)1054 1471
+y(}repeat)f(stroke)h(showpage)1054 1584 y Fu(As)d(can)f(b)q(e)h(seen)h(from)d
+(the)i(last)f(co)q(de)h(it)f(is)g(all)g(ab)q(out)g(\014nd-)1004
+1634 y(ing)e(the)i(righ)o(t)e(\(con)o(trol\))h(p)q(oin)o(ts)g(and)f(dra)o(w)h
+(the)g(strok)o(es,)h(as)f(re-)1004 1684 y(mark)o(ed)g(at)h(the)h(b)q
+(eginning)f(of)g(this)g(note.)29 b(The)18 b(di\013erence)h(b)q(e-)1004
+1734 y(t)o(w)o(een)14 b(the)h(declarativ)o(e)f Fo(MET)o(AF)n(ONT)h
+Fu(sp)q(eci\014cation)f(and)g(the)g(re-)1004 1784 y(sulting)i(\(unedited\))h
+Fo(MET)o(A)p Fa(post)h Fu(co)q(de)f(is)f(striking.)26 b(When)16
+b(the)1004 1834 y(last)h(co)q(de)g(is)g(sho)o(wn)g(\014rst)h(one)f(w)o(ould)f
+(sa)o(y)m(,)h(ah)p Fn(:)7 b(:)g(:)e Fu(P)o(ostScript)18 b(is)1004
+1883 y(easy)j(just)g(data)f(and)h(some)f(strok)o(es.)39 b(The)22
+b(resulting)e(co)q(de)i(is)1004 1933 y(equiv)n(alen)o(t)d(to)g(W)m(o)q(o)q
+(dy)g(Bak)o(er's)h(co)q(de:)30 b(just)20 b(the)g(righ)o(t)f(strok)o(e)1004
+1983 y(and)14 b(a)f(rotation)g(or)h(t)o(w)o(o.)1054 2034 y(KnotPlot)c(on)g
+(the)g(net)h(pro)o(vides)f(a)g(more)f(complicated)g(v)o(ersion)1004
+2083 y(where)i(the)g(ligh)o(t)d(re\015ection)j(is)f(em)o(ulated)f(b)o(y)h
+(shades)h(of)e(grey)m(.)16 b(The)1004 2133 y(gzipp)q(ed)e(\014le)g(is)g
+Fn(64)p Fu(KB,)f(ho)o(w)o(ev)o(er.)19 b(A)14 b(w)o(orld)f(of)g(di\013erence.)
+1004 2212 y Fv(Colum)o(bus')e(egg)55 b Fu(Wh)o(y)11 b(not)h(use)h
+Fo(MET)o(AF)n(ONT)g Fu(to)e(create)j(`the)1004 2261 y(\(con)o(trol\))f(p)q
+(oin)o(ts')f(from)f(the)j(descriptiv)o(e)f(picture)h(and)f(use)g(these)1004
+2311 y(in)g(ra)o(w)h(P)o(ostScript)h(straigh)o(ta)o(w)o(a)o(y?)1054
+2362 y(After)10 b(assigning)e Fe(precontrol)p Fu(-s)f(and)j
+Fe(postcontrol)p Fu(-s)d(to)i(pairs)1004 2412 y(and)i(inserting)g
+Fe(show)p Fu(-s,)f Fo(MET)o(AF)n(ONT)i Fu(yielded)f(for)g(the)g(simple)e(Es-)
+1004 2462 y(c)o(her)15 b(knot)f(the)g(data)g(in)g(the)g(transcript)h(\014le.)
+k(A)14 b(little)f(editing)g(of)1004 2511 y(this)h(log)f(\014le)h(resulted)h
+(in)e(the)i(follo)o(wing)c(imp)q(erativ)o(e)i(EPS)h(co)q(de.)1054
+2588 y Fe(\045!PS)21 b(EPS)1054 2638 y(\045\045Title:)f(Escher)g(knot)h(\(mf)
+h(prompted\))p 1004 2688 V 952 2722 a Fj(23)1004 2734 y Fs(A)12
+b(white)e(lie.)15 b(I)c(ha)o(v)o(e)f(edited)g(the)g(\014le)g(and)h(reduced)e
+(the)h(data|and)f(deleted)1004 2776 y Fh(dtransform)o Fs(,)j
+Fh(idtransfo)o(rm)f Fs(and)h(the)h(v)n(arious)f Fh(set...)p
+Fs(|for)f(the)i Fi(6)h Fs(strok)o(es)1004 2819 y(in)o(to)e(only)h
+Fi(2)g Fs(and)g(rotated)e(these.)20 b(MET)m(AF)o(ONT)c(allo)o(w)o(ed)d(me)f
+(to)h(declara-)1004 2861 y(tiv)o(ely)g(sp)q(ecify)g(the)h(picture)f(while)i
+(MetaP)o(ost)e(pro)o(vided)g(me)h(with)h(the)f(es-)1004 2904
+y(sen)o(tial)9 b(path)h(data.)k(W)m(ell)p Fi(:)5 b(:)h(:)g
+Fs(ev)o(en)j(MET)m(AF)o(ONT)14 b(can)c(b)q(e)h(ask)o(ed)f(to)g(pro)o(vide)
+1004 2946 y(those)g(\(con)o(trol\))f(p)q(oin)o(ts.)-118 3014
+y Fl(Draft)h(June)f Ff(25)p Fl(,)i Ff(1996)811 b Fl({11{)2005
+3013 y(c)1990 3014 y Fk(\015)p Fl(cgl)p eop
+%%Page: 12 12
+bop -68 13 a Fe(\045\045Creator:)19 b(cgl)-68 63 y(\045\045CreationDate:)f
+(June)j(1996)-68 113 y(\045\045BoundingBox:)e(-80)i(-80)g(80)g(80)-68
+163 y(\045\045Pages:)f(1)-68 212 y(\045\045EndProlog)-68 262
+y(\045\045Page:)g(1)i(1)-68 312 y(3{-43.30139)d(25)j(moveto)-47
+362 y(-43.30139)e(55.49103)h(-27.56424)e(85.00061)-25 412 y(0)j(85.00061)e
+(curveto)-25 461 y(27.56424)g(85.00061)h(43.30139)f(55.49103)-25
+511 y(43.30139)g(25)i(curveto)-25 561 y(43.30139)e(-5.94014)h(26.79497)f
+(-34.5299)-25 611 y(0)i(-50)f(curveto)-68 661 y(120)g(rotate)-68
+710 y(}repeat)f(stroke)h(showpage)-68 823 y Fu(I)i(presume)h(the)h
+(functionalit)o(y)d(is)i(similar)d(to)i(Jac)o(k)o(o)o(wski's)-118
+873 y Fe(mftoeps)p Fu(.)37 b(The)21 b(ab)q(o)o(v)o(e)g(metho)q(d)e(is)i(m)o
+(y)e(P)o(o)q(or)i(Man's)f Fo(MET)o(A)p Fu(-)-118 923 y Fo(F)n(ONT)p
+Fu(2EPS,)13 b(with)f(concise,)i(v)o(ery)f(concise)h(and)f(in)o(telligible)d
+(EPS)-118 973 y(as)k(result.)-118 1074 y Fv(Ac)o(kno)o(wledgemen)o(t)o(s)-118
+1150 y Fu(First)g(of)f(all)g(Don)g(Kn)o(uth)i(and)e(John)h(Hobb)o(y)g(thank)g
+(y)o(ou.)-68 1201 y(Thank)e(y)o(ou)g(Joseph)i(Romano)o(vsky)c(for)j(sho)o
+(wing)f(b)o(y)g(example)-118 1250 y(the)17 b(p)q(o)o(w)o(er)h(of)e(P)o
+(ostScript,)i(and)f(for)g(y)o(our)f(co)q(op)q(eration)h(on)g(the)-118
+1300 y Fo(MET)o(AF)n(ONT)p Fk($)p Fu(P)o(ostScript)e(dualit)o(y)m(.)-68
+1350 y(Thank)f(y)o(ou)f(Bogus )-12 b(la)o(w)14 b(Jac)o(k)o(o)o(wski)f(for)h
+(y)o(our)g(`P)o(ostScript)g(for)-118 1400 y(T)-95 1408 y(E)-72
+1400 y(Xies')c(at)g(Bac)o(hoT)208 1408 y(E)231 1400 y(X)g Fn(96)p
+Fu(,)g(suggesting)g(that)g(P)o(ostScript)h(as)f(suc)o(h)-118
+1450 y(is)k(b)q(ene\014cial)g(for)g(T)194 1458 y(E)217 1450
+y(Xies,)f(next)i(to)f(y)o(our)f(mfto)q(eps.)-68 1500 y(Thank)c(y)o(ou)g
+(Eitan)h(Gurari)f(and)h(anon)o(ymous)d(T)686 1508 y(E)710 1500
+y(Xies)j(of)f(whic)o(h)-118 1550 y(I)16 b(b)q(orro)o(w)o(ed)h(material,)d
+(not)i(in)f(the)i(least)g(Adob)q(e)f(for)g(pro)o(viding)-118
+1600 y(P)o(ostScript)f(to)e(start)i(with.)-68 1650 y(Piet)g(T)m(utelaers)h
+(pro)o(vided)g(me)e(with)h(a)g(cop)o(y)h(of)e(the)i(PSF)-5
+b(A)o(Q,)-118 1700 y(and)14 b(Erik)g(F)m(ram)o(bac)o(h)f(traced)i(the)g
+(\014le)f(with)g(examples)g(from)e(the)-118 1750 y(blue)i(b)q(o)q(ok,)f(next)
+h(to)g(KnotPlot.)-68 1800 y(As)d(usual)f(Jos)h(Winnink)e(pro)q(ofed)i(the)g
+(pap)q(er)h(and)e(lend)h(a)f(help-)-118 1850 y(ing)21 b(hand)g(in)g(pro)q
+(crusting)h(to)o(w)o(ards)g(MAPS)g(inclusion)e(if)h(not)-118
+1900 y(for)h(pro)q(cessing)i Fe(escherknot.mf)d Fu(in)o(to)h
+Fe(escherknot.eps)e Fu(via)-118 1949 y Fo(MET)o(A)p Fa(post)p
+Fu(.)-118 2051 y Fv(Conclusion)-118 2127 y Fu(T)m(o)15 b(co)q(de)i
+(symmetrical)d(and)i(simple)e(curv)o(es)k(in)d(ra)o(w)h(P)o(ostScript)-118
+2177 y(is)c(fun)g(and)h(yields)f(elegan)o(t)g(scripts)i(and)e(concise)i
+(\014les.)k(T)m(o)11 b(merge)-118 2227 y(text)17 b(with)g(graphics)g(is)g
+(fun)g(to)q(o,)g(and)f(the)i(teaser)g(to)f(set)h(along)-118
+2276 y(curv)o(ed)k(paths)f(can)f(b)q(e)i(done)f(b)o(y)f(P)o(ostScript)i
+(elegan)o(tly)m(.)37 b(An-)-118 2326 y(other)15 b(teaser)g(of)f(dra)o(wing)f
+(math)g(curv)o(es)i(accurately)g(along)e(with)-118 2376 y(\(L)-88
+2369 y Fg(A)-64 2376 y Fu(\)T)-25 2384 y(E)-2 2376 y(X)19 b(is)f(solv)o(ed)g
+(also)f(b)o(y)h(means)g(of)f(P)o(ostScript.)32 b(P)o(o)o(w)o(erful)-118
+2426 y(to)q(o)12 b(is)f(to)h Fq(extend)17 b Fu(the)c(inclusion)e(of)g(.eps)h
+(\014les)h(at)f(the)g(dvi)f(lev)o(el)h(b)o(y)-118 2476 y(a)j(little)h(more)e
+(in)o(teraction)i(b)q(et)o(w)o(een)h(\(L)528 2468 y Fg(A)553
+2476 y Fu(\)T)592 2483 y(E)615 2476 y(X)f(and)f(P)o(ostScript.)-118
+2525 y(Rotating)f(a)i(b)q(o)o(x,)g(with)f(as)h(applications)f(for)h(example)f
+(t)o(yp)q(eset-)-118 2575 y(ting)k(tables)h(in)f(landcap)q(e,)i(is)e(p)q
+(ossible)h(in)f(P)o(ostScript,)j(at)d(the)-118 2625 y(exp)q(ense)d(of)d
+(system)h(dep)q(endency)i(b)q(ecause)f(of)e(the)i Fe(\\special)p
+Fu(-s.)-68 2675 y Fq(Mer)n(ging)e Fu(a)d(little)f(kno)o(wledge)h(of)f(P)o
+(ostScript)i(with)e(T)769 2683 y(E)792 2675 y(Xp)q(ertise)-118
+2725 y(is)16 b(p)q(o)o(w)o(erful.)23 b(PStric)o(ks)17 b(concen)o(trates)h(on)
+d Fq(interfacing)k Fu(\(L)827 2718 y Fg(A)851 2725 y Fu(\)T)890
+2733 y(E)914 2725 y(X)-118 2775 y(with)e(P)o(ostScript)g(at)g(the)h(exp)q
+(ense)h(of)d(burdening)i(\(L)752 2767 y Fg(A)776 2775 y Fu(\)T)815
+2782 y(E)838 2775 y(X)f(to)q(o)-118 2825 y(m)o(uc)o(h,)g(IMHO,)h(with)g(all)e
+(resp)q(ect.)32 b(F)m(or)18 b Fe(\\rotate)e Fu(I)i(in)o(terfaced)-118
+2875 y(to)q(o.)24 b(Ho)o(w)o(ev)o(er,)17 b(for)e(t)o(yp)q(esetting)i(along)e
+(curv)o(ed)i(paths)g(I)f(w)o(ould)-118 2924 y(not)e(think)f(of)h(in)o
+(terfacing)f(via)g(rotated)h(b)q(o)o(xes)h(or)f(so.)-118 -55
+y Fg(MAPS)d Fn(96)p Fg(.)p Fn(2)1252 b Fq(Par)n(adigms:)19
+b(Just)14 b(a)i(little)d(bit)h(of)h(PostScript)1054 35 y Fu(Of)c(course,)h(p)
+q(eople)f(who)g(do)f(need)i(adv)n(anced)f(features)h(or)f(ha)o(v)o(e)1004
+85 y(sp)q(ecial)19 b(wishes)g(migh)o(t)d(b)q(etter)k(use)f(Adob)q(e)g
+(Illustrator,)g(Corel-)1004 134 y(DRA)-5 b(W,)20 b(Mathematica,)g(or)h(Adob)q
+(e)g(Photoshop,)h(and)e(not)h(to)1004 184 y(forget)14 b(the)g(pleasing)g
+(MetaP)o(ost.)1054 234 y(T)m(o)i(understand)j(and)e(learn)g(T)1553
+242 y(E)1576 234 y(X)h(did)e(tak)o(e)i(me)e(a)h(couple)g(of)1004
+284 y(y)o(ears.)g(T)m(o)10 b(acqain)o(t)f(m)o(yself)g(with)g
+Fo(MET)o(AF)n(ONT)i Fu(did)f(cost)h(me)e(a)h(few)1004 334 y(mon)o(ths.)15
+b(Learning)10 b(just)f(a)h(little)e(bit)i(of)f(P)o(ostScript)h(w)o(as)f(a)h
+(matter)1004 383 y(of)17 b(w)o(eeks,)h(and)f(when)h(concen)o(trating)g(on)f
+(paths)h(and)f(\(con)o(trol\))1004 433 y(p)q(oin)o(ts)g(the)g
+Fe(moveto)p Fu(,)e Fe(arc)h Fu(and)h Fe(curveto)e Fu(can)i(b)q(e)g(grasp)q
+(ed)h(in)e(a)1004 483 y(late)e(afterno)q(on.)1054 533 y(Although)f(the)i
+(blue)f(b)q(o)q(ok)f(con)o(tains)h(also)f(examples)g(of)h(t)o(yp)q(e-)1004
+583 y(setting)f(text,)h(I)e(consider)i(T)1448 590 y(E)1471
+583 y(X)f(unsurpassed)i(for)e(this.)k(The)d(b)q(est)1004 633
+y(of)f(b)q(oth)h(w)o(orlds)g(is)g(to)f(com)o(bine)g(\(L)1565
+625 y Fg(A)1589 633 y Fu(\)T)1628 640 y(E)1651 633 y(X)h(and)g(P)o
+(ostScript.)1054 682 y(Ma)o(yb)q(e)k(w)o(e)h(should)f(follo)o(w)f(Adob)q(e)i
+(and)f(extend)h(the)g(use)g(of)1004 732 y(P)o(ostScript)d(b)o(y)f(PDF|or)f
+(use)i(the)f(alternativ)o(e)g(HTML|to)g(fa-)1004 782 y(cilitate)e(WWW)g
+(sur\014ng.)1004 882 y Fv(What)i(more?)1004 956 y Fu(F)m(or)e(pictures)h(I)g
+(use)g(a)f(T)1391 964 y(E)1414 956 y(X)g(con)o(trolled)g(database)h(with)f
+(the)g(b)q(en-)1004 1006 y(e\014cial)h(side-e\013ect)j(that)d(I)h(don't)f(ha)
+o(v)o(e)g(to)h(w)o(orry)f(ab)q(out)h(\014le)f(sys-)1004 1056
+y(tems)20 b(when)h(using)f(pictures)i(\(to)q(ols,)f(references)j(and)c
+(ilks\))g(on)1004 1106 y(di\013eren)o(t)d(mac)o(hines.)25 b(I)17
+b(w)o(ould)e(w)o(elcome)h(a)g(similar)e(functional-)1004 1156
+y(it)o(y)f(for)f(m)o(y)g(collection)h(of)g(P)o(ostScript)h(pictures)g(to)f(b)
+q(e)h(used)g(with)1004 1205 y Fe(\\psfig)p Fu(.)1054 1255 y(A)23
+b(next)h(step)g(is)f(the)g(manipulation)d(of)j(colors)g(either)h(via)1004
+1305 y Fo(MET)o(A)p Fa(post)18 b Fu(or)g(P)o(ostScript)g(directly)m(.)29
+b(Jac)o(k)o(o)o(wski)17 b(uses)i(Adob)q(e)1004 1355 y(Illustrator)d(for)g
+(example)f(to)i(enric)o(h)g(in)o(teractiv)o(ely)f(the)h(system-)1004
+1405 y(atic)e(EPS)g(pictures)h(created)g(b)o(y)f Fo(MET)o(AF)n(ONT)p
+Fu(.)g(Indeed)h(in)o(terest-)1004 1454 y(ing,)e(v)o(ery)h(in)o(teresting,)g
+(but)h(b)q(ey)o(ond)f(m)o(y)e(p)q(ossibilities)h(for)h(some)1004
+1504 y(time)e(to)g(come.)18 b(Neither)d(do)e(I)h(ha)o(v)o(e)g(access)i(to)d
+(color)h(P)o(ostScript)1004 1554 y(prin)o(ters)h(as)f(y)o(et,)f(alas.)18
+b(My)c(case)g(rests.)1054 1604 y(Ha)o(v)o(e)g(fun,)f(and)g(all)g(the)i(b)q
+(est.)1570 1678 y(c)1559 1679 y Fk(\015)41 b Fu(Kees)15 b(v)n(an)e(der)i
+(Laan)1642 1726 y(Hunzew)o(eg)g Fn(57)1642 1775 y(9893)e Fu(PB)h(Garn)o(w)o
+(erd)1642 1825 y(The)g(Netherlands)1642 1875 y(cgl@rc.service.rug.nl)1642
+1925 y Fn(31)6 b Fu(\()p Fn(0)p Fu(\))p Fn(594)g(62)h(1525)-118
+3014 y Fl(Draft)j(June)f Ff(25)p Fl(,)i Ff(1996)811 b Fl({12{)2005
+3013 y(c)1990 3014 y Fk(\015)p Fl(cgl)p eop
+%%Page: 13 13
+bop -118 -89 a Fg(MAPS)11 b Fn(96)p Fg(.)p Fn(2)1252 b Fq(Par)n(adigms:)19
+b(Just)14 b(a)i(little)d(bit)h(of)h(PostScript)-118 0 y Fv(Con)o(ten)o(ts)-68
+75 y Fu(BLUe's)f(Design)g(X)-68 125 y(P)o(ostScript)-27 175
+y(Pro)q(cessing)-27 224 y(Subset)h(0)f(from)e(the)i(language)15
+274 y(ex:)k(Conforming)11 b(EPS)k(structure)-27 324 y(Summary)c(of)j
+(\(graphics\))g(commands)-27 374 y(What)g(is)f(not)h(allo)o(w)o(ed)f(as)h
+(EPS?)-27 424 y(Do)q(cumen)o(tation)15 473 y(ex:)k(Pie)c(c)o(hart)g(from)f
+(the)h(blue)g(b)q(o)q(ok)-27 523 y(Pro)q(o\014ng)-27 573 y(Inclusion)15
+623 y(BoundingBo)o(x)-27 673 y(W)m(riting)f(P)o(ostScript)15
+722 y(A)h(line)f(bundle)15 772 y(A)h(\015o)o(w)o(er)-68 822
+y(Some)e(more)h(Graphics)15 872 y(ex:)18 b(Malb)q(ork)13 b(windo)o(w)15
+922 y(ex:)18 b(Esc)o(her's)d(imp)q(ossible)e(triangle)15 972
+y(ex:)18 b(Ben)o(tley's)d(p)q(olygon)15 1021 y(ex:)j(Another)d(double)f(lo)q
+(op)15 1071 y(ex:)k(P)o(olygons)13 b(with)h(splines)g(as)g(sides)15
+1121 y(ex:)k(Barn)c(windo)o(w)15 1171 y(ex:)k(Bak)o(er's)c(inspiration)15
+1221 y(ex:)k(Romano)o(vsky's)11 b(real)j(Esc)o(her)-68 1270
+y(Math)g(graphs)15 1320 y(ex:)k(Sine)c(function)-68 1370 y(T)m(ext)g(set)g
+(along)f(curv)o(ed)i(paths)15 1420 y(ex:)j(Along)13 b(a)h(circle)15
+1470 y(ex:)k(Along)13 b(a)h(spiral)15 1519 y(ex:)k(Seals)15
+1569 y(ex:)g(Gurari's)13 b(squares)15 1619 y(ex:)18 b(Gurari's)13
+b(ABC)15 1669 y(ex:)18 b(W)m(alking)12 b(along)g(the)j(S-curv)o(e)-68
+1719 y(T)m(ables)e(set)i(sidew)o(a)o(ys)15 1769 y(ex:)j(Rotated)c(table)-68
+1818 y(MET)m(AF)o(ONT/MetaP)o(ost)g(user)h(in)o(terface)15
+1868 y(ex:)j(Esc)o(her's)d(knot)-27 1918 y(A)f(teaser)15 1968
+y(ex:)k(Esc)o(her's)d(knot)f(I)q(I)q(I)-27 2018 y(Colum)o(bus')e(egg)-68
+2067 y(Ac)o(kno)o(wledgemen)o(ts)-68 2117 y(Conclusion)-68
+2167 y(What)h(more?)-68 2217 y(Con)o(ten)o(ts)-118 2979 y Fl(Draft)d(June)f
+Ff(25)p Fl(,)i Ff(1996)811 b Fl({13{)2005 2978 y(c)1990 2979
+y Fk(\015)p Fl(cgl)p eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/info/laan/paradigm/paradigm.src b/info/laan/paradigm/paradigm.src
new file mode 100644
index 0000000000..8b4f6f9df2
--- /dev/null
+++ b/info/laan/paradigm/paradigm.src
@@ -0,0 +1,759 @@
+%Aug 1995, modified Feb 1996
+%Paradigm: Searching
+%C.G. van der laan, cgl@rc.service.rig.nl
+\input blue.tex \loadtocmacros%\tolerance500\hbadness=499\hfuzz=5pt
+ %\parindent=1pc
+\everyverbatim{\emc}
+\bluetitle Paradigms: Searching
+
+\blueissue \maps{96}2
+
+%\blueauthor Kees van der Laan
+
+\beginscript
+
+\bluehead BLUe's Design VIII
+
+Hi folks.
+I started using \LaTeX{} for my hobby bridge, to typeset
+bid sequences and plays. Important in these kind of plays
+is data integrity, i.e.\ the system should remember
+that a card has been played.
+In \TeX nical terms it comes down to update the computer memory.
+This is precisely what makes computer-assisted typography different
+from previous formatting techniques. We can update memory.
+
+This is a common phenomenon and the problem can be formulated
+in general terms as deleting an element from a set.
+
+The central macro in BLUe's format searching is \cs{loc},
+and for selective loading \cs{lst} must be defined appropriately.
+
+Before delving into the details where I have needed searching, I'll
+touch upon searching \TeX niques, as used in \TB.
+
+\bluehead Searching in \TB
+
+The examples of searching are about balancing columns.
+
+On page {\oldstyle387} it is applied to adjusting the column widths when we have
+the English text in column one and the same text in another language
+in column two. With fixed column widths the column lengths are different.
+
+On page {\oldstyle417} the manmac macro \cs{balancecolumns} is given to
+balance two columns on the last page of the index of \TB.
+These \TeX niques and macros have been used\Dash and customized a little\Dash
+for typesetting BLUe's format indexes.\ftn{My major contribution in this area
+ is that I process indexes on the fly, in one-pass.}
+
+\bluehead Salomon's procrusting
+
+Salomon\ftn{Advanced \TeX, Springer, {\oldstyle1995}, page {\oldstyle189}.}
+looks for the optimal font size in fitting text to a box of prescribed size.
+The essence of the search process is given stripped from other aspects.
+I modified his example as follows.
+\thisverbatim{\unmc}
+\beginverbatim
+%Salomn's fitting text to a box
+%Sept 95, cgl@rc.service.rug.nl
+\begingroup
+%Text
+\toks0{Leentje leerde lotje lopen
+ langs de lange lindenlaan.}
+%Restrictions
+\hsize=3cm \dimen1=20pt%\vsize=20pt
+\def\showresult{\rlap{\f
+ Fontsize=\the\dimen0\quad
+ ht, dp=\the\ht0, \the \dp0}
+ \copy0\smallbreak}
+%Start: first estimate size of font
+\dimen0=5pt
+\loop\font\f=cmr10 at\dimen0
+ \setbox0=\vbox{\tolerance10000
+ \baselineskip\dimen0
+ \f \the\toks0 }
+\showresult
+\ifdim\ht0<\dimen1 %next, linear search
+ \advance\dimen0 by1pt
+\repeat
+%make the best fit
+\advance\dimen0 by-1pt
+\font\f=cmr10 at\dimen0
+ \setbox0=\vbox to\dimen1{\tolerance10000
+ \baselineskip\dimen0 plus 1pt minus1pt
+ \f \the\toks0 }
+\showresult
+\endgroup
+%Remark: extension to adjust for total size
+%of box is left to the reader, and the
+%context
+\bye
+!endverbatim
+
+\bluehead Finding an element
+
+The basic functionality is to locate an element in a set.
+The result is the value of the Boolean \cs{iffound}.
+BLUe's format uses the following approach.\ftn{Assumed is
+ that the set does not contain a period.}
+\beginverbatim
+\def\loc#1#2{%locate #1 in #2 a def
+ \def\locate##1#1##2\end{\ifx\empty##2\empty
+ \foundfalse\else\foundtrue\fi}%
+ \ea\locate#2.#1\end}
+!endverbatim
+
+To append the searched for element at the end of the arguments for \cs{locate}
+is related to the sentinel technique in programming.
+
+\blueexample Printing vowels in bold
+
+Schwarz {\oldstyle1987} coined the problem to print vowels
+in bold face.\ftn{His solution mixes up the picking up of list
+ elements and the process to be applied. Moreover, his nesting of
+ {\tt\char92if}-s
+ in order to determine whether a character is a vowel or not,
+ is not elegant.}
+
+The problem can be split into two parts. First, the general part of going
+character by character through a string, and second, decide whether the
+character at hand is a vowel or not.
+
+For the first part use \cs{fifo}.
+
+For the second part, combine the vowels into a string, |aeiou|,
+and the problem can be reduced
+to the question $\langle char\rangle\in{}$|aeiou|?
+
+With \cs{process} appropriately defined\Dash
+ locate the argument in the string of vowels\Dash
+|\fifo Audacious\ofif| yields
+\newif\iffound%
+\def\loc#1#2{%locate #1 in #2
+ \def\locate##1#1##2\end{\ifx\empty##2\empty
+ \foundfalse\else\foundtrue\fi}%
+ \locate#2#1\end}%
+\def\process#1{\uppercase{\loc#1}{AEIOU}%
+\iffound{\bf#1}\else#1\fi}%
+\fifo Audacious\ofif,
+with
+\beginverbatim
+\def\process#1{\uppercase{\loc#1}%
+ {AEIOU}\iffound{\bf#1}\else#1\fi}
+!endverbatim
+
+\blueexample Searching a set of accent strings
+
+In sorting in \TeX{} I determine whether a control symbol belongs to the set of
+accents\Dash|\def\accstr{\`\'\"\^\c}|.
+In the macro \cs{nxtw} the relevant invoke reads as follows.
+\beginverbatim
+\ea\loc\head\accstr
+!endverbatim
+The same approach has been applied in my BLUe-2-MAPS convertor
+assistant.
+
+\blueexample Searching a set of Pascal reserved words
+
+In typesetting PASCAL fragments I determine whether a word belongs to the set
+of reserved words.
+The set of reserved words reads
+\beginverbatim
+\reservedset{and array begin case const
+ div do downto else end. end; file for
+ function goto if in label mod nil not of
+ or packed procedure program record repeat
+ set then to type until var while with}
+!endverbatim
+The relevant invoke in \cs{processw} reads
+\beginverbatim
+\loc{#1}{\the\reservedset}%
+!endverbatim
+The Pascal environment scans the program fragment line-by-line and
+each line word-by-word.
+Each word is tested against the set of reserved words.
+
+\bluehead Deleting an element
+
+The functionality is to delete an element from a set.
+It consists of two steps: finding and deleting.
+It can be coded as a variant of \cs{loc}, with as result not a
+Boolean but the modified set. A template might read as follows.
+\beginverbatim
+\def\delete#1#2{%Delete #1 from #2 a def
+ \def\locate##1#1##2\end{\ifx\empty##2\empty
+ \else\def#2{##1##2}\fi}%
+ \ea\locate#2#1\end}
+!endverbatim
+Addition of an element to a set can be done as follows.\ftn
+{This is not so much about searching but added for your convenience.}
+\beginverbatim
+\def\add#1#2{%Add #1 to #2 a def
+ \ea\def\ea#2\ea{#2#1}}
+%or when #2 consists of unexpandable tokens
+\def\add#1#2{%Add #1 to #2 a def
+ \xdef#2{#2#1}}
+!endverbatim
+
+\blueexample Updating a hand in bridge
+
+Bridge is an elimination play like most games.
+From the start elements are removed.
+The deletion of a card is a little special
+because we know that the card is there.
+The macro is called \cs{strip} and has been adapted.
+The hand is a definition instead of a token variable.
+\beginverbatim
+\def\strip#1#2{%Function:
+% delete card value #1, is AKQJT9...2
+% from #2, a def.
+ \def\wis##1#1##2\siw{\gdef#2{##1##2}%
+ \ifx#2\empty\gdef#2{--}\fi}%
+ \ea\wis#2\siw}
+!endverbatim
+
+Remarks. In the above example the searching (and deleting) is a side-effect of the printing.
+It is merely there to guarantee data integrity.
+If only attention is paid to the main issues,
+the searching would have been remained hidden, under a `pile of cards'\smiley.
+It is worth it to make some kind of library macro out of it\Dash
+at least a template\Dash ready for reuse.
+
+Realize that the searched for element is supplied dynamically.
+
+\blueexample Modifying \cs{dospecials}
+
+Inspired upon the Babel macros the following
+alternatives which also obey the locality character.
+\beginverbatim
+%Variant \bbl@add@specials
+%No grouping, nor edef,
+%assumed \dospecials, \sanitize are defined.
+%
+\let\sanitize\empty \let\dospecials\empty
+%
+\def\addspecials#1{\ea\def\ea
+ \dospecials\ea{\dospecials\do#1}%
+ \ea\def\ea
+ \sanitize\ea{\sanitize\makeother#1}
+}
+%
+%Variant \bbl@remove@specials
+%No grouping, nor edef,
+%assumed \dodefault available
+%
+\let\dodefault\empty
+%
+\def\removespecials#1{%
+ \def\do##1{\ifnum`#1=`##1
+ \else\nx\do\nx##1\fi}
+ \edef\dospecials{\dospecials}
+ \def\makeother##1{\ifnum`#1=`##1
+ \else\nx\makeother\nx##1\fi}
+ \edef\sanitize{\sanitize}
+\let\do\dodefault
+\let\makeother\makeotherdefault
+}
+!endverbatim
+
+\bluehead \DeK's set macros
+
+In \TB{} the locating of an element\Dash and delete it\Dash
+is done as follows.
+
+\DeK{} provides \cs{remequivalent},\ftn
+{As part of a suite of set macros.}
+\TB{} {\oldstyle380}, which uses a very general \TeX nique.
+I'll untangle and recast the coding in the FIFO\Dash First In First Out\Dash notation.
+
+\blueexample A set is just a list of defs
+
+Suppose the set reads |\def\set{\a\b\c}|. Then
+\beginverbatim
+%Assume #2 not empty
+\def\remequivalent#1\from#2{%
+ \def\process##1{\ifx#1##1\else\nx##1\fi}
+ \xdef#2{\ea\fifo#2\ofif}}
+\def\fifo#1{\ifx\ofif#1\ofif\fi
+ \process{#1}\fifo}
+\def\ofif#1\fifo{\fi}
+!endverbatim
+
+\blueexample A set is a list of defs with list element tags
+
+Suppose the set reads |\def\set{\\\a\\\b\\\c}|. Then
+\beginverbatim
+%Assume #2 not empty
+\def\remequivalent#1\from#2{%
+ \def\\##1{\ifx#1##1\else\nx\\\nx##1\fi}%
+ \edef#2{#2}}
+!endverbatim
+Once we use list element tags we can also have more general
+elements, as \DeK{} put it `control sequences which are \cs{ifx}-equivalent
+to a given control sequence.'
+
+\blueexample A set is a more general list of control sequences
+
+Suppose the set reads |\def\set{\\\a\\\b\\\c}|. Then
+\beginverbatim
+%Assume #2 not empty
+\def\remequivalent#1\from#2{\let\given=#1%
+\def\\##1{\ifx#1##1\else\nx\\\nx##1\fi}%
+ \edef#2{\ea\fifola#2\alofif}}
+\def\fifola\\#1#2{\ifx#1\given\else\nx\\\nx#1\fi
+ \ifx#2\alofif\alofif\fi\fifola#2}
+\def\alofif#1\alofif{\fi}
+!endverbatim
+Finally, it can be extended by the test for the emptiness of \cs{set}.
+
+\bluehead Database use
+
+While developing BLUe's format system and using the database idea
+other search \TeX niques have been coded.
+Needed are facilities for browsing a database next to
+macros for selective loading of
+ addresses,
+ a format,
+ pictures,
+ references, or
+ tools.
+
+The browse macros are based on \cs{loc}, and can be associated with the
+keyword pattern recognition.
+
+The selective loading macros are based on the proper definition of the
+list element tag.
+
+Below the searching aspects have been put together.
+`BLUe's Databases' treats the use and coding of BLUe's format databases in depth.
+
+\bluesubhead Pattern recognition
+
+A nice application is mail-merge, merging addresses with a letter.
+
+\blueexample Match addresses for the pattern RUSSIA
+
+\beginverbatim
+\input blue.tex \letter \searchfile{address}
+\search{RUSSIA}
+\bye
+!endverbatim
+To send a letter to all those persons or to make all address labels
+insert \cs{makesearchletters}, respectively \cs{makesearchlabels}
+before \cs{bye}.
+
+\blueexample Coding the search macro
+
+At the heart lies the earlier mentioned \cs{loc} macro.
+Because we need to do more with found entries than just knowing that they are there,
+their names, preceded by the list element tag for further action,
+are collected in the toks variable \cs{namelst}.
+For convenience the names are also written to the log file,
+in order that we can follow what is going on.
+\beginverbatim
+\def\search#1{\def\loc##1##2{%
+ \def\locate####1##1####2\end
+ {\ifx\empty####2\empty\foundfalse
+ \else\foundtrue\fi}\ea\locate##2.##1\end}
+ \def\lst##1##2{\loc{#1}{##2}\iffound
+ \immediate\write16{\nx##1}%log file
+ \namelst\ea{\the\namelst\lst##1}
+ \def##1{##2}%define found element
+ \fi}\input\the\searchfile.dat\relax}
+!endverbatim
+
+\bluesubhead Selective loading
+
+This is also a search activity.
+The file is scanned and when an entry is found it will be loaded.
+The details of the selective loading process depend
+on the entries of the database.
+I call them class I and class II databases.
+
+\bluesubsubhead Formats and tools
+
+The idea is that for example \cs{letter} only loads the letter
+macros from |fmt.dat|.
+In the examples below use is made of \cs{tool},
+with the functionality that when the tag after is known
+the control sequences which follow the tag until \cs{endinput}
+will be loaded, otherwise all in between the tag and
+\cs{endinput} will be gobbled.
+\beginverbatim
+\long\def\tool#1{\ifx#1\undefined
+ \bgroup\unouterdefs
+ \ea\gobbletool\fi}
+\long\def\gobbletool#1\endinput{\egroup}
+!endverbatim
+
+\blueexample Coding the loading of the letter macros
+
+\thisverbatim{\emc}
+\beginverbatim
+%From blue.tex
+\def\letter{\ifx\undefined\letterfmt
+ \let\letterfmt=x\fi
+ \loadformat
+ \let\letterfmt\undefined}
+\def\loadformat{\input fmt.dat \relax}
+%from fmt.dat
+\tool\letterfmt
+<lettermacros>
+\endinput
+!endverbatim
+
+Similarly, a tool can be loaded as follows.
+
+\blueexample Coding the loading of the smiley macros
+
+\thisverbatim{\emc}
+\beginverbatim
+%From blue.tex
+\newbox\smileybox
+\newcount\smileysloadcount
+\def\smiley{\loadsmileys\raise.5ex
+ \hbox{\unitlength.01pt
+ \copy\smileybox
+ \eyes\mouth
+ \kern1000\unitlength} }
+\def\winksmiley{<similar>}
+\def\sadsmiley{<similar>}
+\def\loadsmileys{\ifx\undefined\smileystool
+ \let\smileystool=x\fi
+ \ifnum\smileysloadcount=0 \ea\loadtool
+ \else\message{--- smileys already
+ loaded---}\fi
+ \advance\smileysloadcount1
+ \let\smileystool\undefined}
+%from tools.dat
+\tool\smileystool
+<smileymacros>
+\endinput
+!endverbatim
+
+
+Remark.
+Whenever suited a load counter is maintained such that
+dubble loading is inhibited.
+
+\bluesubsubhead Addresses, pictures and references
+
+The entries of these database obey the syntax
+\beginverbatim
+\lst\<name>{<entryproper>}
+!endverbatim
+The selective loading comes down to a proper definition of \cs{lst}.
+Moreover, the names of the entries to be selected must be defined
+with whatever you wish as replacement text.\ftn{This approach is the opposite of
+ preventing reloading.
+ We tacitly want to redefine the fancy entries by the meaningful ones.
+ My fancy replacement text is an error message.}
+\beginverbatim
+\def\loadselectivefrom#1{%#1 lit etc.
+ \def\lst##1{\ifx##1\undefined\ea\gobble
+ \else \ea\gdef\ea##1\fi}
+ \input #1.dat \relax%e.g. lit.dat
+ }
+\def\gobble#1{}
+!endverbatim
+Because of the scanning \cs{outer} defs are not allowed, nor are \cs{par}-s.
+The selective loading macro is embedded in the user macros \cs{references}
+and its ilks. In detail the meaning of `loading' is adapted to the application.
+For references this means that the specified entries are set in a box and their names
+redefined by numbers.
+The names can be used for cross-referencing purposes while the
+box can be pasted up at your place of choice.
+However, the underlying searching methodology is the same for
+addresses, references and pictures.
+
+\blueexample Coding the handling %(searching and some more)
+ of references
+
+\beginverbatim
+\def\references#1{\beginreferences#1%
+ \endreferences}
+\def\bluereferences#1\par
+ {\beginreferences#1\endreferences}
+\def\loadreferences{\loadselectivefrom
+ {\the\referencesfile}}
+\def\beginreferences#1\endreferences{%
+ \bgroup\def\process##1{\ifx\undefined##1
+ \global\let##1\referenceserror\else
+ \message{***\tt\string##1
+ already loaded.***}
+ \fi\namelst\ea{\the\namelst\lst##1}}%
+ \fifo#1\ofif
+ \if]#1]\else\ea\loadreferences\fi
+ %formatting
+ \ifstore\global\setbox\referencesbox=
+ \vbox\bgroup\fi\prenum{}\postnum{}
+ \lsams%Default ls
+ \the\thisreferences
+ \def\lst##1{\ls{##1}
+ \xdef##1{\the\itemno}}
+ \the\namelst\endreferences}
+!endverbatim
+Remark.
+BLUe's format style of coding is centred along two-part macros with a one-part
+macro on top, enriched by a convenient alias such as \cs{bluereferences}, for the
+user interface.
+
+\bluesubsubhead Max D\'\i az' \TeX nique
+
+\TB{} {\oldstyle382}\dash{\oldstyle384}
+mentions the fast loading \TeX nique of Max D\'\i az, which requires that
+every line is preceded by a special character.
+The process comes down to the following.
+\thisverbatim{\emc}
+\beginverbatim
+%The TeXbook, Appendix D 4.Selective loading.
+%The Max Diaz fast selective loading process.
+%(A little simplified, and combined with
+% my list element tag, \lst.)
+\def\lst#1{\catcode`\~=
+ \ifx#1\undefined14 %comment
+ \else9 \fi}%ignore char
+%We want to load the cgl part.
+\def\cgl{<anything>}
+
+\lst\name
+~a
+~b
+~c
+\lst\cgl
+~aa
+~bb
+~cc
+\lst\erik
+~aaa
+~bbb
+~ccc
+\catcode`\~13
+%
+<Commonpart>
+\bye
+%Explanation: the list element tag toggles the
+%catcode for ~ such that either the first
+%character is ignored (and the rest of the line
+%loaded) or the line is a comment line.
+!endverbatim
+In the above one can replace |\lst\name...| by
+|\input <filetobeloadedfrom>|.
+
+\bluesubsubhead Variant document parts
+
+The idea is that a script is marked up also with markup
+tags which have a selection/omission function.
+For example an abridged version is interspersed within the script.
+The idea is that the owner can either ask for an abridged or a
+full version.
+Another example is documentation with details for various computer
+operating systems.
+Given a customer with a specific operating system only the
+relevant parts will be printed.\ftn
+{In real-life this is hardly done.
+ When I buy a TV it contains the information in several languages.}
+
+With the new hype HTML this functionality may enjoy a second youth.
+
+\bluehead Tree search
+
+When I implemented trees in \TeX{} especially the Pythagorean trees\Dash to illustrate
+ turtle graphics\Dash
+I played a little longer with it and could use \TeX{} in `dialogue mode' to
+search for a name by answering questions.
+
+\bluesubhead Interactive path through binary tree
+
+The following is inspired upon Greene's `Playing in \TeX's mind.'\ftn
+{Courtesy Bernd Raichle for node representation.}
+\beginverbatim
+%Guess what? August 1995, cgl@rc.service.rug.nl
+%Idea biased by A.M.Greene's
+%Playing in TeX's mind, TUG 89.
+%Interactive binary tree traversal.
+%Interactive TeX ing,
+%TeX as an engine to play with.
+\input blue.tex
+\def\bintree{\message{\csname\node\endcsname}
+ \ea\ifx\csname\node0\endcsname\relax\eertnib\fi
+ \read0to\yorn
+ \edef\node{\node\if n\yorn1\else0\fi}
+ \bintree}
+\def\eertnib#1\bintree{\fi\def\node{1}
+ \immediate\write0{Hope this is the one
+ you are looking for :-) }
+ \immediate\write0{}
+ \message{Another play?}
+ \read0to\yorn
+ \if y\yorn\ea\bintree\fi
+ \immediate\write0{Thank you, bye}}
+%Rules of the game
+\immediate\write0{Guess game.
+ The system asks questions to be answered}
+\immediate\write0{by *** y or n ***}
+\immediate\write0{The following play
+ guesses an NTG member}
+\immediate\write0{}
+%
+%Data (a tree structure)
+\begingroup\obeylines
+\def\lst#1 #2
+ {\ea\def\csname#1\endcsname{#2}}
+\lst 1 NTG member?
+\lst 10 Plain TeX ie?
+\lst 100 Honoured?
+\lst 1000 Kees
+\lst 1001 HH
+\lst 101 On board?
+\lst 1010 Chair?
+\lst 10100 Erik
+\lst 10101 Secretary?
+\lst 101010 Gerard
+\lst 101011 Treasurer?
+\lst 1010110 Wietse
+\lst 1010111 Dark?
+\lst 10101110 Johannes
+\lst 10101111 Frans
+\lst 1011 Anonymous
+\lst 11 Just a friend
+%
+%Start the play
+\endlinechar-1 %TB20.18
+\def\node{1}\bintree
+\endgroup
+%
+%Typesetting the data
+\onecol
+Pretext
+\thisbt{\xoffset{-400}}
+\beginbt1 NTG member?
+10 Plain TeX ie?
+100 Honoured?
+1000 cgl
+1001 HH
+101 On board?
+1010 Chair?
+10100 Erik
+10101 Secretary?
+101010 Gerard
+101011 Treasurer?
+1010110 Wietse
+1010111 Dark?
+10101110 JLB
+10101111 FG
+1011 Anonymous
+11 Just a friend
+8 \endbt
+Posttext
+\bye
+!endverbatim
+
+A typical log file looks as follows.
+\beginverbatim
+Guess game. The system asks questions to
+be answered by *** y or n ***
+The following play guesses an NTG member
+
+NTG member?
+\yorn=y
+ Plain TeX ie?
+\yorn=y
+ Honoured?
+\yorn=y
+ Kees
+Hope this is the one you are looking for :-)
+
+Another play?
+\yorn=y
+ NTG member?
+\yorn=n
+ Just a friend
+Hope this is the one you are looking for :-)
+
+Another play?
+\yorn=y
+ NTG member?
+\yorn=y
+ Plain TeX ie?
+\yorn=n
+ On board?
+\yorn=y
+ Chair?
+\yorn=y
+ Erik
+Hope this is the one you are looking for :-)
+
+Another play?
+\yorn=y
+ NTG member?
+\yorn=y
+ Plain TeX ie?
+\yorn=n
+ On board?
+\yorn=y
+ Chair?
+\yorn=n
+ Secretary?
+\yorn=y
+ Gerard
+Hope this is the one you are looking for :-)
+
+Another play?
+\yorn=y
+ NTG member?
+\yorn=y
+ Plain TeX ie?
+\yorn=n
+ On board?
+\yorn=n
+ Anonymous
+Hope this is the one you are looking for :-)
+
+Another play?
+\yorn=n
+!endverbatim
+Remarks. The first version used a counter to represent the
+nodes with the restriction of $2^{16}$.
+
+Robustness with respect to mistypes of the user after the prompt\Dash
+ the user does not supply `y' or `n'\Dash
+has been treated in Paradigms: Loops.
+
+\bluesubhead The tree
+
+The typesetting of the binary tree
+visualizes the data for your convenience.
+Within BLUe's format this goes as follows
+\beginverbatim
+\thisbt{\xoffset{-400}}
+\beginbt 1 NTG member?
+10 Plain \TeX ie?
+...
+11 Just a friend
+8 \endbt
+!endverbatim
+\thisbt{\xoffset{-400}}
+\beginbt 1 NTG member?
+10 Plain \TeX ie?
+100 Honoured?
+1000 cgl
+1001 HH
+101 On board?
+1010 Chair?
+10100 Erik
+10101 Secretary?
+101010 Gerard
+101011 Treasurer?
+1010110 Wietse
+1010111 Dark?
+10101110 JLB
+10101111 FG
+1011 Anonymous
+11 Just a friend
+8 \endbt
+
+Have fun, and all the best
+\makesignature
+\pasteuptoc
+\endscript \ No newline at end of file
diff --git a/info/laan/paradigm/paradigm.srt b/info/laan/paradigm/paradigm.srt
new file mode 100644
index 0000000000..d0b88a782a
--- /dev/null
+++ b/info/laan/paradigm/paradigm.srt
@@ -0,0 +1,723 @@
+%Paradigm: Sorting. Aug 1995, revised Feb 1996
+%C.G. van der laan, cgl@rc.service.rig.nl
+\input blue.tex
+\loadtocmacros
+\loadindexmacros %necessary for sorting examples
+\tolerance500\hbadness=499\hfuzz=5pt
+
+\bluetitle Paradigms: Sorting
+
+\blueissue \maps{96}2
+
+\everyverbatim{\emc}
+
+\def\on{\bgroup\afterassignment\doold\count0=}
+\def\doold{\oldstyle\the\count0\egroup}
+
+\beginscript
+
+\bluehead BLUe's Design IX
+
+Hi folks.
+A strong and {\em unique\/} point of BLUe's format system is its
+indexing on the fly.
+Be it for a total document or just for a chapter. One of the requisites
+for indexing on the fly is the possibility to sort within \TeX.
+
+Sorting has always been an important topic in computer science.
+In \TeX{} I needed sorting on several occasions especially for sorting
+numbers such as citation lists,
+words such as addresses, and
+index entries.
+
+This note is devoted to paradigms encountered while implementing and applying
+sorting in \TeX.
+
+Sorting can be characterized by
+\item- the set to be sorted (numbers, word. etc.)
+\item- the addressing of elements of the set
+\item- the ordering for the set
+\item- the comparison operation, and
+\item- the exchange operation.
+\smallbreak
+
+To do some sorting of your own please load from \bluetex{} the index macros
+via \cs{loadindexmacros}.
+Below parts have been extracted from that collection of
+macros to make this note as intelligible as possible.
+\cs{ea} is my shortcut for \cs{expandafter}.
+
+\bluehead Linear sorting
+
+A simple sorting method is repeatedly searching for the smallest element.
+In the example below the set is defined as a def with
+list element tag |\\|.
+
+\thisverbatim{\unmc}
+\beginverbatim
+\def\lst{\\\ia\\\ib\\\ic}
+\def\ia{314} \def\ib{1} \def\ic{27}
+%
+\def\dblbsl#1{\ifnum#1<\min\let\min=#1\fi}
+%
+\loop\ifx\empty\lst\expandafter\break\fi
+ \def\\{\let\\=\dblbsl\let\min=} %space
+ \lst%find minimum
+ \min%typeset minimum
+ {\def\\#1{\ifx#1\min \else\nx\\%
+ \nx#1\fi}\xdef\lst{\lst}}%
+\pool%Inspired upon van der Goot's
+ %Midnight macros.
+\def\loop#1\pool{#1\loop#1\pool}
+\def\break#1\pool{}
+!endverbatim
+
+The coding implements the looping of the basic steps
+\item- find minimum (via \cs{lst},
+ and suitable definition of \DeK's list element tag |\\|)
+\item- typeset minimum (via \cs{min})
+\item- delete minimum from the list (via another appropriate
+ definition of the list element tag.
+\smallbreak
+
+Remark.
+The kludge for using \cs{ifx} instead of \cs{ifnum} in the deletion part
+is necessary because \TeX{} inserts a \cs{relax}.
+
+\bluehead Sorting in an array
+
+If we adopt array addressing in \TeX{} for the elements to be sorted
+then we can implement bubble sort in \TeX{} too.\ftn
+{The above example of linear sorting can be seen as sorting in a
+ so-called associative array.}
+
+\bluesubhead Array addressing
+
+When we think of associating values to (index) numbers\Dash
+ |1| $\rightarrow$ |\value{1}| \Dash
+then we are talking about an array.
+A mapping of the \IN{} on \dots for example \IN.
+The \cs{value} control sequence can be implemented as follows.
+
+\beginverbatim
+\def\value#1{\csname#1\endcsname}
+!endverbatim
+The writing to the array elements can be done via
+\beginverbatim
+\def\1{<value1>} \def\2{<value2>}...
+!endverbatim
+
+In general this must be done via
+
+\beginverbatim
+\ea\def\csname<number>\endcsname{<valuenumber>}
+!endverbatim
+
+\bluesubsubhead To get the hang of it
+
+The reader must be aware of the differences between
+\item- the index number, $\langle k\rangle$
+\item- the counter variable \cs{k}, with the value $\langle k\rangle$
+ as index number
+\item- the control sequences |\<k>|$, k=1, 2, \dots, n$,
+ with as replacement texts the items to be sorted.
+\smallbreak
+
+When we have |\def\3{4}| |\def\4{5}| |\def\5{6}| then \\
+\def\3{4}\def\4{5}\def\5{6}
+|\3| yields {\bf\3}, \\
+|\csname\3\endcsname| yields
+{\bf\csname\3\endcsname}, and \\
+|\csname\csname\3\endcsname\endcsname| yields
+{\bf\csname\csname\3\endcsname\endcsname}.
+
+Similarly, when we have\\
+\cs{k3} |\def\3{name}| |\def\name{action}| then \\
+ \def\3{name}\def\name{action}\k=3{}
+|\the\k| yields {\bf\the\k}, \\
+|\csname\the\k\endcsname| yields {\bf\csname\the\k\endcsname}, and\\
+|\csname\csname\the\k\endcsname\endcsname| yields
+{\bf\csname\csname\the\k\endcsname\endcsname}.\ftn{Confusing, but powerful.}
+To exercise shortcut notation the last can be denoted by
+|\value{\value{\the\k}}|.
+
+Another \cs{csname...} will execute \cs{action}, which can be whatever
+you provided as replacement text.\ftn
+{My other uses of the \cs{csname} construction are:
+ to let \TeX{} accept an outer defined macro name in a replacement text,
+ to check whether a name has already been defined, and
+ to mimic a switch selector.}
+
+\bluehead Bubble sort
+
+This process looks repeatedly for the biggest element which is swapped
+to the end. This is done for the complete array, the array of size $n-1$ et cetera.
+The pseudo code reads as follows.
+\beginpascal
+for n:= upb downto 2 do
+begin for k:= n-1 downto 1 do
+ if a[n]<a[k] then
+ exchange(a[n], a[k]);
+end;
+\endpascal
+
+The \TeX{} macro reads as follows.
+\thisverbatim{\unmc}
+\beginverbatim
+\def\bubblesort{%Data in defs \1, \2,...\<n>.
+%Result: \1<=\2<=...<=\<n>.
+{\loop\ifnum1<\n{\k\n
+ \loop\ifnum1<\k \advance\k-1
+ \cmp{\deref\k}{\deref\n}%
+ \ifnum\status=1 \xch\k\n\fi
+ \repeat}\advance\n-1
+ \repeat}}%end \bubblesort
+%with auxiliaries
+\def\deref#1{\csname\the#1\endcsname}
+\let\cmp\cmpn %from blue.tex or provide
+%\def\cmp#1#2{%Comparison. Yields
+% \status=0, 1, 2 for =, >, <
+%{...}
+%\def\xch#1#2{%exchange
+%#1, #2 counter variables
+%{...}
+!endverbatim
+
+\bluehead Heap sort
+
+We can organize the array as a heap. A heap is an ordered tree.
+Loosely speaking for each node the siblings are smaller or
+equal than the node.
+
+The process consists of two main steps
+\item- creation of a heap
+\item- sorting the heap
+\smallbreak
+
+with a sift operation to be used in both.
+
+In comparison with my earlier release of the code in \maps{92}2,
+I adapted the notation with respect to sorting in {\em non-decreasing\/}
+order.\ftn
+{It is true that the reverse of the comparison operation would
+ do, but it seemed more consistent to me to adapt
+ the notation of the heap concept with
+ the smallest elements at the bottom.}
+
+What is a heap?
+A sequence $a_1, a_2, \dots, a_n$, is a heap if
+$a_k\ge a_{2k} \wedge a_k\ge a_{2k+1}, k=1, 2, \dots, n\div2$, and
+because $a_{n+1}$ is undefined, the notation is simplified by
+defining $a_k>a_{n+1}, k= 1, 2, \dots , n$.
+\\
+A tree and one of its heap representations of $2, 6, 7, 1, 3, 4$
+read
+
+$$\thisbintree{\tophns10ex}
+\beginbintree{00}2{11}6{12}7{21}1{22}3{23}4
+ 2\endbintree
+\kern-4ex\raise13ex\hbox{$\buildrel heap\over \longrightarrow$}
+\thisbintree{\tophns10ex}\kern-4ex
+\beginbintree{00}7{11}6{12}4{21}3{22}2{23}1
+2\endbintree$$
+
+In PASCAL-like notation the algoritm,
+for sorting the array a[1:n], reads
+
+{\parindent0pt
+\beginpascal
+(*heap creation*)
+l := n div 2 + 1;
+while l <> 1 do
+begin l := l-1; sift(a, l, n) end;
+(*sorting*)
+r := n;
+while r <> 1 do
+begin swap(a[1], a[r]);
+ r := r-1; sift(a, 1, r)
+end;
+(*sift arg1 through arg2*)
+j:= arg1;
+while 2j >= arg2 and
+ (a[j] < a[2j] or a[j] < a[2j+1])
+do begin mi := 2j + if a[2j] > a[2j+1]
+ then 0 else 1;
+ exchange(a[j], a[mi]); j := mi
+ end;
+\endpascal
+\smallskip}
+
+\bluesubhead Purpose
+
+Sorting values given in an array.
+
+\bluesubhead Input
+
+The values are stored in the control sequences
+\cs{1}, \dots, |\<n>|.
+The counter |\n| must contain the value $\langle n\rangle$.
+The parameter for comparison, \cs{cmp},
+must be \cs{let}-equal to
+\item- \cs{cmpn}, for numerical comparison,
+\item- \cs{cmpw}, for word comparison,
+\item- \cs{cmpaw}, for word comparison obeying the ASCII ordering, or
+\item- a comparison macro of your own.
+\smallbreak
+
+\bluesubhead Output
+
+The sorted array \cs{1}, \cs{2}, \dots |\<n>|,
+with \\
+\cs{value1} $\le$ \cs{value2} $\le$
+\dots $\le$ \cs{value}$\langle n\rangle$.
+
+\bluesubhead Source
+
+\thisverbatim{\unmc}
+\beginverbatim
+%Non-descending sorting
+\def\heapsort{%data in \1 to \n
+\r\n\heap\ic1
+{\loop\ifnum1<\r\xch\ic\r
+ \advance\r-1 \sift\ic\r
+\repeat}}
+%
+\def\heap{%Transform \1..\n into heap
+ \lc\n\divide\lc2{}\advance\lc1
+ {\loop\ifnum1<\lc\advance\lc-1
+ \sift\lc\n\repeat}}
+%
+\def\sift#1#2{%#1, #2 counter variables
+ \jj#1\uone#2\advance\uone1 \goontrue
+ {\loop\jc\jj \advance\jj\jj
+ \ifnum\jj<\uone
+ \jjone\jj \advance\jjone1
+ \ifnum\jj<#2 \cmpval\jj\jjone
+ \ifnum2=\status\jj\jjone\fi\fi
+ \cmpval\jc\jj\ifnum2>\status\goonfalse\fi
+ \else\goonfalse\fi
+\ifgoon\xch\jc\jj\repeat}}
+%
+\def\cmpval#1#2{%#1, #2 counter variables
+%Result: \status= 0, 1, 2 if
+%values pointed by
+% #1 =, >, < #2
+ \ea\let\ea\aone\csname\the#1\endcsname
+ \ea\let\ea\atwo\csname\the#2\endcsname
+ \cmp\aone\atwo}
+%
+\def\cmpn#1#2{%#1, #2 must expand into
+ %numbers
+%Result: \status= 0, 1, 2 if
+% \val{#1} =, >, < \val{#2}.
+ \ifnum#1=#2\global\status0 \else
+ \ifnum#1>#2\global\status1 \else
+ \global\status2 \fi\fi}
+%
+\def\xch#1#2{%#1, #2 counter variables
+ \edef\aux{\csname\the#1\endcsname}\ea
+ \xdef\csname\the#1\endcsname{\csname
+ \the#2\endcsname}\ea
+ \xdef\csname\the#2\endcsname{\aux}}.
+%with auxiliaries
+\newcount\n\newcount\lc\newcount\r
+\newcount\ic\newcount\uone
+\newcount\jc\newcount\jj\newcount\jjone
+\newif\ifgoon
+!endverbatim
+
+Explanation.
+\item{}\cs{heapsort}
+ The values given in \cs{1},\dots|\<n>|,
+ are sorted in non-descending order.
+\item{}\cs{heap}
+ The values given in \cs{1},\dots|\<n>|,
+ are rearranged into a heap.
+\item{}\cs{sift}
+ The first element denoted by the first (counter) argument
+ has disturbed the heap. Sift rearranges
+ the part of the array denoted by its two arguments, such that the
+ heap property holds again.
+\item{}\cs{cmpval}
+ The values denoted by the counter values,
+ supplied as arguments, are compared.
+\smallbreak
+
+\blueexample Numbers, words
+
+\cs{cmpn}, and \cs{cmpw} stand for compare numbers and words.
+\cs{prtn}, and \cs{prtw} stand for print numbers and words, and
+work the way you expect.
+\cs{accdef} takes care that accents are properly defined.
+
+\beginverbatim
+\def\1{314}\def\2{1}\def\3{27}\n3
+\let\cmp\cmpn\heapsort
+\beginquote\prtn,\endquote
+%
+\def\1{ab}\def\2{c}\def\3{aa}\n3
+\let\cmp\cmpaw\heapsort
+\beginquote\prtw,\endquote
+and
+\def\1{j\ij}\def\2{ge\"urm}\def\3{gar\c con}
+\def\4{\'el\`eve}\n4
+\let\cmp\cmpw {\accdef\heapsort}
+\beginquote\prtw\endquote
+!endverbatim
+yields
+\def\1{314}\def\2{1}\def\3{27}\n=3
+{\let\cmp\cmpn\heapsort
+\beginquote\prtn,\endquote
+%
+\def\1{ab}\def\2{c}\def\3{aa}\n=3
+\let\cmp\cmpaw\heapsort
+\beginquote\prtw,\endquote
+and
+\def\1{j\ij}\def\2{ge\"urm}\def\3{gar\c con}\def\4{\'el\`eve}\n=4
+\let\cmp=\cmpw{\accdef\heapsort}
+\beginquote\prtw.\endquote
+}
+
+\bluehead Quick sort
+
+The quick sort algorithm has been discussed in many places,
+The following code is borrowed from Bentley.\ftn{Programming Pearls, Addison-Wesley.
+ It contains also diagrams which keep track of the invariants.}
+
+\beginpascal
+procedure QSort(low,up);
+if low<up then
+begin
+(*choose suitable median*)
+ Swap(X[low], X[RandInt(low,up)]);
+ T:=X[low]; M:=low;
+(*Invariant loop
+ X[low+1..M]<T and X[M+1..I-1]>=T*)
+ for I:=low+1 to up do
+ if X[I]<T then
+ begin M:=M+1;
+ Swap(X[M], X[I]);
+ end;
+(*exchange median*)
+ Swap(X[low], X[M]);
+(*X[low..M-1]<X[M]<=X[M+1..up]*)
+ QSort(low, M-1); QSort(M+1, up);
+end;
+\endpascal
+
+\bluesubhead Purpose
+
+Sorting of the values given in the array
+|\<low>|, \dots, |\<up>|.
+
+\bluesubhead Input
+
+The values are stored in
+|\<low>|, \dots, |\<up>|,
+with $1\le low\le up\le n$.
+The parameter for comparison, \cs{cmp},
+must be \cs{let}-equal to
+\item- \cs{cmpn}, for number comparison,
+\item- \cs{cmpw}, for word comparison,
+\item- \cs{cmpaw},for word comparison obeying the ASCII ordering, or
+\item- a comparison macro of your own.
+\smallbreak
+
+\bluesubhead Output
+
+The sorted array |\<low>|, \dots, |\<up>|, with \\
+\cs{va}$\langle low\rangle \le
+\dots \le{}$ \cs{val}$\langle up\rangle$.
+
+\bluesubhead Source
+
+\thisverbatim{\unmc}
+\beginverbatim
+\def\quicksort{%Values given in
+%\low,...,\up are sorted, non-descending.
+%Parameters: \cmp, comparison.
+ \ifnum\low<\up\else\brk\fi
+%\refval, a reference value selected
+%at random.
+ \m\up\advance\m-\low%Size-1 of array part
+ \ifnum10<\m\rnd\multiply\m\rndval
+ \divide\m99 \advance\m\low \xch\low\m
+ \fi
+ \ea\let\ea\refval\csname\the\low\endcsname
+ \m\low\k\low\let\refvalcop\refval
+ {\loop\ifnum\k<\up\advance\k1
+ \ea\let\ea\oneqs\csname\the\k\endcsname
+ \cmp\refval\oneqs\ifnum1=\status
+ \global\advance\m1 \xch\m\k\fi
+ \let\refval\refvalcop
+ \repeat}\xch\low\m
+ {\up\m\advance\up-1 \quicksort}%
+ \low\m\advance\low1 \quicksort}
+%
+\def\brk#1\quicksort{\fi}
+!endverbatim
+
+Explanation.
+At each level the array is partitioned into two parts.
+After partitioning
+the left part contains values less than the reference value and the
+right part contains values greater than or equal to the reference value.
+Each part is again partitioned via a recursive call of the macro.
+The array is sorted when all parts are partitioned.
+
+In the \TeX{} coding
+the reference value as estimate for the mean value is determined
+via a random selection of one of the elements.\ftn
+{If the array is big enough. I chose rather arbitrarily \on10{}
+ as threshold.}
+Reid's \cs{rnd} has been used.
+The random number is mapped into
+the range [$\,low:up\,$], via the linear transformation
+$\hbox{\cs{low}}+(\hbox{\cs{up}}-\hbox{\cs{low}})*
+\hbox{\cs{rndval}}/99$.\ftn
+{Note that the number is guaranteed within the range.}
+
+The termination of the recursion is coded in a \TeX{} peculiar way.
+First, I coded the infinite loop.
+Then I inserted the condition for termination with the \cs{fi}
+on the same line, and not enclosing the main part of the macro.
+On termination the invocation \cs{brk} gobbles up all the tokens
+at that level to the end, to its separator \cs{quicksort},
+and inserts its replacement text, a new \cs{fi},
+to compensate for the gobbled \cs{fi}.
+
+\bluesubhead Auxiliaries
+
+Sorting is parameterized by comparison and exchanging.
+Also needed is a random number generator.
+The latter is not supplied here.
+
+\thisverbatim{\unmc}
+\beginverbatim
+\def\cmpn#1#2{%#1, #2 must expand into
+ %numbers
+%Result: \status= 0, 1, 2 if
+% \val{#1} =, >, < \val{#2}.
+ \ifnum#1=#2\global\status0 \else
+ \ifnum#1>#2\global\status1 \else
+ \global\status2 \fi\fi}
+%
+\def\xch#1#2{%#1, #2 counter variables
+ \edef\aux{\csname\the#1\endcsname}\ea
+ \xdef\csname\the#1\endcsname{\csname
+ \the#2\endcsname}\ea
+ \xdef\csname\the#2\endcsname{\aux}}
+!endverbatim
+
+\bluesubhead Ordering
+
+The ordering is parameterized in the ordering table.
+
+\blueexample Numbers, words
+
+\cs{cmpn}, and \cs{cmpw} stand for compare numbers and words.
+\cs{prtn}, and \cs{prtw} stand for print numbers and words, and
+work the way you expect.
+\cs{accdef} takes care that accents are properly defined.
+
+\beginverbatim
+\def\1{314}\def\2{1}\def\3{27}\n3
+\low1\up\n\let\cmp\cmpn
+\quicksort
+\beginquote\prtn,\endquote
+%
+\def\1{ab}\def\2{c}\def\3{aa}
+\def\4{\ij}\def\5{ik}\def\6{z}\def\7{a}\n7
+\low1\up\n\let\cmp\cmpw
+\quicksort
+\beginquote\prtw,\endquote
+and
+\def\1{j\ij}\def\2{ge\"urm}\def\3{gar\c con}
+\def\4{\'el\`eve}\n4
+\low1\up\n\let\cmp\cmpw
+{\accdef\quicksort}
+\beginquote\prtw.\endquote
+!endverbatim
+
+yields
+\def\1{314}\def\2{1}\def\3{27}\n3
+{\low1\up\n\let\cmp\cmpn
+\quicksort
+\beginquote\prtn,\endquote
+%
+\def\1{ab}\def\2{c}\def\3{aa}
+\def\4{\ij}\def\5{ik}\def\6{z}\def\7{a}\n7
+\low1\up\n\let\cmp\cmpw
+\quicksort
+\beginquote\prtw,\endquote
+and
+\def\1{j\ij}\def\2{ge\"urm}\def\3{gar\c con}
+\def\4{\'el\`eve}\n=4
+\low=1\up=\n\let\cmp=\cmpw
+{\accdef\quicksort}
+\beginquote\prtw.\endquote
+}
+
+\bluehead Use
+
+I needed sorting within \TeX{} for indexing and
+for sorting address labels.
+
+\bluesubhead Sorting address labels
+
+Suppose we wish to sort addresses on the secondary key membership number.
+In order to do so the index must point to the name of the database entry
+and the name must point to its membership number, that is
+
+$$\vbox{\hbox{$1\,2\,\ldots
+ \rightarrow$ |\<name>|${}_x\,$ |\<name>|$_y\,\ldots
+ \rightarrow$ |<no>|${}_x\,$ |<no>|$_y\,\ldots$\hss}}
+$$
+
+This can be coded as follows.
+
+\beginverbatim
+\loadindexmacros
+%
+\def\lst#1#2{\advance\k1
+ \ea\def\csname\the\k\endcsname{#1}%
+ \ea\def\ea#1\gobbletono#2}
+\def\gobbletono#1\no{}
+\k0
+\input toy.dat %The test database
+\n\k %number of items
+Membershipno unsorted: \1, \2, ...
+%
+\let\cmp\cmpn\sort
+
+Sorted on membershipno: \1, \2, ...
+!endverbatim
+
+The amazing thing is that we don't have to do much extra because the name
+will expand to the number, which will be used in the comparison.
+I used that \cs{no} was the last element of the database entry,
+but that is not essential.
+Each database entry consist of a triple \cs{lst}, |\<name>|,
+and entry proper within braces.
+
+\bluesubsubhead Typesetting
+
+Now we have to redirect the pointer from the name away from the number
+to the complete entry, that is
+
+$$\vbox{\hbox{$1\,2\,\ldots
+ \rightarrow$|\<name>|$_1\,$|\<name>|$_2\,\dots
+ \rightarrow$|{entry}|$_1\,$|{entry}|$_2\,\ldots$\hss}}
+$$
+
+This is done as follows.
+
+\beginverbatim
+\def\lst#1#2{\def#1{#2}}
+\input toy.dat
+\1 \2 \3 \4 \5 \6
+!endverbatim
+
+\bluesubhead Sorting index entries
+
+One of the processes in preparing an index is sorting the Index Reminders, IRs.
+This is again a sorting process on secondary keys, even tertiary keys.
+
+Given the sorting macros we just have to code
+the special comparison macro in compliance with \cs{cmpw}:
+compare two `values' specified by \cs{def}s.
+Let us call this macro \cs{cmpir}.\ftn{Mnemonics: compare index reminders}
+Each value is composed of
+\item- a word (action: word comparison)
+\item- a digit (action: number comparison), and
+\item- a page number (action: (page) number comparison).
+\smallbreak
+
+The macros read as follows.
+
+\thisverbatim{\unmc\catcode`!=12 \catcode`*=0 }
+\beginverbatim
+\def\cmpir#1#2{%#1, #2 defs
+%Result: \status= 0, 1, 2 if
+% \val{#1} =, >, < \val{#2}
+ \ea\ea\ea\decom\ea#1\ea;#2.}
+%
+\def\decom#1 !#2 #3;#4 !#5 #6.{%
+ \def\one{#1}\def\four{#4}\cmpaw\one\four
+ \ifnum0=\status%Compare second key
+ \ifnum#2<#5\global\status2 \else
+ \ifnum#2>#5\global\status1 \else
+ %Compare third key
+ \ifnum#3<#6\global\status2
+ \else\ifnum#3>#6\global\status1 \fi
+ \fi
+ \fi
+ \fi
+ \fi}
+*endverbatim
+
+Explanation.
+I needed a two-level approach. The values are decomposed
+into their components by providing them as arguments to \cs{decom}.\ftn
+{Mnemonics: decompose. In each comparison the defs
+ are `dereferenced,' that is their replacement texts are
+ passed over. This is a standard \TeX nique: a triad of
+ \cs{ea}s, and the hop-overs to the second argument.}
+The macro picks up the components
+\item- the primary keys, the $\langle word\rangle$
+\item- the secondary keys, the $\langle digit\rangle$, and
+\item- the tertiary keys, the $\langle page\,number\rangle$.
+\smallbreak
+
+It compares the primary keys, and if necessary
+successively the secondary and the tertiary keys.
+The word comparison is done via the already available macro \cs{cmpaw}.
+
+To let this work with \cs{sort}, we have to
+\cs{let}-equal the \cs{cmp} parameter to \cs{cmpir}.
+
+
+\bluehead Sorting in the mouth
+
+Alan Jeffrey and Bernd Raichle have provided macros for this.
+The following variant of the linear sorting given at the beginning of this
+note is inspired upon Bernd's `Quick Sort in the Mouth,' Euro\TeX~\on94.
+The idea is that a sequence is split in its smallest element and the rest
+by an invoke of \cs{fifo}.
+The rest is treated recursively as a similar sequence.
+Another example of (multiple) nested FIFO.
+
+\thisverbatim{\unmc}
+\beginverbatim
+\def\fifo#1%accumulated rest
+ #2%smallest
+ #3%next
+{\ifx\ofif#3 #2\ofif{#1}\fi
+ \ifnum#3<#2
+ \p{\fifo{#1{#2}}{#3}}\else
+ \q{\fifo{#1{#3}}{#2}}\fi}
+%repeat or terminate
+\def\ofif#1\fi#2\fi{\fi
+ \if*#1*\endsort\fi
+ \fifo{}#1\ofif}
+%auxiliaries
+\def\p#1\else#2\fi{\fi#1}
+\def\q#1\fi{\fi#1}
+%terminator
+\def\endsort#1\ofif{\fi}
+%test
+\fifo{}3{123}8{1943}\ofif
+!endverbatim
+
+To assure yourself that it is all done in the mouth \cs{write} the test.\ftn
+{I don't know how to ensure correctness.
+ It is tricky to get the braces right.
+ I used \cs{tracingmacros=1}.}
+
+However, in sorting within \TeX{} I prefer a uniform approach
+not in the least parameterized over the ordering table.
+
+Have fun, and all the best
+\makesignature
+\pasteuptoc
+\endscript \ No newline at end of file
diff --git a/info/laan/paradigm/paradigm.two b/info/laan/paradigm/paradigm.two
new file mode 100644
index 0000000000..819514c0b8
--- /dev/null
+++ b/info/laan/paradigm/paradigm.two
@@ -0,0 +1,622 @@
+%November 1994,Summer 1995, Paradigma: Two part macros
+%C.G. van der laan, cgl@rc.service.rig.nl
+\input blue.tex \loadtocmacros
+\outer\def\endmathdemo{\crcr\egroup$$}
+\tolerance500\hbadness=499\hfuzz=10pt
+\parindent=1pc
+\everyverbatim{\emc}
+
+\bluetitle Paradigms: Two-part macros
+
+\blueissue\maps{95}1
+
+\beginscript
+
+\bluehead BLUe's Design III
+
+Hi folks. When attending Amy's class in \on1990,
+I was much surprised about
+the two-part macro. In Algol, FORTRAN, PASCAL and ADA,
+I had not heard of the concept, let alone I was familiar with it.
+
+In \bluetex{} they are at the heart of the syntax for the markup language.
+To speak with Jackowski `I use them all the time.'
+
+\bluehead One-part vs.\ two-parts
+
+One-part macros are explained in Chapter \on20 of \TB.
+They are used as a shortcut for the replacement text
+parameterized by at most nine arguments.
+
+A two-part macro is different. The first part sets up
+the `environment' followed by script elements and ended
+by the second part, to finish up the environment.
+\LaTeX{} emphasizes the environment concept in for example
+\beginverbatim
+\begin{abstract}...\end{abstract}
+\begin{center}...\end{center}
+\begin{itemize}...\end{itemize}
+\begin{picture}...\end{picture}
+\begin{quote}...\end{quote}
+\begin{tabular}...\end{tabular}
+\begin{thebibliography}...
+ \end{thebibliography}
+\begin{verbatim}...\end{verbatim}
+%etc.
+!endverbatim
+
+\bluehead Why?
+
+The need for bothering about two-part macros is that the
+enclosed script elements are processed on the fly, meaning with
+the right catcodes.
+
+To digress a little on the above the following hypothetical example.
+Suppose we have
+\beginverbatim
+{\catcode`*=13
+ \gdef\begindemo{\begingroup
+ \catcode`*=13 \def*{MUL}}
+ \gdef\demo#1{\catcode`*=13 \def*{MUL}#1}
+}\let\enddemo\endgroup
+!endverbatim
+then the result of
+\beginverbatim
+\begindemo*\enddemo
+%and
+\demo*
+!endverbatim
+is different. The first yields MUL and the latter *.\ftn{A robustness aspect is to
+ use \cs{begingroup} and \cs{endgroup} instead of \cs{bgroup} and \cs{egroup},
+ to facilitate the location of (user) unmatched braces in between.}
+
+Explanation.
+In the two-part case the * is seen after the catcode has changed.
+while in the latter the * is seen, and the catcode {\it fixed}, before it
+is made active.
+
+\bluehead Two-part macros
+
+In Chapter \on20 of \TB{} there is no treatment
+of two-part macros, nor is there an entry for it in the index, alas.
+Exercise \on5.\on7 deals with named blocks and
+checking of them.
+The latter is used in \LaTeX{} to make sure
+that the right environment closing tag is used in the markup.
+In Appendix~E, where example formats (o.a.\ manmac) are explained,
+two-part macros are abundant, for example
+\beginverbatim
+\beginchapter...\endchapter
+\beginlines...\endlines
+\begindisplay...\enddisplay
+\begintt...\endtt
+\begimathdemo...\endmathdemo
+\beginchart...\endchart
+\beginsyntax...\endsyntax
+\begindoublecolumns...\enddoublecolumns
+\exercise...\answer...\par
+!endverbatim
+Furthermore, of late two questions were posed on TeX-nl, which exposed
+the unfamiliarity with two-part macros. All this was enough for me to
+spend a paradigm column on two-part macros.\ftn{Note that \cs{beginchapter}'s
+ title is not processed on the fly. In the `Paradigm: Headache?' I have shown
+ how the title and the contents of the chapter can be processed on the
+ fly.}
+
+\blueexample \cs{beginlines}\dots\cs{endlines}
+
+The functionality is that the script in between is processed
+line-by-line and the result is preceded and followed by an \cs{hrule}.
+\beginverbatim
+\def\beginlines{\par\begingroup\nobreak
+ \medskip\parindent0pt\hrule\kern1pt
+ \nobreak\obeylines\everypar{\strut}}
+\def\endlines{\kern1pt\hrule\endgroup
+ \medbreak\noindent}
+!endverbatim
+In the \TeX book script this is combined with in-line
+verbatim.\ftn{To set text verbatim. By the way, this is another approach
+ to `verbatims with an escape character.'}
+
+Explanation.
+The replacement text of \cs{beginlines}
+is processed, followed by the formatting on-the-fly of the inserted material
+(after \cs{beginlines}) up to \cs{endlines}.
+The replacement text of the latter finishes it up.
+
+Unwanted breaks are avoided.
+The \cs{hrule} is set in the first part and in the
+second part next to opening and closing of the group.
+The in between script is processed with \cs{obeylines} on.
+
+\blueexample \cs{begindisplay}\dots\cs{enddisplay}
+
+The functionality is that the script in between is processed
+as a non-centered display, indented by \cs{displayindent},
+next to the value of \cs{parindent} from the template.
+Pruned from non-essential issues for the two-part macro idea,
+the macros read as follows.
+\beginverbatim
+\def\begindisplay{$$\the\thisdisplay\halign
+ \bgroup\indent##\hfil&&\qquad##\hfil\cr}
+\def\enddisplay{\crcr\egroup$$}
+!endverbatim
+
+Explanation.
+The replacement text of \cs{begindisplay}
+is processed, followed by the formatting on-the-fly of the inserted material
+(after \cs{begindisplay}) up to \cs{enddisplay}.
+The replacement text of the latter finishes it up.
+
+By the way, note that the user is not bothered by the details
+of the template of the \cs{halign};
+it is already there.\ftn{In my \cs{btable} macro, I allowed the possibility
+ for a user to supply his own template, because I stored the
+ template in a token variable.}
+
+\bluesubhead Alignment display
+
+\$\$ followed by \cs{halign} is special, an exception.
+It starts the so-called alignment display, meaning that
+each hbox of the \cs{halign} is added to the main vertical list
+indented at the left by \cs{displayindent}.
+It is {\it not a math display}.
+\cs{the}\cs{thisdisplay} allows to insert assignments.
+
+\bluesubhead And what about a one-part on top?
+
+This is not possible via my method as explained in
+`Paradigms: Head\-ache?', because each table entry
+must have balanced braces. Suppose we have
+
+\beginverbatim
+\def\display#{\begindisplay\bgroup
+ \aftergroup\enddisplay
+ \let\dummy=}
+!endverbatim
+
+then the \cs{bgroup} after \cs{begindisplay} is `unbalanced' in the first
+column, except when it is about one entry only.
+
+\beginverbatim
+\display{a} %works
+\display{a&b}%doesn't work
+!endverbatim
+
+\bluesubsubhead I let it go
+
+Because I could not provide a nice solution I let it go.
+What I tried is out of balance with just using the two-part macros.
+The best I could get at, when we allow in-line verbatim, needs the
+following input.
+
+\thisverbatim{\catcode`\!=12 \catcode`\*=0 }
+\beginverbatim
+\thisdisplay{\catcode`\!=0 \catcode`\\=12 }
+\display{|\a|&b!cr e&f}
+*endverbatim
+
+\bluesubsubhead Conclusion
+
+When tables are involved my method of building one-part
+macros on top of two-part macros is not suited.\ftn
+{If one prefers a simple, but {\em restricted\/} one-part macro provide
+ |\def| |\display#1{| \cs{begindisplay} |#1| |\enddisplay}|.}
+On the other hand for all those cases where the method works I have provided also
+a macro such that \TeX{} can add the one-part automatically given the |<root>|.
+
+\bluesubhead Manmac's two-part macros
+
+These are treated in \TB~\on421.
+Note that there the |\catcode`\^^M| annihilates the effect of \cs{obeylines}.
+The \cs{obeylines} was introduced only to allow for an optional argument.
+Because of my \cs{thisdisplay} toks variable, the \cs{obeylines}
+and its annihilator are no longer needed.
+Knuth's coding has been simplified, at the expense of introducing
+a token variable \cs{thisdisplay}.\ftn
+{Optional arguments\Dash well, more generally `Parame\-te\-riz\-ation'\Dash
+ will be subject of the next paradigm column.}
+
+\bluehead From the \TeX-nl list
+
+Andrea de Leeuw van Weenen and Ton Biegstraaten posed the following problems.
+\bitem let characters print other characters
+\bitem let |_| in math denote an underscore and not a subscript.
+\smallbreak
+
+Although it turned out that my suggestions are not the \on100\% required ones,
+I'll expose them here nonetheless, because they illustrate the use of two-part
+macros.
+
+\bluesubhead Andrea's problem
+
+Let us suppose that the problem is to let B typeset 1, on demand.
+A solution reads.
+
+\beginverbatim
+\def\beginIT{\begingroup\catcode`\B=13 \ITstart}
+{\catcode`\B=13
+ \gdef\ITstart{\def B{\char'61}}}
+\let\endIT\endgroup
+%with use
+ABC\quad
+\beginIT ABC\endIT\quad
+ABC
+!endverbatim
+
+\def\beginIT{\begingroup\catcode`\B=13 \ITstart}
+{\catcode`\B=13
+ \gdef\ITstart{\def B{\char'61}}}
+\let\endIT\endgroup
+
+The result reads\quad
+ABC\quad
+\beginIT ABC\endIT\quad
+ABC.
+
+The problem which remained is that Andrea needs
+simultaneously macros with those letters like B in their name.
+She added the problem to her list of
+`Impossible with \TeX{} problems.\ftn
+{I'm curious to see that list in MAPS some day.}'
+
+\bluesubhead Ton's problem
+
+The restriction, which made that my solution was not appropriate,
+is that it should be possible to use the solution as argument
+of one-part macros, and that to unlimited depth.\ftn
+{Courtesy Piet van Oostrum.}
+In my approach all involved one-part macros had to be rewritten
+into two-part ones.
+However, if people would start to think in two-part macros
+(nearly) all would have been fine.
+
+\beginverbatim
+\def\beginusn{\hbox\bgroup\catcode`\_=13
+ \startusn}
+{\catcode`\_=13\gdef\startusn{\def_{\_}}}
+\def\endusn{\egroup}
+%with use
+$a_b\quad \beginusn a_b\endusn\quad a_b$
+!endverbatim
+
+\def\beginusn{\hbox\bgroup\catcode`\_=13\startusn}
+{\catcode`\_=13\gdef\startusn{\def_{\_}}}
+\def\endusn{\egroup}
+
+\noindent and result\quad
+$a_b\quad \beginusn a_b\endusn\quad a_b$.
+
+On top of the above two-part macros we can add one-part macros
+{\it wih the same functionality}, as explained in the `Paradigm: Headache?'
+
+The one-part macros read
+
+\beginverbatim
+\def\IT{\beginIT\bgroup
+ \aftergroup\endIT
+ \let\dummy=}
+%
+\def\usn{\beginusn\bgroup
+ \aftergroup\endusn
+ \let\dummy=}
+!endverbatim
+
+\def\IT{\beginIT\bgroup
+ \aftergroup\endIT
+ \let\dummy=}
+%
+\def\usn{\beginusn\bgroup
+ \aftergroup\endusn
+ \let\dummy=}
+As expected |ABC\quad\IT{ABC}\quad ABC|\\
+yields
+\quad ABC\quad\IT{ABC}\quad ABC, and
+\par
+|$a_b\quad\usn{a_b}\quad a_b$|\\
+yields
+\quad $a_b\quad\usn{a_b}\quad a_b$.
+
+Note that I omitted here the \# as last element of the parameter list,
+neglecting some built-in security checks.\ftn
+{In the case of the \# end separator the text after the macro invocation
+ must syntactically begin with an opening brace.
+ When the \# separator is omitted, anything can follow |\<tag>|.}
+
+\bluehead Eqalign as two-part macro
+
+As an example of how to cast a one-part macro into two parts,
+and a one-part macro\ftn{Not more limited than the one available.}
+on top, let us rewrite \cs{eqalign}, \TB~\on362.
+The extra functionality of this approach is
+that the two-part variant can be used in those cases where
+the argument needs to be processed on the fly.
+
+\beginverbatim
+\def\begineqalign{\,\vcenter\bgroup
+ \the\thiseqalign\openup1\jot\m@th
+ \starteqalign}
+\def\starteqalign{\ialign\bgroup
+ \strut\hfil$\displaystyle{##}$&&
+ $\displaystyle{{}##}$\hfil\crcr}
+\def\endeqalign{\crcr\egroup\egroup}
+%with the one-part
+\def\eqalign#1{\begineqalign
+ #1\endeqalign}
+!endverbatim
+
+I don't have a concrete example for the need for modifying
+\cs{eqalign} towards processing on the fly. However, it illustrates how
+to rewrite a one-part macro into two-parts as basis.
+
+\bluehead Looking back
+
+I like the consistent markup via
+
+\thisverbatim{\emc}
+\beginverbatim
+\begin<tag>
+<copy>!qquad!hbox!bgroup or!egroup!qquad\<tag>{<copy>}
+\end<tag>
+!endverbatim
+
+The right-hand variant is suited for the markup of headings, for example.
+It has been adopted in \bluetex, as basic syntax, for the markup language.
+
+As an extra user-interface I have added in BLUe's format system as a tribute to manmac
+tags of the form
+
+\beginverbatim
+\blue<tag><copy>\par%or blank line
+!endverbatim
+
+They have lost the processing on the fly behaviour but they are suited for minimal
+markup, reducing the number of curly braces.
+
+\bluehead Multiple use of copy
+
+Sometimes we need to process the copy\Dash or should we talk about data then?\Dash
+more than once.
+An example is the data for a crossword, where I used the data for typesetting
+the puzzle\Dash the data reflect the structure\Dash
+and the solution.
+See `Typesetting crosswords via \TeX, revisited,' \maps{92}2.
+
+The basic idea is to store the data with the right catcodes.\ftn
+{Perhaps the most trivial approach is to insert the data each time we need it.
+ I consider that inelegant and also error-prone. The given macro is a
+ beautiful example, if I may say so, of what Victor Eijkhout and
+ David Salomon call two-step macros (see later),
+ while at the user level the macro can be used
+ as if it is a two-part macro, with the nice opening and closing tags.}
+
+\beginverbatim
+\def\bdata{\begingroup
+ \obeylines\obeyspaces\store}
+\def\store#1\edata{\endgroup
+ \def\storeddata{#1}}
+!endverbatim
+
+Explanation.
+The data, in natural markup line-by-line,
+can be supplied between \cs{bdata} and \cs{edata}. The \cs{edata}
+is a parameter separator and not the invocation of the closing part
+of a two-part macro, although it looks the same.
+What happens is that \cs{bdata} sets up the environment, especially provides
+the right catcodes. \cs{store} ends the environment (scope) and
+stores the data, with the wanted catcodes, as replacement text of
+\cs{storeddata}.
+
+In order to appreciate the subtleness of the above coding
+the following digressions.
+
+\bluesubhead Two-part macros and storing on the fly
+
+This is inhibited by the following\ftn
+{Courtesy Victor Eijkhout in `\TeX{} by Topic,' section \on10.\on3 group delimiters.
+ Awareness of these restrictions is indispensable for writing two-part macros.
+ I omitted the use of \cs{setbox}, because once set in a box one can't do much with
+ the data anymore.}
+\bitem the {\it opening and closing brace\/} of the
+ replacement text of a \cs{def} must be explicit
+\bitem the right-hand side of a token list assignment must be explicit.
+\smallbreak
+
+The following innocent coding is therefore incorrect.\ftn
+{The use of explicit braces is incorrect as well.}
+
+\beginverbatim
+\def\bdata{\begingroup
+ \obeylines\obeyspaces
+ \gdef\storeddata\bgroup}
+\def\edata{\egroup\endgroup}
+!endverbatim
+
+Possible alternatives to my coding above are
+
+\beginverbatim
+\def\data{\obeylines\obeyspaces
+ \gdef\storeddata}
+%with use
+\begingroup
+\data{ab c
+ e fg}
+\endgroup
+%
+%and via the use of a toks variable
+%
+\newtoks\storeddata
+\def\data{\obeylines\obeyspaces
+ \global\storeddata}
+%with use
+\begingroup
+\data{ab c
+ e fg}
+\endgroup
+!endverbatim
+
+Nice aspects of the above approaches are
+\bitem at the outer level I abstracted from storing in a def or a token
+ variable, and
+\bitem the symmetry.
+\smallbreak
+
+Definitely not nice aspects are
+\bitem it looks as if the data are stored in \cs{data}, and
+\bitem the \cs{begingroup} and \cs{endgroup} at the user level.
+\smallbreak
+
+\bluesubhead A one-part on top
+
+My scheme does not work for this case. Some puzzling yielded
+as one-part \cs{data} on top of \cs{bdata},
+with \cs{edata} eliminated.\ftn
+{Note that in-line verbatim as part of the data goes wrong in the sense of unexpected results.}
+
+\beginverbatim
+\def\data{\begingroup
+ \def\store##1{\endgroup
+ \gdef\storeddata{##1}\endgroup}
+ \bdata}
+%With use
+\data{ab c
+ d ef}
+!endverbatim
+
+Explanation.
+\cs{data} starts a group and (re)defines \cs{store}.
+The invocation of \cs{bdata} set the catcodes\Dash via \cs{obeylines} and
+\cs{obeyspaces}\Dash and invokes \cs{store}.
+The argument to the latter macro is stored in
+\cs{storeddata} with the right catcodes.
+\cs{store} also ends the groups.\ftn
+{The group opening in \cs{bdata} is not needed here, but
+ within the context of the two-part macro next to the one part, it is needed.}
+
+\bluesubhead Chapterhead
+
+For \bluetex{} I designed \cs{report}. A report takes chapter titles.
+The problem is how to write macros consistent with the philosophy of starting from
+two-part macros and building a one-part on top, {\it with\/} the chapter
+title also stored for use in the running headline, for example.
+
+In an abstract sense this is equivalent to the \cs{bdata} \cs{edata}, \cs{data} suite.
+It is even simpler, because I just have to store the title and allow the following use.
+
+\beginverbatim
+\beginchapterhead
+<titlehead> or \chapterhead{<titlehead>}
+\endchapterhead
+!endverbatim
+
+The result must be such that the chapter title will be typeset appropriately within the context,
+as prescribed by the token variables \cs{prechapterhead} and \cs{postchapterhead}, and
+that the title will be stored in the token variable \cs{chaptername}.
+
+\bluesubsubhead Coding the two-part macros
+
+The coding of the two-part macros read as follows.
+
+\beginverbatim
+\def\beginchapterhead{\the\prechapterhead
+ \storechaptername}
+\def\storechaptername#1\endchapterhead{%
+ \chaptername={#1}\endchapterhead}
+\def\endchapterhead{{\chpfont
+ \the\chaptername}\the\postchapterhead}
+!endverbatim
+
+\bluesubsubhead Coding the one-part macro on top
+
+The one-part macro on top reads as follows.
+
+\beginverbatim
+\def\chapterhead{\bgroup
+ \def\storechaptername##1{\egroup
+ \global\chaptername={##1}%
+ \endchapterhead}
+ \beginchapterhead}
+!endverbatim
+
+The head-suite of macros also need processing and storing if not for writing to a ToC file.
+The use of the token variable \cs{prechapterhead} provided the hook to change
+the catcode of the circumflex\Dash
+which in \bluetex{} is default active because of preparing Index Reminders\Dash
+into \on7 and allow processing math as part of the title.
+
+\bluesubsubhead What have we gained?
+
+We can use now the title with different fonts, as title and in the running head.
+Moreover, we can use the \cs{beginchapterhead}, \cs{endchapterhead} pair
+to enclose the title, or let it look as an assignation to |\chapterhead|.
+Looking back a paradigm emerged for the following.
+
+\beginverbatim
+\begin<tag>
+<copy> or \<tag>{<copy>}
+\end<tag>
+!endverbatim
+
+|<copy>| also stored in the token variable |\<tag>name|.
+Useful.
+
+\bluesubhead Multiple use with different catcodes
+
+Like Knuth we are at loss, unless we make use of a file.
+It occurs in manmac's math demos, for example
+\beginmathdemo%TeXbook 128
+ \it Input&\it Output\cr
+ \noalign{\vskip2pt}
+ |$x^2$|&x^2\cr
+\endmathdemo
+needs markup with repetition of the data\ftn
+{Borrowed from \TB{} script. In \bluetex{} I added \cs{crcr}
+ to \cs{endmathdemo}, for consistency with \cs{halign} use.}
+
+\thisverbatim{\catcode`\|=12 \unmc}
+\beginverbatim
+\beginmathdemo
+ \it Input&\it Output\cr
+ \noalign{\vskip2pt}
+ |$x^2$|%<---
+ &x^2 %<---
+\endmathdemo
+!endverbatim
+
+Subtle, very subtle. One thing is crystal clear, however.
+\beginquote
+Because of the above varieties (and pitfalls?),\\
+a discipline of \TeX{} coding is needed.
+\endquote
+
+\bluehead Epilogue
+
+Eijkhout in `\TeX{} by Topic' and Salomon in `Insights and Hindsights'
+treat {\it two-step\/} macros, not {\it two-part\/} macros.\ftn
+{Apparently they did not inspect manmac in detail.
+ In Eijkhout's book look at section \on11.\on9.\on4, the macro \cs{PickToEol}.
+ In Salomon's courseware look at section \on5.\on19, the macro \cs{elp}.}
+One macro will set up conditions and a second will do the work.
+The difference with two-part macros is that the `work macro' also terminates the conditions,
+while in two-part macros the second part has only the functionality to terminate.
+Probably other macros are involved to do the work.
+A beautiful example from manmac is the non-centered display macro with the following tags.
+
+\beginverbatim
+\begindisplay %to set up conditions
+\startdisplay %to do the work
+\enddisplay %to finish up
+!endverbatim
+
+As known, I prefer\Dash like Knuth\Dash the separation of concerns principle, and
+like opening and closing tags.
+But, \dots I prefer {\em implicit\/} closing tags, in short minimal markup.
+
+To my knowledge it is not possible to build gracefully,
+and with the {\it same functionality}, a one-part {\em table\/} macro
+on top of its constituent two-parts, in full generality.
+
+Have fun, and all the best.
+\makesignature
+\pasteuptoc
+\endscript \ No newline at end of file
diff --git a/info/laan/paradigm/polygon.eps b/info/laan/paradigm/polygon.eps
new file mode 100644
index 0000000000..c8cdc1e1d8
--- /dev/null
+++ b/info/laan/paradigm/polygon.eps
@@ -0,0 +1,16 @@
+%!PS EPSF Nested pentagons
+%%Title: polygon.eps
+%%Creator: cgl
+%%CreationDate: June 17 1996
+%%BoundingBox: -100 -100 100 100
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+%250 500 translate
+%150 0 translate
+10 10 100{dup 0 moveto
+ 5{72 rotate
+ dup 0 lineto
+ }repeat
+}for stroke
+showpage
diff --git a/info/laan/paradigm/polygonii.eps b/info/laan/paradigm/polygonii.eps
new file mode 100644
index 0000000000..a3fbf4c4bd
--- /dev/null
+++ b/info/laan/paradigm/polygonii.eps
@@ -0,0 +1,20 @@
+%!PS EPSF
+%%Title: polygon.eps II
+%%Creator: cgl
+%%CreationDate: June 17 1996
+%%BoundingBox: -100 -100 100 100
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+%250 500 translate
+/r 100 def
+/r1 {r .25 mul} def
+/r3 {r .75 mul} def
+25{r 0 moveto
+ 4{r3 r3 r1 r1 0 r curveto
+ 90 rotate
+ }repeat
+ .9 .9 scale
+}repeat
+stroke showpage
+%%eof
diff --git a/info/laan/paradigm/prpie.eps b/info/laan/paradigm/prpie.eps
new file mode 100644
index 0000000000..aecb95c143
--- /dev/null
+++ b/info/laan/paradigm/prpie.eps
@@ -0,0 +1,98 @@
+%!PS EPSF %-Adobe-2.0
+%%Title: Blue Book Program 14, on page 187
+%%Creator: Adobe Systems Incorporated
+%%CreationDate: Thu Dec 28 18:14:18 PST 1989
+%%BoundingBox: -215 -215 215 195
+%%EndComments
+
+/PieDict 24 dict def
+PieDict begin
+ /DrawSlice
+ { /grayshade exch def
+ /endangle exch def
+ /startangle exch def
+ /thelabel exch def
+
+ newpath 0 0 moveto
+ 0 0 radius startangle endangle arc
+ closepath
+ 1.415 setmiterlimit
+
+ gsave
+ grayshade setgray
+ fill
+ grestore
+ stroke
+ gsave
+ startangle endangle add 2 div rotate
+ radius 0 translate
+ newpath
+ 0 0 moveto labelps .8 mul 0 lineto stroke
+ labelps 0 translate
+ 0 0 transform
+ grestore
+ itransform
+ /y exch def /x exch def
+ x y moveto
+
+ x 0 lt
+ { thelabel stringwidth pop neg 0 rmoveto }
+ if
+ y 0 lt { 0 labelps neg rmoveto }if
+ thelabel show
+ } def
+
+ /findgray
+ { /i exch def /n exch def
+ i 2 mod 0 eq
+ { i 2 div n 2 div round add n div }
+ { i 1 add 2 div n div }
+ ifelse
+ } def
+end
+
+/DrawPieChart
+ { PieDict begin
+ /radius exch def
+ /ycenter exch def /xcenter exch def
+ /PieArray exch def
+ /labelps exch def /titleps exch def
+ /title exch def
+
+ gsave
+ xcenter ycenter translate
+
+ /Helvetica findfont titleps scalefont setfont
+ title stringwidth pop 2 div neg radius neg
+ titleps 3 mul sub moveto
+ title show
+ /Helvetica findfont labelps scalefont setfont
+ /numslices PieArray length def
+ /slicecnt 0 def
+ /curangle 0 def
+
+ PieArray
+ { /slicearray exch def
+ slicearray aload pop
+ /percent exch def
+ /label exch def
+ /perangle percent 360 mul def
+ /slicecnt slicecnt 1 add def
+ label curangle curangle perangle add
+ numslices slicecnt findgray DrawSlice
+ /curangle curangle perangle add def
+ } forall
+ grestore
+ end
+ } def
+
+(January Pie Sales) 24 12
+ [ [(Blueberry) .12 ]
+ [(Cherry) .30 ]
+ [(Apple) .26 ]
+ [(Boston Cream) .16 ]
+ [(Other) .04 ]
+ [(Vanilla Cream) .12 ]
+ ] 0 0 140 DrawPieChart
+
+showpage
diff --git a/info/laan/paradigm/readme.fst b/info/laan/paradigm/readme.fst
new file mode 100644
index 0000000000..25af2b3468
--- /dev/null
+++ b/info/laan/paradigm/readme.fst
@@ -0,0 +1,22 @@
+What is't? (The paradigm.*** files) %June, 1996
+----------
+
+The purpose of the series is to explain and foster \TeX ing paradigms,
+with emphasis on what has been used in BLUe's format system.
+
+Submitted:
+Paradigm: Plain's \item extended MAPS 94.2 (paradigm.itm; about items)
+Paradigm: Headache? MAPS 94.2 (paradigm.hea; about headings)
+Paradigm: Two-part macros MAPS 95.1 (paradigm.two; about two-part macros)
+Paradigm: Parameterization I---Options MAPS 95.1 (paradigm.opt; about \this..., \every...)
+Paradigm: Winds and halfwinds
+ ---Details matter MAPS 96.1 (paradigm.lin; about turtle graphics)
+Paradigm: It's all in the game MAPS 96.1 (paradigm.gam; about tic-tac-toe)
+Paradigm: Loops MAPS 96.2 (paradigm.lps; about loops and tail recursion)
+Paradigm: Searching MAPS 96.2 (paradigm.src; about searching)
+Paradigm: Sorting MAPS 96.2 (paradigm.srt; about sorting)
+Paradigm: Just a little bit of PostScript MAPS 96.2 (paradigm.postscript; about creating epsf)
+ and (paradigm.ps with .ps pictures included).
+
+Kees van der Laan, Hunzeweg 57, 9893PB, Garnwerd, The Netherlands.
+Phone: (31) (0)594 62 1525, email: cgl@rc.service.rug.nl. \ No newline at end of file
diff --git a/info/laan/paradigm/seal.eps b/info/laan/paradigm/seal.eps
new file mode 100644
index 0000000000..679109f814
--- /dev/null
+++ b/info/laan/paradigm/seal.eps
@@ -0,0 +1,26 @@
+%!PS EPSF
+%%Title: Typesetting along arcs
+%%Creator: cgl
+%%CreationDate: June 4 1996
+%%BoundingBox: -110 -40 110 90
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+%150 650 translate
+/Courier findfont 10 scalefont setfont
+/text (happy postscripting to you) def
+/r 100 def
+gsave
+ 90 rotate %begin orientation
+ 0 r moveto%begin point
+{-7.04 rotate 0 r moveto} text kshow
+grestore
+3{25 34 moveto
+ 25 -34 lineto
+ 17 -38.2 lineto
+ 17 20 lineto
+ -17.6 0 lineto
+120 rotate
+}repeat
+stroke
+showpage
diff --git a/info/laan/paradigm/sine.eps b/info/laan/paradigm/sine.eps
new file mode 100644
index 0000000000..4db36ff2bb
--- /dev/null
+++ b/info/laan/paradigm/sine.eps
@@ -0,0 +1,22 @@
+%!PS EPSF
+%%Title: Sine function
+%%Creator: cgl (inspired by Batagelj)
+%%CreationDate: May 27 1996
+%%BoundingBox: -200 -110 200 110
+%%EndProlog
+/Courier findfont 15 scalefont setfont
+%figure scaled by 100
+%x-axes and label
+-200 0 moveto 200 0 lineto
+-15 -15 rmoveto (x) show
+%y-axes and label
+0 -110 moveto 0 110 lineto
+-35 -10 rmoveto (sin) show
+%function
+-180 0 moveto
+-180 10 180{%from step to
+ dup sin 100 mul%(x, 100sin x)
+ lineto
+} for
+stroke
+showpage \ No newline at end of file
diff --git a/info/laan/paradigm/sinedisks.eps b/info/laan/paradigm/sinedisks.eps
new file mode 100644
index 0000000000..2ae7ef88f7
--- /dev/null
+++ b/info/laan/paradigm/sinedisks.eps
@@ -0,0 +1,13 @@
+%!PS Sine with overlapping disks
+%%BoundingBox: -200 -110 200 110
+%%Creator: cgl (METAFONTbook ex 13.10)
+%%CreationDate: June 17 1996
+%%EndProlog
+%300 500 translate
+newpath
+-180 10 180{dup sin 100 mul%(x, 100sin x)
+ 12.5 0 360 arc
+ gsave 1 setgray fill grestore
+ stroke
+} for
+showpage
diff --git a/info/laan/paradigm/textalongarc.eps b/info/laan/paradigm/textalongarc.eps
new file mode 100644
index 0000000000..ea263f3e24
--- /dev/null
+++ b/info/laan/paradigm/textalongarc.eps
@@ -0,0 +1,20 @@
+%!PS EPSF
+%%Title: Typesetting along arcs
+%%Creator: cgl
+%%CreationDate: June 4 1996
+%%BoundingBox: -100 50 100 125
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+/Courier findfont 10 scalefont setfont
+%150 650 translate
+%
+/text (happybirthday) def
+60 rotate
+0 1 12{0 100 moveto
+ dup%double loop var
+ text exch 1 getinterval show
+ -10 rotate
+}for
+stroke
+showpage
diff --git a/info/laan/paradigm/textalongspiral.eps b/info/laan/paradigm/textalongspiral.eps
new file mode 100644
index 0000000000..81a3c45d1c
--- /dev/null
+++ b/info/laan/paradigm/textalongspiral.eps
@@ -0,0 +1,45 @@
+%!PS EPSF
+%%Title: Text along spiral
+%%Creator: jvr
+%%BoundingBox: -100 -100 90 60
+%%EndProlog
+/Courier findfont 20 scalefont setfont
+gsave
+%150 700 translate
+-100 0 moveto 50 rotate
+{-10 rotate 3 0 rmoveto .98 .98 scale}
+(Olga Grineva my charming
+ St Peterburg hostess)kshow
+stroke
+grestore
+500 100 translate
+%
+/l 36 def
+/r {l 22.5 sin mul} def
+/m {l 22.5 cos mul} def
+8{r .5 mul 0 moveto
+ l 0 lineto
+ currentpoint %begin circular arc
+ 22.5 rotate m 0%center
+ r %radius
+ -90 90 arc
+ 22.5 rotate
+}repeat
+%inner circle
+/rin {r .5 mul} def
+rin 0 moveto
+0 0 rin 0 360 arc
+%outer circle
+/rout {r m add} def
+rout 0 moveto
+0 0 rout 0 360 arc
+%extra circles
+/rin {r .25 mul} def
+22.5 rotate
+8{m rin add 0 moveto
+ m 0 rin 0 360 arc
+ 45 rotate
+}repeat
+stroke
+showpage
+showpage
diff --git a/info/laan/pwt/README b/info/laan/pwt/README
new file mode 120000
index 0000000000..966a6277c5
--- /dev/null
+++ b/info/laan/pwt/README
@@ -0,0 +1 @@
+readme.fst \ No newline at end of file
diff --git a/info/laan/pwt/pwt.aft b/info/laan/pwt/pwt.aft
new file mode 100644
index 0000000000..896198cbf8
--- /dev/null
+++ b/info/laan/pwt/pwt.aft
@@ -0,0 +1,293 @@
+\input blue.tex \loadindexmacros \report
+
+\bluechapter Afterthoughts
+
+\beginsummary
+This chapter relates BLUe's format to existing formats and styles,
+especially \AmS-(La)\TeX, (La)\TeX, LAmS\TeX, and the TUGboat styles.
+At the end some statistics about processing PWT has been included.
+\endsummary
+
+Why this work? Is \LaTeX{} not sufficient?
+\LaTeX{} was not necessary, the \TeX book contained it all, \smiley.
+This advantage turned out to be a severe disadvantage.
+\TeX{} was simply too much, too unusual and ahead of its time.
+The bad news is, alas, that \TeX{} is very error-prone,
+in the hands of the casual layman.\ftn{Don't misunderstand me,
+ the software itself is as free of errors as bugfree can be.
+ No, it has all to do with people who partly
+ understand the system, but need macros.
+ Many a released macro\Dash the more so for collections of macros\Dash
+ is immediately followed by an improved version, and so on. The last
+ observation is due to George Greenwade, and I agree with him.}
+One has to be very precise, has to oversee all the consequences,
+and has to be utmost, utmost consequent.
+
+Perhaps because of the latter Lamport dared to do less,
+thought that simplifying is the way out. To quote Dijkstra
+\begincenter\noindent`Abstraction is our only mental tool to
+ master complexity'
+\endcenter
+He provided a system tuned for the end-user,
+along with a users' guide.
+The latter is the big deal for general acceptance.\ftn{BLUe's format system
+ not only provides the macros and the users' guide PWT, no it also provides
+ the background articles, especially the paradigm series, next to articles
+ which account in detail for some other formats like manmac, AMS, and \TUB.}
+\begincenter
+If only there had been a users' guide for manmac,
+the \AllTeX{} world would have looked much different
+from what it is today. {\TB} is
+`intended for people who have never used {\TeX} before,
+as well as for experienced {\TeX} hackers.
+\endcenter
+Below I'll very roughly characterize other formats, which enjoy a general
+acceptance, in relation to BLUe's format.
+The AMS and TUG styles, and the work of Spivak, have been
+surveyed\Dash and commented in depth\Dash in separate articles.
+
+
+^^{\AmSTeX}
+\bluehead \AmS-(La)\TeX
+
+These formats are not personal but provided and maintained by the \AMS.
+It is a rich and wealthy source. My comments date back to {\oldstyle1992},
+when I studied the formats in detail.
+Their user and installation guides are very good.
+The coding is clever, very clever, but tends to be monolithic.
+It is not easy to borrow parts from it. The formatting of references
+in \bluetex{} has been inspired upon \AmSTeX's preprint style.
+
+^^{\LAMSTeX}
+\bluehead \LAMSTeX
+
+Michael Spivak did a great job.
+His macros for tables and commutative diagrams
+are impressive, very impressive.
+The way he recast the \LaTeX{} functionality looks very promising.
+It is only a pity that his code does not enjoy general acceptance,
+as far as I know.
+It is even sadder that his codings have not been
+studied nor borrowed from.\ftn{I must confess that I was put off by
+ his argument for why an \cs{else} is needed within \cs{loop} \cs{repeat}.
+ Not true, IMHO, with all respect. A little Boolean arithmetic will do,
+ and is useful for other purposes too. I explained that in `Syntactic
+ Sugar,' and showed codes for that.}
+
+
+^^{\LaTeX}
+\bluehead La\TeX
+
+Indeed, \LaTeX{} is not sufficient, although much of
+the functionality of BLUe's format was already provided by \LaTeX.
+The setup of BLUe's format is much different though.
+\LaTeX{} does not suit my purposes.
+Its Achilles heel is customization.
+Some features of BLUe's format are
+its open eye for change,
+its openendedness,
+next to
+its turtle graphics,
+its databases,\ftn{This is much more general than {\em separately stored\/}
+ style files.}
+and last but not least its (mini-)indexing on the fly,
+that is what I need.
+I understand \bluetex{} and feel happy with it, \winksmiley,
+probably for the rest of my life.
+The great\Dash not to be underestimated\Dash virtues of \LaTeX{} are
+\begincenter
+separate style files
+users' guide
+general acceptance
+\endcenter
+BLUe's format is stable, compatible with plain \TeX,
+well-organized, and reasonably compact.
+I have tried to combine the best of both worlds.
+\begincenter
+Stay with Knuth with respect to his unsurpassed markup, and
+borrow Lamport's awareness of the necessity of a users' guide.
+\endcenter
+If you ponder about a manmac users' guide, it is mandatory to pay attention
+to developments since.\ftn{However, I must confess that I'm not
+ completely up to date with \PS, Adobe's Photoshop, nor Acrobat.}
+That is how BLUe's format emerged.
+A tribute to manmac and some more, that is the royal road I passed by.
+Reality shows that manmac.tex has been neglected by the \AllTeX{}
+community.
+Given the reputation of Don Knuth, and the wide-spread use of \LaTeX,
+I'm realistic about the acceptance of BLUe's format.\ftn{Thinking aloud:
+ I would be happy if {\oldstyle50}\% of NTG's members finds something of
+ interest in BLUe's format, be it the system, a nice macro, or just
+ an eye-opener with respect to markup or computer-assisted
+ typesetting in general. From CyrTUG I expect that even {\oldstyle75}\% of their
+ members can take advantage of the system.
+ And what about {\oldstyle10}\% of the {\it unorganized\/} \TeX{} users,
+ \winksmiley?}
+Nevertheless, I hope that BLUe's format will find its niche within the spectrum of
+tools for computer-assisted production and consumption of information.
+IMHO, with all respect, it deserves it. \winksmiley.
+
+In the past I used \LaTeX{} but was unhappy with
+the layout, and therefore added modifications, like many of us.
+The results did not satisfy me, because
+I never got the feeling that I understood the coding.
+Even worse, I never felt happy with the coding of \LaTeX.
+
+Since then, I have become more and more enthusiastic about Knuth's markup,
+especially about the subtleness of plain and manmac.
+Understanding his macros is a real challenge, but once mastered
+you feel like in heaven. It gave me such a pleasure.
+The beneficial spinoff of this thorough study was that
+the knowledge gained contributed much to the compactness of
+BLUe's format.
+
+At the Euro\TeX{} {\oldstyle94} the new, long-awaited
+\LaTeX{\oldstyle2}$\epsilon$ went public.
+During the conference I was asking myself over and over the same questions,
+to uncover the reasons why I don't believe that the approach taken
+is the right one, especially for self-publishing authors.
+My septicisms come down to the following.
+
+\bitem \LaTeX{} is essentially quasi-static in contrast with
+ plain, which is frozen and hence stable. I know that dynamics is the
+ nature of progress, but only a small amount needs change.
+ The lack of the awareness to separate the quasi-static part
+ from the stable part, is what I don't like.
+\bitem The macros are essentially one-part macros with flexibility
+ via optional and ordinary parameters. The mechanism of parsing
+ optional arguments, is a non-\TeX{} approach, at the expense of
+ cumbersome and monolithic coding.
+ Two-part macros should be at the basis,
+ with options via token variables. As far as my experience goes
+ this will yield simpler coding, with the benefits of
+ easier maintenance.
+\bitem \LaTeX{} is verbose and far from minimal markup
+\bitem \LaTeX{} is not easy to customize
+\bitem \LaTeX's macros are incompatible with plain, even the use of
+ \cs{def} is not possible\ftn{I know of the annoyance
+ of silently redefined macros, but nevertheless.}
+\bitem \LaTeX{} turns out to be a cuckoo's egg
+\bitem \LaTeX{} tends to represent the establishment,
+ not what individuals really need, IMHO, with all respect.
+ The imposing character is believed to be beneficial for
+ publishers, to ascertain that authors don't use markup
+ different from the standard style. Much truth in there, but the
+ world is changing. I favour simple tools,
+ which I understand to a high degree, and which are cooperative.
+\smallbreak
+I only hope that the \LaTeX{} developers can take advantage of my views.
+
+^^{TUGboat styles}
+\bluehead TUGboat styles
+
+I learned a lot from those. The functionality of the OTR has
+been taken over in BLUe's format.
+It is just a pity that a preprint style is lacking.
+I also consider the approach of the separate streams
+\TeX{} next to \LaTeX, cumbersome to maintain.
+At the lower level separate collections are in use next to each other.
+For example the verbatim macros for \TeX{} differ from those for \LaTeX.
+A common picture environment for both streams is not there either.
+Similar to the AMS formats the coding is monolithic.
+It is not easy to borrow parts from it.
+
+\displaycenterline{Not a common \TeX{} format with a \LaTeX{}
+ user interface on top.}
+
+I have used them for quite a while, but once I looked into the code,
+I decided to go over to the manmac line of thought, back to the roots,
+so to say, with all respect.
+
+\bluehead The future
+
+More important, and thinking positively, is to day-dream about the future
+and especially to ponder about the new media to assist information
+production and consumption.
+
+It is a little peculiar that I sympathize so much with the new media,
+the newer developments, which will make it possible for the
+ \displaycenterline{masses to access information easily,}
+the more so because this file is much like a traditional book.
+It does not combine different media like text, sound, colours or graphics
+in general. Not even does it allow you to click through the file
+in a hyperlink sense. I'm not ashamed of that.
+There are so many problems to be solved,
+before we come even close to coping better
+with information, I mean taking real advantage of the information.
+
+The buzzword which goes along
+with this is the `electronic highway,'
+having rapid and cheap access to
+information stored digitally.
+Perhaps the words `database publishing,' and
+`multi-media' appeal even more.
+Whatever the value of these approaches and promises,
+let us down-to-earth ponder
+about electronic equivalents of the old goodies, such as
+a table of contents,
+an index,
+and cross-references.
+
+
+\thissubhead{\runintrue}
+\bluesubhead A Table of Contents\par is getting more and more important.
+When tables of contents, ToCs for short, are generated automatically,
+which is nice, they can't be searched for in a script.
+A surprising consequence is to store a ToC also explicitly,
+and perhaps separately from the work, because
+people first like to browse through a table of contents or
+read.me file.
+For electronic use the page numbers attached are not that important.
+How to access parts is more important. Therefore the ToC should contain
+hyperlinks to the real information.
+
+\thissubhead{\runintrue}
+\bluesubhead An Index\par is also no longer tied up with one book.
+Databases can be searched on keywords, or more selectively browsed via queries,
+to spot what one is looking for, whatever the context.
+When we have spotted what we are looking for,
+another click would be all that is needed to get
+into it.\ftn{Let us forget, for the moment, the reality of
+ the morning-after invoice.}
+
+\thissubhead{\runintrue}
+\bluesubhead Cross-referencing\par is really outdated.
+Electronically, we are not limited by the traditional sequential
+order of numbered pages. Relational links are there to
+bring you immediately to the material required, be it to more details or
+to just the opposite, a survey, with fewer details,
+or, \dots\thinspace another representation, like spoken
+in a different language.
+
+\thissubhead{\runintrue}
+\bluesubhead The bad news\par is that none of those goodies mentioned are
+part of this work. Just an afterthought, some wishful thinking,
+pondering about future work.
+
+Frank Poppe communicated that he would be happy with the \TeX book script
+with hyperlinks. That he could easily click through the related material
+spread over the file. Indeed that would be nice.
+
+\bluehead Statistics about processing PWT
+
+The booklet contains in the draft version of spring {\oldstyle1995},
+{\oldstyle125} odd pages and some
+{\oldstyle400} index entries,
+all processed in one pass.
+The sorting of the index did take an hour on my Mac Classic II,
+and {\oldstyle10}K words of memory.
+For re-runs without page changes one can do without \cs{sortindex}
+because \cs{pasteupindex} reads from index.elm.
+\begincenterblock
+{\oldstyle967} strings out of {\oldstyle5259}
+{\oldstyle4438} string characters out of {\oldstyle31539}
+{\oldstyle63053} words of memory out of {\oldstyle65536}
+{\oldstyle2531} multiletter control sequences out of {\oldstyle10000}
+{\oldstyle18} hyphenation exceptions out of {\oldstyle307}
+{\oldstyle22}i,{ \oldstyle21}n,{\oldstyle16}p, {\oldstyle216}b,%
+ {\oldstyle1015}s stack positions
+out of {\oldstyle200}i, {\oldstyle60}n,{\oldstyle60}p, {\oldstyle5000}b, {\oldstyle2000}s
+\endcenterblock
+Remark. The needed save-stack size is larger than the usual default\Dash
+ as of {\oldstyle1995}\Dash for a PC.
+\endinput
diff --git a/info/laan/pwt/pwt.cus b/info/laan/pwt/pwt.cus
new file mode 100644
index 0000000000..2e713ac06e
--- /dev/null
+++ b/info/laan/pwt/pwt.cus
@@ -0,0 +1,433 @@
+\input blue.tex \loadindexmacros \report
+
+\bluepictures\bluepagepic
+
+\bluechapter Customization
+
+\beginsummary
+Adaptation of BLUe's format with respect to the look-and-feel
+has been discussed, i.e., adapting
+the page size,
+the headlines and footlines,
+and the various headings.
+Transformation of a BLUe script into a MAPS submission
+has been touched upon.
+At the end a quick look has been given
+into the Pandora box of processing
+scripts in other languages.
+\endsummary
+
+The first thing to do is to personalize the format. Make yourself known.
+In order to do so look in the file \bluetex{} for the comment line that
+starts with |%Personalization|, and adjust what follows.
+
+Customization comes down to adapting \TeX's and \bluetex's parameters.
+The big deal of ^{customization} is to adapt BLUe's format for processing
+scripts in your language.
+Apart from trivia this is beyond the scope of this guide.
+
+\bluehead Changing the look-and-feel
+
+Much of the ^{look-and-feel} is determined by
+the page size,
+the headline and footline,
+the section beginnings,
+and the opening part.
+
+
+\bluesubhead Adapting the page size
+
+A page is composed of the page proper block,
+$\cs{pagewd}{\times}\cs{vsize}$, preceded by the headline
+and followed by the footline.
+^|\hsize| is the width of a column.
+^|\vsize| is the length of a column with footnotes included.\ftn{The
+ length of the page can actually become a little shorter or longer
+ because of the depth of the last box.}
+Customization of the page dimensions can be done by adapting
+|\A4|.\ftn{Customization of the
+ page composition is beyond the scope of this guide
+ and requires knowledge of the output routine. ^|\A5|, or other sizes,
+ can be added.}
+^|\twocol| has been included below, along with the picture ^|\bluepagepic|.
+^^|\onecol|
+
+\blueexample Page layout, and two-column settings
+
+{\gutter6em
+\begindemo
+\def\twocol{\maxcols=2 \xcol=1
+ \onecolfalse\A4
+ \hyphenchar\tentt='055
+ \hyphenchar\ninett='055
+ \hyphenchar\eighttt='055
+ \tolerance500
+ \hbadness=499
+ \hfuzz=5pt
+}
+!yields
+\bluepagepic
+\enddemo}
+Names are inherited from \TUB's output routine.
+^|\xcol| denotes the number of the actual column.
+The value of the ^|\hyphenchar|
+allows hyphenation for words in those fonts.
+The tolerance and badnesses are set to circumvent superfluous messages,
+at the expense of less optimum results.\ftn{For the pragmatic approach
+ of getting rid of overfull boxes, I'm much indepted to Phil Taylor.}
+
+^|\hoffset| and ^|\voffset|, the offsets
+of the left upper corner of the page to the boundary of the paper,
+are both {\oldstyle1}\thinspace cm less than plain's
+default of {\oldstyle1}\thinspace in.
+
+^|\A4| reads as follows.
+\beginverbatim
+\def\A#1{\csname A#1\endcsname}
+\ea\def\A4{\ifonecol\hsize16cm\pagewd\hsize
+ \else\hsize9cm\intercolwd.5cm
+ \pagewd\hsize\advance\pagewd\hsize\advance\pagewd\intercolwd
+ \fi\colwd\hsize \vsize25cm}
+!endverbatim
+
+\thissubhead{\runintrue}
+\bluesubhead The header and footer\par are generated from the
+ token variables \cs{headline}, and \cs{footline}.
+ Default they read as follows.
+
+\blueexample Default headline and footline code
+
+\begincenterverbatim
+\headline={\hbox to\pagewd{\it\the\issue\hfill\the\title}}
+%
+\footline={\hbox to\pagewd{\fiverm\rlap{Draft \today}\hfill
+ \dash\the\pagenumber\dash\hfill\llap{\copyright cgl}}}
+!endcenterverbatim
+An extra dimension ^|\pagewd| is needed
+in order to have a quantity independent of the number of columns.
+\exercise What are the ^|\headline| and ^|\footline| for \cs{report}?
+\answer The regular headlines and footlines are as above with a few
+ elements altered.
+ However, there is a complication in the sense that
+ the headline is suppressed for the first page
+ of the chapter. This is handled in \cs{postchapterhead}.
+ Consult the formatbase, especially the report format.
+
+\exercise How can we use the \cs{headline} for transparencies?
+\answer Similar to the running head of a book the headline\Dash well, the header
+ part\Dash can be put in a headline with contextual information
+ dynamically coupled. See the formatbase, especially the transparencies
+ format.
+
+\exercise In a book the footline contains usually the page number away from
+ the back, that is, right on right-hand pages and left on left-hand
+ pages. How can we achieve this?
+\answer Provide
+\beginverbatim
+\footline{\hbox to\pagewd{\ifodd\pageno\null\hfill\fi\number\pageno\hfil}}
+!endverbatim
+
+
+\bluesubhead Title part
+
+The markup of the beginning\Dash title part\Dash
+and the markup of the end\Dash closing part\Dash
+of a regular BLUe script are implemented as follows.
+
+\blueexample Beginscript and endscript code
+
+^^|\beginscript| %^^|\endscript|
+^^|\beginkeywords|%^^|\endkeywords|
+^^|\beginabstract|%^^|\endabstract|
+^^|\begincontents|%^^|\endcontents|
+\thisverbatim{\catcode`\!=12 \catcode`\*=0 }
+\beginverbatim
+\def\beginscript{\lastscript\the\everyscript\begingroup
+ \the\thisscript
+ \hrule\kern2ex\noindent
+ {\titlefont\the\title}\if!\the\subtitle!\else
+ {\subtitlefont\the\subtitle}\fi
+ \medskip\the\author
+ \medskip\pasteupkeywords
+ \medskip\pasteupabstract
+ \medbreak\pasteupcontents\smallbreak}
+
+\def\endscript{\makesignature\xcol=\maxcols \vfil\eject\endgroup
+ \tracingstats1\stop\thisscript{}}
+%with at the lower level
+\def\beginkeywords{\setbox\keywordsbox\vbox\bgroup\subhead{\sevenbf
+ \the\keywordsname: }\small}
+\def\endkeywords{\egroup}
+
+\def\beginabstract{\setbox\abstractbox\vbox\bgroup\centerline{\sevenbf
+ \the\abstractname}\beginquote\small}
+\def\endabstract{\endquote\egroup}
+
+\def\begincontents{\setbox\contentsbox\vbox\bgroup\small\noindent
+ \the\contentsname\par\obeylines}
+\def\endcontents{\egroup}
+
+\def\pasteupkeywords{\box\keywordsbox}
+\def\pasteupabstract{\box\abstractbox}
+\def\pasteupcontents{\unvbox\contentsbox}
+*endverbatim
+
+Customization can be done by changing the above.
+I have omitted the macros, which allow the use |\<tag>{...}|,
+the short variant.
+Whatever your change of |\begin<tag>| or |\end<tag>|,
+the short variant |\<tag>{...}| remains invariant, that is,
+complies automatically with your change.\ftn{Consult the paper
+ `Paradigms: Two-part macros' for the explanation.}
+\exercise How can we suppress the author information at
+ the end of the document?
+\answer Let \cs{makesignature} equal to \cs{relax}.
+
+%end answer
+\exercise Enumerate the token variables which
+ contain language-dependent names.
+\answer The token variables |\<tag>name|:
+ \cs{abstractname},
+ \cs{keywordsname},
+ \cs{contentsname}.
+
+%end answer
+\exercise How can we obtain ^{Roman\ numerals} as page numbers? ^^|\folio|
+\answer The control sequence to obtain Roman numerals is \cs{romannumeral}.
+ In plain \TeX{} Roman numerals are obtained automatically for
+ page numbers when \cs{folio} is used instead of \cs{pageno} provided
+ the number is negative.
+ From \TB{} 252, 362 the following.
+\thisverbatim{\unmc}
+\beginverbatim
+\def\folio{\ifnum\pageno<0 \romannumeral-\pageno
+ \else\number\pageno \fi}
+!endverbatim
+See also page 40 and 41 of \TB, especially when uppercase
+roman numerals are needed.
+In \bluetex{} I introduced the token variable |\pagenumber{\folio}|.
+
+%end answer
+\exercise How can we suppress the headline on the first page?
+\answer This is a very common \TeX ing paradigm. The idea is
+ to redefine the responsible control sequence in such a way that
+ on first invocation the only action is to define itself by the
+ regular replacement text. For example in the report format,
+ in order to suppress the headline on the first page of each chapter,
+ I defined \cs{headline} in \cs{postchapter} as follows.
+\beginverbatim
+\postchapterhead={\vskip3pc\headno=0 \exno=0 \exano=0
+ \headline={\global\headline={\hbox to\pagewd
+ {\sevenrm\the\chaptername\hfill\it\the\title}}}}
+!endverbatim
+
+%end answer
+\exercise How come that more than one script can be formatted
+ despite \cs{stop} in \cs{endscript}?
+\answer The explanation is in the definition of \cs{notlastscript}
+ and \cs{lastscript}, which read as follows.
+\beginverbatim
+\def\notlastscript{\let\stop\relax}
+\def\lastscript{\let\stop\end}
+!endverbatim
+
+%end answer
+For parameters which govern special constructs, such as
+the shape of paragraphs, items, tables, or \dots\thinspace,
+see the chapters on the issue.
+
+\bluesubhead Section beginnings
+
+^|\head| can be customized by adaptation of the parameters
+^|\prehead| and ^|\posthead|, to position the head within context.
+^|\ignorewhitespace| does what its name suggests.\ftn{It
+ gobbles white space after \cs{beginhead} up to the head title.}
+The font used is parameterized in ^|\headfont|.
+
+\blueexample Head code
+
+\begincenterverbatim
+\prehead{\vskip0pt plus5ex\penalty-250\vskip0pt plus1ex
+ \bigskip\noindent}
+\posthead{\medskip\nobreak\noindent\ignorewhitespace}
+\def\beginhead{\the\prehead\bgroup\headfont}
+\def\endhead{\egroup\the\posthead}
+!endcenterverbatim
+\cs{subhead} and \cs{subsubhead} are constructed similarly.
+
+\exercise How can we ^{center\ heading}s?
+\answer It looks like to extend \cs{prehead} and \cs{posthead},
+ something like
+\beginverbatim
+\prehead\ea{\the\prehead\centerline\bgroup}
+\posthead\ea{\ea\egroup\theposthead}
+!endverbatim
+However, this does not work\Dash explain why the head flushes right\Dash
+because we can't use \cs{bgroup} and \cs{egroup} to enclose an argument.
+A solution is to append \cs{hfil} to \cs{prehead} as follows.
+\beginverbatim
+\prehead\ea{\the\prehead\hfil}
+!endverbatim
+
+%end answer
+
+\bluesubhead Raster layout and \TeX
+
+As Nico Temme communicated to me publishers require sometimes
+fixed white space between headings and the surrounding text.
+How to achieve this?
+Naively this looks simple, just provide \cs{prehead} and \cs{posthead}
+with the fixed skips.
+The problem is, however, that \TeX{} likes some freeway
+to shrink or stretch a little.
+
+\bluehead BLUe script into MAPS submission
+
+^^{BLUe\ script\ into\ MAPS}
+In principle this is not too laborious, because only a handful of
+outer-level control sequences need adaptation.\ftn{In general
+ transformation is very complex and confusing,
+ for example if we also consider automatic generation of an index.
+ It is next to impossible to do this automatically.
+ When submissions to (various) journals are
+ in sight, keep the markup as simple as possible.
+ And why not stick to simplicity as a rule?}
+
+MAPS.sty is \LaTeX{} biased.
+To give you an impression of the amount of work
+a template for a MAPS submission and a transformation table is
+given below.\ftn{I don't use
+ times fonts,
+ don't use Babel (no dutch.sty, nor english.sty),
+ no fancyheadings are involved,
+ don't need
+ Mittelbach's multicolumn, nor Sch\"opf's verbatim facilities,
+ and the like.
+ Until today MAPS has used \LaTeX{\oldstyle2}.{\oldstyle09}.
+ Minimal markup tags have been neglected.}
+Because BLUe's format is a personalized format you have to add
+|\author{...}| and the like.
+
+Globals deserve special attention, because they might
+interfere with other submissions.
+%The MAPS style is not of an active type, and %in the sense of an active
+%therefore retrograde adaptations are needed. %document. (cgl)
+
+The title block is filled in or simply reused
+from the template. No problem at all.
+A table of contents can be moved to the back part.
+
+I fell back upon
+\LaTeX's bibliography handling.\ftn{Nowadays, I tend to omit the
+ references in a MAPS submission, and refer to my database
+ lit.dat.}
+My use of so-called `run-in' heads requires special attention.\ftn{The
+ (sub)subhead title is part of the first sentence of the section.}
+Important is that \bluetex's verbatim suite, tables and pictures
+can be reused as such, similar to plain's math constructs.
+For other things like my way of citation\Dash |<author>|, |<year>|\Dash
+no adaptation is needed.
+
+
+\blueexample BLUe script into MAPS submission
+
+\begindemo
+%Template for MAPS submissions
+\documentstyle[twocolumn]{maps}
+\begin{document}
+\title{...}
+\subtitle{...}
+\author{...}
+\date{}
+\maketitle
+
+\begin{abstract}...\end{abstract}
+\begin{keywords}...\end{keywords}
+%Contents table
+%Copy proper
+\head{...}%et cetera
+%back matter, LaTeX's
+\begin{thebibliography}{abcde}
+...
+\end{thebibliography}
+\end{document}
+!yields
+\small\def\rowstblst{}
+\def\x{\lower1ex\null}
+\vruled\fll\def\colsep{$\longrightarrow$}
+\def\btablecaption{} \def\footer{}
+\def\header{BLUe script\cs MAPS.sty script}
+\beginbtable
+$\vcenter{\hbox{\tstrut|\begin|}
+ \hbox{|\end|\x}}$\ abstract
+ \cs$\vcenter{\hbox{|\begin{abstract}|\tstrut}
+ \hbox{|\end{abstract}|\x}}$\rs
+$\vcenter{\hbox{|\begin|\tstrut}
+ \hbox{|\end|\x}}$\ keywords
+ \cs$\vcenter{\hbox{|\begin{keywords}|\tstrut}
+ \hbox{|\end{keywords}|\x}}$\rs
+|\beginscript| \cs|\begin{bijlage}| \rs
+|\head| \cs|\let\head\section|\rs
+$\vcenter{\hbox{|\bitem|}
+ \hbox{\raise2ex\null\lower1ex\null\dots}
+ \hbox{|\bitem|\x}
+ \hbox{|\smallbreak|}}$
+ \cs$\vcenter{\hbox{|\begin{itemize}|\tstrut}
+ \hbox{|\item...|\strut}
+ \hbox{|\item...|\strut}
+ \hbox{|\end{itemize}|\x}}$\rs
+$\vcenter{\hbox{\tstrut|\begin|}
+ \hbox{|\end|\x}}$\ quote
+ \cs$\vcenter{\hbox{|\begin{quote}|\tstrut}
+ \hbox{|\end{quote}|\x}}$\rs
+|\ftn| \cs|\footnote|\rs
+$\vcenter{\hbox{|\begin|\tstrut}
+ \hbox{|<escape char>end|\x}}$\ verbatim
+ \cs$\vcenter{\hbox{|\begin{verbatim}|\tstrut}
+ \hbox{|\end{verbatim}|\x}}$\rs
+|\endscript| \cs$\vcenter{\hbox{\tstrut
+ |\end{bijlage}|}
+ \hbox{|\end{document}|\x}}$
+\endbtable
+\enddemo
+^^{BLUeto you-name-it}
+In general the mapping of a BLUe script into a you-name-it script
+is near to impossible to automate completely, because of the
+incompatibilities.
+As far as I know\ftn{As of {\oldstyle1995}}
+BLUe's format is the only formatting \TeX-like system
+which has embraced the database idea at large,
+has provided macros for `Turtle graphics.' and which
+can produce indexes on the fly.
+
+However, when BLUe's format will be adopted by publishers
+the conversion problem is no longer there, because the publisher
+might issue the default as a ^{preprint format},
+with result that authors and publishers use the same markup tags,
+while the formatted result is in agreement with the context, because
+the publisher can best customize the various replacement texts
+to their wishes.
+As usual a hard \TeX nical problem can be
+solved more elegantly non-\TeX nically.
+
+\bluehead Other languages
+
+The Pandora box of customization is to tailor BLUe's format
+towards processing scripts in your language.
+Knuth adapted \TeX{} in {\oldstyle1989},
+and provided \cs{language} to handle hyphenation per language,
+and smarter ligatures, if I'm not mistaken.
+The trivia for adaptation are changing the names
+for document parts, like `Abstract, Keywords,' and similar things.
+In BLUe's format the latter are parameterized in token variables.
+
+More complicated is creating an index on-the-fly in your language via
+BLUe's format.\ftn{For the time being this is open.
+ The language-dependent ordering of letters has been parameterized
+ in an ordering table though.}
+
+An interesting application of formatting simultaneously two (or more)
+languages is: two-column, with each column devoted to a language.
+That is beyond the scope of this guide.
+\endinput
+
diff --git a/info/laan/pwt/pwt.fmt b/info/laan/pwt/pwt.fmt
new file mode 100644
index 0000000000..df373a78e7
--- /dev/null
+++ b/info/laan/pwt/pwt.fmt
@@ -0,0 +1,1467 @@
+\input blue \loadindexmacros \report \hfuzz=15pt
+%\telephone{{\oldstyle31\thinspace{\rm(}0{\rm)}%
+% 594\thinspace62\thinspace1525}}
+
+\bluechapter Formats
+
+\beginsummary
+Next to the regular format BLUe's format contains the
+report and transparencies formats.
+The letter and concert format from the \TeX book have been
+reviewed and the goodies in there have been borrowed.
+The letter format makes use of the address.dat database.
+Treated are among other things
+how to use the formats,
+how to proof separate chapters of a report,
+how to create and update a set of transparencies,
+how to format letters, make address labels, and
+how to extend the databases by a format, tool, or address of your own.
+A table of main tags and a list of the Frequently Used Tags,
+for the letter, report and transparencies format, have been included.
+\endsummary
+
+Before delving into the details of the database approach,
+I'm happy to let you know that you can do without it, can fall
+back on the traditonal method of file inclusion, if for some reason
+or other you don't feel comfortable with databases.
+For example, if you like to make use of the transparencies macros from
+BLUe's format, copy the relevant part from fmt.dat into,
+say, trspar.tex. Then proceed as usual, for example as follows.
+\begincenterverbatim
+\input blue.tex
+\input trspar.tex
+<restofbluescript>
+!endcenterverbatim
+On the other hand those who like the database approach can peruse
+`BLUe's Format databases.'
+
+^^{database,\ fmt.dat}
+\bluehead Use of formats from fmt.dat database
+
+To use a format just start a script with\ftn{Inclusion of files etc.
+ is handled behind the scenes. Default the format is suited for an article.}
+\displaycenterline{|\input blue.tex \<formatname>|}
+The markup tags are upwards compatible, i.e.,
+the tags from the regular \bluetex{} are still there,
+but extended with extra tags.
+The coding of the tags from the default format
+have been adapted to the look-and-feel of |\<formatname>|,
+the design if I may say so.
+
+\bluesubhead Adding a format
+
+To ^{add\ a\ format} to the BLUe's format system the following has to be done.
+\bitem separate the storage-allocating
+ control sequences from the format,
+ i.e., treat \cs{newtoks} and the like separately
+\bitem add the allocation control sequences to \bluetex
+\bitem add the format with an `opening' and `closing' to fmt.dat
+\bitem add a load macro to \bluetex.
+\smallbreak
+In actual fact this comes down to the following. Add to fmt.dat
+\begincenterverbatim
+\tool\<yourformat>fmt%Opening
+<themacros>
+\endinput %Closing
+!endcenterverbatim
+and include in the kernel \bluetex{} the load macro and the storage allocations
+^^{entry\ for\ fmt.dat}
+\thisverbatim{\catcode`\|=12
+ \catcode`\!=12
+ \catcode`\~=0
+ }
+\begincenterverbatim
+%load macro
+\def\<yourformat>{\let\<yourformat>fmt=x
+\loadformat
+\let\<yourformat>fmt=\undefined
+}
+%storage allocations
+\new<type>\<name>
+%<type> is one of box count dimen fam insert language skip
+% muskip read toks write
+%et cetera
+~endcenterverbatim
+Note the difference between |\<yourformat>| and |\<yourformat>fmt|.
+Take care that |\<yourformat>fmt| remains undefined afterwards.
+Now and then I safeguarded formats from double loading.
+
+There are a few restrictions on the macros, as a consequence
+of the skipping mechanism used, via \TeX's argument processing.
+\bitem no outer defs, i.e., \cs{newtoks} and the like should
+ be declared in regular \bluetex
+\bitem no \cs{par}, use \cs{endgraf}, or |\csname par\endcsname|
+\bitem no blank lines, insert \%
+\smallbreak
+Remarks.
+The restriction with respect to your outer defs can be circumvented by
+\bitem define all macros non-outer, or
+\bitem use |\csname newtoks\endcsname\<tag>|, and the like, or
+\bitem extend \cs{unouterdefs} by your outer defs, i.e.,
+ include \cs{newtoks} and similars. When these are
+ part of the format or tool, multiple use
+ reallocates memory, and because \TeX{}
+ lacks a garbage collector this will cost extra
+ memory locations.
+\smallbreak
+
+\bluesubsubhead Check for data integrity
+
+After a format has been added one can check whether the file can be scanned by
+\TeX{} via making a table of contents as follows.
+\begincenterverbatim
+\input blue.tex
+\contentstoolsorfmt{fmt}
+\bye
+!endcenterverbatim
+This script produces no pages of output (that is OK).
+The file contentsfmt will be created though.
+
+\bluesubsubhead Verbatim listing of a format
+
+This problem is induced by my multi-file approach. Of course
+one can extract the format by an editor et cetera as alternative.
+
+\blueexample Verbatim listing of letter format
+
+\begincenterverbatim
+\input blue.tex \let\letterfmt=x
+\long\def\tool#1{\ifx#1\undefined\bgroup\unouterdefs\ea\gobbletool
+ \else\ea\toolverbatim\fi}
+%\def\toolverbatim{\thisverbatim{\baselineskip12pt plus2pt minus1pt
+% \lineskip1pt plus1pt minus1pt}\beginverbatim}
+\def\cgl{\endverbatim\endinput}
+\input fmt.dat \bye
+!endcenterverbatim
+
+\bluesubsubhead Conventions for entries fmt.dat
+
+come down to
+\bitem update the contents at the beginning of the file fmt.dat
+\bitem supply |\message{ ---<...> format, <date>, <owner>--- }| in the beginning
+\bitem take care of visual layout for print out
+\bitem provide additional comments which contain markup for line numbering
+\bitem add history of changes
+\bitem add a table of contents with line numbers.
+\smallbreak
+The layout is aimed at printing in two columns and starts in a new column.
+The selective line numbering is controlled by the following control sequences
+\item{}\cs{numvrb}, to start line numbering
+\item{}\cs{vrblin} = |<number>|, to adjust line counter, and
+\item{}\cs{nonum} to switch off line numbering.
+\smallbreak
+Do remember that the escape char is the semi-colon.
+
+\blueexample Template for an entry in fmt.dat
+
+\begincenterverbatim
+%end%%%%%<lastlinepreviousformat>%;newcol
+%
+%
+%begin%%%%%%%%%%%%%%%%%%%%%<....>%;numvrb
+\tool\<...>fmt
+\message{ ---<...> format, <date>,
+ <owner>--- }
+%<authorinformation>
+%<theformatproper>
+\endinput %;nonum
+%Contents
+%<item>...................<pagenumber(s)>
+%etc
+%History of changes
+%<date> <change>
+%etc
+%end%%%%%%%%%%%%%%%%%%%%%%%<....>%!!cgl;newcol
+!endcenterverbatim
+
+\bluehead Concert format
+
+Please open \TB{} on page {\oldstyle411}. What about this concert announcement?
+I never received such a leaflet when attending a concert. ^^{format,\ concert}
+The ones I got are prettier, so there is no use in copying this template.\ftn{I
+ have included the macros in the format \cs{concert} nevertheless,
+ for your convenience.}
+This is more or less in agreement with what
+Knuth states
+\beginquote\noindent
+\llap`Notice that the \cs{composition} and \cs{movements} and \cs{soloists}
+ macros do not include any special provision for vertical spacing; the
+ user is supposed to insert \cs{smallskip}, \cs{medskip}, and
+ \cs{bigskip} as desired. This was done deliberately, because different
+ concert programs seem to demand different spacing; no automatic scheme
+ actually works very well in practice, since musical literature is
+ so varied.'
+\endquote
+What can we learn from the format, especially the macros?
+Usually a lot. Here we go.
+\bitem The simple ^{size-switching macros} are nice, intelligible,
+ and compact, because we don't deal with math in this context.
+ The tags are just \cs{smalltype}, \cs{medtype}, and \cs{bigtype}.
+ A pedagogical stepping stone for size-switching macros in general.
+\bitem The ^|\tsaologo| is nice too. I have used it for
+ delineating parts in `Math into BLUes.' My variant is the macro
+ ^|\partlogo| with the text as argument. The latter is part of \bluetex.
+\bitem The ^|\soloists| macro deserves more general use. It shows
+ how to use \cs{halign} to {\sl center a block of text}. Moreover, it
+ can be recast into a two-part macro.
+ Note that \cs{centerline} has been used, but
+ the \cs{vbox} could have been replaced by math display markup with
+ the automatic insertion of \cs{displayskip} before and aft.
+ And why not get rid of the \cs{cr}? Natural input?
+ A matter of taste? I agree partly. The advantage
+ is the extra option possibility after the opening keyword. In this
+ case we can parameterize over the font to be used.
+\smallbreak
+
+\bluesubhead Centering a block
+
+The coding of \cs{soloists} can be combined with the coding of
+\cs{begindisplay}, \TB{} {\oldstyle421}, to yield a two-part macro for centering a block,
+with the flexibility to specify the font after \cs{begincenterblock}.
+Moreover, I incorporated the natural markup idea. No \cs{cr} has to be
+supplied by the user, \TeX{} will insert those.
+The macro is part of \bluetex. ^^|\begincenterblock|%^^|\endcenterblock|
+\begincenterverbatim
+\def\begincenterblock{\bgroup
+ \let\par\cr\obeylines\startcenterblock}
+{\obeylines\gdef\startcenterblock#1
+ {$$#1\vbox\bgroup\halign\bgroup&##\hfil\cr}}
+\def\endcenterblock{\egroup\egroup$$\egroup}
+!endcenterverbatim
+
+\blueexample The soloists macro; block centering
+
+\begindemo
+\begincenterblock\bf
+Ben Lee User, horn
+Peter Schickele, hardart
+\endcenterblock
+!yields
+\begincenterblock\bf
+Ben Lee User, horn
+Peter Schickele, hardart
+\endcenterblock
+\enddemo
+Remark. The disadvantage of this macro is that no
+ page break will occur within the vbox.
+% As usual there are advantages and disadvantages.
+
+\bluehead Letter format
+
+Please open \TB{} on page {\oldstyle403}, and you will see a marvel of natural markup.
+Only {\oldstyle5} tags are needed to mark up a letter.
+^^{format,\ letter}
+\begincenterverbatim
+\letterhead \address \body \closing \endletter
+!endcenterverbatim
+If this is such a great approach,
+how come that it has not been taken over?
+IMHO, with all respect, it was too difficult to customize.
+At the time \TeX ies were busy porting the system to the various
+platforms.
+Moreover, nowadays I would like to
+\bitem store addressees in a database, and use them from there
+^^{database,\ address.dat}
+\bitem have a simpler letterhead
+\bitem let ^|\headline| take care of the headers
+\bitem use fewer fonts, prevent suffering from fontitus
+\bitem use the known sender\Dash remember BLUe's format is yours,
+ it knows about your context
+\bitem use window envelopes
+\bitem introduce token variables for ^|\subject|, ^|\yourreference|,
+ and ^|\ourreference|
+\bitem make positioning of the address flexible in such a way
+ that it can move to adjust to your window envelope
+\bitem adapt \cs{makelabel}\ftn{I named it \cs{makelabels}.}
+ to work independenly with the address.dat database
+ (Handy for address labels for carbon copies among other things)
+\bitem substitute \cs{beginscript} for \cs{beginletter} and ditto for the
+ \cs{endscript}.\ftn{Well, \dots\thinspace I allowed \cs{beginletter}
+ as alias, ditto for \cs{endletter}.}
+^^|\makelabels|\smallbreak
+Because of the above, it is of no use to
+include the letter format literally from \TB.
+Furthermore, I simplified the approach a little, \smiley, to facilitate
+customization.
+The variant has been incorporated as \cs{letter} format in the fmt.dat
+database.
+
+Note. The \cs{footline} on the first page is free to contain business
+information like giro, Chamber of Commerce number and the like.
+BLUe's format contains a toks variable \cs{businessaccount} for that
+purpose. See NTG's letter format.
+
+\bluesubhead Use of the letter format
+
+In order to use this format the user has to customize his letter
+format and make sure address.dat is available.\ftn{Well,
+ the latter can be circumvented
+ if \cs{loadreference} is replaced by a def with
+ the name of the addressee, followed by
+ the affiliation of which each line is preceded by |\\|,
+ as replacement text.}
+^^{script,\ letter}
+\begincenterverbatim
+\input blue.tex \letter %Knows about logo, sender
+\subject{...}
+\yourreference{...} \ourreference{...}%just numbers
+\addresses{\<name>} %load list of address{es}
+\addressee{\<name>}
+\beginscript
+\dear
+....
+\sincerely %knows about you
+\cc ... %Optional set cc. ....
+\ps ... %Optional set P.S. ....
+\appendix{<appendixtitle>}
+<appendixmaterial>
+\endscript
+!endcenterverbatim
+The \cs{appendix} control sequence takes one argument.
+It starts a new page but continues numbering.
+%The material will be set after an \cs{item}.
+
+If the letter proper is stored in letter.tex, then the use looks even simpler.
+\begincenterverbatim
+\input blue.tex \letter %Knows about logo, sender
+\subject{...}
+\yourreference{...} \ourreference{...}%just numbers
+\letterto{\<name>...}
+!endcenterverbatim
+
+\blueexample A letter script; a letter to Don Knuth
+
+\beginverbatim
+\input blue.tex \letter %Preliminary initializations
+\subject{\TeX{} for BLU}
+\ourreference{22 1 95}
+\yourreference{\TB}
+\addresses{\knuthde}
+\addressee{\knuthde} %Initializes \addresseename \affiliationbox
+ %\thisscript{\notlastscript}
+\beginscript %\beginletter is an alias
+\dear
+First of all I'm much obliged to your works especially \TB.
+As you know roughly 10k organized users profit from your system
+in getting their work out. It is estimated that the number of
+{\sl unorganized\/} users is a tenfold.
+I like your Ben Lee User character very much,
+and hope he will benefit from my work towards understanding
+and using \TeX{} with confidence.
+\bigskip
+What puzzles me is that manmac has been neglected so much.
+Is it because a user's guide was lacking?
+Was \TeX{} too far ahead of its time?
+Too unusual?
+\bigskip
+I'm also puzzled about the neglectance of the letter format.
+Was it too difficult for \TeX ies to customize at the time?
+I mean, it is confusing to mix the line mode and the par mode.
+As you can see from the \cs{letter} format I included, as part of
+BLUe's format, I refrained from those and concentrated on
+customization.
+I also made use of a database of addresses, but that is
+a minor \TeX nical point, because the markup abstracts from
+that detail as it should. Just |\adressee\<name>|.
+\bigskip
+Whatever the reasons, I hope that my work will ease the use of manmac,
+or even better BLUe's format.
+The latter has manmac assimilated, and taken notice of
+experience gained since the release of manmac.
+\bigskip
+After this work on using \TeX{} I intend to write
+another booklet on \TeX{} macro writing, to emphasize two-part macros,
+because two-part macros are in the dark in the \TeX book.
+They are lacking in the chapter on macro writing\Dash except for \cs{beginbold}
+ and \cs{endbold}\Dash but have been used in manmac, and
+therefore are dealt with in Appendix~E.
+IHMO, with all respect, they deserve more attention.
+By that time, I hope to be familiar with `\TeX{} The Program' too.
+\bigskip
+In near future I'll direct myself to \MF, well META{\smc post},
+and pay attention to {\oldstyle2}.{\oldstyle5}-D applications.
+I have in mind to emulate the works of Naum Gabo, a sculptor,
+whose objects I like very much. The exciting thing in there is
+that I can emulate the work in {\oldstyle2}.{\oldstyle5}-D
+with only {\oldstyle1}-D information.
+The latter is quite obvious because he used regular surfaces.
+However, it is apparently me who arrived at the crossroads.
+\bigskip
+I would appreciate it very much if you would let me know
+that you have received this work, and of course,
+I welcome suggestions.
+\sincerely
+\ps When I entered `Het Nederlands Rekenmachine Genootschap,'
+ in {\oldstyle1967}, the first volume of the Art of Computer
+ Programming was given to me, because of my lucky membership
+ number, {\oldstyle1024}.
+ I really could not foresee at the time that my interest in your work
+ would take this turn
+\cc NTG
+\endscript
+!endverbatim
+\storedpageno\count0
+\storedheadline\headline
+\storedfootline\footline
+\newpage
+{\letter
+%Preliminary initializations
+\subject{\TeX{} for BLU}
+\ourreference{22 1 95}
+\yourreference{\TB}
+\addresses{\knuthde}
+\addressee{\knuthde} %Initializes \addresseename \affiliationbox
+ \thisscript{\notlastscript}
+\beginscript
+\dear
+First of all I'm much obliged to your works especially \TB.
+As you know roughly 10k organized users profit from your system
+in getting their work out. It is estimated that the number of
+{\sl unorganized\/} users is a tenfold.
+I like your Ben Lee User character very much,
+and hope he will benefit from my work towards understanding
+and using \TeX{} with confidence.
+\bigskip
+What puzzles me is that manmac has been neglected so much.
+Is it because a user's guide was lacking?
+Was \TeX{} too far ahead of its time?
+Too unusual?
+\bigskip
+I'm also puzzled about the neglectance of the letter format.
+Was it too difficult for \TeX ies to customize at the time?
+I mean, it is confusing to mix the line mode and the par mode.
+As you can see from the \cs{letter} format I included, as part of
+BLUe's format, I refrained from those and concentrated on
+customization.
+I also made use of a database of addresses, but that is
+a minor \TeX nical point, because the markup abstracts from
+that detail as it should. Just |\adressee\<name>|.
+\bigskip
+Whatever the reasons, I hope that my work will ease the use of manmac,
+or even better BLUe's format.
+The latter has manmac assimilated, and taken notice of
+experience gained since the release of manmac.
+\bigbreak
+After this work on using \TeX{} I intend to write
+another booklet on \TeX{} macro writing, to emphasize two-part macros,
+because two-part macros are in the dark in the \TeX book.
+They are lacking in the chapter on macro writing\Dash except for \cs{beginbold}
+and \cs{endbold}\Dash but have been used in manmac,
+and therefore are dealt with in Appendix~E.
+IHMO, with all respect, they deserve more attention.
+By that time, I hope to be familiar with `\TeX{} The Program' too.
+\bigskip
+In near future I'll direct myself to \MF, well META{\smc post},
+and pay attention to {\oldstyle2}.{\oldstyle5}-D applications.
+I have in mind to emulate the works of Naum Gabo, a sculptor,
+whose objects I like very much. The exciting thing in there is
+that I can emulate the work in {\oldstyle2}.{\oldstyle5}-D
+with only {\oldstyle1}-D information.
+The latter is quite obvious because he used regular surfaces.
+However, it is apparently me who arrived at the crossroads.
+\bigskip
+I would appreciate it very much if you would let me know
+that you have received this work, and of course,
+I welcome suggestions.
+\sincerely
+\ps When I entered `Het Nederlands Rekenmachine Genootschap,'
+ in {\oldstyle1967}, the first volume of the Art of Computer
+ Programming was given to me, because of my lucky membership
+ number, {\oldstyle1024}.
+ I really could not foresee at the time that my interest in your work
+ would take this turn
+\cc NTG
+\endscript
+\newpage}
+%Restore previous values
+\count0\storedpageno\advance\count0by3
+\headline\storedheadline
+\footline\storedfootline
+\onecol%Restore \vsize
+
+\bluesubsubhead Syntax entries address database
+
+The address.dat database contains addresses sorted on name.
+Each entry obeys the syntax, as shown by the following example.
+^^{entry\ for\ address.dat}
+\begincenterverbatim
+\lst\<name>{<salutationname>
+ %Each line preceded by \\
+ \\<fullname>
+ \\<affiliation>
+ \email{...}%optional
+ \phone{...}%Optional
+}
+!endcenterverbatim
+
+\blueexample Entry address.dat database
+
+\begincenterverbatim
+\lst\ntg{NTG
+\\Nederlandstalige \TeX{}
+ Gebruikersgroep
+\\Postbus 394
+\\1740 AJ Schagen
+\\The Netherlands
+\email{ntg@nic.surfnet.nl}
+\registeredbluetrue
+}
+!endcenterverbatim
+
+To ^{add\ an\ address} just adhere to the syntax, and include
+the new address in address.dat, in the right order.
+Note that it is also possible to introduce fields, which can be used in a query and
+otherwise don't hinder, like \cs{registeredbluetrue}. ^^{field of database}
+
+\bluesubsubhead Check for data integrity
+
+After an address has been added one can check
+whether the file can be scanned by
+\TeX{} via making a table of contents as follows.
+\begincenterverbatim
+\input blue.tex
+\contentsdatabase{address}
+\bye
+!endcenterverbatim
+This script produces no pages of output (that is OK).
+The file contentsaddress will be created though.
+If you have a file with addresses of your own, say abc.dat, provide also
+\cs{newwrite} \cs{tocabc}.
+
+\bluesubsubhead Multiple letters
+
+Erik Frambach asked me how to format ^{multiple letters}, with each letter
+personalized by incorporating the address.
+If we are talking of a few letters there is no problem at all.
+Store the letter in a file and repeat the formatting for each letter.
+
+Let us assume that we wish to address a list of addressees, and that these
+addressees are already in our database address.dat.
+
+The approach to solve this is to go through the list of adressees, via
+FIFO, and `process' each with the letter. ^^{fifo}
+\begincenterverbatim
+\input blue.tex \letter
+\subject{\TeX{} for BLU}
+\yourreference{\TB}
+\ourreference{1$\,$2$\,$95}
+\letterto{\knuthde\ntg}
+\bye
+!endcenterverbatim
+This scheme also works for one letter.
+Note that after Dear the salutation name is used,
+which gives a personal flavour.
+
+\bluesubsubhead And what about a letter to the complete address database?
+
+Logically, this is simple. Make a list of all the names of
+the database elements and supply this list to ^|\letterto|.
+We can let \TeX{} do all the work, by using ^|\lettertoall|
+as follows.
+\begincenterverbatim
+\input blue.tex \letter
+\subject{\TeX{} for BLU}
+\yourreference{\TB}
+\ourreference{1 2 95}
+\lettertoall
+\bye
+!endcenterverbatim
+An interesting application is that for example NTG can send a\Dash more or less
+personalized\Dash letter to all its members.
+
+\bluesubsubhead Address labels
+
+Especially for the case of carbon copies separate address labels are wanted.
+For that purpose I modified Knuth's \cs{makelabel} into
+^|\makelabels|. ^^|\makealllabels|
+\begincenterverbatim
+\input blue.tex \letter
+\makelabels{\knuthde\ntg}
+%and all address labels
+%can be obtained via
+\makealllabels
+\bye
+!endcenterverbatim
+If you prefer smaller address labels provide \cs{twocol}.
+
+\bluesubsubhead Searching the address.dat database by pattern
+
+^^{search\ of\ database}
+BLUe's format provides a \cs{search} macro with
+a search pattern as argument.
+The purpose is to search the database file provided in
+the toks variable \cs{searchfile},
+for this search pattern.
+The result of the search is a list of names, of which
+the replacement text contains the search pattern.
+This list of names is delivered in the toks var \cs{namelist},
+and for the time being they are also written to the log file.
+
+\blueexample Search for addresses from RUSSIA in the database address.dat
+
+In order to justify my use of the word
+database in relation to \TeX, I provided the search macro
+to browse the databases lit.dat and address.dat.
+Below the input and result have been given of the search of address.dat
+for the pattern RUSSIA. The result is contained in the toks variable
+\cs{namelst}. The names are also written to the log file
+to give you a check for whether the right names have been selected.
+
+\begindemo
+\input blue.tex
+\searchfile{address}
+\search{RUSSIA}
+\bye
+!yields
+\cs{lst}\cs{gorbunovai}
+\cs{lst}\cs{grinevaoa}
+\cs{lst}\cs{makhovayai}
+\enddemo
+
+This is handy for making address labels grouped per country.
+\begincenterverbatim
+\input blue.tex \letter
+\search{RUSSIA}
+\makesearchlabels
+\bye
+!endcenterverbatim
+^^|\makesearchlabels|
+^^|\makesearchletters|
+\exercise Do you see the extension for sending letters to all those people?
+\answer BLUe's format system contains the command \cs{makesearchletters}, similar
+ to \cs{makesearchlabels}.
+
+Remarks. A search pattern should not contain a period.
+ The search is case sensitive.
+
+\bluesubsubhead Sorting the address.dat database
+
+^^{sorting\ of\ database}
+With databases a convenient aspect while reporting is the possibility of sorting
+the database on secondary keys. Below I have included by example how this
+can be achieved.\ftn{In `Sorting in BLUe'
+ I have shown how address labels can be sorted all within \TeX.
+ At that time I had not yet incorporated the database idea within \TeX.}
+
+The idea is that the `list' of names of the database entries are
+sorted according to the criterion.
+Because blue.tex's sorting macros sort an array,
+the list is stored in an array.
+
+The major steps for typesetting the membership database sorted on
+(membership) number, are that the {\em names\/} of the database entries are
+\bitem stored in the array |\1, \2, ... , \<n>|
+\bitem redefined with the value of \cs{no} as replacement text
+\bitem sorted
+\bitem redefined with the database entry as replacement text, and
+\bitem typeset.
+\smallbreak
+
+\blueexample Sorting address.dat on number
+
+The sorting of address.dat on (membership) number can be achieved with blue.tex as follows.
+\beginverbatim
+\loadindexmacros %Contains sorting macros
+\def\lst#1#2{%Function: \def\<k>{#1} \def#1{<number>}, with
+ % \no{<number>} last item in each database entry
+ \advance\k1 \ea\def\csname\the\k\endcsname{#1}%
+ \ea\def\ea#1\gobbletono#2}
+\def\gobbletono#1\no{}
+\k0
+\input toy.dat %The test database
+\n\k %number of items
+No unsorted: \1, \2, \3, \4, \5, \6. %A snapshot
+
+\let\cmp\cmpn\sort
+Sorted on no value: \1, \2, \3, \4, \5, \6.
+
+\def\lst#1#2{\def#1{#2}}%Redefine names by their database entry
+\input toy.dat
+Database entries sorted on no value:
+%For typesetting we need
+\let\\\par \def\no{\\Number=} \def\phone{\\Phone: } \def\email{\\Email: }
+%Typeset entries with increasing membership number
+\smallskip\1\smallskip\2\smallskip\3\smallskip\4\smallskip\5\smallskip\6.
+\bye
+!endverbatim
+Each entry of the database is a triple \cs{lst}, |\<name>|, and a group,
+with the group structured as shown in the syntax of an entry of the
+(toy) membership database given below.
+\beginverbatim
+\lst\<name>{<forename>
+\\<full name>
+\\<address>
+\email{<address>}
+\phone{<number>}
+\no{<number>}
+}
+!endverbatim
+
+\bluesubhead Customization
+
+If there is one format which is candidate for customization this is the one.
+However, much information is already known by the system, like
+\cs{author}, \cs{address}, \cs{logo}, et cetera.
+Also addressees are known because of the address database.
+What is left is to position the address in the address window.
+BLUe's format provides the skip variables
+\cs{haoffset} and \cs{vaoffset}.
+These determine the shifts of the address within the window,
+horizontally or vertically, respectively.
+
+When you are not satisfied with the basic layout then the \cs{headline}
+and \cs{footline} have to be rewritten, because how the
+information is pasted up will be taken form these token variables.
+How to design your own letter format
+is beyond the scope of this user's guide.
+
+\bluesubsubhead And what about a letter on behalf?
+
+Suppose your letter has to be sent by fax and signed by a formal organization
+instead of yourself. How can we achieve this? A real-life example is a letter
+I sent to the ISF signed by the secretary of the NTG. The key to the solution is
+to know which variables to adjust. It is not that difficult to look for those
+in the fmt.dat file in the letter part. ^^{letter on behalf}
+Tht letter format comprises a {\oldstyle100} lines or so.
+Here they are anyway:
+ \cs{address},
+ \cs{netaddress},
+ \cs{businessaccount},
+ \cs{fullname} and
+ \cs{affiliationbox}.
+ (In general redefine also \cs{ntglogobox}.)
+The greetings is inserted explicitly.
+\beginverbatim
+\input blue.tex \letter %\fax{(202)342-2765}
+\subject{Request J. Soros travel grant}
+\ourreference{5}
+\yourreference{}
+%\addresses\isf\addressee\isf %Switched off, details exlicitly provided
+%To override defaults from BLUe.tex
+%address sender
+\address{Postbus {\oldstyle394}\\{\oldstyle1740}AJ Schagen\\The Netherlands}
+\netaddress{ntg@nic.surfnet.nl}
+\businessaccount{\vtop{\hbox{\strut KvK Groningen nr V{\oldstyle025936}}
+ \hbox{\strut GIRO {\oldstyle1306238}, NTG}}}
+%addressee
+\setbox\affiliationbox\hbox{International Science Foundation\\
+ Washington\\USA}
+\fullname{ISF} %Used in headline follow pages
+\beginscript %\beginletter is an alias
+L.S.,
+\bigskip
+The NTG ---Dutch language-oriented \TeX{} Users Group---
+is organizing the Euro\TeX{} {\oldstyle95} meeting,
+September {\oldstyle4}--{\oldstyle8}, at Arnhem.
+\bigskip
+Our plan is to facilitate participation from East and Mid European countries,
+i.e., from CSTUG, CyrTUG, GUST, and HunTUG, not on an individual basis
+but for some 50 members in total of those groups.
+\bigskip
+We are convinced that this project will stimulate scientific cooperation
+between East and West and hope that the ISF will also support this effort by
+a grant.
+\begingroup%local re-assignation
+\author{G.J.H. van Nes\smallskip
+ {\small secretary NTG}}
+\sincerely
+\endgroup
+\ps \TeX{} is the revolutionary computer-assisted typesetting system designed by D.E. Knuth.
+\cc CSTUG: Matematick\'y \'ustav UK, Sokolovsk\'a 83, CS-186 00 Prague,
+ CZECH Republic\\(The Czech \TeX{} Users Group. horakk@earn.cvut.cz)\\
+ CyrTUG: MIR publishers, 2 Pervy Rizhsky pereulok, Moscow 129820, RUSSIA\\
+ (The Cyrillic \TeX{} Users Group from CIS{}. cyrtug@mir.msk.su)\\
+ GUST: Institut Bada\'n Systemowych PAN, ul.~Newelska 6, 01-447, Warszawa,
+ POLAND\\(The Polish \TeX{} Users Group. tomasz@panda.bg.univ.gda.pl)\\
+ HunTUG: Institute of Mathematics and Informatics, Lajos Kossuth University
+ of Debrecen, H-4010 Debrecen, P.O.B. 12, HUNGARY\\
+ (The Hungary \TeX{} Users Group. ludens@tigris.klte.hu)\\
+\endscript
+!endverbatim
+
+Remark. Maybe I should make it possible to allow for multiple users, read senders
+of letters.
+
+\bluesubsubhead And what about enclosures?
+
+I was so preoccupied by letters completely processed by \TeX{} or its ilks,
+that I simply overlooked the wish to specify ^{enclosures} and include these fysically.
+Well, \dots no problem. Just define
+\beginverbatim
+\def\enclosures{\bigskip Enclosures: \small }
+!endverbatim
+and use this for example at the end\Dash just before \cs{endscript}\Dash as follows
+\beginverbatim
+\enclosures{Copy of bank payment}
+!endverbatim
+Creeping featurism? Let us put it positively:
+no unnecessary issues have been implemented, and
+when something is needed we can easily add it.
+
+
+\bluesubsubhead Your summary of main markup tags for letters
+
+The Frequently Used Tags, FUTs for short\Dash indeed a handful, as already indicated in
+ the template in the `Introduction'\Dash for personalizing.
+Use it as crib.
+
+\beginverbatim
+!bf
+Letter proper!tt
+\addresses{...}
+\addressee{...}
+\subject{...}
+\yourreference{...}
+\ourreference{...}%only digits
+\letterto{...}
+\lettertoall
+\vaoffset
+\haoffset
+!bf
+Copy Proper!tt
+\beginscript
+\endscript
+\dear
+\sincerely
+\cc
+\ps
+\appendix{...}
+!bf
+Address labels!tt
+\makelabels{...}
+\makealllabels
+\makesearchlabels
+!endverbatim
+
+
+\newpage
+\bluehead Report format
+
+A report is set in one-column, with per page a header and footer.
+The header is suppressed for the preliminary pages and
+for every first page of a chapter. ^^{format,\ report}
+The latter starts with a
+title and summary followed by the copy proper.
+The footer is suppressed for the preliminary pages, i.e.,
+these pages lack numbering, among other things.
+
+^^|\chapterhead|^^|\summary|
+^^|\begindemo|%^^|\enddemo|
+^^|\yields|
+^^|\displaycenterline|
+^^|\begincenterdisplay|%^^|\endcenterdisplay|
+Some new control sequences are
+\begincenterdisplay
+\cs{preface} &for a preface\cr
+\cs{chapterhead} &for chapter title\cr
+\cs{setupappendices} &for letters as numbers\cr
+\cs{pasteup...} &to paste up elements\cr
+\endcenterdisplay
+Next to the coding of the new control sequences several existing control
+sequences had to be recoded to comply with \cs{report}.
+The reimplementation of ^|\beginscript| was tedious work, because
+it takes care of the preliminary pages:
+the cover page,
+the inside cover page,
+the title page,
+the preface page, and
+the table of contents page.
+|\endscript| takes care of the back cover pages.
+
+The implementation of \cs{(chapter)head} was tough work because of the wish
+to process on the fly and to store the title.
+On second thoughts I realized the more
+modest wish to allow for math in the titles,
+especially to handle the circumflex appropriately.
+
+Next to the a priori and physical table of contents
+in the front matter of the report,
+a table of contents with page numbers attached dynamically,
+is generated on the fly and appended at the end of the
+typeset report.
+The latter supports `drafting,' much in the spirit of developing
+a program supported by literate programming tools.
+A ToC, a ToE, or the set of answers, are generated on
+the fly and can be called up via \cs{pasteuptoc}, \cs{pasteuptoe},
+respectively \cs{pasteupanswers}. The contents file can be edited and used
+for the static table of contents, finally.
+
+\bluesubhead Template
+
+The file for this report has all chapters included.
+However, while writing and proofing all chapters were kept
+in separate files.
+The latter structure, stripped from redundancies,
+has been included below as a template. ^^{script,\ report}
+
+If the preliminary matter is a little overwhelming, skip this section, and continue
+with `Proofing a single chapter.'
+
+\blueexample A report script; the outer markup for this report
+
+The template reads as follows.
+\thisverbatim{\catcode`\!=12
+ \catcode`\~=0 }
+\beginverbatim
+\input blue.tex %\loadindexmacros %When creating an index too
+\report
+ %Cover data
+\bluetitle Publishing with \TeX
+
+\bluesubtitle BLUe's Selection
+
+\bluepictures \bluemodelpic
+
+ %Inside cover data
+\bluekeywords Bibliography, \bluetex, ...
+
+\bibliographydata{ISBN: \dots\par ...}
+\beginacknowledgements
+First of all
+\displaycenterline{Don Knuth, Thank You!}
+...
+\rightline{I'm grateful to all of you.}
+\endacknowledgements
+ %Title page data (next to title&author)
+\beginabstract
+The use of \bluetex{} has been documented in a user's guide,
+...
+\endabstract
+ %Preface page data
+\beginpreface \vskip2\bigskipamount
+Dear User, \bigskip
+It occurred to me that my detailed studies
+...
+will be beneficial for new-and-old \AllTeX ies alike.
+ \bigskip
+\rightline{\the\author}
+\endpreface
+ %Contents Page data
+ %Because of \valign use, \contents{...}
+ %is not possible.
+\begincontents %\se is subentry descriptive tag
+Preface
+Table of contents
+Introduction
+\se BLUe's format
+...
+\se J: Table of Contents
+\endcontents
+\let\coverpic=\bluemodelpic %BLUe script proper
+\beginscript
+\input pwt.int %Introduction
+\input pwt.txt %Text
+%\endscript %For testing, to make script smaller
+\input pwt.mat %Mathematics
+\input pwt.tab %Tabular material
+\input pwt.grf %Pictures
+\input pwt.ref %References
+\input pwt.ind %Index creation
+\input pwt.cus %Customization
+\input pwt.aft %Afterthoughts
+%
+\setupappendices %From now on A, B, C,...
+\pasteupanswers %A: Answer to Exercises
+\input pwt.fmt %B: Formats
+\input pwt.tls %C: Tools
+\input pwt.sur %D: Backgrounds
+\pasteuptoe %E: Table of Examples
+\input pwt.tot %F: Table of tags
+\input pwt.his %G: History of changes
+\input pwt.obs %H: Obselete macros
+%\sortindex\pasteupindex %I: Index
+\pasteuptoc %J: Table of Contents
+\endscript
+~endverbatim
+
+\bluesubhead Proofing a single chapter
+
+^^{proofing single chapter}
+Chapters can be proofed separately, not only for their contents but also for what
+will come in
+the Answers to the Exercises,
+the List of Examples,
+the Index, and
+the Table of Contents.
+
+The markup where also
+a ^{mini-ToE},
+a ^{mini-index}, and
+a ^{mini-ToC} will be obtained,
+reads as follows.
+\beginverbatim
+\input blue.tex %\loadindexmacros
+\report
+\input <filewithchapter>
+ %\pasteupanswers
+ %\pasteuptoe
+ %\sortindex\pasteupindex
+ %\pasteuptoc
+\bye
+!endverbatim
+Perhaps the easiest way to get results is to forget about the preliminary
+matter to start with. The above script formats your chapter and why not
+begin with
+
+|\chapterhead{...}| right away, instead of |\input <filewithchapter>|?
+
+We can easily test a few chapters in a row as follows.
+Omit \cs{bye} and when \TeX{} prompts for an
+\cs{end} insert `i' for insert and after the insert prompt supply
+\cs{input} |<nextchapter>|.
+
+\bluesubhead Main tags for report format
+
+A table of main tags for \cs{report} has been included ^^{report format, main tags}
+to provide a survey of what outer tags\Dash and to what extent\Dash
+they have been implemented for the \cs{report} format.\ftn{More
+ control sequences and symbols are available,
+ especially for the lower level markup,
+ if not for the undocumented features of manmac,
+ and the wealth of plain \TeX.}
+The table also illustrates the naming convention of
+a root name with affixes.
+
+The header fields indicate,
+the prefixes pre-, post-, this-, every-, pasteup-, and
+the suffixes -font, -name and -box.
+The first column contains the various root names, with a marker
+to denote to what extent the minimal one-part macro
+has been implemented.
+
+\begingroup
+\def\first{\hfil\thispicture{\unitlength=6ex \xdim{1.4}\ydim{1}}%
+ \lower1.5ex\hbox\beginpicture%(1.4, 1)(0,-.1)
+ \put( 0.0, 0.0){\small \strut Root}%
+ \put( 1.4, 0.575){\llap{\small Affix}}%
+ \put( 1.4, 0.1){\line(-2, 1){1.4}}%
+\endpicture\lower3ex\null}
+\def\header{pre-\cs post-\cs this-\cs every- \cs pasteup-
+ \cs -font\cs -name
+ \cs -box}
+\def\btablecaption{Main tags for report scripts}
+
+\catcode`/=13
+\def/{\leavevmode\thinspace\hbox{%
+ \vrule\vtop{\vbox{\hrule\kern1pt\hbox{%
+ \vphantom{\tt e}\thinspace%{\tt#1}%
+ \thinspace}}\kern1pt\hrule}\vrule}%
+ \thinspace} % control sequence token
+\catcode`-13 \def-{$\neg$}
+\def\footer{\qquad\vtop{\small\rlap{- not implemented}
+ \rlap{${}^+$ implemented}
+ \rlap{/ implemented without processing on the fly}}}
+\def\rowstblst{
+{abstract\hfill\ \tiny+}
+{acknowledgements\hfill\ \tiny+}
+{btable \hfill\ \tiny/}
+{center \hfill\ \tiny+}
+{chapterhead \hfill\ \tiny+}
+{contents\hfill\ \tiny+}
+{(sub(sub))head\hfill\ \tiny+}
+{keywords\hfill\ \tiny+}
+{picture \hfill\ \tiny-}
+{pictures\hfill\ \tiny/}
+{preface \hfill\ \tiny+}
+{quote \hfill\ \tiny+}
+{references\hfill\ \tiny/}
+{script \hfill\ \tiny+}
+%{syntax\hfill\ \tiny-} %Although there, not so relevant for the table
+{summary \hfill\ \tiny+}
+{verbatim\hfill\ \tiny-}}
+\def\data{%
+ -\cs-\cs-\cs-\cs+\cs-\cs+\cs+\rs%abstract
+ +\cs+\cs+\cs-\cs+\cs-\cs+\cs+\rs%abstract
+ +\cs+\cs+\cs+\cs-\cs-\cs-\cs+\rs%btable
+ -\cs-\cs-\cs-\cs-\cs-\cs-\cs-\rs%center
+ +\cs+\cs+\cs+\cs-\cs+\cs-\cs-\rs%chapterhead
+ -\cs-\cs-\cs-\cs+\cs-\cs+\cs+\rs%contents
+ +\cs+\cs-\cs-\cs-\cs+\cs-\cs-\rs%head
+ -\cs-\cs-\cs-\cs+\cs-\cs+\cs+\rs%keywords
+ -\cs-\cs+\cs+\cs-\cs-\cs-\cs-\rs%picture
+ -\cs-\cs-\cs-\cs-\cs-\cs-\cs-\rs%pictures
+ +\cs+\cs-\cs-\cs-\cs+\cs-\cs-\rs%preface
+ -\cs-\cs-\cs-\cs-\cs-\cs-\cs-\rs%quote
+ +\cs+\cs+\cs+\cs+\cs-\cs+\cs+\rs%references
+ +\cs+\cs-\cs-\cs-\cs+\cs-\cs-\rs%summary
+ -\cs-\cs+\cs+\cs-\cs-\cs-\cs-\rs%script
+% -\cs-\cs-\cs-\cs-\cs-\cs-\cs-\rs%syntax
+ +\cs+\cs+\cs+\cs-\cs-\cs-\cs-%\rs%verbatim
+}
+$$\vbox{\nonruled\nonframed
+ \btable\data}$$
+\endgroup
+Remarks.
+\bitem ^|\title|, ^|\subtitle|, ^|\author| and the like, are token
+ variables and associated with the script
+\bitem ^|\pictures| and ^|\references| have been implemented in a
+ straightforward way,
+ because their use doesn't need processing on the fly.
+\smallbreak
+
+\bluesubsubhead Your summary of main markup tags for reports
+
+The Frequently Used Tags, FUTs\Dash indeed a handful, as already indicated in
+ the template in the `Introduction'\Dash
+for personalizing.
+
+
+\beginverbatim
+!bf
+Preliminary matter!tt
+\title{...}
+\subtitle{...}
+\keywords{...}
+\abstract{...}
+\contents{...}
+\issue{...}
+\acknowledgements{...}
+\references{...}
+\pictures{...}
+!bf
+Copy Proper!tt
+\beginscript
+\endscript
+\chapterhead{...}
+\summary{...}
+\head{ ...}
+\thissubhead{...}
+\subhead{...}
+\thissubsubhead{...}
+(the \this<headkind>{...} especially together with \runintrue)
+\subsubhead{...}
+!bf
+Inner level!tt
+\begindemo...<escapechar>yields...\enddemo
+\thisverbatim{...}
+\beginverbatim
+<escapechar>endverbatim
+(and in-line !vrt!thinspace...!thinspace!vrt)
+\beginquote
+\endquote
+\begindisplay
+\enddisplay
+(with & and \cr)
+\displaycenterline{...}
+\begincenterdisplay
+\endcenterdisplay
+(with & and \cr)
+\btable
+(with \data{...\cs...\rs...\cs...\rs...}
+ \header{...}
+ \footer{...}
+ \rowstblst{...}
+ \vruled{...} )
+\ref\<name>
+\crsref\<name>
+\ftn{...}
+\item{...}
+\itemitem{...}
+\aitem
+\Aitem
+\bitem
+\nitem
+\example{...}
+\thispicture{...}
+(with \unitlength=...)
+\cs{<tagname>}
+!bf
+Back matter!tt
+\setupappendices
+\pasteupanswers
+\pasteuptoe
+\pasteupreferences
+\sortindex\pasteupindex
+\pasteuptoc
+!endverbatim
+
+\bluesubhead Addition of a format to BLUe's format system
+
+\blueexample Addition of report format to the fmt.dat database
+
+The following has been added to fmt.dat. ^^{add\ a\ format}
+\begincenterverbatim
+\tool\reportfmt
+<themacros>
+\endinput
+!endcenterverbatim
+\bluetex{} has been extended with
+\thisverbatim{\catcode`\|=12
+ \catcode`\!=12
+ \catcode`\~=0 }
+\begincenterverbatim
+\def\report{\ifx\undefined\reportfmt\let\reportfmt=x\fi
+ \ifnum\reportloadcnt=0 \ea\loadformat\fi
+ \advance\reportloadcnt1 \let\reportfmt=\undefined}
+%Storage allocations for \report come next
+\newtoks\prefacename
+%et cetera
+~endcenterverbatim
+
+\newpage
+\bluehead Transparencies format
+
+BLUe's format transparencies have a centered flavour, with
+a header part which reflects the series, and the context.
+^^{format,\ transparencies}
+There is also room for a user logo to be printed in the header.
+
+Very error-prone is the line-by-line nature of a transparencies script.
+Beware!
+For example when providing a macro one should remember
+that each line end is special. Perhaps I should provide
+also \cs{disobeylines} to undo the \cs{obeylines}.
+
+\bluesubhead Template
+
+I like to start from an example, a template, which shows what
+has to be provided.
+
+^^{script,\ transparencies}
+\blueexample Transparencies script
+
+\thisverbatim{\catcode`\|=12 }
+\beginverbatim
+\input blue.tex \pictures\bluemodelpic
+\transparencies \vfuzz=15pt \everyverbatim{\emc}
+\hsize14cm
+\leftskiptrs.2\hsize \rightskiptrs.1\hszie
+
+\title{BLUe's Format}
+\subtitle{the best of both worlds}
+
+\contents{WAF?
+ Outer vs Inner markup
+ Template
+ Customization
+ Coding
+ Transparencies
+ Tags survey
+ Conclusions
+}
+
+\beginscript
+\head{WAF? } %Starts a new transparency, implicitly
+$$\thispicture{\xoffset{-1}}\bluemodelpic$$
+
+\head{Markup language} %Starts a new transparency, implicitly
+\bitem |\begin<tag>...\end<tag>| |\<tag>| \hfill defs
+\bitem |\this<tag>| |\every<tag>| \hfill token vars
+\bitem \cs{title} \dots \hfill token vars
+\bitem |\pre<tag>| |\post<tag>| \hfill token vars
+\bitem |\pasteup<tag>| \hfill defs
+\smallskip
+\vfill
+\loadxyz$$\xyz{Alias tags}{Options}{Place within context}$$
+\endscript
+!endverbatim
+
+The following pages contain the results.
+\cs{transparencies} has been used locally, and because of the nested use
+I inserted |\thisscript{\notlastscript}|. Note that \cs{pictures}
+has to be supplied before \cs{transparencies} because the latter
+turns \cs{obeylines} on.
+\newpage
+\subheadtitle{}
+\subsubheadtitle{}
+\storedpageno\count0
+{\pictures\bluemodelpic
+ \transparencies
+ \hsize14cm
+ \leftskiptrs.2\hsize\relax
+ \rightskiptrs.1\hsize\relax
+ \hfuzz30pt \vfuzz=15pt \everyverbatim{\emc}
+
+\title{BLUe's Format}
+\subtitle{the best of both worlds}
+
+\begincontents WAF?
+ Outer vs Inner markup
+ Template
+ Customization
+ Coding
+ Transparencies
+ Tags survey
+ Conclusions
+\endcontents
+
+\thisscript{\notlastscript}
+\beginscript
+\head{WAF? }
+$$\thispicture{\xoffset{-1}}\bluemodelpic$$
+
+\head{Markup language}
+\bitem |\begin<tag>...\end<tag> \<tag>| \hfill defs
+\bitem |\this<tag>| |\every<tag>| \hfill token vars
+\bitem \cs{title} \hfill token vars
+\bitem |\pre<tag>| |\post<tag>| \hfill token vars
+\bitem |\pasteup<tag>| \hfill defs
+\smallskip
+\vfill
+\loadxyz
+$$\vbox{\xyz{Alias tags}{Options}{Place within context}}$$
+\endscript
+%\nxttrs
+}%end transparencies intermezzo
+\count0\storedpageno\advance\count0 by3
+
+\def\bluehead#1\par{\head{#1}}
+\def\bluesubhead#1\par{\subhead{#1}}
+\def\bluesubsubhead#1\par{\subsubhead{#1}}
+%kludge, admitted. March adaptation in trs is not robust, alas.
+
+\bluesubhead Use your logo
+
+^|\logo| is a def, and invoked within \cs{line}.
+In order to have your logo, supply
+\begincenterverbatim
+\def\logo{\vbox to0pt{\vss
+... %Your logo
+}}
+!endcenterverbatim
+
+\bluesubhead Maintenance
+
+This section is in a certain sense artificial, ^^{maintenance transparencies}
+introduced by the automatisms which come with my choices for
+the `header' and `footer,' especially the context-dependent
+information in there.
+The following might be helpful for modifying or extending
+single transparencies.
+The idea is to follow the script
+setup and handle the \cs{header}, \cs{pagenumber} and
+\cs{identification} for the particular transparency.
+In the example below the task was to add a transparency
+in between.\ftn{Without automatically gathering of context
+ information the modifications are a trifle.}
+\begincenterverbatim
+\title{Literate Programming}
+\beginscript
+\head{Tools}
+\nxttrs
+\identification{feb94}
+\pagenumber{13a}
+\subhead{FWEB}
+LP tool by John Krommes
+\endscript
+!endcenterverbatim
+
+\bluesubhead Main tags for transparencies
+
+A table of main tags has been included ^^{transparencies format, main tags}
+to provide a survey of what outer tags\Dash and to what extent\Dash
+they have been implemented for the \cs{ transparencies} format.
+The table also illustrates the naming convention adopted
+via a root name with prefixes and suffixes.
+
+The header fields indicate,
+the prefixes pre-, post-, this-, every-, pasteup-, and
+the suffixes -font, -name and -box.
+The first column contains the various root names, with a marker
+to denote to what extent the minimal one-part macro
+has been implemented.
+
+\begingroup
+\def\first{\hfil\thispicture{\unitlength=6ex \xdim{1.4}\ydim{1}}%
+ \lower1.5ex\hbox\beginpicture%(1.4, 1)(0,-.1)
+ \put( 0.0, 0.0){\small \strut Root}%
+ \put( 1.4, 0.575){\llap{\small Affix}}%
+ \put( 1.4, 0.1){\line(-2, 1){1.4}}%
+\endpicture\lower3ex\null}
+\def\header{pre-\cs post-\cs this-\cs every- \cs pasteup-
+ \cs -font\cs -name%\cs -title
+ \cs -box}
+\def\btablecaption{Main tags for transparencies scripts}
+
+\catcode`/=13
+\def/{\leavevmode\thinspace\hbox{%
+ \vrule\vtop{\vbox{\hrule\kern1pt\hbox{%
+ \vphantom{\tt e}\thinspace%{\tt#1}%
+ \thinspace}}\kern1pt\hrule}\vrule}%
+ \thinspace} % control sequence token
+\catcode`-13 \def-{$\neg$}
+\def\footer{\qquad\vtop{\small\rlap{- not implemented}
+ \rlap{${}^+$ implemented}
+ \rlap{/ implemented without processing on the fly}}}
+\def\rowstblst{
+{btable \hfill\ \tiny/}
+{center \hfill\ \tiny+}
+{contents\hfill\ \tiny+}
+{(sub(sub))head \hfill\ \tiny+}
+{picture \hfill\ \tiny-}
+{pictures\hfill\ \tiny/}
+{quote \hfill\ \tiny+}
+{script \hfill\ \tiny+}
+%{syntax\hfill\ \tiny-} %Although there, not so relevant for the table
+{verbatim\hfill\ \tiny-}}
+\def\data{%
+ +\cs+\cs+\cs+\cs-\cs-\cs-\cs+\rs%btable
+ -\cs-\cs-\cs-\cs-\cs-\cs-\cs-\rs%center
+ -\cs-\cs-\cs-\cs+\cs-\cs+\cs+\rs%contents
+ +\cs+\cs-\cs-\cs-\cs+\cs-\cs-\rs%head
+ -\cs-\cs+\cs+\cs-\cs-\cs-\cs-\rs%picture
+ -\cs-\cs-\cs-\cs-\cs-\cs-\cs-\rs%pictures
+ -\cs-\cs-\cs-\cs-\cs-\cs-\cs-\rs%quote
+ -\cs-\cs+\cs+\cs-\cs-\cs-\cs-\rs%script
+% -\cs-\cs-\cs-\cs-\cs-\cs-\cs-\rs%syntax
+ +\cs+\cs+\cs+\cs-\cs-\cs-\cs-%\rs%verbatim
+}
+$$\vbox{\nonruled\nonframed
+ \btable\data}$$
+\endgroup
+Remarks.
+\bitem ^|\title|, ^|\subtitle|, ^|\author| and the like, are token
+ variables and associated with the script
+\bitem ^|\pictures| has been implemented in a straightforward way,
+ because it doesn't need processing on the fly.
+\smallbreak
+\newpage
+\bluesubsubhead Your summary of markup tags for transparencies
+
+\beginverbatim
+!bf
+Token vars!tt
+\address\author\crowner%Default, already personalized
+\every... %See default blue.tex
+\footline
+\headline
+\headtitle
+\identification
+\pagenumber
+\posthead
+\postsubhead
+\postsubsubhead
+\prehead
+\presubhead
+\presubsubhead
+\subheadtitle
+\subsubheadtitle
+\subtitle
+\this...%See blue.tex
+\title
+
+!bf
+Control sequences with root name!tt
+center %default
+contents
+head
+pictures
+script
+
+!bf
+Auxiliaries!tt
+\continue
+\nxttrs
+
+!bf
+Lower level!tt
+\bitem
+\beginverbatim
+<escape char>endverbatim
+!endverbatim
+For inner markup the macros from plain
+and those from \bluetex{} can be used.
+Load what you need before \cs{transparencies} because the latter turns
+\cs{obeylines} on.
+\displaycenterline{Do remember the line-by-line character of the script}
+\endinput
diff --git a/info/laan/pwt/pwt.his b/info/laan/pwt/pwt.his
new file mode 100644
index 0000000000..2ef1b7ff88
--- /dev/null
+++ b/info/laan/pwt/pwt.his
@@ -0,0 +1,84 @@
+\input blue.tex
+\report
+\bluechapter History of Changes
+
+\beginsummary
+An account of the history of BLUe's format has been provided.
+Milestones in the development have been listed.
+\endsummary
+
+In {\oldstyle1994} BLUe's format was introduced at CyrTUG and Euro\TeX.
+The article was published in MAPS {\oldstyle94}.{\oldstyle1},
+and also in the Euro\TeX{} proceedings (abbreviated).
+The fall article and a pre-release of \bluetex{}
+have been sent to the world, i.e., to the CTAN.
+At that time only a default format and the transparencies format
+were available. It has been extended by report and letter format.
+The design of BLUe's format accounted for personalization, open-endedness,
+minimal markup and a discipline to cope with progress.
+
+The major extension of {\oldstyle 1995} was this user's guide,
+which entailed the \cs{report} format, and the inclusion of Knuth's
+letter and concert formats, \TB{} Appendix~E.
+Both were finished in January {\oldstyle1995}.
+Important was how to cope with the multitude of
+formats, macros and tools out there.
+The files have been organized in databases.
+Not only a database for references, pictures, and addresses, no,
+also for tools and formats.
+What is needed will be loaded selectively from these, behind the scenes,
+and\dots\thinspace by \TeX. Neat!
+
+\newpage
+
+\def\btablecaption{}\def\footer{}
+$$\def\first{Date}
+\def\header{\hfil Change\hfil\lower1.25ex\null}%To put on 1/3th
+\nonframed\fll
+%Beware of the name clash \cs: control sequence and column separator.
+%
+\def\template{\colsepsurround ##\hfil\raise4ex\null&\lft##\rgt&
+ \lft\vtop\bgroup\noindent\hsize.75\hsize
+ \baselineskip12pt\openup2pt
+ \obeylines##\egroup\rgt\cr}
+\thisbtable{\let\tstrut\relax\def\par{\strut\endgraf}}
+%
+%Data to be extended. Remember that \obeylines is on.
+\def\rowstblst{{Future}
+ {Spring {\oldstyle1996}}
+ {Summer {\oldstyle1995}}
+ {Spring {\oldstyle1995}}
+ {Dec {\oldstyle1994}}
+}
+\beginbtable
+Updates to come
+%Another line
+%The 3th jolly line
+\rs
+BLUe-2-\LaTeX{} Convertor Assistant emerged
+\rs
+PASCAL tool improved, one-pass ToC added
+Graphics has been extended by turtle graphics, fractals, and smileys
+\rs %No \cs{name} possible; name clash with column separator
+ %Next are lines within one entry. Natural input.
+page size for index flexible; plnindex can be used loose from blue.tex
+|\nxttrs| |\continue| consistent with |\newpage| (|\vfill\eject|)
+\rs
+list element tag in address.dat, lit.dat and pic.dat changed into |\lst|
+|\oldstyle| is introduced for the page numbers in the index etc.
+Font handling for transparencies has been cleaned up
+Addresses are stored in address.dat to cooperate with |\letter|
+Tools are stored in the database tools.dat
+Formats are stored in a database fmt.dat
+\bluetex{} has been extended to BLUe's format system
+|\report| and |\letter| have been designed
+|\nitem| uses |\prenum| and |\postnum| for embellishments
+|\create| in math cross-refs stores also |\prenum| and |\postnum|
+|\rowstblst|'s last argument is no longer an exception
+Partitioned matrix markup is short and elegant via |\btable|
+Space-saving variant of continued fraction looks much better now
+D\"urer's magic square has a better |\dotboxit|.
+Bridge form details have been improved.
+\endbtable
+$$
+\endinput \ No newline at end of file
diff --git a/info/laan/pwt/pwt.ind b/info/laan/pwt/pwt.ind
new file mode 100644
index 0000000000..85508d814d
--- /dev/null
+++ b/info/laan/pwt/pwt.ind
@@ -0,0 +1,506 @@
+\input blue.tex \loadindexmacros \report
+
+ \bluepictures\indmodelpic
+
+\bluechapter Creating an Index
+
+\beginsummary
+The creation of a modest index within
+a one-pass \TeX{} job has been treated.
+In general a proof run and a final run are needed.
+\endsummary
+
+Making an index is an art. The fundamental problem is
+\bluedisplaycenterline What to include in an index?
+
+Computer-assisted indexing is not simple either.
+Issues are
+\bitem the markup of keywords or phrases
+\bitem to associate page numbers
+\bitem to sort and compress raw Index Reminders (^{IR}s), and
+\bitem to typeset the result.
+\smallbreak
+My approach is to create proof indexes\Dash also called mini-indexes\Dash
+for each chapter and
+learn from those what should be included in the total index.
+I perceived this as very pleasant in practice.
+Even if you prefer \cs{makeindex} for the real index, this
+processing on the fly of a chapter index can be of great help.\ftn{It is said
+ that the automatic generation of an index is a feature of the Literate Programming tools.
+ For LP with \TeX{} as such, as for example Gurari's Pro\TeX, this on-the-fly indexing
+ within \TeX{} can be used.}
+
+\bluehead Use
+
+I'll show how to mark up Knuth's four types of IRs,
+how to mark up accents,
+how to mark up font switching, and
+how to mark up spaces as part of the IR.
+
+\blueexample Markup, commands and resulting index
+
+The right column has been obtained via
+\bitem ^|\loadindexmacros|, at the beginning of the script
+\bitem ^|\sortindex|, at the place of indexing, and
+\bitem ^|\pasteupindex|, for the pasteup of
+ the index.
+\smallbreak
+ \thisverbatim{\catcode`\|=12
+ \catcode`!=12 \unmc
+ \catcode`\*=0 }
+\begindemo
+Types of IR
+ 0 ^{return}
+ 1 ^|verbatim|
+ 2 ^|\controlsequence|
+ 3 ^\<syntactic quantity>
+Accents ^{\'el\`eve!},
+font changing ^{\bf bold}
+and spaces ^{control\ symbol}
+Control sequences
+ ^{\TeX, and \AmSTeX}
+ ^{Lamport and \LaTeX}
+brackets ^{\tt< \rm and \tt>}
+\newpage ^{return}
+\newpage ^{return}%on purpose
+\sortindex\pasteupindex\bye
+*yields\obeylines
+\quad {\tt {}< \rm {}and \tt {}>}{} {\oldstyle1}
+\quad {\bf {}bold}{} {\oldstyle1}
+\quad {control\ symbol}{} {\oldstyle1}
+\quad {\tt \char 92\hbox {controlsequence}}{} {\oldstyle1}
+\quad {\'el\`eve!}{} {\oldstyle1}
+\quad {Lamport and \LaTeX{}} {\oldstyle1}
+\quad {\TeX, and \AmSTeX{}} {\oldstyle1}
+\quad {return}{} {\oldstyle1}--{\oldstyle3}
+\quad $\langle \hbox {syntactic\
+ quantity}\rangle ${} {\oldstyle1}
+\quad {\tt verbatim}{} {\oldstyle1}
+\enddemo
+The representation of page numbers as a range comes out automatically.
+
+\exercise What makes a good index? Of course this is a million-dollar
+ question. Let us concentrate on the number of entries and on the
+ number of page numbers per entry. Which of the two extremes
+ sketched below is the better one in your opinion?
+ One with many entries pointing to issues spread throughout the book\Dash
+ like \TB{} ;-))), and pushing the limits just for the imagination,
+ an index with pointers to related work on the internet, accessible
+ by just clicking the mouse\Dash
+ or one with few page numbers per entry\ftn{Courtesy Erik Frambach.}?
+\answer As usual it all depends on your application. End of answer.
+ But\Dash there is always a but\Dash the complaint I heard
+ most about \TB{} was that the information is spread all over,
+ and that it is hard to find what you are looking for.
+ Therefore I consider a few page numbers per entry beneficial.
+ (Let us forget about the intrinsic complexity of the
+ subject, certainly at the time.)
+ BLUe's format supports scrutinizing parts of an index,
+ because it is so easy to generate an index per chapter on the fly.
+ It is hardly not more difficult than generating a table of contents.
+ An index per chapter can be scrutinized more easily, and
+ redundancies removed.
+ That the index provides a mechanism
+ to link things over chapters is a good thing, however.
+ Don't misunderstand me.
+ But don't overuse it, IMHO, with all respect. Remember DeVinne's
+ adage `The last thing to learn is simplicity.'
+
+%end answer
+
+\bluehead Markup of Index Reminders
+
+IR-s are at the heart of the process. ^^{IR,\ markup}
+Knuth distinguished {\oldstyle4} types to facilitate the outside processing.
+I'll adopt his IRs syntax and types.
+
+\bluesubhead Syntax
+
+Knuth's IRs obey the following syntax. ^^{IR,\ syntax}
+\begincenterverbatim
+<word(s)>!]!!<digit>!]<page number>.
+!endcenterverbatim
+The digits {\oldstyle0}, {\oldstyle1}, {\oldstyle2}, or {\oldstyle3}
+denote the types:
+words,
+verbatim words,
+control sequences, and
+syntactic quantities.
+A user does not have to bother about the digits nor about the
+page numbers.
+Knuth has adopted the accompanying conventions for
+the word(s) of IRs.\ftn{See \TB{} {\oldstyle424}, for the IR types,
+ and what is typeset in the result.
+ In \cs{vref} the markup is inserted as replacement
+ text of \cs{next}. What is set in the index is governed by the macros
+ which are included after \cs{begindoublecolumns} in the \TeX book script.}
+$$\vbox{\offinterlineskip\def\tstrut{\vrule height2.5ex depth.5ex width0pt}
+\halign{\tstrut#\hfill\quad\vrule\quad&#\hfill\quad\vrule\quad&#\hfill\cr
+Mark up&Typeset in copy$^*$&IR \cr
+\noalign{\hrule}
+|^{...}| &\dots &|... !!0 |$\langle page\, no\rangle$.\cr
+|^!vrt...!vrt| &|!vrt...!vrt|&
+ |... !!1 |$\langle page\, no\rangle$.\cr
+|^!vrt\...!vrt| &|!vrt\...!vrt| &
+ |... !!2 |$\langle page\, no\rangle$.\cr
+|^\<...>|&$\langle\dots\rangle^{**}$&
+ |... !!3 |$\langle page\, no\rangle$.\cr
+\noalign{\vskip.5ex\hrule width1cm\relax\vskip1ex}
+\multispan3{\quad$^*\,$\vrt\dots\vrt\ denotes manmac's, TUGboat's,\dots
+ verbatim \hfil}\cr
+\multispan3{\quad$^{**}\,$in \cs{rm} \hfil}\cr
+}}$$
+For the user the word(s) is (are) important.
+The markup allowed for the IRs and the result in the copy are
+given in the accompanying table.
+
+\bluesubhead Markup
+
+The markup for IRs is near to natural.
+Precede the entry by a circumflex, or a double one in case of
+a silent\ftn{Silent IRs mean that these will appear
+ only in the index, not on the page.}
+index entry.
+
+\blueexample IR markup
+
+\thisverbatim{\catcode`\|=12 \catcode`\^=12
+ \catcode`!=12 \catcode`*=0 \unmc}
+\beginverbatim
+^{\'el\`eve!}^|verbatim text|^|\controlsequence|^\<a metalinguistic variable>
+^^\<a metalinguistic variable> %for silent ones, double the ^
+{\sl^{ligatures}} |'$|^|\,||$''|%from the TeX book script
+^^{markup commands, see control sequences}
+^{Lamport and \LaTeX} %text and control sequences with sort keys
+*endverbatim
+
+\thissubsubhead{\runintrue}
+\bluesubsubhead Spaces \par are difficult as always. ^^{IR\ and\ spaces}
+In the IR they separate parts of the IR and are used
+in the word part.
+
+\bitem Just typing a space has as an effect that
+ it will be neglected during sorting
+\bitem The markup `\cs{\char32}', a control space,
+ will yield a space subject to sorting, according to
+ the ordering table
+\bitem \cs{space} as markup will be neglected during sorting.
+ This token is default member of
+ the set of control sequences to be ignored.
+ It will be set in the index as \cs{\char32}.
+\smallbreak
+
+\exercise What to do when part of a title should reappear in the index?
+\answer The naive approach is to enclose that part by braces and precede
+ it by a circumflex. However, that goes wrong because a title
+ is stored and reused in many places. So copy the words and
+ mark them as a silent IR.
+
+\blueexample Spaces
+
+\thisverbatim{\catcode`\|=12 }
+\begindemo
+^{\space}%an ignored cs
+^{a\ a} %control space
+^{aa}
+^{a\ b}
+^{a \TeX}
+^{a\ \bf a}
+^{\TeX book}
+^{xyz beta}%space neglected in
+ %sorting
+^{xyza}
+^|\space|
+\sortindex\pasteupindex\bye
+!yields
+\noindent Sorted result in file index.srt
+\thisverbatim{\catcode`\!=12
+ \catcode`\;=0 }
+\beginverbatim
+\space {} !0 1.
+a\ \bf a{} !0 1.
+a\ a{} !0 1.
+a\ b{} !0 1.
+aa{} !0 1.
+a \TeX {} !0 1.
+space{} !2 1.
+\TeX book{} !0 1.
+xyza{} !0 1.
+xyz beta{} !0 1.
+;endverbatim
+\enddemo
+Explanation. \cs{space} belongs to the set of control sequences
+to be ignored, ^^{ignored\ control\ sequences}
+ICSs for short.
+This means that it is skipped with respect to sorting,
+except when it occurs as the last token of the word part.
+In that case they are ordered as a space,
+i.e., according to the lowest value.
+This explains the position of `\cs{space}.'
+
+`\cs{TeX},' and `\cs{TeX} book,' are subject to the default sorting keys.
+
+`xyza' precedes `xyz beta,' because the space is silent.
+When word ordering is preferred a \cs{\char32}, a control space, must
+be included.
+
+\bluehead Special tokens
+
+Tokens are either neglected
+or replaced by another sequence while sorting.
+\bluetex{} provides two sets of tokens to be ignored while sorting:
+^|\conseqs| and ^|\consyms|.\ftn{There are two sets because of
+ the handling of the space after the token in the result.}
+Replacing a control sequence by another sequence
+is called associating a sorting key to the
+control sequence.
+
+Active symbols can't be part of the IR, for the moment.
+
+\bluesubhead Tokens to be ignored
+
+In practice I needed things like \cs{tt}
+as part of the IR, which must be neglected while sorting.\ftn{The reason is
+ that {\tt <, and >} are used, and printed wrongly.}
+I decided to ignore those tokens while sorting and to include
+the tokens in the final index.elm as such.
+Default \bluetex{} knows about the following sets of tokens to be ignored.
+\begincenterverbatim
+\conseqs{\c\space\bf\it\rm\tt\sub\relax}
+\consyms{\`\'\"\^\~}
+!endcenterverbatim
+
+\bluesubhead Sorting keys
+
+In order to extend a set, use the macro \cs{add}.
+
+\blueexample Use of sorting keys
+
+Default \bluetex{} provides the following
+sorting keys.
+\begincenterverbatim
+\srtkeypairs{\AmSTeX{amstex}
+ \LAMSTeX{lamstex}
+ \LaTeX{latex}
+ \TeX{tex}
+ \PS{PostScript}}
+!endcenterverbatim
+Suppose that we have \cs{fourtex} and that we like this to be sorted
+as `4tex.'
+This can be done by extending the set of ^|\srtkeypairs|, ^^|\add|
+as follows.
+\thisverbatim{\unmc}
+\begindemo
+\add\fourtex{4tex}to\srtkeypairs
+Copy with ^{IR \fourtex}
+^{IR 1}
+^{IR 5}
+^{IR a}
+%
+\sortindex %with 4tex for \fourtex
+\pasteupindex%Set `IR \fourtex{}
+ %<pagenumbers>'
+\bye
+!yields
+then the file index.srt will contain the IRs
+\thisverbatim{\catcode`\!=12
+ \catcode`\;=0 }
+\beginverbatim
+IR 1 !0 <pageno>.
+IR \fourtex{} !0 <pageno>.
+IR 5 !0 <pageno>.
+IR a !0 <pageno>.
+;endverbatim
+\enddemo
+with \cs{fourtex} sorted on 4tex.
+
+\exercise What to do when `to' is part of the sorting key?
+\answer Add an extra level of braces.
+
+
+\bluehead Ordering
+
+A fundamental issue with indexes is the ordering. ^^{ordering}
+The ^{ASCII} table is not suited because lowercase and uppercase
+letters differ by 32. I decided to rank these as equal, more
+precisely to assign the lowercase ASCII values to both. I prefer
+from the accompanying table the {\oldstyle1}$^{st}$ column to the
+{\oldstyle2}$^{nd}$ one.
+
+Moreover, accented letters are not part of ASCII. How should we
+order for example e, \'e, \`e, \^e, \"e?
+I decided to rank accented letters equal to those without an accent,
+because I prefer from the accompanying table
+the {\oldstyle3}$^{rd}$ column to the {\oldstyle4}$^{th}$ one.
+
+I know that non-letters precede letters, but what about their relative
+ordering? I decided to stay as close as possible to the ASCII ordering.
+
+Then there is the problem of digits. In IRs they come as part of the
+word(s) and as page numbers. For the latter I used the numerical ordering.
+For the former I used the alphabetical ordering.\ftn{I could have applied
+ a look ahead mechanism and use numerical ordering throughout.
+ Maybe another time.}
+
+Furthermore, a user can select
+the so-called ^{word\ ordering},\ftn{This means that a space precedes
+ all letters. A space as such is neglected in the ordering.}
+by \cs{\char32}, \TeX nically a control space, as markup for a space.
+Personally, I like from the accompanying table
+the {\oldstyle5}$^{th}$ column better than the {\oldstyle6}$^{th}$.
+\def\btablecaption{}
+\def\footer{}
+\nonframed
+\def\rowstblst{}
+$$\def\header{lower vs.\ upper case\cs
+ accents vs.\ unaccented\cs
+ word ordering}
+\vruled\btable{\vtop{\halign{&\tstrut\quad#\hfil\cr
+el & el \cr
+El\`eve & em \cr
+em & El\`eve \cr}}\cs
+\vtop{\halign{&\tstrut\quad#\hfil\cr
+el & el \cr
+\hbox{\'el\`eve} & em \cr
+em & \hbox{\'el\`eve} \cr}}
+\cs\vtop{\halign{&\tstrut\quad#\hfil\cr
+sea lion & seal \cr
+seal & sea lion\cr}}
+}%end \btable
+$$
+
+\bluehead Typesetting the index
+
+The specifications for typesetting a \bluetex{} index are
+\bitem represent the four IR types the same as in the \TeX book
+\bitem set in two-columns, balanced, possibly preceded
+ by one-column copy
+\bitem set subsidiary entries analogous to the \TeX book
+\bitem indent continuation lines by {\oldstyle2}em
+\bitem indent subsidiary entries by {\oldstyle1}em
+%\bitem underline page numbers which represent the definition or
+% the main source of information
+%\bitem represent a page number in italics when that page contains
+% an instructive example of the concept in question.
+\smallbreak
+Users can edit index.elm\Dash read: add markup\Dash and
+provide the necessary macros in for example \cs{preindex}.
+In short follow Knuth. To please Frans Goddijn I introduced the tag
+^|\numberstyle|, by default equal to \cs{oldstyle}.
+
+\exercise And what about subentries?
+\answer My approach is to consider subentries as a typesetting problem in the sense
+ that the full entries are specified and only when sorted and typeset redundant first
+ parts can be suppressed, if one considers this better. This is similar to how
+ BLUe's format system typesets references, inspired by the \AMS.
+ For the moment I did not implement subentries handling, because as of {\oldstyle1995}
+ I consider it of low priority.
+
+\bluehead Customization
+
+A user might wish to interfere in places
+\bitem to include other tokens to be ignored while sorting
+\bitem to supply an ordering of his/her own
+\bitem to enrich the sorted and compressed file index.elm.
+\smallbreak
+
+\bluesubhead Adding tokens
+
+What are reasonable requirements to impose upon the handling of
+markup control sequences (cs for short)? In my opinion
+\bitem the cs must be defined
+\bitem ^|\makexref| writes the cs unexpanded
+\bitem ordering? unknown, and therefore must be supplied
+\bitem ^|\setupnxtokens| guards that the cs-s are written %, unexpanded,
+ to ^{index.srt} and ^{index.elm}.
+\smallbreak
+As a consequence I decided to neglect the `in between'
+control sequences while sorting.
+For those who favour a one-pass job, I have provided the following,
+though.\ftn{It is simpler to add those control sequences to
+ index.elm.}
+
+The extension of a set of tokens can be done via ^^|\add|
+\beginverbatim
+\add\hfil to\conseqs or \add\`to\consyms or \add\hfil{hfil}to\srtkeypairs
+%with auxiliary \def\add#1to#2{...}
+!endverbatim
+Each element from \cs{conseqs} is redefined in such a way
+that the control sequence token is written to the file
+with a space appended.\ftn{\cs{noexpand} is used instead of \cs{string}.}
+
+\bluesubhead Modifying ordering
+
+A general way is to `copy' the ordering table
+and to modify it.\ftn{My \cs{fifo} is just a shortcut, which also
+ prevents typos in assigning the ASCII values. For \cs{fifo}, see
+ my `FIFO and LIFO sing the BLUes.'}
+
+And what about a macro to add to the table?
+This can be done easily, and superficially looks convenient
+for an innocent user.
+At the moment I don't trust the macros to be worthwhile
+for an innocent user, unless a very modest index has to be made.
+And this completes the circle: different ordering is not wanted, I guess.
+
+\bluesubhead The process and files involved
+
+Like in manmac, \bluetex{} stores the raw IRs in the file index.
+^^{IR,\ processes\ and\ files}
+The file index^^{index,\ file}\ftn{Default index is the value of
+ the toks variable ^|\irfile|, which is used in \cs{sortindex}.}
+is read and stored in an array for internal sorting.
+After sorting, the number of entries is
+reduced,\ftn{Those which differ by page
+ number are collected in one entry.}
+and the result is written to the file ^{index.srt}.
+Then, index.srt is transformed into the file
+index.elm.\ftn{Default ^{index.elm} is the value of the toks variable
+ ^|\indexfile|, which is used in |\pasteupindex|.
+ The transformation abandons the IR syntax.
+ The part which specifies the kind of IR
+ is deleted and the word part marked up
+ accordingly.}
+The result is typeset via ^|\pasteupindex|.
+Schematically it comes down to the following.
+\bigskip
+$$\vbox{\hsize.5\hsize%
+\indmodelpic
+}$$
+^|\loadindexmacros| loads the index and sorting macros, and performs
+initializations. It is safeguarded against double loading.\ftn{I introduced
+ this because I start each chapter with \cs{loadindexmacros},
+ independent from whether it is run on its own or as part of the total.}
+
+
+\bluesubhead Enriching the index
+
+This use is necessary when for example ^^{index,\ enrich}
+\bitem control sequences have to be typeset
+\bitem special symbols are needed, or
+\bitem cross-references within the index are required.
+\smallbreak
+The best way is to start from the ^{index.elm} file.
+
+\bluesubhead Typesetting the enriched file
+
+When the default name is used\Dash index.elm\Dash
+just say \cs{pasteupindex}.
+For another file name assign this name to the toks
+variable \cs{indexfile},
+prior to the invocation of \cs{pasteupindex}.
+
+\bluehead Extras
+
+Ubdoubtedly people favour their own subset of \TeX, or more likely \LaTeX.
+There is good news. You don't have to use BLUe's format system. I gathered the sorting
+and indexing stuff as an independent self-contained set in the file plainindex.tpl.
+
+The bad news is that up till now I did not do much about preventing name clashes.
+
+\bluesubhead \TeX nical details
+
+The details with respect to indexing have been treated in `BLUe's Indexes,' and
+the sorting aspects have been treated in `Sorting in BLUe,' both available from the CTAN.
+\endinput
+\bye \ No newline at end of file
diff --git a/info/laan/pwt/pwt.int b/info/laan/pwt/pwt.int
new file mode 100644
index 0000000000..f242bad747
--- /dev/null
+++ b/info/laan/pwt/pwt.int
@@ -0,0 +1,707 @@
+\input blue.tex
+\loadindexmacros \report \vfuzz1000pt
+\bluepictures\bluemodelpic
+
+\bluechapter Introduction
+
+\pageno1
+\beginsummary
+A plea is made for simplicity after having made the right a priori choices.
+The aim is to provide a user's guide such that \bluetex{} can be used
+with confidence.
+\TeX{} and its benefits are explained in a nutshell.
+The contents of each chapter is summarized and
+the audience addressed.
+The model of BLUe's format is given.
+The concept, syntax and template of a BLUe script are touched upon.
+At the end a list of notations and definitions has been included.
+\endsummary
+
+Scientific tradition has it that simplicity can be attained
+once the right a priori choices have been made.
+
+In relation to using \TeX{} this means to get your priorities right,
+to keep in mind that it is all about what you have to say,
+to what you developed and wish to communicate.
+
+Next to the a priori choices, selection is important.
+The `handful' of tags needed in practice most of
+the time, at least by me, will be treated.
+\TeX{} is just one of the tools needed for computer-assisted information
+exchange, and therefore there is no use in (sub)optimizing.
+\displaycenterline{Understand BLUe's format sufficiently and
+ use \TeX{} with confidence!}
+The spirit of this work on using \TeX{} is to guide a user
+towards preparing documents with as little knowledge of
+the nitty-gritty of \TeX{} as possible.
+A tool should not become part of the problem.\ftn{My adage is
+ {\oldstyle80}\% of the quality with {\oldstyle20}\% of the energy.
+ Relevancy prevailed highbrowness.
+ Common scripts marked up by sound, non-esoteric \TeX niques.}
+To quote {\TB} `\dots If you are preparing a simple manuscript, you won't
+need to learn much about {\TeX} at all; on the other hand \dots'
+
+\TeX\Dash designed in the late seventies and frozen in the early nineties\Dash
+is a tool for formatting documents by computer.
+Together with its twin sister \MF{} it has revolutionized
+computer-assisted typesetting.
+The benefits of ^{\TeX{}} are
+\bitem quality
+\bitem availability on most if not all computers (in the Public Domain,
+ turn-key)
+\bitem independence from input and ouput devices
+\bitem open-endedness, to cooperate with EP tools, and
+ last but not least
+\bitem stability.
+\smallbreak
+Because of this, an ASCII script with \TeX{} markup is portable
+in place and time.
+
+I'll show that \TeX{} is suited for structural markup. This in
+contrast with the widespread belief that this is the virtue of
+\LaTeX. Not true, IMHO, with all respect. \LaTeX{} provided a
+user's guide along with its macros and
+emphasized the concept of separate style files.
+
+From the ample \TeX{} commands I'll select BLUe's subset
+for practical day-to-day use.
+To format an article\Dash a set of transparencies, and some more\Dash
+with \bluetex, that is what it is all about.
+These representations of a script are common.
+Write down the results, and support the aftertalks by transparencies.
+
+The `^{BLUe's\ format}' section defines the structure of a ^{BLUe\ script}, and
+provides a template, to be filled in.
+How to mark up copy in detail, is subject of the chapters
+`Text,'
+`Mathematics,'
+`Tables,' and
+`Pictures.'
+How to add a list of references and how to make citations
+to that list is treated in the chapter `References.'
+The chapter `Index,' is about how to create and include an index.
+The chapter `Customization' is about modifying \bluetex.
+Each chapter contains exercises.
+As Appendices I included
+`Solution to the Exercises,'
+`Formats,'
+`Tools,'
+`BLUe's, BLUes, and Paradigms,'
+`List of Examples,\ftn{Although this work is not a cookbook,
+ it's handy to have a quick access to the examples, because
+ it has all to do with using, not in the least by example.}'
+`Table of Tags,'
+`History of Changes,'
+`Obsolete stuff,'
+`Index,' and
+`Table of Contents.'
+A similar approach as in `Publiceren met \LaTeX' has been on my mind.
+Ideally, the material dealt with should have been the same,
+with only the \LaTeX{} tool exchanged for \TeX.
+The underlying idea is that the functionalities required,
+and the essence of the exercises, should be independent
+of the tool used.
+The same setup and exercises should allow a treatise on
+you-name-it word processor.\ftn{The main difference with
+ the early work on \LaTeX{} is that now
+ the markup of a BLUe script is the issue.}
+
+Floating aspects have been used in a special sense.
+Information is set in a box and inserted via a pasteup control sequence
+at your place of choice.
+Of course the usual inserts of plain for floats, \cs{topinsert},
+\cs{midsert} closed by \cs{endinsert}, are still there to be used
+
+I did not include a chapter on basic notions in publishing or book
+production, because that information can be found elsewhere,
+and would otherwise unduly increase the size of this work.
+I did not include a survey of
+`\TeX{} flavours and worlds' either, for similar reasons
+although it comes closer to the subject.
+For \TeX{} flavours et cetera, consult the archives of the worldwide
+electronic networks to find for example
+`What is \TeX{} and \MF{} all about?'
+
+Nothing of the world of \PS{} coupled to \TeX{} has been included,
+jeopardizing \PS's scalability of fonts,
+its rotation capabilities,
+and its possibilities with colours.
+I take the fonts which come with \TeX{} for granted,
+assuming English as the lingua franca
+for scientific communication.
+The latter implies that (multi-)lingual issues have not
+been touched upon either.
+
+Font switching and {font\ selection} has been treated poorly, to put it mildly.
+For the moment I stay with Knuth and copied his size-switching macros.
+BLUe's format contains the size-switching macros
+\cs{Large}, $\approx${\oldstyle17}pt, used for chapter headings,
+\cs{large}, $\approx${\oldstyle14}.{\oldstyle5}pt,
+used for transparencies,
+and \cs{small}, i.e., {\oldstyle8}pt, used for footnotes.
+Next to these \cs{tenpoint}, \cs{ninepoint}, and
+\cs{eightpoint} have been inherited from manmac.
+However, the abstraction of mapping the linear space of fonts onto a logical
+{\oldstyle5} dimensional space, which is the basic idea in NFFS,
+is nice and might become very useful some day.
+
+Because of these a priori choices this guide remained small
+and will hopefully be perceived as simple.
+
+The audience in mind consists of scientific workers, especially the
+growing breed of self-publishing authors, with substantially complex copy,
+especially complex math and tables.
+Authors who concentrate on the contents
+welcome a reasonable print-out,
+exchange their works via electronic networks,
+submit \AllTeX{} scripts to publishers,
+like to understand their tool, and
+last but not least aim to use
+it confidently with minimal markup.\ftn{\TeX{} markup is extremely
+ tolerant. Many ways are possible, opening the door to quick-and-dirty
+ markup. A discipline is needed.}
+In netland one can't rely much on publishers for the moment,
+one is on one's own.
+There is even the danger of becoming a \TeX hacker after some years,
+because \TeX{} will serve your lifetime.
+
+For running a BLUe script with text not much \TeX{} knowledge is required.
+When details of math, tables, and graphics come into play,
+familiarity with David Salomon's courseware\Dash MAPS special {\oldstyle1992},
+also available on NTG's CD-ROM\Dash is assumed.\ftn{Advanced \TeX, {\oldstyle1995},
+ Springer-Verlag, ISBN {\oldstyle0}-{\oldstyle387}-{\oldstyle94556}-{\oldstyle3}.}
+
+\bluehead The key to understanding Knuth's markup
+
+^^{Knuth's\ markup}
+It did take me quite a while to understand Knuth's markup, \winksmiley.
+Biased by my programming experience, and
+influenced by SGML and \dots\thinspace\LaTeX, I was on the wrong track.
+My mind was full of block structures with rigorous opening and closing tags,
+and parameterization via arguments of procedures.
+I was blocked for the simple approach of {\sl text replacement}, and
+had to unlearn much, in order to become innocent again,
+to open my mind for Knuth's approach.
+\begincenter
+ASCII text with visual layout
+and
+minimal markup tags added
+\endcenter
+The royal road to understanding and appreciating Knuth's markup is starting
+from ASCII text, what you would write by hand.
+The next step is inserting markup tags, as few as possible,
+that is, enriching the ASCII file with minimal markup.\ftn{It is
+ quite another task to implement those minimal tags, however.}
+
+An example? Undo the examples in the Example Formats chapter of \TB{}
+of the markup, and insert your own markup, and you will know what I'm
+talking about.
+I hope you will come to the same conclusion as I did
+\displaycenterline{ Knuth's markup is unsurpassed!}
+I'll come back to the matter in the chapter `Text' and in the Appendix
+`Formats,' especially with the letter format.
+
+\bluehead BLUe's format
+
+The format is a personalized system to format compuscripts.
+It is a compatible extension of plain \TeX{} and
+organized as a `kernel + modules,'
+similar to the setup of FORTRANxx.
+It is designed to be supportive, to suit your needs.
+You are Ben Lee User.
+It is not imposing.\ftn{I know of the defensive attitude of publishers.
+ They welcome the benefits of imposing formats to prevent
+ the use of macros which hinder production.
+ There is much truth in there, given the reality of the complex\Dash
+ or better, the unusual\Dash \TeX{} markup language.
+ However, there is no use in protecting an author
+ against himself.
+ Simple supporting tools should make the imposing attitude superfluous.}
+
+The concept of a BLUe script is at the heart.
+\bluetex{} allows one or more scripts to be processed\ftn{Either in sequence
+ or nested. The former is handy when several contributions have to be run
+ in one job, for a journal for example.
+ The latter has been used in this script to switch temporarily
+ to \cs{letter}, casu quo \cs{transparencies}.}
+in one run, even non-BLUe scripts.
+As an example of the latter
+\displaycenterline{Thank you. \cs{bye}}
+runs with \bluetex.
+This tolerance is handy while proofing parts.
+
+\blueexample BLUe script
+
+^^{BLUe\ script,\ template}
+Generally, I use a template, an empty script as a fill-in form,
+with the main markup tags already there.\ftn{The order does not matter
+ much for the elements before \cs{beginscript}.
+% They can be supplied in any order.
+ Because of the short markup tags
+ the feature to let the computer prompt the |\end<tag>|,
+ once the |\begin<tag>| has been typed in,
+ is not so relevant.
+ The \cs{contents} can be used to provide a wired-in ToC,
+ to facilitate browsing of the script,
+ next to the dynamically generated one.}
+\thisverbatim{\catcode`\~=14
+ \catcode`\_=8 }
+\begincenterverbatim
+%Template BLUe script---outer level markup
+ %Preliminary part, with
+ %elements in arbitrary order
+\issue{MAPS 94.2}
+\title{BLUe's Format}
+\subtitle{The best of both worlds}
+\keywords{...}
+\abstract{...}
+\contents{Introduction
+ \se Why? %\se acronym for subelement
+ ...
+ Acknowledgements, Conclusion, References}
+\references{~
+\!math!langle!,name_1!rangle!dots!endmath~
+\!math!langle!,name_n!rangle!endmath}
+\pictures{~
+\!math!langle!,name_1!rangle!,pic!dots!endmath~
+\!math!langle!,name_n!rangle!,pic!endmath}
+\acknowledgements{...}
+\beginscript %Marked up copy proper comes next
+\head{Introduction}
+ %Various parts with inner markup
+...
+ %Ended by the following back matter
+\pasteupacknowledgements
+\pasteupreferences
+\endscript
+!endcenterverbatim
+Once used to the template, the outer markup is a trifle.
+Of course, in order to process the script it should be preceded by
+\cs{input} {\tt \bluetex}.
+On my Mac Classic II \bluetex{} is a format.
+One could even think of a bluetex command similar to \LaTeX.
+\exercise How to override the defaults for \cs{author} and the like?
+\answer To override the defaults assign values to the token variables
+\cs{author}, \cs{address}, \cs{netaddress}, and \cs{issue}.
+
+\exercise How can we process more scripts in one run?
+\answer Provide |\everyscript{\notlastscript}| and precede the last
+ script by |\thisscript| |{| \cs{lastscript} |}|. This holds for scripts in
+ sequence. For nested scripts see this script file for
+ the examples of a letter and
+ a few transparencies run within this script.
+
+Default the look-and-feel in print resembles much \TUB's (two-column) layout.
+
+\thissubhead{\runintrue}
+\bluesubhead The syntax
+
+^^{BLUe\ script,\ syntax}for a BLUe script reads
+as follows.\ftn{I used the same
+ Backus-Naur formalism for the syntax diagrams,
+ as adopted by Knuth and explained in \TB{} {\oldstyle268},
+ {\oldstyle269}.}
+
+\beginsyntax
+<BLUe script>\is|\input|\thinspace \bluetex\thinspace<language><scripts>
+<language>\is<default>\alt|\english|\alt|\russian|\ftn{In progress as %
+ spinoff of the translation effort. Default is English.}%
+ \alt|\<yourlanguage>|
+<scripts>\is<script>\alt<script><scripts>
+<script>\is<preliminary><scriptoptions>|\beginscript|<sections>%
+ <indexing>|\endscript|
+\endsyntax
+with refinements
+\beginsyntax
+<preliminary>\is<index><format>|\title|<infopart>
+<index>\is<empty>\alt|\loadindexmacros|
+<format>\is<empty>\alt|\concert|\alt|\letter|%
+ \alt|\report|\alt|\transparencies|\alt|\<yourformat>|
+<infopart>\is<empty>\alt<infoelement><infopart>
+<infoelement>\is|\subtitle|\alt|\issue|\alt|\input|\alt<TeXcode>
+ \alt|\author|\alt|\address|\alt|\netaddress|\ftn{Defaults.}
+ \alt|\keywords|\alt|\abstract|\alt|\contents|\alt|\references|\alt|\pictures|
+ \alt|\acknowledgements|
+<scriptoptions>\is<empty>\alt|\everyscript|\alt|\thisscript|%
+ \alt|\everyscript||\thisscript|
+\endsyntax
+The sections consist of the tree of head
+structures with IM copy, inner marked up copy proper.
+\beginsyntax
+<sections>\is<empty>\alt<section><sections>\ftn{To be repeated for subsections and subsubsections.}
+<section>\is<head><paragraphs>
+<head>\is|\head|\alt|\bluehead|\ftn{A minimal markup alias %
+ as a tribute to manmac.}
+<paragraphs>\is<empty>\alt<paragraph><paragraphs>
+<paragraph>\is<subsections>\alt<IM copy>
+<indexing>\is<empty>\alt|\sortindex||\pasteupindex|
+\endsyntax
+
+\bluesubhead Variants
+
+By a control sequence\Dash called an attribute in the SGML world\Dash
+the format used can be changed, resulting in a different look-and-feel
+in print.
+For example, via \cs{onecolumn} within the default format.
+This is meant for a script in total.
+However, two-column and one-column scripts can be processed
+in one run.
+
+The control sequence \cs{transparencies} changes the result
+into a representation suited for copying on transparencies.
+Adaptation of the script is mainly about deleting.
+
+Especially for PWT I designed the report format.
+It is essentially one-column, and a mod on top of the default.
+The control sequence \cs{report} yields the report layout.
+The path `From-report-to-transparencies'
+comes down to stripping off the superfluous.
+See the Appendix `Formats' for details.
+
+I also included Knuth's letter format, \cs{letter},\ftn{Well, I updated
+ Knuth's approach a little, if I'm allowed to say so. Important is to
+ provide for mail merge and in general to let the format cooperate with
+ an address database. And of course I simplified the macros a little.
+ No different modes of text processing.}
+and concert format, \cs{concert}.
+
+\bluesubhead Extras
+
+The Appendix `Tools' is mainly about the lower level extras.
+It provides a method to organize all your macros.
+It is not part of \bluetex, but can cooperate smoothly without overhead,
+respecting the `little user,' i.e., the user with modest demands.
+
+It is also important to think of a garbage bin. Somewhere to keep
+your obsolete stuff, macros or formats, in order that your scripts
+can still be formatted without change in future.
+For that purpose I introduced the obsolete.dat database.
+
+Finally, I coupled my address.dat database, that is letters can
+find addresses in that database, similar to a bibliography
+which will take the references from a bibliography database.
+
+
+\bluehead The model
+
+^^{BLUe's\ format\ model}
+BLUe's format is a personalized formatting system. It's yours!
+It knows about your context.
+It is based on ^{manmac}, ^{gkppic}, and the use of databases.
+$$\qquad\qquad\bluemodelpic$$
+What does the model say?
+One way of looking at it is to think of inner and outer worlds.\ftn{Knuth
+ had the outer-inner duality on his mind already, as can be deduced
+ from his \cs{outer} \cs{def}-s.}
+The extras part reflects the outer world in general.
+Your publisher and his tools, casu quo formats, and your colleagues
+who provide macros for general use.
+The BLUe's format part\Dash your inner world\Dash
+divides the markup tags into two clusters,
+supported by databases.\ftn{Database in this context means essentially
+ a multi-file file. Each tool or macro set is part of a file.
+ I prefer to have separate clusters for
+ formats, tools, references
+ pictures and addresses.
+ The global structure has been simplified.
+ What is needed will be loaded selectively.
+ The best of both worlds.}
+These databases not only support the handling of
+the usual collection of references.
+It also provides the mechanism for elegantly storing pictures.
+Even newer is using the database approach
+to manipulate formats and tools.
+We don't need all those separate files any longer.
+This approach can also clean up the organization of
+the multitude of font files, I presume.
+
+Another way of looking at the model is that
+the model provides a structure for
+keeping pace with change and progress.
+
+You have to do the work.
+Polish what you have to say.
+Mark up, as naturally as possible,
+by using formatting goodies from the past like manmac and picmac.
+I like minimal markup, that is
+\displaycenterline{supprematism in markup}
+in the spirit of Malevich's `White cross on a white background,'
+let us say.
+
+Build up your collection of works relatively independently of
+context.\ftn{This looks trivial but experience has it that early
+ \TUB{} articles, for example, can't be formatted without adaptation,
+ because the formats used are obsolete.
+ An intrinsic question is whether we should update
+ or republish old work. Up till now I have updated my works.
+ All my \AllTeX{} articles run with \bluetex.
+ When composing this work, I decided not to update
+ old works any longer. That is history from now on.
+ This work contains the improvements, if any \smiley.}
+Communicate what you have lived through, and keep in touch with developments.
+
+When you are a self-publishing author, that is all there is.
+If not, you have to obey the wishes of your institute or publisher,
+meaning that outer-level issues have to be adapted.
+Outer-level commands govern
+the title part and the global page layout,
+like headings of sections,
+running headers and footers,
+the font(s) used,
+the number of columns,
+the page size,
+paragraph indentation and separation,
+and the like.
+
+The aim of the inner level set of markup tags is to remain invariant,
+with the purpose that these tags can be used in any context now and in future.
+
+The borderline between inner and outer markup
+is context dependent, and therefore undefined.
+I like to think in terms of overlapping clusters.
+What you might call outer I might call inner, and vice versa,
+not to mention your publisher's opinion.
+A pragmatic description of the group of your outer commands are those
+which you have to change when you submit your work to your publisher or
+a second publisher.
+
+The wish to modify has been anticipated in BLUe's format.
+For that purpose either control sequences,
+which represent a different format, can be invoked,
+or a handful of outer level markup commands, casu quo parameters,
+can be customized.
+
+Also the open-endedness is there.
+At the higher level the number of mappings from
+BLUe's format into publisher formats can grow.
+At the lower level you can add macros.
+And what about the old stuff?
+The old versions can be stored in the obsolete.dat database,
+with the purpose that BLUe scripts can still be
+formatted in future, without change.\ftn{Well, \dots\thinspace let us hope
+ little change.}
+And if you have a database of your own,
+just make the connection.
+
+Portability and reusability are served by writing macros in plain \TeX,
+the lowest common and documented \TeX{} language of all the flavours.
+The multitude of tools have been organized in a database
+to load selectively from.
+
+The reusability of formats, tools, references, pictures, and addresses
+has been eased by storing these in databases.
+By this way I obeyed the ^{Samelson\ principle}, which comes down to
+\displaycenterline{ Don't pay for what you don't use.}
+
+\bluehead Notations and definitions
+
+^{Acrobat} is Adobe's .pdf tool suite, which the consumer of scripts
+can use independent from the preparation tool used, to browse
+scripts, to add hyperlinks and so on.
+
+^{address.dat} is the address database to cooperate smoothly with \cs{letter}.
+
+^{\AmSTeX} denotes the \AllTeX{} system in use by the \AMS.
+
+^{ASCII} is an acronym for American Standard Code for Information Interchange.
+
+BLU is Knuth's nickname for Ben Lee User. I adopted his cousin BLUe.^^{BLU, BLUe}
+
+^{BLUe\ script} is an ASCII file with \TeX{} markup inserted, to be processed
+by \bluetex.
+
+^{BLUe's\ format} is the collection of the formatting tools:
+ ^{blue.tex}{} file (the kernel),
+ and the databases fmt.dat, tools.dat, address.dat,
+ lit.dat, pic.dat (modules).
+
+\bluetex{} denotes the kernel format to typeset scripts.
+
+^{CTAN} is the acronym for Comprehensive \TeX{} Archive Network. The resource
+of \AllTeX{} materials on the internet. It comprises various sites with their
+contents automatically mirrored.
+
+Customization occurs a lot in this work. On the one hand it is explained what
+to do, and on the other hand it is indicated how to customize the macros.
+
+^{DTP} an acronym for Desktop Publishing, an interactive approach orthogonal
+to markup-oriented systems.
+
+^{EP} is an acronym for Electronic Publishing.
+
+^{fmt.dat} denotes the database of formats to be used along with \bluetex.
+
+^{gkppic} is the acronym for the macros used by Graham, Knuth and Pastashnik
+to format `Concrete Mathematics.'
+
+^{HTML} is the acronym for HyperText Markup Language and facilitates clicking
+through a fragmented script.
+
+^{IMHO} stands for In My Honest Opinion, usually with all respect.
+
+^{\LaTeX} is Lamport's system on top of \TeX{} to format articles, reports,
+letters, books and so on.
+
+^{lit.dat} is the literature database to cooperate smoothly with \bluetex.
+
+^{manmac} stands for the macros used by Knuth to format \TB.
+
+^^{markup, automatic, descriptive, functional, inner, Knuth's, logical, minimal,
+ outer, recursive, structural, visual}
+Markup stands for the insertion of instructions in a script.
+There are various markup notions.
+\item{}Automatic markup is used by me when the computer generates the markup.
+\item{}Descriptive markup abstracts from concrete printers and emphasizes
+ the descriptional nature. Agreed a little vague \smiley.
+\item{}Functional markup emphasizes the functional character of the elements.
+\item{}Inner markup tags is the set of markup tags that remains invariant
+ when processing a script with another \TeX{} flavour.
+\item{}Logical markup is all about the logics of the script.
+\item{}Minimal markup stands for markup with as few as possible markup tags.
+\item{}Outer markup tags is the set of markup tags which needs to be
+ customized when processing a script with another \TeX{} flavour.
+\item{}Recursive markup is used by me especially when the markup is generated
+ by the computer by means of recursion.
+\item{}Structural markup emphasizes the structure of the script.
+\item{}Visual markup denotes the implicit markup by white space.
+\smallbreak
+I'm not claiming that these descriptions enjoy general acceptance;
+no, it helps to indicate the various backgrounds and intentions, as I
+have perceived them and hinted at in this script.
+IMHO, there is a lot of overlap, and no generally accepted list of
+definitions.
+
+^^{miniature}
+Miniature is an initial of a chapter. Historically, a nice painting.
+In compuscripts generally a character from a special font.
+
+^{NFSS} is the acronym for New Font Selection Scheme. Its purpose is to
+describe the selection of fonts logically. A mapping of the {\oldstyle1}
+dimensional space of fonts onto the logical {\oldstyle5} dimensional space
+as introduced by NFSS, with dimensions
+encoding scheme, family, series, shape, and size.
+
+^{OTR} acronym for OutpuT Routine.
+
+^{PDF} acronym for Adobe's Portable Document Format.
+
+^{pic.dat} is the picture database to cooperate smoothly with \bluetex.
+
+^|\PiCTeX| a system to format pictures with plain \TeX, due to Wichura.
+
+Parameterization denotes ways to parameterize a macro.
+
+^{\PS} denotes Adobe's\Dash de facto standard\Dash page description language.
+
+References are stored in lit.dat, which contain even the works I don't remember
+ explicitly but have built upon undoubtedly.
+
+Script is my term of a file with (\TeX) markup.
+
+Section is a document element, that is,
+ a head followed by paragraphs.\ftn{Analogous for \cs{subsection}
+ and \cs{subsubsection}.}
+
+^{SGML} Standardized Generalized Markup Language. The ISO standard activity
+ for markup, ISO{\oldstyle8879}.
+
+^^{sorting\ keys}
+Sorting keys are pairs consisting of a control sequences and
+the replacement for sorting the item in the index.
+
+Syntax for tags:
+|\begin<tag>|, |\end<tag>|, |\<tag>|;
+|\pre<tag>|, |\post<tag>| placement within context;
+|\this<tag>|, |\every<tag>| handling of options
+
+^{tools.dat} is the database of tools to cooperate smoothly with \bluetex.
+
+^{WYSIWYG} What You See Is What You Get.
+An interactive way of working via what is seen on the display.
+It is at the heart of DTP systems, to counteract the
+difference of what is seen on the screen and what will be printed on the paper, especially
+with respect to the fonts.
+
+\bluehead Markup conventions adopted
+
+The preliminary pages are treated separately, don't take numbering, and have
+a label in the margin. There are two ToCs. A static one at the beginning to facilitate
+browsing the script file and the dynamically generated one at the end which takes page numbers.
+
+The chapter headings are set in a larger type. The title is used in
+the headline (without number),
+the list of examples, and
+the table of contents.
+The (hidden) number of the chapter has been used in
+the exercises,
+the table of contents, and
+the list of examples.
+Chapter headings and section headings are centered and
+don't take a number.
+The appendix headings have their number printed as a capital letter.
+
+Headings don't take a period.
+Run-in text can be recognized from the context.
+
+Headlines have the title of the chapter left and the title of the report right.
+They are both set in slanted type.
+
+\cs{parindent} has been set to {\oldstyle0}.
+Because of this the footnote numbers hang out.
+A \cs{generalindent} has been used.
+
+Exercises take a number, no further indication has been used.
+
+Examples are not numbered in the text, but labeled by the word
+`Example' and take a label to characterize the example.
+The label is reused in the list of examples, next to the hidden number.
+Punctuation marks and footnote markers are used in such a way that the
+footnote marker appears after the punctuation mark. (Except for question
+marks and exclamations.)
+Quotation closings come after that.
+
+Now and then an explicit \cs{newpage} has been inserted to prevent
+underfull vbox messages. No floats have been used, in order not to
+disturb the sequential ordering.
+
+\bluehead Copyrights BLUe's Format system
+
+The software
+$$\def\data{blue.tex\rs
+ fmt.dat \rs
+ tools.dat}
+\btable\data$$
+is shareware available from CTAN and NTG's 4All\TeX{} CD-ROM.
+It is not allowed to make any profit on it.
+A happy user is requested to send
+US\$\thinspace{\oldstyle25} to the author.
+However, people in financial disadvantaged countries can send an amount
+according to the macindex, that is the amount in dollars equivalent
+to {\oldstyle20} breads.
+No check please, because of banking overhead.
+
+The contributors will be added to my address database,
+with field \cs{registeredbluetrue}.
+Russian users are relieved for the moment from
+the shareware request, with respect to personal use.
+
+Auxiliary and personalized files are the databases
+$$\def\data{address.dat\cs addresses \rs
+ lit.dat \cs references\rs
+ pic.dat \cs pictures.\hfill}
+\btable\data$$
+
+The main reason for asking shareware support is to
+protect myself against too many request, and
+to raise some funds to continue my \TeX{} and \MP{} work.
+
+The user's guide `Publishing with \TeX,' and the
+accompanying articles are free for personal use, and can be
+plucked from the CTAN\ftn{Directory: pub/archive/info/pwt/\dots}
+or NTG's 4All\TeX{} CD-ROM.
+
+
+{\def\copyright{March, {\oldstyle1995}}
+ \makesignature}
+
+\endinput
diff --git a/info/laan/pwt/pwt.mat b/info/laan/pwt/pwt.mat
new file mode 100644
index 0000000000..9ad24d59b5
--- /dev/null
+++ b/info/laan/pwt/pwt.mat
@@ -0,0 +1,1167 @@
+\input blue.tex
+\loadindexmacros
+\report
+\font\grkop=cmr12 scaled\magstep3
+\bluechapter Mathematics
+
+\beginsummary
+On top of plain \TeX{} \bluetex{} provides facilities for:
+automatic numbering,
+cross-referencing for formulas,
+matrix icons,
+multi-alignment points in eqalign,
+primed summation symbols,
+arrows for commutative diagrams, and
+some special symbols.
+Examples borrowed from literature are incfluded to illustrate
+how \TeX{} can be used to mark up mathematics.
+This anthology shows that many details have to be prescribed.
+To give a math manuscript to a keyboarder without markup guidance
+is doomed to yield mediocre results.
+\endsummary
+
+\noindent^{Swanson} {\oldstyle1986} is a good source for what math should
+look like in print.
+Very nice is also `^{Mathematical Writing},' a report from
+a Stanford Workshop organized by Knuth.
+\TeX{} is already very rich for math markup,
+because in his Preface to \TB{} Knuth states
+\beginquote
+\noindent\llap`\dots \TeX, a new typesetting system intended for the
+creation of beautiful books\Dash and especially
+for books that contain a lot of mathematics.'
+\endquote
+
+\bluehead What's the problem, Doc?
+
+If we assume that mathematicians write math manuscripts
+in the classical sense, then there is a problem when those mathematicians
+wish to have their work formatted via computer-assisted
+document-preparation tools like \TeX.
+What has to be keyboarded looks much different from the manuscript.
+Examples of this phenomenon are omni-present in this work.
+
+\blueexample Disparity math notation and markup notation
+
+\thisverbatim{\catcode`!=12
+ \catcode`~=0 }
+\begindemo
+x=1+\left({y^2\over k+1}
+ \right)^{\!\!1/3}
+~yields
+$$x=1+\left({y^2\over k+1}\right)^
+ {\!\!1/3}$$
+\enddemo
+Because of this disparity, the problem is how to get a correct\ftn{Not
+ only in the sense that the \TeX{} formatter does not complain,
+ no, correct in the sense of complying with tradition of mathematical
+ typesetting.}
+\TeX script, starting from a mathscript.
+This is difficult\ftn{In the example at hand the keyboarder has to be
+ aware of \cs{over} and $/$ respectively, and when to use which.
+ Moreover, the correct size of the parentheses must be supplied, and
+ some kernings have to be inserted!}
+due to the inherent complexity of math typesetting, and due to
+the unusual nature of \TeX, if not because of the bewildering and
+confusing flavours of \TeX-based products.
+Even a fancy and friendly, {\smc wysiwyg} user-interface is not enough.
+Optical scanners of math\Dash or systems which understand
+ spoken mathematics\Dash are still science fiction.
+
+\bluehead The extras
+
+\bluetex{} provides as extras to plain {\TeX} facilities for:
+automatic numbering,
+cross-referencing for (display) formulas,
+macros for ^{matrix icons},
+an extension of ^|\eqalign| with respect to multi-alignment points,
+primed summation symbols,
+arrows for commutative diagrams,
+^|\beginmathdemo| and |\endmathdemo| from manmac, and
+poor man's ^{blackboard bold} and some other special symbols.
+These extras are introduced via examples.
+
+\blueexample Automatic numbering and cross-referencing
+
+^^{formula,\ cross-referencing}
+^^{formula,\ automatic numbering}
+^^{formula,\ labeled}
+This is a compatible extension.
+For the markup of math ^{cross-referencing} insert
+instead of plain's explicit (reference) number
+
+\bitem \noindent^|\ref|, for creation of the number, and
+ \thisverbatim{\emc}|\ref\<name>|, for attaching
+ a name to the automatically generated number, and
+\bitem ^|\crsref||\<name>|, for cross-referencing.
+\smallbreak
+
+\begindemo
+%Automatic numbering
+$$a+b\eqno\ref$$
+!yields
+$$a+b\eqno\ref$$
+\enddemo
+
+
+\begindemo
+%Automatic numbering, and
+%symbolic cross-referencing
+$$c*d\eqno\ref\cgl$$
+Text, \crsref\cgl
+!yields
+$$c*d\eqno\ref\cgl$$
+Text, \crsref\cgl
+\par\noindent
+\enddemo
+\exercise And what about forward referencing?
+\answer This is not possible in a one-pass job. Therefore a note
+ is printed in the margin while proofing. The correct
+ number has to be filled in ultimately.
+
+%end answer
+Handy token variables are ^|\prenum|
+and ^|\postnum|.\ftn{Courtesy Michael Spivak.}
+Their contents is inserted before, respectively
+after, the automatically generated number in \cs{ref} and \cs{crsref}.
+Because of this one can get labels and crossrefs like {\oldstyle13}a,
+or enclosing numbers by parenthesis.
+The latter are the defaults of these token variables.
+If in such a case the formula counter must keep its value, provide
+|\advancefalse|.
+\exercise How can we retain the number, and suffix a letter, as
+ label of a formula to come?
+\answer Provide \cs{advancefalse}, and |\postnum{a)}|.
+
+\blueexample Matrix icons
+
+Useful icons concern the matrices:
+rectangular, via ^|\icmat|,
+triangular (lower left and upper right),
+via ^|\icllt| or ^|\icurt|, and
+upper Hessenberg, via ^|\icuh|.
+The arguments are dimensionless numbers.
+The first argument reflects the vertical size, and
+the second the horizontal size.
+In case of \cs{icuh} the second argument is the Hessenberg bandwidth
+and the third is the difference between the first and the second.
+
+
+\begindemo
+\unitlength1ex
+$$\icmat44\kern\unitlength\icllt44=
+ \icllt44\icuh413\qquad
+ \hbox{AL}=\hbox{LH}$$
+!yields
+\unitlength1ex
+$$\icmat44\kern\unitlength\icllt44=
+ \icllt44\icuh413\qquad
+ \hbox{AL}=\hbox{LH}$$
+\enddemo
+
+\exercise Another matrix factorization reads
+\begincenterverbatim
+$$\icmat63=\icmat63\kern\unitlength
+ \icurt63\qquad\hbox{A}=\hbox{QR}$$
+!endcenterverbatim
+When used together with the example above,
+align on the =-signs, that is, on the =-sign in the icons and on the
+=-sign in the formulas.
+\answer Use \cs{eqalign} as follows.
+\beginverbatim
+$$\unitlength1ex
+ \eqalign{
+ \icmat44\kern\unitlength\icllt44={}&
+ \icllt44\icuh413&
+ \qquad \hbox{AL${}={}$LH}\cr
+ \icmat63={}&
+ \icmat63\kern\unitlength\icurt63&
+ \qquad \hbox{\phantom{A}A${}={}$QR}}
+$$
+!endverbatim
+
+\blueexample Compatible extension of eqalign %
+ with multiple alignment points
+
+^^|\eqalign|
+\begindemo
+$$\eqalign{
+\cos(z\sin\theta)={}&
+ J_0(z)&
+ {}+2\sum_{n=1}^\infty
+ J_{2n}(z)\cos2n\theta\cr
+ \sin(z\sin\theta)={}&
+ &
+ {}+2\sum_{n=1}^\infty
+J_{2n+1}(z)\sin(2n+1)\theta\cr
+}$$
+!yields
+$$\eqalign{
+\cos(z\sin\theta)={}&J_0(z)&
+ {}+2\sum_{n=1}^\infty J_{2n}(z)\cos2n\theta\cr
+\sin(z\sin\theta)={}& &
+ {}+2\sum_{n=1}^\infty
+J_{2n+1}(z)\sin(2n+1)\theta\cr
+}$$
+\enddemo
+\exercise Why is the empty formula used in the markup?
+\answer The empty formula $\{\}$ is used to coerce the + to behave
+ as a dyadic operator, and the = to behave similarly.
+ In other words to yield the correct spacing.
+
+\blueexample Macros for showing math markup and the result
+
+^|\beginmathdemo| (and variants) and |\endmathdemo|,
+are used in the \TB{} script, {\oldstyle444}--{\oldstyle466},
+for indented display Math, see \TB{} chapters
+{\oldstyle16}--{\oldstyle19}.\ftn{There
+ is only one second part macro for all these cases.
+ Its replacement text is modified into \cs{crcr}\cs{egroup}\$\$.}
+^^|\begindemo|^^|\yields|
+They are used to typeset the marked up copy and the
+typeset result side-by-side.
+The user does not have to bother about the template for the
+alignment display used.
+The functionality provided is similar, but a little restricted,
+to the (\LaTeX) styles for switching from
+one-column to two-column format and vice versa.
+But, \dots\thinspace it is much simpler and more efficient\Dash
+IMHO with all respect\Dash
+because it does not entail OTR processing.
+
+\thisverbatim{\catcode`\|=12 }
+\begindemo
+%TeXbook 128
+\beginmathdemo
+ \it Input&\it Output\cr
+ \noalign{\vskip2pt}
+ |$x^2$|&x^2\cr
+\endmathdemo
+!yields
+\beginmathdemo
+ \it Input&\it Output\cr
+ \noalign{\vskip2pt}
+ |$x^2$|&x^2\cr
+\endmathdemo
+\enddemo
+
+\thisverbatim{\catcode`\|=12 }
+\begindemo
+%TeXbook 139
+\begindisplaymathdemo
+ |$$x+y^2\over k+1$$|&
+ x+y^2\over k+1\cr
+ \noalign{\vskip2pt}
+ |$${x+y^2\over k}+1$$|&
+ {x+y^2\over k}+1\cr
+\endmathdemo
+!yields
+\begindisplaymathdemo
+ |$$x+y^2\over k+1$$|&
+ x+y^2\over k+1\cr
+ \noalign{\vskip2pt}
+ |$${x+y^2\over k}+1$$|&
+ {x+y^2\over k}+1\cr
+ \noalign{\vskip-1pt}
+\endmathdemo
+\enddemo
+Remark. Note that we have to supply the input and the output,
+due the \TeX's rigidness of the category codes once assigned.
+
+\blueexample Poor man's blackboard bold and some special symbols
+
+^^{blackboard bold}
+Now and then other symbols than those provided in the font tables
+of Appendix~F of \TB{} are needed.\ftn{Generally, non-standard fonts are
+ already available somewhere. For math consult AMS.}
+These can be constructed approximately.
+
+{\gutter4em
+\def\boxit#1{\vbox{\hrule\hbox{\vrule
+ #1\vrule}\hrule}}
+\begindemo
+$$\halign{#\hfil\quad&
+ \hfil#\hfil\cr
+ natural numbers &$\IN$ \cr
+ integers &$\Z$ \cr
+ rational numbers &$\Q$ \cr
+ reel numbers &$\R$ \cr
+ and complex numbers&$\C$ \cr
+ next to\cr
+ greater or less &$\gtrless$\cr
+ external tensor product&
+ $\boxtimes$\cr}$$
+!yields
+$$\def\IN{{\rm I\kern-.5ex N}}
+\halign{#\hfil\quad&\hfil#\hfil\cr
+ natural numbers &$\IN$ \cr
+ integers &$\Z$ \cr
+ rational numbers &$\Q$ \cr
+ reel numbers &$\R$ \cr
+ and complex numbers&$\C$ \cr
+ next to\cr
+ greater or less &$\gtrless$\cr
+ external tensor product&
+ $\boxtimes$\cr}$$
+\enddemo}
+\cs{IN}, \cs{Z}, et cetera are incorporated in \bluetex.
+\exercise On the \TeX-NL network there was a request for the pro mille
+ token. How to get it?
+\answer It is in the wasy font. A poor man's version is an open problem
+ as yet, because the lower 0 is neither 5pt, nor 6pt, and therefore
+ the symbol can't be built from \% and an appropriate sized 0.
+ A very, very poor man's version reads |\%\lower.2ex\hbox{\fiverm 0}|,
+ in fact unacceptible.
+ Building it from \cs{frac}, |\frac0/{00}|, is different from \%.
+
+\bluehead Use
+
+Many ingredients are supplied by plain.
+It is just a matter of what-and-how, what to use from the wealth offered.
+It has all to do with what the script should look like in print
+{\em within the context}.
+In the sequel some more math markup will be shown, not restricted to
+markup tags from \bluetex{}.
+A classical example is the markup for the various uses of O.
+
+Noteworthy is further that
+punctuation symbols are also used with spacing before them,
+ditto for the vertical bars and the backslash.
+The size of delimiters is dependent on the context,
+which can't be completely automated.
+The variants can be obtained via special markup, for example via
+
+\bitem ^{coercion macro}s
+ (to guide \TeX{} with respect to spacing before and after,
+ for example via \cs{mathdelimiter},
+ or to positioning of embellishments below and on top,
+ for example via \cs{mathop})
+\bitem the use of the ^{empty formula}, $\{\}$,
+ to coerce binary behaviour of the operator
+\bitem macros to impose the size of delimiters
+ (\cs{biggl} et cetera)
+\bitem special control sequences
+ (like \cs{colon}).
+\smallbreak
+
+\bluesubhead Plain's display maths
+
+Most displays belong to one of the categories given below.
+
+\blueexample A labeled formula in display
+
+Spaces are neglected in math mode. ^^{formula,\ labeled}
+The kern |\,| is needed to coerce the correct spacing.
+\begindemo
+$$\sin2x=2\sin x\,\cos x
+ \eqno({\rm TB186})$$
+!yields
+$$\sin2x=2\sin x\,\cos x
+ \eqno({\rm TB186})$$
+\enddemo
+
+\blueexample Formula hyphenation; shifting of lines
+
+A hyphenated formula via \cs{displaylines}. ^^{formula,\ hyphenation}
+With the use of \cs{hfill} we can shift lines to the
+left or right.
+\begindemo
+$$\displaylines{F(z)=
+a_0+{a_1\over z}+{a_2\over z^2}
+ +\cdots+{a_{n-1}\over z^{n-1}}
+ +R_n(z),\hfill\cr
+\hfill n=0,1,2,\dots\,,\cr
+F(z)\sim\sum_{n=0}^\infty
+ a_nz^{-n},\quad z\to\infty
+ \hfill\llap{(TB ex19.16)}}$$
+!yields
+$$\displaylines{F(z)=
+a_0+{a_1\over z}+{a_2\over z^2}
+ +\cdots+{a_{n-1}\over z^{n-1}}
+ +R_n(z),\hfill\cr
+\hfill n=0,1,2,\dots\,,\cr
+F(z)\sim\sum_{n=0}^\infty
+ a_nz^{-n},\quad z\to\infty
+ \hfill\llap{(TB ex19.16)}}$$
+\enddemo
+
+\blueexample Alignment and centered labeling
+
+\begindemo
+$$\eqalign{\cos2x
+ &=2\cos^2x-1\cr
+ &=\cos^2x-\sin^2x}
+ \eqno({\rm TB193})$$
+!yields
+$$\eqalign{\cos2x
+ &=2\cos^2x-1\cr
+ &=\cos^2x-\sin^2x}
+ \eqno({\rm TB193})$$
+\enddemo
+
+\blueexample Alignment and labels per line
+
+\begindemo
+$$\eqalignno{\cosh2x
+ &=2\cosh^2x-1&({\rm TB192})\cr
+ &=\cosh^2x+\sinh^2x}$$
+!yields
+$$\eqalignno{\cosh2x
+ &=2\cosh^2x-1&({\rm TB192})\cr
+ &=\cosh^2x+\sinh^2x}$$
+\enddemo
+
+Remark. %In not too narrow columns the last formulas
+ %are both centered.
+If one wants \cs{eqalignno} to behave like
+\cs{displaylines}\Dash that is, left-justified\Dash
+then modify in \cs{eqalignno} the first
+\cs{tabskip}=\cs{centering} assignation into
+\cs{tabskip}= \cs{z@skip}.
+
+\blueexample Subscripts
+
+The depth of a ^{subscript} depends on whether there is
+a superscript. With a superscript a subscript sinks a little.
+In order to obtain uniformly placed subscripts
+the solution is to adjust the following font dimension
+parameters, see \TB{} {\oldstyle179}.
+\begindemo
+\fontdimen16\textfont2=2.7pt
+\fontdimen17\textfont2=2.7pt
+$$X_1+Y_1^2=1$$
+!yields
+\fontdimen16\textfont2=2.7pt
+\fontdimen17\textfont2=2.7pt
+$$X_1+Y_1^2=1$$
+\enddemo
+
+\thissubhead{\runintrue}
+\bluesubhead A snapshot of examples\par borrowed from \TB,
+to illustrate the need for extra markup.
+\TB{} chapters {\oldstyle16}\dash{\oldstyle19} contain many examples,
+well-ordered and appropriately explained.
+
+\blueexample Dots and the comma after
+
+^^{dots and the comma after}
+\begindemo
+$${\bf S^{\rm-1}TS=dg}(\lambda_1,
+ \ldots\,,\lambda_n)=\bf\Lambda$$
+!yields
+$${\bf S^{\rm-1}TS=dg}(\lambda_1,
+ \ldots\,,\lambda_n)=\bf\Lambda$$
+\enddemo
+
+\blueexample Summation with limits
+
+\begindemo
+$$\sum_{k=1}^\infty{1\over2^k}=1$$
+!yields
+$$\sum_{k=1}^\infty{1\over2^k}=1$$
+\enddemo
+\exercise In line we usually have subscripts and superscripts.
+ How can we get those?
+\answer Automatically! \TB{} 144: ` A displayed sum usually occurs
+ with `limits,' i.e., with subformulas that are to appear above
+ and below it. \dots\thinspace According to the normal conventions
+ of mathematical typesetting, \TeX{} will change this to
+ `$\sum_{k=1}^\infty{1\over2^k}=1$' (i.e., without limits) if it
+ occurs in text style rather than in displaystyle.' Explicit control
+ is possible via the control sequences \cs{limits}, respectively
+ \cs{nolimits}.
+
+%end answer
+
+\blueexample Overlining; accents
+
+If there is an example with various markup possibilities, this is the one,
+although the various O-s comes close. ^^{overlining}^^{accents in math}
+\begindemo
+$$\bar z,\ \overline z,\
+\bar P,\ \overline P,\
+\bar h,\ \hbar,\
+\overline{AB}$$
+!yields
+$$\bar z,\ \overline z,\
+\bar P,\ \overline P,\
+\bar h,\ \hbar,\
+\overline{AB}$$
+\enddemo
+
+\blueexample Square roots
+
+\begindemo
+$$\sqrt{1+\sqrt{1+\sqrt{1+x}}}$$
+!yields
+$$\sqrt{1+\sqrt{1+\sqrt{1+x}}}$$
+\enddemo
+
+\blueexample Roman texts in math, \TB~{\oldstyle163}; accents
+
+^^{roman texts in math}
+\begindemo
+$${f(x+\Delta x)-f(x)\over
+ \Delta x}\to f'(x)\quad
+ {\rm as}\quad\Delta x\to0$$
+!yields
+$${f(x+\Delta x)-f(x)\over
+ \Delta x}\to f'(x)\quad
+ {\rm as}\quad\Delta x\to0$$
+\enddemo
+Remark. \TeX{} uses special conventions for accents in formulas, so the
+accents in ordinary text and the ^{accents in math} have different markup,
+\TB~{\oldstyle135}.
+
+
+\blueexample Kerning; positive and negative
+
+^^{kerning; positive and negative}
+\thisverbatim{\catcode`\!=12
+ \catcode`\~=0 }
+\begindemo
+$$ \int\!f(x)\,dx, \quad
+ \Gamma_{\!2}+\Delta^{\!2},\quad
+ \sum^\infty_{n=-\infty}\!
+ \!\!\cos nt$$
+~yields
+$$ \int\!f(x)\,dx, \quad
+ \Gamma_{\!2}+\Delta^{\!2}, \quad
+\sum^\infty_{n=-\infty}\!\!\!\cos nt$$
+\enddemo
+
+\blueexample Empty formula and subscripting
+
+^^{empty formula and subscripting}
+\begindemo
+(\lambda)_2\,{}_2F_1
+!yields
+$$(\lambda)_2\,{}_2F_1$$
+\enddemo
+
+\blueexample Math operator
+
+^^{math\ operator}
+\begindemo
+$$\mathop{\hbox{\rm Res}}_
+ {s=e^{i\pi}}f(s)=-e^{i\pi z}$$
+!yields
+$$\mathop{\hbox{\rm Res}}_
+ {s=e^{i\pi}}f(s)=-e^{i\pi z}$$
+\enddemo
+
+\blueexample Colon markup; punctuation vs.\ operator
+
+^^{colon markup}
+\begindemo
+$$f\colon A\to B,\quad \{x:x>5\}$$
+!yields
+$$f\colon A\to B,\quad \{x:x>5\}$$
+\enddemo
+
+\blueexample Context-dependent size
+
+\begindemo
+$$\bigl\!vrt\,\alpha(\sqrt
+ {\mathstrut a}+\sqrt
+ {\mathstrut b}\,)\,
+ \bigr\!vrt
+\leq!vrt\alpha!vrt\,
+ \bigl\!vrt\sqrt
+ {\mathstrut a}+\sqrt
+ {\mathstrut b}\,
+ \bigr\!vrt$$
+!yields
+$$\bigl\Vert\,\alpha(\sqrt{\mathstrut a}+
+ \sqrt{\mathstrut b}\,)\,\bigr\Vert
+ \leq\vert\alpha\vert\,
+ \bigl\Vert\sqrt{\mathstrut a}+
+ \sqrt{\mathstrut b}\,\bigr\Vert$$
+\enddemo
+It is tempting to insert a multiplication dot. Don't!
+
+\blueexample Vertical bars, \TB{} {\oldstyle146}, {\oldstyle147},
+ ex{\oldstyle18}.{\oldstyle21}
+
+\begindemo
+$$\big\{\,x^3\bigm\vert h(x)\in
+ \{-1,0,+1\}\,\bigr\}$$
+!yields
+$$\bigl\{\,x^3\,\bigm\vert\,h(x)\in
+ \{-1,0,+1\}\,\bigr\}$$
+\enddemo
+
+\blueexample Halves variety \TB{} ex{\oldstyle11}.{\oldstyle6}, ex{\oldstyle19}.{\oldstyle2}
+
+Essential is the use of \cs{textstyle}.
+\begindemo
+$$D^\lambda_0(z)=
+ 4a_\lambda\, z\,{}_2F_1(%
+ \textstyle
+ \lambda+{1\over2},{1\over2};
+ {3\over2};z)$$
+%Typographer's 1/2
+Typographer's $\fracdek1/2$,
+(recipes), which works better
+than a mathematician's $1\over2$
+!yields
+$$D^\lambda_0(z)=
+4a_\lambda\, z\,{}_2F_1(\textstyle\lambda+{1\over2},{1\over2};
+{3\over2};z)$$
+Typographer's $\fracdek1/2$,
+(recipes), which works better
+than a mathematician's $1\over2$
+\enddemo
+
+\blueexample Under and overbraces
+
+Subtle use of fonts, and \cs{mathstrut} to enforce size.
+For under and over parentheses see TTN 3.4. ^^{underbraces}^^{overbraces}
+\begindemo
+$$\{\underbrace{\overbrace
+ {\mathstrut a,\ldots,a}^
+ {k\;a\mathchar`'\rm s},
+ \overbrace{\mathstrut b,\ldots
+ ,b}^{l\;b\mathchar`'\rm s}}
+ _{k+l\rm\;elements}\}$$
+!yields
+$$\{\underbrace{\overbrace{\mathstrut
+ a, \ldots,a}^{k\;a\mathchar`'\rm s},
+ \overbrace{\mathstrut b,\ldots,b}
+ ^{l\;b\mathchar`'\rm s}}
+ _{k+l\rm\;elements}\}$$
+\enddemo
+
+\blueexample Diagonal dots, coercions, \TB{} ex{\oldstyle18}.{\oldstyle45}
+
+^^{diagonal dots}
+\begindemo
+$$2\uparrow\uparrow k
+ \mathrel{\mathop=^{\rm def}}
+ 2^{2^{2^{\cdot^{\cdot^
+ {\cdot^2}}}}}\vbox
+ {\hbox{$\Big\}\scriptstyle k$}
+ \kern0pt}$$
+!yields
+$$2\uparrow\uparrow k\mathrel{\mathop=
+ ^{\rm def}}
+ 2^{2^{2^{\cdot^{\cdot^{\cdot^2}}}}}
+ \vbox{\hbox{$\Big\}\scriptstyle k$}
+ \kern0pt}$$
+\enddemo
+
+\exercise What is the function of the \cs{kern}0pt?
+\answer To set the curly brace on the baseline.
+
+\exercise Can the \cs{cdot} be replaced by just a period?
+\answer It looks like it. Used within the picture environment
+ I stumbled on lack of scaling invariance for the latter case?!?
+ As far as I see it now the \cs{cdot} yields nicer result anyway.
+ Because of the explicit \cs{Big} the above markup is not
+ scaling invariant.
+
+\blueexample Undoing mathsurround space
+
+\begindemo
+$2{\times}3$-matrix
+!yields
+\hfil$2{\times}3$-matrix
+\enddemo
+
+\blueexample All those O-s
+
+\begindemo
+$\emptyset$, (the empty set)
+$f\circ g\colon
+ x\mapsto f\bigl(g(x)\bigr)$,
+ (composition), and
+ order symbols
+$o(h^2)$,
+$O(h^2)$.
+!yields
+\par $\emptyset$, {(the empty set)},
+\par $f\circ g\colon x\mapsto f\bigl(g(x)\bigr)$
+(composition),
+\par and the order symbols $o(h^2)$ and $O(h^2)$
+\enddemo
+
+\blueexample Set difference vs.\ cosets
+
+^^{set difference}^^{cosets}
+\begindemo
+$A\setminus A=\emptyset,
+ \hbox{and the cosets of $G$
+ by $H$:\ }G\backslash H$
+!yields
+$A\setminus A=\emptyset,
+\hbox{and the cosets of $G$ by $H$:\ }
+ G\backslash H$
+\enddemo
+
+\blueexample The Cardano solution to third-order equation
+
+\begindemo
+%x^3+px=q, p,q\ge0
+$$\root3\of{\sqrt{p^3/27-q^2/4}+
+ q/2}-\root3\of{\sqrt{p^3/27+
+ q^2/4}-q/2}$$
+!yields
+$$\root3\of{\sqrt{p^3/27-q^2/4}+q/2}-
+ \root3\of{\sqrt{p^3/27+q^2/4}-q/2}$$
+\enddemo
+
+\blueexample Derivatives
+
+The problem is the three dotted derivative, ^^{derivatives}
+\TB~{\oldstyle136}.
+\begindemo
+$$\dot y\,\ddot y\,
+ \skew3\dot{\ddot y}\quad
+ y'\,y''\,y''' \quad
+\partial_xy\,\partial_x^2y\,
+\partial_x^3y$$
+!yields
+$$\dot y\,\ddot y\,
+ \dot{\ddot y\kern2pt}\quad
+ y'\,y''\,y''' \quad
+\partial_xy\,\partial_x^2y\,
+\partial_x^3y$$
+\enddemo
+
+\blueexample Bessel equation
+
+^^{Bessel equation}
+\begindemo
+$$z^2w''+zw'+(z^2-\nu^2)w=0$$
+solutions:
+$J_{\pm\nu}(z)$,
+$Y_{\pm\nu}(z)$,
+$H_\nu^{(1)}(z)$,
+$H_\nu^{(2)}(z)$
+!yields
+$$z^2w''+zw'+(z^2-\nu^2)w=0$$
+solutions:
+$J_{\pm\nu}(z)$,
+$Y_{\pm\nu}(z)$,
+$H_\nu^{(1)}(z)$,
+$H_\nu^{(2)}(z)$
+\enddemo
+
+\blueexample Primed summation symbols and split formula
+
+Subtle use of the prime and the right font.
+Nice is the nested use of the coercions \cs{mathop} and
+\cs{mathrel}. A minor detail is to preserve the dyadic
+character of the + in the last term. \cs{acclap} is
+incorporated in \bluetex. See \TB{} ex{\oldstyle18}.{\oldstyle44}.
+\begindemo
+$$\displaylines{
+ \mathop{{\sum}\acclap'}_{k=0}^n
+ a_kT_k(x)
+ \mathrel{\mathop=^{\rm def}}
+ .5\kern1pt a_0+a_1 x+a_2T_2(x)+
+ \cdots \hss\cr
+ \hfill{}+a_nT_n(x)}$$
+!yields
+$$\displaylines{
+ \mathop{{\sum}\acclap'}_{k=0}^n
+ a_kT_k(x)\mathrel{\mathop=^{\rm def}}
+ .5\kern1pt a_0+a_1 x+a_2T_2(x)+\cdots
+ \hss\cr
+ \hfill{}+a_nT_n(x)}$$
+\enddemo
+\exercise How can we prevent the line distance from growing larger
+ than the regular value?
+\answer Give the summation symbol depth 0.
+
+\blueexample Hypergeometric function
+
+^^{hypergeometric function}
+Subtle subscripting, size of parentheses, and positioning of arguments.
+\begindemo
+$$M_n(z)={}_{n+1}F_n\Bigl({k+a_0,
+ \atop\phantom{kc_1}}
+ {k+a_1,\dots,k+a_n
+ \atop k+c_1,\dots,k+c_n};z\Bigr)
+$$
+!yields
+$$M_n(z)={}_{n+1}F_n\Bigl({k+a_0,
+ \atop\phantom{kc_1}}
+ {k+a_1,\dots,k+a_n
+ \atop k+c_1,\dots,k+c_n};z\Bigr)
+$$
+\enddemo
+\exercise Why has the \cs{phantom} argument |kc_1|?
+\answer It could have been anything representative for the lower part.
+ With the k and the subscript in the \cs{phantom} we are sure
+ that the vertical positioning will be OK.
+
+%end answer
+\blueexample From \TB{} {\oldstyle177}, (p)matrix as formula part. %
+ proclaim is used too
+
+\begindemo
+\proclaim Definition. $x$ is called
+an eigenvector with
+eigenvalue $\lambda$ of the matrix
+$$A=\pmatrix{
+ a_{11}&a_{12}&\ldots&a_{1n}\cr
+ a_{21}&a_{22}&\ldots&a_{2n}\cr
+ \vdots&\vdots&\ddots&\vdots\cr
+ a_{n1}&a_{n2}&\ldots&a_{nn}\cr}$$
+if $Ax=\lambda x$.
+\par
+!yields
+\proclaim Definition. $x$ is called
+an eigenvector with
+eigenvalue $\lambda$
+of the matrix
+$$A=\pmatrix{
+ a_{11}&a_{12}&\ldots&a_{1n}\cr
+ a_{21}&a_{22}&\ldots&a_{2n}\cr
+ \vdots&\vdots&\ddots&\vdots\cr
+ a_{n1}&a_{n2}&\ldots&a_{nn}\cr}$$
+if $Ax=\lambda x$.
+
+\enddemo%blank line is necessary
+
+\blueexample Split equation and context-sized delimiters
+
+\begindemo
+From Swanson (1986, Section 3.3
+ Math in Display)
+Because it is a large formula
+I used \displaylines.
+For the integral we need \nolimits
+to inactivate the default placement
+of limits.
+Furthermore, there is subtle use of
+subscripting and delimiters of
+varying sizes.
+Finally the shifting of parts
+has to handled corrrectly.
+See the script for the details.
+!yields
+$$\displaylines{
+ \int\nolimits_U\delta(I)\mu(I)
+ \leq{}\hfill\cr
+ \quad{}\sum_{{\cal D}}
+ \sum_{{\cal D}_{I'}}
+ \biggl[\int\nolimits_J
+ \alpha(J')\mu(J')-\alpha(J)\mu(J)
+ \hfill\cr
+ \hfill {}-\int\nolimits_J
+ [\{s(\alpha\eta)(J')\}
+ /\eta(J')]\mu(J')\biggr]\cr
+ \quad{}+\biggl[
+ \sum_{{\cal D}}
+ \sum_{{\cal D}_{I'}}
+ |\alpha(J)-[\{s(\alpha\eta)(J)\}
+ /\eta(J)]|\mu(J)\biggr]\hfill\cr
+ \hfill
+ {}\times\biggl[
+ \sum_{{\cal D}}
+ \sum_{{\cal D}_{I'}}
+ |\alpha(J)-[\{s(\alpha\eta)(J)\}
+ /\eta(J)]|\eta(J)\biggr] \cr} $$
+\enddemo
+
+\blueexample Rhombus scheme
+
+^^{rhombus\ scheme}
+\begindemo
+The idea is to align vertically.
+Pseudo markup reads
+\setbox\ru={</ line>}
+\setbox\rl={<\ line>}
+$$\halign{<template>\cr
+1st & &e...\cr
+ &\ru& &\rl& \cr
+q...& & & &q...\cr
+ &\rl& &\ru& \cr
+ & &e...&\omit...
+ \hidewidth\cr}$$
+For the details consult the script.
+!yields
+{\hfuzz=30pt
+\newbox\ru %
+\newbox\rl %
+\setbox\ru=\hbox{\unitlength=1ex
+ \xdim{4}\ydim{2}
+ \beginpicture
+ \put(0,0){\line(2,1){4}}
+ \endpicture}
+%\diagline . 4ex wd +2ex ht\relax}%
+\setbox\rl=\hbox{\unitlength=1ex
+ \xdim{4}\ydim{2}
+ \beginpicture
+ \put(0,2){\line(2,-1){4}}
+ \endpicture}
+%\diagline . 4ex wd -2ex ht\relax}%
+$$\quad\vbox{\offinterlineskip
+\halign to\displaywidth
+{\tabskip=0pt \hfil$#$%left element
+&\hfil$\vcenter{#}$\hfil%left lines
+&\hfil$#$\hfil %middle elements
+&\hfil$\vcenter{#}$\hfil%right lines
+&$#$\hfil %right elements
+\tabskip=\centering\cr %end template
+1^{st}\/{\rm RS}\hfill
+ & &e^{(s)}_k&& \cr
+&\copy\ru& &\copy\rl& \cr
+q^{(s+1)}_k&&&&q^{(s)}_{k+1}\cr
+&\copy\rl& &\copy\ru& \cr
+& &e^{(s+1)}_k
+ &\omit$={q^{(s)}_{k+1}\over q^{(s
++1)}_k}\,e^{(s)}_k$\hfil\hidewidth\cr
+\noalign{\vskip1ex}
+2^{nd}\/{\rm RS}\hfill
+ & &q^{(s)}_k&& \cr
+&\copy\ru& &\copy\rl& \cr
+e^{(s+1)}_{k+1}&&&&e^{(s)}_k\cr
+&\copy\rl& &\copy\ru& \cr
+& &q^{(s+1)}_k
+ &\omit$=q^{(s)}_k+(e^{(s)}_k-
+ e^{(s+1)}_{k+1})$\hfil\hidewidth
+ \cr}%end halign
+}% end vbox element
+$$}
+\enddemo
+
+\blueexample Commutative diagram, confer \TB{} ex{\oldstyle18}.{\oldstyle46}
+
+Nice use of two-sided \cs{hidewidth}, ^^{commutative diagram}
+and the subtle \cs{strut} to place the superscript of {$\cal F$}.
+There is no strict alignment. The elements at the nodes overflow
+into the space of the arrows. As a consequence we need arrows of
+various lengths.
+\begindemo
+\let\normalbaselines
+ \adaptedbaselines
+$$\matrix{
+ f&\lmapright\otimes&a_f\cr
+ \mapdown{{\cal F}}&&\mapup{%
+ {\cal F}\strut^{-}}\cr
+ \hidewidth{\cal F}(f)\hidewidth
+ &\mapright\times\hfil&
+ \hidewidth\bigl({\cal F}(f)
+ \bigr)^2\hidewidth\cr}$$
+!yields
+\let\normalbaselines\adaptedbaselines
+$$%Diagram
+\matrix{f&\lmapright\otimes&a_f\cr
+ \mapdown{{\cal F}}&&\mapup{%
+ {\cal F}\strut^{-}}\cr
+ \hidewidth{\cal F}(f)\hidewidth
+ &\mapright\times\hfil&
+ \hidewidth\bigl({\cal F}(f)
+ \bigr)^2\hidewidth\cr}$$
+\enddemo
+
+\blueexample Partitioning
+
+^^{partitioning}
+\begindemo
+$$\def\data{$I_{n-r}$\cs 0 \rs
+ 0\cs $I-2v_rv_r^T$}
+P_r=\left(\vcenter{\ruled
+ \btable\data}\right)$$
+!yields
+$$\def\lft{\hfil$}\def\rgt{$\hfil}
+\def\data{I_{n-r}\cs 0 \rs
+ 0\cs I-2v_rv_r^T}
+P_r=\left(\vcenter{\ruled
+ \btable\data}\right)$$
+\enddemo
+\exercise How can we avoid \$-s in the markup of the data?
+\answer Define \cs{lft} and \cs{rgt} equal to \$ with
+ \cs{hfil} added left, respectively right, for centering.
+
+\exercise How can we construct partitioned matrices in general?
+\answer Make use of nested tables. Consider the partitioned matrix,
+ a \cs{ruled}\cs{btable}, to be built from blocks
+ with each block a non-ruled matrix.
+
+%end answer
+
+\blueexample Continued fractions with alignment on =, and interruption
+
+^^{continued fraction}
+\begindemo
+Many details come together in
+this markup. Not in the least
+the alignment on = where one is
+an =-def. Also the space
+saving variants, borrowed from
+literature are relevant.
+The special `\over'-line is a
+poor man's use of \atop and
+\over, because \over is a
+primitive.
+Peruse the script.
+!yields
+\def\cfsym{\mathop{\grkop \Phi}}
+$$\eqalignno{
+1+\cfsym_{k=1}^n{a_k\over b_k}
+&{}\buildrel{\rm def}\over=
+ 1+{a_1\over\displaystyle b_1+
+ {\strut a_2\over\strut
+ \vrule height3ex width0pt\relax
+ \displaystyle b_2 +
+ \lower2.0ex\hbox{$\ddots\,
+ \lower1.25ex\hbox{$+
+ {\displaystyle a_{n-1}\over
+ \displaystyle b_{n-1}+
+ {\strut a_n\over
+ \displaystyle b_n}}$}
+ $}
+ }
+ }\cr
+\noalign{%\noindent %not necessary
+with (space saving)
+ variant notations}
+&{}\buildrel{\rm\phantom{def}}\over=
+1+\cf{a_1}{b_1}+\cf{a_2}{b_2}+\cdots+\cf{a_n}{b_n}\cr
+%
+&{}\buildrel{\rm\phantom{def}}\over=
+1+
+{a_1\over\textstyle\strut
+ \vrule height2.5ex width0pt
+ b_1\,+\,}
+{a_2\over\textstyle\strut
+ \vrule height2.5ex width0pt
+ b_2\,+\,}
+ \cdots
+{a_n\over\textstyle\strut
+ \vrule height2.5ex width0pt
+ b_n}
+\cr}%end\eqalignno
+$$
+\enddemo
+\exercise How can we replace the division line by $\cf{}{}$ \ ?
+\answer This is an open problem. If you have an elegant solution,
+ let me know.
+
+%end answer
+\blueexample Context sensitivity
+
+Certain accents can grow a little with what has to be accented, \TB~{\oldstyle136}.
+^^{context sensitivity}^^{accents in math}
+\begindemo
+$$\widehat{xy},
+ \widetilde{xyz}$$
+!yields
+$$\widehat{xy},
+ \widetilde{xyz}$$
+\enddemo
+
+\blueexample Matrix equation
+
+^^{matrix equation}
+\begindemo
+$$\displaylines{\indent
+\bordermatrix{
+ & &\rm A & \cr
+ &\times&\times&\times\cr
+ &\times&\times&\times\cr
+ &\times&\times&\times}
+\bordermatrix{
+ & &\rm N & \cr
+ &1& & \cr
+ &0&1 & \cr
+ &0&\times&1}
+\hfill\cr\hfill=
+\bordermatrix{& &\rm N & \cr
+ &1& & \cr
+ &0&1 & \cr
+ &0&\times&1}
+\bordermatrix{
+ & &\rm H & \cr
+ &\times&\times&\times\cr
+ &\times&\times&\times\cr
+ &0 &\times&\times}
+}$$
+!yields
+$$\displaylines{\indent
+\bordermatrix{& &\rm A & \cr
+ &\times&\times&\times\cr
+ &\times&\times&\times\cr
+ &\times&\times&\times\cr}
+\bordermatrix{& &\rm N & \cr
+ &1& & \cr
+ &0&1 & \cr
+ &0&\times&1\cr}\hfill\cr
+\hfill=
+\bordermatrix{& &\rm N & \cr
+ &1& & \cr
+ &0&1 & \cr
+ &0&\times&1\cr}
+\bordermatrix{& &\rm H & \cr
+ &\times&\times&\times\cr
+ &\times&\times&\times\cr
+ &0 &\times&\times\cr}
+}$$
+\enddemo
+
+
+\blueexample Braces and matrices
+
+^^{braces and matrices}
+\begindemo
+This is a complex problem, with a lot
+of fine-tuning. However, it is
+possible to systemize much.
+The approach is to look at it as
+a bordered table with a
+parenthesized matrix as data.
+The handling of the row stub and
+the header are separated from
+the data (the pmatrix).
+The pseudo code reads as follows.
+\setbox1=\hbox{$\pmatrix{<data>}$}
+Define header and row stub list, and
+switch off defaults of btable,
+especially the separators.
+Finally invoke
+$$\btable{$\vcenter{\copy1}$}$$.
+Alignment left braces courtesy
+Alan Jeffrey communicated by
+J\"org Knappen.
+For the details see the script.
+!yields
+\def\fatlbrace{\delimiter"4000338 }
+%Set the block
+\setbox1=\hbox{$\pmatrix{%
+\times&\times&\times&\times&\times&\times&\times\cr
+0 &\times&\times&\times&\times&\times&\times\cr
+0 &0 &\times&\times&\times&\times&\times\cr
+0 &0 &0 &\times&\times&\times&\times\cr
+0 &0 &0 &0 &\times&\times&\times\cr
+0 &0 &0 &0 &\times&\times&\times\cr
+0 &0 &0 &0 &\times&\times&\times}$}
+%Define header and row stub list (each one element)
+\def\header{\hbox to\wd1{\hfil
+$\overbrace{\vrule height0pt width.4\wd1 depth0pt}^p$\hfil
+$\overbrace{\vrule height0pt width.3\wd1 depth0pt}^{n-p}$\hfil}}
+\tvsize=\ht1\advance\tvsize\dp1
+\def\rowstblst{{$\vcenter to\tvsize{\vss
+ \hbox{${\scriptstyle\phantom{n{-}}p}
+ \left\fatlbrace\vrule height.55\ht1 width0pt depth 0pt\right.$}\vss
+ \hbox{${\scriptstyle n{-}p}
+ \left\fatlbrace\vrule height.15\ht1 width0pt depth 0pt\right.$}\vss}$}}
+%
+\def\data{$\vcenter{\copy1}$}
+%Switch off defaults in btable
+\let\rowstbsep\relax%kind of row stub separator
+\let\headersep\relax%kind of header separator
+\let\colsepsurround\relax%space around column separator
+\def\hs{\cr\nxtrs}%function of header separator: yield next row stub
+$$\vcenter{\btable\data}$$
+\enddemo
+
+\exercise Add partitioning to the braces and matrices example.
+\answer In pic.dat a trial-and-error solution is included.
+ Not elegant. Improve, enjoy, and let me know!
+
+\endinput
+\bye \ No newline at end of file
diff --git a/info/laan/pwt/pwt.obs b/info/laan/pwt/pwt.obs
new file mode 100644
index 0000000000..a8cd565fc9
--- /dev/null
+++ b/info/laan/pwt/pwt.obs
@@ -0,0 +1,5 @@
+\report
+\bluechapter Obsolete Database
+
+To be filled in.
+\endinput \ No newline at end of file
diff --git a/info/laan/pwt/pwt.ref b/info/laan/pwt/pwt.ref
new file mode 100644
index 0000000000..bbc786cc66
--- /dev/null
+++ b/info/laan/pwt/pwt.ref
@@ -0,0 +1,292 @@
+\input blue.tex
+\loadindexmacros
+\report
+\bluechapter Coping with References
+
+\beginsummary
+\bluetex{} makes use of the database of references
+lit.dat. The references have to be specified by name.
+Prior to the formatting of the script the specified
+references are set and kept in a box.
+This box is pasted up on command.
+The layout of the references has been inspired upon AMS
+and can be customized at a lower level.
+\endsummary
+
+Most if not all of your references should be part of your\ftn{And
+ hopefully of your publisher as well.}
+database of literature.
+This starting point makes things simpler and definitely
+facilitates reuse.
+
+\bluetex{} makes use of lit.dat, a database of references,
+organized as a list. ^^{database,\ lit.dat}
+The names of the list elements\Dash primary keys in database jargon\Dash
+identify the entries.
+Each list entry consists of a
+list element tag,
+a name, and the
+(marked up) bibliography item proper.
+The structure of the marked up of the bibliography item proper is modest and
+prompted by my use:
+ author name, year of publication, and
+ rest part,
+next to some adopted conventions.
+In the field I'm working I know the publication by heart, once
+I know the name of the author(s) and the year of publication.
+For my own use I don't need further tagging.
+
+\bluehead Using references
+
+With \bluetex{} the use comes down to specifying the names of
+the references in the preliminary part of the script, via
+^^|\beginreferences|%^^|\endreferences|^^|\references|
+\begincenterblock
+\cs{beginreferences}
+$\cs{}\langle\,name_1\rangle\dots%
+ \cs{}\langle\,name_n\rangle\qquad%
+ \hbox{or}\qquad%
+ \cs{references}\{\cs{}\langle\,name_1\rangle\dots%
+ \cs{}\langle\,name_n\rangle\}$
+\cs{endreferences}
+\endcenterblock
+and paste up the references via ^|\pasteupreferences|,
+at your place of choice.
+\exercise What is the effect of |\references{}|?
+\answer Via this empty specification we can typeset what has
+ been supplied in \cs{thisreferences}. Agreed, a little
+ unusual.
+
+Placement within context can be handled via
+the token variables ^|\prereferences| and ^|\postreferences|.
+Default \cs{prereferences} takes care of the heading via
+\displaycenterline{|\prereferences{\head{\the\referencesname}}|.}
+The token variables ^|\thisreferences| and ^|\everyreferences|
+can be used for customization.
+
+\thissubhead{\runintrue}
+\bluesubhead Cross-referencing\par can always be done via the
+convention of |<author name(s)>| |<year>|. ^^{cross-referencing}
+This approach facilitates reading,
+at least for me, at the expense of a little more space in print
+than the system of numbers.
+The latter system is possible with \bluetex.
+Once the references have been set by \cs{references},
+each name is redefined by its sequence number.
+
+After
+$\cs{references}\{\dots\cs{}\langle\,name_n\rangle\dots\}$
+then
+$\cs{}\langle\,name_n\rangle$
+denotes the number |<n>|.
+
+\thissubhead{\runintrue}
+\bluesubhead Robustness\par is there too.
+Most likely users will now and then mistype
+a name supplied in \cs{references}.
+\bluetex{} reacts very elegantly to this.
+First, it continues, it does not stop.
+A message is provided in the log file, and as reference
+an error message is printed by |\pasteupreferences|.
+
+\bluehead Adding a reference to the database lit.dat
+
+^^{add\ a\ reference}
+The structure of the bibliography items in lit.dat is modest,
+a list of elements and each element starting with the list
+element tag, \cs{lst}, and a name. ^^{entry\ for\ lit.dat}
+\begincenterverbatim
+\lst\<name><extension>
+{<name part> (<date part>):
+ <title part>
+ <rest>
+}
+!endcenterverbatim
+This syntax leaves freedom and flexibility, although
+the essentials\Dash name, date, title\ftn{I consider it
+ important to delineate the main fields, however.}
+\Dash have prescribed positions.
+The number of authors does not matter,
+nor is it prescribed how the author names should be specified.
+That is up to you.
+The representation of the date is free too,
+leaving room for things like `in progress' or `priv. comm.'
+I don't like to prescribe structurally the title in more detail.
+The rest part is not further prescribed either,
+because of the great variety of sources---publishers, books, journal series,
+proceedings, theses, technical reports, and the like.
+At the end of the rest part I added, within parentheses,
+annotations, now and then.\ftn{There is
+ usually too much formatting in a bibliography for my taste.
+ Why discriminate between a title of a book and an article?
+ Given the context that is clear enough.
+ Especially, when for a book the ISBN (or ISSN) number is provided.
+ And why so much (superfluous) punctuation?
+ For me there should be as little punctuation as is
+ functionally needed to separate the elements within the entry.}
+
+For the name I chose to use lowercase letters only:
+the (first) name followed by the initials.
+For the |<extension>| I chose extra letter(s).
+The latter are there to tell the difference between more than one publication
+per author, and to allow insertions, when one stumbles on some
+early work of an author. As an example of an entry, I'm pleased to
+take \TB.\ftn{In practice I hardly use this one, because in
+ \cs{prereferences} I supply the note
+ `I assume \TB{} to be omni-present.'}
+
+\blueexample lit.dat entry
+
+\begincenterverbatim
+\lst\knuthded
+{Knuth D.E (1984):
+ \TB.
+ \AW. ISBN 0-201-13448-9.
+ \annotation{Soft cover edition
+ of book A in the series
+ Computers and Typesetting.}
+}
+!endcenterverbatim
+The list of references is ordered alphabetically on
+|<name><extension>|. Prepare your bibliography and insert the
+items in your personalized version of lit.dat, and that is it.
+
+\exercise How can we format the complete lit.dat database, with
+ each entry preceded with numbers enclosed in square brackets?
+\answer Recognize that the file consists of triples.
+BLUe's format provides \cs{setdatabase} for this purpose.
+That macros comes down to the following.
+\beginverbatim
+\input blue.tex \onecol
+\prenum{[\thinspace}\postnum{\thinspace]}
+\def\lst#1{\nitem}
+\input lit.dat
+\smallbreak
+\bye
+!endverbatim
+An older fifo-oriented solution reads as follows.
+\beginverbatim
+\newcount\bcnt
+\def\prt{\medskip\noindent\advance\bcnt1
+ \llap{[\number\bcnt]\quad}}
+\def\fifo#1#2#3{\ifx#1\ofif\ofif\fi
+\prt#3\fifo}
+%a blank line
+\fifo\lst\<name1>{...}
+ \lst\<name2>{...}
+ ...
+ \lst\<namen>{...}
+\ofif\relax\relax
+\bye
+!endverbatim
+Note the difference.
+
+^^{list\ of\ database}
+\exercise How can we get a list of names of the references in the database?
+\answer \bluetex{} contains a macro \cs{contentsdatabase}
+ that writes the list of names of
+ a lit, pic, or address database to the file contentslit,
+ contentspic, or contentsaddress.\\
+Let us assume that we wish the list of names in a toks
+variable \cs{namelst}. To facilitate processing of \cs{namelst}
+\cs{lst} has been inserted before each name in the list.
+\beginverbatim
+\newtoks\namelst
+\def\lst#1#2{\namelst\ea{\the\namelst\lst#1}}
+\input lit.dat
+%and to verify the contents
+\baselineskip12pt plus2pt minus1pt
+\lineskip1pt plus 1pt minus1pt
+\def\lst#1{{\tt\string#1}\endgraf}
+\the\namelst
+!endverbatim
+
+\exercise When a reference has been added to lit.dat a simple check
+ for verifying that the file can still be processed is
+ the following. What would you expect as outcome?
+
+\begincenterverbatim
+\input blue.tex
+\references\zusek
+\zusek
+\bye
+!endcenterverbatim
+\answer The number 1. Once the reference has been found,
+ it will be used, and the name will be
+ overwritten by its sequence number.
+
+%end answer
+
+\bluesubhead Check for data integrity
+
+After a reference has been added one can check whether the file can be scanned by
+\TeX{} via making a table of contents as follows.
+\begincenterverbatim
+\input blue.tex
+\contentsdatabase{lit}
+\bye
+!endcenterverbatim
+This script produces no pages of output (that is OK).
+The file contentslit will be created, though.
+If you have a file with references of your own,
+say abc.dat, provide also \cs{newwrite} \cs{tocabc}.
+
+\bluehead Customization
+
+Each entry is typeset by \cs{ls} which is activated by ^|\lsams|
+in \cs{references}.
+The default formatting has been inspired upon AMS.
+
+\bluesubhead How to provide your way of formatting?
+
+To illustrate how a user can specify his own convention
+\bluetex{} contains the template
+\begincenterverbatim
+\def\lsstraight{\let\ls\nitem}
+!endcenterverbatim
+
+\blueexample Formatting references your way
+
+Provide your variant of \cs{lsstraight} and supply
+^^{formatting\ references}
+\begincenterverbatim
+\thisreferences{\let\lsams\lsstraight}.
+!endcenterverbatim
+
+\bluehead Searching the lit.dat database by pattern
+
+^^{search\ of\ database}
+BLUe's format provides a \cs{search} macro with
+as argument a search pattern.
+The purpose is to search the database file provided in
+the toks variable \cs{searchfile},
+for this search pattern.
+The result of the search is the list of names of which
+the replacement texts contain the search pattern.
+This list of names is delivered in the toks var \cs{namelist},
+and for the time being they are also written to the log file.
+
+\blueexample Search for references of {\oldstyle1973} in lit.dat
+
+In order to justify my use of the word
+database in relation to \TeX, I provided the search macro
+to browse the databases lit.dat and address.dat.
+Below the input and result have been given of the search of lit.dat
+for the pattern {\oldstyle1973}.
+The result is contained in the toks variable
+\cs{namelst}. The names are also written to the log file
+to give you a check for whether the right names have been selected.
+
+\begindemo
+\input blue.tex
+\searchfile{lit}
+\search{1973}
+\bye
+!yields
+\cs{lst}\cs{knuthdec}
+\cs{lst}\cs{schumacherefa}
+\cs{lst}\cs{wirthna}
+\enddemo
+Remarks. A search pattern should not contain a period.
+ The search is case sensitive.
+\endinput
diff --git a/info/laan/pwt/pwt.scr b/info/laan/pwt/pwt.scr
new file mode 100644
index 0000000000..54c6366648
--- /dev/null
+++ b/info/laan/pwt/pwt.scr
@@ -0,0 +1,452 @@
+%Copyright: C.G. van der Laan, cgl@rc.service.rug.nl, 31 59462 1525
+%Started 22 November, 1994 %Version September 1995
+\input blue.tex
+%Conventions
+%-Titles of other work (also references by name to chapters) within single quotes
+%Spelling
+%-alphabetically or lexicographically
+%-appendices, contrast with prefixes, suffixes, affixes
+%-ascertain
+%-BLUe's format, BLUe script, blue.tex
+%-cross-referencing
+%-controlled (l always doubles)
+%-developed
+%-flavour, favour
+%-file name, not filename, similar type name
+%-govern
+%-macro writing
+%-mark up (verb), the markup (noun)
+%-occasionally
+%-one pass and one-pass job (similar two-part macro; in line in-line text
+% on line on-line documentation)
+%-open-ended, open-endedness
+%-page number, page size
+%-parenthesize
+%-rhombus-framed, similar pseudo-code
+%-setup (similar to markup (noun))
+%-shortcut
+%-size-switching macros (not size switching)
+%-user's guide (not user guide, nor users' guide)
+%-user-friendly
+%-uppercase letters (similar lowercase), upperright corner
+%-word processor
+
+\loadsmileys%Not necessary per se, but now these are globally available
+\loadindexmacros
+\report %Format to be selected from the fmt.dat database
+
+\bluetitle Publishing with \TeX %Cover data
+
+\bluesubtitle BLUe's Selection
+
+\bluepictures \bluemodelpic
+
+\def\coverpic{\qquad\qquad\bluemodelpic}
+%\translator{Irina Gorbunova}
+
+ %Inside cover data
+\bluekeywords Bibliography, \bluetex{},
+ citations, compatible extension, cross-referencing, customization,
+ databases, data integrity, education, fractals,
+ index, letter, manmac, mark up, math, minmal markup, pictures, no-nonsense,
+ plain \TeX, programs, publishing,
+ report, reuseable software parts,
+ software engineering, supprematism,
+ tables, table of contents, table of examples, transparencies, trees, turtle graphics,
+ verbatim.
+
+%endkeywords
+
+\bibliographydata{ISBN: \dots\par
+ Classification: \dots\par
+ Date: September {\oldstyle1995}
+}%end bibliography data
+
+\beginacknowledgements
+First of all
+ $$\hbox{Don Knuth, Thank You!}$$
+for what you gave to the world, and to me in particular.
+I enjoyed so much studying your \TeX{} works.
+I never perused a book so many times as \TB.
+
+I owe many thanks to numerous anonymous people
+who contributed to my \AllTeX{} knowledge.
+I'm very grateful to NTG for bringing out early notes in MAPS,
+and to Erik Frambach and Wietse Dol for disseminating
+BLUe's Format system on the 4All\TeX{} CD-ROM.
+With pleasure I look back at Bacho\TeX{} {\oldstyle 94}, where among
+others Bogus\l aw Jackowski stimulated me to work on a manmac user's guide.
+This emerged in BLUe's Format system and fitted well with my ideas about
+a `Publishing with you-name-it' series.
+
+The macros and styles of the \TUG, and the \AMS{} have been very inspiring.
+Of the former I borrowed the abbreviations and the approach of the OTR.
+The latter inspired me how to format references.
+I'm not aware to what extent the excellent user and installation guides of
+the AMS have influenced me. I like those for sure.
+Amy Hendrickson made me familiar with two-part macros.
+Amy's \cs{diagline} macro is part of \bluetex, although
+it is not much used by other macros, because of \LaTeX's line fonts.
+David Salomon's courseware has been a wealthy source, especially for
+macro writing.
+Phil Taylor familiarized me with sequences of \cs{expandafter}s.
+His \cs{ignorewhitespace} has been incorporated in \bluetex.
+Bernd Raichle mentioned en-passant how to look at triples of \cs{noexpand}s.
+Joseph Romanovsky stressed the importance of memory management, which resulted
+in the general database approach.
+Frans Goddijn made me appreciate the frisky \cs{oldstyle} numbers.
+My perception of compuscripts has its roots in the SGML world.
+And, of course, I learned a lot from \LaTeX.
+
+Frank Poppe, Eric Veldhuyzen, and Jos Winnink, thank you
+for proofreading and for the useful comments.
+Peter Frambach polished my use of English.\ftn{Any abuses left have to do
+ with later versions he did not see.}
+Erik Frambach, again, was of great help in the proofing phase.
+Many a suggestion with respect to the layout was prompted by him.
+Irina Gorbunova%\the\translator
+, my host when attending CyrTUG {\oldstyle93}, {\oldstyle94},
+translated the script into Russian.
+
+Last but not least thank you Ina Kooi for your friendship, support
+and patience.
+\medskip
+\rightline{\vbox{\noindent\hsize.4\hsize I'm grateful to all of you.}}
+\endacknowledgements
+
+ %Title page data (next to title&author)
+\beginabstract
+The use of BLUe's format has been documented in a user's guide,
+to be released electronically in English and in Russian.
+\par
+The functionalities provided are similar to those of \LaTeX, to mark up
+a note, an article, a set of transparencies, a report, and a letter.
+The attitude is much different though. An example of the
+latter is processing of a modest index in one pass,
+completely within \TeX, on-the-fly.
+\par
+The concept of two clusters of markup tags is introduced,
+called the outer level markup tags and the inner level markup tags.
+The former are responsible for the look-and-feel,
+and are kept to a minimum to cope with the inevitable change.
+The latter constitute the lower level issues, and are aimed at stability,
+invariance of representation and implementation, much in the spirit of
+the frozen kernel of \TeX.
+\par
+Many examples, exercises and answers have been included.
+\par
+The basic attitude has been to make \TeX{}
+simpler to use, to let it look less confusing.
+To select from the multitude of commands a handful, and to
+elucidate what we need most of the time.
+\par
+New details treated are:
+the script concept,
+the separation of outer and inner level markup,
+using databases\Dash
+ formats, tools, references, pictures, and addresses\Dash
+in a one-pass job with \TeX,
+macros to format Pascal programs,
+a verbatim suite of macros to cooperate with Any\TeX,
+selective line-numbering of verbatims,
+a compatible extension of math cross-referencing,
+some matrix icons,
+a compatible extension of \cs{equalign} with multi-alignment points,
+a simple approach to formatting of partitioned matrices,
+a refined bordered table macro with the awareness of logical
+rows and columns and attributes to control layout,
+various codings of deterministic tables,
+a new look at manmac's \cs{samplebox},
+creation of a modest index in one pass,
+design of a report format on top of \bluetex, and
+last but not least
+a uniform coding approach to start from two-part macros and
+to build one-part macros on top of those, parameterized
+by |\this<tag>|, |\every<tag>|, |\pre<tag>|, |\post<tag>|, and
+occasionally |\<tag>name|.
+
+I have built upon manmac and gkppic, and developed most of the macros myself.
+Ideas have been borrowed from the styles of TUG, AMS, from the
+proceedings of the Euro\TeX{} and TUG meetings,
+and from the articles in the bulletins of the various user groups.
+Of course, many an idea came to mind when talking to friends at the various
+\TeX{} User Group meetings.
+The markup of examples released earlier has been improved, simplified,
+or made more consistent.
+\endabstract
+ %Foreword translator data
+\beginforewordtranslator
+
+This guide is about BLUe's Format, aimed at
+formatting documents in English via plain \TeX.
+\medskip
+What do we mean by a translation?
+\medskip
+For the time being it is just a translation of the
+English into Russian, {\sl not\/} a transliteration
+of the contents.
+The latter entails that an index in Russian
+is {\sl not\/} generated on the fly.
+Another consequence is that this guide
+is {\sl not\/} about the use of Cyr\TeX.
+\medskip
+Hopefully, the future will give birth to a real
+Russian BLUe's Format project.
+\endforewordtranslator
+ %Preface page data
+\beginpreface
+\vskip2\bigskipamount
+Dear User,
+\bigskip
+It occurred to me that my detailed studies
+as published in NTG's MAPS, such as
+the BLUes series\Dash Manmac, TUGboat, AMS\Dash
+did not attract the attention it deserved, \winksmiley,
+let alone that people read it.
+They simply lack the time.
+Similarly, the BLUe's series enjoys a modest audience.
+Most \TeX ies are just busy using \LaTeX.
+Therefore, `Publishing with \TeX,' PWT for short, is not so much about
+reading, but has all to do with using.
+
+My experience in macro writing comes from
+perusing Knuth's books,
+attending Amy's and David's advanced \TeX{} classes,
+looking into the works of colleagues,
+and inevitably experimenting.
+The fundamental macro writing \TeX niques I have assimilated
+will be reported in NTG's MAPS, in
+backside of the envelope contributions,
+in what I call the Paradigm series.
+
+BLUe's format, its extensions and this user guide
+`Publishing with \TeX,' are shareware available,\ftn{I would welcome
+ \$\thinspace{\oldstyle25} from each happy user,
+ to facilitate investment in hardware to maintain the format.
+ The PWT booklet alone is worth it \smiley.
+ Of course, you will be added to my address database with filed
+ \cs{registeredbluetrue}. Do provide
+ complete affiliation, email included. Users in Russia can just send me
+ a nice mail with their affiliation for the time being.}
+and will be distributed electronically
+on diskette, via NTG's CD-ROM, or
+can be plucked from the CTAN.
+The relation between the various BLUe's articles and PWT is that the latter
+is a user's guide, while the former explain the coding too,
+are about the whys-and-hows, about insights and hindsights.
+However, remember that PWT is not an introduction to \TeX{}
+nor a treatise on macro writing.
+
+PWT has been available in February {\oldstyle 1995}, in English.
+A version in Russian is scheduled to be released
+before Euro\TeX\ {\oldstyle95}, and CyrTUG {\oldstyle95}.
+For the latter I'm dependent on my host for my various stays in Moscow,
+Irina Gorbunova%\the\translator
+, who volunteered to translate the work.
+
+My aim has been to make PWT as useful as possible,
+even for those who don't intend to use \bluetex.
+Numerous examples show how to mark up in \TeX{}
+various typographic challenges known in the computer-assisted
+information processing and dissemination world.
+The above does not imply that the PWT script can't be printed.
+No, not at all, it can, and you will be surprised, hopefully, by the
+thin booklet of {\oldstyle125} odd pages,
+which will come off your selfpublishing press, some day.
+
+I strove for a logically and physically thin system. The user's guide
+is physically thin and even thinner logically. If you are not interested
+in the math markup, just skip the chapter. Within a chapter examples
+can be skipped of course. The chapters are independent with `thin'
+interrelations. The files, especially the databases, allow you to
+load only what you need.
+
+The layout has been kept simple. The page width has been determined by my
+MAC screen. A large page length is there to reduce the number of
+pages and to prevent underfull vboxes. The primary medium is a file,
+not a book.
+
+For future releases, I intend to include `markup pearls' from readers.
+In the meantime, I'm pondering about hyperlinking the script to the
+\TeX book script, and acquainting myself with \MF{} and
+{\manual META}\-{\smc post}.
+Another challenge, but fun.
+For the time-being, a printed version of PWT,
+with the \TeX book at your elbow, or with windows open
+on each of the files needed, will hopefully ease your \TeX ing task.
+If not, let me know\dots\thinspace And for the rest
+
+\displaycenterline{let us \TeX{} with confidence}
+
+I hope that my approach to publishing with \TeX
+\Dash a result of some {\oldstyle7} years of \TeX{} use and of some
+ {\oldstyle20} years of programming numerical software\Dash
+will be beneficial to new and old \AllTeX ies alike.
+\bigskip
+\rightline{Kees van der Laan}
+\endpreface
+ %Contents Page data
+ %Because of \valign use, \contents{...}
+\let\he\quad \let\she\qquad\def\sshe{\qquad\quad}%not possible.
+\begincontents
+Preface
+Table of contents
+Introduction
+\he Understanding Knuth's markup
+\he BLUe's format
+\she The syntax
+\she Variants
+\he The Model
+\he Notations and definitions
+\he Markup conventions adopted
+\he Copyrights BLUe's format
+\separator
+Text
+\he Introduction
+\he Headings
+\he Paragraphs
+\she Parameterization
+\she Special paragraphs
+\she Customization
+\he Use of special text elements
+\she Items
+\she Centering
+\she Quotations
+\she Non-centered displays
+\she Setting text apart
+\she Pascal programs
+\she Syntax diagrams
+\she Verbatims
+\she Exercises and answers
+\she Footnotes
+\he Fonts and size switching
+\he Table of Contents
+\separator
+Mathematics
+\he What is the problem, Doc?
+\he The extras
+\he Use
+\she Plain's display maths
+\she A snapshot of examples
+\separator
+Tabular material
+\he Bordered table
+\she Model
+\she Markup tags
+\she Customization
+\he Use of btable macro
+\he Kaleidoscope
+\she Font charts
+\separator
+Pictures
+\he The roots
+\he Creating pictures
+\she Turtle Graphics
+\she \TeX's stacking of boxes
+\she Samplebox diversions
+\she Picture environment
+%
+\newcol
+%
+\sshe Line thickness
+\sshe Picture objects
+\sshe Curves
+\he Adding a picture to pic.dat
+\he Using pictures
+\he Fractals
+\separator
+Coping with References
+\he Using references
+\he Cross-referencing
+\he Adding a reference to lit.dat
+\he Customization
+\separator
+Creating an Index
+\he Use
+\he Markup of IR-s
+\she Syntax
+\she Markup
+\she Spaces
+\he Special tokens
+\she Sorting keys
+\he Ordering
+\he Typesetting the index
+\he Customization
+\she Adding tokens to be ignored
+\she Modifying ordering
+\she Enriching the index
+\she Typesetting the enriched file
+\she Processes and files
+\separator
+Customization
+\he Changing look-and-feel
+\she The page size
+\she The header and footer
+\she Section beginnings
+\he BLUe script into MAPS
+\he Other languages
+\separator
+Afterthoughts
+\separator
+Appendices
+A: Answers to the exercises
+B: Formats
+\she Use
+\she Concert
+\she Letter
+\she Report
+\she Transparencies
+C: Tools
+D: BLUe's, BLUes and Paradigms
+E: List of Examples
+F: Main Tags
+G: Obsolete database
+H: History of Changes
+I: Index
+J: Table of Contents
+\endcontents
+
+\let\backcover\pwtbackcover
+\beginscript %BLUe script proper
+%The next three have been included in
+%\report to facilitate mini-ToCs
+%\immediate\openout\ans=answers
+%\immediate\openout\toe=examples
+%\immediate\openout\toc=contents
+\input pwt.int %Introduction
+%\pasteuptoe\pasteuptoc\endscript %test probe
+\input pwt.txt %Text
+%\setupappendices\pasteupanswers
+%\sortindex\pasteupindex%\pasteuptoc%\endscript
+\input pwt.mat %Mathematics
+\input pwt.tab %Tabular material
+\input pwt.grf %Pictures
+\input pwt.ref %References
+\input pwt.ind %Index preparation
+\input pwt.cus %Customization
+\input pwt.aft %Afterthoughts
+%From now on A, B, C,...
+%And in order not to disturb the current
+%number, and its use
+\setupappendices
+\pasteupanswers
+\input pwt.fmt %B: Formats
+\input pwt.tls %C: Tools
+\input pwt.sur %D: Backgrounds
+ %E: Table of examples
+\pasteuptoe
+\input pwt.tot %F: Table of tags
+\input pwt.his %G: History of changes
+\input pwt.obs %H: Obsolete macros
+ %I: Index
+\sortindex
+\preindex\ea{\the\preindex
+ In this index \cs{end}$<tag>$s
+ have been excluded, only the \cs{begin}$<tag>$s are there.}
+\pasteupindex
+ %J: Table of contents
+\pasteuptoc
+\let\backcover\pwtbackcover
+\endscript
+
+
diff --git a/info/laan/pwt/pwt.sur b/info/laan/pwt/pwt.sur
new file mode 100644
index 0000000000..32966e8cb8
--- /dev/null
+++ b/info/laan/pwt/pwt.sur
@@ -0,0 +1,139 @@
+\input blue.tex \report \hfuzz40pt% I allow overflow
+
+\bluechapter Blues, BLUe`s \& Paradigms
+
+\beginsummary
+The BLUe's format material and accompanying articles, which explain details
+and show examples, have been listed.
+\endsummary
+
+Originally this note was sent along with \bluetex{}
+to inform a user about background and related articles.
+\TB{} is assumed to be omni-present.
+For other references consult lit.dat.
+
+\bluehead The files
+
+BLUe's format has been organized as a `kernel with modules.'
+The files are named as follows.
+{\parindent4.5\generalindent
+\item{the format} \hbox to21ex{\bf \bluetex\hss} the kernel
+\item{the databases}
+\vtop{\noindent\advance\hsize-1.1\parindent
+ \hbox to21ex{\bf fmt.dat\hss} the formats\\
+ \hbox to21ex{\bf tools.dat\hss} the macros and environments\\
+ \hbox to21ex{\bf address.dat\hss} the addresses\\
+ \hbox to21ex{\bf lit.dat\hss} the references\\
+ \hbox to21ex{\bf pic.dat\hss} the pictures\\
+ \hbox to21ex{\bf obsolete.dat\hss} obsolete macros and formats.
+}\smallskip}
+A handy auxiliary is pfile\Dash and the more general pgfile\Dash
+to print \bluetex{} with appropriate line numbers in two-column layout.
+The general macro prompts for the file name. It is suited to print
+\bluetex, tools.dat, or fmt.dat, all with the appropriate line numbers.
+
+This `Publishing with \TeX' is the user's guide.
+
+No profit may be made on it. The articles are free for personal use.
+The files are shareware.\ftn{When you are happy with it and wish to support
+ maintenance, send me \$ {\oldstyle25} to support my hardware, to maintain
+ BLUe's format system. Of course you will be added to my register.blu database.
+ Users from Russia can just send me their address, for the time being.}
+
+When the results are used a proper credit\Dash
+ be it Knuth or the authors of gkpmac,
+ or me for the composition and the fill-ins\Dash
+is the least a happy publishing user can do.
+
+\bluehead Background
+
+\begindisplay
+BLUe's Format\Dash The best of both worlds
+ &The umbrella article about \bluetex. \hidewidth\cr
+BLUe's Graphs\Dash Simplicity, aha!
+ &The gkppic macros are explained. \hidewidth\cr
+BLUe's Cross-Refs\Dash A one-pass approach
+ &One-pass cross-referencing with math.\hidewidth\cr
+BLUe's Bibliography\Dash Selective loading
+ &One-pass bibliography handling. \hidewidth\cr
+BLUe's Verbatim\Dash The selection
+ &Handling verbatims in TeX. \hidewidth\cr
+BLUe's Transparencies\Dash To finish up with
+ &The making of transparencies. \hidewidth\cr
+BLUe's Index\Dash The principle and some more
+ &The making of indexes in a one-pass job.\hidewidth\cr
+BLUe's Typesetting of PASCAL\Dash Mean and lean
+ &The formatting of PASCAL programs. \hidewidth\cr
+BLUe's Letters\Dash With love
+ &The formatting of letters. \hidewidth\cr
+BLUe's Reports\Dash Good work
+ &The formatting of reports. \hidewidth\cr
+BLUe's Format databases
+ \Dash Stay organized&The database approach explained. \hidewidth\cr
+BLUe-2-|<younameit>|
+ &Acceptance and conversion. \hidewidth\cr
+Math into BLUes &The typesetting of math via \TeX.\hidewidth\cr
+\quad I: Mourning \cr
+\quad\llap II: Sing your song \cr
+Icons via lfonts &Common matrix icons via \LaTeX's fonts.\hidewidth\cr
+Table Diversions &The typesetting of tables via \TeX. \hidewidth\cr
+Sorting in BLUe &The basics for making a simple index. \hidewidth\cr
+FIFO and LIFO sing the BLUes\Dash Got it &FIFO paradigm, fundamental. \hidewidth\cr
+Syntactic Sugar &Discusses various approaches to macros.\hidewidth\cr
+`Van tekst naar transparant'&About the life-cycle of documents,
+ {\oldstyle1984}.\hidewidth\cr
+BLUe-2-\LaTeX &Convertor Assistant, {\oldstyle1996}\cr
+%
+\noalign{\bluehead Related material\par}
+%
+Manmac BLUes &Is all about manmac, as-is. \hidewidth\cr
+\quad\Dash Or how to typeset a book via \TeX \cr
+
+AMS BLUes &Details with AMS practice, \cs{lsams} for\hidewidth\cr
+\quad\Dash Professionals at work
+ &\null\ formatting references is inspired upon AMS.\hidewidth\cr
+TUGboat BLUes &TUGboat styles. ppt.tex emerged from this\hidewidth\cr
+\quad\Dash How \TeX ies do it
+ &\null\ which is at the heart of \bluetex. \hidewidth\cr
+%
+\noalign{\medskip\noindent An overview is supplied in `What is \TeX{} and \MF{}
+ all about?' NLUUG, {\oldstyle1993}.
+ The relation with SGML is in `SGML(\TeX,\dots\thinspace),'
+ Cork {\oldstyle1990}.
+ The work of Michael Spivak has been surveyed in Spivak's \OE uvre.
+%
+ \bluehead For fun\par
+%
+ Added are the following,
+ which also show macro writing by example.\medskip}
+%
+Typesetting bridge via \TeX & \maps{91}2\hidewidth\cr
+Typesetting crosswords via \TeX& \maps{92}2\hidewidth\cr
+Tower of Hanoi, revisited & \maps{91}2\hidewidth\cr
+%
+\noalign{\bluehead The Paradigm series\par}
+%
+Paradigm: Plain's \cs{item} extended & \maps{94}2\hidewidth\cr
+Paradigm: Headache? & \maps{94}2\hidewidth\cr
+Paradigm: Two-part macros & \maps{95}1\hidewidth\cr
+Paradigm: Parameterization I \hidewidth\cr
+\phantom{Paradigm: }\Dash Options & \maps{95}1\hidewidth\cr
+Paradigm: Winds and halfwinds \hidewidth\cr
+\phantom{Paradigm: }\Dash Details matter & \maps{96}1\hidewidth\cr
+Paradigm: It's all in the game & \maps{96}1\hidewidth\cr
+Paradigm: Loops & \maps{96}2\hidewidth\cr
+Paradigm: Searching & \maps{96}2\hidewidth\cr
+Paradigm: Sorting & \maps{96}2\hidewidth\cr
+Paradigm: Naming conventions & \maps{97}?\hidewidth\cr
+Paradigm: Alignment & \maps{97}?\hidewidth\cr
+Paradigm: Eating and preserving & \maps{97}?\hidewidth\cr
+\enddisplay
+Of course all the articles run up till {\oldstyle1995}, with BLUe's format
+in plain TeX.
+
+\bluehead Availability
+
+It is disseminated on NTG's 4All\TeX{} CD-ROM (edition {\oldstyle1995}), and
+the most recent versions can be plucked from a CTAN in directory
+pub/archive/info/pwt/\dots
+\endinput \ No newline at end of file
diff --git a/info/laan/pwt/pwt.tab b/info/laan/pwt/pwt.tab
new file mode 100644
index 0000000000..43a535c135
--- /dev/null
+++ b/info/laan/pwt/pwt.tab
@@ -0,0 +1,1875 @@
+\input blue.tex \loadindexmacros \report \hfuzz15pt
+
+\bluechapter Tabular Material
+
+\beginsummary
+BLUe's format provides btable for the class of (simple) bordered tables.
+It will be shown that this model can be used to format a wide variety
+of tables.
+Difference in representation can be obtained via attributes, i.e.,
+without changing the markup.
+Customization of the macro can be done by modification of the separators
+for the caption, the columns, and the like.
+The diversity of tabular material in general has been illustrated by
+a kaleidoscope of tables borrowed from literature.
+For the latter group the markup is not necessarily restricted to
+btable or halign.
+The example of how Knuth marked up real-life tables is illustrated by
+his font charts.
+\endsummary
+
+The backbone of \bluetex's tables is |\btable|, to format a bordered table.
+Other \TeX niques for formatting tables will be dealt with too.
+The formatting of tables with simultaneous row and column spans
+is a subject for the `educated layman,' not for the faint-hearted.
+
+\bluehead Bordered table
+
+A bordered table consists of
+a caption,
+a header,
+row stubs,
+a table proper, and
+a footer, all with parameterized separators.
+Special cases occur when some of the elements are absent.
+
+Abstraction from a ruled and a non-ruled table is realized at
+the user level.
+Ruled can be specified either as horizontal, vertical or both.
+Dotted rules, also the partial ones, can be specified.
+No variation in the line thicknesss has been coded.
+Framing has been treated just as if a general document element
+has to be framed.
+I chose to leave the caption and the footer outside the frame.\ftn{However,
+ we can frame any document element, can't we?}
+The positioning of the elements can be specified as
+centered, flushed left, or flushed right.
+A ^{template} is provided by default.
+Caption, border (first, header, row stubs), and footer can be specified;
+all mutual orthogonal and independent of \cs{data}.
+^^{bordered table model}
+
+\bluesubhead Model
+
+{\def\btablecaption{$\leftarrow$\hfill C a p t i o n\hfill$\rightarrow$}
+\def\first{\hbox to6ex{\hss First\hss}}
+\def\header{\hbox to18ex{\hss Header\hss}}
+\def\rowstblst{{\hfil$\vcenter to20ex{\vss\offinterlineskip
+ \fifo rowstblst\ofif\vss}$}}
+\def\data{$\vcenter{\offinterlineskip\hbox{Table}\kern1ex\hbox{Proper}}$}
+\def\footer{$\leftarrow$\hfill{\small F o o t e r}\hfill\hfill\hfill$\rightarrow$}
+\def\fifo#1{\ifx\ofif#1\ofif\fi\process{#1}\fifo}\def\ofif#1\fifo{\fi}
+\def\process#1{\hbox to0pt{\hss#1\hss}\kern.5ex}
+\nonframed
+$$\vcenter{\btable\data}$$
+}%end scope
+\TeX nically caption and footer are \cs{hbox}-es and table proper is an \cs{vbox}.
+The separators of caption and footer are default \cs{medskip} and \cs{smallskip}.
+
+\bluesubhead Markup tags
+
+\bitem tags ^|\beginbtable| and |\endbtable|, or the shortcut |\btable|,
+ and the column and row separator ^|\cs|, and ^|\rs|
+\bitem defs to be redefined ^|\btablecaption|, ^|\first|,
+ ^|\header|, ^|\footer|, ^|\rowstblst|,
+ (all defined empty by default)
+\bitem table markup tags, ^|\logms|, ^{logical multispan} to
+ span a number of {\em logical\/} columns
+\bitem attributes
+\itemitem{--} ^|\ruled|, ^|\hruled|, ^|\vruled|, ^|\dotruled| \hfill
+ Default:\hbox to13ex{\hfil^|\nonruled|}
+\itemitem- ^|\framed|, ^|\dotframed| \hfill
+ Default:\hbox to13ex{\hfil^|\nonframed|}
+\itemitem- ^|\fll| (flushed left), ^|\flr| (flushed right) \hfill
+ Default:\hbox to13ex{\hfil^|\ctr|}
+\bitem token variables ^|\prebtable|, ^|\postbtable| for positioning
+the table within the context.{\parindent0pt\ftn{In practice the math display is used
+ most of the time.}}
+\smallbreak
+
+By the way the above model is an example of the markup
+of a bordered table.\ftn{Admittedly a little complicated. Simpler
+ examples will follow.}
+The markup reads as follows.
+
+\beginverbatim
+\def\btablecaption{$\leftarrow$\hfill C a p t i o n\hfill$\rightarrow$}
+\def\first{\hbox to6ex{\hss First\hss}}
+\def\header{\hbox to18ex{\hss Header\hss}}
+\def\rowstblst{{\hfil$\vcenter to20ex{\vss\offinterlineskip
+ \fifo rowstblst\ofif\vss}$}}
+\def\process#1{\hbox to0pt{\hss#1\hss}\kern.5ex}
+\def\data{$\vcenter{\offinterlineskip\hbox{Table}\kern1ex\hbox{Proper}}$}
+\def\footer{$\leftarrow$\hfill{\small F o o t e r}\hfill\hfill\hfill
+ $\rightarrow$}
+$$\vcenter{\btable\data}$$
+!endverbatim
+
+\thissubhead{\runintrue}
+\bluesubhead Customization\par
+\cs{$\langle X\rangle$sep} are parameters,
+which govern the kind of ^{separators}.
+The following are defaults to be customized.
+
+\beginverbatim
+\def\cellsize{\cvsize=4ex\tsht=.775\cvsize\tsdp=.225\cvsize}
+\def\colsepsurround{\kern.5em}\def\captionsep{\medskip}\def\rowstbsep{\vrule}
+\def\headersep{\hrule}\def\footersep{\smallskip}\def\template{}
+!endverbatim
+
+The positioning of the elements in the cells is parameterized
+by \cs{lft} and \cs{rgt}. They are equal to \cs{hfil} by default.
+A nice application is to make these equal to \$ in such a way that data
+can be processed in math mode.
+
+The empty template looks curious.
+The explanation is: when empty\Dash i.e., a user did not provide one\Dash
+a standard template will be used.
+
+\vfill\eject
+\bluehead Use of btable macro
+
+There are some pitfalls that I know of and that
+a user might like to be aware of. ^^{btable, pitfalls}
+\bitem When \cs{header}, \cs{footer} and the like are defined
+ they keep their value.
+ So when you don't have a header in the next table, be sure that
+ this definition is empty.
+\bitem Most of the time I used definitions with \cs{btable} instead of
+ token variables. Beware.
+\bitem To specify the row stub list separately from the data might yield
+ a first column and a data part of unequal size.
+\bitem The ^|\cs| is ambiguous. In \bluetex{} it has the function to
+ yield the argument as control sequence, while within btable
+ the meaning is the column separator.
+\bitem When verbatims are also part of the data process the table on the
+ fly via \cs{beginbtable} \dots\thinspace \cs{endbtable}. However,
+ there is a problem when the header and footer have to be processed
+ on the fly too.
+\bitem In the markup of the table in the appendix `History of
+ Changes,' the problems are the right line distances in a \cs{vtop}.
+ The latter as element in the table.
+ It is caused by the \cs{tstrut}, table strut,
+ which is inserted at the end of each table row.
+ See the script how to circumvent this problem.
+\bitem The attribute \cs{dotruled} is not so general as \cs{ruled}
+ or \cs{vruled}, because we lack the primitive \cs{vdotfill}
+ as a dotted alternative for \cs{vrule}.
+ For horizontal rules \TeX{} provides the primitives
+ \cs{hrule} with the dotted variant \cs{dotfill}.
+\smallbreak
+
+In the examples of use below the invocation of \cs{data} could have been
+hidden.
+However, in order to remain compatible with the situation where a user
+wishes to forget about \cs{data} and provide the table entries directly
+as argument to \cs{btable}, I refrained from that.
+
+\blueexample Just data, magic squares
+
+$$\def\data{2\cs7\cs6\rs
+ 9\cs5\cs1\rs
+ 4\cs3\cs8}
+\vcenter{\framed\ruled\btable\data}\qquad\qquad\qquad
+ \def\data{16\cs 3\cs 2\cs13\rs
+ 5\cs 10\cs 11\cs 8\rs
+ 9\cs 6\cs 7\cs12\rs
+ 4\cs 15\cs 14\cs 1}
+ \def\template{\colsepsurround\lft{\oldstyle##}\rgt
+ &&\lft##\rgt&\lft{\oldstyle##}\rgt\cr}
+ \ruled\framed\setbox0=\btable\data%for measuring sizes
+ \vcenter{\dotruled\dotframed\btable\data}\qquad$$
+via
+\begincenterverbatim
+$$\def\data{2\cs7\cs6\rs
+ 9\cs5\cs1\rs
+ 4\cs3\cs8}
+\vcenter{\framed\ruled\btable\data}\qquad\qquad\qquad
+ \def\data{16\cs 3\cs 2\cs13\rs
+ 5\cs 10\cs 11\cs 8\rs
+ 9\cs 6\cs 7\cs12\rs
+ 4\cs 15\cs 14\cs 1}
+ \def\template{\colsepsurround\lft{\oldstyle##}\rgt
+ &&\lft##\rgt&\lft{\oldstyle##}\rgt\cr}
+ \ruled\framed\setbox0=\btable\data%for measuring sizes
+ \vcenter{\dotruled\dotframed\btable\data}\qquad$$
+!endcenterverbatim
+Remark. To introduce the ^|\oldstyle| elegantly I added
+a template for the ^|\halign|. For doing this, awareness of
+the physical columns is needed. Logically we are talking about
+a {\oldstyle3}${*}${\oldstyle3} and {\oldstyle4}${*}${\oldstyle4} table.
+Note that for dotted variants much more work has to be done.
+
+\blueexample Data plus header, \TB{} {\oldstyle246}
+
+^^{data with header}
+$$\def\header{\hfill Year\hfill\cs
+ \hfill World Population\hfill}
+\def\data{8000 B.C.\cs 5,000,000\rs
+ 50 A.D.\cs200,000,000}
+\flr\nonframed\vruled\vcenter{\btable\data}\qquad
+ \ruled\vcenter{\framed\btable\data}$$
+via the nearly descriptive markup
+
+\beginverbatim
+\def\header{\hfill Year\hfill\cs \hfill World Population\hfill}
+\def\data{8000 B.C.\cs 5,000,000\rs 50 A.D.\cs200,000,000}
+$$\flr\vruled\vcenter{\btable\data}\qquad\ruled\framed\vcenter{\btable\data}$$
+!endverbatim
+
+\exercise How come that the left table contains a \cs{hrule}?
+\answer The header separator is not influenced by the ruled
+ attributes.
+
+\blueexample Data with row stubs, \TB{} {\oldstyle232}
+
+^^{data with row stubs}
+\nonruled\nonframed\ctr%defaults
+\begindemo
+\def\rowstblst{{Horizontal lists}
+ {Vertical lists}{Math lists}}
+\def\rowstbsep{}%Customization
+\def\data{Chapter 14\rs
+ Chapter 15\rs
+ Chapter 17}
+$$\btable\data$$
+!yields
+\def\rowstblst{{Horizontal lists}
+ {Vertical lists}
+ {Math lists}}
+ \def\rowstbsep{}
+ \def\data{Chapter 14\rs
+ Chapter 15\rs
+ Chapter 17}
+\btable\data
+\enddemo
+
+\exercise How can we obtain the same table without the use of \cs{rowstblst}?
+\answer Just consider all as data.
+\beginverbatim
+Alternative
+\def\data{Horizontal lists \cs Chapter 14\rs
+ Vertical lists\hfill\cs Chapter 15\rs
+ Math lists\hfill \cs Chapter 16}
+$$\btable\data$$
+!endverbatim
+
+%end exercise
+
+\blueexample Data, row stubs, header, caption and footer
+
+^^{data with header, row stubs, caption and footer}
+\nonruled\nonframed
+$$\def\data{11\cs12\rs
+ 21\cs22}
+ \vcenter{\framed\btable\data} \qquad
+ \def\header{\logms2\hfill Header\hfill}
+ \def\rowstblst{{$1^{st}$ row}
+ {$2^{nd}$ row}}
+ \vcenter{\btable\data} \qquad
+ \def\btablecaption{Caption}
+ \def\footer{Footer}
+ \vcenter{\dotruled\btable\data} \qquad
+ \vcenter{\ruled\framed\btable\data}
+$$
+after data definition, |\def\data| |{11\cs12\rs| |21\cs22}|,
+via\ftn{Note the invariance of the
+ {\tt\char92data} specification.}
+\begincenterverbatim
+$$\vcenter{\framed\btable\data} \qquad
+ \def\header{\logms2\hfill Header\hfill}
+ \def\rowstblst{{$1^{st}$ row}
+ {$2^{nd}$ row}}
+ \vcenter{\btable\data} \qquad
+ \def\btablecaption{Caption}
+ \def\footer{Footer}
+ \vcenter{\dotruled\btable\data} \qquad
+ \vcenter{\ruled\framed\btable\data}$$
+!endcenterverbatim
+The above example shows in a nutshell the essential possibilities of
+the \cs{btable} macro. It is my favorite, although other nice
+and powerful examples are still to come.
+
+\blueexample Walter's spreadsheet, \TB{} {\oldstyle244}
+
+No preamble has to be defined. ^^{spreadsheet}
+$$
+\def\data{1\cs\logms2Adjusted gross income \dotfill\cs \$4,000\rs
+ 2\cs Zero bracket amount for \rs
+ \cs a single individual \dotfill\cs\hfill\$2,300\cs \rs
+ 3\cs Earned income \dotfill\cs
+ \hfill\underbar{ 1,500}\cs \rs
+ 4\cs\logms2Substract line 3 from line 2
+ \dotfill\cs\hfill\underbar{ 800}\rs
+ 5\cs Add lines 1 and 4. Enter here \rs
+ \cs\logms2and on Form 1040, line 35 \dotfill\cs\$4,800}
+\def\colsepsurround{\kern.5ex}\cvsize=3ex
+\fll\btable\data
+$$
+The above is marked up, as a 4-column table, via
+\beginverbatim
+\def\data{1\cs\logms2Adjusted gross income \dotfill\cs \$4,000\rs
+ 2\cs Zero bracket amount for \rs
+ \cs a single individual \dotfill\cs\hfill\$2,300\cs \rs
+ 3\cs Earned income \dotfill\cs
+ \hfill\underbar{ 1,500}\cs \rs
+ 4\cs\logms2Substract line 3 from line 2
+ \dotfill\cs\hfill\underbar{ 800}\rs
+ 5\cs Add lines 1 and 4. Enter here \rs
+ \cs\logms2and on Form 1040, line 35 \dotfill\cs\$4,800}
+\def\colsepsurround{\kern.5ex}\cvsize=3ex
+$$\fll\btable\data$$
+!endverbatim
+
+\blueexample Spreadsheet digression
+
+It happens that tables\Dash read budgets\Dash set by \AllTeX{} suffer from
+a simple addition flaw.
+Can't we add a {\em little\/} spreadsheet functionality to \TeX, i.e.,
+let \TeX{} do the additions?\ftn{Courtesy
+ Phil Taylor's Trigonometry \TeX, for the idea to use dimen vars and
+ how to remove the pt.
+ Remember that \TeX{} allows {\oldstyle16} bit fixed-point arithmetic.
+ It is limited to absolute values $<$ {\oldstyle16384}.}
+\begingroup
+\newdimen\a\newdimen\b\newdimen\c
+\begindemo
+\def\data{r1\cs \ass\a{1.23} \rs
+ r2\cs\ubp{\ass\b{4.56}}\rs
+ \cs\cs\sumup{\a\b}\global\c\dimen0\rs
+ \cs\cs\ubm{\ass\a{3.14}}\rs
+ \cs\cs\minus\c\a}
+$$\btable\data$$
+!yields
+\def\ass#1#2{\global#1=#2pt#2}
+\def\sumup#1{\global\dimen0=0pt
+ \let\process\processsum\fifo#1\ofif}
+\def\processsum#1{\global\advance\dimen0#1\relax}
+\def\ofif#1\fifo{\fi\nodim\the\dimen0}
+\def\minus#1#2{\global
+\dimen0#1\global\advance\dimen0-#2
+\nodim\the\dimen0}
+%\nodim, i.e. \xs, strips pt from
+% dimension quantity
+{\catcode`\p=12 \catcode`\t=12
+ \gdef\xs#1pt{#1}}
+\def\nodim{\expandafter\xs}
+%\underbar extended by + and -
+\def\ubp#1{\underbar{#1}\rlap
+ {\lower.8ex\hbox{\thinspace\small$+$}}}
+\def\ubm#1{\underbar{#1}\rlap
+ {\lower.8ex\hbox{\thinspace\small$-$}}}
+%
+\def\data{r1 \cs \ass\a{1.23} \rs
+ r2 \cs\ubp{\ass\b{4.56}}\rs
+ \cs\cs\sumup{\a\b}\global\c\dimen0\rs
+ \cs\cs\ubm{\ass\a{3.14}}\rs
+ \cs\cs\minus\c\a}
+$$\btable\data$$
+\enddemo
+\endgroup
+with auxiliaries
+\beginverbatim
+\newdimen\a\newdimen\b\newdimen\c
+\def\ass#1#2{\global#1=#2pt#2}
+\def\sumup#1{\global\dimen0=0pt\let\process\processsum\fifo#1\ofif}
+\def\processsum#1{\global\advance\dimen0#1\relax}
+\def\ofif#1\fifo{\fi\nodim\the\dimen0}
+\def\minus#1#2{\global\dimen0#1\global\advance\dimen0-#2\nodim\the\dimen0}
+%\nodim, i.e. \xs, strips pt from
+% dimension quantity
+{\catcode`\p=12 \catcode`\t=12 \gdef\xs#1pt{#1}}
+\def\nodim{\expandafter\xs}
+%\underbar extended by + and -
+\def\ubp#1{\underbar{#1}\rlap{\lower.8ex\hbox{\thinspace\small$+$}}}
+\def\ubm#1{\underbar{#1}\rlap{\lower.8ex\hbox{\thinspace\small$-$}}}
+!endverbatim
+
+\blueexample Part of AAP's table, AAP {\oldstyle1989}
+
+Subtle is the header part and the alignments on the signs. ^^{AAP table}
+\def\nl{\hfil\strut\break\strut}
+{%
+\catcode`?=\active \def?{\kern1.1ex}
+%
+\def\btablecaption{AAP's table:\qquad Job Changes
+ 1973--1980\hfill}
+\def\rowstblst{{Texas}{Maryland}}
+\def\header{\copy1\cs\copy2\cs\copy3}
+ \setbox1=\vtop{\noindent\hsize14ex
+ Gain/Loss of\nl hospitals \nl since 1973}
+ \setbox2=\vtop{\noindent\hsize13ex
+ Total No\nl
+ of CEO Job\nl
+ Changes\nl
+ 1973--90\strut}
+ \setbox3=\vtop{\noindent\hsize10ex
+ Survival\nl Rate of\nl CEO's}
+\def\data{$+20$\cs---\cs22\%\rs
+ $+?5$\cs 42\cs24\%}
+\def\footer{Source: David Kinzer, `Turnover etc.}
+$$\btable\data$$
+}obtained via
+\beginverbatim
+\def\btablecaption{AAP's table:\qquad Job Changes 1973--1980\hfill}
+\def\rowstblst{{Texas}{Maryland}}
+\def\header{\copy1\cs\copy2\cs\copy3}
+\def\data{$+20$\cs---\cs22\%\rs
+ $+?5$\cs 42\cs24\%}
+\def\footer{Source: David Kinzer, `Turnover etc.}
+$$\btable\data$$
+!endverbatim
+with auxiliaries
+\beginverbatim
+\def\nl{\hfil\strut\break\strut}
+\catcode`?=\active \def?{\kern1.1ex}
+\setbox1=\vtop{\noindent\hsize14ex Gain/Loss of\nl hospitals \nl since 1973}
+\setbox2=\vtop{\noindent\hsize13ex Total No\nl of CEO Job\nl Changes\nl 1973--90}
+\setbox3=\vtop{\noindent\hsize10ex Survival\nl Rate of\nl CEO's}
+!endverbatim
+Remark. With longer footnotes put the text in a \cs{vtop},
+with \cs{hsize} set to \cs{thsize}.\ftn{The table proper is first set
+ in a box, and this box is measured yielding \cs{thsize} and \cs{tvsize}.
+ After this the \cs{header} and \cs{footer} are set using the
+ \cs{thsize}.}
+
+\blueexample AT\&T table diversions, \TB{} {\oldstyle247}
+
+Subtle is the alignment on the dot via the use of `?', \`a la Knuth,
+and the |\llap\$|, and |\rlap*|.
+^^{ATT table}
+\def\rowstblst{}
+{\def\btablecaption{AT\&T Common Stock\hfill}
+\def\header{Year\cs Price\cs Dividend}
+\catcode`?=\active \def?{\kern1.1ex}
+\def\data{1971\cs41--54\cs\llap\$2.60\rs
+ 2\cs41--54\cs 2.70\rs
+ 3\cs46--55\cs 2.87\rs
+ 4\cs40--53\cs 3.24\rs
+ 5\cs45--52\cs 3.40\rs
+ 6\cs51--59\cs ?.95\rlap*}
+\def\footer{* (first quarter only)}
+$$\framed\vcenter{\vbox{\small\btable\data}}\qquad\qquad
+ \def\btablecaption{}
+ \def\header{\logms3 \hfil AT\&T Common Stock\hfil\rs
+ \hfill Year\hfill\cs\hfill Price\hfill\cs \hfill Dividend\hfill}
+ \vcenter{\flr\ruled\btable\data}$$
+}
+via
+\begincenterverbatim
+\def\btablecaption{AT\&T Common Stock}
+\def\header{Year\cs Price\cs Dividend}
+\catcode`?=\active \def?{\kern1.1ex}
+\def\data{1971\cs41--54\cs\llap\$2.60\rs
+ 2\cs41--54\cs 2.70\rs
+ 3\cs46--55\cs 2.87\rs
+ 4\cs40--53\cs 3.24\rs
+ 5\cs45--52\cs 3.40\rs
+ 6\cs51--59\cs ?.95\rlap*}
+\def\footer{* (first quarter only)}
+$$\framed\vcenter{\vbox{\small
+ \btable\data}}\qquad\qquad
+%
+\def\btablecaption{}
+\def\header{\logms3
+ \hfil AT\&T Common Stock\hfil\rs
+ \hfill Year\hfill\cs
+ \hfill Price\hfill\cs
+ \hfill Dividend\hfill}
+\vcenter{\flr\ruled\btable\data}$$
+!endcenterverbatim
+
+\blueexample Pittman's deterministic multiplication table
+
+Typographically and in other programming languages a trifle.
+In \TeX\ the coding matters. ^^{multiplication table}
+
+\def\header{}
+\def\rowstblst{}
+\def\btablecaption{}\def\first{}\def\footer{}
+\newcount\rcnt \newcount\ccnt \newcount\tnum
+\newcount\mrow \newcount\mcol
+\rcnt1 \ccnt1
+\def\rows{\global\ccnt1 \cols \global\advance\rcnt1
+ \ifnum\rcnt>\mrow\swor\fi\rs\rows}
+\def\swor#1\rows{\global\rcnt1 \global\ccnt1 \fi}
+\def\cols{\tnum\rcnt \multiply\tnum\ccnt \the\tnum
+ \global\advance\ccnt1 \ifnum\ccnt>\mcol\sloc\fi\cs\cols}
+\def\sloc#1\cols{\fi}
+%
+\mrow2 \mcol3 $$\nonruled\nonframed
+\vcenter{\btable\rows}\qquad\qquad
+\def\first{$\times$} \def\header{\row}
+\def\row{\the\ccnt\global\advance\ccnt1
+ \ifnum\ccnt>\mcol\wor\fi\cs\row}
+\def\wor#1\row{\fi}
+\def\rowstblst{{Anything, non-empty}}
+\def\nxtrs{\the\rcnt\rss}
+\vcenter{\btable\rows}\qquad\qquad
+%
+\mrow3 \mcol4 \def\rowstblst{{Anything, non-empty}}
+\framed\vcenter{\btable\rows}
+$$
+via
+\beginverbatim
+\newcount\rcnt\newcount\ccnt\newcount\tnum\newcount\mrow\newcount\mcol
+\rcnt1 \ccnt1 \mrow2 \mcol3
+\def\rows{\global\ccnt1 \cols \global\advance\rcnt1
+ \ifnum\rcnt>\mrow\swor\fi\rs\rows}
+\def\swor#1\rows{\global\rcnt1 \global\ccnt1 \fi}
+\def\cols{\tnum\rcnt\multiply\tnum\ccnt\the\tnum\global\advance\ccnt1
+ \ifnum\ccnt>\mcol\sloc\fi\cs\cols} \def\sloc#1\cols{\fi}
+$$\mrow2 \mcol3 \vcenter{\btable\rows}\qquad\qquad
+%
+\def\first{$\times$} \def\header{\row}
+\def\row{\the\ccnt\global\advance\ccnt1 \ifnum\ccnt>\mcol\wor\fi\cs\row}
+\def\wor#1\row{\fi} %\def\rowstblst{{1}{2}}%Fully automated via the two defs
+ \def\rowstblst{{Anything, non-empty}} \def\nxtrs{\the\rcnt\rss}
+\vcenter{\btable\rows}\qquad\qquad
+%
+\mrow3 \mcol4 %\def\rowstblst{{1}{2}{3}}%Fully automated via the two defs
+ \def\rowstblst{{Anything, non-empty}} \def\nxtrs{\the\rcnt\rss}
+\framed\vcenter{\btable\rows}$$
+!endverbatim
+
+%Back to defaults
+\def\header{}\def\rowstblst{}\def\btablecaption{}\def\first{}\def\footer{}
+
+\vfill\eject
+\bluehead Kaleidoscope
+
+Some examples of special tables are given in order to illustrate the
+diversity. The markup is not restricted to the use of \cs{btable}.
+With respect to programming, the deterministic tables and
+the tables which update the computer memory, deserve special attention.
+The latter category is induced by {\em computer\/} typography.
+
+\blueexample Young tableaux, irregular shape, Knuth {\oldstyle1973}
+
+^^{Young tableaux}
+\begindemo
+\newdimen\csize\csize=3ex
+\newcount\cnt
+\def\young#1{\hbox{\vrule\vtop{\hrule
+ \offinterlineskip\halign{&\vbox
+ {\hbox to\csize{\strut\hss##\hss
+ \vrule}\hrule}\cr%template
+#1\crcr}}}}%end \young
+\catcode`'=13\relax
+\def'{\global\advance\cnt1 \the\cnt}
+\def\data{'&'&'&'\cr'&'&'\cr'}
+\young\data
+\def\data{7&8&9&10\cr9&11\cr16\cr}
+\young\data
+!yields
+\newdimen\csize\csize=3ex
+\newcount\cnt
+\def\young#1{\hbox{\vrule\vtop{\hrule
+ \offinterlineskip\halign{&\vbox
+ {\hbox to\csize{\strut\hss##\hss
+ \vrule}\hrule}\cr%template
+#1\crcr}}}}%end \young
+\catcode`'=13\relax
+\def'{\global\advance\cnt1 \the\cnt}
+\def\data{'&'&'&'\cr'&'&'\cr'}
+\leavevmode\qquad\young\data\qquad
+\def\data{7&8&9&10\cr9&11\cr16\cr}
+\young\data
+\enddemo
+
+\blueexample Pascal triangle, a deterministic table
+
+^^{Pascal triangle}
+\begindemo
+$$\displaylines{1\cr
+ 1\quad1\cr
+ 1\quad2\quad1\cr
+ 1\quad3\quad3\quad1\cr}$$
+!yields\hsize=10em
+$$\displaylines{1\cr
+ 1\quad1\cr
+ 1\quad2\quad1\cr
+ 1\quad3\quad3\quad1\cr}$$
+\enddemo
+\exercise The Pascal triangle is deterministic. Write a macro
+ |\def\pascal#1{...}| which provides the table with the
+ order as argument.
+\answer The macro and auxiliaries read as follows.
+\thisverbatim{\unmc}
+\beginverbatim
+\newcount\n
+\newcount\rcnt \newcount\ccnt
+\newcount\tentry\newcount\prev
+%
+\def\pascal#1{\n#1 \def\0{1} \ccnt1
+ \loop\ea\xdef\csname\the\ccnt\endcsname{0}
+ \ifnum\ccnt<\n \advance\ccnt1
+ \repeat\rcnt0 \ccnt0
+ \displaylines{\rows}}
+%
+\def\rows{\global\advance\rcnt1
+ \ifnum\rcnt>\n \swor\fi
+ \nxtrow\rows}
+%
+\def\swor#1\rows{\fi}
+%
+\def\nxtrow{1 \ccnt1 \prev1
+ \loop\ifnum\ccnt<\rcnt
+ \tentry\prev
+ \prev\csname\the\ccnt\endcsname
+ \advance\tentry\prev
+ \ea\xdef\csname\the\ccnt\endcsname{\the\tentry}
+ \quad\the\tentry
+ \advance\ccnt1
+ \repeat\cr}
+!endverbatim
+
+%above blank line terminates answer.
+
+\blueexample Tower of Hanoi, deterministic
+
+The process of replacement of the disks will be printed
+by the invocation of |\hanoi<n>|, $n$ an integer.
+No user markup is needed. ^^{tower\ of\ Hanoi}
+\begindemo
+\hanoi2
+%or
+\beginhanoi2\endhanoi
+!yields
+\hanoi2
+\enddemo
+
+\blueexample Chart, \TB{} ex{\oldstyle22}.{\oldstyle14} {\oldstyle248}
+
+^^{chart}%but elaborated differently.
+{\small
+\newdimen\dist \dist=2\baselineskip
+\def\ent#1{\hbox{\vbox to 0pt
+{\vss\hbox to10ex{\quad\strut#1\hss}
+ \hrule}}}
+\def\vl#1{\hbox{\vrule height#1\dist
+depth0pt}}%Vertical Line of prop. size
+\def\bl#1{\kern#1\dist}%BLank of prop. size
+%Balanced
+$$\offinterlineskip
+ \vcenter{\ent{abc}}
+ \vcenter{\ent{de}
+ \vl2
+ \ent{fg}}
+ \vcenter{\ent{hij}
+ \vl1
+ \ent{klm}
+ \bl1
+ \ent{nop}
+ \vl1
+ \ent{qrs}}
+\quad%Nearly balanced tree; pruning a branch
+ \vcenter{\ent{abc}}
+ \vcenter{\ent{de}
+ \vl2
+ \ent{fg}}
+ \vcenter{\ent{hij}
+ \vl{.5} %\bl{.5}<-|
+ % \ent{klm} |
+ \bl{1.5}% <-|
+ \ent{nop}
+ \vl1
+ \ent{qrs}}$$ }%end scope
+
+via the following alternative code without \cs{halign}
+
+\begincenterverbatim
+\newdimen\dist \dist=2\baselineskip
+\def\ent#1{\hbox{\vbox to0pt{\vss\hbox to10ex{\quad
+ \strut#1\hss}\hrule}}}
+\def\vl#1{\hbox{\vrule height#1\dist depth0pt}}
+\def\bl#1{\kern#1\dist}%BLank of proper size
+%Balanced
+$$\offinterlineskip
+ \vcenter{\ent{abc}}
+ \vcenter{\ent{de} \vl2\ent{fg}}
+ \vcenter{\ent{hij}\vl1\ent{klm}\bl1\ent{nop}\vl1\ent{qrs}}
+\quad%Nearly balanced tree; pruning a branch
+ \vcenter{\ent{abc}}
+ \vcenter{\ent{de} \vl2\ent{fg}}
+ \vcenter{\ent{hij}\vl{.5}%\bl{.5}\ent{klm}
+ \bl{1.5}\ent{nop}\vl1\ent{qrs}}$$
+!endcenterverbatim
+
+\blueexample Binary tree
+
+The nodes are identified via Dewey's decimal notation, similar to
+a ToC in a book.
+For example, node {\oldstyle11} is the left most node at the first level.
+The user must supply within the environment ^|\beginbintree| \cs{endbintree}
+the pairs of node numbers and node contents, with at the end the
+level of the tree.
+A node which is not specified will not show.
+
+The syntax of the invocation reads
+\begincenterverbatim
+\beginbintree<nodeno><nodevalue>
+ ...
+ <nodeno><nodevalue>
+<levelno>\endbintree
+!endcenterverbatim
+$$\thisbintree{\tophns13ex}
+ \beginbintree{00}1{11}6{12}7{21}2{22}3{23}4
+ 2\endbintree
+ \raise13ex\hbox{$\buildrel heap\over \longrightarrow$}
+ \thisbintree{\tophns13ex}
+ \beginbintree{00}7{11}6{12}4{21}3{22}2{23}1
+ 2\endbintree
+$$
+\begincenterverbatim
+$$\thisbintree{\tophns13ex}
+ \beginbintree{00}1{11}6{12}7{21}2{22}3{23}4
+ 2\endbintree
+ \raise13ex\hbox{$\buildrel heap\over \longrightarrow$}
+ \thisbintree{\tophns13ex}
+ \beginbintree{00}7{11}6{12}4{21}3{22}2{23}1
+ 2\endbintree
+$$
+!endcenterverbatim
+
+\blueexample Dewey's decimal notation
+
+$$\beginbintree{00}{$root$}
+ {11}{$n_{11}$}
+ {12}{$n_{12}$}
+ {21}{$n_{21}$}
+ {22}{$n_{22}$}
+ {23}{$n_{23}$}
+ {24}{$n_{24}$}
+ {35}{$n_{35}$}
+ {36}{$n_{36}$}
+ {49}{$n_{49}$}
+ {410}{$n_{410}$}
+4\endbintree$$
+\vskip-2.5\bigskipamount
+\begincenterverbatim
+$$\beginbintree{00}{$root$}
+ {11}{$n_{11}$}{12}{$n_{12}$}
+ {21}{$n_{21}$}{22}{$n_{22}$}{23}{$n_{23}$}{24}{$n_{24}$}
+ {35}{$n_{35}$}{36}{$n_{36}$}
+ {49}{$n_{49}$}{410}{$n_{410}$}
+4\endbintree$$
+!endcenterverbatim
+
+\blueexample Bitstreams as names of nodes
+
+^^|\beginbt|\thisbt{\xoffset{-400}}%Interactive binary tree traversal
+\beginbt 1 NTG member?
+10 Plain TeX ie?
+100 Honoured?
+1000 cgl
+1001 HH
+101 On board?
+1010 Chair?
+10100 Erik
+10101 Secretary?
+101010 Gerard
+101011 Treasurer?
+1010110 Wietse
+1010111 Dark?
+10101110 JLB
+10101111 FG
+1011 Anonymous
+11 Just a friend
+8 \endbt
+The above b(inary)t(ree)\ftn{Courtesy Bernd Raichle.} is not foolproof and suffers from
+overprinting of the leaves with a tree of depth {\oldstyle10} or so.
+Note that the specification of the nodes is on a line by line basis\Dash
+ \cs{obeylines} is on\Dash and
+that each node and its contents is separated by a space.
+The last line must contain the number of levels\Dash
+ used to create the niche for the tree\Dash
+and the closing tag \cs{endbt}, again separated by a space.
+By adopting these conventions no curly braces were needed.\ftn{The above ideas
+ emerged from an interactive traversal of a binary tree in a guess
+ who-is-who game. The programming is such that it can be extended easily to
+ a trinary or higher-order tree. The overprinting drawback remains, however.
+ Alexander Calder might have appreciated these `mobiles,' \winksmiley.}
+\begincenterverbatim
+\thisbt{\xoffset{-400}}
+\beginbt 1 NTG member?
+10 Plain TeX ie?
+100 Honoured?
+1000 Kees
+1001 HH
+101 On board?
+1010 Chair?
+10100 Erik
+10101 Secretary?
+101010 Gerard
+101011 Treasurer?
+1010110 Wietse
+1010111 Dark?
+10101110 JLB
+10101111 FG
+1011 Anonymous
+11 Just a friend
+8 \endbt
+\bye
+!endcenterverbatim
+There are some special tree packages. Gurari is strong with respect to
+diagrams in general and trees in particular.
+
+\blueexample Maze
+
+%Labyrinth via TeX, just an experiment feb 92.
+%Assumed is a closed rule on top and to the right
+%| and _ denote the rules to mark the labyrinth
+%Labyrinth proper
+\thisverbatim{\catcode`\|=12 } ^^{maze}
+\begindemo
+\catcode`|=13 \def|{\vrule}
+\catcode`_=13 \def_{\hrulefill}
+$$\vcenter{\hbox{\vtop{\hrule
+\offinterlineskip
+\halign{&\hbox to\csize{\vrule
+ height\csize width0pt#\hfil}\cr
+ |&_&|_& \cr
+ &|&_& \cr
+ |&|_&_&|\cr
+ |_& &_&_\cr}%end \halign
+ }\vrule%end \vbox
+ }%end \hbox
+!yields
+\newdimen\csize \csize=3ex
+\catcode`|=13 \def|{\vrule}
+\catcode`_=13 \def_{\hrulefill}
+\qquad\hbox{\vtop{\offinterlineskip
+ \hrule\halign{&\hbox to\csize
+ {\vrule height\csize width0pt
+ #\hfil}\cr
+ |&_&|_& \cr
+ &|&_& \cr
+ |&|_&_&|\cr
+ |_& &_&_\cr}%end \halign
+ }\vrule%end \vbox
+ }%end \hbox
+\enddemo
+
+\blueexample Crosswords: puzzle, clues and solution
+
+^^{crosswords}
+\begincrosswords
+$$\bdata%
+P*On
+DEk*
+*n*S
+Edit
+\edata
+\vcenter{\sevenrm\csize=3ex\crw}
+\vcenter{\parindent=5ex
+\vtop{\hsize=21ex\obeylines Across
+2 Switch mode
+3 Knuth
+6 Prior to \TeX}}
+\vcenter{\parindent=3ex
+\vtop{\hsize=25ex\obeylines Down
+1 Public domain
+2 All right
+4 All comes to it
+5 Atari type}}
+\vcenter{\fiverm\csize=3ex\sol}$$
+\endcrosswords
+The above is obtained essentially via
+\begincenterverbatim
+\begincrosswords
+$$\bdata%
+P*On
+DEk*
+*n*S
+Edit
+\edata
+\vcenter{\sevenrm\csize=3ex\crw}
+<Clues>
+\vcenter{\fiverm\csize=3ex\sol}$$
+\endcrosswords
+!endcenterverbatim
+
+\blueexample Much alignment occurs in typesetting mathematics
+
+Aligned equations in display, matrices, and
+the complex commutative diagrams.
+This has been dealt with elsewhere,
+for example Knuth {\oldstyle1984}, and Spivak {\oldstyle1989}.
+Also typesetting of program texts requires vertical alignment.
+
+\blueexample Chess boards
+
+The first board has been marked up via ^|\leaders|,\ftn{Courtesy
+ David Salomon.}
+horizontally and vertically. ^^{chess}
+The second is obtained via (a degenerate use of \winksmiley )
+the crossword macro.
+{\newdimen\unitlength \unitlength3ex
+\begindemo
+\unitlength3ex
+\boxit{\vbox{\leaders
+ \vbox{\offinterlineskip
+ \hbox{\leaders\hbox{%
+ \kern\unitlength
+ \vrule width\unitlength
+ height\unitlength
+ }\hskip8\unitlength
+ }\hbox{\leaders\hbox{\vrule
+ width\unitlength
+ height\unitlength
+ \kern\unitlength
+ }\hskip8\unitlength
+ }}\vskip8\unitlength}}
+!yields
+\boxit{\vbox{\leaders
+ \vbox{\offinterlineskip
+ \hbox{\leaders\hbox{%
+ \kern\unitlength
+ \vrule width\unitlength
+ height\unitlength
+ }\hskip8\unitlength
+ }\hbox{\leaders\hbox{\vrule
+ width\unitlength
+ height\unitlength
+ \kern\unitlength
+ }\hskip8\unitlength
+ }}\vskip8\unitlength}}
+\enddemo}
+
+\begindemo
+\begincrosswords
+\obeyspaces\let =\space
+\csize=3ex
+\bdata%
+8 * * * *
+7* * * *
+6 * * * *
+5* * * *
+4 * * * *
+3* * * *
+2 * * * *
+1* * * *
+*ABCDEFGH
+\edata
+\sol
+\endcrosswords
+!yields
+\begincrosswords
+\obeyspaces\let =\space
+\csize=3ex
+\bdata%
+8 * * * *
+7* * * *
+6 * * * *
+5* * * *
+4 * * * *
+3* * * *
+2 * * * *
+1* * * *
+*ABCDEFGH
+\edata
+\sol
+\endcrosswords
+\enddemo
+\exercise How can we add field indicators on top and to the right?
+\answer Extend the data by the numbers at the end of each row, and
+ copy the last row also on top.
+\beginverbatim
+\bdata%
+*ABCDEFGH*
+8 * * * *8
+7* * * * 7
+6 * * * *6
+5* * * * 5
+4 * * * *4
+3* * * * 3
+2 * * * *2
+1* * * * 1
+*ABCDEFGH*
+\edata
+!endverbatim
+
+\exercise How can we diminish the ^{optical illusion}
+ of the border?
+\answer Make the border thicker. For example via
+ |\boxit{\boxit{\sol}}|. Why don't you develop a nice border macro?
+
+\exercise How can we add pieces to the board?
+\answer Chess pieces are available in a font. Similar to the letters in the
+ solution of the crosswords we can put in pieces. For example let us
+ assume for simplicity's sake that K denotes the white king then
+ the following yields the requested result.
+\beginverbatim
+\begincrosswords
+\obeyspaces\let =\space
+\csize=3ex
+\bdata%
+8 * * * *
+7* * * *
+6 * * * *
+5* * * *
+4 *K* * *
+3* * * *
+2 * * * *
+1* * * *
+*ABCDEFGH
+\edata
+\boxit{\boxit{\sol}}
+\endcrosswords
+!endverbatim
+
+%blank line is needed, to close answer.
+The above entails that we are on the way to generate any board and
+just add the pieces, all based on the crosswords macro approach.
+
+\blueexample Optical illusion
+
+Again a nice application of the use of ^|\leaders|,\ftn{For \cs{soto} and
+ and \cs{sot} see the script file.}
+horizontally and vertically. When I submitted my crosswords macro to \TUB{}
+it was refused because of the wiggling of the frame!?! There the similar
+effect is on with neighbouring black and white squares.
+The black squares look smaller than the white squares,
+yielding a ^{wiggling illusion}.
+
+\newdimen\unitlength \unitlength5ex
+\newbox\soto\setbox\soto\vbox{\hrule height1exwidth5ex\relax
+ \hbox to5ex{\vrule width1exdepth0pt\relax
+ \hss\vrule height3exwidth1exdepth0pt}%
+ \hrule height1exwidth5ex\relax}
+{\newdimen\unitlength \unitlength5ex
+\newbox\sot
+\setbox\sot\vbox to\unitlength{\vss
+ \hbox to\unitlength{\hss
+ \vrule height.6\unitlength
+ width.6\unitlength
+ depth0pt\hss}%
+ \vss}
+
+\smallskip
+\begindemo
+\boxit{\vbox{\leaders\vbox{%
+ \offinterlineskip\hbox{\leaders
+ \hbox{\copy\soto\copy\sot}%
+ \hskip30ex}%
+ \hbox{\leaders
+ \hbox{\copy\sot\copy\soto}%
+ \hskip30ex}}%
+ \vskip30ex}}
+!yields
+\boxit{\vbox{\leaders\vbox{\offinterlineskip
+ \hbox{\leaders\hbox{\copy\soto\copy\sot}\hskip30ex}%
+ \hbox{\leaders\hbox{\copy\sot\copy\soto}\hskip30ex}}%
+ \vskip30ex}}
+\enddemo
+
+\blueexample Soto's kinetic art
+
+\begindemo
+\leavevmode
+%background
+\hbox{\xleaders\hbox to.5ex{\hss
+ \vrule height6\unitlength\hss
+ }\hskip6\unitlength
+ }\kern-6\unitlength
+%the squares
+\boxit{\vbox{\offinterlineskip
+ \leaders\hbox{\leaders\copy\sot
+ \hskip6\unitlength
+ }\vskip6\unitlength}}
+!yields
+\leavevmode
+\hbox{\xleaders\hbox to.5ex{\hss
+ \vrule height6\unitlength\relax\hss
+ }\hskip6\unitlength}\kern-6\unitlength
+%the squares
+\boxit{\vbox{\offinterlineskip
+ \leaders\hbox{\leaders\copy\sot
+ \hskip6\unitlength}\vskip6\unitlength}}
+\enddemo
+}
+
+\blueexample Row and/or column spans, partial horizontal rules
+
+^^{row\ and\ column\ spans}
+%Fill-in form bridge
+\nonruled\ctr\framed \def\rowstblst{}
+{\small%\defaults
+\newcount\bcnt
+\def\lines{\global\advance\bcnt by1 \ifnum\bcnt=3 et cetera\hidewidth
+ \senil\fi\the\bcnt.\cs\cs\cs\cs\cs\cs\rs\lines}
+\def\senil#1\lines{\fi}
+\thisbtable{
+\def\ghostrow{\omit\colsepsurround%
+ \vbox to0pt{\vss\hbox to5ex{\hss Pair\hss}\vskip.5ex
+ \hbox to5ex{\hss No\hss}\vss}\prs\logms2\lineglue\srp
+ \vbox to0pt{\vss\hbox to5ex{\hss Re-\hss}\vskip.5ex
+ \hbox to5ex{\hss sults\hss}\vss}\prs\logms2\lineglue\srp
+ \vbox to0pt{\vss\hbox to15ex{\hss Game \dots\hss}\vskip1.5ex
+ \hbox to15ex{\hss MP$\,$s\hss}\vss}\colsepsurround\cr}
+\def\header{\cs\logms2\hfil Contract\hfil\cs
+ \cs\logms2\hfil Scores\hfil\cs\grs
+ \cs N--S\cs E--W\cs\cs N--S\cs E--W\cs}
+}
+$$ \framed\ruled\btable\lines$$
+}%end scope
+\beginverbatim
+\newcount\bcnt
+\def\lines{\global\advance\bcnt by1 \ifnum\bcnt=3 et cetera\hidewidth
+ \senil\fi\the\bcnt.\cs\cs\cs\cs\cs\cs\rs\lines}
+\def\senil#1\lines{\fi}
+\thisbtable{
+\def\ghostrow{\omit\colsepsurround%
+ \vbox to0pt{\vss\hbox to5ex{\hss Pair\hss}\vskip.5ex
+ \hbox to5ex{\hss No\hss}\vss}\prs\logms2\lineglue\srp
+ \vbox to0pt{\vss\hbox to5ex{\hss Re-\hss}\vskip.5ex
+ \hbox to5ex{\hss sults\hss}\vss}\prs\logms2\lineglue\srp
+ \vbox to0pt{\vss\hbox to15ex{\hss Game \dots\hss}\vskip1.5ex
+ \hbox to15ex{\hss MP$\,$s\hss}\vss}\colsepsurround\cr}
+\def\header{\cs\logms2\hfil Contract\hfil\cs
+ \cs\logms2\hfil Scores\hfil\cs\grs
+ \cs N--S\cs E--W\cs\cs N--S\cs E--W\cs}
+}
+$$ \framed\ruled\btable\lines$$
+!endverbatim
+\exercise How many rows does the header have?
+\answer Descriptive {\oldstyle1}, visual {\oldstyle2}, and for
+ plain \TeX\ formatting {\oldstyle3}.
+ It is all a matter of point of view.
+
+\exercise The above ^{recursive markup} of the data is elegant, especially
+ when the table is large.
+ Simplify the markup by abandoning the independence of size,
+ i.e., provide the data explicitly instead of recursively.
+\answer The `data' can be defined as follows.
+\beginverbatim
+\def\data{1.\cs\cs\cs\cs\cs\cs\rs
+ 2.\cs\cs\cs\cs\cs\cs\rs
+ et cetera\hidewidth}
+!endverbatim
+
+\blueexample Bridge pair match scheme, with special `first' element
+
+$$\def\first{\thispicture{\unitlength=6ex \xdim{1.4}\ydim{1}}%
+ \lower1.5ex\hbox\beginpicture%(1.4, 1)(0,-.1)
+ \put( 0.0, 0.0){\small \strut Round}%
+ \put( 1.4, 0.575){\llap{\small Game}}%
+ \put( 1.4, 0.1){\line(-2, 1){1.4}}%
+\endpicture\lower2ex\null}
+\def\header{%
+ 1--3 \cs 4--6 \cs 7--9 \cs 10--12\cs13--15\cs 16--18 \cs 19--21}
+\def\rowstblst{{1.}{2.}{et cetera}}
+\def\data{%
+1--2 \cs \cs \cs2: 3--4\cs \cs3: 5--6 \cs4: 7--8\rs
+4: 8--3\cs1: 1--6\cs \cs \cs2: 5--7 \cs \cs3: 2--4\rs
+ %\cs \cs \cs \cs \cs \cs \rs
+}
+\framed\ruled\btable\data
+$$via
+\beginverbatim
+\def\first{\thispicture{\unitlength=6ex\xdim{1.4}\ydim{1}}%
+ \lower1.5ex\hbox\beginpicture%(1.5, 1)(0,-.1)
+ \put( 0.0, 0.0){\small \strut Round}%
+ \put( 1.4, 0.575){\llap{\small Game}}%
+ \put( 1.4, 0.1){\line(-2, 1){1.4}}%
+\endpicture
+\lower2ex\null
+}
+\def\header{%
+ 1--3 \cs 4--6 \cs 7--9 \cs 10--12\cs13--15\cs 16--18 \cs 19--21}
+\def\rowstblst{{1.}{2.}{et cetera}}
+\def\data{%
+1--2 \cs \cs \cs2: 3--4\cs \cs3: 5--6 \cs4: 7--8\rs
+4: 8--3\cs1: 1--6\cs \cs \cs2: 5--7 \cs \cs3: 2--4\rs
+ %\cs \cs \cs \cs \cs \cs \rs
+}
+\framed\ruled\btable\data
+!endverbatim
+Remark. The need for centering the first row is induced by
+\cs{first}. It is elegant to solve the problem for that in ^|\first|.
+
+\exercise How can we center the numbers in the first column?
+\answer Add \cs{hfil} in the \cs{rowstblst} via
+ \beginverbatim
+ \def\rowstblst{{\hfil1.}{\hfil2.}{et cetera}}
+ !endverbatim
+ Another solution is the following template
+ \beginverbatim
+ \def\template{\colsepsurround\hfil##\hfil&&\lft##\rgt\cr}
+ !endverbatim
+
+\blueexample Alignment at decimal points
+
+Generally this is done by introducing an extra column for the dot,
+and flushing right the digits left and
+flushing left the digits right of it.
+It comes from the wish not to print
+non-significant leading zeroes, and to suppress
+zeroes behind the point for exact numbers.
+{\oldstyle3}.{\oldstyle5} means exactly 3${1\over2}$.
+{\oldstyle3}.{\oldstyle500} means accurate to three digits.
+I would mark up the numbers separately and
+insert Knuth's `?', \TB{} {\oldstyle240}\dash{\oldstyle241},
+for non-signicant zeroes, automatically.
+The latter can also be done by programming the editor by a template
+consisting of sufficient ?-s followed by the decimal point.
+The numbers required can be brought in by overtyping
+the template.
+Related to ^{alignment at decimal point}s is
+ ^{alignment at number sign}s,\ftn{Another column for the signs
+ offends the structure.
+ At a lower level one could think of {\tt\char92scs},
+ a Sign Column Separator, but that is not nice either.}
+see the AAP table.
+
+\blueexample Nested table
+
+A ruled table with unruled tables as data is incorporated in the chapter
+`Creating an index,' to illustrate the ordering choices. See the script.
+
+^^{nested table}
+\blueexample Nested, and interrupted table with updating of memory
+
+From the user level one would say:
+aligned material connected by text, where the latter
+in the case at hand is the status of the play.
+For the markup see the script.
+
+\beginbridge
+{\small
+%bridge data
+\def\LFTINF{Puzzle}
+\def\RGTINF{\vtop{\hbox{6NT,}
+ \hbox{by East}}}
+%
+\Ns={KQ76}\Es={T9}\Ss={8542}\Ws={AJ3}
+\Nh={J98} \Eh={A2}\Sh={QT74}\Wh={K653}
+\Nd={J942}\Ed={T5}\Sd={Q876}\Wd={AK3}
+\Nc={65}\Ec={KJ9xxxx}\Sc={2}\Wc={AQT}
+\showgame
+\LEADS\bplay
+h4! & hK & h8 & h2 & --& 1\LEADW\cr
+cA & c5 & cx & c2 & --& 2\cr
+cQ & c6 & cx & s2 & --& 3\cr
+cT & h9 & cK & s4 & --& 4\LEADE\cr
+cJ & s5 & s3 & s6 & --& 5\cr
+c9 & s8 & h5 & s7 & --& 6\cr
+cx & d6 & sJ & d2 & --& 7\cr
+\bintermezzo
+\def\RGTINF{\vtop{\hbox to 0pt{NS squeezed on\hss}
+ \hbox to 0pt{\cl\ continuation?\hss}
+ \hbox to 7ex{\hss}}} %phantom for alignment
+\Ec={{\ooalign{\hfil\raise.07ex%
+ \hbox{x}\hfil\crcr\mathhexbox20D}}}
+\showgame \Ec={x}
+\eintermezzo
+cx & h7 & h6 & hJ & --& 8\cr
+\omit et cetera \hidewidth \cr
+\eplay
+}%end of scope
+\endbridge
+
+Tables which also require updating of memory
+occur with typesetting of chess,
+for example Tutelaers {\oldstyle1992}, or
+GO, Ko{\l}odziejska {\oldstyle1991}.
+
+\blueexample Fill-in forms
+
+The registration forms for the various \TeX{} conferences are captivating.
+Now and then I ponder about the
+e-mail equivalents of the traditional snail forms, especially what
+(and how they) should be filled in.
+Redefine a list of empty definitions?
+
+\blueexample Time tables
+
+Railway, bus, \dots\thinspace, and the use of rotated fonts.
+This is a \PS{} issue.
+
+\blueexample No markup
+
+For simple tables the data can be specified {\em without\/}
+\cs{cs}-s, and \cs{rs}-s,
+i.e., without explicit markers for column and row separators.
+These can be inserted by \TeX, see \TB{} {\oldstyle249}.
+For special cases, for example centering texts\ftn{See the implementation
+ of \cs{center} in the file.}
+and crosswords, this is handy. ^^{no markup}
+
+\thissubhead{\runintrue}
+\bluesubhead Pondering about lists\par makes you realize that the table proper data forms
+a nested list with \cs{rs} and \cs{cs}, respectively first level
+and second level separators. One could also adopt |<cr>|
+and {\tt\char32} for that, in other words allow natural data provision.
+
+\blueexample Simultaneous row spans
+
+Simultaneous column spans can be marked up in \cs{btable} by
+\cs{logms}---for logical columns,
+as an extension to \cs{multispan} for \cs{halign}. ^^{row\ spans}
+For row spans start from \cs{valign}, the transposition of \cs{halign}.
+A little more than the analogy of transposition is needed.
+From the \TeX-nl list the following example of spans over rows.
+\begindemo
+\hbox{\vrule\valign{&\hrule\vfil
+ \noindent\hsize15ex\strut
+ \xsp#\xsp\vfil\hrule\cr
+\multispan3{\hrule\vfil
+ \vbox{\noindent\hsize15ex\strut
+ \xsp This\\
+ \xsp looks\\
+ \xsp problematic}}\vfil
+ \hrule&
+ Doesn't it?\cr
+\noalign{\vrule}
+\hfill22 &%space needed
+\hfill12 &
+\hfill1943 &
+\hfill190 \cr}\vrule}
+%with auxiliary
+\def\xsp{\hbox{ }}
+!yields
+\def\xsp{\hbox{ }}
+\hbox{\vrule\valign{&\hrule\vfil
+ \noindent\hsize15ex\strut
+ \xsp#\xsp\vfil\hrule\cr
+\multispan3{\hrule\vfil
+ \vbox{\noindent\hsize15ex\strut
+ \xsp This\\
+ \xsp looks\\
+ \xsp problematic}}\vfil
+ \hrule&
+ Doesn't it?\cr
+\noalign{\vrule}
+\hfill22 &%space needed
+\hfill12 &
+\hfill1943 &
+\hfill190 \cr}\vrule}
+\enddemo
+As can be seen from this difficult example, we have to fall back
+on lower level details now and then.
+\exercise Modify the above towards a ^|\vtable| macro, such that we can use
+ the attributes \cs{ruled}, \cs{vruled}, \cs{hruled}, with
+ default \cs{nonruled}, and \cs{framed} and \cs{nonframed}.^^|\valign|
+\answer As a parameter I provided the \cs{hsize} of the table entries.
+ For row spans the \cs{logms}, logical multispan, has been used,
+ similar as for \cs{btable}.
+\beginverbatim
+\def\xsp{\hbox{ }}
+\def\vruled{\def\colsep{\vrule}\def\rowsep{}}
+\def\hruled{\def\colsep{}\def\rowsep{\hrule}}
+\def\ruled{\def\colsep{\vrule}\def\rowsep{\hrule}}
+\def\nonruled{\def\colsep{}\def\rowsep{}}
+\def\framed{\let\frameit\boxit}
+\def\nonframed{\def\frameit##1{##1}}
+\def\rs{&\null\rowsepsurround\rowsep\rowsepsurround&}
+\def\cs{\lcs\noalign{\colsep}}
+\def\lcs{\rowsepsurround\cr}
+\def\top{\null\vskip.5em}
+\def\bot{\vskip.5em}
+\def\ctr{\def\lft{\hfil}}
+\def\fll{\def\lft{}}
+\def\flr{\def\lft{\hfill}}
+%Macro
+\def\vtable#1{\frameit{\hbox{\valign{\top\noindent
+ \hsize#1\lft##\bot
+ &&##&\hsize#1\top\noindent\lft##\bot\cr
+ \data}}}}
+%Defaults
+\nonframed\nonruled\ctr
+\def\rowsepsurround{\vskip.1ex}
+%Examples
+\def\data{1 \rs 2\rs 3\cs
+ 4 \rs 5\rs 6\cs
+ 314\rs271\rs \lcs}
+\vtable{7ex}
+\smallskip
+\def\data{\logms3{\hsize7ex\null
+\vfil\noindent\hfil1\hfil\vfil}\cs
+ C\rs G\rs L\cs
+ 22\rs12\rs1943\lcs}
+\ruled\vtable{7ex}
+\smallskip
+\def\data{\logms3{\hsize15ex\null
+\vfil\noindent\xsp This\\
+ \xsp looks\\
+ \xsp problematik\vfil}\cs
+ O\rs A\rs G\cs
+ 16\rs11\rs1954\lcs}
+\framed\ruled\vtable{5ex}
+!endverbatim
+
+%end answer
+\blueexample Macroscopic markup vtable, based on valign
+
+{%Example with macroscopic \vtable markup
+\def\xsp{\hbox{ }}
+\def\vruled{\def\colsep{\vrule}\def\rowsep{}}
+\def\hruled{\def\colsep{}\def\rowsep{\hrule}}
+\def\ruled{\def\colsep{\vrule}\def\rowsep{\hrule}}
+\def\nonruled{\def\colsep{}\def\rowsep{}}
+\def\framed{\let\frameit\boxit}
+\def\nonframed{\def\frameit##1{##1}}
+\def\rs{&\null\rowsepsurround\rowsep\rowsepsurround&}
+\def\cs{\lcs\noalign{\colsep}}
+\def\lcs{\rowsepsurround\cr}
+\def\top{\null\vskip.5em}
+\def\bot{\vskip.5em}
+\def\ctr{\def\lft{\hfil}}
+\def\fll{\def\lft{}}
+\def\flr{\def\lft{\hfill}}
+%Macro
+\def\vtable#1{\frameit{\hbox{\valign{\top\noindent
+ \hsize#1\lft##\bot
+ &&##&\hsize#1\top\noindent\lft##\bot\cr
+ \data}}}}
+%Defaults
+\nonframed\nonruled\ctr
+\def\rowsepsurround{\vskip.1ex}
+\begindemo
+\def\data{\logms3{\hsize15ex
+ \vfil\noindent\xsp This\\
+ \xsp looks\\
+ \xsp problematic
+ \vfil}\rs\omit\hsize15ex
+ \vfil\noindent
+ \xsp Doesn't it?\vfil\cs
+ O\rs A\rs G\rs 189\cs
+ \rs 16\rs11\rs1954\lcs}
+\framed\ruled\vtable{5ex}
+!yields
+\def\data{\logms3{\hsize15ex
+ \vfil\noindent\xsp This\\
+ \xsp looks\\
+ \xsp problematic
+\vfil}\rs
+\omit\hsize15ex\vfil\noindent
+ \xsp Doesn't it?\vfil\cs
+ O\rs A\rs G\rs \cs
+ \rs16\rs11\rs1954\lcs}
+\framed\ruled\vtable{5ex}
+\enddemo}
+
+\blueexample Regular use vtable based on valign
+
+{\begindemo
+\def\vtable#1{\frameit{\hbox
+ {\valign{\top\noindent
+ \hsize#1\lft##\bot
+ &&##&\hsize#1\top
+ \noindent\lft
+ ##\bot\cr
+ \data}}}}
+\def\data{anatoly\rs
+ andre\rs
+ alex
+ \cs
+ beatrici\rs
+ bernd\lcs}
+\nonframed\vtable{20ex}
+!yields
+\def\vruled{\def\colsep{\vrule}\def\rowsep{}}
+\def\hruled{\def\colsep{}\def\rowsep{\hrule}}
+\def\ruled{\def\colsep{\vrule}\def\rowsep{\hrule}}
+\def\nonruled{\def\colsep{}\def\rowsep{}}
+\def\framed{\let\frameit\boxit}
+\def\nonframed{\def\frameit##1{##1}}
+\def\rs{&\null\rowsepsurround\rowsep\rowsepsurround&}
+\def\cs{\lcs\noalign{\colsep}}
+\def\lcs{\rowsepsurround\cr}
+\def\top{\null\vskip.1em}
+\def\bot{\vskip.1em}
+\def\ctr{\def\lft{\hfil}}
+\def\fll{\def\lft{}}
+\def\flr{\def\lft{\hfill}}
+%
+\def\rowsepsurround{\vskip.1ex}
+%
+\def\vtable#1{\frameit{\hbox
+ {\valign{\top\noindent
+ \hsize#1\lft##\bot
+ &&##&\hsize#1\top
+ \noindent\lft
+ ##\bot\cr
+ \data}}}}
+\def\data{anatoly\rs
+ andre\rs
+ alex
+ \cs
+ beatrici\rs
+ bernd\lcs}
+\nonframed\vtable{20ex}
+\enddemo}
+The advantage of \cs{valign} for this case is that when a name is
+inserted in a column that column can grow without
+adaptation of the markup for the other cells.
+
+\blueexample Simultaneous row and column spans
+
+These require more work. ^^{row\ and\ column\ spans}
+\newbox\block
+\setbox\block=\hbox{$2*3$}
+\def\data{\logms3\cs14\grs
+ \logms3\cs24\rs
+ 31\cs32\cs33\cs34}
+\def\btablecaption{Caption}
+\def\rowstblst{{row 1}{row 2}{\hfil
+ $\Rightarrow$}}
+\def\header{\logms4 Header\hfil$\Downarrow$}
+\def\footer{Footer}
+\thisbtable{\def\ghostrow{\ifx\empty\rowstblst
+ \else\omit\lineglue\ea\srp\fi
+ \logms3\hfil\vbox to0pt{\vss
+ \copy\block\vss}\hfil\prs\lineglue\cr\nxtrs}
+}
+$$\vcenter{\framed\ruled\btable\data}
+\qquad\qquad
+%\setbox\block=\hbox{$3*3$}
+\def\data{\logms3\hfil\cs14\grs
+\logms3\hfil$3*3$\hfil\cs24\grs
+ \logms3\hfil\cs34\rs
+ 41\cs42\cs43\cs44}
+\thisbtable{\def\ghostrow{\ifx\empty\rowstblst
+ \else\omit\lineglue\ea\srp\fi
+ \logms3\hfil\prs\lineglue\cr
+ \ifx\empty\rowstblst\else\ea\nxtrs\fi}}
+\def\btablecaption{Caption}
+\def\header{\logms4 Header\hfil$\Downarrow$\ }
+\def\rowstblst{{row 1}{row 2}{row 3}{\hfil$\Rightarrow$}}
+\def\footer{Footer}
+\vcenter{\ruled\framed\btable\data}
+$$
+\exercise How to markup the above with simultaneous row and column spans?
+\answer Because of the separation of concerns we only have to concentrate
+ on the data. My approach is to look at a block\Dash here $2{*}3$\Dash
+ as a ghost to be overprinted.
+ A natural way is to introduce the concept of a ghostrow,
+ which will be invoked by the ghostrow separator \cs{grs}.
+ So first mark up for the data with the hole in the table and
+ include the \cs{grs}. Then provide \cs{ghostrow}.
+ In order to do the latter gracefully,
+ we also need the concept of partial row separator, \cs{prs},
+ and its mirror, \cs{srp}, to handle partial lines.
+ \beginverbatim
+ \setbox\block=\hbox{$2*3$}
+ \def\data{\logms3\cs14\grs
+ \logms3\cs24\rs
+ 31\cs32\cs33\cs34}
+ \def\btablecaption{Caption}
+ \def\rowstblst{{row 1}{row 2}{\hfil
+ $\Rightarrow$}}
+ \def\header{\logms4 Header\hfil$\Downarrow$}
+ \def\footer{Footer}
+ \thisbtable{\def\ghostrow{\ifx\empty\rowstblst
+ \else\omit\lineglue\ea\srp\fi
+ \logms3\hfil\vbox to0pt{\vss
+ \copy\block\vss}\hfil\prs\lineglue\cr\nxtrs}
+ }\vcenter{\framed\ruled\btable\data}$$
+ %
+ %and the 3*3 block can be obtained via
+ %
+ %\setbox\block=\hbox{$3*3$}
+ \def\data{\logms3\hfil\cs14\grs
+ \logms3\hfil$3*3$\hfil\cs24\grs
+ \logms3\hfil\cs34\rs
+ 41\cs42\cs43\cs44}
+ \thisbtable{\def\ghostrow{\ifx\empty\rowstblst
+ \else\omit\lineglue\ea\srp\fi
+ \logms3\hfil\prs\lineglue\cr
+ \ifx\empty\rowstblst\else\ea\nxtrs\fi}}
+ \def\btablecaption{Caption}
+ \def\header{\logms4 Header\hfil$\Downarrow$\ }
+ \def\rowstblst{{row 1}{row 2}{row 3}{\hfil$\Rightarrow$}}
+ \def\footer{Footer}
+ $$\vcenter{\ruled\framed\btable\data}$$
+ !endverbatim
+
+\begingroup
+\blueexample Gnonoms
+
+In \TUB{} a discussion about the following kind of
+rules within tables\Dash so-called ^{gnonoms}\Dash emerged.
+\newcount\rowno \rowno1
+\thisverbatim{\unmc}
+\begindemo
+\newcount\columnno \columnno1
+\def\data{1\cs3\cs5\rs
+ 1\cs4\cs7\rs
+ 1\cs5\cs9\lrs}
+\def\cs{\hss\vrule\ifnum
+ \columnno<\rowno width0pt\fi\relax
+ &\global\advance\columnno1 }
+\def\rs{\hss\vrule\relax\cr
+ \global\advance\rowno1
+ \global\columnno1 }
+\def\lrs{\hss\vrule\relax\cr}
+\halign{&\vbox to12pt{\hbox to12pt
+ {\hss\strut#}\vss\hrule\ifnum
+ \rowno<\columnno width0pt\fi}\cr
+ \data}
+!yields\offinterlineskip
+\newcount\columnno \columnno1
+\def\data{1\cs3\cs5\rs
+ 1\cs4\cs7\rs
+ 1\cs5\cs9\lrs}
+\def\cs{\hss\vrule\ifnum
+ \columnno<\rowno width0pt\fi\relax
+ &\global\advance\columnno1 }
+\def\rs{\hss\vrule\relax\cr
+ \global\advance\rowno1
+ \global\columnno1 }
+\def\lrs{\hss\vrule\relax\cr}
+$$\vbox{\halign{&\vbox to12pt{\hbox to12pt{\hss\strut#}\vss\hrule
+ \ifnum\rowno<\columnno width0pt\fi\relax}\cr
+ \data}}\qquad\qquad$$
+\enddemo
+%
+%Coding with the deterministic behaviour absorbed, reads as follows.
+\newcount\rowno \rowno1
+\newcount\columnno \columnno1
+\newcount\tnum
+\newcount\diff \diff1
+\newcount\n
+\def\rows{\global\tnum1
+ \global\advance\diff1
+ \cols
+ \ifnum\rowno=\n\lrs\swor\fi
+ \rs\rows}
+\def\swor#1\rows{\fi}
+\def\cols{\the\tnum
+ \global\advance\tnum\diff
+ \ifnum\columnno=\n\sloc\fi
+ \cs\cols}
+\def\sloc#1\cols{\fi}
+\def\cs{\hss\vertrule \ifnum
+ \columnno<\rowno width0pt\fi\relax
+ &\global\advance\columnno1 }
+\def\rs{\hss\vertrule\relax\cr
+ \global\advance\rowno1
+ \global\columnno1 }
+\def\lrs{\hss\vertrule\relax
+ \global\columnno1
+ \global\rowno1
+ \global\diff1 \cr}
+%
+\def\gnonoms#1{\n#1 \offinterlineskip
+\halign{&\vbox to12pt{\hbox to15pt
+ {\hss\strut\oldstyle##}\vss\horrule
+ \ifnum\rowno<\columnno
+ width0pt\fi\relax}\cr
+ \rows}}
+\let\vertrule\vrule
+\let\horrule\hrule
+\exercise Each entry of the table obeys the formula
+ $$entry_{i,j}=2j-1+(i-1)(j-1).$$
+ A little backside of the envelope calculation-\Dash or just
+ look closer at the table\Dash shows
+ that elements in neighbouring columns differ by $i+1$.
+ Format this table as function of the size, i.e.,
+ with the elements generated automatically.
+\answer A solution reads as follows (Similar approach as to Pittman's
+ multiplication tables.)
+\thisverbatim{\unmc}
+\beginverbatim
+\newcount\rowno \rowno1
+\newcount\columnno \columnno1
+\newcount\tnum
+\newcount\diff \diff1
+\newcount\n
+\def\rows{\global\tnum1
+ \global\advance\diff1
+ \cols
+ \ifnum\rowno=\n\lrs\swor\fi
+ \rs\rows}
+\def\swor#1\rows{\fi}
+\def\cols{\the\tnum
+ \global\advance\tnum\diff
+ \ifnum\columnno=\n\sloc\fi
+ \cs\cols}
+\def\sloc#1\cols{\fi}
+\def\cs{\hss\vertrule \ifnum
+ \columnno<\rowno width0pt\fi\relax
+ &\global\advance\columnno1 }
+\def\rs{\hss\vertrule\relax\cr
+ \global\advance\rowno1
+ \global\columnno1 }
+\def\lrs{\hss\vertrule\relax
+ \global\columnno1
+ \global\rowno1
+ \global\diff1 \cr}
+%
+\def\gnonoms#1{\n#1 \offinterlineskip
+\halign{&\vbox to12pt{\hbox to15pt
+ {\hss\strut\oldstyle##}\vss\horrule
+ \ifnum\rowno<\columnno
+ width0pt\fi\relax}\cr
+ \rows}}
+\let\vertrule\vrule
+\let\horrule\hrule
+$$\vtop{\gnonoms2}\qquad
+ \vtop{\gnonoms5}\qquad
+ \vtop{\gnonoms{10}}$$
+\bye
+!endverbatim
+
+\exercise Playing longer with the gnonoms can yield the following
+ graphical results. Modify the above in order to obtain this
+ graph.
+\def\vertrule{\vrule width1ex}
+\def\horrule{\hrule height 1ex}
+\def\cols{\ifnum\columnno=\n\sloc\fi
+ \cs\cols}
+$$\vtop{\gnonoms3}\qquad
+ \vtop{\gnonoms5}\qquad
+ \vtop{\gnonoms{7}}$$
+\answer The following redefinitions yield the results.
+\beginverbatim
+\def\vertrule{\vrule width1ex}
+\def\horrule{\hrule height 1ex}
+\def\cols{\ifnum\columnno=\n\sloc\fi
+ \cs\cols}
+$$\vtop{\gnonoms3}\qquad
+ \vtop{\gnonoms5}\qquad
+ \vtop{\gnonoms7}$$
+!endverbatim
+
+\endgroup
+
+\bluesubhead Font charts
+
+Font tables can be formatted via
+^|\beginchart| and |\endchart|.
+This markup is used in \TB{} {\oldstyle468}--{\oldstyle526},
+for the font tables of the Appendices C and F, and
+in {\tt testfont.tex}, which comes along with \MF.
+
+\blueexample ASCII table, \TB{} {\oldstyle367}
+
+\beginverbatim
+\beginchart{\global\count@='41\tentt
+ \def\chartstrut{\lower4.3pt\vbox to13.6pt{}}}
+&\oct{00x}&&NUL&&SOH&&STX&&ETX&&EOT&&ENQ&&ACK&&BEL&&\oddline0
+&\oct{03x}&&CAN&&EM&&SUB&&ESC&&FS&&GS&&RS&&US&\evenline
+&\oct{04x}&&SP&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline2
+&\oct{05x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline
+\noalign{\vskip2ex\line{\hfil et cetera\hfil}
+ \vskip2.5ex\hrule
+ \global\advance\count@ 64 }
+&\oct{16x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline7
+&\oct{17x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&DEL&\evenline
+\endchart
+!endverbatim
+resulting in the partial ASCII table
+{\catcode`\@=11
+\beginchart{\global\count@='41\postdisplaypenalty=0 \tentt
+ \def\chartstrut{\lower4.3pt\vbox to13.6pt{}}}
+&\oct{00x}&&NUL&&SOH&&STX&&ETX&&EOT&&ENQ&&ACK&&BEL&&\oddline0
+&\oct{03x}&&CAN&&EM&&SUB&&ESC&&FS&&GS&&RS&&US&\evenline
+&\oct{04x}&&SP&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline2
+&\oct{05x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline
+\noalign{\vskip2ex\line{\hfil et cetera\hfil}
+ \vskip2.5ex\hrule\global\advance\count@ 64 }
+&\oct{16x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline7
+&\oct{17x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&DEL&\evenline
+\endchart
+}
+
+%Blank line is needed
+\bluesubsubhead Why bother about font charts?
+
+Well, \dots\thinspace a lot can be learned from \cs{beginchart}
+for the markup of classes of tables.
+
+\bitem Font charts belong to the class of bordered tables
+\bitem the template is hidden from the user
+\bitem the data can be provided separately and processed on the fly
+\bitem the default value of \cs{displaypenalty} can be redefined
+ via \cs{displaypenalty} |<number>| as argument of
+ \cs{beginchart}
+\bitem \cs{beginchart} is parameterized over the fonts
+\bitem ^|\normalchart| keeps automatically track of the positions
+ in the font chart.
+\smallbreak
+In short, the macros show how
+\bitem to mark up classes of tables
+\bitem to hide an \cs{halign} template
+\bitem to use two-part macros
+\bitem to cope with options and defaults
+\bitem to parameterize over fonts, and
+\bitem to minimize markup.
+\smallbreak
+
+\blueexample Markup for Appendix F {\oldstyle427}\dash{\oldstyle432}
+
+\beginverbatim
+\beginchart{\postdisplaypenalty=0 \tenrm}
+ %or \tenit, \tentt, \tenit, \tensy, \tenex
+ \normalchart
+\endchart
+!endverbatim
+resulting in, for the ^{font chart} \cs{tenrm}
+\beginchart{\postdisplaypenalty=0 \tenrm}
+ \normalchart
+\endchart
+\noindent The default value of \cs{postdisplaypenalty} is -{\oldstyle10000},
+to enforce a page break.
+
+\exercise How can we get a print of \LaTeX's ^{line\ font}s?
+ Why don't you print ^|\oldstyle| too, just for the fun of it?
+\answer Similarly, as follows.
+\beginverbatim
+\font\tenln=line10
+\font\tenlnw=linew10
+\beginchart{\postdisplaypenalty=0
+ \tenln}
+ \normalchart
+\endchart
+\beginchart\tenlnw
+ \normalchart
+\endchart
+!endverbatim
+
+%end of answer
+
+The argument of \cs{beginchart} is used among other things to control
+the kind of table: \cs{tenrm}, \cs{tenit}, \cs{tentt},
+ \cs{teni}, \cs{tensy}, or \cs{tenex}.
+The data for normal font tables is provided via |\def\normalchart{...}|.
+As a consequence the markup for the
+other tables in \TB{} Appendix F is surprisingly simple.
+\exercise How come that Knuth decided to implement an ordinary argument
+ after \cs{beginchart}? If you look at \cs{begindisplay}
+ nearly the same coding structure is used, but there the argument is
+ optional. Subtle, very subtle these coding schemes.
+\answer There is no much use in providing an optional one.
+ The font is needed and {\sl must\/} be specified.
+
+%end answer
+\bluesubhead Ordering table for indexing
+
+The most curious of all tables is not a table but generated
+each time. ^^{ordering table}
+\thisverbatim{\catcode`\|=12 \catcode`\!=12 \catcode`\~=0 }
+\begincenterverbatim
+\def\otindex{%Parameters: Ordering `table'
+\ea\chardef\csname ot \endcsname=0
+%Bulk according to ASCII
+\def\process##1{\ea\chardef
+ \csname ot##1\endcsname=`##1 }
+%
+\fifo abcdefghijklmnopqrstuvwxyz\ofif
+\chardef\otij=`y \chardef\otIJ=`y
+%
+\fifo!"##$&'()*+,-./0123456789:;<=>?@
+ []_`\ofif
+%
+\def\process##1{\ea\chardef
+ \csname ot##1\endcsname=\lccode`##1 }
+\uppercase{\fifo
+ abcdefghijklmnopqrstuvwxyz\ofif}}
+~endcenterverbatim
+%Back to defaults
+\def\header{}\def\rowstblst{}\def\btablecaption{}\def\first{}\def\footer{}
+\endinput \ No newline at end of file
diff --git a/info/laan/pwt/pwt.tls b/info/laan/pwt/pwt.tls
new file mode 100644
index 0000000000..62a1be6840
--- /dev/null
+++ b/info/laan/pwt/pwt.tls
@@ -0,0 +1,365 @@
+\input blue.tex \loadindexmacros \report
+
+\bluechapter Tools
+
+\beginsummary
+BLUe's format comprises tools.dat, a database of tools,
+available at your fingertips, which doesn't hinder when not needed.
+\endsummary
+
+At the moment tools.dat, the database of tools, contains macros for
+typesetting
+bridge,
+crosswords,
+the tower of hanoi game,
+creation of an index (and in there sorting macros),
+ntglogo,
+Pascal, and
+xyz-axes.
+Most likely this database will grow.
+
+\bluehead Use
+
+Nobody would be surprised to hear that the ease of use of a tool
+has all to do with the tool's jargon as implemented by its author.
+However, how to access the tool is also important, and we would
+love a uniform approach to that, wouldn't we?
+Alas, consistency at the outer level\Dash how the tools can be
+accessed from the database tools.dat\Dash is too heavy a demand,
+as can be seen from the index tool in relation with the other tools.
+The tools are just too varied. ^^{database,\ tools.dat}
+
+\bluesubhead Adding a tool
+
+First we have to decide what it is that we like to add.
+A format? A picture? Or just a tool?
+I had to add the \cs{xyz} picture to tools.dat, because it is not a format
+and it does not obey the syntax of pic.dat entries, although
+it looks like a picture in print to me.\ftn{Remember that the entries
+ in the address.dat, lit.dat, and pic.dat database obey the syntax
+ |\lst\<name>{| |<replacement text>}|.}
+
+The entries of fmt.dat and tools.dat obey the syntax ^^{entry\ for\ tools.dat}
+\begincenterverbatim
+\tool\<name>fmt \tool\<name>tool
+... or ...
+\endinput \endinput
+!endcenterverbatim
+
+
+To ^{add\ a\ tool} the following has to be done.
+\bitem separate the storage-allocating
+ control sequences from the tool,
+ i.e., treat \cs{newtoks} and the like separately
+\bitem add the storage-allocating control sequences to \bluetex
+\bitem add the tool as a definition to tools.dat
+\bitem add a load macro to \bluetex.
+\smallbreak
+\blueexample Add xyz macro to tools.dat
+
+Suppose we wish to use the \cs{xyz} macro (with three arguments).
+What to do?
+The use could simply be \cs{loadxyz}, followed by the invocation
+|\xyz{...}{...}{...}|.
+
+In order to make this possible, I have added to tools.dat
+\begincenterverbatim
+\tool\xyztool
+\def\xyz#1#2#3{%the macro
+...}
+\endinput
+!endcenterverbatim
+and to \bluetex
+\begincenterverbatim
+\def\loadxyz{\let\xyztool=x
+ \loadtool
+ \let\xyztool\undefined}
+!endcenterverbatim
+Confusing, isn't it?
+
+\blueexample Add an environment to tools.dat
+
+Suppose we wish to make use of the environment
+\begincenterverbatim
+\begin<yourtoolname>
+...
+\end<yourtoolname>
+!endcenterverbatim
+In order to make this possible we have to do several things.
+First, add to tools.dat the following `file'
+\begincenterverbatim
+\tool\<yourtoolname>tool%Opening
+<themacros>
+\endinput %Closing
+!endcenterverbatim
+Second, include in \bluetex{} the environment opening and closing,
+next to the needed allocations
+\thisverbatim{\catcode`\|=12
+ \catcode`\!=12
+ \catcode`\~=0
+ }
+\begincenterverbatim
+%Tool environment macro
+\def\begin<yourtoolname>{\begingroup
+ \let\end<yourtoolname>\endgroup
+ \let\<yourtoolname>tool=x
+ \loadtool
+}
+%storage allocation
+\new<type>\<name>
+%<type> is box count dimen fam
+% insert language skip
+% muskip read toks write
+etc.
+~endcenterverbatim
+Fourth, verify the data integrity. (See later.)
+
+There are a few restrictions on the macros, as a consequence
+of the skipping technique used, i.e.,
+via \TeX's argument-reading mechanism.
+\bitem no outer defs, i.e, \cs{newtoks} and the like, should
+ be declared in regular \bluetex
+\bitem no \cs{par}, use \cs{endgraf}, or |\csname par\endcsname|.
+\smallbreak
+Remarks.
+The restriction with respect to your outer defs can be circumvented by
+\bitem defining all macros non-outer, or
+\bitem using |\csname newtoks\endcsname\<tag>|, or
+\bitem extending \cs{unouterdefs} by your outer defs, i.e.,
+ including \cs{newtoks}, and similars. When these are
+ part of the format or tool, multiple use
+ reallocates memory, and because \TeX{}
+ lacks a garbage collector this will cost extra
+ memory locations
+\bitem sometimes a different macro name for \bluetex{} is needed, such as
+ the index tool.
+\smallbreak
+The \cs{tool} macro accepts any |<yourtoolname>|
+
+\bluesubhead And what about double loading?
+
+At the moment it is printed in the log file, whenever a tool is loaded.
+Sometimes we wish to load a tool anew, for example the pascal
+environment.
+The index tool is only loaded once.\ftn{Very handy when after
+ having proofed chapters with an index generated on the fly,
+ we don't have to delete the \cs{loadindexmacros} tag in the chapters.}
+A load counter is maintained to control this.
+
+\bluesubhead Check for data integrity
+
+After a tool has been added one can check whether the file can be scanned by
+\TeX{} via making a table of contents as follows.
+\begincenterverbatim
+\input blue.tex
+\contentstoolsorfmt{tools}
+\bye
+!endcenterverbatim
+This script produces no pages of output (that is OK).
+The file contentstools will be created though.
+
+\bluesubhead Verbatim listing of a tool
+
+This problem is induced by my multi-file approach. Of course
+one can extract the tool by an editor et cetera as alternative.
+
+\blueexample Verbatim listing of macros of pascaltool
+
+\begincenterverbatim
+\input blue.tex \let\pascaltool=x
+\long\def\tool#1{\ifx#1\undefined\bgroup\unouterdefs\ea\gobbletool
+ \else\ea\toolverbatim\fi}
+%\def\toolverbatim{\thisverbatim{\baselineskip12pt plus2pt minus1pt
+% \lineskip1pt plus1pt minus1pt}\beginverbatim}
+\def\cgl;newcol{\endverbatim\endinput}
+\input tools.dat \bye
+!endcenterverbatim
+
+\thissubhead{\runintrue}
+\bluesubhead Conventions for entries fmt.dat\par come down to
+
+\bitem update the contents at the beginning of the file tools.dat
+\bitem |\message{ ---<...>tool, <date>, <owner>--- }| in the beginning
+\bitem visual layout for print out
+\bitem additional comments which contain markup for line numbering
+\bitem addition of table of contents with cross-ref line numbers
+\bitem addition of history of changes.
+\smallbreak
+The layout is aimed at printing in two columns, and start a new column.
+The selective line numbering is controlled by the control sequences
+\cs{numvrb}, to start line numbering
+\cs{vrblin} = |<number>|, to adjust line counter, and
+\cs{nonum} to switch off line numbering.
+Do remember that the escape char is the semi-colon.
+
+\blueexample Template for an entry in tools.dat
+
+\begincenterverbatim
+%end%%%%%%<lastlineprevioustool>%;newcol
+%
+%
+%begin%%%%%%%%%%%%%%%%%%%%<....>%;numvrb
+\tool\<...>tool
+\message{ ---<...>tool, <date>,
+ <(cr)owner>--- }
+%<authorinformation>
+%<thetoolproper>
+\endinput %;nonum
+%Contents
+%<item>...................<pagenumber(s)>
+%etc
+%History of changes
+%<date> <change>
+%etc
+%end%%%%%%%%%%%%%%%%%%%%%%%<....>%!!cgl;newcol
+!endcenterverbatim
+
+\bluehead Binary tree
+
+^^|\beginbinarytree|^^|\beginbt|
+The syntax of the invocation reads
+\thisverbatim{\unmc}
+\begincenterverbatim
+\beginbintree<nodeno><nodevalue>
+ ...
+ <nodeno><nodevalue>
+<levelno>\endbintree
+!endcenterverbatim
+See the Tabulair Material chapter for an example.
+There is also an example about \cs{beginbt}\dots\cs{endbt},
+a variant\Dash and smarter\Dash implementation of typesetting a binary tree.
+The specification of the nodes and their contents
+contains less curly braces.\ftn{blue.tex also contains
+ \cs{bintree} \cs{eertnib}, see the Pictures chapter for an example.}
+
+\bluehead Bridge
+
+^^|\beginbridge|%^^|\endbridge|
+This is available within the environment
+\displaycenterline{|\beginbridge...\endbridge|.}
+the following has been copied from the \cs{bridgetool}.
+\beginverbatim
+%Typesetting bridge publications via (plain) TeX. Version May 92.
+%The macros can als be used within LaTeX.
+%Version: 1.1 March 1994 (basically unmodified since publication in 1990)
+%Author: Kees van der Laan,Hunzeweg 57, 9893PB, Garnwerd (Gr)
+% The Netherlands. 05941-1525, cgl@rc.service.rug.nl
+%Examples of use have been published in TUGboat, 11, 2, 265--276, and
+%MAPS 91.2.
+%The macros consist of 3 independent parts:
+%- dec.tex ((language) declarations, register used and control sequences)
+%- bid.tex (macros for bidding and layout of games)
+%- play.tex (macros for discussing the course of a play)
+!endverbatim
+
+\blueexample Bridge bidding, and play
+
+The following has been copied from the \cs{bridgetool}. The `course of play'
+has been printed in the chapter `Tabular Material.'
+\beginverbatim
+%Examples: diagram, bidding, course of play.
+%1. Diagram
+$$\crdima{N/None}{\vtop{\hbox{Deal:}\hbox{demo}}}%
+ {\hand{J74}{AJ}{QJT2}{Q874}}%N
+ {\hand{K86}{T9542}{874}{T3}}%E
+ {\hand{QT952}{Q83}{AK5}{A6}}%S
+ {\hand{A3}{K76}{963}{KJ952}}%W
+$$
+%2. Bidding
+$$\bbid
+1\cl\alert& ? no& 1\sp&\think no\cr
+ 2\sp& no& 4\sp& a.p.\cr
+\noalign{\vskip.5ex}%With the explanation
+\alert\ means Alert, conventional bid\hidewidth\cr
+? means explanation asked \hidewidth\cr
+\think means think pause \hidewidth\cr
+\ebid $$
+%3. Course of play
+\def\LFTINF{Puzzle} \def\RGTINF{\vtop{\hbox{6NT,}\hbox{by East}}}
+\Ns={KQ76}\Es={T9}\Ss={8542}\Ws={AJ3}
+\Nh={J98} \Eh={A2}\Sh={QT74}\Wh={K653}
+\Nd={J942}\Ed={T5}\Sd={Q876}\Wd={AK3}
+\Nc={65}\Ec={KJ9xxxx}\Sc={2}\Wc={AQT}
+%
+\showgame
+%
+*Problem* How must NS defend in order to guarantee 1 trick?
+*Solution* Start with a \h\ lead in order to break communication.
+N must discard \h s and S must discard \sp s.
+\smallskip\noindent
+\LEADS\bplay
+h4! & hK & h8 & h2 & --& 1\LEADW\cr
+cA & c5 & cx & c2 & --& 2\cr
+cQ & c6 & cx & s2 & --& 3\cr
+cT & h9 & cK & s4 & --& 4\LEADE\cr
+cJ & s5 & s3 & s6 & --& 5\cr
+c9 & s8 & h5 & s7 & --& 6\cr
+cx & d6 & sJ & d2 & --& 7\cr
+\bintermezzo
+\def\RGTINF{\vtop{\hbox to 0pt{NS squeezed on\hss}
+ \hbox to 0pt{\cl\ continuation?\hss}
+ \hbox to 7ex{\hss}}} %phantom for alignment
+\Ec={{\ooalign{\hfil\raise.07ex%
+ \hbox{x}\hfil\crcr\mathhexbox20D}}}
+\showgame \Ec={x}
+\eintermezzo
+cx & h7 & h6 & hJ & --& 8\cr
+\omit et cetera \hidewidth \cr
+\eplay
+!endverbatim
+
+\bluehead Crosswords
+
+^^|\begincrosswords|%^^|\endcrosswords|
+This is available within the environment
+\displaycenterline{|\begincrosswords...\endcrosswords|.}
+For an example of use see the `Tabular Material' chapter.
+
+\bluehead Tower of Hanoi
+
+^^|\hanoi|
+This is available as a command but acts as an environment.
+\displaycenterline{|\hanoi{...}|.}
+An example is provided in the `Tabular Material' chapter.
+
+\bluehead Creation of an Index
+
+This is different. ^|\loadindexmacros| should be provided
+at the beginning of the script.
+At the end supply ^|\sortindex|, followed by ^|\pasteupindex|.
+See the `Creation of an Index' chapter for more details.
+
+\bluehead NTG logo
+
+When ^|\loadntglogo| is invoked, the logo will be set in a vbox,
+\cs{ntglogobox}, for multiple use via for example |\copy\ntglogobox|.
+
+\blueexample Use NTG logo from tools.dat
+
+\begindemo
+\loadntglogo
+\copy\ntglogobox
+!yields
+\loadntglogo
+\copy\ntglogobox
+\enddemo
+
+\bluehead Pascal texts
+
+^^|\beginpascal|%^^|\endpascal|
+This is available within the environment
+\displaycenterline{|\beginpascal...\endpascal|.}
+An example has been provided in the `Text' chapter.
+
+\bluehead Smileys
+
+Just provide \cs{smiley}, \cs{winksmiley}, or \cs{sadsmiley} for
+\smiley
+\winksmiley
+\sadsmiley.
+
+\bluehead xyz-axes
+
+This is available as macro \cs{xyz} with three (text label) arguments.
+The macro can be invoked after \cs{loadxyz}.
+\endinput \ No newline at end of file
diff --git a/info/laan/pwt/pwt.tot b/info/laan/pwt/pwt.tot
new file mode 100644
index 0000000000..fc3cc6a988
--- /dev/null
+++ b/info/laan/pwt/pwt.tot
@@ -0,0 +1,154 @@
+%\input blue.tex
+\report
+\bluechapter Main Tags
+
+\beginsummary
+A table of main tags of \bluetex{} has been included
+to provide a survey of what outer tags
+have been implemented for the regular format.
+More control sequences and symbols are available,
+especially for the lower level markup,
+if not for the undocumented features of manmac,
+and the wealth of plain \TeX.
+The table also illustrates the naming convention adopted
+via a root name with prefixes and suffixes.
+\endsummary
+
+The header fields indicate,
+the prefixes pre-, post-, this-, every-, pasteup-, and
+the suffixes -font, -name and -box.
+The first column contains the various root names, with a marker
+to denote to what extent the minimal one-part macro
+has been implemented.
+
+\begingroup
+\def\first{\hfil\thispicture{\unitlength=6ex \xdim{1.4}\ydim{1}}%
+ \lower1.5ex\hbox\beginpicture%(1.4, 1)(0,-.1)
+ \put( 0.0, 0.0){\small \strut Root}%
+ \put( 1.4, 0.575){\llap{\small Affix}}%
+ \put( 1.4, 0.1){\line(-2, 1){1.4}}%
+\endpicture\lower3ex\null}
+\def\header{pre-\cs post-\cs this-\cs every- \cs pasteup-
+ \cs -font\cs -name%\cs -title
+ \cs -box}
+\def\btablecaption{Main tags for regular scripts}
+
+\catcode`/=13
+\def/{\leavevmode\thinspace\hbox{%
+ \vrule\vtop{\vbox{\hrule\kern1pt\hbox{%
+ \vphantom{\tt e}\thinspace%{\tt#1}%
+ \thinspace}}\kern1pt\hrule}\vrule}%
+ \thinspace} % control sequence token
+\catcode`-13 \def-{$\neg$}
+\def\footer{\qquad\vtop{\small\rlap{- not implemented}
+ \rlap{${}^+$ implemented}
+ \rlap{/ implemented without processing on the fly}}}
+\def\rowstblst{
+{abstract\hfill\ \tiny+}
+{acknowledgements\hfill\ \tiny+}
+{btable \hfill\ \tiny/}
+{center \hfill\ \tiny+}
+{contents\hfill\ \tiny+}
+{(sub(sub))head\hfill\ \tiny+}
+{keywords\hfill\ \tiny+}
+{picture \hfill\ \tiny-}
+{pictures\hfill\ \tiny/}
+{quote \hfill\ \tiny+}
+{references\hfill\ \tiny/}
+{script \hfill\ \tiny+}
+%{syntax\hfill\ \tiny-} %Although there, not so relevant for the table
+{verbatim\hfill\ \tiny-}}
+\def\data{%
+ -\cs-\cs-\cs-\cs+\cs-\cs+\cs+\rs%abstract
+ +\cs+\cs+\cs-\cs+\cs-\cs+\cs+\rs%abstract
+ +\cs+\cs+\cs+\cs-\cs-\cs-\cs+\rs%btable
+ -\cs-\cs-\cs-\cs-\cs-\cs-\cs-\rs%center
+ -\cs-\cs-\cs-\cs+\cs-\cs+\cs+\rs%contents
+ +\cs+\cs-\cs-\cs-\cs+\cs-\cs-\rs%head
+ -\cs-\cs-\cs-\cs+\cs-\cs+\cs+\rs%keywords
+ -\cs-\cs+\cs+\cs-\cs-\cs-\cs-\rs%picture
+ -\cs-\cs-\cs-\cs-\cs-\cs-\cs-\rs%pictures
+ -\cs-\cs-\cs-\cs-\cs-\cs-\cs-\rs%quote
+ +\cs+\cs+\cs+\cs+\cs-\cs+\cs+\rs%references
+ -\cs-\cs+\cs+\cs-\cs-\cs-\cs-\rs%script
+% -\cs-\cs-\cs-\cs-\cs-\cs-\cs-\rs%syntax
+ +\cs+\cs+\cs+\cs-\cs-\cs-\cs-%\rs%verbatim
+}
+$$\vbox{\nonruled\nonframed
+ \btable\data}$$
+\endgroup
+Remarks
+\bitem \cs{title}, \cs{subtitle}, \cs{author} and the like, are token
+ variables and associated with the script
+\bitem \cs{pictures} and \cs{references} have been implemented in a
+ straightforward way, because their use doesn't need processing on the
+ fly
+\bitem In the Appendix Formats similar tables for \cs{transparencies}
+ and \cs{report} have been included. The latter contains some
+ more tags.
+\smallskip
+
+\bluesubhead Your summary of markup tags
+
+Perhaps it is a good idea to add my
+Frequently Used Tags, FUTs\Dash indeed a handful, as already
+indicated in the template in the `Introduction'\Dash
+for personalizing.\ftn{I consider this
+ very appropriate. At school the irony of cribs was when
+ prepared carefully they made themselves superfluous.
+ Transform these summary lists into your personal cribs.}
+
+\beginverbatim
+!bf
+Preliminary matter!tt
+\title{...}
+\subtitle{...}
+\keywords{...}
+\abstract{...}
+\contents{...}
+\issue{...}
+\acknowledgements{...}
+\references{...}
+\pictures{...}
+!bf
+Copy Proper!tt
+\beginscript
+\endscript
+\head{...}
+\thissubhead{...}
+\subhead{...}
+\thissubsubhead{...}
+(the \this<headkind>{...} especially together with \runintrue)
+\subsubhead{...}
+!bf
+Inner level!tt
+\thisverbatim{...}
+\beginverbatim
+<escapechar>endverbatim
+(and in-line !vrt!thinspace...!thinspace!vrt)
+\begincenterverbatim
+<escapechar>endcenterverbatim
+\beginquote
+\endquote
+\begindisplay
+\enddisplay
+(with & and \cr)
+\displaycenterline{...}
+\btable
+(with \data{...\cs...\rs...\cs...\rs...}
+ \header{...}
+ \footer{...}
+ \rowstblst{...}
+ \vruled{...} )
+\ftn{...}
+\bitem
+\example{...}
+\thispicture{...}
+(with \unitlength=...)
+\cs{<tagname>}
+!bf
+Back matter!tt
+\pasteupacknowledgements
+\pasteupreferences
+!endverbatim
+\endinput
diff --git a/info/laan/pwt/pwt.txt b/info/laan/pwt/pwt.txt
new file mode 100644
index 0000000000..1f36d82ebb
--- /dev/null
+++ b/info/laan/pwt/pwt.txt
@@ -0,0 +1,1255 @@
+\input blue.tex \loadindexmacros \loadsmileys \report
+ \hfuzz=25pt\vbadness=1000
+
+\bluechapter Text
+
+\beginsummary
+An introduction to the markup of text has been given.
+BLUe's format structure of text is nested to three levels,
+each preceded by a title.
+The building block is a paragraph.
+The markup for \TeX's standard paragraph shape,
+the markup for the headings and
+the markup for some special text elements have been given.
+Examples of the latter are:
+items,
+quotations,
+display text,
+centering,
+text to be set apart preceded and followed by lines,
+PASCAL programs,
+verbatims,
+exercises and answers, and
+footnotes.
+\endsummary
+
+\bluehead Introduction
+
+Let us assume that we have ordinary text, to be typeset by computer.
+What to do? Let us begin by the beginning and write it down.
+\begincenterverbatim
+An unexpected party
+
+In a hole in the ground there lived a hobbit.
+Not a nasty, dirty, wet hole filled with the ends
+of worms and an oozy smell, nor yet a dry, bare
+sandy hole with nothing in it to sit down on or
+to eat:
+it was a hobbit-hole and that means comfort.
+
+It had a perfectly round door like a porthole,
+painted green,...
+!endcenterverbatim
+We must instruct the computer\Dash that is, supply markup\Dash
+to make something nice out of it. How?
+
+As far as I understand it, ^{Knuth's\ markup} comes down to
+just preceding the title by \cs{beginchapter}?!?
+That is all. He makes use of the already available
+visual markup of blank lines. These blank lines
+separate document parts, be it a title from the text
+or paragraphs from each other.
+
+Is that all? Essentially, yes. But\Dash there is always a but\Dash
+the role which \cs{beginchapter} has to play is not simple.
+Happily, that is not our concern. That is the job of
+the book designer in cooperation with the programmer.
+I take for granted the niceties of \TeX's text processing\Dash
+and which a regular user tends to forget\Dash
+such as automatic handling of ligatures,
+justification and hyphenation over paragraphs, and
+ignoring of superfluous blanks (spaces and lines) in text.
+All this is not necessarily restricted to English.
+
+However, to quote {\TB} `and when you are using plain {\TeX} format,
+ you need to know that the ten characters
+\begincenterverbatim
+\ { } $ & # ^ _ % ~
+!endcenterverbatim
+cannot be used in the ordinary way when you are typing; each of them
+will cause {\TeX} to do something special, \dots'
+
+After this oversimplification let us go back to BLUe scripts,
+full of the right spirit.
+
+\bluehead BLUe script
+
+BLUe's format allows text in print to be nested up to {\oldstyle3} levels deep.
+The layout of the titles and the shapes of the paragraphs
+contribute much to the look-and-feel.
+The nesting is reflected in the markup tags
+\cs{head}, \cs{subhead} and \cs{subsubhead}.
+Also \cs{title} and \cs{subtitle} are there.
+The tag \cs{author} has been filled-in by default,
+meaning that you don't have to pay attention to it.
+It's {\em your\/} format.
+You are Ben Lee User.
+
+\bluehead Headings
+
+As a tribute to ^{manmac}, BLUe's format provides the following
+outer level markup tags as an extra user-interface
+on top of the rigorous two-part macros.
+\begincenterverbatim
+\blue(sub)title <(sub)titletext>
+
+\bluekeywords <listofkeywords>
+
+\blue(sub(sub))head <(sub(sub))sectionheadtext>
+
+\blueexample <exampleheadtext>
+!endcenterverbatim
+A handful, but\Dash there is always a but\Dash the ^{processing on the fly}
+has been lost.
+Note that all have a blank line\Dash implicit markup\Dash or
+\cs{par} as end separator. Reread page {\oldstyle202} of \TB, please.
+I used them in this script, because they counter the ^{curly braces mania},
+or to put it in Knuth's words
+\displaycenterline{`\dots you needn't always enclose arguments in braces.'}
+
+^^{heading,\ markup}
+The regular markup for headings reads as follows.\ftn{Of course the long forms
+ |\begin<tag>| and |\end<tag>| can be used too.}
+\displaycenterline{|\head{<headtext>}|}
+Similar for \cs{subhead} and \cs{subsubhead}.
+No terminating periods are automatically typeset.
+
+\bluesubhead Parameterization
+
+The text of a heading is preceded by \cs{prehead} and followed by \cs{posthead}.
+Again, similarly for \cs{subhead} and \cs{subsubhead}.
+By default the placement within context\Dash that is,
+the tokens contained in |\pre<tag>| and |\post<tag>|\Dash
+is determined by the following, apart from (stretchable) glue.\ftn{See for
+ those \TB{}{\oldstyle355}, especially \cs{beginsection}. `The macro first emits glue
+ and penalties designed to start a new page if the present page is nearly
+ full, \dots' This mechanism has been borrowed for the various
+ |\pre(sub(sub))head|-s.}
+The latter fills up the page by a page break
+to prevent an underfull \cs{vbox} message.
+
+{\let\css\cs
+\def\rowstblst{{\css{head}}{\css{sh}}{\css{ssh}}}
+\def\data{\css{bigskip} \cs\css{nobreak}\css{medskip}\css{noindent}\rs
+ \css{medbreak}\css{noindent}\css{shindent} \cs\css{quad}\rs
+ \css{smallbreak}\css{noindent}\css{sshindent}\cs\css{quad}\rs}
+\def\rowstbsep{\quad}
+\def\tag{${<}tag{>}$}
+\def\first{\css{}\tag}
+\def\header{\css{}pre\tag\cs \css{}post\tag}
+\def\footer{{\small*sh stands for subhead, ssh for subsubhead}}
+\def\headersep{\kern.5ex\hrule\kern.75ex}
+$$\fll\btable\data$$}
+
+With defaults \cs{subheadindent}{\oldstyle0}pt and
+\cs{subsubheadindent}\cs{generalindent}.
+I used to mark up headings by the short form, i.e.,
+by |\head{...}| instead of ^|\beginhead| \dots \cs{endhead}.
+From now on\Dash back to the roots\Dash I will use manmac's minimal forms.
+In headings I don't need much processing on the fly.
+
+Automatic numbering is provided in the \cs{report} format.
+The idea is to use |\<tag>numbering| token variables.
+
+The above is only part of the story, just the top of the iceberg
+In a document we also like to reuse the head titles for table of contents,
+the index, and undoubtedly we need the head numbers sooner or later,
+whether they are hidden or not.
+So on the one hand we like to process a title on the fly, and
+on the other hand we like to store head information, as general as possible,
+for reuse.
+In the \cs{report} format I had to face the music and deal with those issues.
+Happily, the {\bluetex} kernel could do without it.
+^^{heading,\ automatic numbering}
+
+\bluehead Paragraphs
+
+\TeX's building block is the ^{paragraph}.
+This unit is split up into lines to be mapped on pages.
+The markup for a paragraph is minimal, i.e.,
+it is generally implicit and near to natural.
+An occasional user is hardly aware of the markup.
+In most cases
+\begincenterblock
+a paragraph starts by the first letter, and
+ends by a blank line.
+\endcenterblock
+The blank line is substituted by \cs{par} automatically.
+Explicit markup for a paragraph reads
+\begincenterverbatim
+\indent %starts a paragraph, an empty box (size \parindent) is inserted
+ %or \noindent, which just starts a paragraph
+<paragraph>
+\par %ends the paragraph, and resets defaults of par shape pars
+ %\hangindent and \hangafter
+!endcenterverbatim
+On encountering a vertical command in a paragraph,
+like \cs{smallskip} and its ilks,
+\TeX{} automatically inserts \cs{par}, and because of this
+the paragraph is ended.
+Each script, and this one is no exception, contains a lot of
+ordinary paragraphs.\ftn{For an extensive treatment of paragraphs see
+ {\TB} chapter~{\oldstyle14}.}
+
+\bluesubhead Parameterization
+
+The parameters which govern the standard paragraph shape are given in the
+following model.\ftn{Courtesy David Salomon. (A white lie, any
+ migrated vertical material has been omitted.)}
+\def\Xfil{\xleaders\hbox{X}\hfil}
+\beginquote\advance\leftskip.25\hsize
+ \advance\rightskip.25\hsize\small\noindent
+\hfil\cs{parskip}\\\null
+\hfil\cs{(base)lineskip}\\\null
+\cs{parindent}\Xfil\break\null
+\hfil\cs{clubpenalty}\\\null
+\hfil\cs{(base)lineskip}\\\null
+\Xfil\break\null
+\hfil\cs{interlinepenalty}\\\null
+\hfil\cs{(base)lineskip}\\\null
+\hfil$\vdots$\\\null
+\Xfil\break\null
+\hfil\cs{widowpenalty}\\\null
+\hfil\cs{(base)lineskip}\\\null
+\Xfil\cs{parfillskip}\break\null
+$\longleftarrow$\hfill\cs{hsize}\hfill$\longrightarrow$
+\endquote
+The left margin is \cs{hoffset} from the left.
+The distance from the left side of the paragraph
+to the left margin is the glue \cs{leftskip}.
+At the right side the glue has the name \cs{rightskip}.
+Between words the glue is \cs{spaceskip} and between
+sentences \cs{xspaceskip}.
+
+The contents of the token variable \cs{everypar} is inserted before
+the paragraph text.
+
+\exercise How can the parameters be set such that the last line
+ of a paragraph is centered\ftn{Courtesy Anne Br\"uggeman-Klein.}?
+\answer \cs{leftskip}0pt plus1fil,
+ \cs{rightskip}0pt plus$-1$fil,
+ and \cs{parfillskip}0pt plus2fil.
+ End the paragraph with |\hskip0pt plus1fil|.
+
+\exercise One of the problems induced by paragraphs as building blocks is that
+ it is not easy to provide for line numbering.
+ How can we achieve this\ftn{Courtesy Jan Kybic.}?
+\answer Jan Kybic reported about the several ways he received as answers
+ to this problem on comp.text.tex.
+ Below is the solution due to Petr Olsak. Beware it is limited.
+ The general idea in the solutions collected by Kybic
+ is to take apart the lines set in a vbox either
+ starting at the end via \cs{lastbox} or starting at the begin
+ via \cs{vsplit}, collect these
+ lines extended by their line numbers, and reinsert these later.
+ \beginverbatim
+%Due to Petr Olsak
+%Disclaimer: Macros for plain prose line
+%numbering only for ordinary paragraphs
+%without display mathematics or other
+%specialities.
+%(Note added: no \footnote, \centerline.)
+\newcount\linenum
+\newcount\worknum
+\newbox\allparagraph
+\def\beginnum{\begingroup\linenum0
+ \def\par{\ifhmode\completepar\fi}%
+ \setbox\allparagraph\vbox\bgroup}
+%
+\def\endnum{\par\egroup\endgroup}
+%
+\def\completepar{\endgraf \global
+ \advance\linenum\prevgraf
+ \worknum\linenum \setbox0\null
+ \loop\unskip\unpenalty
+ \setbox2\lastbox
+ \ifhbox2 \global\setbox0\hbox
+ {\llap{$\scriptstyle\the\worknum.$
+ }\box2\penalty0\unhbox0}%
+ \advance\worknum-1
+ \repeat\egroup\noindent
+ \unhbox0\unpenalty\endgraf
+ \setbox\allparagraph\vbox\bgroup}
+!endverbatim
+The numbering of verbatim lines has been treated separately.
+Another variant is mentioned by Salomon to number the lines on
+{\it each page}.
+This is handy for proofers to indicate more precisely the commented parts.
+See his OTR articles as published in \TUB
+\Dash or his courseware `Insights \& Hindsights'
+ MAPS Special {\oldstyle1992}\Dash
+for the modified OTR.
+Knuth in \tubissue8(2) {\oldstyle1987}\Dash about letting text
+flow around figures\Dash provided the basics for
+Hoenig's approach \tubissue{15}(3) {\oldstyle1994}, to let the OTR
+create one-line pages\Dash i.e., one can lay hands on each line\Dash
+and introduce a `mock'-\cs{everyline}. Promising.
+
+
+\bluesubhead Why a paragraph as unit for line breaking?
+
+Knuth did choose a paragraph as next larger unit than a line for line
+breaking, i.e., for mapping the horizontal list onto lines.
+This gives better results than using roughly a line.
+
+\exercise What happens to accented words?
+\answer They hyphenate, but only the part of the word up to the accent control
+ sequence is subject to hyphenation as such.
+ However, we can do much better and
+ use \cs{allowhyphens}\Dash from Appendix~D
+ {\sl Hanging punctuation}\Dash to be inserted after the place
+ where the hyphenation stopped. The conclusion is that \TeX{}
+ can hyphenate properly accented words.
+ For example the Dutch word
+ `|onge\"emancipeerde|' can better be input as `|onge\ee{}mancipeerde|'
+ with\ftn{Courtesy Bernd Raichle and Bas Romeny,
+ and a wink to dutch.sty.}
+\beginverbatim
+\def\ee{\nobreak\discretionary{e-}{e}{\"e}\allowhyphens}
+\newskip\zzz\def\allowhyphens{\nobreak\hskip\zzz}
+\hyphenation{man-ci-peer-de}
+!endverbatim
+Note that because of the Dutch rules with respect to a dieresis
+use has to be made of \cs{discretionary} as well.
+The explanation is that the search for hyphenation patterns is stopped
+when an explicit kern, induced by the accent, is encountered.
+To let \TeX{} resume hyphenation of the remainder
+the zero glue \cs{hskip} is inserted. A line break is inhibited
+by \cs{nobreak}. The first \cs{nobreak} is needed to isolate the effect
+of the \cs{discretionary}. Normally when a discretionary is encountered
+\TeX{} stops hyphenating the complete word.
+
+
+\exercise What is wrong with |pretext\par\llap`Quotation'|?
+\answer \cs{llap} does not start the horizontal mode. Insert \cs{leavevmode}
+ after \cs{par}.
+
+\exercise What is the unexpected result of |\par{\bf New paragraph} blah blah|
+ with |\everypar{\hang}| active\ftn{Courtesy Alan Reese}?
+ And why?\ftn{Courtesy Jeremy Henty.}
+ Note that \cs{bf} is only there to make the pitfall look
+ realistic.
+\answer Without braces the text comes out as a block. With the braces at the
+ beginning there is no effect of the automatically inserted \cs{hang}.
+ The explanantion reads as follows.
+ When processing ordinary text, \TeX{} does not enter horizontal mode
+ until it encounters a letter. In the troublesome paragraph the first
+ letter is inside a group. When the group ends all local assignments
+ are undone, and the effect of the \cs{hang} instruction\Dash
+ the contents of \cs{everypar} is inserted within the group\Dash
+ is forgotten.
+ A solution is to precede the group by \cs{leavevmode},
+ because the \cs{everypar} will be executed before the group then.
+
+
+\exercise How can we allow for hyphenation in teletype font?
+\answer This is handy when we set control sequences in \cs{tt}
+ in two-column. Provide
+\beginverbatim
+\hyphenchar\tentt=`-
+!endverbatim
+
+\exercise And what about page breaks?
+\answer The fact is that Knuth did not implement a spread or a chapter
+ as next larger unit than a little more than `a page' for page breaking,
+ i.e., for mapping the main vertical list onto pages.
+ Perhaps this was dictated by the status of the hardware technology
+ when \TeX{} was designed.
+
+\noindent The ^{hyphenation} process can be customized by
+\beginverbatim
+\lefthyphenmin=<number> \righthyphenmin=<number>
+!endverbatim
+which are {\oldstyle2} and {\oldstyle3} by default,
+and via exceptions as argument to
+\cs{hyphenation}. For \TB{} Knuth used as exceptions
+\beginverbatim
+\hyphenation{man-u-script man-u-scripts ap-pen-dix}
+!endverbatim
+Hyphenation assignments are global and cumulative.
+For more details start with Appendix~H of \TB.
+
+\bluesubhead Special paragraphs
+
+\TeX{} provides \cs{parshape}, \cs{hangindent} and \cs{hangafter}
+for special paragraph shapes. A captivating example is provided
+in \TB{} {\oldstyle101}.
+
+\blueexample Miniature
+
+History has it to start the first paragraph of a chapter
+with a `Miniature.' ^^{miniature}
+Knuth in his `Preface' showed how to mark up such kinds of paragraphs.
+This is an illustration of the use
+of \cs{hangindent}\ftn{\cs{hang} assigns the value
+ of \cs{parindent} to \cs{hangindent}.}
+and \cs{hangafter}, as well as of the use of
+\cs{smash} outside math mode.
+There is no need for a special `^{dropped capital}' macro, because it is
+really simple.
+
+\cs{cglpic} is the minitiature used from the picture database pic.dat.
+For an nice application\ftn{Courtesy Huub Mulders.} see the miniature in the
+NTG information, on the inside of the back cover.\ftn{Knuth in \tubissue8(2),
+ {\oldstyle1987}, touched upon the general problem how to
+ let text {\it flow around\/} figures.
+ Hoenig \tubissue{15}(3), {\oldstyle1994}, provided user-friendly macros.}
+\begindemo
+\pictures{\gpic}%load gpic
+\parindent=24pt
+\noindent\hang\hangafter-2
+\smash{\lower13pt\hbox to0pt{%
+\hskip-\hangindent\gpic
+\hfil}}{\smc entle Reader}:
+This is a handbook about \TeX,
+a new typesetting system
+intended for the creation of
+beautiful books\Dash and
+especially for books that
+containa lot of mathematics.
+!yields
+\pictures{\gpic}
+\parindent=24pt
+\noindent\hangindent\parindent
+\hangafter-2
+\smash{\lower13pt\hbox to0pt{\hskip
+ -\hangindent\gpic\hfil}}{\smc entle Reader}:
+This is a handbook about \TeX,
+a new typesetting
+system intended for the creation of beautiful
+books\Dash and especially for books that contain
+a lot of mathematics.
+\par\noindent
+\enddemo
+
+Remark. Realize that the reference point for the \cs{smash}
+ is where the {\smc e} starts, and that the first ({\oldstyle2}) lines are
+ indented.
+ Within the \cs{smash} you can move around as you wish, leaving the
+ reference point and the other things outside invariant.
+Note the use of \cs{smc} to smooth the transition from the miniature to the
+rest of the text.
+
+\exercise Compare the above simplified version of Knuth's opening
+ sentence with the real one in \TB{} script.
+
+\exercise At the end of each paragraph \TeX{} resets the paragraph shape
+ parameters. How can we retain these values\ftn{Courtesy
+ Marek Ry\'cko and Bogus{\l}aw Jackowski.}?
+\answer Use |{\par}| instead of \cs{par}. See
+ their article `From \cs{indent} to \cs{par},'
+ MAPS{\oldstyle94}.{\oldstyle2}, among other things.
+ The point is they are changed, but\Dash
+ there is always a but\Dash on encountering
+ a \cs{par} the paragraph shape parameters are reset {\sl locally},
+ within the group so to say.
+ After the group closing, the right curly brace,
+ the old values pop up again, which yields the effect.
+ Note. This method was first elucidated by the author of \TeX{}
+ and communicated in a private letter to Elizabeth Barnhart, of
+ {\oldstyle1987}.
+
+
+\exercise Is the scope of \cs{leftskip} and \cs{rightskip} restricted
+ to a paragraph?
+\answer No, it is not.
+
+\blueexample Flushed right paragraphs
+
+At the end of each chapter in \TB{}
+quotations are set as flushed paragraphs. ^^{paragraphs,\ flushed}
+A little simplified the following will
+do the job. The key issue is the
+use of \cs{leftskip} and the zero value
+of \cs{rightskip} and \cs{parfillskip}.
+\cs{manmacauthor} is the \cs{author} macro from manmac to
+set the author part in those quotations.
+
+\begindemo
+\leftskip0pt plus40pc
+ minus\parindent
+\rightskip0pt\parfillskip0pt
+\everypar{\sl}\obeylines
+I got the BLUes,
+but I like it
+\manmacauthor{Anonymous}
+ (20th Century)
+\bigskip
+It contains all
+\manmacauthor{DeK}(1978) \TB
+!yields
+\leftskip 0pt plus 40pc minus\parindent
+\rightskip0pt\parfillskip0pt
+\everypar{\sl}\obeylines
+I got the BLUes,
+but I like it
+\manmacauthor{Anonymous}(20th Century)
+\bigskip
+It contains all
+\manmacauthor{DeK}(1978) \TB
+\enddemo
+
+\exercise Why is |\everypar{\sl}| needed, instead of just \cs{sl}\ftn{Courtesy
+ Staszek Wawrykiewicz}?
+\answer In \cs{manmacauthor} \cs{rm} is switched on for the special
+ paragraph of the author line.
+ The next quotation, if there is one, takes \cs{sl} again, automatically.
+ Note that the \cs{noindent} in \cs{manmacauthor} is mandatory,
+ because it starts the new paragraph and therefore \cs{rm} will
+ be in effect. It will come after the automatically inserted
+ \cs{sl}.
+
+\bluesubhead Customization
+
+The hook for customization of paragraphs is
+the token variable \cs{everypar}.
+A nice application of \cs{everypar}, next to \cs{sl} above,
+is to number lines automatically in verbatim texts.
+
+\bluehead Accents and ligatures
+
+Some ligatures come automatically while others have to marked up for.
+\begindemo
+TB ex9.2-3
+{\AE}sop's {\OE}uvres en fran\c cais\\
+p\^at\'es
+!yields
+$$\hbox{{\AE}sop's {\OE}uvres en fran\c cais}$$
+$$\hbox{p\^at\'es}$$
+\enddemo
+Remark. From \TB~{\oldstyle54}. \dots`It's important to remember that these
+conventions for ^{accents} and special letters are not built into {\TeX} itself;
+they belong to the plain {\TeX} format, which uses the Computer Modern fonts.'
+
+\bluehead Paragraphs with digits
+
+^^{numbers in paragraphs}
+When numbers occur in paragraphs they look irregular, they exceed the size
+of lowercase letters. Typographers advise to use \cs{oldstyle}.
+Minimal markup can be achieved via \cs{on}, for example |\on3|.\ftn{When a space
+should follow the number end the number by |{}|{\tt\char32}.}
+
+\bluehead Use of special text elements
+
+Examples of special text elements are:
+ items, labeled by a bullet, by a number, or alphabetically;
+ centering,
+ quotations;
+ (non-centered) displays;
+ text to be set apart, preceded and followed by a line;
+ PASCAL text;
+ syntax diagrams;
+ verbatims;
+ exercises and answers; and
+ footnotes.
+
+The markup for these elements will be shown by examples.
+
+\bluesubhead Items
+
+At the basis are plain's one-parameter \cs{item} and \cs{itemitem},
+which take as argument the item marker.
+The bulleted item, ^|\bitem|, comes from \TB{} ex{\oldstyle14}.{\oldstyle20}.
+^|\nitem|\Dash numbered items\Dash
+^|\aitem|\Dash alphabetically labeled items, lowercase\Dash
+^|\Aitem|\Dash alphabetically labeled items, uppercase\Dash and
+^|\eitem|\Dash enumerated items,
+are similar extensions.
+The extensions provide the marker automatically, no argument is needed.
+Note that the closing tag is \cs{smallbreak}.\ftn{Knuth advised \cs{medskip}
+ before and after, \TB{} {\oldstyle102}. I sobered this and made use of
+ \cs{smallbreak}'s paragraph terminating function.}
+
+\blueexample Items
+
+\begindemo
+\bitem first item
+\itemitem{--} subitem
+\bitem second item
+\smallbreak
+!yields
+{\parindent=1pc
+\bitem first item
+\itemitem{--} subitem
+\bitem second item
+\smallbreak}
+\enddemo
+
+\bluesubhead Quotations
+
+A special case of centering a block is the so-called quotation, indented
+on the left and the right by the same (fixed) amount, usually the value
+of \cs{parindent}. ^^|\beginquote|
+
+\blueexample Quotations
+
+\begindemo
+pretext
+\beginquote
+Some text to be set apart,
+indented on the left and
+on the right
+\endquote
+posttext
+!yields
+pretext
+\beginquote
+Some text to be set apart,
+indented on the left and on the right.
+\endquote posttext
+\enddemo
+Add a little to this to obtain \cs{beginsummary} and
+\cs{endsummary}, abstracting in the markup from formatting details.
+A step towards descriptive or functional markup. The summaries
+at the beginning of each chapter of PWT have been marked up in this way.
+Perhaps it is also good to mention here that accents don't start horizontal
+mode. If you like to quote then start with \cs{leavevmode}\Dash to enforce
+horizontal mode\Dash followed by |\llap`| or so.
+
+\bluesubhead Setting text apart
+
+^|\beginlines| and |\endlines|, \TB{} {\oldstyle583}--{\oldstyle591},
+is in display (zero-indented),
+which obeys the line structure and inserts a \cs{hrule} for and aft.
+For an example of use I borrowed the following from \TB, where it is
+used in combination with in-line verbatim.
+\cs{obeylines} is on.\ftn{Variant \cs{endlines} are
+ \cs{weak\-end\-li\-nes}, \cs{fi\-nal\-end\-li\-nes}.
+ The former uses a \cs{medskip} instead of a \cs{medbreak}.}
+
+\blueexample Setting text apart
+
+\thisverbatim{\catcode`\|=12 }
+\begindemo
+%TB 343
+\beginlines
+|%This is the plain TeX format |
+|%that's described in The TeXbook.|
+\dots
+\endlines
+!yields
+\beginlines
+|%This is the plain TeX format|
+|%that's described in The TeXbook.|
+\dots
+\endlines
+\enddemo
+
+\bluesubhead Centering in display
+
+Plain \TeX{} provides \cs{centerline}.
+BLUe's format provides the extension ^|\displaycenterline|,
+to center a line with display glue for and aft, and
+^|\begincenter| \dots \cs{endcenter}, and ^|\begincenterblock| \dots
+\cs{endcenterblock} to center each line of the block.
+^^|\begincenterdisplay|
+
+\blueexample Centering in display
+
+\begindemo
+pretext
+\displaycenterline{I $\heartsuit$
+ \TeX{} \winksmiley}
+text in between
+\begincenterblock
+Sign of times?
+The extraordinary rate of change.
+\endcenterblock
+intermediate text
+\begincenter
+TLC
+tender loving care
+that is all there is
+\endcenter
+posttext
+!yields
+pretext
+\displaycenterline{I $\heartsuit$ \TeX{} \winksmiley}
+text in between
+\begincenterblock
+Sign of times?
+The extraordinary rate of change.
+\endcenterblock
+intermediate text
+\begincenter
+TLC
+tender loving care
+that is all there is
+\endcenter
+posttext
+\enddemo
+Remarks.
+Agreed, \cs{displaycenterline} is a special case and therefore superfluous.
+An alternative for centering of a block\Dash although a little different\Dash
+is \cs{raggedcenter}
+`that partitions the words of a paragraph into as few as possible lines
+ of approximately equal size and centers each individual line.
+ Hyphenation should be avoided if possible.'
+{\TB} ex{\oldstyle14}.{\oldstyle34}.
+
+\exercise Do |\begincenter...\endcenter| and
+|\begincenterblock...\endcenterblock| allow for page breaks?
+\answer |\begincenter...\endcenter| does.
+ |\begincenterblock...\endcenterblock| does not,
+ because it is a \cs{vbox}.
+
+\bluesubhead Non-centered displays: one-line, multi-lines and multi-columns
+
+^|\begindisplay| and |\enddisplay|, \TB{} {\oldstyle434}--{\oldstyle439},
+yields an indented display. Very powerful and user-friendly.
+
+\blueexample Non-centered displays: one-line, multi-lines and multi-columns
+
+\begindemo
+pretext
+%TB 3
+\begindisplay
+ ``I understand.''
+\enddisplay
+posttext
+!yields
+pretext\begindisplay
+ ``I understand.''
+\enddisplay posttext
+\enddemo
+
+Multi-line displays can be handled by ending each line
+in the environment by the control sequence \cs{cr}. ^^{multi-line displays}
+The indentation is the value of \cs{displayindent},
+default {\oldstyle0}pt, next to the |\hbox to\parindent{}| because of the
+\cs{indent} in the (hidden) template.
+
+\begindemo
+pretext
+%TB 4
+\begindisplay
+ a hyphen (-);\cr
+ an en-dash (--);\cr
+ an em-dash (---);\cr
+ a minus sign ($-$).\cr
+\enddisplay
+posttext
+!yields
+pretext
+\begindisplay
+ a hyphen (-);\cr
+ an en-dash (--);\cr
+ an em-dash (---);\cr
+ a minus sign ($-$).\cr
+\enddisplay
+posttext
+\enddemo
+
+Another subtle point is that more-column copy can be displayed,
+because a repetitive template has been used.
+
+\begindemo
+pretext
+%TB 29
+\begindisplay \hbadness10000
+ \hbox spread-.666667em{The
+ badness of this line is 100.}&
+ (very tight)\cr
+ \hbox spread-.333333em{The
+ badness of this line is 12.}&
+ (somewhat tight)\cr
+ ...
+\enddisplay
+posttext
+!yields
+pretext
+\begindisplay \hbadness10000
+ \hbox spread-.666667em{The
+ badness of this line is 100.}&
+ \ (very tight)\cr
+ \hbox spread-.333333em{The
+ badness of this line is 12.}&
+ \ (somewhat tight)\cr
+ ...
+\enddisplay
+posttext
+\enddemo
+
+\exercise How can we center a \cs{begindisplay}\dots \cs{enddisplay}?
+\answer Enclosing the construct with a \cs{vbox} in math display does
+ not work, which is the usual way to center a \cs{halign}.
+ This comes from the fact that the construct is recognized as an
+ alignment display. A solution is
+\beginverbatim
+{\def\enddisplay{\crcr\egroup\egroup$$}
+ \begindisplay\vbox\bgroup
+ <displaymaterial>
+ \enddisplay}
+!endverbatim
+Perhaps it is simpler for those cases to fall back on the following
+usual markup
+\beginverbatim
+$$\vbox{\halign{<template>
+ <displaymaterial>
+ }}$$
+!endverbatim
+
+%end answer
+\bluesubhead Syntax diagrams
+
+Markup tags are
+\begincenterdisplay
+^|\beginsyntax|\dots |\endsyntax| &the environment\cr
+^|\alt| &to start an alternative\cr
+^|\is| &to define left element\cr
+\thisverbatim{\unmc}|<| and \thisverbatim{\unmc}|>|
+ &to start and end a unit.\cr
+\endcenterdisplay
+When a line starts with
+\thisverbatim{\unmc}|<| it is assumed
+that a new rule starts. \cs{obeylines} is on.
+The end-of-line is redefined to take the appropriate action.
+In the example below a \cs{quad} is
+used in the markup to prevent starting a new rule.
+The \% sign at the end of a line annihilates the effect of
+the e-o-l, and prevents a new rule to start.
+
+\blueexample Syntax diagrams
+
+\thisverbatim{\unmc}
+\begindemo
+%TB 268
+\beginsyntax
+<unitofmeasure>\is
+\quad<optionalspaces>%
+ <internalunit>
+\alt<optional {\tt true}>%
+ <physicalunit>
+\endsyntax
+!yields
+\beginsyntax
+<unit of measure>\is
+\quad<optionalspaces><internalunit>
+\alt<optional {\tt true}><physicalunit>
+\endsyntax
+\enddemo
+
+\bluesubhead Programs
+
+Program texts are special, due to the use of non-monospaced fonts.
+\bluetex{} assumes that the ^{PASCAL texts} have been prepared in such
+a way that they are insensitive to font spacing.\ftn{Courtesy Wilson
+ and Addyman. Compare the markup with \TB{} {\oldstyle234} and
+ ex{\oldstyle18}.{\oldstyle9},
+ and you will appreciate
+ the approach of BLUe's format typesetting of PASCAL.}
+^^|\beginpascal|
+
+\blueexample Programs
+
+\begindemo
+\beginpascal
+(*Print length of third side of
+ triangle given two sides and
+ enclosed angle*)
+program EX4A(input, output);
+var a, b, c angle : real;
+begin read(a, b, angle);
+ c:=sqrt(sqr(a)+sqr(b)-
+ 2*a*b*cos(angle));
+ writeln('The third side is', c)
+end.
+\endpascal
+!yields
+\beginpascal
+(*Print length of third side of
+ triangle given two sides and
+ enclosed angle*)
+program EX4A(input, output);
+var a, b, c, angle : real;
+begin read(a, b, angle);
+ c:=sqrt(sqr(a)+sqr(b)-
+ 2*a*b*cos(angle));
+ writeln('The third side is', c)
+end.
+\endpascal
+\enddemo
+
+Perhaps it is not nice to have the types in the same font as variables.
+PASCAL can be extended with types,
+and therefore names of types are also variable.
+An open problem is the vertical alignment because of the monotype fonts in the input
+and the variable-width fonts used in the typeset result. Proofing needed.
+
+\exercise How can we use the macros for typesetting program fragments
+ in other languages?
+\answer The set of reserved words has to be customized, next to
+ the handling of special symbols.
+
+%end exercise
+
+\bluesubhead Verbatims
+
+The functionalities are ^{verbatim\ text} (in-line and in display),
+and file verbatim inclusion.
+
+The markup starts with ^|\beginverbatim| and ends with
+^|<escapechar>endverbatim|. The default escape character is `!'.
+`Options,' for among other things numbering and enabling of metacode,
+are handled via the token variables
+\cs{thisverbatim}, or globally via \cs{everyverbatim}.
+
+The place within context is controlled via
+the token variables ^|\preverbatim| and ^|\postverbatim|.
+
+It is true that verbatims are heavily used
+by authors who write in \AllTeX{} about \AllTeX,
+and perhaps not so relevant for math authors.
+
+\blueexample Verbatims: escape char use
+
+\thisverbatim{\catcode`\|=12 \let\-=-
+ \catcode`\!=12
+ \catcode`\<=12
+ \catcode`\-=0 }
+^^{verbatim,\ escape char}
+\begindemo
+%To handle via ! (escape char)
+% -- other fonts
+% -- emc (enable metacode)
+\thisverbatim={\emc}
+\beginverbatim
+Some <metacode> and
+blah, blah, ... !it
+Now text in italics!tt
+and back again in tt
+!endverbatim
+-yields
+\thisverbatim={\emc}
+\beginverbatim
+Some <metacode> and
+blah, blah, ... !it
+Now text in italics!tt
+and back again in tt
+!endverbatim
+\enddemo
+
+\blueexample Verbatims: line numbering and file inclusion
+
+\thisverbatim{\catcode`\|=12
+ \let\-=- \catcode`\!=12
+ \catcode`\<=12
+ \catcode`\-=0 }
+^^{verbatim,\ line numbering}
+^^{verbatim,\ file inclusion}
+\begindemo
+pretext
+\everyverbatim={\numvrb}
+\thisverbatim={%
+ \catcode`\!=12
+ \catcode`\|=12
+% \input vrb.tex %<file>
+ \makeescape\*}%To terminate
+\beginverbatim
+Extras after file
+*endverbatim
+\noindent posttext
+-yields\noindent
+pretext
+\everyverbatim={\numvrb}
+\thisverbatim={\emc
+ \catcode`\!=12
+ \catcode`\|=12
+% \input vrb.tex
+ \makeescape\*}%To terminate
+\beginverbatim
+<file>
+Extras after file*nonum
+*endverbatim
+\noindent posttext
+\enddemo
+
+\blueexample Verbatims: line numbering
+
+\thisverbatim{\catcode`\|=12
+ \let\-=- \catcode`\!=12
+ \catcode`\<=12
+ \catcode`\-=0 }
+\begindemo
+\thisverbatim={\numvrb
+ \catcode`\~=9
+ \catcode`\*=14 }
+\beginverbatim
+Just some text with
+ligatures such as ?` switched
+off (TB 381).
+line numbers restarted via
+<escapechar>numvrb.!nonum
+<escapechar>nonum switches off
+line numbering.
+<escapechar>vrblin<number>
+assigns
+<number> to the line counter.
+
+
+!numvrb~After two blank*
+lines.!nonum
+!endverbatim
+-yields
+\thisverbatim={\numvrb
+ \catcode`\~=9
+ \catcode`\*=14 }
+\beginverbatim
+Just some text with
+ligatures such as ?` switched
+off (TB 381).
+line numbers restarted via
+<escapechar>numvrb.!nonum
+<escapechar>nonum switches off
+line numbering.
+<escapechar>vrblin<number> assigns
+<number> to the line counter.
+
+
+!numvrb~After two blank*
+lines.!nonum
+!endverbatim
+\enddemo
+
+\blueexample Verbatims: in line
+
+\thisverbatim{\catcode`\|=12
+ \let\-=- %\catcode`\!=12
+ \catcode`\<=12
+ \catcode`\-=0 }
+^^{verbatim,\ in-line}
+{\def\-{\hbox{-}}
+\begindemo
+\thisverbatim{\emc}
+Before |<in!-lineverbatim>| after.
+-yields\indent
+\thisverbatim{\emc}
+Before |<in!-lineverbatim>| after.
+\enddemo}
+Also provided is \cs{unmc} to unable metacode.
+
+For ^{long\ verbatim\ listing}s supply
+\beginverbatim
+\everyverbatim{\baselineskip12ptplus2ptminus1pt\lineskip1ptplus1ptminus1pt}
+!endverbatim
+to prevent underfull vbox messages.
+\exercise How can we put \cs{it}, and \cs{tt} at the beginning of
+ the lines?
+\answer The naive way introduces an unwanted space. We can get rid of
+ a space after a control sequence via the use of a control symbol
+ with category code 9 (to be ignored) after those control sequences.
+
+\exercise How can we center verbatims? ^^|\begincenterverbatim|
+\answer This is included in BLUe's format and reads as follows.
+\thisverbatim{\catcode`\~=0 \catcode`\!=12 }
+\beginverbatim
+\def\boxlines{\obeyspaces\fifol}
+%\gdef\fifol#1^^M{\ifx\lofif#1\lofif\fi
+% \processl{#1}\fifol}
+\def\begincenterverbatim{$$%
+ \def\processl##1{\hbox{##1}}%
+ \def\lofif##1\fifol{\fi\egroup
+ \egroup$$\thisverbatim{}}
+ \let\endcenterverbatim\lofif
+ \bgroup\tt\setupcopy
+ \let\!=!\catcode`\!=0
+ \the\everyverbatim\the\thisverbatim
+ \vbox\bgroup\boxlines}
+~endverbatim
+
+\exercise A math display does not end a paragraph, it is part of the
+ paragraph with the effect that paragraph parameters
+ are not reset to their defaults. What about \cs{beginverbatim}
+ |!!endverbatim|?
+\answer It looks although all depends on the values of \cs{preverbatim} and
+ \cs{postverbatim}. The defaults are \cs{medskip} and
+ \cs{smallbreak}. The former does not insert a \cs{par}
+ while the latter does. As is well-known a \cs{par}
+ terminates a paragraph. However, the subtleness is that
+ \cs{begingroup} and \cs{endgroup} enclose the verbatim
+ which, \TB{} 279 `don't change the mode.' On reading I did not
+ understand the consequences of the quoted sentence.
+ A small experiment taught me that the paragraph parameters are not
+ reset. Therefore the \cs{beginverbatim} |<escapechar>endverbatim|
+ just {\it interrupt\/} the paragraph, similar to the math display.
+
+%end exercise
+
+Remark. As known \TeX{} makes use of special characters. For example
+when \% is input the \% is not obtained in print, but rather the rest of
+the input line is considered as comment.
+Similar for $<$, $>$ and \vrt{} in horizontal mode, although for a different reason.
+Because of this the less than and greater than symbols can be used nicely
+for syntax charts and the vertical bar for in-line verbatim.
+
+\bluesubsubhead Pitfalls
+
+There are some pitfalls that I know of and that
+a user might like to be aware of. ^^{verbatim,\ pitfalls}
+\bitem Default \cs{emc} and when the less than and greater than signs are
+ used curious error messages occur. Remedy |\thisverbatim{\unmc}|.
+\bitem Long verbatims give a bunch of underfull vbox messages.
+ Remedy |\everyverbatim{|\\
+ |\baselineskip12pt plus2pt minus1pt|\\
+ |\lineskip1ptplus1ptminus1pt}|
+\bitem And \dots don't forget ! is the default escape character.
+!endverbatim
+\smallbreak
+
+\bluesubhead Exercise and answer
+
+Exercises and answers have to be marked up as follows.
+\blueexample Exercise and answer
+
+\begincenterverbatim
+\exercise<exercisetext>
+\answer<answertext>
+
+%followed by a blank line
+!endcenterverbatim
+
+\bluesubhead Footnotes
+
+Plain \TeX{} provides the \cs{footnote} command. ^^{footnote,
+ automatic numbering}
+\TB{} ex{\oldstyle15}.{\oldstyle12} deals with how to number a footnote
+automatically.
+In \bluetex{} the markup for the latter is ^|\ftn||{<footnotetext>}|.
+
+In the title part of an article\Dash or report\Dash
+BLUe falls back on \cs{footnote}, because those footnotes
+are some sort of out of order. That use reads as follows.
+
+\blueexample Footnotes
+
+\begincenterverbatim
+\footnote*{<titlefootnotetext>}
+%or
+\footnote{**}{<titlefootnotetext>}
+%etc.
+!endcenterverbatim
+The above is regular \TeX. Because of me using \cs{oldstyle} for the numbering
+the {\oldstyle*} symbol will be obtained instead of *. To correct this
+provide |{\rm *}|, or just forget about a marker and provide an empty group.
+From the context it is clear enough that the note is about the title.
+The footnotes are set in {\oldstyle8}pt.
+
+^^{margin notes}
+\exercise And what about notes in the margin?
+\answer This is not implemented in \bluetex's OTR.
+ It is rather difficult to combine that with flexibility
+ with the number of columns.
+ If needed occasionally use \cs{vadjust}.
+
+%end exercise
+
+\bluehead Fonts and size switching
+
+Default {\oldstyle10}pt is used. ^^{fonts\ and\ size\ switching\ macros}
+For the moment I stay with Knuth and copied his size-switching
+macros.\ftn{Because of this attitude
+ I could easily kameleon \cs{oldstyle} to all those sizes.
+ To achieve this with NFSS would have cost me much more time,
+ I guess.}
+BLUe's format contains the size-switching macros
+\cs{Large}, $\approx$\thinspace{\oldstyle17}pt, used for chapter headings,
+\cs{large}, $\approx$\thinspace{\oldstyle14}.{\oldstyle5}pt,
+used for transparencies,
+and \cs{small}, that is, {\oldstyle8}pt, used for footnotes.
+Next to these \cs{tenpoint}, \cs{ninepoint}, and
+\cs{eightpoint} have been inherited from manmac.
+
+\cs{tiny} has size {\oldstyle5}pt and has been setup similar to the
+\cs{...type} macros from Knuth's concert format, Appendix~E of \TB.
+A pedagogical stepping stone for size-switching macros,
+and sufficient for just text.
+\beginverbatim
+\def\tiny{\fiverm\baselineskip7pt\let\it\fivei\let\bf\fivebf\let\oldstyle\it}
+!endverbatim
+\exercise How to setup a general \cs{twelvepoint} size-switching macro?
+\answer Copy Knuth's \cs{tenpoint} and adjust for the size.
+\beginverbatim
+\def\twelvepoint{\def\rm{\fam0\twelvenrm}%
+ \textfont0=\twelverm\scriptfont0=\ninerm
+ \scriptscriptfont0=\sevenrm
+ \textfont1=\twelvi \scriptfont1=\ninei
+ \scriptscriptfont1=\seveni
+ \textfont2=\twelvesy\scriptfont2=\ninesy
+ \scriptscriptfont2=\sevensy
+ \textfont3=\twelveex\scriptfont3=\tenex
+ \scriptscriptfont3=\tenex
+ \def\it{\fam\itfam\twelveit}\def\oldstyle
+ {\fam1 \twelvei}\textfont\itfam=\twelveit
+ \def\sl{\fam\slfam\twelvesl}%
+ \textfont\slfam=\twelvesl
+ \def\bf{\fam\bffam\twelvebf}%
+ \textfont\bffam=\twelvebf
+ \scriptfont\bffam=\sevenbf
+ \scriptscriptfont\bffam=\fivebf
+ \def\tt{\fam\ttfam\twelvett}%
+ \textfont\ttfam=\twelvett
+ \tt \ttglue=.5em plus.25em minus.15em
+ \normalbaselineskip=14pt minus1pt
+ \def\MF{{\manual META}\-{\manual FONT}}%fixed
+ \let\sc=\tenrm
+ \let\big=\fourteenbig
+ \setbox\strutbox=\hbox{\vrule
+ height10pt depth4pt width\z@}%
+ \normalbaselines\rm}
+\def\fourteenbig#1{{\hbox{$\left#1\vbox
+ to12pt{}\right.\n@space$}}}
+!endverbatim
+Make sure all the used fonts are available, otherwise
+provide scaled versions. See the script for \cs{Large}.
+
+%end answer
+\exercise What is the effect of |\bf\it|? And of |\it\bf|?
+\answer Once you realize that \cs{bf} and \cs{it} are shortcuts
+ to the fonts \cs{tenbf} and \cs{tenit}, actually to the family,
+ the answer prompts itself: the last font, that is italics
+ respectively bold face roman.
+ One of the features of NFSS is that you will get bold italics
+ in both cases, that is these tags commute, or am I mistaken?
+
+\exercise Experiment with the difference between \cs{twelvepoint}
+ and the use of \cs{magstep1}.\ftn{Courtesy Nico Temme.}
+
+\bluehead Table of Contents
+
+I must confess that my way of writing has changed.
+Now I start keyboarding with a vague idea of the sections and their
+structural dependence.
+This style of working badly needs an automatically generated
+table of contents, ^{ToC} for short.
+The markup to achieve a ToC in the default {\bluetex} reads as follows.
+\begincenterverbatim
+\input blue.tex \loadtocmacros
+\beginscript
+<copyproper>
+\pasteuptoc
+\endscript
+!endcenterverbatim
+Remark.
+The example titles are interspersed with the sections in the ToC,
+because my purpose is to supply an overview while writing, and
+not for finding the appropriate section to assist the reader.
+However, this dynamically generated ToC can be inserted as part of the copy,
+eventually enriched by hand, for the convenience of the reader.
+
+For the \cs{report} format \cs{loadtocmacros} {\em must\/} be omitted.
+The necessary macros come already with \cs{report}.
+This ToC is aimed at the reader.
+
+\bluehead Index
+
+The \cs{report} format has been designed to provide also an index on the fly
+if one wishes. There is nothing against it to play also with it
+in the default format.
+\begincenterverbatim
+\input blue.tex \loadindexmacros
+\beginscript
+<copyproper>%marked up with IRs
+\sortindex\pasteupindex
+\endscript
+!endcenterverbatim
+\endinput
diff --git a/info/laan/pwt/readme.fst b/info/laan/pwt/readme.fst
new file mode 100644
index 0000000000..a965934c9e
--- /dev/null
+++ b/info/laan/pwt/readme.fst
@@ -0,0 +1,66 @@
+What is't? (the collection of pwt.*** files) %June, 1996
+-----------
+
+Publishing with TeX (pwt for short)
+is the user's guide which comes with BLUe's format system.
+
+How to process the PWT user's guide? (also available on NTG's 4AllTeX CD-ROM and
+------------------------------------ TUG/ukTuG/GUTenberg Tex-alive CD-ROM)
+
+Copy Blue's format files
+(blue.tex, fmt.dat, tools.dat, pic.dat)
+in addition to the PWT files you wish.
+
+pwt.scr is the root script which invokes all the other chapters:
+ pwt.int Introduction
+ pwt.txt Text
+ pwt.mat Mathematics
+ pwt.tab Tables
+ pwt.grf Graphics
+ pwt.ref References
+ pwt.ind Indexing
+ pwt.cus Customization
+ pwt.aft Afterthoughts
+ pwt.fmt Appendix: formats
+ pwt.tls Appendix: Tools
+ pwt.sur Appendix: Survey (of related material)
+ pwt.his Appendix: History of changes
+ pwt.tot Appendix: Table of Tags
+ pwt.obs Appendix: Obsolete items
+
+A preview or print can be obtained after
+
+ tex pwt.scr
+
+(Each chapter can be processed independently such as
+ tex pwt.int
+for example. (close after prompt with \end or \pasteupindex\sortindex\end).)
+
+Contents BLUe's format system (also available on NTG's 4AllTeX CD-ROM and
+----------------------------- TUG/ukTuG/GUTenberg Tex-alive CD-ROM)
+
+
+The files are: blue.tex (format)
+ fmt.dat (variant formats)
+ tools.dat (tools like indexing)
+ address.dat, lit.dat, pic.dat (databases addresses, literature, pictures)
+Its user's guide is called Publishing with TeX.
+TeX nical aspects have been explained in the Paradigm series.
+
+Articles in the Paradigm series
+-------------------------------
+
+Paradigms: Headache?
+Paradigms: Plain's item extended
+Paradigms: Two-part macros
+Paradigms: Parameterization I Options
+Paradigms: Winds and halfwinds---Details matter
+Paradigms: It's all in the game
+Paradigms: Loops
+Paradigms: Searching (in BLUe)
+Paradigms: Sorting (in TeX)
+Paradigms: Just a little bit of PostScript (with a few .eps files)
+
+
+Kees van der Laan, Hunzeweg 57, 9893PB, Garnwerd, The Netherlands.
+Phone: (31) (0)594 62 1525, email: cgl@rc.service.rug.nl.