%\def\TexFiles{}
\def\ext{Changeable}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Compile this file with TeX and review the document. %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\hfill 15 Apr. 94
\bigskip
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Code of examples and exercises from %
% %
% TeX and LaTeX: Drawing and Literate Programming %
% %
%
[email protected] %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\immediate\write16{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}
\immediate\write16{<<< tex Examples.tex <<<<<<<<<<<}
\immediate\write16{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%%
\input ProTex.sty %%%%%%%%%%%%%%%%%%%%
\expandafter\def\csname :warn\endcsname#1{}
\Code\top{}{\immediate\write16{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}
\immediate\write16{<<<<< \op \name.\ext}
\immediate\write16{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}
% \com
}
\ifx \TexFiles\empty %%%%%%%%%%%%%%%%%%%%%%%%
\def\tex{tex}
\def\DEFEND{\% LaTeX requires a {\tt\string\Defend} here \%}
\Code\Open{}{\files
\startInput
}
\Code\Close{}{
\endInput
\\bye}
\else %%%%%%%%%%%%%%%%%%%%%%%%
\def\tex{latex}
\Code\DEFEND{{\it LaTeX requires a {\tt\string\Defend}
here}}{\% LaTeX requires a \string\Defend here \%\string\Defend}
\Code\Open{}{\\documentstyle{book}
\files
\\begin{document}
\startInput}
\Code\Close{}{
\endInput
\\end{document}}
\fi %%%%%%%%%%%%%%%%%%%%%%%%
\Code\fileD{}{
\\input DraTex.sty }
\Code\fileAD{}{
\\input DraTex.sty
\\input AlDraTex.sty }
\Code\fileP{}{
\\input ProTex.sty }
\Code\startInput{}{\\Draw}
\Code\endInput{}{\\EndDraw}
\AlProTex{\ext,<<<>>>,[],list,|,ShowFile,NoShow} %%%%%%%%%%%%%%%%%%%%
\let\SC=\ShowCode
\Code\execute{}<<<
>>>
\newcount\exron
\def\nop#1{\ifnum \exron>0 #1 \fi}
\catcode`\^^M=13 \catcode`\#=12 %
\def\<<<{%
\edef\temp{%
\noexpand\AppendCode\noexpand\execute<<<
\nop#\op\space\space \name.\ext\space\space\space # \com
\nop#xdvi\space\space \name.dvi
>>>}\ShowOff\temp\ShowOn%
\def\ShowCode{%
\expandafter\OutputCode\csname\name\endcsname \def\top
{} \global\let\ShowCode=\SC \ShowCode}%
\expandafter\Code\csname\name\endcsname{}<<<
\top}%
\catcode`\^^M=5 \catcode`\#=6
\def\newpage{\def\newpage{\par\vfill\break}}
\newcount\1 \newcount\2 \newcount\3
\def\ForTex{tex}
\def\Ex#1#2#3{\global\advance\exron by -1
\edef\op{#1}
\edef\For{for \ifx \op\ForTex \else La\fi TeX}
\def\com{#2}
\def\name{#3} \hrule
\medskip\noindent$\underline{\hbox{#1\quad\name.\ext}}$
\qquad{\it #2\/} {\rm(\For)}\medskip}
\def\Exr#1#2#3{\global\exron=2
\setbox0=\hbox{\global\1#1 \global\2#2 \global\3#3}
\Ex{\tex}{Exercise \the\1.\the\2.\the\3}{exr#1#2#3}}
\def\Lib#1{\newpage\hrule
\noindent\hfil{\bf \strut#1}\hrule}
\hbadness=10000 \vbadness=10000 \hfuzz=99in \vfuzz=99in
%%
%%
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\noindent NOTES
(a) If you want to get TeX files instead of LaTeX files, remove `\%'
from the first line of file `{\tt Examples.tex}'.%%% first line of this file
(b) If you want different extensions in the files' names,
change the definition of {\tt\string\ext} in the second line
of file `{\tt Examples.tex}'.%%% second line of this file
(c) Files carrying names that start with `exr' have been retrieved
from exercises. Many of these files are incomplete, and they expect
that the reader will provide the missing code. (La)TeX will prompt you
with `?' on incomplete files. In such cases, type `x' followed by
RETURN.
\bigskip \Lib{DraTeX} \def\files{\fileD}
\Ex{tex}{First example in section 6.2}{sec62a}
\<<<
\input DraTex.sty
\Draw
\LineAt(0.1, 0,-18,-10)
\LineAt(-18,-10,- 6, 26)
\LineAt(- 6, 26, 18,- 4)
\LineAt( 18,- 4, 12,-40)
\LineAt( 18,- 4, 24,-40)
\LineAt( 18,- 4, 58,- 4)
\LineAt( 58,- 4, 52,-40)
\LineAt(58,-4,64,-40) \LineAt(58,-4,66,4)
\EndDraw
\bye >>>
\Ex{latex}{First example in section 6.2}{sec62b}
\<<<
\documentstyle{report}
\input DraTex.sty
\begin{document}
\Draw
\LineAt(0.1, 0,-18,-10)
\LineAt(-18,-10,- 6, 26)
\LineAt(- 6, 26, 18,- 4)
\LineAt( 18,- 4, 12,-40)
\LineAt( 18,- 4, 24,-40)
\LineAt( 18,- 4, 58,- 4)
\LineAt( 58,- 4, 52,-40)
\LineAt(58,-4,64,-40) \LineAt( 58,-4,66,4)
\EndDraw
\end{document}>>>
\Ex{latex}{First example in section 6.2---second version}{sec62c}
\<<<
\documentstyle[DraTex]{report}
\begin{document}
\Draw
\LineAt(0.1, 0,-18,-10)
\LineAt(-18,-10,- 6, 26)
\LineAt(- 6, 26, 18,- 4)
\LineAt( 18,- 4, 12,-40)
\LineAt( 18,- 4, 24,-40)
\LineAt( 18,- 4, 58,- 4)
\LineAt( 58,- 4, 52,-40)
\LineAt(58,-4,64,-40) \LineAt(58,-4,66,4)
\EndDraw
\end{document}>>>
\Exr672
\<<<
|Open
\MarkLoc(a) \Move(50,0)
\MarkLoc(A) \Move(50,0)
\MarkLoc(b) \Move(-30,30)
\MarkLoc(B) \Move(-30,30)
\MarkLoc(c) \Move(-20,-30)
\MarkLoc(C)
\Curve(A,b,b,B)
\Curve(B,c,c,C)
\Curve(C,a,a,A)
|Close>>>
\Ex{tex}{First example in section 6.1}{sec61}
\<<<
\input DraTex.sty
We can draw clocks of
different styles and sizes.
\Draw
\Move(0,20) \Line(0,-50) \Line(50,0)
\PenSize(1.5pt) \Line(0,50) \Line(-50,0)
\Move(5,-25) \Text(--9--)
\Move(20,-18) \Text(--6--)
\Move(20,18) \Text(--3--)
\Move(-20,18) \Text(--12--)
\Move(0,-18) {\RotateTo(60) \LineF(19)}
\RotateTo(210) \LineF(14)
\EndDraw
We can draw people of
different shapes and looks.
\Draw(0.6pt,0.6pt)
\DrawOvalArc(30,45)(0,180)
\DrawOvalArc(30,12)(180,360)
\DrawOvalArc(60,25)(140,400)
\Move(0,5)
\DrawOvalArc(30,60)(225,315)
\DrawOvalArc(20,52)(260,280)
\Move(-10,-37) {\Text(--$\cdotp$--)} \Text(--o--)
\Move(20,0) {\Text(--$\cdotp$--)} \Text(--o--)
\EndDraw
And we can produce many other
types of drawings. \bye>>>
\Ex{latex}{First example in section 6.1}{sec61a}
\<<<
\documentstyle{report}
\input DraTex.sty
\begin{document}
We can draw clocks of
different styles and sizes.
\Draw
\Move(0,20) \Line(0,-50) \Line(50,0)
\PenSize(1.5pt) \Line(0,50) \Line(-50,0)
\Move(5,-25) \Text(--9--)
\Move(20,-18) \Text(--6--)
\Move(20,18) \Text(--3--)
\Move(-20,18) \Text(--12--)
\Move(0,-18) {\RotateTo(60) \LineF(19)}
\RotateTo(210) \LineF(14)
\EndDraw
We can draw people of
different shapes and looks.
\Draw(0.6pt,0.6pt)
\DrawOvalArc(30,45)(0,180)
\DrawOvalArc(30,12)(180,360)
\DrawOvalArc(60,25)(140,400)
\Move(0,5)
\DrawOvalArc(30,60)(225,315)
\DrawOvalArc(20,52)(260,280)
\Move(-10,-37) {\Text(--$\cdotp$--)} \Text(--o--)
\Move(20,0) {\Text(--$\cdotp$--)} \Text(--o--)
\EndDraw
And we can produce many other
types of drawings. \end{document}>>>
\Ex{latex}{First example in section 6.1---second version}{sec61b}
\<<<
\documentstyle[DraTex]{report}
\begin{document}
We can draw clocks of
different styles and sizes.
\Draw
\Move(0,20) \Line(0,-50) \Line(50,0)
\PenSize(1.5pt) \Line(0,50) \Line(-50,0)
\Move(5,-25) \Text(--9--)
\Move(20,-18) \Text(--6--)
\Move(20,18) \Text(--3--)
\Move(-20,18) \Text(--12--)
\Move(0,-18) {\RotateTo(60) \LineF(19)}
\RotateTo(210) \LineF(14)
\EndDraw
We can draw people of
different shapes and looks.
\Draw(0.6pt,0.6pt)
\DrawOvalArc(30,45)(0,180)
\DrawOvalArc(30,12)(180,360)
\DrawOvalArc(60,25)(140,400)
\Move(0,5)
\DrawOvalArc(30,60)(225,315)
\DrawOvalArc(20,52)(260,280)
\Move(-10,-37) {\Text(--$\cdotp$--)} \Text(--o--)
\Move(20,0) {\Text(--$\cdotp$--)} \Text(--o--)
\EndDraw
And we can produce many other
types of drawings. \end{document}>>>
\Exr732
\<<<
|Open
\font\ARROWS=line10\space scaled\magstep5
\font\CIRCLES=lcircle10\space scaled\magstep5
% \newfont{\ARROWS}{line10\space scaled\magstep5}
% \newfont{\CIRCLES}{lcircle10\space scaled\magstep5}
\Text(--\CIRCLES \char 10--)
\Text(--\CIRCLES \char 11--) \Text(--\ARROWS \char 55--)
\Text(--\CIRCLES \char 110--)\EntryExit(-1,0,-1,0)
\Text(--\CIRCLES \char 114--)|Close>>>
\Exr741
\<<<
|Open
\Ragged(8)
\Line(10,-10) \Line(10,20)
\LineTo(0,0)
|Close>>>
\Ex{\tex}{First example in section 8.1}{sec81}
\<<<
|Open
\ThreeDim(-150,-60,-600)
\Line(60,0,0) \Line(0,0,60)
\Line(-60,0,0) \Line(0,0,-60)
\LineTo(0,60,0) \Line(60,0,0)
\Line(0,-60,0)
\LineAt(0,60,0,0,60,60)
\Line(0,-60,0)
\EndThreeDim |Close>>>
\Ex{\tex}{Example of USA map in section 9.3}{usa}
\<<<
|Open(0.9pt,0.9pt)
\Table\USA{ % California
-60,-35 & -77,-30 & -80,
-20 & -90,-15 & -100,40 &
% Oregon
-100,50 & -90,80 &
% Wash
-90,95 & -78,90 & -75,95 &
% Minn
100,70 & 85,60 &
% Wisc-Mich
95,60 & 105,65 & 102,63 & 110,60 & 125,60 & 110,55 & 110,30 &
115,25 & 120,30 & 115,40 & 115,50 & 120,55 & 130,55 & 140,40 &
135,25 &
% Ohio-NY-Vt
145,25 & 155,30 & 160,45 & 175,45 & 175,55 & 180,60 & 195,65 &
% Maine
200,75 & 200,85 & 205,90 & 210,90 & 215,80 & 220,75 & 205,60 & 205,50 &
% Mass--NY
210,43 & 208,47 & 215,43 & 190,30 & 202,35 &
% NJ--Va
197,25 & 190,18 & 185,20 & 190,15 & 190,5 & 182,18 & 182,0 & 185,0 &
% NC
190,-8 & 185,-4 & 183,-6 & 186,-6 & 182,-15 &
190,-18 & 190,-10 & 192,-10 &
195,-18 &
% Ga-Fl
165,-40 & 160,-50 & 175,-80 & 175,-90 & 170,-100 & 165,-100 &
155,-80 & 155,-65 & 145,-60 & 140,-62 & 136,-62 & 120,-60 &
% Alaba--La
102,-63 & 107,-67 & 107,-72 & 110,-75 & 90,-65 &
78,-65 &
% Texas
62,-78 & 57,-78 & 50,-82 & 53,-92 & 48,-90 & 25,-65 & 15,-65 &
15,-68 & -10,-50 &
% New Mexico
-40,-50 &
% Back to California
-60,-35 }
{ \USA(0,0){\MoveTo} \USA(1,99){\LineTo} } \Text(--USA--)
\Scale(0.5,0.5) \USA(46,46){\MoveTo} \USA(47,92){\LineTo}
\MoveTo(-30,0) \MarkLoc(a) \USA(0,0){\Move} \MarkLoc(b)
\USA(0,46){{\LineToLoc(b)} \MarkLoc(b) \MoveToLoc(a) \Move}
|Close>>>
\Exr{10}1{1a}
\<<<
|Open
\Text(--Government~%
Bonds (\%)--)
\Table\B{Britain,9.59 &
Canada,7.98 & Japan,5.46 &
U.S., 6.84 & Mexico,14.9}
\B(0,4){\PutBar}
|Close >>>
\Exr{10}1{1b}
\<<<
|Open
\chick(0,75) \Scale(-1,1)
\chick(0,140)
|Close >>>
\Exr{10}1{1c}
\<<<
|Open
\Table\x{ 30,40
& 15,60 & 27,15 & 35,35
& 50,45 & 25,70 & 20,20
& 25,75 } \x(0,99){\Tr}
|Close >>>
\Exr{10}1{1d}
\<<<
|Open
\sqr(-24,0)
\sqr(0,32)
\sqr(24,-32)
|Close >>>
\Exr{10}1{1e}
\<<<
|Open
\engine(90) \MoveTo(50,0)
\engine(180) \MoveTo(100,0)
\engine(-30)
|Close >>>
\Exr{10}1{1f}
\<<<
|Open
\MarkLoc(A)
\spring(110) \Rotate(70)
\spring(60) \MarkLoc(B)
\DSeg\RotateTo(B,A)
\LSeg\spring(B,A)
|Close >>>
\Exr{10}21
\<<<
|Open
\new(BODY) \<BODY>(20)
\LineF(20) \Rotate(55) \LineF(16)
\new(hand) \<BODY>(140) \LineF(35)
\new(hand) \<BODY>(90) \LineF(7)
\new(head) \<BODY>(-60) \LineF(19)
\new(left-leg) \<BODY>(210) \LineF(12)
\Rotate(30) \LineF(14) \new(right-leg)
\Do(1,11){\I+15; \<head>(\Val\I)
\LineF(11)}
|Close >>>
\Exr{10}22
\<<<
|Open
\def\DefineSymbol#1{%
\Indirect\Define<#1>}
\def\DrawText(--#1--){%
\let\xNextSym=\xDrawSym \xNextSym#1{}}
\def\xDrawSym#1{\def\temp{#1}%
\ifx \temp\empty \let \xNextSym=\relax
\else \Indirect<#1>\fi \xNextSym }
\DefineSymbol A{{ \Line(21,60)
\Line(21,-60) \Move(-7,20)
\Line(-28,0) } \Move(52,0) }
\DefineSymbol B{{ \DrawText(--P--)
\Move(-25,18)
\DrawOvalArc(15,18)(-90,90)
\Move(0,-18) \Line(-25,0)}
\Move(50,0) } \DefineSymbol P
{{ \Line(0,60) \Line(25,0)
\Move(0,-12) \DrawOvalArc(15,12)(-90,90)
\Move(0,-12) \Line(-25,0) } \Move(50,0) }
\DefineSymbol C{{ \Move(20,30)
\DrawOvalArc(20,30)(45,315) } \Move(46.6,0) }
\DefineSymbol D{{ \Line(0,60) \Line(20,0)
\Move(0 ,-30) \DrawOvalArc(20,30)(-90,90) \Move(0,-30)
\Line(-20,0) } \Move(50,0) }
\DefineSymbol E{{ \DrawText(--F--) \Move(-50,0)
\Line(40,0) } \Move(50,0) }
\DefineSymbol F{{ \Line(0,60) \Line(40,0)
\Move(-40,-30) \Line(30,0) } \Move(50,0) }
\DefineSymbol G{{ \DrawText(--C--)
\Move(-10,30) {\Line(-20,0)} \Line(0,-30) }
\Move(46.6,0) }
\DefineSymbol H{{ \Line(0,60) \Move(40,0)
\Line(0,-60) \Move(0,30) \Line(-40,0) } \Move(50,0) }
\DefineSymbol I{{ \Line(0,60) } \Move(10,0) }
\DefineSymbol J{{ \Move(20,17) \DrawOvalArc(20,17)(180,360)
\Move(20,0) \Line(0,43) } \Move(50,0) }
\DefineSymbol K{{ \Line(0,60) \Move(0,-35)
\Line(40,35) \Move(-32,-28) \Line(32,-32) } \Move(50,0) }
\DefineSymbol L{{ { \Line(0,60) } \Line(40,0) } \Move(50,0) }
\DefineSymbol M{{ \Line(0,60) \Line(25,-60)
\Line(25,60) \Line(0,-60) } \Move(60,0) }
\DefineSymbol N{{ \Line(0,60) \Line(40,-60)
\Line(0,60) } \Move(50,0) }
\DefineSymbol O{{ \Move(22,30) \DrawOval(22,30) } \Move(54,0) }
\DefineSymbol P{{ \Line(0,60) \Line(25,0)
\Move(0,-12) \DrawOvalArc(15,12)(-90,90)
\Move(0,-12) \Line(-25,0) } \Move(50,0) }
\DefineSymbol Q{{ \DrawText(--O--) \Move(-10,-5)
\Line(-15,15) } \Move(55,0) }
\DefineSymbol R{{ \DrawText(--P--) \Move(-10,0)
\Line(-15,36) } \Move(50,0) }
\DefineSymbol S{{ \Move(20,18) \DrawOvalArc(20,18)(-140,90)
\Move(0,30) \DrawOvalArc(20,12)(40,270) } \Move(50,0) }
\DefineSymbol T{{ \Move(22,0) \Line(0,60) \Move(-22,0)
\Line(44,0) } \Move(54,0) }
\DefineSymbol U{{ \Move(20,15) \DrawOvalArc(20,15)(180,360)
\Move(-20,0) \Line(0,45) \Move(40,0) \Line(0,-45) }
\Move(50,0) }
\DefineSymbol V{{ \Move(0,60) \Line(22,-60)
\Line(22,60) } \Move(54,0) }
\DefineSymbol W{{ \Move(0,60) \Line(15,-60)
\Line(15,60) \Line(15,-60) \Line(15,60) } \Move(70,0) }
\DefineSymbol X{{ \Line(40,60) \Move(-40,0)
\Line(40,-60) } \Move(50,0) }
\DefineSymbol Y{{ \Move(20,0) \Line(0,34) { \Line(-20,26)}
\Line(20,26) } \Move(50,0) }
\DefineSymbol Z{{ \Move(0,60) \Line(40,0) \Line(-40,-60)
\Line(40,0) } \Move(50,0) }
\DefineSymbol 0{{ \Move(25,30) \DrawOval(25,30) } \Move(60,0) }
\DefineSymbol 1{{ \Line(0,60) } \Move(10,0) }
\DefineSymbol 2{{ \MarkLoc(a) \Move(0,10)
\MarkLoc(a') \Move(40,30) \MarkLoc(b)
\Move(0,-10) \MarkLoc(b') \Curve(a,a',b',b)
\Move(-20,10) \DrawOvalArc(20,20)(0,180)
\Move(-20,-40) \Line(40,0) } \Move(50,0) }
\DefineSymbol 3{{ \MarkLoc(a') \Move(0,10) \MarkLoc(a)
\Move(20,-10) \MarkLoc(b) \Move(-10,0) \MarkLoc(b')
\Curve(a,a',b',b) \Move(22,0) \MarkLoc(b')
\Move(8,8) \MarkLoc(a') \Move(0,10) \MarkLoc(a)
\Curve(a,a',b',b) \Move(0,10) \MarkLoc(a')
\Move(-8,8) \MarkLoc(b') \Move(-10,0)
\MarkLoc(b) \Curve(a,a',b',b) \Move(-5,0)
\MarkLoc(b') \Move(-5,-3) \MarkLoc(a')
\Move(0,-2) \MarkLoc(a) \Curve(a,a',b',b)
\Line(30,29) \Line(-40,0) } \Move(50,0) }
\DefineSymbol 4{{ \Move(35,0) \Line(0,60)
\Line(-35,-35) \Line(45,0)} \Move(55,0) }
\DefineSymbol 5{{ \Move(15,20) \DrawOvalArc(19,20)(-140,140)
\Move(-15,10) \Line(0,30) \Line(30,0) } \Move(44,0) }
\DefineSymbol 6{{ \Move(22,30) \DrawOvalArc(22,30)(70,270)
\Move(0,-10) \DrawOvalArc(22,15)(0,174)
\DrawOvalArc(22,20)(270,360) } \Move(54,0) }
\DefineSymbol 7{{ \Move(0,60) \Line(40,0)
\MarkLoc(a) \Move(-20,-60) \MarkLoc(b)
\DSeg\RotateTo(b,a) \Rotate(20) \MoveF(10) \MarkLoc(b')
\MoveToLoc(a)
\DSeg\RotateTo(a,b) \Rotate(-20) \MoveF(10) \MarkLoc(a')
\Curve(a,a',b',b) } \Move(50,0) }
\DefineSymbol 8{{ \Move(20,17) \DrawOval(20,17)
\Move(0,30) \DrawOval(20,13) } \Move(50,0) }
\DefineSymbol 9{{\Move(50,60) \Scale(-1,-1) \DrawText(--6--) } \Move(54,0)
}
\Scale(0.1,0.1) \Ragged(1)
\DrawText(--BOLD--)
\PenSize(0.2pt) \MoveTo(0,-100)
{ \Scale(-1,1)
\DrawText(--BACKWARD--) }
\MoveTo(0,-200) \RotatedAxes(0,75) \DrawText(--SLANTED--)
\EndRotatedAxes \MoveTo(0,-300) \RotatedAxes(-45,45)
\DrawText(--ROTATED--) \EndRotatedAxes
|Close>>>
\Ex{\tex}{Last example in section 11.2}{boxes}
\<<<
|Open
\Object\ch(1){\Text(--#1--)
\MoveToExit(-1,-1)
\FigSize\Q\R{\Text(--#1--)}
\DrawRect(\Val\Q,\Val\R) }
\Define\chrs(1){\font\f=#1\space scaled\magstep4 \f
\Table\chrs{A & l & l & ~ & i & n & ~ &
b & o & x & e & s & .} \chrs(0,99){\ch} }
\PenSize(0.2pt) \EntryExit(-1,-1,1,-1)
{\chrs(cmtt10)} \Move(0,-20) \chrs(cmsl10)
|Close>>>
\Exr{11}21
\<<<
|Open
\Define\side(3){
\ProjectedAxes(#1,#2)(#1,#3)
\DrawRect(1,1) \Move(0.5,0.5)
\DrawCircle(0.5)
\EndProjectedAxes }
\ThreeDim(80,70,-40) \MarkPLoc(a)
\Move(0,-50,0) \MarkPLoc(b)
\Move(0,50,25) \MarkPLoc(c)
\Move(-25,0,-25) \MarkPLoc(d)
\side(a,b,d) \side(a,b,c) \side(a,c,d)
\EndThreeDim
|Close >>>
\Exr{11}24
\<<<
|Open
\Define\Spline(1){
\MarkLoc(0) \MoveTo(0,0) \MarkLoc(00)
\Table\P{#1} \Define\Count(1){\K+1;} \K=-4;
\P(0,999){\Count}
\Do(0,\Val\K){
\GetCoefficients
\MoveTo(\Val\Ao,\Val\Bo) \CSeg\Move(00,0)
\MarkLoc(o) \f \MarkLoc(x)
\Do(1,30){
\T=\DoReg; \T/30;
\X=\Aiii; \X*\T; \X+\Aii; \X*\T; \X+\Ai; \X*\T;
\Y=\Biii; \Y*\T; \Y+\Bii; \Y*\T; \Y+\Bi; \Y*\T;
\MoveToLoc(o) \Move(\Val\X,\Val\Y) \f
{\LineToLoc(x)} \MarkLoc(x) }}
\MoveToLoc(0)}
\Define\f{}
\DecVar\Ao \DecVar\Ai \DecVar\Aii \DecVar\Aiii \DecVar\X
\DecVar\Bo \DecVar\Bi \DecVar\Bii \DecVar\Biii \DecVar\Y
\Define\GetCoefficients{
\I=\DoReg; \P(\Val\I,\Val\I){\First}
\I+1; \P(\Val\I,\Val\I){\Second}
\I+1; \P(\Val\I,\Val\I){\Third}
\I+1; \P(\Val\I,\Val\I){\Fourth} }
\Define\First(2){\Ao=#1; \Ai=-#1; \Aii=#1; \Aiii=-#1;
\Bo=#2; \Bi=-#2; \Bii=#2; \Biii=-#2;}
\Define\Second(2){
\T=#1; \T* 4; \Ao +\T; \T=#2; \T* 4; \Bo +\T;
\T=#1; \T*-2; \Aii+\T; \T=#2; \T*-2; \Bii+\T;
\T=#1; \T* 3; \Aiii +\T; \T=#2; \T* 3; \Biii +\T;}
\Define\Third(2){ \Ao +#1; \Ao /6; \Bo +#2; \Bo /6;
\Ai +#1; \Ai /2; \Bi +#2; \Bi /2;
\Aii+#1; \Aii/2; \Bii+#2; \Bii/2;
\T=#1; \T*-3; \Aiii+\T; \T=#2; \T*-3; \Biii+\T;}
\Define\Fourth(2){
\Aiii+#1; \Aiii/6; \Biii+#2; \Biii/6;}
\Spline(0,15 & 30,-70
& 40,-50 & 10,0 & 15,30
& 50,5 &60,10 & 8,45 &
8,55 & 30,70 & 0,80 &
-30,70 &-8,55 & -8,45 &
-60,10 &-50,5 & -15,30 &
-10,0 &-40,-50 &-30,-70 &
0,15 & 30,-70 & 40,-50 )
\Define\ShowPoint(2){
\MoveToLoc(0) \Move(#1,#2)
\Text(--$\circ$--)}
\P(0,99){\ShowPoint}
\Define\TEX{
\Spline(0,-15 & 0,-15 &
0,-15 & 0, 15 &
0, 15 & 0, 15 )
\Spline(-10,15 &
-10,15 & -10,15 & 10,15 &
10,15 & 10,15)
\Move(12,0)
\Spline(0,0 & 0,0 & 0,0 & 14,0 & 14,0 & 14,0)
\Spline( 20,15 &20,15 &20,15 & 0,15 & 0,15
& 0,-15 & 0,-15 & 20,-15 &20,-15&20,-15)
\Move(32,0) \Spline( -10,-15 & -10,-15 &
-10,-15 & 10,15 & 10,15 & 10,15)
\Spline( -10,15 &
-10,15 & -10,15 & 10,-15 & 10,-15 & 10,-15) }
\TEX \MoveTo(0,0) \F
\TEX \MoveTo(0,-35) \G
\TEX
|Close >>>
\Exr{11}31
\<<<
|Open
\Define\put(2){
\IF \EqText(,#1) \THEN
\top \Define\put(1){}
\ELSE \push(#1) \FI \put(#2)}
\Define\stack(1){
{\put(#1,,)} \Move(0,-13)}
\Table\x{ & 1& 1, 2&
1, 2, 3& 1, 2, 3, 4&
1, 2, 3, 4, *& 1, 2, 12&
1, 2, 12,+& 1, 14& 1, 14,+& 15}
\x(0,100){\stack}
|Close >>>
\Exr{11}32
\<<<
|Open
\Table\g{
16 & 8 & 4 & 2 & 1 &
20 & 16 & 8 & 4 & 2 &
17 & 12 & 16 & 8 & 4 &
23 & 20 & 12 & 13 & 17 }
\ThreeDim(160,75,-70)
\Scale(20,5,20)
\g(0,140){\surface}
\EndThreeDim
|Close >>>
\Ex{\tex}{NEW OPTION FOR {\tt\char92}ThreeDim}{NewThreeDim}
{\tt\string\ThreeDim($x_e$,$y_e$,$z_e$)} perspective projections (old option)
{\tt\string\ThreeDim($\alpha_{xy}$,$\alpha_z$)} parallel projections (new additional option):
$\alpha_{xy}$ --- direction within xy plane,
$\alpha_z$ --- direction with respect to xy plane.
e.g., {\tt\string\ThreeDim(30,60)} or
{\tt\string \ThreeDim(45,60)}
\<<<
|Open
\Define\cube{
\Line(50,0,0){\Line(0,0,50)}
\Line(0,50,0){\Line(0,0,50)}
\Line(-50,0,0){\Line(0,0,50)}
\Line(0,-50,0) \Move(0,0,50)
\Move(50,0,0) \Line(0,50,0)
\Line(-50,0,0) }
\ThreeDim(80,80,-100) \cube \EndThreeDim
\MoveTo(0,-130)
\ThreeDim(45,60) \cube \EndThreeDim
\MoveTo(0,-260)
\ThreeDim(30,60) \cube \EndThreeDim
|Close>>>
\Lib{AlDraTeX} \def\files{\fileAD}
\Ex{tex}{Example in section 13.2}{sec132}
\<<<
\input DraTex.sty
\input AlDraTex.sty
\Draw
\Scale(1,0.5)
\PieChartSpec(1,50,20)()
\PieChart(15 & 10 & 30)
\Move(0,-6)
\DrawOvalArc(50,50)(180,360)
\EndDraw
\bye>>>
\Ex{tex}{Example in section 13.2---second version}{sec132a}
\<<<
\input DraTex.sty
\def\AlDraTex{pie}
\input AlDraTex.sty
\Draw
\Scale(1,0.5)
\PieChartSpec(1,50,20)()
\PieChart(15 & 10 & 30)
\Move(0,-6)
\DrawOvalArc(50,50)(180,360)
\EndDraw
\bye>>>
\Ex{latex}{Example in section 13.2}{sec132b}
\<<<
\documentstyle{report}
\input DraTex.sty
\input AlDraTex.sty
\begin{document}
\Draw
\Scale(1,0.5)
\PieChartSpec(1,50,20)()
\PieChart(15 & 10 & 30)
\Move(0,-6)
\DrawOvalArc(50,50)(180,360)
\EndDraw
\end{document}>>>
\Ex{latex}{Example in section 13.2---second version}{sec132c}
\<<<
\documentstyle[DraTex,AlDraTex]{report}
\begin{document}
\Draw
\Scale(1,0.5)
\PieChartSpec(1,50,20)()
\PieChart(15 & 10 & 30)
\Move(0,-6)
\DrawOvalArc(50,50)(180,360)
\EndDraw
\end{document}>>>
\Ex{latex}{Example in section 13.2---third version}{sec132d}
\<<<
\documentstyle{report}
\input DraTex.sty
\def\AlDraTex{pie}
\input AlDraTex.sty
\begin{document}
\Draw
\Scale(1,0.5)
\PieChartSpec(1,50,20)()
\PieChart(15 & 10 & 30)
\Move(0,-6)
\DrawOvalArc(50,50)(180,360)
\EndDraw
\end{document}>>>
\Ex{latex}{Example in section 13.2---forth version}{sec132e}
\<<<
\def\AlDraTex{pie}
\documentstyle[DraTex,AlDraTex]{report}
\begin{document}
\Draw
\Scale(1,0.5)
\PieChartSpec(1,50,20)()
\PieChart(15 & 10 & 30)
\Move(0,-6)
\DrawOvalArc(50,50)(180,360)
\EndDraw
\end{document}>>>
\Ex{\tex}{Chemical diagram in section 16.1}{sec161}
\<<<
|Open
\Define\ChemEdge(3){{
\MoveToNodeDir(#2,#1)
\MarkLoc(b) \MoveToNodeDir(#1,#2)
\MarkLoc(a) \DSeg\RotateTo(a,b)
\Rotate(-90)\Q=#3; \Q/2; \Q-0.5;
\Q*2.2; \MoveF(\Val\Q)
\Do(1,#3){ {\CSeg\Line(a,b)}
\MoveF(-2.2) } }}
\Do(1,6){ \MoveF(30)
\Node(\DoReg)(--C--) \MoveF(20) \Node(x)(--H--)
\ChemEdge(\DoReg,x,1) \MoveTo(0,0) \Rotate(60) }
\ChemEdge(1,2,2) \ChemEdge(2,3,1) \ChemEdge(3,4,2)
\ChemEdge(4,5,1) \ChemEdge(5,6,2) \ChemEdge(6,1,1)
|Close >>>
\Ex{\tex}{Finite automaton in last example of chapter 17}{FA}
\<<<
|Open
\NewCIRCNode(\StateNode,106,)
\NewCIRCNode(\AStateNode,106,103)
\Define\StateAt(3){ \MoveTo(#2,#3)
\StateNode(#1)(--$q_{#1}$--)}
\Define\AStateAt(3){
\MoveTo(#2,#3)
\AStateNode(#1)(--$q_{#1}$--)}
\DiagramSpec(\StateAt&
\AStateAt&\TransEdge)
\ArrowHeads(1) \Diagram
( 0,0,0 & 1,50,50 &
3,90,-50 & 4,20,-50 )(2,75,0)
(0,1,a,b & 1,2,a, & 0,2, ,b & 2,2,0,b & 0,4,a, & 4,3,a,b )
\CurvedEdgeAt(3,1,0,1,1,0)(20,0.3,0,0.5) \EdgeLabel[+](--a--)
|Close>>>
\noindent\dotfill\
New commands in AlDraTeX for setting spread diagrams (add to end of ch
17)
\noindent\dotfill\
\begingroup
\leftskip= 1.5em
\parindent = -\leftskip
\def\item{\medskip\leavevmode\hbox to \leftskip{$\circ$\hss}}
\item
`{\tt\string\DefNode}'. A prefix to a node-generating command. The
prefix asks that the command will produce an invisble node. The
invisible node is assigned addresses but is not drawn into the
figure.
\item
`{\tt\string\PutNode(N)}'. This command realizes, according to the current
conditions, a specified invisible node that has been defined earlier
by `{\tt\string\DefNode}'.
\item
`{\tt\string\ZeroNodesDim}'. Sets the pseudovariables `{\tt\string\WidthX}',
`{\tt\string\WidthY}', `{\tt\string\MaxX}', and `{\tt\string\MaxY}' to 0.
\item
`{\tt\string\AddNodeDim(N)}'. Inserts the horizontal and vertical
dimensions of node N to the pseudovariables `{\tt\string\Widthx}' and
`{\tt\string\Widthy}', respectively. Adds these values to the
pseudovariables `{\tt\string\WidthX}' and `{\tt\string\WidthY}',
respectively. In addition, half the horizontal dimension of node N is
stored in `{\tt\string\MaxX}' if the pseudovariable contains a smaller
value, and a similar outcome holds for the vertical dimension with
respect to the pseudovariable `{\tt\string\MaxY}'.
\par\endgroup
\Ex{\tex}{}{newA}
\<<<
|Open
\DefNode\CircleNode(a)(--Two--)
\MoveToNode(a,0,0) \MarkLoc(A)
\MoveToNode(a,1,0) \MarkLoc(B)
\LSeg\R(A,B) \MoveTo(0,0)
\OvalNode(b)(--Touching Nodes--)
\RotateTo(19.5) \MoveF(5) \MarkLoc(A)
\MoveToNodeDir(b,A) \MarkLoc(A)
\MoveToNode(b,0,0)
\RotateTo(20.5) \MoveF(5) \MarkLoc(B)
\MoveToNodeDir(b,B) \MarkLoc(B)
\RotateTo(20) \MoveF(5) \MarkLoc(C)
\MoveToNode(b,0,0) \MoveToNodeDir(b,C)
\DSeg\RotateTo(A,B) \Rotate(-90)
\MoveF(\Val\R) \PutNode(a)
|Close>>>
\Ex{\tex}{}{newB}
\<<<
|Open
\def\Dist#1(#2,#3,#4){\MarkLoc(a*)%
\MoveToNode(#2,0,0)\MarkLoc(b*)%
\MoveToNode(#2,#3,#4)\MarkLoc(c*)%
\LSeg#1(b*,c*)\MoveToLoc(a*)}
\EntryExit(1,1,1,-1.5)
\Object\G(3){
\RectNode(a)(--#1--)
\DefNode\RectNode(b)(--#2--)
\DefNode\RectNode(c)(--#3--)
\Dist\T(a,1,0) \Dist\R(b,1,0) \Dist\Q(c,1,0)
\R+\Q; \T-\R; \T*2;
\ZeroNodesDim \AddNodeDim(b)
\AddNodeDim(c) \Q=\MaxY;
\Dist\R(a,0,1) \Q+\R;
\Q+20; \EntryExit(-1,0,1,0)
\IF \GtDec(\T,40) \THEN
\T+40; \T/3;
\SetNodes(20,\Val\T)
\ELSE \T=-\T; \T+60; \T/2;
\SetNodes(\Val\T,20) \FI
\Edge(b,c) \ArrowHeads(1)
\VHEdge(A,c) \VHEdge(B,b) }
\Define\SetNodes(2){
\MoveToNode(a, 1,0) \Line( #1,0) \FcNode(A)
\MoveToNode(a,-1,0) \Line(-#1,0) \FcNode(B)
\Move(#2,-\Val\Q) \PutNode(b)
\Move(#2, 0) \PutNode(c) }
\G(short~~and~~deep,d~~e~~e~~p,shallow)
\G(very~very~long~node,shallow,d~~e~~e~~p)
|Close>>>
\Ex{\tex}{}{newC}
\<<<
|Open
\Define\Vertex(2){
\IF \EqText(r,#1) \THEN \Define\NodeType{\RectNode}
\ELSE \IF \EqText(d,#1) \THEN \Define\NodeType{\DiamondNode}
\ELSE \IF \EqText(o,#1) \THEN \Define\NodeType{\OvalNode}
\ELSE \Define\NodeType{\Node}
\FI\FI\FI
\DefNode\NodeType(\Val\I..\Val\J)(--#2--)
\AddNodeDim(\Val\I..\Val\J) }
\Define\DefRow(1){
\IF \EqText({},{#1}) \THEN \Define\g{\MoveToLoc(start)}
\ELSE \ZeroNodesDim \J=-1;
\Table\x{#1} \x(0,99){\J+1; \Vertex}
\Move( 0,-\MaxY) \MarkLoc(\Val\I) \Move(5,0) \MarkLoc(\Val\I')
\Move(-5,-\MaxY) \Move(0,-\Sy) \I+1;
\FI \g }
\Define\ProjectToRow(1){
\MarkLoc(x) \Move(0,5) \MarkLoc(x')
\MoveToLL(#1,#1')(x,x') }
\Define\VSpace(1){ \Define\Sy{#1} }
\VSpace(15)
\Define\DefRowDiagram{
\MarkLoc(start) \I=0; \Define\g{\DefRow} \g}
\DefRowDiagram
( o, An~ approach~~ for~ setting~~ flow~ diagrams
& r, Use~~ {\tt\char92DefineRowDiagram}~~
to~ define~~ the~ rows~~ of~ nodes
)( r, Derive~~ x~ coordinate~~ for~ N~ then~
call~~ {\tt\char92ProjectToRow}
& r, Choose~~ nonrealized~~ node~ N
& d, More~ nodes~~ to~ realize?
)( r, Realize~ N~~ with~ {\tt\char92PutNode}
& o, Done
)()
\ProjectToRow(0) \EntryExit(0,0,-1,0) \PutNode(0..0)
\ProjectToRow(2) \MarkLoc(A)
\ProjectToRow(1) \EntryExit(-1,0,1,0) \PutNode(1..0)
\Move(20,0) \PutNode(1..1) \Move(20,0)
\EntryExit(-1,0,0,0) \PutNode(1..2)
\ProjectToRow(0) \EntryExit(0,0, 0,0) \PutNode(0..1)
\ProjectToRow(2) \EntryExit(0,0,-1,0) \PutNode(2..1)
\MarkLoc(B) \CSeg[0.5]\Move(B,A) \PutNode(2..0)
\ArrowHeads(1) \Edge(0..0,0..1) \Edge(0..1,1..2)
\Edge(1..2,1..1) \EdgeLabel(--Yes--)
\Edge(1..2,2..1) \EdgeLabel(--No--)
\Edge(1..1,1..0) \VHEdge(1..0,2..0)
\EdgeFrom(2..0,1,0,1..2)
|Close>>>
\begingroup
\def\startInput{}
\def\endInput{}
\Ex{\tex}{}{newD}
\<<<
|Open
\Define\DefNd(1){
\DefNode\RectNode(\Val\I)(--#1--)
\AddNodeDim(\Val\I) \I+1; }
\Define\D(1){
\IF \EqText({},{#1}) \THEN \Define\g{}
\ELSE \ZeroNodesDim \J=-1;
\Table\x{#1} \x(0,99){\J+1; \DefNd}
\T=\J; \T*15; \T+\WidthX; \T/\F;
\Move(0,-\MaxY) \MarkLoc(a) \Move(\Val\T,0)
\K=\I;
\Do(0,\Val\J){ \K-1; \PutNode(\Val\K) \Move(-15,0) }
\MoveToLoc(a) \Move(0,-\MaxY) \Move(0,-15)
\FI \g }
\Define\G(1){\I=0; \EntryExit(1,0,-1,0)
\Define\g{\D} \Define\F{#1} \g}
\Draw
\G(2)(first & diagram)
(centers & of~~rows~~on & vertical~~line )
(distance~=~15 & between~~rows)
()
\Table\x{0,2 & 0,3 & 1,3 & 1,4 & 2,5 & 3,5 & 3,6 & 4,6}
\x(0,99){\Edge}
\EndDraw
\Draw\Move(0,-15)
\G(1)(new~diagram)
(left~~margins & for~rows) ()
\Edge(0,1) \Edge(1,2) \Edge(2,0)
\EndDraw
\Draw
\Move(0,-15)
\G(10000)(new~diagram)
(right~margins & for~~rows) ()
\Edge(0,1) \Edge(1,2) \Edge(2,0)
\EndDraw
|Close>>>
\Ex{\tex}{}{newE}
\<<<
|Open
\Define\DefNd(1){
\DefNode\RectNode(\Val\I..\Val\J)(--#1--)
\AddNodeDim(\Val\I..\Val\J) }
\Define\DefG(1){
\IF \EqText({},{#1}) \THEN \Define\g{\PutG}
\ELSE \ZeroNodesDim \J=-1;
\Table\x{#1} \x(0,99){\J+1; \DefNd}
\Indirect\let<\Val\I.width>=\WidthX
\Indirect\edef<\Val\I.size>{\Val\J}
\T=\J; \T*\Sx; \T+\WidthX;
\IF \GtDec(\T,\Q) \THEN \Q=\T; \FI
\Move(0,-\MaxY) \MarkLoc(\Val\I)
\Move(0,-\MaxY) \Move(0,-\Sy) \I+1;
\FI \g }
\Define\PutG(1){ \I-1; \EntryExit(-1,0,1,0)
\Do(0,\Val\I){ \MoveToLoc(\DoReg)
\R=\Q; \Indirect{\R-}<\DoReg.width>;
\Indirect{\J=}<\DoReg.size>; \K=\J;
\DiagType
\IF \GtDec(\Q,\T) \THEN
\K+2; \R/\K; \Move(\Val\R,0)
\ELSE
\IF \GtInt(\J,0) \THEN \R/\K; \FI
\FI
\I=\DoReg;
\Do(0,\Val\J){ \J=\DoReg;
\PutNode(\Val\I..\Val\J) \Move(\Val\R,0) }
}
\Table\x{#1} \x(0,99){\Edge} }
\Define\G{ \I=0; \Q=0;
\Define\g{\DefG} \g}
\Define\FillDiagram{
\Define\DiagType{\T=\Q;}
\G}
\Define\MarginsDiagram{
\Define\DiagType{\T=\J; \T*\Sx; \Indirect{\T+}<\DoReg.width>;}
\G}
\Define\HVSpaces(2){ \Define\Sx{#1} \Define\Sy{#2} }
\HVSpaces(15,15)
\Draw
\FillDiagram(Fill & Diagram)
(fixed & distances & between~~rows)
(uniform & spaces &within~~each &row)
()
( 0..0,1..0 & 0..0,1..1 & 0..1,1..1 & 0..1,1..2
& 1..0,2..0 & 1..0,2..1 & 1..1,2..1 & 1..1,2..2
& 1..2,2..2 & 1..2,2..3)
\EndDraw
\Draw \HVSpaces(25,15)
\MarginsDiagram(Margins & Diagram)
(fixed & distances &between~~rows)
(uniform~~spaces&between~nodes&within~~each~row)
()
( 0..0,1..0 & 0..0,1..1 & 0..1,1..1 & 0..1,1..2
& 1..0,2..0 & 1..0,2..1 & 1..1,2..1 & 1..1,2..2
& 1..2,2..2 )
\EndDraw
|Close>>>
\endgroup
\noindent\dotfill\
End new commands for setting spread diagrams (end of ch 17)
\noindent\dotfill\
\Ex{\tex}{Commutative diagram in last example of section 18.3}{CM}
\<<<
|Open
\GridDiagramSpec()(\MyEdge)
\Define\L(4){,+#1..+#2\,L\,#3\,#4}
\Define\D(4){,+#1..+#2\,D\,#3\,#4}
\Define\MyEdge(5){
\IF \EqText(#3,D) \THEN\EdgeSpec(D)
\ELSE \EdgeSpec(L) \FI
\IF \EqText(#1,#2) \THEN
\RotateTo(#4) \CycleEdge(#1)
\EdgeLabel(--$#5$--)
\ELSE\Edge(#1,#2)
\IF \EqText(,#4) \THEN \EdgeLabel(--$#5$--)
\ELSE \EdgeLabel[#4](--$#5$--) \FI
\FI}
\ArrowHeads(1)
\GridDiagram(3,3)()()({
& T \D(0,1,,f) \D(2,0,,h) & N \L(2,0,,\sigma)//
S \L(0,0,180,t) \L(-1,1,,f) \L(1,1,+,g\circ f)//
& W \L(0,1,,f) & X \D(0,0,-45,r)//})
|Close >>>
\Ex{\tex}{Second example in section 20.2}{sec202}
\<<<
|Open
\NewNode(\MyNode,\MoveToRect){
\Move(-24,-8) \DrawRect(48,16)
\Move(16,0) {\Line(0,16)}
\Move(16,0) \Line(0,16) }
\Define\MyEdge(2){
\CSeg\FindSign(#1,#2)
\EdgeAt(#1,\sign 0.66,0,#2,0,1)}
\Define\FindSign(2){
\IF \GtDec(#1,0) \THEN
\Define\sign{}
\ELSE \Define\sign{-} \FI}
\TextNode(2){ \Text(--$#2$--)
\IF \EqInt(#1,0) \THEN {
\Move(-16,0) \Text(--$\Lambda$--)
\Move(32,0) \Text(--$\Lambda$--)
}\FI }
\ArrowHeads(1)
\TreeSpace(D,10,20)
\TreeSpec(\MyNode)()(\MyEdge)
\Tree()(2,2,A// 0,0,B&2,2,C// 2,2,D&0,0,E// 0,0,F&0,0,G//)
|Close >>>
\Ex{\tex}{Last example in section 20.2}{LR}
\<<<
|Open
\GridDiagramSpec(\RNode)(\MyEdge)
\GridSpace(10,10) \ArrowSpec(F,5,3,3)
\ArrowHeads(1) \CycleEdgeSpec(-30,20)
\NewNode(\RNode,\MoveToOval){
\GetNodeSize \Va+4; \Vb+4;
\SetMinNodeSize \Move(0,3)
\DrawOval(\Val\Va,\Val\Vb) }
\Define\MyEdge(3){
\IF \EqText(#1,#2) \THEN
\RotateTo(45) \LabelPos(+0.5;,3)
\CycleEdge(#1)
\ELSE \DSeg\Q(#1,#2)
\IF \GtDec(\Q,180) \THEN
\LabelPos(+0.4;,3) \ELSE \LabelPos(0.5;,3)
\FI \Edge(#1,#2) \FI \EdgeLabel(--$#3$--) }
\baselineskip=9pt \Define\NEXT(3){,#1..#2\,#3}
\def\/#1/#2.#3;{\hbox{$\scriptstyle#1\rightarrow #2\cdotp#3$}~~}
\GridDiagram(3,3)()()({
& \/S'/ S. ; \/A / S.a; $I_1$ \NEXT(+0,+1,a)
& \/A / Sa.; $I_2$
// \/S'/ .S ; \/S / .AS; \/ / .b ;
\/A / .Sa; \/ / .a ; $I_0$ \NEXT(-1,+1,S) \NEXT(+0,+1,A)
\NEXT(+1,+1,b) \NEXT(+1,+0,a)
& \/S /A.S ; \/S /.AS ; \/ /.b ;
\/A /.Sa ; \/ /.a ; $I_3$ \NEXT(+0,+1,S) \NEXT(+0,+0,A)
& \/A/ S.a ; $I_4$ \NEXT(+1,+0,a)
//
\/A/a.; $I_5$
& \/S/ b. ; $I_6$
& \/A/ Sa. ; $I_7$
//
})
|Close >>>
\Ex{\tex}{Last example in chapter 20}{TM}
\<<<
|Open
\NewCIRCNode(\StateNode,104,)
\NewCIRCNode(\AStateNode,104,102)
\Define\StateAt(3){ \MoveTo(#2,#3)
\StateNode(#1)(--$q_{#1}$--)}
\Define\AStateAt(3){\MoveTo(#2,#3)
\AStateNode(#1)(--$q_{#1}$--)}
\LabelSpec(4){\PictLabel{
{ \Move(1,-5) \Line(8,20) }
{ \Move(4,10) { \EntryExit(1,0,0,0)
\Text(--\strut$#1$--) } \Move(6,0)
\EntryExit(-1,0,0,0) \Text(--\strut$#3$--) }
{ \EntryExit( 1,0,0,0) \Text(--\strut$#2$--) }
\Move(6,0) \EntryExit(-1,0,0,0) \Text(--\strut$#4$--) }}
\DiagramSpec(\StateAt&\AStateAt&\TransEdge) \ArrowHeads(1)
\Diagram( 0,0,0 & 1,80,0 )(2,80,-60)(
0,0,90,{a,B,+1,a{,+}1} &
0,1, {a,B,+1,a{,+}1}, {b,B,0,B{,-}1} &
1,2, {|DEFEND\$,B,0,B{, }0}, )
|Close >>>
\Lib{ProTeX and AlProTex} \def\files{\fileP} \def\LLL{>>>}
\let\startInput=\empty
\let\endInput=\empty
NOTE. The La\TeX{} files of this part put the
{\tt\string\AlProTex....} command after the
{\tt\string\begin\string{document\string}} command. This is not a nice
style for files.
\Exr{22}2{2a}
\<<<
|Open
\AlProTex{awk,<<<|LLL,@,%
list,title,[]}
\catcode`\@=0
An Awk program for deriving
the distribution of words.
@<dist@><<<
BEGIN {print"words\t lines"}
@<count the words@>
END { i=0
while (i<=m)
{if (c[i]>0)
{print i "\t " c[i]}
i=i+1 }}
|LLL
NF is a built-in variable
that holds the number of
words in the current input
line.
@<count the words@><<<
{ c[NF]=c[NF]+1
{if (NF>m) m=NF} }
|LLL \OutputCode@<dist@>
|Close >>>
\Exr{22}2{2b}
\<<<
|Open
\AlProTex{awk,<<<|LLL,@,%
list,title,[]}
An Awk program for deriving
the distribution of words.
\<dist\><<<
BEGIN {print"words\t lines"}
@<count the words@>
END { i=0
while (i<=m)
{if (c[i]>0)
{print i "\t " c[i]}
i=i+1 }}
|LLL
NF is a built-in variable
that holds the number of
words in the current input
line.
\<count the words\><<<
{ c[NF]=c[NF]+1
{if (NF>m) m=NF} }
|LLL \OutputCode\<dist\>
|Close >>>
\Exr{22}2{3}
\<<<
|Open
\AlProTex{p,<<<|LLL,%
title,list,[]}
\<prog\><<<
PROGRAM prog;|LLL
\<body\><<<
{ comment } |LLL
\<prog\><<<
BEGIN
\<body\>
END.|LLL
\OutputCode\<prog\>
|Close >>>
\Exr{22}2{4a}
\<<<
|Open
\AlProTex{p,list,%
<<<|LLL,title,[]}
\<\><<<
PROGRAM prog;|LLL
\<body\><<<
{ comment } |LLL
\<\><<<
BEGIN
\<body\>
END.|LLL
\OutputCode\<\>
|Close >>>
\Exr{22}2{4b}
\<<<
|Open
\AlProTex{p,%
<<<|LLL,title,[]}
\<\><<<
PROGRAM prog;|LLL
\ShowCode-\<\>
\<body\><<<
{ comment } |LLL
\ShowCode\<body\>
\<\><<<
BEGIN
\<body\>
END.|LLL
\ShowCode\<\>
\OutputCode\<\>
|Close >>>
\Exr{22}2{4c}
\<<<
|Open
\AlProTex{p,%
<<<|LLL,title,[]}
\<\><<<
PROGRAM prog;|LLL
\<body\><<<
{ comment } |LLL
\<\><<<
BEGIN
\<body\>
END.|LLL
\OutputCode\<\>
|Close >>>
\Exr{22}2{5a}
\<<<
|Open
\AlProTex{p,<<<|LLL,%
title,list,[]}
\<myprog\><<<
PROGRAM prog;|LLL
\<body\><<<
{ comment } |LLL
\<myprog\><<<
BEGIN
\<body\>
END.|LLL
\OutputCode\<myprog\>
|Close >>>
\Exr{22}2{5b}
\<<<
|Open
\AlProTex{p,title,list,[]}
\<myprog\>{PROGRAM prog;}
\<body\>{ \{ comment \} }
\<myprog\>{BEGIN
\<body\>
END.}
\OutputCode\<myprog\>
|Close >>>
\Exr{22}2{6a}
\<<<
|Open
\AlProTex{p,<<<|LLL,[],%
title,list}
\<myprog\><<<
PROGRAM prog;
BEGIN
\<body\>
END.|LLL
\<body\><<<
{ comment: \\@||` } |LLL
|Close >>>
\Exr{22}2{6b}
\<<<
|Open
\AlProTex{p,<<<|LLL,[],%
title,list,@}
\<myprog\><<<
PROGRAM prog;
BEGIN
@<body@>
END.|LLL
\<body\><<<
{ comment: \@@||` } |LLL
|Close >>>
\Exr{22}2{6c}
\<<<
|Open
\AlProTex{p,<<<|LLL,[],%
title,list,||}
\<myprog\><<<
PROGRAM prog;
BEGIN
||<body||>
END.|LLL
\<body\><<<
{ comment: \@||||` } |LLL
|Close >>>
\Exr{22}2{6d}
\<<<
|Open
\AlProTex{p,<<<|LLL,[],%
title,list,`}
\<myprog\><<<
PROGRAM prog;
BEGIN
`<body`>
END.|LLL
\<body\><<<
{ comment: \@||`` } |LLL
|Close >>>
\Exr{22}2{7}
\<<<
|Open
\AlProTex{p,<<<|LLL,[],%
title,list,||}
\<temp\><<<
\<prog\><<<
PROGRAM prog;
BEGIN
||||<body||||>
END.>||empty>>
\<body\><<<
{comment: \@||||||||} >||empty>>
\OutputCode\<prog\> |LLL
\OutputCode[prg]\<temp\>
\input temp.prg
|Close >>>
\Exr{22}2{8a}
\<<<
|Open
\Code\myprog{my
program}{PROGRAM prog;}
\ShowCode-\myprog
\AppendCode\myprog{BEGIN
\body
END.}
\Code\body{body}{}
\ShowCode-\myprog
\AppendCode\body{\{comment\}}
\ShowCode\body
Code of title \myprog{}
linearized within
the paragraph:
`\ShowCode-\myprog'.
\OutputCode\myprog
|Close >>>
\Exr{22}2{8b}
\<<<
|Open
\AlProTex{p,<<<|LLL,list,@}
\Code\myprog{my program}<<<
PROGRAM prog;|LLL
\Code\body{body}<<<
|LLL
\AppendCode\myprog<<<
BEGIN
@body
END.|LLL
\AppendCode\body<<<
{comment} |LLL
Code of title \myprog{}
linearized within the
paragraph:
`\ShowCode-\myprog'.
\OutputCode\myprog
|Close >>>
\Exr{22}2{9}
\<<<
|Open
\AlProTex{p,<<<|LLL,%
title,list,[]}
\<myprog\><<<
PROGRAM prog;|LLL
\<body\><<<
{ comment } |LLL
\<myprog\><<<
BEGIN
\<body\>
END.|LLL
\OutputCode\<myprog\>
|Close >>>
\Exr{22}2{10a}
\<<<
|Open
\AlProTex{p,<<<|LLL,title,%
list,[],enumerate}
See lines \RefLine[*].
\<myprog\><<<
PROGRAM prog;\TagLine[*] |LLL
\<body\><<<
{comment: see \RefLine[*]}|LLL
\<myprog\><<<
BEGIN
\<body\> \TagLine[*] |LLL
\ResetLineCount
\<myprog\><<<
END.|LLL \OutputCode\<myprog\>
|Close >>>
\Exr{22}2{10b}
\<<<
|Open
\AlProTex{p,<<<|LLL,title,%
list,[]}
\def\CodeRef[#1]{\Ref{#1}}
\def\CodeTag[#1][#2]{%
\Tag{#1}{#2}}
See lines \Ref{*}.
\<myprog\><<<
PROGRAM prog;\CodeTag[*][1]|LLL
\<body\><<<
{comment: see \CodeRef[*]}|LLL
\<myprog\><<<
BEGIN
\<body\> \CodeTag[*][2]|LLL
\ResetLineCount \Tag{*}{3}
\<myprog\><<<
END.|LLL \OutputCode\<myprog\>
|Close >>>
\Exr{22}2{11}
\<<<
|Open
\AlProTex{p,<<<|LLL,title,%
list,[],ShowIndex}
\<myprog\><<<
PROGRAM prog;|LLL
\<body\><<<
{ comment } |LLL
\TextIndex{Tracing}
\SecIndex{***}
\<myprog\><<<
BEGIN
\<body\>
END.|LLL
\def\BeforeIndex{Index}
\ShowIndex
|Close >>>
\Exr{22}2{12}
\<<<
|Open
\AlProTex{p,<<<|LLL,%
title,[],ShowTop}
\<my prog\><<<
PROGRAM prog;
BEGIN \<body\>
END.|LLL
\<body\><<<
{ comment 1}
|LLL
\<body\><<<
\<subbody\>
|LLL
\<subbody\><<<
{ comment 2 } |LLL
\ShowTop\<body\>
\def\ShowSep{(* ***** *)\par}
\ShowTop\<body\>
|Close >>>
\Exr{22}2{13}
\<<<
|Open
\AlProTex{p,<<<|LLL,title,%
list,[],NoShow}
First piece of text.
\<myprog\><<<
PROGRAM prog; |LLL
\ShowOff Second piece of text.
\<body\><<<
{ comment } |LLL
\Note Third piece of
text. \EndNote\ShowOn
\<myprog\><<<
BEGIN
\<body\>
END.|LLL
Last piece of text.
|Close >>>
\Exr{22}2{14}
\<<<
|Open
\AlProTex{p,<<<|LLL,title,%
list,ShowIndex,ClearCode}
Chapter 1
\<progA\><<<
PROGRAM prog;
|LLL
\<progA\><<<
BEGIN
{ comment 1 }
END.|LLL \ShowIndex
\ClearCode
\vfil\break Chapter 2
\<progB\><<<
PROGRAM prog;
|LLL
\<progB\><<<
BEGIN
{ comment 2 }
END.|LLL \ShowIndex
|Close >>>
\begingroup
\def\tex{tex}\let\op=\ForTex \Exr{22}2{15}\par\nobreak
\<<<
\hsize=2.5in \noindent{\bf
LITERATE PROGRAM IN WEB}
\medskip We compute a
two-dimensional view of a
three-dimensional point.
@* The mapping. The view
{\tt (x,y)} is on the
{\tt Z=0} plane.
@<map(x,y) := mapping of
(X,Y,Z)@>=
x := X * D DIV (D + Z);
@ The viewer is located
at {\tt (0,0,-D)}.
@<CONST + VAR @>=
CONST D=100;
VAR X {x}, Z: INTEGER;
@
@<map...@>=
y := Y * D DIV (D + Z);
@
@<CON...@>=Y {y}: INTEGER;
@* Main program.
@p PROGRAM D2view;
@<CON...@>
BEGIN read(X,Y,Z);
@<map...@>
write(x,y)
END.
\bye>>>
\endgroup
\Ex{\tex}{NEW OPTION `[[]]' FOR {\tt\char92}AlProTex}{NewAlPrOptionA}
An extension of `[]' which frame also the code fragments.
\<<<
|Open
\AlProTex{p,<<<|LLL,%
title,list,[[]]}
Foooo...
\<myprog\><<<
PROGRAM prog;|LLL
Foooo...
\<body\><<<
{ comment } |LLL
Foooo...
\<myprog\><<<
BEGIN
\<body\>
END.|LLL
Foooo...
\OutputCode\<myprog\>
|Close >>>
\begingroup
\def\tex{latex}\let\op=\ForTex
\Ex{\tex}{NEW OPTION `basic' FOR {\tt\char92}AlProTex}{NewAlPrOptionB}
An option that requires compilation by latex. The following
are the only available commands.
A. References to code segments: \hfill {\tt\string\<code title\string\>}
B. Definitions of code fragments: \hfill {\tt\string\<code title\string\><<<
\hfill code fragment>>>}
B. Output file of code (`[{\it extension}]' is optional):
\hfill{\tt\string\o[{\it extention}]\string\<code title\string\>}
C. The character `{\tt\char92}' \hfill{\tt\string\\}
D. End of source program \hfill{\tt\string\e}
E. Logical partitioning of prose (chapters, sections, subsections, and verbatim):
\hfill\hbox{\tt\string\c, \string\s, \string\u, \string\v{$\cdots$}{\char92}}
\noindent\phantom{E.} A title
must be delimited by an empty line.
F. Reference to {\tt\string\ClearCode} \hfill {\tt\string\c}
\<<<
\input ProTex.sty
\AlProTex{foo,basic}
\cFirst Chapter
Foooo...
\sSsssss...
Foooo.
\uUuuuuuu.....
\vVerbatim
verbatim\
\<myprog\><<<
PROGRAM prog;|LLL
\cCccc...
Foooo...
\<body\><<<
{ comment } |LLL
Foooo...
\<myprog\><<<
BEGIN
\<body\>
END.|LLL
Foooo...
\o\<myprog\>
\e
>>>
\Ex{\tex}{variant of `basic'}{NewAlPrOptionC}
The options `{\tt @}', `{\tt|}', and `{\tt`}' ask that the listed
characters will be used instead of `{\tt\char92}', respectively,
within the commands of option `{\tt basic}'.
\<<<
\input ProTex.sty
\AlProTex{foo,@,basic}
@cFirst Chapter
Foooo...
@sSsssss...
Foooo.
@uUuuuuuu.....
@vVerbatim
verbatim@
@<myprog@><<<
PROGRAM prog;|LLL
@cCccc...
Foooo...
@<body@><<<
{ comment } |LLL
Foooo...
@<myprog@><<<
BEGIN
@<body@>
END.|LLL
Foooo...
@o@<myprog@>
@e
>>>
\endgroup
\newpage \OutputCode[me]\execute
On a Unix system containing the xdvi application, the instructions of
the following file can be executed with the compound command
`chmod 777 execute.me ; execute.me'.
\bigskip
\ShowFile{execute.me}
\write16{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}
\write16{<< Please review the document <<}
\write16{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}
\bye