@SysInclude { eq } @SysInclude { tab } @SysInclude { fig } @SysInclude { pas } @SysInclude { graph } @SysInclude { cprint } @SysInclude { slides } @SysDatabase @Reference { loutrefs } @OverheadTransparencies @Title { A Practical Introduction to the Lout Document Formatting System } @RunningTitle { lout } @Author { Jeffrey H. Kingston } @Institution { Basser Dept. of Computer Science The University of Sydney } @InitialLanguage { English } // @Overhead @Title { A simple input file } @Begin @ID @Code { "@SysInclude { doc }" "@Doc @Text @Begin" "Hello, world" "@End @Text" } @LP @LP @Heading { How to format it } @ID @Code { "lout filename > out.ps" "ghostview out.ps" "mpr out.ps" } @End @Overhead @Overhead @Begin @ShowPage { Hello, world } @End @Overhead @Overhead @Title { Headings and paragraphs } @Begin @ID @Code { "@SysInclude { doc }" "@Doc @Text @Begin" "@Heading { Introduction }" "@PP" "The design of the Lout formatting" "system was undertaken with the" "needs of the @I { ordinary user }" "very much in mind." "@End @Text" } @End @Overhead @Overhead @Begin @ShowPage { @Heading { Introduction } @PP The design of the Lout formatting system was undertaken with the needs of the @I { ordinary user } very much in mind. } @End @Overhead @Overhead @Title { Displays } @Begin @ID @Code { "You certainly don't want to return to" "his office and report:" "@IndentedDisplay @I {" "`I can't find an efficient algorithm, I" "guess I'm just too dumb.'" "}" "To avoid serious damage to your" "position in the company, it would" "be better if ..." } @End @Overhead @Overhead @Begin @ShowPage { You certainly don't want to return to his office and report: @IndentedDisplay @I { `I can't find an efficient algorithm, I guess I'm just too dumb.' } To avoid serious damage to your position in the company, it would be better if ... } @End @Overhead @Overhead @Title { Paragraph breaking styles } @Begin @ID @Code { "You certainly don't want to return to" "his office and report:" "@ID { ragged nohyphen } @Break @I {" "`I can't find an efficient algorithm, I" "guess I'm just too dumb.'" "}" "To avoid serious damage to your" "position in the company, it would" "be better if ..." } @End @Overhead @Overhead @Begin @ShowPage { You certainly don't want to return to his office and report: @ID { ragged nohyphen } @Break @I { `I can't find an efficient algorithm, I guess I'm just too dumb.' } To avoid serious damage to your position in the company, it would be better if ... } @End @Overhead @Overhead @Title { Lists } @Begin @ID @Code { "@Heading { Operating Instructions }" "@NumberedList" "@ListItem { Press small green lever. }" "@ListItem { Wait approximately 10 seconds" "until red light flashes. }" "@ListItem { If smoke emerges from rear of unit," "call Service Department. }" "@EndList" } @End @Overhead @Overhead @Begin @ShowPage { @Heading { Operating Instructions } @NumberedList @ListItem { Press small green lever. } @ListItem { Wait approximately 10 seconds until red light flashes. } @ListItem { If smoke emerges from rear of unit, call Service Department. } @EndList } @End @Overhead @Overhead @Title { Technical reports } @Begin @ID @Code { "@SysInclude { report }" "@Report" " @Title { ... }" " @Author { ... }" " @Institution { ... }" " @DateLine { ... }" "//" "@Abstract { ... }" "@Section { ... }" "@Section { ... }" "@Section { ... }" "@Appendix { ... }" "@Appendix { ... }" } @End @Overhead @Overhead @Title { Sections } @Begin @ID @Code { "@Section" " @Tag { dfs }" " @Title { Depth-first search }" "@Begin" "@PP" "We turn now to our first algorithm" "on general graphs ..." "@End @Section" } @End @Overhead @Overhead @Begin @ShowPage { @Heading { 10.6. Depth-first search } @PP We turn now to our first algorithm on general graphs ... } @End @Overhead @Overhead @Title { Cross references } @Begin @ID @Code { "For further information, consult" "Section @NumberOf dfs on page" "@PageOf { dfs }." } @End @Overhead @Overhead @Begin @ShowPage { For further information, consult Section 10.6 on page 245. } @End @Overhead @Overhead @Title { References } @Begin @ID @Code { "@Database @Reference { myrefs }" "..." "For the details, consult the User's" "Guide @Cite { $kingston1995lout.user }." } @End @Overhead @Overhead @Begin @ShowPage { For the details, consult the User's Guide [1]. @LP ... @LP @Heading { References } @NumberedList @LI @RefPrint kingston1995lout.user @LI ... @EndList } @End @Overhead @Overhead @Title { Database file myrefs.ld } @Begin @ID @Code { "{ @Reference" " @Tag { kingston1995lout.user }" " @Type { Book }" " @Author { Jeffrey H. Kingston }" " @Title { A User's Guide to the Lout" "Document Formatting System (Version 3) }" " @Institution { Basser Department of" "Computer Science }" " @Address { University of Sydney" "2006, Australia }" " @Year { 1994 }" "}" } @End @Overhead @Overhead @Title { Books (and theses) } @Begin @BulletList @LI { Title page, preface, introduction } @LI { Automatic table of contents } @LI { Prefatory pages numbered in Roman numerals } @LI { Chapters, sections, subsections, appendices } @LI { References at end of chapters or book } @LI { Running page headers } @LI { Odd-even page formats } @LI { Sorted index } @EndList @End @Overhead @Overhead @Title { Making a sorted index } @Begin @ID @Code { "@PP" "There are several possible ways to implement the" "@I Partition procedure," "partition @Index { @I Partition (in {@I Quicksort}) }" "but the following seems to be the best. Starting ..." } @End @Overhead @Overhead @Begin @ShowPage { @Heading { Index } @LD lines @Break { ... partial order, 227 @I Partition (in {@I Quicksort}), 189 postorder traversal of binary tree, 19 topological ordering, 229 ... } } @End @Overhead @Overhead @Title { Equation formatting } @Begin @ID @Code { "@SysInclude { eq }" "..." "Since @Eq { T(n-i) = T(0) = 0 } we have" "@IndentedDisplay @Eq {" "T(n) = big sum from i=0 to n-1 2 sup i = 2 sup n - 1" "}" "for the number of disk moves made by the Towers" "of Hanoi algorithm, given @Eq { n } disks." } @End @Overhead @Overhead @Begin @ShowPage { Since @Eq { T(n-i) = T(0) = 0 } we have @IndentedDisplay @Eq { T(n) = big sum from i=0 to n-1 2 sup i = 2 sup n - 1 } for the number of disk moves made by the Towers of Hanoi algorithm, given @Eq { n } disks. } @End @Overhead @Overhead @Title { Another equation } @Begin @ID @Code { "@CenteredDisplay @Eq {" "big int supp 1 on 0 `" "dx over sqrt { 1 - x sup 2 }" "= pi over 2" "}" } @End @Overhead @Overhead @Begin @ShowPage { @CenteredDisplay @Eq { big int supp 1 on 0 ` dx over sqrt { 1 - x sup 2 } = pi over 2 } } @End @Overhead @Overhead @Title { Tables } @Begin @ID @Code { "@SysInclude { tab }" "..." "@Tab" " @Fmta { @Col @I A ! @Col B }" "{" "@Rowa" " A { Fortran }" " B { The first ... language }" "@Rowa" " A { Algol-60 }" " B { Said to be ... successors }" "@Rowa" " A { Pascal }" " B { The famous ... successors }" "}" } @End @Overhead @Overhead @Begin @ShowPage { @Tab vmargin { 0.4v } @Fmta { @Col @I A ! @Col B } { @Rowa A { Fortran } B { The first high-level programming language } @Rowa A { Algol-60 } B { Said to be a better language than most of its successors } @Rowa A { Pascal } B { The most famous of Algol-60's successors } } } @End @Overhead @Overhead @Title { Another table } @Begin @RID @Code { "@Tab" " hmargin { 0.4c }" " vmargin { 0.3v }" " side { single }" " @Fmta { @Col @B @CC X @Over A,B,C }" " @Fmtb { @Col @I A ! @Col B !! @Col C }" "{" "" "@Rowa above { single }" " X { Value of mathematical ... dollars) }" "" "@Rowb above { double }" " A { Quadratic formula }" " B { @Eq { x ^= { ... } over 2a } }" " C { 3^.5 }" "" "@Rowb below { single }" " A { Binomial theorem }" " B { @Eq { ( a + b ) sup n ^= ... b sup n-k } }" " C { 12^ }" "}" } @End @Overhead @Overhead @Begin @ShowPage { 0.6 @Scale @Tab hmargin { 0.4c } vmargin { 0.3v } side { single } @Fmta { @Col @B @CC X @Over A,B,C } @Fmtb { @Col @I A ! @Col B !! @Col C } { @Rowa above { single } X { Value of mathematical formulae (millions of dollars) } @Rowb above { double } A { Quadratic formula } B { @Eq { x ^= { minus b +- sqrt { b sup 2 - 4ac } } over 2a } } C { 3^.5 } @Rowb below { single } A { Binomial theorem } B { @Eq { ( a + b ) sup n ^= big sum from k=0 to infty matrix atleft { ( } atright { ) } { n above k } a sup k b sup n-k } } C { 12^ } } } @End @Overhead @Overhead @Title { Pascal programs } @Begin @ID @Code { "@SysInclude { pas }" "..." "@ID @Pas {" "procedure DoPriAbstract(root: PriEntry);" "begin" " if root^.leftchild <> nil then begin" " DoPriAbstract(root^.leftchild);" " write(', ');" " end;" " PriKeyAbstract(root^.key);" " write(':');" " PriValueAbstract(root^.value);" " if root^.rightchild <> nil then begin" " write(', ');" " DoPriAbstract(root^.rightchild);" " end;" "end;" "}" } @End @Overhead @Overhead @Begin @ShowPage { @Pas { procedure DoPriAbstract(root: PriEntry); begin if root^.leftchild <> nil then begin DoPriAbstract(root^.leftchild); write(', '); end; PriKeyAbstract(root^.key); write(':'); PriValueAbstract(root^.value); if root^.rightchild <> nil then begin write(', '); DoPriAbstract(root^.rightchild); end; end; } &0io } @End @Overhead @Overhead @Title { Basic graphics } @Begin @ID @Code { "45d @Rotate 1.5 @Scale @Box {" " Hello, world" "}" } @End @Overhead @Overhead @Begin @ShowPage { @ID @Code { 45d @Rotate 1.5 @Scale @Box { Hello, world } } } @End @Overhead @Overhead @Title { Advanced graphics } @Begin @ID @Code { "@SysInclude { fig }" "..." "@Fig {" "@Box" " margin { 0c }" " paint { black }" "@Ellipse" " linestyle { noline }" " paint { white }" "{ Hello, world }" "}" } @End @Overhead @Overhead @Begin @ShowPage { @Fig { @Box margin { 0c } paint { black } @Ellipse linestyle { noline } paint { white } { Hello, world } } } @End @Overhead @Overhead @Title { Point labelling } @Begin @ID @Code { "@Fig {" "A::" "{" " 1:: @Ellipse { 3c @Wide 2c @High }" " //3c" " 2:: @Box { 3c @Wide 2c @High }" "}" "@ShowLabels" "}" } @End @Overhead @Overhead @Begin @ShowPage { @Fig { A:: { 1:: @Ellipse { 3c @Wide 2c @High } //3c 2:: @Box { 3c @Wide 2c @High } } @ShowLabels } } @End @Overhead @Overhead @Title { Graphs } @Begin @LP @ID -1p @Font @Code { "@Graph" " abovecaption { New South Wales road deaths" "(per 100 million vehicle km) }" "{" " @Data points { plus } pairs { dashed }" " { 1963 5.6 1971 4.3 1976 3.7 1979 3.4" " 1982 2.9 1985 2.3 1988 2.0 }" "}" } @End @Overhead @Overhead @Begin @ShowPage @Graph width { 9 cm } height { 6 cm } abovecaption { New South Wales road deaths (per 100 million vehicle km) } { @Data points { plus } pairs { dashed } { 1963 5.6 1971 4.3 1976 3.7 1979 3.4 1982 2.9 1985 2.3 1988 2.0 } } @End @Overhead @Overhead @Begin @RID @Code { "-2p @Font @Graph" " style { axes }" " xorigin { 0 } yorigin { 0 }" " xticks { 10@ 50@ 100@ 200@ 500@ }" " objects { @NE at { 300 2 } @I { Exponential }" " @SE at { ... } @I { Uniform } }" " belowcaption { @I n }" "{" " @Data points { filledcircle } { ... }" " @Data points { filledcircle } { ... }" "" " @Data pairs { dashed }" " { 10 2 500 2 }" "" " @Data pairs { dashed }" " {" " xloop from { 10 } to { 500 } by { 20 } do" " {" " x sqrt { pi*x / 4 } + 1" " }" " }" "}" } @End @Overhead @Overhead @Begin @ShowPage -2p @Font @Graph style { axes } xorigin { 0 } yorigin { 0 } width { 10 cm } height { 7 cm } xticks { 10@ 50@ 100@ 200@ 500@ } objects { @NE at { 300 2 } @I { Exponential } @SE at { 300 sqrt { pi*300/4 } + 1 } @I { Uniform } } belowcaption { @I n } belowgap { 0 cm } { @Data points { filledcircle } { 10 1.97 50 2.01 100 2.00 200 2.0 500 2.00 } @Data points { filledcircle } { 10 3.53 50 7.45 100 9.32 200 13.41 500 21.63 } @Data pairs { dashed } { 10 2 500 2 } @Data pairs { dashed } { xloop from { 10 } to { 500 } by { 20 } do { x sqrt { pi*x / 4 } + 1 } } } @End @Overhead