###############################################################################
#                                                                             #
#   Lout setup file for overhead transparencies                               #
#                                                                             #
#   Jeffrey H. Kingston                                                       #
#   5 February 1999                                                           #
#                                                                             #
###############################################################################


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

  @SysInclude { langdefs	} # language definitions
  @SysInclude { bsf		} # BasicSetup package
  @SysInclude { dsf		} # DocumentSetup package
  @SysInclude { slidesf		} # OverheadSetup 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
    @InitialFont	{ Times Base 20p	} # initial font
  # @InitialBreak	{{adjust 1.2fx hyphen} @OrIfPlain {ragged 1fx nohyphen}}
    @InitialBreak	{ ragged 1.20fx nohyphen} # initial break
  # @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
    @FootMargin		{ 5.00c			} # 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.00v	@OrIfPlain 1f	} # extra gap above major entry
  # @ContentsGapBelow	{ 0.00v	@OrIfPlain 0f	} # extra gap below major entry
    @ContentsFont       { Base                  } # 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
    @PageHeaders	{ Titles		} # 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 }
    @RunningOddTop  { 8p @Font {@MajorTitle @MinorNum @Right @PageNum} }
  # @RunningOddFoot		{ @Null					}
    @RunningOddFoot		{ @Null					}
  # @RunningEvenTop { @B @PageNum @Right @I {@MajorNum @DotSep @MajorTitle} }
    @RunningEvenTop { 8p @Font {@MajorTitle @MinorNum @Right @PageNum} }
  # @RunningEvenFoot		{ @Null					}
    @RunningEvenFoot		{ @Null					}
  # @RunningStartOddTop 	{ @Null					}
    @RunningStartOddTop 	{ 8p @Font { @MajorTitle @MinorNum @Right @PageNum } }
  # @RunningStartOddFoot	{ @Centre { Bold 0.8f } @Font @PageNum	}
    @RunningStartOddFoot	{ @Null					}
  # @RunningStartEvenTop	{ @Null					}
    @RunningStartEvenTop	{ 8p @Font { @MajorTitle @MinorNum @Right @PageNum } }
  # @RunningStartEvenFoot	{ @Centre { Bold 0.8f } @Font @PageNum	}
    @RunningStartEvenFoot	{ @Null					}
  # @RunningIntroOddTop		{ @Null					}
  # @RunningIntroOddFoot	{ @Right @PageNum			}
  # @RunningIntroEvenTop	{ @Null					}
  # @RunningIntroEvenFoot	{ @PageNum				}
  # @RunningIntroStartOddTop	{ @Null					}
  # @RunningIntroStartOddFoot	{ @Null					}
  # @RunningIntroStartEvenTop	{ @Null					}
  # @RunningIntroStartEvenFoot	{ @Null					}
}


###############################################################################
#                                                                             #
#  The @OverheadSetup @Use clause - options specific to overheads.            #
#                                                                             #
###############################################################################

@Use { @OverheadSetup
  # @DateLine			{ No		} # No, Yes, or a date
  # @ContentsWord		{ contents	} # word for "Contents"
  # @LectureWord		{ lecture       } # word for "Lecture"
  # @OverheadWord               {               } # word for "Overhead"
  # @LectureNumbers		{ Arabic	} # kind of lecture numbers
  # @FirstLectureNumber		{ 1		} # first lecture num
  # @OverheadNumbers		{ Arabic	} # kind of overhead numbers
  # @FirstOverheadNumber	{ 1		} # first overhead num
  # @TitlePageFont		{ Helvetica Base 1.5f 	} # title page font
  # @LectureHeadingFont		{ Bold 1.20f		} # lecture head font
  # @LectureHeadingBreak	{ clines 1.2fx nohyphen	} # lecture head break
  # @LectureHeadingFormat	{ @Centre number @DP @Centre title @DP }
  # @AboveLectureGap		{ 3.0f			} # gap above lec head
  # @OverheadHeadingFont	{ Bold			} # overhead head font
  # @OverheadHeadingBreak	{ 1.2fx nohyphen	} # overhead head break
  # @OverheadHeadingFormat	{ @Centre title @DP	} # overhead head format
  # @OverheadFormat		{ @Body			} # overhead body format
  # @AboveOverheadGap		{ 1.0f			} # gap above over head
  # @LectureInContents		{ Yes		} # add lectures to contents
  # @OverheadInContents		{ No		} # add overheads to contents
  # @ReferencesInContents	{ Yes		} # add references to contents
  # @LectureNumInTheorems	{ Yes		} # theorem num has lecture num
  # @OverheadNumInTheorems	{ No		} # theorem num has overhead num
  # @LectureNumInDisplays	{ Yes		} # display num has lecture num
  # @OverheadNumInDisplays	{ No		} # display num has overhead num
  # @LectureNumInFigures	{ Yes		} # figure num has lecture num
  # @OverheadNumInFigures	{ No		} # figure num has overhead num
  # @LectureNumInTables		{ Yes		} # table num has lecture num
  # @OverheadNumInTables	{ No		} # table num has overhead num
  # @LectureNumInRunners	{ Yes		} # running head has lecture num
  # @OverheadNumInRunners	{ Yes		} # running head has overhd num
  # @LecturePrefix		{		} # for structured page nums
  # @OverheadPrefix		{		} # for structured page nums
}


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

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