home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
misc
/
volume38
/
lout
/
part32
< prev
next >
Wrap
Text File
|
1993-08-11
|
75KB
|
1,770 lines
Newsgroups: comp.sources.misc
From: jeff@joyce.cs.su.oz.au (Jeff Kingston)
Subject: v38i100: lout - Lout document formatting system, v2.05, Part32/35
Message-ID: <1993Aug10.132429.19340@sparky.sterling.com>
X-Md4-Signature: 50a49c88125ce98195fce9ad67113ef9
Sender: kent@sparky.sterling.com (Kent Landfield)
Organization: Sterling Software
Date: Tue, 10 Aug 1993 13:24:29 GMT
Approved: kent@sparky.sterling.com
Submitted-by: jeff@joyce.cs.su.oz.au (Jeff Kingston)
Posting-number: Volume 38, Issue 100
Archive-name: lout/part32
Environment: UNIX
Supersedes: lout: Volume 37, Issue 99-128
#! /bin/sh
# This is a shell archive. Remove anything before this line, then feed it
# into a shell via "sh file" or similar. To overwrite existing files,
# type "sh file -c".
# Contents: doc/tr.begin/s15 doc/tr.impl/s2.1 doc/tr.impl/s3.2
# doc/tr.impl/s6.1 doc/tr.impl/s7.0 doc/tr.lout/ch1.03
# doc/tr.lout/ch3.04 doc/tr.over/s1 doc/tr.over/s3 doc/tr.tab/s2
# doc/tr.tab/s7 include/doc include/fontdefs0 include/fontdefs1
# include/pas include/report man/lout.1
# Wrapped by kent@sparky on Sun Aug 8 12:29:33 1993
PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
echo If this archive is complete, you will see the following message:
echo ' "shar: End of archive 32 (of 35)."'
if test -f 'doc/tr.begin/s15' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'doc/tr.begin/s15'\"
else
echo shar: Extracting \"'doc/tr.begin/s15'\" \(3933 characters\)
sed "s/^X//" >'doc/tr.begin/s15' <<'END_OF_FILE'
X@Section
X @Tag { big.changes }
X @Title { Making more radical changes }
X@Begin
X@PP
XThe DocumentLayout package makes a large number
Xof decisions, about how large the pages will be, which fonts will
Xordinarily be used, and so on. The more complex decisions, such as the
Xappearance of tables of contents in books, can only be changed by
Xmodifying the packages, but many of the simpler decisions can be changed
Xquite easily by setting options in the setup file.
X@PP
XThe first step is to obtain a private copy of the setup file. A local
Xexpert will know where these files are kept; for example, in directory
X{ @Code "/usr/lout/include"}. Suppose the @Code report setup file is
Xcopied into a file called { @Code myrep }; then typing
X@ID @Code "lout myrep myfile"
Xinstead of
X@ID @Code "lout -ireport myfile"
Xruns Lout with the private copy of the setup file, {@Code "myrep"}.
X@PP
XExactly what the setup file contains will depend upon the local
Xsituation, but it will be something like this:
X@ID @Code {
X"# Setup file for reports."
X"# J. H. Kingston, July 1991"
X""
X"@SysInclude { ft }"
X"@SysInclude { dl }"
X"# @SysInclude { eq }"
X"# @SysInclude { pas }"
X"# @SysInclude { fig }"
X"# @SysInclude { tab }"
X""
X"@Use { @DocumentLayout"
X" # @InitialFont { Times Base 12p }"
X" # @InitialBreak { adjust 1.2fx }"
X" # @Hyphenate { Yes }"
X" # @PageNumbers { Yes }"
X" # @Columns { Single }"
X" # @HeadingFont { Bold }"
X" # @ParaIndent { 2.0f }"
X" # @PageTop { |0.5rt - @PageNum - }" &0io ""
X" # @PageFoot { @Null }"
X"}"
X}
XWhenever Lout encounters a @Code "#" character not enclosed in quotes,
Xit ignores it and everything following it up to the end of the line. The
Xfirst two lines of the setup file, then, are comments for the human
Xreader. After them come lines which cause Lout to read the file
X@Code "ft" of font definitions and the file @Code "dl" which contains
Xthe definition of the DocumentLayout package.
X@PP
XThe next four lines are comments and will be ignored, but if the initial
X@Code "#" is deleted they cause Lout to read the definitions of the Eq
Xequation formatting package and the Pas Pascal program formatting package
X[{@Ref kingston92eq}], the Fig diagram drawing package [{@Ref kingston92fig}],
Xand the Tab table formatting package [{@Ref kingston92tab}].
X@PP
XNext comes a @Code "@DocumentLayout" symbol within a @Code "@Use"
Xclause. It is this symbol whose options may
Xbe changed so as to affect the overall layout. These options are listed
Xas comments on the following lines, together with the default value
Xof each. To change an option, delete the @Code "#" and change the
Xvalue. For example, the normal paragraph indent produced by @Code "@PP" is
X@Code "2.0f" (twice the current font size). To change it, say to
X{@Code "3.0f"}, change the line to
X@ID @Code "@ParaIndent { 3.0f }"
XThe display indent option (not shown here) should probably be changed as well.
X@PP
XThe first five options have the same name as five of the @Code "@Document"
Xsymbol's options, and they determine the default value of those
Xoptions. The @Code "@PageTop" and @Code "@PageFoot" options determine
Xthe appearance of the page header and footer lines (where the page
Xnumbers appear), and are best left to experts; but, for example,
X@ID @Code "@PageTop { |1rt @PageNum }"
Xwill make the page number appear at the top right of each page, without
Xthe @Code "-" characters.
X@PP
XThe setup file is also the place to add your own definitions. They should
Xbe placed just before the @Code "@Use" clause, as shown for example in
XSection 4 of the report describing the Eq equation formatting package
X[{@Ref kingston92eq}].
X@PP
XThose who wish to make more radical changes will have to copy the @Code dl
Xfile and change the definition of the DocumentLayout package. This requires
Xknowledge of the principles of Lout, and the primitive features from which
Xothers are built, as described in the Lout user manual [{@Ref kingston92}].
X@End @Section
END_OF_FILE
if test 3933 -ne `wc -c <'doc/tr.begin/s15'`; then
echo shar: \"'doc/tr.begin/s15'\" unpacked with wrong size!
fi
# end of 'doc/tr.begin/s15'
fi
if test -f 'doc/tr.impl/s2.1' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'doc/tr.impl/s2.1'\"
else
echo shar: Extracting \"'doc/tr.impl/s2.1'\" \(4030 characters\)
sed "s/^X//" >'doc/tr.impl/s2.1' <<'END_OF_FILE'
X@SubSection
X @Tag { genesis }
X @Title { The genesis of the object abstraction }
X@Begin
X@PP
XWhen one examines previous document formatting systems [4]
Xlooking for ideas for abstractions, as the author did in 1984, the Eqn
Xformatting language [5] stands out like a beacon. In
XEqn, a mathematical formula such as
X@ID @Eq { { x sup 2 + 1 } over 4 }
Xis produced by typing
X@ID @Code "{ x sup 2 + 1 } over 4"
Xin the input file; @Code sup and @Code over are binary operators, and
Xbraces are used for grouping. This is document formatting at a very
Xhigh level, close to the language of mathematics itself, with all
Xreference to font changes and spacing suppressed.
X@PP
XEqn provides a single data type (let us call it the {@I expression}),
Xbuilt up recursively in context-free style: where one expression may appear,
Xany expression may appear. This approach is common in algebra and
Xprogramming languages, where its simplicity and expressiveness have long
Xbeen appreciated; but Eqn was the first language to demonstrate its
Xutility in document formatting.
X@PP
XEach expression is treated by Eqn as a rectangle with a
X{@I {horizontal axis}}, used for alignment with adjacent expressions:
X@ID @ShowMarks marks { horizontal } @Eq { { x sup 2 + 1 } over 4 }
XThe size and rendering of the expression on the printed page are
Xknown only to the implementation, never explicitly calculated or
Xaccessed by the user. This prohibition is
Xcrucial to the maintenance of the context-free property in practice. In
XLout, for example, equations, figures, tables, and arbitrary objects may
Xbe mixed together freely. This would be impossible if size information
Xwas hidden from the implementation in user calculations.
X@PP
XThe object abstraction of Lout is a direct descendant of the Eqn
Xexpression. It employs the same context-free recursive style of construction,
Xand each object is treated by Lout as a rectangle:
X@ID @Fig {
X@ShowMarks { 1c @Wide ^| 2c @Wide 0.45c @High ^/ 0.35c @High }
X}
XThe horizontal axis, called a @I { row mark } in Lout, has a
Xvertical analogue called a {@I {column mark}}, creating a valuable
Xsymmetry between horizontal and vertical. Multiple column and row marks
Xare permitted:
X@ID @Fig {
XA:: @Box margin { 0c } paint { grey } { 1.2c @Wide 0.8c @High }
X|1c
XB:: @Box margin { 0c } paint { grey } { 1c @Wide 0.8c @High }
X/0.5c
XC:: @Box margin { 0c } paint { grey } { 0.7c @Wide 0.8c @High }
X|1c
XD:: @Box margin { 0c } paint { grey } { 1.3c @Wide 0.8c @High }
X// @Line linestyle { dashed }
X from { A@W -- { 0.3 cm 0 } }
X to { B@W ++ { 1.6 cm 0 } }
X// @Line linestyle { dashed }
X from { C@W -- { 0.3 cm 0 } }
X to { D@W ++ { 1.6 cm 0 } }
X// @Line linestyle { dashed }
X from { A@NW ++ { 0 0.3 cm } }
X to { C@SW -- { 0 0.3 cm } }
X// @Line linestyle { dashed }
X from { B@NW ++ { 0.3 cm 0.3 cm } }
X to { D@SW ++ { 0.3 cm -0.3 cm } }
X}
Xso that objects are able to represent tables.
X@PP
XThis abstraction has some limitations, the most obvious being the restriction
Xof size calculations to rectangular bounding boxes. Non-rectangular and
Xdisconnected shapes arise naturally in figures and in the characters of
Xfonts; the extension to them is conceptually straightforward and might
Xhelp to explain some fine points of layout such as kerning. However,
Xthere are implementation and language design problems, particularly
Xwhen filling non-rectangular shapes with text, and so the author chose
Xto keep to Eqn's rectangles.
X@PP
XA more fundamental limitation of the object abstraction arises from the
Xinability of recursive data types to describe cross-linked structures,
Xwhich seem to require some means of naming the multiply referenced
Xparts. Lout is obliged to introduce additional abstractions to cope
Xwith cross linking: galleys for inserting text into pages
X(Section {@NumberOf galleys}), cross references (Section {@NumberOf cross}),
Xand labelled points in figure drawing [6]. An
Xabstraction closer to hypertext might form a more unified basis for
Xthese features.
X@End @SubSection
END_OF_FILE
if test 4030 -ne `wc -c <'doc/tr.impl/s2.1'`; then
echo shar: \"'doc/tr.impl/s2.1'\" unpacked with wrong size!
fi
# end of 'doc/tr.impl/s2.1'
fi
if test -f 'doc/tr.impl/s3.2' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'doc/tr.impl/s3.2'\"
else
echo shar: Extracting \"'doc/tr.impl/s3.2'\" \(3408 characters\)
sed "s/^X//" >'doc/tr.impl/s3.2' <<'END_OF_FILE'
X@SubSection
X @Tag { recursion }
X @Title { Recursion and page layout }
X@Begin
X@PP
XDesign and implementation should proceed together in exploratory projects,
Xsince otherwise the design too easily becomes unrealistic. Sometimes the
Ximplementation does more than its designer intended. The author wrote the
Xfollowing purely as a testing scaffold:
X@ID @Code {
X"def @Page right x"
X"{"
X" 8i @Wide 11i @High"
X" {"
X" //1i ||1i x ||1i"
X" //1i"
X" }"
X"}"
X}
XOnly afterwards did he realize its significance: the concept of a page
Xhad been defined outside the implementation, removing the need for
Xcommands for setting page width and height, margins, and so on.
X@PP
XDefining a sequence of pages is harder, since their number is not known
Xin advance. A simple version of this same problem is afforded by the
Xleaders found in tables of contents:
X@ID {
X4i @Wide { Chapter 7 @Leaders 53 }
X}
XThis seemed to require recursion, specifically the definition
X@ID @Code {
X"def @Leaders { .. @Leaders }"
X}
XNote that both @Code ".." and @Code "@Leaders" are objects, so the two
Xspaces separating them are significant. No base case is given, and indeed
Xwe have no boolean or conditional operators with which to express it;
Xbut we can adopt the implicit base `if space is not sufficient, delete
X{@Code "@Leaders"} and any preceding space'. Then the expression
X@ID @Code "4i @Wide { Chapter 7 @Leaders 53 }"
Xwill produce the object shown above. It is hard to see how this base
Xcould be made explicit, without violating the general principle of
Xkeeping all size information internal. In the implementation,
X@Code "@Leaders" remains unexpanded while sizes are being
Xcalculated; then it is treated similarly to a receptive symbol, with
Xits body as an incoming galley (Section {@NumberOf flushing}).
X@PP
XWith this settled, it is now clear how to define a document which is a
Xnumbered sequence of pages. Let @Code "@Next" be a prefix operator
Xwhich returns its parameter plus one. Then
X@ID @Code {
X"def @PageList"
X" right @PageNum"
X"{"
X" @Page {"
X" |0.5rt - @PageNum -"
X" //1v @TextPlace"
X" //1rt @FootSect"
X" }"
X" //"
X" @PageList @Next @PageNum"
X"}"
X}
Xwhen invoked in the expression {@Code "@PageList 1"}, has for its result
Xthe potentially infinite object
X@ID {
X@LittlePage {
X|0.5rt - 1 -
X//1.2vx @Code "@TextPlace"
X//1rt @Code "@FootSect"
X}
X//
X@LittlePage {
X|0.5rt - 2 -
X//1.2vx @Code "@TextPlace"
X//1rt @Code "@FootSect"
X}
X//0.2c
X8p @Font @Code "@PageList 3"
X}
XSimilarly, we may define @Code "@FootSect" like this:
X@ID @Code {
X"def @FootSect"
X"{"
X" def @FootList"
X" right @Num"
X" {"
X" @FootPlace"
X" //1v"
X" @FootList @Next @Num"
X" }"
X""
X" 1i @Wide @HLine"
X" //1v"
X" @FootList 1"
X"}"
X}
Xso that an invocation of @Code "@FootSect" produces
X@ID @Code {
X1i @Wide @HLine
X"@FootPlace"
X"@FootPlace"
X"@FootPlace"
X"..."
X}
XThe expansion process is very similar to a BNF derivation, and would be
Xattempted only on demand.
X@PP
XClearly, deciding which expansions to take and replacing @Code "@TextPlace"
Xand {@Code "@FootPlace"} by the appropriate actual text will not be easy;
Xthis is the subject of Section {@NumberOf galleys}. The important point
Xfor now is that we have here a very simple and flexible method of specifying
Xthe layout of pages, which requires no specialized language features.
X@End @SubSection
END_OF_FILE
if test 3408 -ne `wc -c <'doc/tr.impl/s3.2'`; then
echo shar: \"'doc/tr.impl/s3.2'\" unpacked with wrong size!
fi
# end of 'doc/tr.impl/s3.2'
fi
if test -f 'doc/tr.impl/s6.1' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'doc/tr.impl/s6.1'\"
else
echo shar: Extracting \"'doc/tr.impl/s6.1'\" \(3774 characters\)
sed "s/^X//" >'doc/tr.impl/s6.1' <<'END_OF_FILE'
X@SubSection
X @Tag { cross }
X @Title { The cross reference abstraction }
X@Begin
X@PP
XIn developing the cross reference abstraction, it seemed best to begin
Xwith the database application, since it is the simplest. Database
Xrelations are naturally mapped into Lout definitions:
X@ID @Code {
X"def @Reference"
X" named @Tag {}"
X" named @Author {}"
X" named @Title {}"
X" named @Journal {}"
X"{}"
X}
XThe set of all invocations of @Code "@Reference" is a relation whose
Xattributes are the parameters, and whose tuples are the invocations. To
Xcomplete the correspondence, we need only declare that the @Code "@Tag"
Xparameter is special, serving as the key attribute.
X@PP
XFollowing the database model, we next need a notation for retrieving the
Xinvocation with a given tag:
X@ID @Code "@Reference&&kingston91"
XThis @I {cross reference} is like an arrow pointing to the invocation. To
Xaccess its attributes, we write
X@ID @Code "@Reference&&kingston91 @Open { @Author, @Title }"
XThe @Code "@Open" operator evaluates its right parameter in an
Xenvironment which includes the exported parameters of its left.
X@PP
XAn invocation is chosen to be a running header because of its proximity
Xto the place where it is used, rather than by its tag. Such proximity
Xis naturally expressed by two special tags, {@Code preceding} and
X{@Code following}; for example, @Code "@Sym&&following" will point to
Xthe closest following invocation of @Code "@Sym" in the final printed
Xdocument. This is much simpler conceptually than reference to the
Xinternal state of the document formatter at a critical moment, the usual
Xapproach to running headers.
X@PP
XIt turns out that the above design solves all the cross referencing
Xproblems encountered in practice except one, which may be typified by
Xthe problem of finding the number of the page on which the chapter whose
Xtag is @Code "intro" begins. Two cross referencing steps are needed,
Xfirst to {@Code "@Chapter&&intro"}, then from there to
X{@Code "@Page&&preceding"}, where the page number is known.
X@PP
XGiven the success of the design so far, this last problem proves to be
Xsurprisingly difficult. We first try
X@ID @Code {
X"@Chapter&&intro @Open {"
X" @Page&&preceding @Open { @PageNum }"
X"}"
X}
Xbut this fails because @Code "@Page&&preceding" is evaluated in the
Xpresent context, not in the context of @Code "@Chapter&&intro" as
Xrequired. So our next attempt is
X@ID @Code {
X"def @Chapter"
X" named @PageNum { @Page&&preceding @Open { @PageNum } }"
X" ..."
X}
Xwith the @Code "@Page&&preceding" cross reference attached to the
Xchapter; we write
X@ID @Code "@Chapter&&intro @Open { @PageNum }"
XThis also fails, because parameters are evaluated after substitution, so
Xonce again @Code "@Page&&preceding" is evaluated in the wrong context. We
Xcould of course define a new operator specifically for this case:
X@ID @Code "@Page&&{ @Preceding @Chapter&&intro }"
Xor some such. This is free of the annoying context-sensitivity, but it
Xseems quite complex, and the expected cross reference @Code "@Page&&preceding"
Xdoes not appear.
X@PP
XThe author was lost in these obscurities for some time, and ultimately
Xrescued himself by looking ahead to the implementation of the
X@Code preceding and @Code following tags, to see if a simple extension
Xof it would solve the problem. This led to the @Code "@Tagged" operator:
X@ID @Code "@Page&&preceding @Tagged intro"
Xplaced at the beginning of the body of the chapter will attach @Code intro
Xas an extra tag to the closest preceding invocation of {@Code "@Page"},
Xso that
X@ID @Code "@Page&&intro @Open { @PageNum }"
Xyields the desired page number. There is something low-level and ad hoc
Xabout the @Code "@Tagged" operator, but the two cross references do
Xappear naturally, and it works.
X@End @SubSection
END_OF_FILE
if test 3774 -ne `wc -c <'doc/tr.impl/s6.1'`; then
echo shar: \"'doc/tr.impl/s6.1'\" unpacked with wrong size!
fi
# end of 'doc/tr.impl/s6.1'
fi
if test -f 'doc/tr.impl/s7.0' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'doc/tr.impl/s7.0'\"
else
echo shar: Extracting \"'doc/tr.impl/s7.0'\" \(3895 characters\)
sed "s/^X//" >'doc/tr.impl/s7.0' <<'END_OF_FILE'
X@Section
X @Title { Conclusion }
X@Begin
X@PP
XSince its public release in October 1991, the Basser Lout interpreter
Xhas been ported without incident to a wide variety of Unix systems and
Xhardware. It was tested extensively before release on its own
Xdocumentation, and the few minor bugs which have emerged since then have
Xall been fixed in the second release, scheduled to appear in mid-1992.
X@PP
XSeven substantial packages of definitions are distributed with Basser
XLout. The DocumentLayout package, and its variants ReportLayout and
XBookLayout, provide the standard features that all documents
Xrequire: pages, columns, paragraphs, headings, footnotes, floating
Xfigures and tables, chapters and sections, displays and lists, access
Xto bibliographic databases, cross references, and so on
X[11]. The BookLayout package has extra features
Xneeded by books, including an automatically generated table of contents,
XRoman page numbers for the prefatory material, running page headers,
Xodd and even page layouts, and a sorted index. The Eq package formats
Xequations, and Pas formats Pascal programs [10]; Tab
Xformats tables [12]; and Fig draws figures
X[6].
X@PP
XThe non-expert user who uses these packages perceives a system of a
Xstandard quite similar to other fully developed batch formatters,
Xalthough the interface is considerably more coherent than, say, the troff
Xfamily's [8]. The expert user perceives a system which
Xis radically different from previous ones, in which a great deal can be
Xachieved very quickly. To take an extreme example, Pas was designed,
Ximplemented, tested, and documented in one afternoon. Eq took about
Xa week, but most of that time was spent in marshalling the vast
Xrepertoire of mathematical symbols, and fine-tuning the spacing. Most
Xof the effort seems to go into designing a good interface; most symbols
Xare implemented in just one or a few lines of Lout.
X@PP
XA group of about 20 satisfied non-expert users has grown up within
Xthe author's department, mainly Honours students with no investment
Xin older systems to hold them back. Basser Lout has been advertised
Xon the Internet news as available via anonymous {@I ftp}, so the
Xextent of its outside user community is hard to gauge. About 50
Xpeople have mailed comments or questions to the author; many
Xof these people have ported the program, written small definitions,
Xand modified the standard packages.
X@PP
XFuture work could usefully begin with the improvements suggested in this
Xpaper: overlapping spanning columns, better semantics for available
Xspace, and especially horizontal galleys. Support for non-European
Xlanguages is also needed. However, the main task is the development of
Xan interactive document editor based on Lout. A structure editor similar
Xto Lilac [13], which already has objects and user-defined
Xsymbols, is envisaged; since cross references are easy when the whole
Xdocument is available, the only major new problem is the treatment of
Xgalleys, including the expansion and retraction of receptive symbols.
X@LP
X@LP
X@B { Note. } Since the above was written the author has completed a
Xrevised version of Basser Lout, in which the problem concerning
Xavailable space mentioned in Section {@NumberOf style} has been resolved.
X@LP
X@LP
X@B { Acknowledgment. } The author gratefully acknowledges many
Xvaluable discussions with Douglas W. Jones, especially during the
Xdevelopment of the galley abstraction; and also many helpful comments on
Xpresentation by the anonymous referee.
X@DP
X@DP
X@Heading { References }
X@NumberedList
X@LI @RefPrint kingston91
X@LI @RefPrint kingston91over
X@LI @RefPrint kingston91basser
X@LI @RefPrint furuta82
X@LI @RefPrint kernighan75
X@LI @RefPrint kingston91fig
X@LI @RefPrint reid80
X@LI @RefPrint ossanna76
X@LI @RefPrint knuth84
X@LI @RefPrint kingston91eq
X@LI @RefPrint kingston91begin
X@LI @RefPrint kingston91tab
X@LI @RefPrint brooks91
X@EndList
X@End @Section
END_OF_FILE
if test 3895 -ne `wc -c <'doc/tr.impl/s7.0'`; then
echo shar: \"'doc/tr.impl/s7.0'\" unpacked with wrong size!
fi
# end of 'doc/tr.impl/s7.0'
fi
if test -f 'doc/tr.lout/ch1.03' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'doc/tr.lout/ch1.03'\"
else
echo shar: Extracting \"'doc/tr.lout/ch1.03'\" \(3701 characters\)
sed "s/^X//" >'doc/tr.lout/ch1.03' <<'END_OF_FILE'
X@Section
X @Tag { cross }
X @Title { Cross references }
X@Begin
X@PP
XA cross reference
Xcross.ref @Index { Cross reference }
Xin common terminology is something like `see Table 6'
Xor `see page 57' -- a reference within a document to some other part of
Xthe document. Readers find them very useful, but they are a major
Xbookkeeping problem for authors. As the document is revised, Table 6
Xbecomes Table 7, the thing on page 57 moves to page 63, and all the
Xcross references must be changed.
X@PP
XThe Scribe
Xscribe @Index { Scribe }
Xdocument formatter, developed by Brian K. Reid [{@Ref reid80}],
Xreid.brian @Index { Reid, Brian K. }
Xintroduced a scheme for keeping track of cross
Xreferences. It allows you to give names to tables, figures, etc., and to
Xrefer to them by name. The formatter inserts the appropriate numbers in
Xplace of the names, so that as the document is revised, the
Xcross references are kept up to date automatically. Lout has adopted
Xand extended this scheme.
X@PP
XIn Lout, automatic cross referencing works in the following way. First
Xdefine a symbol with a parameter with the special name @Code "@Tag":
X@ID @Code {
X"def @Table"
X" left @Tag"
X" right @Value"
X"{"
X" ||1i @Value"
X"}"
X}
XWhen this symbol is invoked, the value given to @Code "@Tag" should be a
Xsimple word like {@Code "cities"}, or several simple words juxtaposed
Xlike {@Code "cities.compare"}; it serves to name the invocation:
X@ID @Code {
X"cities @Table"
X"{"
X" Washington |0.5i Canberra"
X"}"
X}
XWe may now refer to this invocation elsewhere in the document, using the
X@I {cross reference} @Code "@Table&&cities". Here @Code "&&" is the
X{@I {cross reference symbol}}; its left parameter is a symbol and its right
Xparameter is the value of the @Code "@Tag" parameter of some invocation
Xof that symbol.
X@PP
XA cross reference is not an object; the reader should think of it as
Xan arrow in the final printed document, beginning at the cross reference
Xsymbol and ending at the top of the target
Xtarget @Index { Target of cross reference }
Xinvocation, like this:
X@ID 8p @Font {
X { @LittlePage // @LittlePage }
X ||0io ||0.7c
X { //2c
X { @Code "@Table&&cities" }
X //0.1c
X ||0.5c 90d @Rotate @Arrow 2.5c
X //0.05c
X @HContract @VContract
X @Fig { @Box margin { 0c } paint { grey } { 1.5c @Wide 1c @High } }
X }
X}
X@PP
XTwo special values may be given to the right parameter of
X{@Code "&&"}: @Code preceding
Xpreceding. @Index { @Code preceding }
Xfollowing. @Index { @Code following }
Xand
X@Code following. The cross
Xreference @Code "@Table&&preceding" points to some table
Xappearing earlier in the final printed document than itself; that is, the
Xarrow is guaranteed to point backwards through the document. Usually it
Xpoints to the nearest preceding invocation. Similarly,
X@Code "@Table&&following" points forwards, usually to the
Xnearest following invocation of @Code "@Table".
X@PP
XThis section has been concerned with what a cross reference is -- an
Xarrow from one point in a document to another -- but not with how it is
Xused. One simple way to use a cross reference is to put it where an
Xobject is expected, like this:
X@ID @Code {
X"a | @Table&&cities | c"
X}
XIn this case the cross reference will be replaced by a copy of the
Xinvocation it points to: in the example just given, a table will appear
Xbetween @Code a and @Code c. Other applications of cross references may be
Xfound in Chapter {@NumberOf examples}, including finding the number of
Xthe page where something appears, producing running page headers and footers,
Xand accessing databases of Roman numerals, references, etc. Cross
Xreferences are also used by galleys, as will be explained in the next section.
X@End @Section
END_OF_FILE
if test 3701 -ne `wc -c <'doc/tr.lout/ch1.03'`; then
echo shar: \"'doc/tr.lout/ch1.03'\" unpacked with wrong size!
fi
# end of 'doc/tr.lout/ch1.03'
fi
if test -f 'doc/tr.lout/ch3.04' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'doc/tr.lout/ch3.04'\"
else
echo shar: Extracting \"'doc/tr.lout/ch3.04'\" \(3886 characters\)
sed "s/^X//" >'doc/tr.lout/ch3.04' <<'END_OF_FILE'
X@Section
X @Title { "@Break" }
X @Tag { break }
X@Begin
X@PP
XThe @@Break symbol influences the appearance of paragraphs (Section
X{@NumberOf concatenation}), offering a fixed set of eight styles:
X@IL
X
X@LI {
X2i @Wide { |1rt @Code adjust @@Break @I object }
Xadjust.break @Index { @Code adjust @@Break }
X|2m Break the paragraphs of {@I object} into lines, and apply @@PAdjust
X(Section {@NumberOf hadjust}) to every line except the last in
Xeach paragraph;
X}
X
X@LI {
X2i @Wide { |1rt @Code outdent @@Break @I object }
Xoutdent.break @Index { @Code outdent @@Break }
X|2m Like {@Code adjust}, except that @Code "2.0f @Wide {} &0i" is
Xinserted at the beginning of every line except the first, creating
Xan outdented paragraph;
X}
X
X@LI {
X2i @Wide { |1rt @Code ragged @@Break @I object }
Xragged.break @Index { @Code ragged @@Break }
X|2m Break the paragraphs of {@I object} into lines, but do not adjust
Xthe lines (`ragged right');
X}
X
X@LI {
X2i @Wide { |1rt @Code cragged @@Break @I object }
Xcragged.break @Index { @Code cragged @@Break }
X|2m Like {@Code ragged}, except that each line will be centred with
Xrespect to the others;
X}
X
X@LI {
X2i @Wide { |1rt @Code rragged @@Break @I object }
Xrragged.break @Index { @Code rragged @@Break }
X|2m Like {@Code ragged}, except that each line will be right-justified with
Xrespect to the others (`ragged left');
X}
X
X@LI {
X2i @Wide { |1rt @Code lines @@Break @I object }
Xlines.break @Index { @Code lines @@Break }
X|2m Break the paragraphs of {@I object} into lines at the same points
Xthat they are broken into lines in the input; do not adjust the lines. Any
Xspaces at the start of a line other than the first will appear in the output;
X}
X
X@LI {
X2i @Wide { |1rt @Code clines @@Break @I object }
Xclines.break @Index { @Code clines @@Break }
X|2m Break the paragraphs of {@I object} into lines at the same points
Xthat they are broken into lines in the input file, then centre each line with
Xrespect to the others;
X}
X
X@LI {
X2i @Wide { |1rt @Code rlines @@Break @I object }
Xrlines.break @Index { @Code rlines @@Break }
X|2m Break the paragraphs of {@I object} into lines at the same points
Xthat they are broken into lines in the input file, then right-justify
Xeach line with respect to the others.
X}
X
X@EL
XIf the paragraph was an entire component of a galley, so will each of
Xits lines be; otherwise the lines are enclosed in a {@Code "@OneRow"}
Xsymbol after breaking.
X@PP
XThe length of the gap used to separate the lines produced by paragraph
Xbreaking is always {@Code 1v}. However, the @Code v unit itself and the
Xv.unit.effect @SubIndex { effect on paragraph breaking }
Xgap mode may be changed:
X@IL
X
X@LI {
X2i @Wide { |1rt @I gap @Code "@Break" @I object }
X|2m Within {@I object}, take the value of the @Code "v" unit to be the
Xlength of {@I gap};
X}
X
X@LI {
X2i @Wide { |1rt + & @I gap @Code "@Break" @I object }
X|2m Within {@I object}, take the value of the @Code "v" unit to be
Xlarger by the length of @I gap than it would otherwise have been;
X}
X
X@LI {
X2i @Wide { |1rt -- & @I gap @Code "@Break" @I object }
X|2m Within {@I object}, take the value of the @Code "v" unit to be
Xsmaller by the length of @I gap than it would otherwise have been.
X}
X
X@EL
XIn each case, the mode of @I gap is adopted within {@I object}.
X@PP
XFinally, the @@Break symbol influences hyphenation:
X@IL
X
X@LI {
X2i @Wide { |1rt @Code "hyphen @Break" @I object }
Xhyphen.break @Index { @Code hyphen @@Break }
X|2m Permit hyphenation within the paragraphs of {@I object};
X}
X
X@LI {
X2i @Wide { |1rt @Code "nohyphen @Break" @I object }
Xnohyphen.break @Index { @Code nohyphen @@Break }
X|2m Prohibit hyphenation within the paragraphs of {@I object}; all
Xhyphenation gaps without exception revert to edge-to-edge mode.
X}
X
X@EL
XSeveral options may be given to the @@Break symbol simultaneously, in
Xany order. For example,
X@ID @Code "{ adjust 1.2fx hyphen } @Break ..."
Xis a typical initial value.
X@End @Section
END_OF_FILE
if test 3886 -ne `wc -c <'doc/tr.lout/ch3.04'`; then
echo shar: \"'doc/tr.lout/ch3.04'\" unpacked with wrong size!
fi
# end of 'doc/tr.lout/ch3.04'
fi
if test -f 'doc/tr.over/s1' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'doc/tr.over/s1'\"
else
echo shar: Extracting \"'doc/tr.over/s1'\" \(3752 characters\)
sed "s/^X//" >'doc/tr.over/s1' <<'END_OF_FILE'
X@Section
X @Title { Introduction }
X@Begin
X@PP
XThe personal computer and the laser printer have sparked a revolution in
Xthe production of documents. Many authors now routinely take their work
Xfrom conception to camera-ready copy, many publishers are using desktop
Xpublishing systems, and it is probable that manual assembly of documents
Xwill become uncommon in the near future.
X@PP
XAs control moves into the hands of an ever-increasing number of
Xnon-technical people, the stresses on document formatting software
Xincrease. On the one hand, this software must be so simple that anyone
Xcan use it; on the other, it must supply a bewildering array of
Xfeatures. A book, for example, demands fonts, paragraph and page
Xbreaking, floating figures and tables, footnotes, chapters and sections,
Xrunning page headers and footers, an automatically generated table of
Xcontents, and a sorted index. Add to this an open-ended list of
Xspecialized features, beginning with mathematical typesetting, diagrams,
Xand access to bibliographic databases, and the result is a nightmare for
Xthe software developer.
X@PP
XOne solution to this feature explosion problem is to implement as a
Xsystem primitive every feature that will ever be required. Although all
Xof the successful interactive document editors known to the author take
Xthis approach (admittedly with some attempt to generalize and unify
Xtheir features), it has clearly reached its limit. Few such systems
Xprovide equation formatting, fewer still will format a Pascal program,
Xand other specialized features will simply never be implemented.
X@PP
XA second solution is to provide a relatively small system equipped with
Xa means of defining new features, as in programming languages. This
Xapproach has been taken by the batch formatters (those which do not
Xdisplay a continuously updated image of the printed document while
Xediting) found in academia, notably troff [{@Ref ossanna76}], @TeX
X[{@Ref knuth84}], and Scribe [{@Ref reid80}]. Features such as
Xfootnotes and automatic tables of contents have been added to these
Xsystems using macro definitions. Unfortunately, such extensions are
Xvery difficult and error-prone in practice: @TeX's footnote macro alone
Xcontains half a page of dense, obscure code, while those who have
Xextended troff have abandoned the language itself and taken refuge in
Xpreprocessors. A more productive basis for developing new features is needed.
X@PP
XThis article presents a high-level language for document formatting,
Xcalled Lout, which is intended to form such a basis. Lout is quite
Xaccessible to non-expert users, but its unique property is the ease with
Xwhich expert users can add new features. We begin with a presentation
Xof Lout as it appears to the non-expert user who employs the standard
Xpackages without under&-standing Lout's principles. Later sections switch
Xto the expert's view, showing by examples the principles of Lout and how
Xadvanced features are defined.
X@PP
XA Unix-compatible
X@FootNote { Unix is a trademark of "AT&T" Bell Laboratories. }
Xbatch formatter for Lout (called Basser Lout) has been written which
Xproduces PostScript
X@FootNote { PostScript is a trademark of Adobe Systems, Incorporated. }
Xoutput suitable for printing on most laser printers and many other
Xdevices. A library of standard packages written in Lout provides all of
Xthe features listed above and many others. This system is not an
Xexperimental prototype, it is a fully operational prod&-uct&-ion
Ximplementation. The software and its supporting documentation
X[{@Ref kingston92}, {@Ref kingston93basser}, {@Ref kingston92begin},
X{@Ref kingston92design}, {@Ref kingston92eq}, {@Ref kingston92fig},
X{@Ref kingston92tab}] are available free of charge from the author.
X@End @Section
END_OF_FILE
if test 3752 -ne `wc -c <'doc/tr.over/s1'`; then
echo shar: \"'doc/tr.over/s1'\" unpacked with wrong size!
fi
# end of 'doc/tr.over/s1'
fi
if test -f 'doc/tr.over/s3' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'doc/tr.over/s3'\"
else
echo shar: Extracting \"'doc/tr.over/s3'\" \(4009 characters\)
sed "s/^X//" >'doc/tr.over/s3' <<'END_OF_FILE'
X@Section
X @Title { Objects }
X@Begin
X@PP
XTo the expert user, Lout is a high-level functional language with a
Xrelatively small repertoire of primitive features organized around four
Xkey concepts: {@I objects}, {@I definitions}, {@I cross @I references},
Xand {@I galleys}. An object is a rectangle with at least one horizontal
Xand one vertical mark protruding from it. For example,
X@ID @Code "Australia"
Xis an object which is viewed by Lout like this:
X@ID @ShowMarks Australia
XHorizontal and vertical concatenation operators, denoted by the symbols
X@Code "|" and {@Code "/"}, are used to assemble larger objects:
X@ID @Code { "USA |0.2i Australia" }
Xis the object
X@ID { @ShowMarks USA |0.2i @ShowMarks Australia }
XThe parameters are separated by the length given after the concatenation
Xsymbol (0.2 inches in this example), and their horizontal marks are
Xaligned.
X@PP
XTables are made by combining the two operators, with @Code "|" having
Xthe higher precedence:
X@ID @Code {
X |1m USA |1m "|0.2i" |1m Australia
X/1vx "/0.1i" | Washington | "|" | Canberra
X}
Xis the object
X@ID {
X @ShowMarks USA &0.4c @Fig { @Line from { 0 0 } to { xsize 0 }
X linestyle { dashed } linewidth { 0.015 cm } 0.8c @Wide {} }
X #{ 0 ymark moveto xsize 10 pt add ymark lineto [ 3 pt ] 0 setdash stroke }
X #@Graphic {1c @Wide }
X |0.2i @ShowMarks Australia
X/0.1i @ShowMarks Washington | @ShowMarks Canberra
X}
XThe second horizontal concatenation symbol needs no length, since the
Xfirst one determines the separation between the two columns created by
Xthe alignment of the vertical marks. Objects of arbitrary complexity
Xmay be assembled using these and other operators, and braces used for
Xgrouping, in a manner analogous to the assembly of expressions in
Xprogramming languages.
X@PP
XThe lengths attached to concatenation symbols have features which permit
Xobjects to be positioned very precisely. In addition to the usual units
Xof measurement (inches, centimetres, points, and ems), lengths may be
Xmeasured in units of the current font size, space width, inter-line
Xspace, and available width (for centering and right justification).
X@PP
XThere are also six @I gap {@I modes}, which determine where the lengths
Xare measured from. Previous examples have used edge-to-edge mode:
X@ID @Fig margin { 0c } headstyle { closed } {
X@ShowMarks { 0.3c @Wide ^| 0.9c @Wide 0.3c @High ^/ 0.2c @High }
X|0.5c
X@ShowMarks { 0.3c @Wide ^| 0.9c @Wide 0.3c @High ^/ 0.2c @High }
X//0.2c
X|1.2c @Arrow arrow { both } { 0.5c @Wide }
X}
XLout also provides a mark-to-mark mode, obtained by appending
X@Code x to the length:
X@ID @Fig margin { 0c } headstyle { closed } {
X@ShowMarks { 0.3c @Wide ^| 0.9c @Wide 0.3c @High ^/ 0.2c @High }
X|0.5c
X@ShowMarks { 0.3c @Wide ^| 0.9c @Wide 0.3c @High ^/ 0.2c @High }
X//0.2c
X|0.3c @Arrow arrow { both } { 1.7c @Wide }
X}
XThe length will be widened if necessary to prevent the parameters from
Xoverlapping, thus implementing the baseline-to-baseline spacing used
Xbetween lines of text. Other modes provide tabulation from the left
Xmargin, overstriking, and hyphenation.
X@PP
XThe final appearance of an object is affected by a limited amount of
Xinformation inherited from the context, principally the font and the
Xwidth available for the object to occupy. There are operators for
Xsetting these attributes:
X@ID @Code {
X"Slope @Font {"
X"Hello, world"
X"}"
X}
Xproduces
X@ID {
XSlope @Font { Hello, world }
X}
Xand in a similar way
X@ID @Code {
X"1.5i @Wide {"
X"(1) |0.1i A small"
X"indented paragraph"
X"of text."
X"}"
X}
Xproduces
X@ID {
X1.5i @Wide {
X(1) |0.1i A small
Xindented paragraph
Xof text.
X}
X}
Xwith the paragraph inheriting and being broken to an available width of
X1.4 inches minus the width of (1). This size inheritance remains secure
Xthrough all the complexities of gap modes, mark align&-ment, the @Code
X"@Wide" and other operators, and so on, providing a high-level service
Xcomparable in value with strong typing in programming languages.
X@End @Section
END_OF_FILE
if test 4009 -ne `wc -c <'doc/tr.over/s3'`; then
echo shar: \"'doc/tr.over/s3'\" unpacked with wrong size!
fi
# end of 'doc/tr.over/s3'
fi
if test -f 'doc/tr.tab/s2' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'doc/tr.tab/s2'\"
else
echo shar: Extracting \"'doc/tr.tab/s2'\" \(3628 characters\)
sed "s/^X//" >'doc/tr.tab/s2' <<'END_OF_FILE'
X@Section
X @Title { Changing the style of entries and columns }
X@Begin
X@PP
XThe style of an entry is mainly determined by four symbols from standard
XLout: {@Code "@Font"}, {@Code "@Break"}, {@Code "@Wide"}, and
X{@Code "@High"}. We will review them only briefly here, since they are
Xtreated elsewhere [{@Ref kingston92}, {@Ref kingston92begin}],
Xthen explain how they are used within tables.
X@PP
XThe @Code "@Font" symbol changes the font and font size of an object. For
Xexample,
X@ID @Code "Slope @Font { hello world }"
Xproduces {Slope @Font { hello world }}, and
X@ID @Code "{ Bold +2p } @Font { hello world }"
Xproduces
X@ID {{ Bold +2p } @Font { hello world }}
Xwhich is two points larger than it otherwise would have been, as well
Xas set in bold. The DocumentLayout package provides the abbreviations
X@Code "@I" and @Code "@B" for @Code "Slope @Font" and {@Code "Bold @Font"}.
X@PP
XThe @Code "@Break" symbol affects paragraph breaking. Most relevant
Xhere are @Code "clines @Break" and {@Code "rlines @Break"}, which will
Xcentre or right-justify one or more lines in the given column:
X@ID @Code {
X"clines @Break {"
X"A small centred"
X"paragraph."
X"}"
X}
Xproduces
X@ID {
Xclines @Break {
XA small centred
Xparagraph.
X}
X}
Xfor example. Actually, there is a small problem with these symbols: they
Xonly work on paragraphs of at least two words, so they will fail to
Xcentre or right-justify a solitary word. Tab provides two symbols,
X{@Code "@CC"} and {@Code "@RR"}, which do essentially the same thing,
Xbut which work on single words as well.
X@PP
XThe @Code "@Wide" symbol forces an object to have a given width, by
Xpadding it with white space on the right if it is too small, or breaking
Xits paragraphs if it is too wide:
X@ID @Code {
X"1.5i @Wide {"
X"This small paragraph will"
X"be broken to a width of"
X"one and one half inches."
X"}"
X}
Xproduces
X@ID {
X1.5i @Wide {
XThis small paragraph will
Xbe broken to a width of
Xone and one half inches.
X}
X}
XWidths may be specified in centimetres, points or ems using the letters
X{@Code "c"}, {@Code "p"} and {@Code "e"} instead of {@Code "i"}. The
X@Code "@High" symbol is very similar, forcing an object to have a given
Xheight by adding white space beneath it.
X@PP
XAlthough we will use only these four symbols in the following, more
Xexotic symbols may be used, for example @Code "90d @Rotate" which
Xrotates any object (the entire table, for example, or one entry) ninety
Xdegrees, or any other positive or negative angle. Symbols defined by
Xthe user or taken from other packages may also be used.
X@PP
XTo change the style of an individual entry, enclose it in the symbols
Xrequired:
X@ID @Code {
X"@Rowa"
X" A { @CC { one entry of the table } }"
X}
XMore commonly, the same style is to be applied to every entry in a
Xparticular column, and this is done by placing the symbols for the style
Xinside the format option, between @Code "@Col" and the column letter:
X@ID @Code {
X"@Tab"
X" @Fmta { @Col 3c @Wide @CC A ! ... }"
X}
XAny @Code "@CC" or @Code "@RR" symbol should appear last, immediately
Xbefore the column letter. Now every entry in column @Code A will be
Xcentred in a three centimetre space, which means that the column as
Xa whole will be three centimetres wide (excluding margins) and its
Xentries will be centred.
X@PP
XIt is best not to use the @Code "@Wide" symbol at first, since Lout is
Xquite good at choosing appropriate column widths. If the result is not
Xsatisfactory, and the table is wide enough to require paragraph breaking
Xwithin its entries, @Code "@Wide" should be used only to reduce the width
Xof the wider columns, not to increase the width of the narrower ones.
X@End @Section
END_OF_FILE
if test 3628 -ne `wc -c <'doc/tr.tab/s2'`; then
echo shar: \"'doc/tr.tab/s2'\" unpacked with wrong size!
fi
# end of 'doc/tr.tab/s2'
fi
if test -f 'doc/tr.tab/s7' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'doc/tr.tab/s7'\"
else
echo shar: Extracting \"'doc/tr.tab/s7'\" \(3508 characters\)
sed "s/^X//" >'doc/tr.tab/s7' <<'END_OF_FILE'
X@Section
X @Title { A final example }
X@Begin
X@PP
XIn conclusion, here is the input for a relatively large table:
X@ID 10p @Font @Code 1.18fx @Break {
X"@OneRow 10p @Font 1.15fx @Break @Tab"
X" linewidth { 1.0 pt }"
X" vmargin { 0.4v }"
X" @Fmta { @Col @B A ! @Col @B B ! @Col @B C ! @Col @B D }"
X" @Fmtb { @Col outdent @Break A ! @Col 1.8c @Wide ragged @Break B !"
X" @Col C ! @Col outdent @Break D }"
X"{"
X""
X"@Rowa above { single } below { single }"
X" A { Scholarship }"
X" B { Value $ }"
X" C { Closing date }"
X" D { Qualifications }"
X""
X"@Rowa"
X" A { 1. Tenable at the University of Sydney }"
X""
X"@Rowb"
X" A { Commonwealth and University Postgraduate Research Awards }"
X" B { 10,415 (12,724 to 16,433 from 1 January 1990) }"
X" C { 31 October }"
X" D { Graduates with Hons I or Hons II Div. 1. For research in any field }"
X""
X"@Rowb"
X" A { Commonwealth Postgraduate Course Awards }"
X" B { 10,415 }"
X" C { 30 September }"
X" D { Graduates with honours degrees or very good pass degrees. For"
X"Master's degrees undertaken by coursework }"
X""
X"@Rowb"
X" A { R. and M. Bentwich Scholarship }"
X" D { Graduate who holds a postgraduate research scholarship and who"
X"requires a supplementary grant }"
X""
X"@Rowa"
X" A { 2. Awarded by external bodies }"
X""
X"@Rowb"
X" A { Caltex }"
X" B { 24,000 }"
X" C { 30 September }"
X" D { Female graduates completing degree or diploma in year of application }"
X""
X"@Rowb"
X" A { Rhodes Scholarship }"
X" B { @Sterling3500 + return air-fare }"
X" C { 1 October }"
X" D { Age limit 25. For tenure at the University of Oxford }"
X" below { single }"
X"}"
X"@DP"
X"10p @Font { *Additional benefits include cost of travel and payment of fees. }"
X}
XThe most interesting things about it are the use of outdented paragraphs,
Xand the @Code "@Wide" symbol which restricts the width of the second column,
Xwhich would otherwise be as wide as the first and last. Here is the result:
X@DP
X@OneRow 10p @Font 1.15fx @Break @Tab
X linewidth { 1.0 pt }
X vmargin { 0.4v }
X @Fmta { @Col @B A ! @Col @B B ! @Col @B C ! @Col @B D }
X @Fmtb { @Col outdent @Break A ! @Col 1.8c @Wide ragged @Break B !
X @Col C ! @Col outdent @Break D }
X{
X@Rowa above { single } below { single }
X A { Scholarship }
X B { Value $ }
X C { Closing date }
X D { Qualifications }
X
X@Rowa
X A { 1. Tenable at the University of Sydney }
X
X@Rowb
X A { Commonwealth and University Postgraduate Research Awards }
X B { 10,415 (12,724 to 16,433 from 1 January 1990) }
X C { 31 October }
X D { Graduates with Hons I or Hons II Div. 1. For research in any field }
X
X@Rowb
X A { Commonwealth Postgraduate Course Awards }
X B { 10,415 }
X C { 30 September }
X D { Graduates with honours degrees or very good pass degrees. For
XMaster's degrees undertaken by coursework }
X
X@Rowb
X A { R. and M. Bentwich Scholarship }
X D { Graduate who holds a postgraduate research scholarship and who
Xrequires a supplementary grant }
X
X@Rowa
X A { 2. Awarded by external bodies }
X
X@Rowb
X A { Caltex }
X B { 24,000 }
X C { 30 September }
X D { Female graduates completing degree or diploma in year of application }
X
X@Rowb
X A { Rhodes Scholarship }
X B { @Sterling3500 + return air-fare }
X C { 1 October }
X D { Age limit 25. For tenure at the University of Oxford }
X below { single }
X}
X@DP
X10p @Font { *Additional benefits include cost of travel and payment of fees. }
X@End @Section
END_OF_FILE
if test 3508 -ne `wc -c <'doc/tr.tab/s7'`; then
echo shar: \"'doc/tr.tab/s7'\" unpacked with wrong size!
fi
# end of 'doc/tr.tab/s7'
fi
if test -f 'include/doc' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'include/doc'\"
else
echo shar: Extracting \"'include/doc'\" \(4110 characters\)
sed "s/^X//" >'include/doc' <<'END_OF_FILE'
X
X###############################################################################
X# #
X# Setup file for invoking @DocumentLayout for simple documents #
X# #
X# Jeffrey H. Kingston #
X# 22 December 1992 #
X# #
X###############################################################################
X
X@SysInclude { ft }
X@SysInclude { dl }
X# @SysInclude { eq }
X# @SysInclude { tab }
X# @SysInclude { pas }
X# @SysInclude { fig }
X
X@Use { @DocumentLayout
X # @InitialFont { Times Base 12p } # initial font
X # @InitialBreak { adjust 1.20fx } # initial break
X # @Hyphenate { Yes } # Want hyphenation? Yes or No
X # @MajorHeadingFont { Bold 2.0f } # font for major headings
X # @HeadingFont { Bold } # font for ordinary headings
X # @MinorHeadingFont { Bold } # font for minor headings
X # @BookCoverFont { Helvetica Base } # font for book cover
X
X # @ParaGap { 1.30vx } # gap between paragraphs
X # @ParaIndent { 2.00f } # paragraph first-line indent
X
X # @DispGap { 1.00v } # gap above and below displays
X # @DispIndent { 2.00f } # @IndentedDisplay indent
X # @DefaultIndent { 0.5rt } # @Display indent
X # @WideIndent { 4.00f } # @WideTaggedList indent
X # @VeryWideIndent { 8.00f } # @VeryWideTaggedList indent
X
X # @PageWidth { 21.00c } # width of page
X # @PageHeight { 29.70c } # height of page
X # @PageMargin { 2.50c } # size of all four margins
X # @Columns { Single } # Single, Double, Multi
X # @DoubleColWidth { 7.50c } # column width used by Double
X # @MultiColWidth { 4.67c } # column width used by Multi
X # @ColGap { 1.00c } # gap between columns
X # @TopGap { 0.75c } # gap between figures
X # @MidGap { 0.75c } # gap above and below body text
X
X # @FootNoteFont { 0.80f } # font for footnotes
X # @FootNoteBreak { 1.20fx } # break for footnotes
X # @FootLen { 2.00c } # footnote line and indent size
X # @ColFootLen { 1.20c } # @FootLen when Double, Multi
X # @FootGap { 0.20c } # gap between footnotes
X
X # @MakeIndex { No } # Want index? Yes or No
X # @IndexColumns { Double } # Single, Double, Multi
X
X # @TableOfContents { No } # Want contents? Yes or No
X # @MajorContentsGap { 1.30v } # gap above major entry
X # @ContentsGap { 1.00v } # gap above ordinary entry
X
X # @ChapterNumbers { Yes } # Yes or No
X # @SectionNumbers { Yes } # Yes or No
X # @SubSectionNumbers { Yes } # Yes or No
X # @AppendixNumbers { Yes } # Yes or No
X # @SubAppendixNumbers{ Yes } # Yes or No
X # @ChapterGap { 1.10b } # gap before each chapter
X # @SectionGap { 2.00v } # gap before each section
X # @SubSectionGap { 1.50v } # gap before each subsection
X # @AppendixGap { 2.00v } # gap before each appendix
X # @SubAppendixGap { 2.00v } # gap before each subappendix
X
X # @PageNumbers { Yes } # Want page numbers? Yes or No
X # @FirstPageNumber { 1 } # Number of first page
X # @PageOneTopFormat { @Null }
X # @PageOneFootFormat { @Null }
X # @PageTopFormat { |0.5rt - @PageNum - }
X # @PageFootFormat { @Null }
X # @BookTitleFormat { Bold @Font @Title }
X}
END_OF_FILE
if test 4110 -ne `wc -c <'include/doc'`; then
echo shar: \"'include/doc'\" unpacked with wrong size!
fi
# end of 'include/doc'
fi
if test -f 'include/fontdefs0' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'include/fontdefs0'\"
else
echo shar: Extracting \"'include/fontdefs0'\" \(3856 characters\)
sed "s/^X//" >'include/fontdefs0' <<'END_OF_FILE'
X
X##################################################################################################################
X# #
X# Font definitions (English language version). Use a very wide window to see them clearly. #
X# #
X##################################################################################################################
X
Xfontdef AvantGarde Base { AvantGarde-Book AvantGarBoo.AFM Std.CEV NoRecode }
Xfontdef AvantGarde Slope { AvantGarde-BookOblique AvantGarBooObl.AFM Std.CEV NoRecode }
Xfontdef AvantGarde Demi { AvantGarde-Demi AvantGarDem.AFM Std.CEV NoRecode }
Xfontdef AvantGarde DemiSlope { AvantGarde-DemiOblique AvantGarDemObl.AFM Std.CEV NoRecode }
X
Xfontdef Bookman Base { Bookman-Demi BookmDem.AFM Std.CEV NoRecode }
Xfontdef Bookman Slope { Bookman-DemiItalic BookmDemIta.AFM Std.CEV NoRecode }
Xfontdef Bookman Light { Bookman-Light BookmLig.AFM Std.CEV NoRecode }
Xfontdef Bookman LightSlope { Bookman-LightItalic BookmLigIta.AFM Std.CEV NoRecode }
X
Xfontdef Courier Base { Courier Couri.AFM Std.CEV NoRecode }
Xfontdef Courier Slope { Courier-Oblique CouriObl.AFM Std.CEV NoRecode }
Xfontdef Courier Bold { Courier-Bold CouriBol.AFM Std.CEV NoRecode }
Xfontdef Courier BoldSlope { Courier-BoldOblique CouriBolObl.AFM Std.CEV NoRecode }
X
Xfontdef Helvetica Base { Helvetica Helve.AFM Std.CEV NoRecode }
Xfontdef Helvetica Slope { Helvetica-Oblique HelveObl.AFM Std.CEV NoRecode }
Xfontdef Helvetica Bold { Helvetica-Bold HelveBol.AFM Std.CEV NoRecode }
Xfontdef Helvetica BoldSlope { Helvetica-BoldOblique HelveBolObl.AFM Std.CEV NoRecode }
Xfontdef Helvetica Cond { Helvetica-Condensed HelveCon.AFM Std.CEV NoRecode }
Xfontdef Helvetica CondSlope { Helvetica-Condensed-Bold HelveConObl.AFM Std.CEV NoRecode }
Xfontdef Helvetica CondBold { Helvetica-Condensed-Oblique HelveConBol.AFM Std.CEV NoRecode }
Xfontdef Helvetica CondBoldSlope { Helvetica-Condensed-BoldObl HelveConBolObl.AFM Std.CEV NoRecode }
Xfontdef Helvetica Narrow { Helvetica-Narrow HelveNar.AFM Std.CEV NoRecode }
Xfontdef Helvetica NarrowSlope { Helvetica-Narrow-Oblique HelveNarObl.AFM Std.CEV NoRecode }
Xfontdef Helvetica NarrowBold { Helvetica-Narrow-Bold HelveNarBol.AFM Std.CEV NoRecode }
Xfontdef Helvetica NarrowBoldSlope {Helvetica-Narrow-BoldOblique HelveNarBolObl.AFM Std.CEV NoRecode }
X
Xfontdef Schoolbook Base { NewCenturySchlbk-Roman NewCenSchRom.AFM Std.CEV NoRecode }
Xfontdef Schoolbook Slope { NewCenturySchlbk-Italic NewCenSchIta.AFM Std.CEV NoRecode }
Xfontdef Schoolbook Bold { NewCenturySchlbk-Bold NewCenSchBol.AFM Std.CEV NoRecode }
Xfontdef Schoolbook BoldSlope { NewCenturySchlbk-BoldItalic NewCenSchBolIta.AFM Std.CEV NoRecode }
X
Xfontdef Palatino Base { Palatino-Roman PalatRom.AFM Std.CEV NoRecode }
Xfontdef Palatino Slope { Palatino-Italic PalatIta.AFM Std.CEV NoRecode }
Xfontdef Palatino Bold { Palatino-Bold PalatBol.AFM Std.CEV NoRecode }
Xfontdef Palatino BoldSlope { Palatino-BoldItalic PalatBolIta.AFM Std.CEV NoRecode }
X
Xfontdef Symbol Base { Symbol Symbo.AFM Symb.CEV NoRecode }
X
Xfontdef Times Base { Times-Roman TimesRom.AFM Std.CEV NoRecode }
Xfontdef Times Slope { Times-Italic TimesIta.AFM Std.CEV NoRecode }
Xfontdef Times Bold { Times-Bold TimesBol.AFM Std.CEV NoRecode }
Xfontdef Times BoldSlope { Times-BoldItalic TimesBolIta.AFM Std.CEV NoRecode }
X
Xfontdef Chancery Base { ZapfChancery-MediumItalic ZapfChaMedIta.AFM Std.CEV NoRecode }
Xfontdef Dingbats Base { ZapfDingbats ZapfDin.AFM Ding.CEV NoRecode }
END_OF_FILE
if test 3856 -ne `wc -c <'include/fontdefs0'`; then
echo shar: \"'include/fontdefs0'\" unpacked with wrong size!
fi
# end of 'include/fontdefs0'
fi
if test -f 'include/fontdefs1' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'include/fontdefs1'\"
else
echo shar: Extracting \"'include/fontdefs1'\" \(4078 characters\)
sed "s/^X//" >'include/fontdefs1' <<'END_OF_FILE'
X
X##################################################################################################################
X# #
X# Font definitions (ISO-LATIN-1 version). Use a very wide window to see them clearly. #
X# #
X##################################################################################################################
X
Xfontdef AvantGarde Base { AvantGarde-Book AvantGarBoo.AFM LoutLatin1.CEV Recode }
Xfontdef AvantGarde Slope { AvantGarde-BookOblique AvantGarBooObl.AFM LoutLatin1.CEV Recode }
Xfontdef AvantGarde Demi { AvantGarde-Demi AvantGarDem.AFM LoutLatin1.CEV Recode }
Xfontdef AvantGarde DemiSlope { AvantGarde-DemiOblique AvantGarDemObl.AFM LoutLatin1.CEV Recode }
X
Xfontdef Bookman Base { Bookman-Demi BookmDem.AFM LoutLatin1.CEV Recode }
Xfontdef Bookman Slope { Bookman-DemiItalic BookmDemIta.AFM LoutLatin1.CEV Recode }
Xfontdef Bookman Light { Bookman-Light BookmLig.AFM LoutLatin1.CEV Recode }
Xfontdef Bookman LightSlope { Bookman-LightItalic BookmLigIta.AFM LoutLatin1.CEV Recode }
X
Xfontdef Courier Base { Courier Couri.AFM LoutLatin1.CEV Recode }
Xfontdef Courier Slope { Courier-Oblique CouriObl.AFM LoutLatin1.CEV Recode }
Xfontdef Courier Bold { Courier-Bold CouriBol.AFM LoutLatin1.CEV Recode }
Xfontdef Courier BoldSlope { Courier-BoldOblique CouriBolObl.AFM LoutLatin1.CEV Recode }
X
Xfontdef Helvetica Base { Helvetica Helve.AFM LoutLatin1.CEV Recode }
Xfontdef Helvetica Slope { Helvetica-Oblique HelveObl.AFM LoutLatin1.CEV Recode }
Xfontdef Helvetica Bold { Helvetica-Bold HelveBol.AFM LoutLatin1.CEV Recode }
Xfontdef Helvetica BoldSlope { Helvetica-BoldOblique HelveBolObl.AFM LoutLatin1.CEV Recode }
Xfontdef Helvetica Cond { Helvetica-Condensed HelveCon.AFM LoutLatin1.CEV Recode }
Xfontdef Helvetica CondSlope { Helvetica-Condensed-Bold HelveConObl.AFM LoutLatin1.CEV Recode }
Xfontdef Helvetica CondBold { Helvetica-Condensed-Oblique HelveConBol.AFM LoutLatin1.CEV Recode }
Xfontdef Helvetica CondBoldSlope { Helvetica-Condensed-BoldObl HelveConBolObl.AFM LoutLatin1.CEV Recode }
Xfontdef Helvetica Narrow { Helvetica-Narrow HelveNar.AFM LoutLatin1.CEV Recode }
Xfontdef Helvetica NarrowSlope { Helvetica-Narrow-Oblique HelveNarObl.AFM LoutLatin1.CEV Recode }
Xfontdef Helvetica NarrowBold { Helvetica-Narrow-Bold HelveNarBol.AFM LoutLatin1.CEV Recode }
Xfontdef Helvetica NarrowBoldSlope {Helvetica-Narrow-BoldOblique HelveNarBolObl.AFM LoutLatin1.CEV Recode }
X
Xfontdef Schoolbook Base { NewCenturySchlbk-Roman NewCenSchRom.AFM LoutLatin1.CEV Recode }
Xfontdef Schoolbook Slope { NewCenturySchlbk-Italic NewCenSchIta.AFM LoutLatin1.CEV Recode }
Xfontdef Schoolbook Bold { NewCenturySchlbk-Bold NewCenSchBol.AFM LoutLatin1.CEV Recode }
Xfontdef Schoolbook BoldSlope { NewCenturySchlbk-BoldItalic NewCenSchBolIta.AFM LoutLatin1.CEV Recode }
X
Xfontdef Palatino Base { Palatino-Roman PalatRom.AFM LoutLatin1.CEV Recode }
Xfontdef Palatino Slope { Palatino-Italic PalatIta.AFM LoutLatin1.CEV Recode }
Xfontdef Palatino Bold { Palatino-Bold PalatBol.AFM LoutLatin1.CEV Recode }
Xfontdef Palatino BoldSlope { Palatino-BoldItalic PalatBolIta.AFM LoutLatin1.CEV Recode }
X
Xfontdef Symbol Base { Symbol Symbo.AFM Symb.CEV NoRecode }
X
Xfontdef Times Base { Times-Roman TimesRom.AFM LoutLatin1.CEV Recode }
Xfontdef Times Slope { Times-Italic TimesIta.AFM LoutLatin1.CEV Recode }
Xfontdef Times Bold { Times-Bold TimesBol.AFM LoutLatin1.CEV Recode }
Xfontdef Times BoldSlope { Times-BoldItalic TimesBolIta.AFM LoutLatin1.CEV Recode }
X
Xfontdef Chancery Base { ZapfChancery-MediumItalic ZapfChaMedIta.AFM LoutLatin1.CEV Recode }
Xfontdef Dingbats Base { ZapfDingbats ZapfDin.AFM Ding.CEV NoRecode }
END_OF_FILE
if test 4078 -ne `wc -c <'include/fontdefs1'`; then
echo shar: \"'include/fontdefs1'\" unpacked with wrong size!
fi
# end of 'include/fontdefs1'
fi
if test -f 'include/pas' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'include/pas'\"
else
echo shar: Extracting \"'include/pas'\" \(3765 characters\)
sed "s/^X//" >'include/pas' <<'END_OF_FILE'
X
X###############################################################################
X# #
X# Lout @Pas package for formatting Pascal programs (Version 2.0) #
X# #
X# Version 1.0 by Jeffrey H. Kingston, June 1991. #
X# Version 2.0 by Jeffrey H. Kingston, 22 December 1992. #
X# #
X# See "Eq - a Lout package for typesetting mathematics" for user #
X# information. #
X# #
X# Reference: Jensen, K. and Wirth, N. Pascal User Manual and Report. #
X# Second Edition, Springer-Verlag, 1975. #
X# #
X###############################################################################
X
Xexport "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
X "." "," ":" ";" "'" "`" "+" "-" "*" "/" "(" ")"
X "[" "]" "^" ".." "=" "<" ">" "<>" "<=" ">=" ":="
X
X and array begin case const div do downto else end
X file for forward function goto if in label mod nil not
X of or otherwise packed procedure program record repeat
X set then to type until var while with @Com
X
Xdef @Pas
X body @Body
X@Begin
X
X def @R right x { Base @Font x }
X def @B right x { Bold @Font x }
X def @S right x { { Symbol Base } @Font x }
X
X def "0" { @R "0" }
X def "1" { @R "1" }
X def "2" { @R "2" }
X def "3" { @R "3" }
X def "4" { @R "4" }
X def "5" { @R "5" }
X def "6" { @R "6" }
X def "7" { @R "7" }
X def "8" { @R "8" }
X def "9" { @R "9" }
X def "." { @R "." }
X def "," { @R "," }
X def ":" { @R ":" }
X def ";" { @R ";" }
X def "'" { @R "'" }
X def "`" { @R "`" }
X def "+" { @S "+" }
X def "-" { @S "-" }
X def "*" { @S @Char "asteriskmath" }
X def "/" { @R @Char "fraction" }
X def "(" { @R "(" }
X def ")" { @R ")" }
X def "[" { @R "[" }
X def "]" { @R "]" }
X def "^" { @S 0.8f @Font @Char "arrowup" }
X def ".." { @R ".." }
X def "=" { @S @Char "equal" }
X def "<" { @S @Char "less" }
X def ">" { @S @Char "greater" }
X def "<>" { @S @Char "notequal" }
X def "<=" { @S @Char "lessequal" }
X def ">=" { @S @Char "greaterequal" }
X def ":=" { :{//0.03fo =} }
X
X def and { @B "and" }
X def array { @B "array" }
X def begin { @B "begin" }
X def case { @B "case" }
X def const { @B "const" }
X def div { @B "div" }
X def do { @B "do" }
X def downto { @B "downto" }
X def else { @B "else" }
X def end { @B "end" }
X def file { @B "file" }
X def for { @B "for" }
X def forward { @B "forward" }
X def function { @B "function" }
X def goto { @B "goto" }
X def if { @B "if" }
X def in { @B "in" }
X def label { @B "label" }
X def mod { @B "mod" }
X def nil { @B "nil" }
X def not { @B "not" }
X def of { @B "of" }
X def or { @B "or" }
X def otherwise { @B "otherwise" }
X def packed { @B "packed" }
X def procedure { @B "procedure" }
X def program { @B "program" }
X def record { @B "record" }
X def repeat { @B "repeat" }
X def set { @B "set" }
X def then { @B "then" }
X def to { @B "to" }
X def type { @B "type" }
X def until { @B "until" }
X def var { @B "var" }
X def while { @B "while" }
X def with { @B "with" }
X
X def @Com right x { @R "{" x @R "}" }
X
X Slope @Font lines @Break @Body
X
X@End @Pas
END_OF_FILE
if test 3765 -ne `wc -c <'include/pas'`; then
echo shar: \"'include/pas'\" unpacked with wrong size!
fi
# end of 'include/pas'
fi
if test -f 'include/report' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'include/report'\"
else
echo shar: Extracting \"'include/report'\" \(4110 characters\)
sed "s/^X//" >'include/report' <<'END_OF_FILE'
X
X###############################################################################
X# #
X# Setup file for invoking @DocumentLayout for technical reports #
X# #
X# Jeffrey H. Kingston #
X# 22 December 1992 #
X# #
X###############################################################################
X
X@SysInclude { ft }
X@SysInclude { dl }
X# @SysInclude { eq }
X# @SysInclude { tab }
X# @SysInclude { pas }
X# @SysInclude { fig }
X
X@Use { @DocumentLayout
X # @InitialFont { Times Base 12p } # initial font
X # @InitialBreak { adjust 1.20fx } # initial break
X # @Hyphenate { Yes } # Want hyphenation? Yes or No
X # @MajorHeadingFont { Bold 2.0f } # font for major headings
X # @HeadingFont { Bold } # font for ordinary headings
X # @MinorHeadingFont { Bold } # font for minor headings
X # @BookCoverFont { Helvetica Base } # font for book cover
X
X # @ParaGap { 1.30vx } # gap between paragraphs
X # @ParaIndent { 2.00f } # paragraph first-line indent
X
X # @DispGap { 1.00v } # gap above and below displays
X # @DispIndent { 2.00f } # @IndentedDisplay indent
X # @DefaultIndent { 0.5rt } # @Display indent
X # @WideIndent { 4.00f } # @WideTaggedList indent
X # @VeryWideIndent { 8.00f } # @VeryWideTaggedList indent
X
X # @PageWidth { 21.00c } # width of page
X # @PageHeight { 29.70c } # height of page
X # @PageMargin { 2.50c } # size of all four margins
X # @Columns { Single } # Single, Double, Multi
X # @DoubleColWidth { 7.50c } # column width used by Double
X # @MultiColWidth { 4.67c } # column width used by Multi
X # @ColGap { 1.00c } # gap between columns
X # @TopGap { 0.75c } # gap between figures
X # @MidGap { 0.75c } # gap above and below body text
X
X # @FootNoteFont { 0.80f } # font for footnotes
X # @FootNoteBreak { 1.20fx } # break for footnotes
X # @FootLen { 2.00c } # footnote line and indent size
X # @ColFootLen { 1.20c } # @FootLen when Double, Multi
X # @FootGap { 0.20c } # gap between footnotes
X
X # @MakeIndex { No } # Want index? Yes or No
X # @IndexColumns { Double } # Single, Double, Multi
X
X # @TableOfContents { No } # Want contents? Yes or No
X # @MajorContentsGap { 1.30v } # gap above major entry
X # @ContentsGap { 1.00v } # gap above ordinary entry
X
X # @ChapterNumbers { Yes } # Yes or No
X # @SectionNumbers { Yes } # Yes or No
X # @SubSectionNumbers { Yes } # Yes or No
X # @AppendixNumbers { Yes } # Yes or No
X # @SubAppendixNumbers{ Yes } # Yes or No
X # @ChapterGap { 1.10b } # gap before each chapter
X # @SectionGap { 2.00v } # gap before each section
X # @SubSectionGap { 1.50v } # gap before each subsection
X # @AppendixGap { 2.00v } # gap before each appendix
X # @SubAppendixGap { 2.00v } # gap before each subappendix
X
X # @PageNumbers { Yes } # Want page numbers? Yes or No
X # @FirstPageNumber { 1 } # Number of first page
X # @PageOneTopFormat { @Null }
X # @PageOneFootFormat { @Null }
X # @PageTopFormat { |0.5rt - @PageNum - }
X # @PageFootFormat { @Null }
X # @BookTitleFormat { Bold @Font @Title }
X}
END_OF_FILE
if test 4110 -ne `wc -c <'include/report'`; then
echo shar: \"'include/report'\" unpacked with wrong size!
fi
# end of 'include/report'
fi
if test -f 'man/lout.1' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'man/lout.1'\"
else
echo shar: Extracting \"'man/lout.1'\" \(3576 characters\)
sed "s/^X//" >'man/lout.1' <<'END_OF_FILE'
X.TH LOUT 1
X.SH NAME
Xlout - prepare Lout document for printing
X.SH SYNOPSIS
Xlout [ -i<filename> ] files
X.SH DESCRIPTION
XInvoke the Basser Lout interpreter on the concatenation of the named
Xfiles, producing a PostScript file on standard output suitable for
Xprinting on PostScript printers using lpr(1). If no files are named,
Xstdin is used instead. The special file name - may be used to denote
Xstandard input. There may be white space between flags like -i and
Xtheir associated <filename> or <dirname> values.
X.P
XAn optional .lout suffix may be used for Lout source and include
Xfiles. When invoking files ending in this suffix the suffix may be
Xomitted.
X.SH OPTIONS
X.TP 16
X-i<filename>
XSearch the directories of the include file path (see below) for
X<filename> or <filename>.lout and include it. There may be
Xmultiple -i options.
X.TP
X-s
XSuppress all reading and writing of the cross reference database;
Xother databases are not affected. Useful when many simple documents that
Xdon't do any cross referencing are stored in one directory.
X.TP
X-e<filename>
XDirect error messages to <filename> instead of to stderr.
X.TP
X-o<filename>
XDirect PostScript output to <filename> instead of to stdout.
X.TP
X-I<dirname>
XAdd <dirname> to the list of directories searched for @Include files
Xand -i option files. There may be multiple -I options. @Include first
Xsearches the current directory, then searches the -I directories in the
Xorder given, and finally searches the default include file directory
X(see below). @SysInclude and the -i option omit the search of the
Xcurrent directory.
X.TP
X-C<dirname>
XAdd <dirname> to the list of directories searched for character
Xencoding (.CEV) files. There may be multiple -C options; the directories
Xare searched in the order given, and finally the default encoding
Xvectors directory is searched (see below).
X.TP
X-F<dirname>
XAdd <dirname> to the list of directories searched for font metrics
X(.AFM) files. There may be multiple -F options; the directories are
Xsearched in the order given, and finally the default font metrics
Xdirectory is searched (see below).
X.TP
X-D<dirname>
XAdd <dirname> to the list of directories searched for Lout database
Xfiles. There may be multiple -D options. @Database searches the
Xcurrent directory, then the -D directories in the order given, and
Xfinally searches the default databases directory (see below).
X@SysDatabase omits the search of the current directory.
X.TP
X-u
XPrint usage information on stderr.
X.TP
X-V
XPrint version information on stderr.
X.TP
X-EPS
XProduce output in the form of an EPS (Encapsulated PostScript) file,
Xsuitable for inclusion in another document.
X.SH LIMITS
X.nf
XAt most 255 input files (no limit on @IncludeGraphic files)
XAt most 255 characters per input line
XAt most 100 fonts (each different size counts as one font)
XAt most 5 deep nesting of @Include files
X.SH FILES
X.nf
XBinary file: <BINDIR>/lout
XDefault include file directory: <LIBDIR>/include
XDefault databases directory: <LIBDIR>/data
XDefault font metrics directory: <LIBDIR>/font
XDefault encoding vectors dir.: <LIBDIR>/evec
XLout documentation directory: <DOCDIR>
X.fi
X.SH SEE ALSO
X.P
Xlpr(1), ghostview(1)
X.SH REFERENCES
X.P
XFor a description of the Lout document formatting system,
Xsee Jeffrey H. Kingston, "Document Formatting with Lout",
XTech. Rep. 449, Basser Dept. of Computer Science, The
XUniversity of Sydney 2006, Australia (December 1992).
XSee Adobe Systems Inc., "PostScript Language Reference Manual
X(Second Edition)", Addison-Wesley, 1990, for PostScript.
X.SH AUTHOR
X.P
XJeffrey H. Kingston
END_OF_FILE
if test 3576 -ne `wc -c <'man/lout.1'`; then
echo shar: \"'man/lout.1'\" unpacked with wrong size!
fi
# end of 'man/lout.1'
fi
echo shar: End of archive 32 \(of 35\).
cp /dev/null ark32isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 35 archives.
rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
echo You still must unpack the following archives:
echo " " ${MISSING}
fi
exit 0
exit 0 # Just in case...