%\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 % % % % gurari@cse.ohio-state.edu % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \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) \(20) \LineF(20) \Rotate(55) \LineF(16) \new(hand) \(140) \LineF(35) \new(hand) \(90) \LineF(7) \new(head) \(-60) \LineF(19) \new(left-leg) \(210) \LineF(12) \Rotate(30) \LineF(14) \new(right-leg) \Do(1,11){\I+15; \(\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. @<<< BEGIN {print"words\t lines"} @ 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. @<<< { c[NF]=c[NF]+1 {if (NF>m) m=NF} } |LLL \OutputCode@ |Close >>> \Exr{22}2{2b} \<<< |Open \AlProTex{awk,<<<|LLL,@,% list,title,[]} An Awk program for deriving the distribution of words. \<<< BEGIN {print"words\t lines"} @ 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. \<<< { c[NF]=c[NF]+1 {if (NF>m) m=NF} } |LLL \OutputCode\ |Close >>> \Exr{22}2{3} \<<< |Open \AlProTex{p,<<<|LLL,% title,list,[]} \<<< PROGRAM prog;|LLL \<<< { comment } |LLL \<<< BEGIN \ END.|LLL \OutputCode\ |Close >>> \Exr{22}2{4a} \<<< |Open \AlProTex{p,list,% <<<|LLL,title,[]} \<\><<< PROGRAM prog;|LLL \<<< { comment } |LLL \<\><<< BEGIN \ END.|LLL \OutputCode\<\> |Close >>> \Exr{22}2{4b} \<<< |Open \AlProTex{p,% <<<|LLL,title,[]} \<\><<< PROGRAM prog;|LLL \ShowCode-\<\> \<<< { comment } |LLL \ShowCode\ \<\><<< BEGIN \ END.|LLL \ShowCode\<\> \OutputCode\<\> |Close >>> \Exr{22}2{4c} \<<< |Open \AlProTex{p,% <<<|LLL,title,[]} \<\><<< PROGRAM prog;|LLL \<<< { comment } |LLL \<\><<< BEGIN \ END.|LLL \OutputCode\<\> |Close >>> \Exr{22}2{5a} \<<< |Open \AlProTex{p,<<<|LLL,% title,list,[]} \<<< PROGRAM prog;|LLL \<<< { comment } |LLL \<<< BEGIN \ END.|LLL \OutputCode\ |Close >>> \Exr{22}2{5b} \<<< |Open \AlProTex{p,title,list,[]} \{PROGRAM prog;} \{ \{ comment \} } \{BEGIN \ END.} \OutputCode\ |Close >>> \Exr{22}2{6a} \<<< |Open \AlProTex{p,<<<|LLL,[],% title,list} \<<< PROGRAM prog; BEGIN \ END.|LLL \<<< { comment: \\@||` } |LLL |Close >>> \Exr{22}2{6b} \<<< |Open \AlProTex{p,<<<|LLL,[],% title,list,@} \<<< PROGRAM prog; BEGIN @ END.|LLL \<<< { comment: \@@||` } |LLL |Close >>> \Exr{22}2{6c} \<<< |Open \AlProTex{p,<<<|LLL,[],% title,list,||} \<<< PROGRAM prog; BEGIN || END.|LLL \<<< { comment: \@||||` } |LLL |Close >>> \Exr{22}2{6d} \<<< |Open \AlProTex{p,<<<|LLL,[],% title,list,`} \<<< PROGRAM prog; BEGIN ` END.|LLL \<<< { comment: \@||`` } |LLL |Close >>> \Exr{22}2{7} \<<< |Open \AlProTex{p,<<<|LLL,[],% title,list,||} \<<< \<<< PROGRAM prog; BEGIN |||| END.>||empty>> \<<< {comment: \@||||||||} >||empty>> \OutputCode\ |LLL \OutputCode[prg]\ \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,[]} \<<< PROGRAM prog;|LLL \<<< { comment } |LLL \<<< BEGIN \ END.|LLL \OutputCode\ |Close >>> \Exr{22}2{10a} \<<< |Open \AlProTex{p,<<<|LLL,title,% list,[],enumerate} See lines \RefLine[*]. \<<< PROGRAM prog;\TagLine[*] |LLL \<<< {comment: see \RefLine[*]}|LLL \<<< BEGIN \ \TagLine[*] |LLL \ResetLineCount \<<< END.|LLL \OutputCode\ |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{*}. \<<< PROGRAM prog;\CodeTag[*][1]|LLL \<<< {comment: see \CodeRef[*]}|LLL \<<< BEGIN \ \CodeTag[*][2]|LLL \ResetLineCount \Tag{*}{3} \<<< END.|LLL \OutputCode\ |Close >>> \Exr{22}2{11} \<<< |Open \AlProTex{p,<<<|LLL,title,% list,[],ShowIndex} \<<< PROGRAM prog;|LLL \<<< { comment } |LLL \TextIndex{Tracing} \SecIndex{***} \<<< BEGIN \ END.|LLL \def\BeforeIndex{Index} \ShowIndex |Close >>> \Exr{22}2{12} \<<< |Open \AlProTex{p,<<<|LLL,% title,[],ShowTop} \<<< PROGRAM prog; BEGIN \ END.|LLL \<<< { comment 1} |LLL \<<< \ |LLL \<<< { comment 2 } |LLL \ShowTop\ \def\ShowSep{(* ***** *)\par} \ShowTop\ |Close >>> \Exr{22}2{13} \<<< |Open \AlProTex{p,<<<|LLL,title,% list,[],NoShow} First piece of text. \<<< PROGRAM prog; |LLL \ShowOff Second piece of text. \<<< { comment } |LLL \Note Third piece of text. \EndNote\ShowOn \<<< BEGIN \ END.|LLL Last piece of text. |Close >>> \Exr{22}2{14} \<<< |Open \AlProTex{p,<<<|LLL,title,% list,ShowIndex,ClearCode} Chapter 1 \<<< PROGRAM prog; |LLL \<<< BEGIN { comment 1 } END.|LLL \ShowIndex \ClearCode \vfil\break Chapter 2 \<<< PROGRAM prog; |LLL \<<< 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. @= x := X * D DIV (D + Z); @ The viewer is located at {\tt (0,0,-D)}. @= CONST D=100; VAR X {x}, Z: INTEGER; @ @= y := Y * D DIV (D + Z); @ @=Y {y}: INTEGER; @* Main program. @p PROGRAM D2view; @ BEGIN read(X,Y,Z); @ 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... \<<< PROGRAM prog;|LLL Foooo... \<<< { comment } |LLL Foooo... \<<< BEGIN \ END.|LLL Foooo... \OutputCode\ |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\} B. Definitions of code fragments: \hfill {\tt\string\<<< \hfill code fragment>>>} B. Output file of code (`[{\it extension}]' is optional): \hfill{\tt\string\o[{\it extention}]\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\ \<<< PROGRAM prog;|LLL \cCccc... Foooo... \<<< { comment } |LLL Foooo... \<<< BEGIN \ END.|LLL Foooo... \o\ \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@ @<<< PROGRAM prog;|LLL @cCccc... Foooo... @<<< { comment } |LLL Foooo... @<<< BEGIN @ END.|LLL Foooo... @o@ @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