###############################################################################
#                                                                             #
#   Lout setup file for stand-alone illustrations                             #
#                                                                             #
#   Jeffrey H. Kingston                                                       #
#   5 February 1999                                                           #
#                                                                             #
###############################################################################


###############################################################################
#                                                                             #
#  @SysInclude commands for standard packages.                                #
#                                                                             #
###############################################################################

  @SysInclude { langdefs	} # language definitions
  @SysInclude { bsf		} # BasicSetup package
  @SysInclude { dsf		} # DocumentSetup package
  @SysInclude { picturef	} # IllustrationSetup extension


###############################################################################
#                                                                             #
#  @Include command for reading personal definitions from current directory.  #
#                                                                             #
###############################################################################

  @Include { mydefs }


###############################################################################
#                                                                             #
#  The @BasicSetup @Use clause - basics, lists, paragraphs, displays.         #
#                                                                             #
#  To change the default value of any option, delete the # at the start of    #
#  its line and change the value between braces.                              #
#                                                                             #
###############################################################################
 
@Use { @BasicSetup
  # @InitialFont	{ Times Base 12p	} # initial font
  # @InitialBreak	{{adjust 1.2fx hyphen} @OrIfPlain {ragged 1fx nohyphen}}
  # @InitialSpace	{ lout			} # initial space style
  # @InitialLanguage	{ English		} # initial language
  # @InitialColour	{ black			} # initial colour
  # @OptimizePages	{ No			} # optimize page breaks?
  # @HeadingFont	{ Bold			} # font for @Heading
  # @ParaGap		{ 1.3vx @OrIfPlain 1f	} # gap between paragraphs
  # @ParaIndent		{ 2.00f	@OrIfPlain 5s	} # first-line indent for @PP
  # @DisplayGap		{ 1.00v	@OrIfPlain 1f	} # gap above, below displays
  # @DisplayIndent	{ 2.00f	@OrIfPlain 5s	} # @IndentedDisplay indent
  # @DefaultIndent	{ 0.5rt			} # @Display indent
  # @DisplayNumStyle	{ (num)			} # style of display numbers
  # @WideIndent		{ 4.00f	@OrIfPlain 10s	} # @WideTaggedList indent
  # @VeryWideIndent	{ 8.00f	@OrIfPlain 20s	} # @VeryWideTaggedList indent
  # @ListOuterGap	{ 1.00v	@OrIfPlain 1f	} # gap before, after lists
  # @ListGap		{ 1.00v	@OrIfPlain 1f	} # gap between list items
  # @ListIndent		{ 0s			} # indent of list items
  # @ListRightIndent	{ 0s			} # right indent of list items
  # @ListLabelWidth	{ 2.00f	@OrIfPlain 5s	} # width allowed for list tags
  # @NumberSeparator	{ .			} # separates nums like 2.3.7
  # @CrossLinkFormat	{ @Body			} # format of cross links
}


###############################################################################
#                                                                             #
#  The @DocumentSetup @Use clause - page layout plus figures, tables, etc.    #
#                                                                             #
#  To change the default value of any option, delete the # at the start of    #
#  its line and change the value between braces.                              #
#                                                                             #
###############################################################################

