@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