@Section
    @Title { Setup files }
    @Tag { setup }
@Begin
@PP
As mentioned briefly in Section {@NumberOf start}, each Lout document
begins with an instruction to include (i.e. to read) a @I { setup file }:
setup.files. @Index { setup files }
sysinclude. @Index @Code "@SysInclude"
system.include @Index { system include directory }
doc.file @Index { @Code "doc" file }
@ID @Code "@SysInclude { doc }"
The setup file's name in this example is @Code { doc }, and the @Code Sys
in @Code "@SysInclude" means that @Code doc is stored in the @I { Lout
system include directory }, which is where all the standard setup files
are kept.  Each document type (Chapter {@NumberOf types}) has its own
setup file, and each specialized package (for equations, tables, and
so on) has a setup file too.
@PP
To change the overall format of a document, you need to create your own
setup file by copying and modifying one of the standard ones.  We will
assume that you are making an ordinary document, with the @Code doc
setup file, but a similar procedure works for any setup file.
@PP
You first need to find out the name of the Lout system include
directory, by typing
@ID @Code "lout  -V"
in Unix.  This causes Lout to print out various facts about itself.  Then,
supposing that this tells you that the Lout system include directory
is @Code { "/usr/lout/include" }, type the Unix command
@ID @Code "cp  /usr/lout/include/doc  mydoc"
to copy the @Code doc setup file into your directory,
mydoc.file @Index { @Code "mydoc" file }
renaming it @Code {mydoc}.  Since @Code "doc" is read-only, you may
need to change the mode of @Code mydoc to be writable (by
@Code "chmod +w mydoc" in Unix).  Now replace
@ID @Code "@SysInclude { doc }"
at the beginning of your document by
@ID @Code "@Include { mydoc }"
and Lout will read @Code mydoc as the setup file instead of
@Code { doc }.  Since the two files are at present identical, this has
changed nothing so far; but now any changes you make to @Code mydoc
will affect your document.  Notice the use of @Code "@Include"
rather than @Code { "@SysInclude" }; @Code "@Include" will search your
current directory for @Code { mydoc }, whereas @Code "@SysInclude"
searches only the system directory.
@PP
The remainder of this section is a tour through @Code {doc},
explaining the various parts and how to modify them.  The first lines
that actually do anything are these:
@ID @OneRow @Code {
"@SysInclude { langdefs }"
"@SysInclude { bsf }"
"@SysInclude { dsf }"
"@SysInclude { docf }"
}
We already know that @Code "@SysInclude" causes Lout to read a file from
the Lout system include directory.  File @Code langdefs
langdefs.file @Index { @Code "langdefs" file }
tells Lout what languages there are, and files @Code "bsf" and
@Code "dsf" contain
bsf.file @Index { @Code "bsf" file }
dsf.file @Index { @Code "dsf" file }
the definitions of the BasicSetup and DocumentSetup packages, in which
all the symbols of the first two chapters of this guide are defined.  File
@Code "docf" contains extra definitions specific to
docf.file @Index { @Code "docf" file }
ordinary documents (as distinct from technical reports, books, or the
other document types of Chapter {@NumberOf types}).  So this line
will be different in the setup files for those other types.
@PP
The next line is
@ID @Code {
"@Include { mydefs }"
}
This searches your current directory for a file called @Code { mydefs },
which (as Section {@NumberOf definitions} explains) is intended to hold
your own personal set of definitions of new symbols.  It does no harm
if there is no @Code "mydefs" file in your current directory, because
@Code "@Include" then searches the Lout system include directory for
it, and there is an empty @Code mydefs file there.  When using your own
setup file, you might prefer to delete @Code "@Include { mydefs }" and
put your definitions in its place, so that you have one file of setup
material rather than two.
@PP
Next we come to the BasicSetup @Code "@Use" clause.  It looks like this:
use. @Index @Code "@Use"
@ID @OneRow @Code @Verbatim {
@Use { @BasicSetup
  # @InitialFont { Times Base 12p }
  # @InitialBreak { {adjust 1.20fx hyphen} @OrIfPlain {ragged 1fx nohyphen} }
  # @InitialSpace { lout }
  # @InitialLanguage { English }
  # @InitialColour { black }
  # @InitialBackgroundColour { white }
  # @OptimizePages { No }
  # @HeadingFont { Bold }
  # @ParaGap { 1.3vx @OrIfPlain 1f }
  # @ParaIndent { 2.00f @OrIfPlain 5s }
}
}
@Code "@BasicSetup" is a symbol, and @Code { "@InitialFont" },
basic.layout @Index @Code "@BasicSetup"
@Code { "@InitialBreak" }, etc. are its options.  There are more options
than we've shown; the display above just shows the first
few.  You change the overall format of your document by changing
these options.
@PP
A @Code "#" causes Lout to ignore that character and the rest of the
line (such ignored parts are called {@I comments} and @Code "#" is
the @I { comment character }).  As it stands, then, the options are
all hidden within comments, so their default values (shown within braces
in the comments) are in force.  To change an option, delete the @Code "#"
and change the value between braces.  For example, to set the document
in Helvetica 10 point font, change the @Code { "@InitialFont" } line to
@ID @Code "@InitialFont { Helvetica Base 10p }"
We won't go through all the options now, since they are the subject of
following sections.
@PP
The @Code "@OrIfPlain" symbol that appears within some setup file
options is used to set the value of the option differently when
plain text output (Section {@NumberOf plain}) is being produced.  For
example, the default value of @Code "@InitialBreak" is usually
{@Code "adjust 1.20fx hyphen"}, but when plain text is being produced
it switches to {@Code "ragged 1fx nohyphen"}.  When changing such
options you can leave the @Code "@OrIfPlain" symbol there and change
one or both of the alternative values as you wish.
@PP
Next comes a similar @Code "@Use" clause, for the DocumentSetup package:
@ID @OneRow @Code @Verbatim {
@Use { @DocumentSetup
  # @PageType { A4 @OrIfPlain Other }
  # @PageWidth { 80s }
  # @PageHeight { 66f }
  # @PageOrientation { Portrait }
  # @PageBackground {}
  # @TopMargin { 2.5c @OrIfPlain 6f }
}
}
This one has many options, starting with options for page
layout as shown, then going on to figures and tables, tables of
contents, etc.
@PP
The standard setup files are all much the same up to this point; the
main variation is that in some files, some options are already set.  The
@Code "slides" setup file, for example, contains
@ID @Code "@InitialFont { Times Base 20p }"
so that overhead transparencies will have a large font size.  However,
now comes a third @Code "@Use" clause whose symbol and options depend
on the document type.  For ordinary documents (i.e. in the @Code "doc"
setup file) this clause is (once again we show just some of the options):
@ID @OneRow @Code @Verbatim {
@Use { @OrdinarySetup
  # @IndexWord { index }
  # @AppendixWord { appendix }
  # @SectionNumbers { Arabic }
  # @AppendixNumbers { UCAlpha }
  # @SectionHeadingFont { Bold }
}
}
In the @Code slides setup file for overhead transparencies, we find this:
@ID @OneRow @Code @Verbatim {
@Use { @OverheadSetup
  # @DateLine { No }
  # @ContentsWord { contents }
  # @FirstOverheadNumber { 1 }
  # @OverheadNumbers { Arabic }
  # @TitlePageFont { Helvetica Base 1.5f }
  # @OverheadHeadingFont { Bold }
  # @OverheadInContents { No }
}
}
In general this third @Code "@Use" clause assigns values to options
specific to the document type we are using, whereas the first and
second @Code "@Use" clauses assign values to options that are relevant to many
or all document types.
@PP
The setup file ends with a comment identifying a spot where database
declarations may
database.dec @Index { database declarations, where to put }
be put, and two such declarations, one for fonts and the other for
reference printing styles.
@PP
The setup files used with other packages, such as C and C++ program printing,
diagrams, and graphs, are similar to the @Code { doc } setup file we
have just gone through.  They contain a @@SysInclude line analogous to
@Code "@SysInclude { dsf }" for reading the package's definition, followed
by a @@Use clause for setting the package's options.  The same procedure
is followed for changing these options.  For example, to change the
options of the @Code "diag" package, copy file @Code "diag" from the
Lout system include directory to your directory, replace the
@ID @Code "@SysInclude { diag }"
line at the top of your document by {@Code "@Include { mydiag }"}, then
edit @Code "mydiag" and change the options as you wish.
@PP
If you are using several packages and you would like a single setup file,
that is quite easy to arrange.  For example, suppose you have
@ID @Code {
"@Include { mydoc }"
"@Include { mydiag }"
"@Include { mycprint }"
}
To create a single setup file, just concatenate these three files into
one file (call it @Code { mysetup }, say), and replace the three lines by
@ID @Code {
"@Include { mysetup }"
}
As explained earlier, you can even replace the @Code "@Include { mydefs }"
line within the setup file by the actual definitions, giving just one
file of setup material for the entire document.
@End @Section