@Use { @DocumentSetup
  # @PageType		{ A4	@OrIfPlain Other} # page type (width, height)
  # @PageWidth		{ 80s			} # page width if type Other
  # @PageHeight		{ 66f			} # page height if type Other
  # @PageOrientation	{ Portrait		} # Portrait, Landscape, etc.
  # @PageBackground	{  			} # background of each page
  # @TopMargin		{ 2.5c	@OrIfPlain 6f	} # top margin of all pages
  # @FootMargin		{ 2.5c	@OrIfPlain 6f	} # bottom margin of all pages
  # @OddLeftMargin	{ 2.5c	@OrIfPlain 10s	} # left margin of odd pages
  # @OddRightMargin	{ 2.5c	@OrIfPlain 10s	} # right margin of odd pages
  # @EvenLeftMargin	{ 2.5c	@OrIfPlain 10s	} # left margin of even pages
  # @EvenRightMargin	{ 2.5c	@OrIfPlain 10s	} # right margin of even pages
  # @OddLeftBodyMargin	{ 0c			} # extra margin for page body
  # @OddRightBodyMargin	{ 0c			} # extra margin for page body
  # @EvenLeftBodyMargin	{ 0c			} # extra margin for page body
  # @EvenRightBodyMargin{ 0c			} # extra margin for page body
  # @PageBoxType	{ None			} # None Box CurveBox ShadowBox
  # @PageBoxMargin	{ 1.00c			} # page box margin
  # @PageBoxLineWidth	{			} # page box line thickness
  # @PageBoxPaint	{ none			} # page box paint
  # @PageBoxShadow	{ 0.60c			} # shadow margin if ShadowBox
  # @PageEnclose	{ @Body			} # enclose every page in this
  # @ColumnNumber	{ 1			} # number of columns (1 to 10)
  # @ColumnGap		{ 1.00c	@OrIfPlain 6s	} # column gap
  # @FigureLocation	{ PageTop		} # default figure location
  # @TableLocation	{ PageTop		} # default table location
  # @FigureFormat	{ @CC @Body		} # default figure format
  # @TableFormat	{ @CC @Body		} # default table format
  # @FigureWord		{ figure		} # "Figure" word else anything
  # @TableWord		{ table			} # "Table" word else anything
  # @FigureNumbers	{ Arabic		} # method of numbering figures
  # @TableNumbers	{ Arabic		} # method of numbering tables
  # @FigureCaptionPos	{ Below 		} # Above or Below
  # @TableCaptionPos	{ Below			} # Above or Below
  # @FigureCaptionFont  { -2p                   } # figure caption font
  # @FigureCaptionBreak { adjust hyphen 1.2fx   } # figure caption break
  # @FigureCaptionFormat{ {@B { word @NumSep number. &2s }} @Insert caption }
  # @TableCaptionFont   { -2p                   } # table caption font
  # @TableCaptionBreak  { adjust hyphen 1.2fx   } # table caption break
  # @TableCaptionFormat { {@B { word @NumSep number. &2s }} @Insert caption }
  # @MakeFigureContents { No                    } # list of figures at start
  # @MakeTableContents  { No                    } # list of tables at start
  # @MakeContents	{ No			} # make contents? Yes or No
  # @ContentsGap	{ 0.20v	@OrIfPlain 0f	} # extra gap above minor entry
  # @ContentsGapAbove	{ 0.80v	@OrIfPlain 1f	} # extra gap above major entry
  # @ContentsGapBelow	{ 0.00v	@OrIfPlain 0f	} # extra gap below major entry
  # @ContentsFont       { Bold                  } # font for major entry
  # @ContentsPartGapAbove { 1.00v @OrIfPlain 1f	} # extra gap above `part' entry
  # @ContentsPartGapBelow { 0.00v @OrIfPlain 0f	} # extra gap below `part' entry
  # @ContentsFormat	{ number @DotSep title	} # contents entry format
  # @ContentsLeader	{ ..			} # leader symbol in contents
  # @ContentsLeaderGap	{ 4s	@OrIfPlain 2s	} # gap between leaders
  # @ContentsRightWidth	{ 3f	@OrIfPlain 6s	} # page numbers column width
  # @MakeReferences	{ Yes			} # make references? Yes or No
  # @RefCiteStyle	{ [cite]		} # citation style
  # @RefCiteLabels	{ @RefNum		} # citation items
  # @RefNumbers		{ Arabic		} # reference numbers
  # @RefListFormat	{ Labels		} # NoLabels, Labels, etc.
  # @RefListLabels	{ [@RefNum]		} # ref list label format
  # @RefListTitle	{ references		} # title of reference list
  # @ChapRefListTitle	{ references		} # title of chapter ref list
  # @RefListIndent	{ 0s			} # indent to left of labels
  # @RefListRightIndent	{ 0s			} # indent to right of items
  # @RefListGap		{ @ListGap		} # gap between ref list items
  # @RefListFont	{        		} # font used in reference list
  # @RefListBreak	{        		} # break style of ref list
  # @RefListLabelWidth 	{ @ListLabelWidth	} # Labels column width
  # @RefListSortKey	{ @Tag			} # sorting key
  # @MakeIndex		{ No			} # make index? Yes or No
  # @IndexFont		{			} # index entries font
  # @IndexBreak		{ {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break
  # @IndexColumnNumber	{ 2			} # index columns (1 to 10)
  # @IndexColumnGap	{ 1.00c	@OrIfPlain 6s	} # index column gap
  # @IndexCtd		{ Yes			} # include (ctd.) lines
  # @IndexCtdWord	{ continued		} # "ctd." in current lang.
  # @IndexCtdFormat	{ @Body @I (@CtdWord)	} # format of ctd.
  # @MakeIndexA		{ No 			} # make index A? Yes or No
  # @IndexAFont		{			} # index A entries font
  # @IndexABreak	{ {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break
  # @IndexAColumnNumber	{ 2			} # index A columns (1 to 10)
  # @IndexAColumnGap	{ 1.00c	@OrIfPlain 6s	} # index A column gap
  # @IndexACtd		{ Yes			} # include (ctd.) lines
  # @IndexACtdWord	{ continued		} # "ctd." in current lang.
  # @IndexACtdFormat	{ @Body @I (@CtdWord)	} # format of ctd.
  # @MakeIndexB		{ No 			} # make index B? Yes or No
  # @IndexBFont		{			} # index B entries font
  # @IndexBBreak	{ {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break
  # @IndexBColumnNumber	{ 2			} # index B columns (1 to 10)
  # @IndexBColumnGap	{ 1.00c	@OrIfPlain 6s	} # index B column gap
  # @IndexBCtd		{ Yes			} # include (ctd.) lines
  # @IndexBCtdWord	{ continued		} # "ctd." in current lang.
  # @IndexBCtdFormat	{ @Body @I (@CtdWord)	} # format of ctd.
  # @TopGap		{ 0.75c	@OrIfPlain 2f	} # gap between figures
  # @MidGap		{ 0.75c	@OrIfPlain 2f	} # gap above/below body text
  # @FootNoteNumbers	{ Arabic		} # footnote numbers
  # @FootNoteThrough	{ No			} # numbered through chapter?
  # @FootNoteLocation	{ ColFoot		} # where the footnote appears
  # @FootNoteFont	{ 0.80f			} # font for footnotes
  # @FootNoteBreak	{ 1.2fx	@OrIfPlain 1fx	} # break for footnotes
  # @FootNoteFormat     { { number &0.05f } @Insert body } # footnote format
  # @FootLen		{ 2.00c	@OrIfPlain 10s	} # length of footnote line
  # @FootAboveGap	{ @DisplayGap		} # gap above footnote line
  # @FootGap		{ 0.20c	@OrIfPlain 1fx	} # gap between footnotes
  # @MarginNoteFont	{ 0.80f			} # font of margin notes
  # @MarginNoteBreak	{ ragged 1.10fx		} # break style of margin notes
  # @MarginNoteHGap	{ 0.5c   		} # horizontal gap to notes
  # @MarginNoteVGap	{ @DisplayGap		} # min vertical gap between
  # @MarginNoteWidth	{ 1.50c  		} # width of margin notes
  # @EndNoteNumbers	{ Arabic		} # endnote numbers
  # @EndNoteFont	{ 0.80f			} # font of endnotes
  # @EndNoteBreak	{ 1.2fx	@OrIfPlain 1fx	} # break for endnotes
  # @EndNoteFormat	{ { number &0.05f } @Insert body } # endnote format
  # @EndNoteGap		{ 0.20c	@OrIfPlain 1f	} # gap between endnotes
  # @TheoremWord	{ theorem		} # "Theorem" word, etc.
  # @TheoremTitleFormat	{ (title)		} # only if title present
  # @TheoremFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
  # @DefinitionWord	{ definition		} # "Definition" word, etc.
  # @DefinitionTitleFormat { (title)		} # only if title present
  # @DefinitionFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
  # @ClaimWord		{ claim			} # "Claim" word, etc.
  # @ClaimTitleFormat	{ (title)		} # only if title present
  # @ClaimFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
  # @PropositionWord	{ proposition		} # "Proposition" word, etc.
  # @PropositionTitleFormat { (title)		} # only if title present
  # @PropositionFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
  # @LemmaWord		{ lemma			} # "Lemma" word, etc.
  # @LemmaTitleFormat	{ (title)		} # only if title present
  # @LemmaFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
  # @CorollaryWord	{ corollary		} # "Corollary" word, etc.
  # @CorollaryTitleFormat { (title)		} # only if title present
  # @CorollaryFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
  # @ExampleWord	{ example		} # "Example" word, etc.
  # @ExampleTitleFormat	{ (title)		} # only if title present
  # @ExampleFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
  # @ProofWord		{ proof			} # "Proof" word, etc.
  # @PageHeaders	{ Simple		} # None Simple Titles NoTitles
  # @PageNumbers	{ Arabic		} # page numbers
  # @FirstPageNumber	{ 1			} # number of first page 
  # @IntroPageNumbers	{ Roman			} # intro page numbers
  # @IntroFirstPageNumber{ 1			} # number of first intro page 
  # @StructPageNums	{ No			} # make structured page numbers

  # @OddTop		{ @Centre{- @PageNum -}	} # Simple page headers
  # @OddFoot		{ @Null			}
  # @EvenTop		{ @Centre{- @PageNum -}	}
  # @EvenFoot		{ @Null			}
  # @StartOddTop	{ @Null			}
  # @StartOddFoot	{ @Null			}
  # @StartEvenTop	{ @Null			}
  # @StartEvenFoot	{ @Null			}
  # @IntroOddTop	{ @Null			}
  # @IntroOddFoot	{ @Centre @PageNum	}
  # @IntroEvenTop	{ @Null			}
  # @IntroEvenFoot	{ @Centre @PageNum	}
  # @IntroStartOddTop	{ @Null			}
  # @IntroStartOddFoot	{ @Null			}
  # @IntroStartEvenTop	{ @Null			}
  # @IntroStartEvenFoot	{ @Null			}

						  # Titles, NoTitles headers
  # @RunningOddTop  { @I {@MinorNum @DotSep @MinorTitle} @Right @B @PageNum }
  # @RunningOddFoot		{ @Null					}
  # @RunningEvenTop { @B @PageNum @Right @I {@MajorNum @DotSep @MajorTitle} }
  # @RunningEvenFoot		{ @Null					}
  # @RunningStartOddTop 	{ @Null					}
  # @RunningStartOddFoot	{ @Centre { Bold 0.8f } @Font @PageNum	}
  # @RunningStartEvenTop	{ @Null					}
  # @RunningStartEvenFoot	{ @Centre { Bold 0.8f } @Font @PageNum	}
  # @RunningIntroOddTop		{ @Null					}
  # @RunningIntroOddFoot	{ @Right @PageNum			}
  # @RunningIntroEvenTop	{ @Null					}
  # @RunningIntroEvenFoot	{ @PageNum				}
  # @RunningIntroStartOddTop	{ @Null					}
  # @RunningIntroStartOddFoot	{ @Null					}
  # @RunningIntroStartEvenTop	{ @Null					}
  # @RunningIntroStartEvenFoot	{ @Null					}
}


###############################################################################
#                                                                             #
#  The @IllustrationSetup @Use clause - there are no options for this.        #
#                                                                             #
###############################################################################

@Use { @IllustrationSetup
}


###############################################################################
#                                                                             #
#  @Database (and @SysDatabase) clauses go here.                              #
#                                                                             #
###############################################################################

@SysDatabase @FontDef  { fontdefs }		  # font definitions
@SysDatabase @RefStyle { refstyle }		  # reference printing styles
