############################################################################### # # # Lout @DocumentSetup package # # # # Version 1.0 by Jeffrey H. Kingston, 17 July 1991. # # Version 2.0 by Jeffrey H. Kingston, 22 December 1992. # # Version 3.0 by Jeffrey H. Kingston, 19 April 1994. # # Version 3.03 by Jeffrey H. Kingston, 6 May 1995. # # Versions 3.04 and 3.05 by Jeffrey H. Kingston, 11 June 1995. # # Version 3.05 by Jeffrey H. Kingston, 25 July 1995. # # Version 3.07 by Jeffrey H. Kingston, February 1996. # # Version 3.10 by Jeffrey H. Kingston, September 1996. # # Version 3.11 by Jeffrey H. Kingston, December 1996. # # Version 3.13 by Jeffrey H. Kingston, October 1998. # # Version 3.16 by Jeffrey H. Kingston, May 1999. # # Version 3.17 by Jeffrey H. Kingston, September 1999. # # Version 3.21 by Jeffrey H. Kingston, May 2000. # # Minor changes in later versions undated. # # # # This Lout package contains the general definitions used by all types of # # documents. It needs to be extended (see docf, reportf, bookf, slidesf, # # etc.) with definitions for particular document types. Consult "A User's # # Guide to the Lout Document Formatting System" for user information. # # # ############################################################################### extend @BasicSetup export @Runner @Figure @Table @Floater @FootNote @AnotherFootNote @EndNote @LeftNote @RightNote @OuterNote @InnerNote @Place @Theorem @Proof @EndProof @Definition @Claim @Proposition @Lemma @Corollary @Example @Reference @RefStyle @RefPrint @Ref @NoRef @ChapRef @NoChapRef @Cite @NoCite @ChapCite @NoChapCite @Glossary @InGlossary @IndexA @SubIndexA @SubSubIndexA @RawIndexA @RawSubIndexA @RawSubSubIndexA @IndexABlanks @IndexASpacer @InitialIndexASpacer @IndexALetters @IndexB @SubIndexB @SubSubIndexB @RawIndexB @RawSubIndexB @RawSubSubIndexB @IndexBBlanks @IndexBSpacer @InitialIndexBSpacer @IndexBLetters @Index @SubIndex @SubSubIndex @RawIndex @RawSubIndex @RawSubSubIndex @IndexBlanks @IndexSpacer @InitialIndexSpacer @IndexLetters @BypassContentsEntry @BypassMajorContentsEntry @BypassFigureContentsEntry @BypassTableContentsEntry @BypassFloaterContentsEntry @BypassReference @BypassChapReference @BypassBeginIndex @BypassRawIndex @BypassEndIndex @BypassBeginIndexA @BypassRawIndexA @BypassEndIndexA @BypassBeginIndexB @BypassRawIndexB @BypassEndIndexB def @DocumentSetup named @PageType { A4 @OrIfPlain Other} # page type (width, height) named @PageWidth { 80s } # page width if type Other named @PageHeight { 66f } # page height if type Other named @PageOrientation { Portrait } # Portrait, Landscape, etc. named @PageBackground { } # background of each page named @TopMargin { 2.50c @OrIfPlain 6f } # top margin of all pages named @FootMargin { 2.50c @OrIfPlain 6f } # bottom margin of all pages named @OddLeftMargin { 2.50c @OrIfPlain 10s } # left margin of odd pages named @OddRightMargin { 2.50c @OrIfPlain 10s } # right margin of odd pages named @EvenLeftMargin { 2.50c @OrIfPlain 10s } # left margin of even pages named @EvenRightMargin { 2.50c @OrIfPlain 10s } # right margin of even pages named @OddLeftBodyMargin { 0c } # extra margin for page body named @OddRightBodyMargin { 0c } # extra margin for page body named @EvenLeftBodyMargin { 0c } # extra margin for page body named @EvenRightBodyMargin { 0c } # extra margin for page body named @PageBoxType { None } # None Box CurveBox ShadowBox named @PageBoxMargin { 1.00c } # page box margin import @PSLengths named @PageBoxLineWidth { } # page box line thickness named @PageBoxPaint { none } # page box paint named @PageBoxShadow { 0.60c } # shadow margin if ShadowBox named @PageEnclose right @Body { @Body } # page enclose named @ColumnNumber { 1 } # number of columns (1 to 10) named @ColumnGap { 1.00c @OrIfPlain 6s } # column gap named @FigureLocation { PageTop } # default figure location named @FigureFormat named @II right x { |@DisplayIndent x | } named @QQ right x { |@DisplayIndent x |@DisplayIndent } named @CC right x { |0.5rt x | } named @RR right x { |1.0rt x | } right @Body { @CC @Body } # default figure format named @FigureWord { figure } # "Figure" word else anything named @FigureNumbers { Arabic } # method of numbering figures named @FigureCaptionPos { Below } # Above or Below named @FigureCaptionFont { -2p } # figure caption font named @FigureCaptionBreak { adjust hyphen 1.2fx } # figure caption break named @FigureCaptionFormat named word {} named number {} named caption {} { {@B { word @NumSep number. &2s }} @Insert caption } named @MakeFigureContents { No } # list of figures at start named @TableLocation { PageTop } # default table location named @TableFormat named @II right x { |@DisplayIndent x | } named @QQ right x { |@DisplayIndent x |@DisplayIndent } named @CC right x { |0.5rt x | } named @RR right x { |1.0rt x | } right @Body { @CC @Body } # default table format named @TableWord { table } # "Table" word else anything named @TableNumbers { Arabic } # method of numbering tables named @TableCaptionPos { Below } # Above or Below named @TableCaptionFont { -2p } # figure caption font named @TableCaptionBreak { adjust hyphen 1.2fx } # figure caption break named @TableCaptionFormat named word {} named number {} named caption {} { {@B { word @NumSep number. &2s }} @Insert caption } named @MakeTableContents { No } # list of tables at start named @FloaterLocation { PageTop } # default floater location named @FloaterFormat named @II right x { |@DisplayIndent x | } named @QQ right x { |@DisplayIndent x |@DisplayIndent } named @CC right x { |0.5rt x | } named @RR right x { |1.0rt x | } right @Body { @CC @Body } # default floater format named @FloaterWord { floater } # "Floater" word else anything named @FloaterNumbers { Arabic } # method of numbering floaters named @FloaterCaptionPos { Below } # Above or Below named @FloaterCaptionFont { -2p } # figure caption font named @FloaterCaptionBreak { adjust hyphen 1.2fx } # figure caption break named @FloaterCaptionFormat named word {} named number {} named caption {} { {@B { word @NumSep number. &2s }} @Insert caption } named @MakeFloaterContents { No } # list of floaters at start named @MakeContents { No } # make contents? Yes or No named @ContentsGap { 0.20v @OrIfPlain 0f } # extra gap above minor entry named @ContentsGapAbove { 0.80v @OrIfPlain 1f } # extra gap above major entry named @ContentsGapBelow { 0.00v @OrIfPlain 0f } # extra gap below major entry named @ContentsFont { Bold } # font for major entry named @ContentsPartGapAbove { 1.00v @OrIfPlain 1f } # extra gap above part entry named @ContentsPartGapBelow { 0.00v @OrIfPlain 0f } # extra gap below part entry named @ContentsFormat left number right title { number @Sep title } # contents format named @ContentsLeader { .. } # leader symbol in contents named @ContentsLeaderGap { 4s @OrIfPlain 2s } # gap between leaders named @ContentsRightWidth { 3f @OrIfPlain 6s } # page numbers column width named @MakeReferences { Yes } # make references? Yes or No named @RefCiteStyle right cite { [cite] } # citation style named @RefCiteLabels named @RefNum {} named @Tag {} named @Type {} named @Abstract {} named @Address {} named @Annote {} named @Author {} named @Day {} named @Edition {} named @HowPublished {} named @InAuthor {} named @InTitle {} named @Institution {} named @Journal {} named @Keywords {} named @Label {} named @Month {} named @Note {} named @Number {} named @Organization {} named @Page {} named @Pages {} named @Pinpoint {} named @Publisher {} named @Title {} named @TitleNote {} named @TRType {} named @Volume {} named @Year {} { @RefNum } # citation items named @RefNumbers { Arabic } # reference numbers named @RefListFormat { Labels } # NoLabels, Labels, # DropLabels, IntegrateLabels named @RefListLabels named @RefNum {} named @Tag {} named @Type {} named @Abstract {} named @Address {} named @Annote {} named @Author {} named @Day {} named @Edition {} named @HowPublished {} named @InAuthor {} named @InTitle {} named @Institution {} named @Journal {} named @Keywords {} named @Label {} named @Month {} named @Note {} named @Number {} named @Organization {} named @Page {} named @Pages {} named @Pinpoint {} named @Publisher {} named @Title {} named @TitleNote {} named @TRType {} named @Volume {} named @Year {} { [@RefNum] } # ref list label format named @RefListTitle { references } # title of reference list named @ChapRefListTitle { references } # title of chapter ref list named @RefListIndent { 0s } # indent to left of labels named @RefListRightIndent { 0s } # indent to right of items named @RefListGap { @ListGap } # gap between ref list items named @RefListFont { } # font used in reference list named @RefListBreak { } # break style of ref list named @RefListLabelWidth { @ListLabelWidth } # numeric labels column width named @RefListSortKey named @Tag {} named @Type {} named @Abstract {} named @Address {} named @Annote {} named @Author {} named @CiteOrder {} named @Day {} named @Edition {} named @HowPublished {} named @InAuthor {} named @InTitle {} named @Institution {} named @Journal {} named @Keywords {} named @Label {} named @Month {} named @Note {} named @Number {} named @Organization {} named @Page {} named @Pages {} named @Pinpoint {} named @Publisher {} named @Title {} named @TitleNote {} named @TRType {} named @Volume {} named @Year {} named ":" { "\037" } { @Tag } # sorting key named @MakeGlossary { No } # make glossary? Yes or No named @GlossaryText { @Null } # initial glossary text named @GlossaryFont { } # font for glossary named @GlossaryBreak { } # break style for glossary named @GlossaryFormat # format for glossary named @Name {} named @PageNum {} named @Body {} { +3p @Font @S @Name @Right @I { @Word&&page @PageNum } @DP @RawIndentedDisplay @Body } named @GlossaryGap { @DisplayGap } # gap between glossary items named @GlossaryColumnNumber { 2 } # glossary columns (1 to 10) named @GlossaryColumnGap { 1.00c @OrIfPlain 6s } # glossary column gap named @InGlossaryFont { smallcaps } # font for @InGlossary named @InGlossaryFormat right @Body { @Body } # format for @InGlossary named @MakeIndex { No } # make index? Yes or No named @IndexText { @Null } # initial index text named @IndexFont { } # index entries font named @IndexBreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # index entries break named @IndexFormat right @Body { @Body } # @Index format named @SubIndexFormat right @Body { {1f @Wide}@Body } # @SubIndex format named @SubSubIndexFormat right @Body { {2f @Wide}@Body } # @SubSubIndex format named @IndexTypeOrdinary right @PageNum { @PageNum } # ordinary page numbers named @IndexTypeMain right @PageNum { @B @PageNum } # main page numbers named @IndexTypeSpecial right @PageNum { @I @PageNum } # special page numbers named @IndexRangeFormat left @From right @To { @From--@To } named @IndexColumnNumber { 2 } # index columns (1 to 10) named @IndexColumnGap { 1.00c @OrIfPlain 6s } # index column gap named @IndexCtd { Yes } # include (ctd.) lines named @IndexCtdWord { continued } # "ctd." in current lang named @IndexCtdFormat left @Body right @CtdWord { @Body @I (@CtdWord) } # (ctd.) format named @IndexSpacerAbove { 2v } # space above index spacer named @IndexSpacerBelow { 1v } # space below index spacer named @IndexSpacerFont { +3p } # font of index spacer named @IndexSpacerFormat right @Body { @Body } # format of index spacer named @MakeIndexA { No } # make index A? Yes or No named @IndexAText { @Null } # initial index text named @IndexAFont { } # index A entries font named @IndexABreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # index A entries break named @IndexAFormat right @Body { @Body } # @IndexA format named @SubIndexAFormat right @Body { {1f @Wide}@Body } # @SubIndexA format named @SubSubIndexAFormat right @Body { {2f @Wide}@Body } # @SubSubIndexA format named @IndexATypeOrdinary right @PageNum { @PageNum } # ordinary page numbers named @IndexATypeMain right @PageNum { @B @PageNum } # main page numbers named @IndexATypeSpecial right @PageNum { @I @PageNum } # special page numbers named @IndexARangeFormat left @From right @To { @From--@To } named @IndexAColumnNumber { 2 } # index A columns (1 to 10) named @IndexAColumnGap { 1.00c @OrIfPlain 6s } # index A column gap named @IndexACtd { Yes } # include (ctd.) lines named @IndexACtdWord { continued } # "ctd." in current lang named @IndexACtdFormat left @Body right @CtdWord { @Body @I (@CtdWord) } # (ctd.) format named @IndexASpacerAbove { 2v } # space above index A spacer named @IndexASpacerBelow { 1v } # space below index A spacer named @IndexASpacerFont { +3p } # font of index A spacer named @IndexASpacerFormat right @Body { @Body } # format of index A spacer named @MakeIndexB { No } # make index B? Yes or No named @IndexBText { @Null } # initial index text named @IndexBFont { } # index B entries font named @IndexBBreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # index B entries break named @IndexBFormat right @Body { @Body } # @IndexB format named @SubIndexBFormat right @Body { {1f @Wide}@Body } # @SubIndexB format named @SubSubIndexBFormat right @Body { {2f @Wide}@Body } # @SubSubIndexB format named @IndexBTypeOrdinary right @PageNum { @PageNum } # ordinary page numbers named @IndexBTypeMain right @PageNum { @B @PageNum } # main page numbers named @IndexBTypeSpecial right @PageNum { @I @PageNum } # special page numbers named @IndexBRangeFormat left @From right @To { @From--@To } named @IndexBColumnNumber { 2 } # index B columns (1 to 10) named @IndexBColumnGap { 1.00c @OrIfPlain 6s } # index B column gap named @IndexBCtd { Yes } # include (ctd.) lines named @IndexBCtdWord { continued } # "ctd." in current lang named @IndexBCtdFormat left @Body right @CtdWord { @Body @I (@CtdWord) } # (ctd.) format named @IndexBSpacerAbove { 2v } # space above index B spacer named @IndexBSpacerBelow { 1v } # space below index B spacer named @IndexBSpacerFont { +3p } # font of index B spacer named @IndexBSpacerFormat right @Body { @Body } # format of index B spacer named @MakeColophon { No } # make colophon? Yes or No named @ColophonFont { } # font for colophon named @ColophonBreak { } # break style for colophon named @ColophonColumnNumber { 1 } # colophon columns (1 to 10) named @ColophonColumnGap { 1.00c @OrIfPlain 6s } # colophon column gap named @TopGap { 0.75c @OrIfPlain 2f } # gap between figures named @MidGap { 0.75c @OrIfPlain 2f } # gap above/below body text named @FootNoteNumbers { Arabic } # footnote numbers named @FootNoteThrough { No } # numbered through chapter? named @FootNoteLocation { ColFoot } # where the footnote appears named @FootNoteFont { 0.80f } # font for footnotes named @FootNoteBreak { 1.2fx @OrIfPlain 1fx } # break for footnotes named @FootNoteFormat left number right body { { number &0.05f } @Insert body } # break for footnotes named @FootLen { 2.00c @OrIfPlain 10s } # length of footnote line named @FootAboveGap { @DisplayGap } # gap above footnote line named @FootGap { 0.20c @OrIfPlain 1fx } # gap between footnotes named @MarginNoteFont { 0.80f } # font of margin notes named @MarginNoteBreak { ragged 1.10fx } # break style of margin notes named @MarginNoteHGap { 0.5c } # horizontal gap to notes named @MarginNoteVGap { @DisplayGap } # min vertical gap between named @MarginNoteWidth { 1.50c } # width of margin notes named @EndNoteNumbers { Arabic } # endnote numbers named @EndNoteFont { 0.80f } # font of endnotes named @EndNoteBreak { 1.2fx @OrIfPlain 1fx } # break for endnotes named @EndNoteFormat left number right body { { number &0.05f } @Insert body } # break for endnotes named @EndNoteGap { 0.20c @OrIfPlain 1f } # gap between endnotes named @TheoremWord { theorem } # "Theorem" word, etc. named @TheoremTitleFormat right title { (title) } # Theorem title format if present named @TheoremFormat named word {} named number {} named title {} named body {} # theorem format { { @B { word @NumSep number title: } &2s } @Insert body } named @DefinitionWord { definition } # "Definition" word, etc. named @DefinitionTitleFormat{ (title) } # Definition title format if present named @DefinitionFormat named word {} named number {} named title {} named body {} # definition format { { @B { word @NumSep number title: } &2s } @Insert body } named @ClaimWord { claim } # "Claim" word, etc. named @ClaimTitleFormat { (title) } # Claim title format if present named @ClaimFormat named word {} named number {} named title {} named body {} # claim format { { @B { word @NumSep number title: } &2s } @Insert body } named @PropositionWord { proposition } # "Proposition" word, etc. named @PropositionTitleFormat{ (title) } # Proposition title format if present named @PropositionFormat named word {} named number {} named title {} named body {} # proposition format { { @B { word @NumSep number title: } &2s } @Insert body } named @LemmaWord { lemma } # "Lemma" word, etc. named @LemmaTitleFormat { (title) } # Lemma title format if present named @LemmaFormat named word {} named number {} named title {} named body {} # lemma format { { @B { word @NumSep number title: } &2s } @Insert body } named @CorollaryWord { corollary } # "Corollary" word, etc. named @CorollaryTitleFormat { (title) } # Corollary title format if present named @CorollaryFormat named word {} named number {} named title {} named body {} # corollary format { { @B { word @NumSep number title: } &2s } @Insert body } named @ExampleWord { example } # "Example" word, etc. named @ExampleTitleFormat { (title) } # Example title format if present named @ExampleFormat named word {} named number {} named title {} named body {} # example format { { @B { word @NumSep number title: } &2s } @Insert body } named @ProofWord { proof } # "Proof" word, etc. named @PageHeaders { Simple } # None Simple Titles NoTitles named @PageNumbers { Arabic } # page numbers named @FirstPageNumber { 1 } # number of first page named @IntroPageNumbers { Roman } # intro page numbers named @IntroFirstPageNumber { 1 } # number of first intro page named @StructPageNums { No } # structured page numbers named @OddTop right @PageNum { @Centre { - @PageNum - } } named @OddFoot right @PageNum { @Null } named @EvenTop right @PageNum { @Centre { - @PageNum - } } named @EvenFoot right @PageNum { @Null } named @StartOddTop right @PageNum { @Null } named @StartOddFoot right @PageNum { @Null } named @StartEvenTop right @PageNum { @Null } named @StartEvenFoot right @PageNum { @Null } named @IntroOddTop right @PageNum { @Null } named @IntroOddFoot right @PageNum { @Centre @PageNum } named @IntroEvenTop right @PageNum { @Null } named @IntroEvenFoot right @PageNum { @Centre @PageNum } named @IntroStartOddTop right @PageNum { @Null } named @IntroStartOddFoot right @PageNum { @Null } named @IntroStartEvenTop right @PageNum { @Null } named @IntroStartEvenFoot right @PageNum { @Null } named @RunningOddTop named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @I { @MinorNum @Sep @MinorTitle } @Right @B @PageNum } named @RunningOddFoot named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @Null } named @RunningEvenTop named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @B @PageNum @Right @I { @MajorNum @Sep @MajorTitle } } named @RunningEvenFoot named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @Null } named @RunningStartOddTop named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @Null } named @RunningStartOddFoot named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @Centre { Bold 0.8f } @Font @PageNum } named @RunningStartEvenTop named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @Null } named @RunningStartEvenFoot named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @Centre { Bold 0.8f } @Font @PageNum } named @RunningIntroOddTop named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @Null } named @RunningIntroOddFoot named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @Right @PageNum } named @RunningIntroEvenTop named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @Null } named @RunningIntroEvenFoot named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @PageNum } named @RunningIntroStartOddTop named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @Null } named @RunningIntroStartOddFoot named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @Null } named @RunningIntroStartEvenTop named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @Null } named @RunningIntroStartEvenFoot named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @Null } @Begin ########################################################################### # # # @Protect x # # # # Like @CNP, this reserves space on the current page or else makes sure # # x appears on the following page. # # # # Prior to Version 3.31 the amount of lookahead was just 3.0f. But # # in Version 3.31, following a suggestion of Ludovic Courtes, this # # was changed to @OneRow { 1.0f @High @LP 2.0v @High }, which # # approximates the height of a title line, a paragraph separator, and # # the first two lines of the section, and so works somewhat better. # # # ########################################################################### def @Protect right x { @OneRow { 1.0f @High @LP 2.0v @High } //0io // x } ########################################################################### # # # @HLine # # # # Draws a horizontal line to fill available space. # # # ########################################################################### def @HLine { @BackEnd @Case { PlainText @Yield { "-" @PlainGraphic 1f @High } PostScript @Yield { {0 0 moveto xsize 0 lineto stroke} @Graphic {} } PDF @Yield { {0 0 m __xsize 0 l S} @Graphic {} } } } ########################################################################### # # # x @WordVal y # # # # Returns @Word&&x if x == y, otherwise y. # # # ########################################################################### def @WordVal left x right y { y @Case { x @Yield @Word&&x else @Yield y } } ########################################################################### # # # x @Dft y # # # # This returns x unless its value is "dft", in which case it returns y. # # Useful for defaulting the value of one parameter to another. # # # ########################################################################### def @Dft left x right y { x @Case { dft @Yield y else @Yield x } } ########################################################################### # # # x @Do y # # # # This returns @Null if x is No or None, otherwise y. # # # ########################################################################### def @Do left x right y { x @Case { { No None } @Yield @Null else @Yield y } } ########################################################################### # # # x @NoDo y # # # # Negation of @Do: This returns y if x is No or None, otherwise @Null. # # # ########################################################################### def @NoDo left x right y { x @Case { { No None } @Yield y else @Yield @Null } } ########################################################################### # # # x @Then y # # # # This returns the empty object if x is No or None, otherwise y. # # # ########################################################################### def @Then left x right y { x @Case { { No None } @Yield {} else @Yield y } } ########################################################################### # # # x @NoThen y # # # # Negation of @Then: returns y if x is No or None, otherwise empty. # # # ########################################################################### def @NoThen left x right y { x @Case { { No None } @Yield y else @Yield {} } } ########################################################################### # # # Number markers. # # # ########################################################################### def @Num left numtype right num { numtype @Case { None @Yield {} Arabic @Yield num Roman @Yield @Roman&&num UCRoman @Yield @UCRoman&&num Alpha @Yield @Alpha&&num UCAlpha @Yield @UCAlpha&&num Bullets @Yield @FnBullets&&num Symbols @Yield @FnSymbols&&num } } ########################################################################### # # # @MakePageNum # # # # Make a page number. # # # ########################################################################### def @MakePageNum named numbers {} named rawnum {} named prefix {} named owner {} { def @OwnerNum { @PageMarker&&owner @Open { rawnum } } def @StructNum { @FirstPageNumber @Plus rawnum @Minus @OwnerNum } @PageHeaders.@StructPageNums @Case { { Titles.Yes NoTitles.Yes } @Yield { prefix @Join { numbers @Num @StructNum } } else @Yield { numbers @Num rawnum } } } ########################################################################### # # # Page size, margins, and boxes. This code culminates in @OddPage x # # and @EvenPage x, which produce one odd or even page containing x. # # # ########################################################################### def @Width { @PageType @Case { Letter @Yield 612p Tabloid @Yield 792p Ledger @Yield 1224p Legal @Yield 612p Statement @Yield 396p Executive @Yield 540p A0 @Yield 2380p A1 @Yield 1684p A2 @Yield 1190p A3 @Yield 842p A4 @Yield 595p A5 @Yield 420p B4 @Yield 729p B5 @Yield 516p Folio @Yield 612p Quarto @Yield 610p 10x14 @Yield 720p Other @Yield @PageWidth } } def @Height { @PageType @Case { Letter @Yield 792p Tabloid @Yield 1224p Ledger @Yield 792p Legal @Yield 1008p Statement @Yield 612p Executive @Yield 720p A0 @Yield 3368p A1 @Yield 2380p A2 @Yield 1684p A3 @Yield 1190p A4 @Yield 842p A5 @Yield 595p B4 @Yield 1032p B5 @Yield 729p Folio @Yield 936p Quarto @Yield 780p 10x14 @Yield 1008p Other @Yield @PageHeight } } def @OrientedWidth right @Orient { @Orient @Case { { Portrait ReversePortrait } @Yield @Width { Landscape ReverseLandscape } @Yield @Height } } def @OrientedHeight right @Orient { @Orient @Case { { Portrait ReversePortrait } @Yield @Height { Landscape ReverseLandscape } @Yield @Width } } def @OrientationAngle right @Orient { @Orient @Case { Portrait @Yield 0d Landscape @Yield 90d ReversePortrait @Yield 180d ReverseLandscape @Yield 270d } } def @PageBox right x { @PageBoxType @Case { None @Yield x Box @Yield @Box margin { @PageBoxMargin } paint { @PageBoxPaint } linewidth { @PageBoxLineWidth } x CurveBox @Yield @CurveBox margin { @PageBoxMargin } paint { @PageBoxPaint } linewidth { @PageBoxLineWidth } x ShadowBox @Yield @ShadowBox margin { @PageBoxMargin } paint { @PageBoxPaint } linewidth { @PageBoxLineWidth } shadow { @PageBoxShadow } x } } def @PageSet right x { # "LoutPageSet" @Graphic # VT: case PDF produces nothing { @BackEnd @Case { PostScript @Yield "LoutPageSet" else @Yield "% @DoBackground/LoutPageSet UNIMPLEMENTED" } } @Graphic x } def @MargSet left parity right x { # { parity "LoutMargSet" } @Graphic x # VT: case PDF produces nothing { @BackEnd @Case { PostScript @Yield { parity "LoutMargSet" } else @Yield "% @MargSet/LoutMargSet UNIMPLEMENTED" } } @Graphic x } def @OddPage left extra named @Orient {} right x { @PageSet { @OrientationAngle @Orient } @Rotate { @OrientedWidth @Orient } @Wide { @OrientedHeight @Orient } @High { //@TopMargin ||@OddLeftMargin { // || @PageBackground } @Background # 1 @MargSet @PageEnclose @PageBox @HExpand { extra // @VExpand x } ||@OddRightMargin //@FootMargin } } def @EvenPage left extra named @Orient {} right x { @PageSet { @OrientationAngle @Orient } @Rotate { @OrientedWidth @Orient } @Wide { @OrientedHeight @Orient } @High { //@TopMargin ||@EvenLeftMargin { // || @PageBackground } @Background # 0 @MargSet @PageEnclose @PageBox @HExpand { extra // @VExpand x } ||@EvenRightMargin //@FootMargin } } ########################################################################### # # # Definitions for page headers and footers. There are 16 symbols here, # # in the following arrangement: # # # # @(- | Running)(- | Intro)(Odd | Even)(Top | Foot)Header # # # # Running means that running headers are to be used. # # Intro means that the header is destined for an introductory page. # # Odd or Even means whether the page number will be odd or even. # # Top or Foot means whether the header is for the top or foot of page. # # # ########################################################################### export @Start @MajorNum @MajorTitle @MinorNum @MinorTitle @Owner @Prefix def @Runner left @Start named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} named @Owner {} named @Prefix {} named @Tag {} { @Null # red @Colour "(@Runner:"@Start":"@MajorTitle":"@MinorTitle")" } def @DupRunner # duplicate previous runner { @Runner&&preceding @Open { NonStart @Runner @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } @Owner { @Owner } @Prefix { @Prefix } } } def @OddTopHeader left @PageHeadersAndStart right @PageNum { @PageHeadersAndStart @Case { None.Start @Yield @Null None.NonStart @Yield @Null None.None @Yield @Null Simple.Start @Yield @StartOddTop @PageNum Simple.NonStart @Yield @OddTop @PageNum Simple.None @Yield @Null } } def @OddFootHeader left @PageHeadersAndStart right @PageNum { @PageHeadersAndStart @Case { None.Start @Yield @Null None.NonStart @Yield @Null None.None @Yield @Null Simple.Start @Yield @StartOddFoot @PageNum Simple.NonStart @Yield @OddFoot @PageNum Simple.None @Yield @Null } } def @EvenTopHeader left @PageHeadersAndStart right @PageNum { @PageHeadersAndStart @Case { None.Start @Yield @Null None.NonStart @Yield @Null None.None @Yield @Null Simple.Start @Yield @StartEvenTop @PageNum Simple.NonStart @Yield @EvenTop @PageNum Simple.None @Yield @Null } } def @EvenFootHeader left @PageHeadersAndStart right @PageNum { @PageHeadersAndStart @Case { None.Start @Yield @Null None.NonStart @Yield @Null None.None @Yield @Null Simple.Start @Yield @StartEvenFoot @PageNum Simple.NonStart @Yield @EvenFoot @PageNum Simple.None @Yield @Null } } def @IntroOddTopHeader left @PageHeadersAndStart right @PageNum { @PageHeadersAndStart @Case { None.Start @Yield @Null None.NonStart @Yield @Null None.None @Yield @Null Simple.Start @Yield @IntroStartOddTop @PageNum Simple.NonStart @Yield @IntroOddTop @PageNum Simple.None @Yield @Null } } def @IntroOddFootHeader left @PageHeadersAndStart right @PageNum { @PageHeadersAndStart @Case { None.Start @Yield @Null None.NonStart @Yield @Null None.None @Yield @Null Simple.Start @Yield @IntroStartOddFoot @PageNum Simple.NonStart @Yield @IntroOddFoot @PageNum Simple.None @Yield @Null } } def @IntroEvenTopHeader left @PageHeadersAndStart right @PageNum { @PageHeadersAndStart @Case { None.Start @Yield @Null None.NonStart @Yield @Null None.None @Yield @Null Simple.Start @Yield @IntroStartEvenTop @PageNum Simple.NonStart @Yield @IntroEvenTop @PageNum Simple.None @Yield @Null } } def @IntroEvenFootHeader left @PageHeadersAndStart right @PageNum { @PageHeadersAndStart @Case { None.Start @Yield @Null None.NonStart @Yield @Null None.None @Yield @Null Simple.Start @Yield @IntroStartEvenFoot @PageNum Simple.NonStart @Yield @IntroEvenFoot @PageNum Simple.None @Yield @Null } } def @RunningOddTopHeader left @PageHeadersAndStart named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @PageHeadersAndStart @Case { NoTitles.?? @Yield ?? NoTitles.Start @Yield @RunningStartOddTop @PageNum NoTitles.NonStart @Yield @RunningOddTop @PageNum NoTitles.None @Yield @Null Titles.?? @Yield ?? Titles.Start @Yield @RunningStartOddTop @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } @PageNum Titles.NonStart @Yield @RunningOddTop @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } @PageNum Titles.None @Yield @Null } } def @RunningOddFootHeader left @PageHeadersAndStart named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @PageHeadersAndStart @Case { NoTitles.?? @Yield @Null NoTitles.Start @Yield @RunningStartOddFoot @PageNum NoTitles.NonStart @Yield @RunningOddFoot @PageNum NoTitles.None @Yield @Null Titles.?? @Yield @Null Titles.Start @Yield @RunningStartOddFoot @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } @PageNum Titles.NonStart @Yield @RunningOddFoot @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } @PageNum Titles.None @Yield @Null } } def @RunningEvenTopHeader left @PageHeadersAndStart named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @PageHeadersAndStart @Case { NoTitles.?? @Yield ?? NoTitles.Start @Yield @RunningStartEvenTop @PageNum NoTitles.NonStart @Yield @RunningEvenTop @PageNum NoTitles.None @Yield @Null Titles.?? @Yield ?? Titles.Start @Yield @RunningStartEvenTop @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } @PageNum Titles.NonStart @Yield @RunningEvenTop @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } @PageNum Titles.None @Yield @Null } } def @RunningEvenFootHeader left @PageHeadersAndStart named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @PageHeadersAndStart @Case { NoTitles.?? @Yield @Null NoTitles.Start @Yield @RunningStartEvenFoot @PageNum NoTitles.NonStart @Yield @RunningEvenFoot @PageNum NoTitles.None @Yield @Null Titles.?? @Yield @Null Titles.Start @Yield @RunningStartEvenFoot @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } @PageNum Titles.NonStart @Yield @RunningEvenFoot @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } @PageNum Titles.None @Yield @Null } } def @RunningIntroOddTopHeader left @PageHeadersAndStart named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @PageHeadersAndStart @Case { NoTitles.?? @Yield ?? NoTitles.Start @Yield @RunningIntroStartOddTop @PageNum NoTitles.NonStart @Yield @RunningIntroOddTop @PageNum NoTitles.None @Yield @Null Titles.?? @Yield ?? Titles.Start @Yield @RunningIntroStartOddTop @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } @PageNum Titles.NonStart @Yield @RunningIntroOddTop @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } @PageNum Titles.None @Yield @Null } } def @RunningIntroOddFootHeader left @PageHeadersAndStart named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @PageHeadersAndStart @Case { NoTitles.?? @Yield @Null NoTitles.Start @Yield @RunningIntroStartOddFoot @PageNum NoTitles.NonStart @Yield @RunningIntroOddFoot @PageNum NoTitles.None @Yield @Null Titles.?? @Yield @Null Titles.Start @Yield @RunningIntroStartOddFoot @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } @PageNum Titles.NonStart @Yield @RunningIntroOddFoot @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } @PageNum Titles.None @Yield @Null } } def @RunningIntroEvenTopHeader left @PageHeadersAndStart named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @PageHeadersAndStart @Case { NoTitles.?? @Yield ?? NoTitles.Start @Yield @RunningIntroStartEvenTop @PageNum NoTitles.NonStart @Yield @RunningIntroEvenTop @PageNum NoTitles.None @Yield @Null Titles.?? @Yield ?? Titles.Start @Yield @RunningIntroStartEvenTop @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } @PageNum Titles.NonStart @Yield @RunningIntroEvenTop @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } @PageNum Titles.None @Yield @Null } } def @RunningIntroEvenFootHeader left @PageHeadersAndStart named @MajorNum {} named @MajorTitle {} named @MinorNum {} named @MinorTitle {} right @PageNum { @PageHeadersAndStart @Case { NoTitles.?? @Yield @Null NoTitles.Start @Yield @RunningIntroStartEvenFoot @PageNum NoTitles.NonStart @Yield @RunningIntroEvenFoot @PageNum NoTitles.None @Yield @Null Titles.?? @Yield @Null Titles.Start @Yield @RunningIntroStartEvenFoot @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } @PageNum Titles.NonStart @Yield @RunningIntroEvenFoot @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } @PageNum Titles.None @Yield @Null } } ########################################################################### # # # Helper definitions for laying out pages. # # # ########################################################################### def @PageTopPlace { @Galley } def @PageFootAndTopPlace { @Galley } def @PageFootNotePlace { @Galley } def @FullPlace { @Galley } def @OddFullPlace { @Galley } def @EvenFullPlace { @Galley } def @FullPagePlace { @Galley } def @EvenFullPagePlace { @Galley } def @EvenPagePlace { @Galley } def @OddFullPagePlace { @Galley } def @ColTopPlace { @Galley } def @ColFootAndTopPlace { @Galley } def @ColPlace { @Galley } def @ColFootNotePlace { @Galley } def @IntroFullPlace { @Galley } def @IntroOddFullPlace { @Galley } def @IntroEvenFullPlace { @Galley } def @IntroColPlace { @Galley } def @GlossaryPlace { @Galley } def @IndexPlace { @Galley } def @IndexAPlace { @Galley } def @IndexBPlace { @Galley } def @ColophonPlace { @Galley } def @AfterLinePlace { @ForceGalley } def @TryAfterLinePlace right x { x @Case { noforce @Yield @Galley force @Yield @ForceGalley } } def @EvenFullPageSection { @OneRow @EvenFullPagePlace // @FullPagePlace //@MidGap @EvenFullPageSection } def @OddFullPageSection { @OneRow @OddFullPagePlace // @FullPagePlace //@MidGap @OddFullPageSection } def @EvenPageTopSect { @OneRow @EvenPagePlace // @PageTopPlace //@MidGap @PageFootAndTopPlace //@MidGap @EvenPageTopSect } def @OddPageTopSect { @PageTopPlace //@MidGap @PageFootAndTopPlace //@MidGap @OddPageTopSect } def @PageOddTopSection right @Orient { @OddPageTopSect ||{@OrientedWidth @Orient} @FullPlace ||{@OrientedWidth @Orient} @OddFullPlace } def @PageEvenTopSection right @Orient { @EvenPageTopSect ||{@OrientedWidth @Orient} @FullPlace ||{@OrientedWidth @Orient} @EvenFullPlace } def @PageIntroOddTopSection right @Orient { @OddPageTopSect ||{@OrientedWidth @Orient} @IntroFullPlace ||{@OrientedWidth @Orient} @IntroOddFullPlace } def @PageIntroEvenTopSection right @Orient { @EvenPageTopSect ||{@OrientedWidth @Orient} @IntroFullPlace ||{@OrientedWidth @Orient} @IntroEvenFullPlace } def @PageFootNoteList { @PageFootNotePlace //@FootGap @PageFootNoteList } def @PageFootNoteSection { @FootLen @Wide @HLine //@FootGap @PageFootNoteList } def @PageFootAndTopSect { @PageFootAndTopPlace //@MidGap @PageFootAndTopSect } def @PageFootSection { //@MidGap @PageFootAndTopSect //@FootAboveGap @PageFootNoteSection } def @ColTopSection { @ColTopPlace //@MidGap @ColFootAndTopPlace //@MidGap @TryAfterLinePlace noforce //@MidGap @ColTopSection } def @RestOfColSection { @AfterLinePlace //@MidGap @TryAfterLinePlace force //@MidGap @ColPlace @NotRevealed //@MidGap @RestOfColSection } def @IntroRestOfColSection { @AfterLinePlace //@MidGap @TryAfterLinePlace force //@MidGap @IntroColPlace @NotRevealed //@MidGap @IntroRestOfColSection } def @ColFootAndTopList { @ColFootAndTopPlace //@TopGap @ColFootAndTopList } def @ColFootNoteList { @ColFootNotePlace //@FootGap @ColFootNoteList } def @ColFootNoteSection { @FootLen @Wide @HLine //@FootGap @ColFootNoteList } def @ColFootSection { //@TopGap @ColFootAndTopList //@FootAboveGap @ColFootNoteSection } def @ColsOf left num named gap { @ColumnGap } right x { def @Two { x ||gap x } def @Four { @Two ||gap @Two } def @Eight { @Four ||gap @Four } num @Case { 1 @Yield { x } 2 @Yield { @Two } 3 @Yield { @Two ||gap x } 4 @Yield { @Four } 5 @Yield { @Four ||gap x } 6 @Yield { @Four ||gap @Two } 7 @Yield { @Four ||gap @Two ||gap x } 8 @Yield { @Four ||gap @Four } 9 @Yield { @Four ||gap @Four ||gap x } 10 @Yield { @Four ||gap @Four ||gap @Two } } } def @EqualWidth right x { 500c @Wide x } # believe it or not def @ColList right num { @HExpand num @ColsOf @EqualWidth @VExpand { @ColTopSection //@TopGap @ColPlace //@MidGap @RestOfColSection // //1rt @OneRow { @ColFootSection } } } def @IntroColList right num { @HExpand num @ColsOf @EqualWidth @VExpand { @ColTopSection //@TopGap @IntroColPlace //@MidGap @IntroRestOfColSection // //1rt @OneRow { @ColFootSection } } } def @ZeroColList right num { @HExpand num @ColsOf @EqualWidth 0c @High @ColPlace } def @ZeroIntroColList right num { @HExpand num @ColsOf @EqualWidth 0c @High @IntroColPlace } def @GlossaryColList right num { @HExpand num @ColsOf gap { @GlossaryColumnGap } @EqualWidth @VExpand @GlossaryPlace } def @IndexColList right num { @HExpand num @ColsOf gap { @IndexColumnGap } @EqualWidth @VExpand @IndexPlace } def @IndexAColList right num { @HExpand num @ColsOf gap { @IndexAColumnGap } @EqualWidth @VExpand @IndexAPlace } def @IndexBColList right num { @HExpand num @ColsOf gap { @IndexBColumnGap } @EqualWidth @VExpand @IndexBPlace } def @ColophonColList right num { @HExpand num @ColsOf gap { @ColophonColumnGap } @EqualWidth @VExpand @ColophonPlace } ########################################################################### # # # Footnotes. # # # ########################################################################### export @Tag count def @FootNoteCounterMarker named @Tag {} named count {} { @Null } def @FootNoteNum right tag { @FootNoteCounterMarker&&tag @Open { @Next count } } def @FootNoteCounterIncrement right tag { @FootNoteCounterMarker&&preceding @Tagged tag // @FootNoteCounterMarker count { @FootNoteNum tag } // @NumberMarker @Tag { tag } @Value { @FootNoteNumbers @Num @FootNoteNum tag } } def @BeginFootNoteCounter { @FootNoteCounterMarker count { 0 } } def @FootNote named @Tag {} named @Location { @FootNoteLocation } named @Another { No } named @Label { Numbered } right x { def @FootLabelFmt right x { @FootNoteFont @Font @FootNoteBreak @Break +0.3v @VShift { Base 0.8f } @Font x } def @FootExtra { @BackEnd @Case { PlainText @Yield "," else @Yield @FootLabelFmt "," } } def @FootLabel { @Label @Case { "Numbered" @Yield { @BackEnd @Case { PlainText @Yield { ({@NumberOf @Tag}) } else @Yield @FootLabelFmt @NumberOf @Tag } } else @Yield { @BackEnd @Case { PlainText @Yield @Label else @Yield @FootLabelFmt @Label } } } } def @LongFootLabel { @Another @Case { No @Yield { @FootLabel } Yes @Yield { @FootExtra &0iu @FootLabel } } } def @FootVal { @FootNoteFont @Font @FootNoteBreak @Break @Label @Case { "Numbered" @Yield { { @FootNoteCounterIncrement @Tag & @FootLabel } @FootNoteFormat x } else @Yield { @FootLabel @FootNoteFormat x } } } def @PageFootNote into { @PageFootNotePlace&&following } { @FootVal } def @ColFootNote into { @ColFootNotePlace&&following } { @FootVal } @Location @Case { ColFoot @Yield { @Null &0iu @LongFootLabel & @ColFootNote } PageFoot @Yield { @Null &0iu @LongFootLabel & @PageFootNote } } } macro @AnotherFootNote { @FootNote @Another { Yes } } ########################################################################### # # # Definitions for page lists. There are four symbols here, in the # # following arrangement: # # # # @(Simple | Running)(- | Intro)PageList # # # # Running means that the page list is to support running headers. # # Intro means that the page list is an introductory page list. # # These are then packaged into @PageList and @IntroPageList. # # # ########################################################################### def @SStart right @PageNum { @PageNum @Case { { 1 0 } @Yield Start else @Yield NonStart } } def @ChooseColList right colnum { @OneOf { @ColList colnum @GlossaryColList @GlossaryColumnNumber @IndexAColList @IndexAColumnNumber @IndexBColList @IndexBColumnNumber @IndexColList @IndexColumnNumber @ColophonColList @ColophonColumnNumber } } def @ChooseIntroColList right colnum { @OneOf { @IntroColList colnum @GlossaryColList @GlossaryColumnNumber @IndexAColList @IndexAColumnNumber @IndexBColList @IndexBColumnNumber @IndexColList @IndexColumnNumber @ColophonColList @ColophonColumnNumber } } def @OddBodyMargins right x { @OddLeftBodyMargin @Wide {} || 1 @MargSet x || @OddRightBodyMargin @Wide {} } def @EvenBodyMargins right x { @EvenLeftBodyMargin @Wide {} || 0 @MargSet x || @EvenRightBodyMargin @Wide {} } def @SimplePageList named @ColumnNumber {} named @PageHeaders {} named extra { No } named @Orient {} named @AtTop { @Null } right @PageNum { def @OrdinaryOddPage { {@PageHeaders.{@SStart @PageNum}} @OddTopHeader { @PageNumbers @Num @PageNum } //@MidGap @OddBodyMargins { @AtTop //@MidGap @PageOddTopSection @Orient //@MidGap @ChooseColList @ColumnNumber } //1rt @OneRow { // @OddBodyMargins @PageFootSection //@MidGap {@PageHeaders.{@SStart @PageNum}} @OddFootHeader { @PageNumbers @Num @PageNum } } } def @FullPageOddPage { {@PageHeaders.{@SStart @PageNum}} @OddTopHeader { @PageNumbers @Num @PageNum } //@MidGap @OddBodyMargins @OddFullPageSection //1rt @OneRow { //@MidGap {@PageHeaders.{@SStart @PageNum}} @OddFootHeader { @PageNumbers @Num @PageNum } } } def @SimpleEvenPageList named @ColumnNumber {} named @PageHeaders {} named extra { No } right @PageNum { def @OrdinaryEvenPage { @PageHeaders.NonStart @EvenTopHeader { @PageNumbers @Num @PageNum } //@MidGap @EvenBodyMargins { @PageEvenTopSection @Orient //@MidGap @ChooseColList @ColumnNumber } //1rt @OneRow { // @EvenBodyMargins @PageFootSection //@MidGap @PageHeaders.NonStart @EvenFootHeader { @PageNumbers @Num @PageNum } } } def @FullPageEvenPage { @PageHeaders.NonStart @EvenTopHeader { @PageNumbers @Num @PageNum } //@MidGap @EvenBodyMargins @EvenFullPageSection //1rt @OneRow { //@MidGap @PageHeaders.NonStart @EvenFootHeader { @PageNumbers @Num @PageNum } } } @PageMarker rawnum { @PageNum } num { @PageNumbers @Num @PageNum } // @FootNoteThrough @NoDo @BeginFootNoteCounter // {} @EvenPage @Orient { @Orient } { @OrdinaryEvenPage ||{@OrientedWidth @Orient} @FullPageEvenPage } // @SimplePageList @ColumnNumber { @ColumnNumber } @PageHeaders { @PageHeaders } @Orient { @Orient } @Next @PageNum } @PageMarker rawnum { @PageNum } num { @PageNumbers @Num @PageNum } // @FootNoteThrough @NoDo @BeginFootNoteCounter // { extra @Then @OddBodyMargins @ZeroColList @ColumnNumber } @OddPage @Orient { @Orient } { @OrdinaryOddPage ||{@OrientedWidth @Orient} @FullPageOddPage } // @SimpleEvenPageList @ColumnNumber { @ColumnNumber } @PageHeaders { @PageHeaders } @Next @PageNum } def @SimpleIntroPageList named @ColumnNumber {} named @PageHeaders {} named @Orient {} named extra { No } named @AtTop { @Null } right @PageNum { @PageMarker num { @IntroPageNumbers @Num @PageNum } rawnum { @PageNum } // @FootNoteThrough @NoDo @BeginFootNoteCounter // { extra @Then @OddBodyMargins @ZeroIntroColList @ColumnNumber } @OddPage @Orient { @Orient } { {@PageHeaders.{@SStart @PageNum}} @IntroOddTopHeader { @IntroPageNumbers @Num @PageNum } //@MidGap @OddBodyMargins { @AtTop //@MidGap @PageIntroOddTopSection @Orient //@MidGap @ChooseIntroColList @ColumnNumber } //1rt @OneRow { // @OddBodyMargins @PageFootSection //@MidGap {@PageHeaders.{@SStart @PageNum}} @IntroOddFootHeader { @IntroPageNumbers @Num @PageNum } } } // @PageMarker num { @IntroPageNumbers @Num @Next @PageNum } rawnum { @Next @PageNum } // @FootNoteThrough @NoDo @BeginFootNoteCounter // {} @EvenPage @Orient { @Orient } @Runner&&following @Open { @PageHeaders.NonStart @IntroEvenTopHeader { @IntroPageNumbers @Num @Next @PageNum } //@MidGap @EvenBodyMargins { @PageIntroEvenTopSection @Orient //@MidGap @ChooseIntroColList @ColumnNumber } //1rt @OneRow { // @EvenBodyMargins @PageFootSection //@MidGap @PageHeaders.NonStart @IntroEvenFootHeader { @IntroPageNumbers @Num @Next @PageNum } } } // @SimpleIntroPageList @ColumnNumber { @ColumnNumber } @PageHeaders { @PageHeaders } @Orient { @Orient } @Next @Next @PageNum } def @SimpleOddOrEvenIntroPageList named @ColumnNumber {} named @PageHeaders {} named @Orient {} named extra { No } named @AtTop { @Null } right @PageNum { def @SimpleEvenIntroPageList named @ColumnNumber {} named @PageHeaders {} named @Orient {} named extra { No } named @AtTop { @Null } right @PageNum { @PageMarker num { @IntroPageNumbers @Num @PageNum } rawnum { @PageNum } // @FootNoteThrough @NoDo @BeginFootNoteCounter // {} @EvenPage @Orient { @Orient } @Runner&&following @Open { @PageHeaders.NonStart @IntroEvenTopHeader { @IntroPageNumbers @Num @PageNum } //@MidGap @EvenBodyMargins { @PageIntroEvenTopSection @Orient //@MidGap @ChooseIntroColList @ColumnNumber } //1rt @OneRow { // @EvenBodyMargins @PageFootSection //@MidGap @PageHeaders.NonStart @IntroEvenFootHeader { @IntroPageNumbers @Num @PageNum } } } // @SimpleOddOrEvenIntroPageList @ColumnNumber { @ColumnNumber } @PageHeaders { @PageHeaders } @Orient { @Orient } @Next @PageNum } @PageMarker num { @IntroPageNumbers @Num @PageNum } rawnum { @PageNum } // @FootNoteThrough @NoDo @BeginFootNoteCounter // { extra @Then @OddBodyMargins @ZeroIntroColList @ColumnNumber } @OddPage @Orient { @Orient } { {@PageHeaders.{@SStart @PageNum}} @IntroOddTopHeader { @IntroPageNumbers @Num @PageNum } //@MidGap @OddBodyMargins { @AtTop //@MidGap @PageIntroOddTopSection @Orient //@MidGap @ChooseIntroColList @ColumnNumber } //1rt @OneRow { // @OddBodyMargins @PageFootSection //@MidGap {@PageHeaders.{@SStart @PageNum}} @IntroOddFootHeader { @IntroPageNumbers @Num @PageNum } } } // @SimpleEvenIntroPageList @ColumnNumber { @ColumnNumber } @PageHeaders { @PageHeaders } @Orient { @Orient } @Next @PageNum } def @RunningPageList named @ColumnNumber {} named @PageHeaders {} named extra { No } named @Orient {} named @AtTop { @Null } right @PageNum { def @OrdinaryOddPage { @Runner&&following @Open { @PageMarker num { @MakePageNum numbers { @PageNumbers } rawnum { @PageNum } prefix { @Prefix } owner { @Owner } } rawnum { @PageNum } // @PageHeaders.@Start @RunningOddTopHeader @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } { @MakePageNum numbers { @PageNumbers } rawnum { @PageNum } prefix { @Prefix } owner { @Owner } } //@MidGap @OddBodyMargins { @AtTop //@MidGap @PageOddTopSection @Orient //@MidGap @ChooseColList @ColumnNumber } //1rt @OneRow { // @OddBodyMargins @PageFootSection //@MidGap @PageHeaders.@Start @RunningOddFootHeader @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } { @MakePageNum numbers { @PageNumbers } rawnum { @PageNum } prefix { @Prefix } owner { @Owner } } } } } def @FullPageOddPage { @Runner&&following @Open { @PageMarker num { @MakePageNum numbers { @PageNumbers } rawnum { @PageNum } prefix { @Prefix } owner { @Owner } } rawnum { @PageNum } // @PageHeaders.@Start @RunningOddTopHeader @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } { @MakePageNum numbers { @PageNumbers } rawnum { @PageNum } prefix { @Prefix } owner { @Owner } } //@MidGap @OddBodyMargins { @AtTop //@MidGap @OddFullPageSection } //1rt @OneRow { //@MidGap @PageHeaders.@Start @RunningOddFootHeader @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } { @MakePageNum numbers { @PageNumbers } rawnum { @PageNum } prefix { @Prefix } owner { @Owner } } } } } def @RunningEvenPageList named @ColumnNumber {} named @PageHeaders {} right @PageNum { def @OrdinaryEvenPage { @Runner&&following @Open { @PageMarker num { @MakePageNum numbers { @PageNumbers } rawnum { @PageNum } prefix { @Prefix } owner { @Owner } } rawnum { @PageNum } // @PageHeaders.@Start @RunningEvenTopHeader @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } { @MakePageNum numbers { @PageNumbers } rawnum { @PageNum } prefix { @Prefix } owner { @Owner } } //@MidGap @EvenBodyMargins { @PageEvenTopSection @Orient //@MidGap @ChooseColList @ColumnNumber } //1rt @OneRow { // @EvenBodyMargins @PageFootSection //@MidGap @PageHeaders.@Start @RunningEvenFootHeader @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } { @MakePageNum numbers { @PageNumbers } rawnum { @PageNum } prefix { @Prefix } owner { @Owner } } } } } def @FullPageEvenPage { @Runner&&following @Open { @PageMarker num { @MakePageNum numbers { @PageNumbers } rawnum { @PageNum } prefix { @Prefix } owner { @Owner } } rawnum { @PageNum } // @PageHeaders.@Start @RunningEvenTopHeader @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } { @MakePageNum numbers { @PageNumbers } rawnum { @PageNum } prefix { @Prefix } owner { @Owner } } //@MidGap @EvenBodyMargins @EvenFullPageSection //1rt @OneRow { //@MidGap @PageHeaders.@Start @RunningEvenFootHeader @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } { @MakePageNum numbers { @PageNumbers } rawnum { @PageNum } prefix { @Prefix } owner { @Owner } } } } } @FootNoteThrough @NoDo @BeginFootNoteCounter // {} @EvenPage @Orient { @Orient } { @OrdinaryEvenPage ||{@OrientedWidth @Orient} @FullPageEvenPage } // @RunningPageList @ColumnNumber { @ColumnNumber } @PageHeaders { @PageHeaders } @Orient { @Orient } @Next @PageNum } @FootNoteThrough @NoDo @BeginFootNoteCounter // { extra @Then @OddBodyMargins @ZeroColList @ColumnNumber } @OddPage @Orient { @Orient } { @OrdinaryOddPage ||{@OrientedWidth @Orient} @FullPageOddPage } // @RunningEvenPageList @ColumnNumber { @ColumnNumber } @PageHeaders { @PageHeaders } @Next @PageNum } def @RunningIntroPageList named @ColumnNumber {} named @PageHeaders {} named @AtTop { @Null } named @Orient {} named extra { No } right @PageNum { @FootNoteThrough @NoDo @BeginFootNoteCounter // { extra @Then @OddBodyMargins @ZeroIntroColList @ColumnNumber } @OddPage @Orient { @Orient } @Runner&&following @Open { @PageMarker num { @MakePageNum numbers { @IntroPageNumbers } rawnum { @PageNum } prefix { @Prefix } owner { @Owner } } rawnum { @PageNum } // @PageHeaders.@Start @RunningIntroOddTopHeader @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } { @MakePageNum numbers { @IntroPageNumbers } rawnum { @PageNum } prefix { @Prefix } owner { @Owner } } //@MidGap @OddBodyMargins { @AtTop //@MidGap @PageIntroOddTopSection @Orient //@MidGap @IntroColList @ColumnNumber } //1rt @OneRow { // @OddBodyMargins @PageFootSection //@MidGap @PageHeaders.@Start @RunningIntroOddFootHeader @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } { @MakePageNum numbers { @IntroPageNumbers } rawnum { @PageNum } prefix { @Prefix } owner { @Owner } } } } // @FootNoteThrough @NoDo @BeginFootNoteCounter // {} @EvenPage @Orient { @Orient } @Runner&&following @Open { @PageMarker num { @MakePageNum numbers { @IntroPageNumbers } rawnum { @Next @PageNum } prefix { @Prefix } owner { @Owner } } rawnum { @Next @PageNum } // @PageHeaders.@Start @RunningIntroEvenTopHeader @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } { @MakePageNum numbers { @IntroPageNumbers } rawnum { @Next @PageNum } prefix { @Prefix } owner { @Owner } } //@MidGap @EvenBodyMargins { @PageIntroEvenTopSection @Orient //@MidGap @ChooseIntroColList @ColumnNumber } //1rt @OneRow { // @EvenBodyMargins @PageFootSection //@MidGap @PageHeaders.@Start @RunningIntroEvenFootHeader @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } { @MakePageNum numbers { @IntroPageNumbers } rawnum { @Next @PageNum } prefix { @Prefix } owner { @Owner } } } } // @RunningIntroPageList @PageHeaders { @PageHeaders } @ColumnNumber { @ColumnNumber } @Orient { @Orient } @Next @Next @PageNum } def @PageList named @ColumnNumber {} named @PageHeaders {} named extra { No } named @Orient {} named @AtTop { @Null } right @FirstPageNum { @PageHeaders @Case { { None Simple } @Yield @SimplePageList @ColumnNumber { @ColumnNumber } @PageHeaders { @PageHeaders } @Orient { @Orient } extra { extra } @AtTop { @AtTop } @FirstPageNum { Running Titles NoTitles } @Yield @RunningPageList @ColumnNumber { @ColumnNumber } @PageHeaders { @PageHeaders } @Orient { @Orient } extra { extra } @AtTop { @AtTop } @FirstPageNum } // @PageMark last.page } def @IntroPageList named @ColumnNumber {} named @PageHeaders {} named @Orient {} named extra { No } named @AtTop { @Null } right @FirstPageNum { @PageHeaders @Case { { None Simple } @Yield @SimpleIntroPageList @ColumnNumber { @ColumnNumber } @PageHeaders { @PageHeaders } @Orient { @Orient } extra { extra } @AtTop { @AtTop } @FirstPageNum { Running Titles NoTitles } @Yield @RunningIntroPageList @ColumnNumber { @ColumnNumber } @PageHeaders { @PageHeaders } @Orient { @Orient } extra { extra } @AtTop { @AtTop } @FirstPageNum } } def @ContinuousPageList named @Orient {} { {@OrientedWidth @Orient} @Wide { //@TopMargin ||@EvenLeftMargin { @BeginFootNoteCounter // @ColPlace //@FootAboveGap @ColFootNoteSection //@FootAboveGap @PageFootNoteSection } ||@EvenRightMargin //@FootMargin } } ########################################################################### # # # Table of contents (including lists of figures and tables). # # # ########################################################################### def @ContentsItem named indent { 0f } named crosstag {} named number {} named title {} named pagenum {} named pregap { @ContentsGap } named postgap { 0c } named protect { No } { # def @Leaders { @ContentsLeader &@ContentsLeaderGap @Leaders } def @Leaders { @ContentsLeaderGap @Wide {} & @ContentsLeader & @Leaders } def @OptionalCrossLink right x { crosstag @Case { "" @Yield x else @Yield { crosstag @CrossLink x } } } def @RightPart { @ContentsRightWidth @Wide { &1rt { @OptionalCrossLink pagenum //0.5vx } } } # def @Item # { # |indent @OptionalCrossLink number @ContentsFormat @HExpand { # title & @ContentsLeaderGap @Wide &1rt @OneCol { # @Leaders & @RightPart &0io # } # } # |@ContentsRightWidth # } def @Item { |indent @OptionalCrossLink number @ContentsFormat @HExpand { title &1rt @OneCol { @Leaders & @RightPart &0io } } |@ContentsRightWidth } //pregap //0.5vx protect @Case { No @Yield @Item Yes @Yield @Protect @Item } //postgap } def @ContentsPlace { @Galley } def @FigureContentsPlace { @Galley } def @TableContentsPlace { @Galley } def @FloaterContentsPlace { @Galley } def @SendContents into { @ContentsPlace&&foll_or_prec } right x { x } def @SendFigureContents into { @FigureContentsPlace&&foll_or_prec } right x { x } def @SendTableContents into { @TableContentsPlace&&foll_or_prec } right x { x } def @SendFloaterContents into { @FloaterContentsPlace&&foll_or_prec } right x { x } def @ContentsEntry left wanted named indent { 0f } named crosstag {} named number {} named title {} named pagenum {} named pregap { @ContentsGap } named postgap { 0c } { @MakeContents.wanted @Case { Yes.Yes @Yield { @SendContents @ContentsItem indent { indent } crosstag { crosstag } number { number } title { title } pagenum { pagenum } pregap { pregap } postgap { postgap } } else @Yield @Null } } def @FigureContentsEntry left wanted named indent { 0f } named crosstag {} named number {} named title {} named pagenum {} named pregap { @ContentsGap } named postgap { 0c } { @MakeFigureContents.wanted @Case { Yes.Yes @Yield { @SendFigureContents @ContentsItem indent { indent } crosstag { crosstag } number { number } title { title } pagenum { pagenum } pregap { pregap } postgap { postgap } } else @Yield @Null } } def @TableContentsEntry left wanted named indent { 0f } named crosstag {} named number {} named title {} named pagenum {} named pregap { @ContentsGap } named postgap { 0c } { @MakeTableContents.wanted @Case { Yes.Yes @Yield { @SendTableContents @ContentsItem indent { indent } crosstag { crosstag } number { number } title { title } pagenum { pagenum } pregap { pregap } postgap { postgap } } else @Yield @Null } } def @FloaterContentsEntry left wanted named indent { 0f } named crosstag {} named number {} named title {} named pagenum {} named pregap { @ContentsGap } named postgap { 0c } { @MakeFloaterContents.wanted @Case { Yes.Yes @Yield { @SendFloaterContents @ContentsItem indent { indent } crosstag { crosstag } number { number } title { title } pagenum { pagenum } pregap { pregap } postgap { postgap } } else @Yield @Null } } def @MajorContentsEntry left wanted named indent { 0f } named crosstag {} named number {} named title {} named pagenum {} named pregap { @ContentsGapAbove } named postgap { @ContentsGapBelow } { @MakeContents.wanted @Case { Yes.Yes @Yield { @SendContents @ContentsItem indent { indent } crosstag { crosstag } number { @ContentsFont @Font number } title { @ContentsFont @Font title } pagenum { pagenum } pregap { pregap } postgap { postgap } protect { Yes } } else @Yield @Null } } def @VeryMajorContentsEntry left wanted named indent { 0.5rt } named title {} named pregap { @ContentsPartGapAbove } named postgap { @ContentsPartGapBelow } { def item { //pregap //0.5vx |indent @ContentsFont @Font @OneCol title | //0.5vx //postgap } @MakeContents.wanted @Case { Yes.Yes @Yield @SendContents item else @Yield @Null } } def @ContentsSection { def @ContentsList { @ContentsPlace // @ContentsList } @MakeContents @Case { { Yes Bypass } @Yield @ContentsList else @Yield @Null } } def @FigureContentsSection { def @FigureContentsList { @FigureContentsPlace // @FigureContentsList } @MakeFigureContents @Case { { Yes Bypass } @Yield @FigureContentsList else @Yield @Null } } def @TableContentsSection { def @TableContentsList { @TableContentsPlace // @TableContentsList } @MakeTableContents @Case { { Yes Bypass } @Yield @TableContentsList else @Yield @Null } } def @FloaterContentsSection { def @FloaterContentsList { @FloaterContentsPlace // @FloaterContentsList } @MakeFloaterContents @Case { { Yes Bypass } @Yield @FloaterContentsList else @Yield @Null } } ########################################################################### # # # Bypass table of contents. # # # ########################################################################### def @BypassContentsEntry into { @ContentsPlace&&preceding } named indent { 0f } named crosstag {} named number {} named title {} named pagenum {} { @MakeContents @Case { Bypass @Yield { @ContentsItem indent { indent } crosstag { crosstag } number { number } title { title } pagenum { pagenum } pregap { @ContentsGap } postgap { 0c } } else @Yield @Null } } def @BypassFigureContentsEntry into { @FigureContentsPlace&&preceding } named indent { 0f } named crosstag {} named number {} named title {} named pagenum {} { @MakeFigureContents @Case { Bypass @Yield { @ContentsItem indent { indent } crosstag { crosstag } number { number } title { title } pagenum { pagenum } pregap { @ContentsGap } postgap { 0c } } else @Yield @Null } } def @BypassTableContentsEntry into { @TableContentsPlace&&preceding } named indent { 0f } named crosstag {} named number {} named title {} named pagenum {} { @MakeTableContents @Case { Bypass @Yield { @ContentsItem indent { indent } crosstag { crosstag } number { number } title { title } pagenum { pagenum } pregap { @ContentsGap } postgap { 0c } } else @Yield @Null } } def @BypassFloaterContentsEntry into { @FloaterContentsPlace&&preceding } named indent { 0f } named crosstag {} named number {} named title {} named pagenum {} { @MakeFloaterContents @Case { Bypass @Yield { @ContentsItem indent { indent } crosstag { crosstag } number { number } title { title } pagenum { pagenum } pregap { @ContentsGap } postgap { 0c } } else @Yield @Null } } def @BypassMajorContentsEntry into { @ContentsPlace&&preceding } named indent { 0f } named crosstag {} named number {} named title {} named pagenum {} { @MakeContents @Case { Bypass @Yield { @ContentsItem indent { indent } crosstag { crosstag } number { @B number } title { @B title } pagenum { pagenum } pregap { @ContentsGapAbove } postgap { @ContentsGapBelow } } else @Yield @Null } } ########################################################################### # # # Endnotes. # # # ########################################################################### export num def @EndNoteList named @Tag {} right num { @Galley //@EndNoteGap @EndNoteList @Next num } def endtag right num { @BackEnd @Case { PlainText @Yield { ({@EndNoteNumbers @Num num}) } else @Yield { +0.3v @VShift 0.8f @Font @EndNoteNumbers @Num num } } } def @EndNote named @Tag {} right x { def ftag { @EndNoteFont @Font @EndNoteList&&@Tag @Open { endtag num } } def @ENote into { @EndNoteList&&following } { @EndNoteFont @Font @EndNoteBreak @Break { { @EndNoteList&&preceding @Tagged @Tag ftag } @EndNoteFormat x } } @Null & @EndNoteFont @Font ftag & @ENote } ########################################################################### # # # Margin Notes. # # # ########################################################################### def @ZeroSize right x { @HContract @VContract { ^/0io |0io @OneCol @OneRow x |0io /0io } } def @MargPut left parity right x { @MarginNoteFont @Font @MarginNoteBreak @Break @ZeroSize { @BackEnd @Case { PlainText @Yield "" PostScript @Yield { { parity "LoutMargShift gsave" // "grestore" } @Graphic { |@MarginNoteHGap @MarginNoteWidth @Wide @OneRow x |@MarginNoteHGap //@MarginNoteVGap } } PDF @Yield { "% @MargPut/LoutMargShift UNIMPLEMENTED" @Graphic { |@MarginNoteHGap @MarginNoteWidth @Wide @OneRow x |@MarginNoteHGap //@MarginNoteVGap } # VT: PDF currently has no output } } } } def @LeftNote right x { @Null & 0 @MargPut x } def @RightNote right x { @Null & 1 @MargPut x } def @OuterNote right x { @Null & 2 @MargPut x } def @InnerNote right x { @Null & 3 @MargPut x } ########################################################################### # # # @Place: places an object at an arbitrary point on the page. # # # ########################################################################### # # VT: the expressions in the braces will work for PostScript but not for PDF # they should be modified in the way the "named c { " cm" }" blocks were modified above # but since the point of @Place is to output a matrix (?), I have not implemented this change # def @Place import @PSLengths named x named "+" precedence 96 associativity left left a right b { a b "add" } named "-" precedence 96 associativity left left a right b { a b "sub" } named "/" precedence 97 associativity left left a right b { a b "div" } named "*" precedence 98 associativity left left a right b { a b "mul" } # named c precedence 99 left a { a "cm" } # named i precedence 99 left a { a "in" } # named e precedence 99 left a { a "em" } # named p precedence 99 left a { a "pt" } # named f precedence 99 left a { a "ft" } # named s precedence 99 left a { a "sp" } # named v precedence 99 left a { a "vs" } # named cm precedence 99 left a { a "cm" } # named in precedence 99 left a { a "in" } # named em precedence 99 left a { a "em" } # named pt precedence 99 left a { a "pt" } # named ft precedence 99 left a { a "ft" } # named sp precedence 99 left a { a "sp" } # named vs precedence 99 left a { a "vs" } { 0 } import @PSLengths named y named "+" precedence 96 associativity left left a right b { a b "add" } named "-" precedence 96 associativity left left a right b { a b "sub" } named "/" precedence 97 associativity left left a right b { a b "div" } named "*" precedence 98 associativity left left a right b { a b "mul" } # named c precedence 99 left a { a "cm" } # named i precedence 99 left a { a "in" } # named e precedence 99 left a { a "em" } # named p precedence 99 left a { a "pt" } # named f precedence 99 left a { a "ft" } # named s precedence 99 left a { a "sp" } # named v precedence 99 left a { a "vs" } # named cm precedence 99 left a { a "cm" } # named in precedence 99 left a { a "in" } # named em precedence 99 left a { a "em" } # named pt precedence 99 left a { a "pt" } # named ft precedence 99 left a { a "ft" } # named sp precedence 99 left a { a "sp" } # named vs precedence 99 left a { a "vs" } { 0 } right val { @ZeroSize { @BackEnd @Case { PlainText @Yield "" PostScript @Yield { { "LoutPageDict begin matr setmatrix" x y "translate end gsave" // "grestore" } @Graphic val } else @Yield { { "% @Place UNIMPLEMENTED" } @Graphic val # VT: PDF currently has no output } } } } ########################################################################### # # # @Theorem, @Proof, and @EndProof # # # ########################################################################### export @Tag val def @TheoremCounterMarker named @Tag {} named val {} { @Null } def @BeginTheoremCounter right prefix { @TheoremCounterMarker val { prefix @Join 0 } } def @TheoremNum right tag { @TheoremCounterMarker&&tag @Open { @Next val } } def @TheoremCounterIncrement right tag { @TheoremCounterMarker&&preceding @Tagged tag @TheoremCounterMarker val { @TheoremNum tag } @NumberMarker @Tag { tag } @Value { @TheoremNum tag } } def @Theorem named @Tag {} named @Title {} right x { def @TheoremTitle { @Title @Case { "" @Yield @Null else @Yield @TheoremTitleFormat @Title } } { @PageMark @Tag & @TheoremCounterIncrement @Tag } @Insert @TheoremFormat word { theorem @WordVal @TheoremWord } number { @TheoremNum @Tag } title { @TheoremTitle } body { x } } macro @Proof { @B { {proof @WordVal @ProofWord}: } &2s } macro @EndProof { &1rt @Box {} } ########################################################################### # # # @Definition # # # ########################################################################### export @Tag val def @DefinitionCounterMarker named @Tag {} named val {} { @Null } def @BeginDefinitionCounter right prefix { @DefinitionCounterMarker val { prefix @Join 0 } } def @DefinitionNum right tag { @DefinitionCounterMarker&&tag @Open { @Next val } } def @DefinitionCounterIncrement right tag { @DefinitionCounterMarker&&preceding @Tagged tag @DefinitionCounterMarker val { @DefinitionNum tag } @NumberMarker @Tag { tag } @Value { @DefinitionNum tag } } def @Definition named @Tag {} named @Title {} right x { def @DefinitionTitle { @Title @Case { "" @Yield @Null else @Yield (@Title) } } { @PageMark @Tag & @DefinitionCounterIncrement @Tag } @Insert @DefinitionFormat word { definition @WordVal @DefinitionWord } number { @DefinitionNum @Tag } title { @DefinitionTitle } body { x } } ########################################################################### # # # @Claim # # # ########################################################################### export @Tag val def @ClaimCounterMarker named @Tag {} named val {} { @Null } def @BeginClaimCounter right prefix { @ClaimCounterMarker val { prefix @Join 0 } } def @ClaimNum right tag { @ClaimCounterMarker&&tag @Open { @Next val } } def @ClaimCounterIncrement right tag { @ClaimCounterMarker&&preceding @Tagged tag @ClaimCounterMarker val { @ClaimNum tag } @NumberMarker @Tag { tag } @Value { @ClaimNum tag } } def @Claim named @Tag {} named @Title {} right x { def @ClaimTitle { @Title @Case { "" @Yield @Null else @Yield (@Title) } } { @PageMark @Tag & @ClaimCounterIncrement @Tag } @Insert @ClaimFormat word { claim @WordVal @ClaimWord } number { @ClaimNum @Tag } title { @ClaimTitle } body { x } } ########################################################################### # # # @Proposition # # # ########################################################################### export @Tag val def @PropositionCounterMarker named @Tag {} named val {} { @Null } def @BeginPropositionCounter right prefix { @PropositionCounterMarker val { prefix @Join 0 } } def @PropositionNum right tag { @PropositionCounterMarker&&tag @Open { @Next val } } def @PropositionCounterIncrement right tag { @PropositionCounterMarker&&preceding @Tagged tag @PropositionCounterMarker val { @PropositionNum tag } @NumberMarker @Tag { tag } @Value { @PropositionNum tag } } def @Proposition named @Tag {} named @Title {} right x { def @PropositionTitle { @Title @Case { "" @Yield @Null else @Yield (@Title) } } { @PageMark @Tag & @PropositionCounterIncrement @Tag } @Insert @PropositionFormat word { proposition @WordVal @PropositionWord } number { @PropositionNum @Tag } title { @PropositionTitle } body { x } } ########################################################################### # # # @Lemma # # # ########################################################################### export @Tag val def @LemmaCounterMarker named @Tag {} named val {} { @Null } def @BeginLemmaCounter right prefix { @LemmaCounterMarker val { prefix @Join 0 } } def @LemmaNum right tag { @LemmaCounterMarker&&tag @Open { @Next val } } def @LemmaCounterIncrement right tag { @LemmaCounterMarker&&preceding @Tagged tag @LemmaCounterMarker val { @LemmaNum tag } @NumberMarker @Tag { tag } @Value { @LemmaNum tag } } def @Lemma named @Tag {} named @Title {} right x { def @LemmaTitle { @Title @Case { "" @Yield @Null else @Yield (@Title) } } { @PageMark @Tag & @LemmaCounterIncrement @Tag } @Insert @LemmaFormat word { lemma @WordVal @LemmaWord } number { @LemmaNum @Tag } title { @LemmaTitle } body { x } } ########################################################################### # # # @Corollary # # # ########################################################################### export @Tag val def @CorollaryCounterMarker named @Tag {} named val {} { @Null } def @BeginCorollaryCounter right prefix { @CorollaryCounterMarker val { prefix @Join 0 } } def @CorollaryNum right tag { @CorollaryCounterMarker&&tag @Open { @Next val } } def @CorollaryCounterIncrement right tag { @CorollaryCounterMarker&&preceding @Tagged tag @CorollaryCounterMarker val { @CorollaryNum tag } @NumberMarker @Tag { tag } @Value { @CorollaryNum tag } } def @Corollary named @Tag {} named @Title {} right x { def @CorollaryTitle { @Title @Case { "" @Yield @Null else @Yield (@Title) } } { @PageMark @Tag & @CorollaryCounterIncrement @Tag } @Insert @CorollaryFormat word { corollary @WordVal @CorollaryWord } number { @CorollaryNum @Tag } title { @CorollaryTitle } body { x } } ########################################################################### # # # @Example # # # ########################################################################### export @Tag val def @ExampleCounterMarker named @Tag {} named val {} { @Null } def @BeginExampleCounter right prefix { @ExampleCounterMarker val { prefix @Join 0 } } def @ExampleNum right tag { @ExampleCounterMarker&&tag @Open { @Next val } } def @ExampleCounterIncrement right tag { @ExampleCounterMarker&&preceding @Tagged tag @ExampleCounterMarker val { @ExampleNum tag } @NumberMarker @Tag { tag } @Value { @ExampleNum tag } } def @Example named @Tag {} named @Title {} right x { def @ExampleTitle { @Title @Case { "" @Yield @Null else @Yield (@Title) } } { @PageMark @Tag & @ExampleCounterIncrement @Tag } @Insert @ExampleFormat word { example @WordVal @ExampleWord } number { @ExampleNum @Tag } title { @ExampleTitle } body { x } } ########################################################################### # # # @BeginAllCounters - begin all counters # # # ########################################################################### def @BeginAllCounters left condition right prefix { condition @Do { @BeginTheoremCounter prefix // @BeginDefinitionCounter prefix // @BeginClaimCounter prefix // @BeginPropositionCounter prefix // @BeginLemmaCounter prefix // @BeginCorollaryCounter prefix // @BeginExampleCounter prefix } } ########################################################################### # # # @Reference - a reference. # # # ########################################################################### export @Tag @Type @Abstract @Address @Annote @Author @Day @Edition @HowPublished @InAuthor @InTitle @Institution @Journal @Keywords @Label @Month @Note @Number @Organization @Page @Pages @Pinpoint @Publisher @Title @TitleNote @TRType @URL @Volume @Year def @Reference named compulsory @Tag {} named compulsory @Type {} named @Abstract {} named @Address {} named @Annote {} named @Author {} named @Day {} named @Edition {} named @HowPublished {} named @InAuthor {} named @InTitle {} named @Institution {} named @Journal {} named @Keywords {} named @Label {} named @Month {} named @Note {} named @Number {} named @Organization {} named @Page {} named @Pages {} named @Pinpoint {} named @Publisher {} named @Title {} named @TitleNote {} named @TRType {} named @URL named "~" { "~" } named "/" { "/" &0p } named "//" { "//" &0p } {} named @Volume {} named @Year {} { @Null } ########################################################################### # # # @CiteLabel - the value of the label of a reference within a citation. # # # ########################################################################### def @CiteLabel left label right tag { tag @CrossLink @RefCiteLabels @RefNum { @NumberOf tag } @Tag { tag } @Type { @Reference&&tag @Open { @Type } } @Abstract { @Reference&&tag @Open { @Abstract } } @Address { @Reference&&tag @Open { @Address } } @Annote { @Reference&&tag @Open { @Annote } } @Author { @Reference&&tag @Open { @Author } } @Day { @Reference&&tag @Open { @Day } } @Edition { @Reference&&tag @Open { @Edition } } @HowPublished { @Reference&&tag @Open { @HowPublished } } @InAuthor { @Reference&&tag @Open { @InAuthor } } @InTitle { @Reference&&tag @Open { @InTitle } } @Institution { @Reference&&tag @Open { @Institution } } @Journal { @Reference&&tag @Open { @Journal } } @Keywords { @Reference&&tag @Open { @Keywords } } @Label { label @Case { "" @Yield {@Reference&&tag @Open {@Label}} else @Yield label } } @Month { @Reference&&tag @Open { @Month } } @Note { @Reference&&tag @Open { @Note } } @Number { @Reference&&tag @Open { @Number } } @Organization { @Reference&&tag @Open { @Organization } } @Page { @Reference&&tag @Open { @Page } } @Pages { @Reference&&tag @Open { @Pages } } @Pinpoint { @Reference&&tag @Open { @Pinpoint } } @Publisher { @Reference&&tag @Open { @Publisher } } @Title { @Reference&&tag @Open { @Title } } @TitleNote { @Reference&&tag @Open { @TitleNote } } @TRType { @Reference&&tag @Open { @TRType } } @Volume { @Reference&&tag @Open { @Volume } } @Year { @Reference&&tag @Open { @Year } } } ########################################################################### # # # @ListLabel - the value of the label of a reference within a ref list. # # # ########################################################################### def @ListLabel left label right tag { @RefListLabels @RefNum { @NumberOf tag } @Tag { tag } @Type { @Reference&&tag @Open { @Type } } @Abstract { @Reference&&tag @Open { @Abstract } } @Address { @Reference&&tag @Open { @Address } } @Annote { @Reference&&tag @Open { @Annote } } @Author { @Reference&&tag @Open { @Author } } @Day { @Reference&&tag @Open { @Day } } @Edition { @Reference&&tag @Open { @Edition } } @HowPublished { @Reference&&tag @Open { @HowPublished } } @InAuthor { @Reference&&tag @Open { @InAuthor } } @InTitle { @Reference&&tag @Open { @InTitle } } @Institution { @Reference&&tag @Open { @Institution } } @Journal { @Reference&&tag @Open { @Journal } } @Keywords { @Reference&&tag @Open { @Keywords } } @Label { label @Case { "" @Yield {@Reference&&tag @Open {@Label}} else @Yield label } } @Month { @Reference&&tag @Open { @Month } } @Note { @Reference&&tag @Open { @Note } } @Number { @Reference&&tag @Open { @Number } } @Organization { @Reference&&tag @Open { @Organization } } @Page { @Reference&&tag @Open { @Page } } @Pages { @Reference&&tag @Open { @Pages } } @Pinpoint { @Reference&&tag @Open { @Pinpoint } } @Publisher { @Reference&&tag @Open { @Publisher } } @Title { @Reference&&tag @Open { @Title } } @TitleNote { @Reference&&tag @Open { @TitleNote } } @TRType { @Reference&&tag @Open { @TRType } } @Volume { @Reference&&tag @Open { @Volume } } @Year { @Reference&&tag @Open { @Year } } } ########################################################################### # # # @SortKey - the value of the sort key of a reference. # # # ########################################################################### def @SortKey left label right tag { @RefListSortKey @Tag { tag } @Type { @Reference&&tag @Open { @Type } } @Abstract { @Reference&&tag @Open { @Abstract } } @Address { @Reference&&tag @Open { @Address } } @Annote { @Reference&&tag @Open { @Annote } } @Author { @Reference&&tag @Open { @Author } } @CiteOrder { {@NumberOf tag} @Case { "??" @Yield "??" else @Yield { "1000" @Plus @NumberOf tag } } } @Day { @Reference&&tag @Open { @Day } } @Edition { @Reference&&tag @Open { @Edition } } @HowPublished { @Reference&&tag @Open { @HowPublished } } @InAuthor { @Reference&&tag @Open { @InAuthor } } @InTitle { @Reference&&tag @Open { @InTitle } } @Institution { @Reference&&tag @Open { @Institution } } @Journal { @Reference&&tag @Open { @Journal } } @Keywords { @Reference&&tag @Open { @Keywords } } @Label { label @Case { "" @Yield {@Reference&&tag @Open {@Label}} else @Yield label } } @Month { @Reference&&tag @Open { @Month } } @Note { @Reference&&tag @Open { @Note } } @Number { @Reference&&tag @Open { @Number } } @Organization { @Reference&&tag @Open { @Organization } } @Page { @Reference&&tag @Open { @Page } } @Pages { @Reference&&tag @Open { @Pages } } @Pinpoint { @Reference&&tag @Open { @Pinpoint } } @Publisher { @Reference&&tag @Open { @Publisher } } @Title { @Reference&&tag @Open { @Title } } @TitleNote { @Reference&&tag @Open { @TitleNote } } @TRType { @Reference&&tag @Open { @TRType } } @Volume { @Reference&&tag @Open { @Volume } } @Year { @Reference&&tag @Open { @Year } } } ########################################################################### # # # @RefStyle - a reference printing style. # # # ########################################################################### export @Style def @RefStyle left @Tag named @Style right reftag {} {} ########################################################################### # # # @RefPrint - prints reference with tag reftag in appropriate style. # # # ########################################################################### def @RefPrint right reftag { & @RefStyle&&{ @Reference&&reftag @Open { @Type } } @Open { @Style reftag } & } ########################################################################### # # # @ReferencesSection and @ChapReferencesSection - a list of references. # # # ########################################################################### def @RefPlace { @Galley } def @ChapRefPlace { @Galley } def @BypassRefPlace { @Galley } def @BypassChapRefPlace { @Galley } def @ReferencesSection { def @RefList right num { @NumberMarker @Value { @RefNumbers @Num num } & | @RefPlace //@RefListGap @RefList @Next num } def @BypassRefList { @BypassRefPlace //@RefListGap @BypassRefList } @RefList 1 //@RefListGap @BypassRefList } def @ChapReferencesSection { def @ChapRefList right num { @NumberMarker @Value { @RefNumbers @Num num } & | @ChapRefPlace //@RefListGap @ChapRefList @Next num } def @BypassChapRefList { @BypassChapRefPlace //@RefListGap @BypassChapRefList } @ChapRefList 1 //@RefListGap @BypassChapRefList } ########################################################################### # # # @RefHeading - heading for reference lists. # # # ########################################################################### def @RefHeading right x { x @Case { references @Yield @Word&&references bibliography @Yield @Word&&bibliography else @Yield x } } ####################################################################### # # # @ChapRefSection # # # ####################################################################### def @ChapRefSection { @Heading @RefHeading @ChapRefListTitle @DP @ChapReferencesSection } ########################################################################### # # # @SendRef and @ChapSendRef - send one reference to the reference list. # # # ########################################################################### def @RefItem left lab right ref { def @ZeroWidth right x { &0io @OneCol x &0io } @RefListFormat @Case { NoLabels @Yield { ref } Labels @Yield { @ZeroWidth lab |@RefListLabelWidth ref } DropLabels @Yield { lab //1vx |@RefListLabelWidth ref } InLabels @Yield { lab & 2s @Wide & ref } } } def @RefListItem left label right tag { @RefListFont @Font @RefListBreak @Break { @NumberMarker&&preceding @Tagged tag & @PageMark tag |@RefListIndent {label @ListLabel tag} @RefItem {@RefPrint tag} |@RefListRightIndent } } def @SendRef into { @RefPlace&&foll_or_prec } left label right tag { def @Key { label @SortKey tag } # no @Merge i.e. omit duplicates label @RefListItem tag } def @ChapSendRef into { @ChapRefPlace&&foll_or_prec } left label right tag { def @Key { label @SortKey tag } # no @Merge i.e. omit duplicates label @RefListItem tag } ########################################################################### # # # @Ref (bare citation) and its variants. # # # ########################################################################### def @Ref named label {} right tag { @MakeReferences @Case { Yes @Yield { label @CiteLabel tag & label @SendRef tag } else @Yield @Null } } def @NoRef named label {} right tag { @MakeReferences @Case { Yes @Yield { label @SendRef tag } else @Yield @Null } } def @ChapRef named label {} right tag { @MakeReferences @Case { Yes @Yield { label @CiteLabel tag & label @ChapSendRef tag } else @Yield @Null } } def @NoChapRef named label {} right tag { @MakeReferences @Case { Yes @Yield { label @ChapSendRef tag } else @Yield @Null } } ########################################################################### # # # Bypass references. # # # ########################################################################### def @BypassReference into { @BypassRefPlace&&preceding } named label {} named value {} { @MakeReferences @Case { Bypass @Yield { label @RefItem value } else @Yield @Null } } def @BypassChapReference into { @BypassChapRefPlace&&preceding } named label {} named value {} { @MakeReferences @Case { Bypass @Yield { label @RefItem value } else @Yield @Null } } ########################################################################### # # # @Cite (citation) and its variants. # # # ########################################################################### export "$" "," ";" def @Cite body cite { macro "$" { @Ref } def "," precedence 90 left x { x"," } def ";" precedence 90 left x { x";" } @MakeReferences @Case { Yes @Yield { @RefCiteStyle cite } else @Yield @Null } } export "$" "," ";" def @NoCite body cite { macro "$" { @NoRef } def "," precedence 90 left x { x"," } def ";" precedence 90 left x { x";" } @MakeReferences @Case { Yes @Yield { cite } else @Yield @Null } } export "$" "," ";" def @ChapCite body cite { macro "$" { @ChapRef } def "," precedence 90 left x { x"," } def ";" precedence 90 left x { x";" } @MakeReferences @Case { Yes @Yield { @RefCiteStyle cite } else @Yield @Null } } export "$" "," ";" def @NoChapCite body cite { macro "$" { @NoChapRef } def "," precedence 90 left x { x } def ";" precedence 90 left x { x";" } @MakeReferences @Case { Yes @Yield { cite } else @Yield @Null } } ########################################################################### # # # Floating figures. # # # ########################################################################### export @Tag prefix def @FigurePrefixMarker named @Tag {} named prefix {} { @Null } export @Tag count def @FigureCounterMarker named @Tag {} named count {} { @Null } def @RawFigureNum right tag { @FigureCounterMarker&&tag @Open { @Next count } } def @FigureCounterIncrement right tag { @FigureCounterMarker&&preceding @Tagged tag // @FigurePrefixMarker&&preceding @Tagged tag // @FigureCounterMarker count { @RawFigureNum tag } // @NumberMarker @Tag { tag } @Value { { @FigurePrefixMarker&&tag @Open { prefix } } @Join {@FigureNumbers @Num @RawFigureNum tag} } } def @BeginFigureCounter left condition right prefix { condition @Do { @FigurePrefixMarker prefix { prefix } // @FigureCounterMarker count { 0 } } } def @EndFigureList { @Galley //@MidGap @EndFigureList } def @Figure named @Tag {} named @Caption { dft } named @ShortCaption { dft } named @CaptionPos { @FigureCaptionPos } named @Format named @II right x { |@DisplayIndent x | } named @QQ right x { |@DisplayIndent x |@DisplayIndent } named @CC right x { |0.5rt x | } named @RR right x { |1.0rt x | } right @Body { @FigureFormat @Body } named @InitialLanguage { @InitialLanguage } named @BypassNumber { dft } named @OnePage { dft } named @Location { @FigureLocation } right @Body { def @FigureNumber { @BypassNumber @Dft @NumberOf @Tag } def @ContentsCaption { @ShortCaption @Dft @Caption } def @OnePg { @OnePage @Case { { No no } @Yield No { Yes yes } @Yield Yes dft @Yield { @Location @Case { PageTop @Yield No EvenPageTop @Yield No FullPage @Yield No EvenFullPage @Yield No PageFoot @Yield Yes ColTop @Yield No ColFoot @Yield Yes ColEnd @Yield No Display @Yield Yes AfterLine @Yield Yes TryAfterLine @Yield Yes Raw @Yield No } } } } def @CaptionState { @Caption @Case { dft @Yield None else @Yield { @CaptionPos @Case { { Below below } @Yield Below { Above above } @Yield Above } } } } #def @FigureLabel #{ # @FigureNumbers @Case { # No @Yield @Null # else @Yield { # @CaptionFormat { {figure @WordVal @FigureWord} @NumSep @FigureNumber } # } # } #} def @CaptionVal { @FigureCaptionFont @Font @FigureCaptionBreak @Break { ||0.5rt @FigureCaptionFormat word { figure @WordVal @FigureWord } number { @FigureNumber } caption { @Caption } } } def @FigureVal { @InitialLanguage @Language { @MakeFigureContents @FigureContentsEntry indent { 0f } crosstag { @Tag } number { @FigureNumber } title { @InitialLanguage @Language @ContentsCaption } pagenum { @PageOf @Tag } // @FigureCounterIncrement @Tag // @Body // @PageMark @Tag } } def @FigureTarget { @Location @Case { PageTop @Yield @PageTopPlace&&following EvenPageTop @Yield @PageTopPlace&&following FullPage @Yield @FullPagePlace&&following EvenFullPage @Yield @FullPagePlace&&following PageFoot @Yield @PageFootAndTopPlace&&following ColTop @Yield @ColTopPlace&&following ColFoot @Yield @ColFootAndTopPlace&&following ColEnd @Yield @EndFigureList&&following Display @Yield @AfterLinePlace&&following AfterLine @Yield @AfterLinePlace&&following TryAfterLine @Yield @TryAfterLinePlace&&following } } def @SendEncl into { @FigureTarget } right x { def @Enclose right x { @OnePg @Case { No @Yield @Format x Yes @Yield x } } x } def @Send into { @FigureTarget } right x { x } def @EvenFullPageSend into { @EvenFullPagePlace&&following } right x { @OneRow x } def @EvenPageSend into { @EvenPagePlace&&following } right x { @OneRow x } def @RawFigureVal { @OnePg.@CaptionState @Case { Yes.Below @Yield @OneRow { @Format @FigureVal @DP @CaptionVal } Yes.Above @Yield @OneRow { @CaptionVal @DP @Format @FigureVal } Yes.None @Yield @OneRow { @Format @FigureVal } No.Below @Yield { @Format @FigureVal @DP @CaptionVal } No.Above @Yield { @CaptionVal @DP @Format @FigureVal } No.None @Yield { @Format @FigureVal } } } def @NonRawFigureVal { @OnePg.@CaptionState @Case { Yes.Below @Yield { @Send @OneRow { @Format @FigureVal @DP @CaptionVal // @DupRunner} } Yes.Above @Yield { @Send @OneRow { @CaptionVal @DP @Format @FigureVal // @DupRunner} } Yes.None @Yield { @Send @OneRow { @Format @FigureVal // @DupRunner } } No.Below @Yield { @SendEncl { @FigureVal // @Send { @CaptionVal // @DupRunner } } } No.Above @Yield { @Send { @CaptionVal // @SendEncl { @FigureVal // @DupRunner } } } No.None @Yield { @SendEncl { @FigureVal // @DupRunner } } } } @Location @Case { Raw @Yield @RawFigureVal Display @Yield { @NonRawFigureVal &1rt } EvenPageTop @Yield @EvenPageSend @NonRawFigureVal EvenFullPage @Yield @EvenFullPageSend @NonRawFigureVal else @Yield @NonRawFigureVal } } ########################################################################### # # # Floating tables (exact clone of figure code immediately above). # # # ########################################################################### export @Tag prefix def @TablePrefixMarker named @Tag {} named prefix {} { @Null } export @Tag count def @TableCounterMarker named @Tag {} named count {} { @Null } def @RawTableNum right tag { @TableCounterMarker&&tag @Open { @Next count } } def @TableCounterIncrement right tag { @TableCounterMarker&&preceding @Tagged tag // @TablePrefixMarker&&preceding @Tagged tag // @TableCounterMarker count { @RawTableNum tag } // @NumberMarker @Tag { tag } @Value { { @TablePrefixMarker&&tag @Open { prefix } } @Join {@TableNumbers @Num @RawTableNum tag} } } def @BeginTableCounter left condition right prefix { condition @Do { @TablePrefixMarker prefix { prefix } // @TableCounterMarker count { 0 } } } def @EndTableList { @Galley //@MidGap @EndTableList } def @Table named @Tag {} named @Caption { dft } named @ShortCaption { dft } named @CaptionPos { @TableCaptionPos } named @Format named @II right x { |@DisplayIndent x | } named @QQ right x { |@DisplayIndent x |@DisplayIndent } named @CC right x { |0.5rt x | } named @RR right x { |1.0rt x | } right @Body { @TableFormat @Body } named @InitialLanguage { @InitialLanguage } named @BypassNumber { dft } named @OnePage { dft } named @Location { @TableLocation } right @Body { def @TableNumber { @BypassNumber @Dft @NumberOf @Tag } def @ContentsCaption { @ShortCaption @Dft @Caption } def @OnePg { @OnePage @Case { { No no } @Yield No { Yes yes } @Yield Yes dft @Yield { @Location @Case { PageTop @Yield No EvenPageTop @Yield No FullPage @Yield No EvenFullPage @Yield No PageFoot @Yield Yes ColTop @Yield No ColFoot @Yield Yes ColEnd @Yield No Display @Yield Yes AfterLine @Yield Yes TryAfterLine @Yield Yes Raw @Yield No } } } } def @CaptionState { @Caption @Case { dft @Yield None else @Yield { @CaptionPos @Case { { Below below } @Yield Below { Above above } @Yield Above } } } } def @CaptionVal { @TableCaptionFont @Font @TableCaptionBreak @Break { ||0.5rt @TableCaptionFormat word { table @WordVal @TableWord } number { @TableNumber } caption { @Caption } } } def @TableVal { @InitialLanguage @Language { @MakeTableContents @TableContentsEntry indent { 0f } crosstag { @Tag } number { @TableNumber } title { @InitialLanguage @Language @ContentsCaption } pagenum { @PageOf @Tag } // @TableCounterIncrement @Tag // @Body // @PageMark @Tag } } def @TableTarget { @Location @Case { PageTop @Yield @PageTopPlace&&following EvenPageTop @Yield @PageTopPlace&&following FullPage @Yield @FullPagePlace&&following EvenFullPage @Yield @FullPagePlace&&following PageFoot @Yield @PageFootAndTopPlace&&following ColTop @Yield @ColTopPlace&&following ColFoot @Yield @ColFootAndTopPlace&&following ColEnd @Yield @EndTableList&&following Display @Yield @AfterLinePlace&&following AfterLine @Yield @AfterLinePlace&&following TryAfterLine @Yield @TryAfterLinePlace&&following } } def @SendEncl into { @TableTarget } right x { def @Enclose right x { @OnePg @Case { No @Yield @Format x Yes @Yield x } } x } def @Send into { @TableTarget } right x { x } def @EvenFullPageSend into { @EvenFullPagePlace&&following } right x { @OneRow x } def @EvenPageSend into { @EvenPagePlace&&following } right x { @OneRow x } def @RawTableVal { @OnePg.@CaptionState @Case { Yes.Below @Yield @OneRow { @Format @TableVal @DP @CaptionVal } Yes.Above @Yield @OneRow { @CaptionVal @DP @Format @TableVal } Yes.None @Yield @OneRow { @Format @TableVal } No.Below @Yield { @Format @TableVal @DP @CaptionVal } No.Above @Yield { @CaptionVal @DP @Format @TableVal } No.None @Yield { @Format @TableVal } } } def @NonRawTableVal { @OnePg.@CaptionState @Case { Yes.Below @Yield { @Send @OneRow { @Format @TableVal @DP @CaptionVal // @DupRunner} } Yes.Above @Yield { @Send @OneRow { @CaptionVal @DP @Format @TableVal // @DupRunner} } Yes.None @Yield { @Send @OneRow { @Format @TableVal // @DupRunner } } No.Below @Yield { @SendEncl { @TableVal // @Send { @CaptionVal // @DupRunner } } } No.Above @Yield { @Send { @CaptionVal // @SendEncl { @TableVal // @DupRunner } } } No.None @Yield { @SendEncl { @TableVal // @DupRunner } } } } @Location @Case { Raw @Yield @RawTableVal Display @Yield { @NonRawTableVal &1rt } EvenPageTop @Yield @EvenPageSend @NonRawTableVal EvenFullPage @Yield @EvenFullPageSend @NonRawTableVal else @Yield @NonRawTableVal } } ########################################################################### # # # Floating floaters (exact clone of figure and table code above). # # # ########################################################################### export @Tag prefix def @FloaterPrefixMarker named @Tag {} named prefix {} { @Null } export @Tag count def @FloaterCounterMarker named @Tag {} named count {} { @Null } def @RawFloaterNum right tag { @FloaterCounterMarker&&tag @Open { @Next count } } def @FloaterCounterIncrement right tag { @FloaterCounterMarker&&preceding @Tagged tag // @FloaterPrefixMarker&&preceding @Tagged tag // @FloaterCounterMarker count { @RawFloaterNum tag } // @NumberMarker @Tag { tag } @Value { { @FloaterPrefixMarker&&tag @Open { prefix } } @Join {@FloaterNumbers @Num @RawFloaterNum tag} } } def @BeginFloaterCounter left condition right prefix { condition @Do { @FloaterPrefixMarker prefix { prefix } // @FloaterCounterMarker count { 0 } } } def @EndFloaterList { @Galley //@MidGap @EndFloaterList } def @Floater named @Tag {} named @Caption { dft } named @ShortCaption { dft } named @CaptionPos { @FloaterCaptionPos } named @Format named @II right x { |@DisplayIndent x | } named @QQ right x { |@DisplayIndent x |@DisplayIndent } named @CC right x { |0.5rt x | } named @RR right x { |1.0rt x | } right @Body { @FloaterFormat @Body } named @InitialLanguage { @InitialLanguage } named @BypassNumber { dft } named @OnePage { dft } named @Location { @FloaterLocation } right @Body { def @FloaterNumber { @BypassNumber @Dft @NumberOf @Tag } def @ContentsCaption { @ShortCaption @Dft @Caption } def @OnePg { @OnePage @Case { { No no } @Yield No { Yes yes } @Yield Yes dft @Yield { @Location @Case { PageTop @Yield No EvenPageTop @Yield No FullPage @Yield No EvenFullPage @Yield No PageFoot @Yield Yes ColTop @Yield No ColFoot @Yield Yes ColEnd @Yield No Display @Yield Yes AfterLine @Yield Yes TryAfterLine @Yield Yes Raw @Yield No } } } } def @CaptionState { @Caption @Case { dft @Yield None else @Yield { @CaptionPos @Case { { Below below } @Yield Below { Above above } @Yield Above } } } } def @CaptionVal { @FloaterCaptionFont @Font @FloaterCaptionBreak @Break { ||0.5rt @FloaterCaptionFormat word { floater @WordVal @FloaterWord } number { @FloaterNumber } caption { @Caption } } } def @FloaterVal { @InitialLanguage @Language { @MakeFloaterContents @FloaterContentsEntry indent { 0f } crosstag { @Tag } number { @FloaterNumber } title { @InitialLanguage @Language @ContentsCaption } pagenum { @PageOf @Tag } // @FloaterCounterIncrement @Tag // @Body // @PageMark @Tag } } def @FloaterTarget { @Location @Case { PageTop @Yield @PageTopPlace&&following EvenPageTop @Yield @PageTopPlace&&following FullPage @Yield @FullPagePlace&&following EvenFullPage @Yield @FullPagePlace&&following PageFoot @Yield @PageFootAndTopPlace&&following ColTop @Yield @ColTopPlace&&following ColFoot @Yield @ColFootAndTopPlace&&following ColEnd @Yield @EndFloaterList&&following Display @Yield @AfterLinePlace&&following AfterLine @Yield @AfterLinePlace&&following TryAfterLine @Yield @TryAfterLinePlace&&following } } def @SendEncl into { @FloaterTarget } right x { def @Enclose right x { @OnePg @Case { No @Yield @Format x Yes @Yield x } } x } def @Send into { @FloaterTarget } right x { x } def @EvenFullPageSend into { @EvenFullPagePlace&&following } right x { @OneRow x } def @EvenPageSend into { @EvenPagePlace&&following } right x { @OneRow x } def @RawFloaterVal { @OnePg.@CaptionState @Case { Yes.Below @Yield @OneRow { @Format @FloaterVal @DP @CaptionVal } Yes.Above @Yield @OneRow { @CaptionVal @DP @Format @FloaterVal } Yes.None @Yield @OneRow { @Format @FloaterVal } No.Below @Yield { @Format @FloaterVal @DP @CaptionVal } No.Above @Yield { @CaptionVal @DP @Format @FloaterVal } No.None @Yield { @Format @FloaterVal } } } def @NonRawFloaterVal { @OnePg.@CaptionState @Case { Yes.Below @Yield { @Send @OneRow { @Format @FloaterVal @DP @CaptionVal // @DupRunner} } Yes.Above @Yield { @Send @OneRow { @CaptionVal @DP @Format @FloaterVal // @DupRunner} } Yes.None @Yield { @Send @OneRow { @Format @FloaterVal // @DupRunner } } No.Below @Yield { @SendEncl { @FloaterVal // @Send { @CaptionVal // @DupRunner } } } No.Above @Yield { @Send { @CaptionVal // @SendEncl { @FloaterVal // @DupRunner } } } No.None @Yield { @SendEncl { @FloaterVal // @DupRunner } } } } @Location @Case { Raw @Yield @RawFloaterVal Display @Yield { @NonRawFloaterVal &1rt } EvenPageTop @Yield @EvenPageSend @NonRawFloaterVal EvenFullPage @Yield @EvenFullPageSend @NonRawFloaterVal else @Yield @NonRawFloaterVal } } ########################################################################### # # # Glossary. # # # ########################################################################### def @GlossaryList { @Galley //@GlossaryGap @GlossaryList } def @GlossarySection into { @GlossaryPlace&&following } right etc { // @GlossaryList // etc //1rt } def @DoGlossary into { @GlossaryList&&following } left @Key named name {} named pnum {} right body { @GlossaryFont @Font @GlossaryBreak @Break @GlossaryFormat @Name { name } @PageNum { pnum } @Body { body } } def @Glossary left name named sortkey { dft } right body { def key { sortkey @Dft name } @MakeGlossary @Case { { Yes yes } @Yield { @PageMark key & key @DoGlossary name { name } pnum { @PageOf key } body } else @Yield @Null } } def @InGlossary right x { @MakeGlossary @Case { { Yes yes } @Yield { @InGlossaryFormat @InGlossaryFont @Font x } else @Yield x } } ########################################################################### # # # Index. # # # ########################################################################### def @IndexList { @Galley //1vx @IndexList } def @BypassIndexList { @Galley //1vx @BypassIndexList } def @IndexSection into { @IndexPlace&&following } right etc { // @IndexBreak @Break @IndexList // @IndexBreak @Break @BypassIndexList // @ClearHeaderComponent // etc //1rt } def @DoIndex into { @IndexList&&following } left @Key # sort key named pgrange {} # page numbers, or empty if none named depth {} # 0, 1, or 2 (@Index, @Sub, or @SubSub) right body # body, not including any prefix { def @Body { depth @Case { 0 @Yield @IndexFormat body 1 @Yield @SubIndexFormat body 2 @Yield @SubSubIndexFormat body } } def @Enclose right x { @IndexCtd.depth @Case { Yes.0 @Yield { @ClearHeaderComponent //1vx x //1vx 1vx @SetHeaderComponent { @Body @IndexCtdFormat {continued @WordVal @IndexCtdWord} } //1vx 1vx @BeginHeaderComponent (unused) } Yes.1 @Yield { @EndHeaderComponent //1vx x //1vx 1vx @BeginHeaderComponent { @Body @IndexCtdFormat {continued @WordVal @IndexCtdWord} } } else @Yield x } } def @Merge left lpart right rpart { { lpart @Rump { lpart @Meld rpart } } @Case { "" @Yield lpart else @Yield { { lpart{@OneCol ,} } @Meld rpart } } } @IndexFont @Font @IndexBreak @Break pgrange @Case { "" @Yield { @Body &"0.03fu" {} } else @Yield { @Body &"0.03fu" {}{@OneCol ,} pgrange } } } def @RawIndex left lpart named depth { 0 } right rpart { @MakeIndex @Case { Yes @Yield { lpart @DoIndex depth { depth } rpart } else @Yield @Null } } macro @RawSubIndex { @RawIndex depth { 1 } } macro @RawSubSubIndex { @RawIndex depth { 2 } } def @Index left lpart named @Tag {} named pnformat right @PageNum { Ordinary } named depth { 0 } named to {} right rpart { def @PgMk right tag { tag @CrossLink @PageOf tag } def @Fmt right x { {pnformat x} @Case { Ordinary @Yield @IndexTypeOrdinary x Main @Yield @IndexTypeMain x Special @Yield @IndexTypeSpecial x else @Yield {pnformat x} } } def @PgRange { to @Case { "" @Yield @PgMk @Tag else @Yield { { @PageOf @Tag } @Case { { @PageOf to } @Yield { @PgMk @Tag } else @Yield { {@PgMk @Tag} @IndexRangeFormat {@PgMk to} } } } } } @MakeIndex @Case { Yes @Yield { @PageMark @Tag & lpart @DoIndex depth { depth } pgrange { @Fmt @PgRange } rpart } else @Yield @Null } } macro @SubIndex { @Index depth { 1 } } macro @SubSubIndex { @Index depth { 2 } } def @IndexBlanks { b @RawIndex {} c @RawIndex {} d @RawIndex {} e @RawIndex {} f @RawIndex {} g @RawIndex {} h @RawIndex {} i @RawIndex {} j @RawIndex {} k @RawIndex {} l @RawIndex {} m @RawIndex {} n @RawIndex {} o @RawIndex {} p @RawIndex {} q @RawIndex {} r @RawIndex {} s @RawIndex {} t @RawIndex {} u @RawIndex {} v @RawIndex {} w @RawIndex {} x @RawIndex {} y @RawIndex {} z @RawIndex {} } def @IndexSpacer left lpart named above { @IndexSpacerAbove } named below { @IndexSpacerBelow } named font { @IndexSpacerFont } named format right @Body { @IndexSpacerFormat @Body } right rpart { def @Send into { @IndexList&&following } right @Key { @ClearHeaderComponent // //above @CNP @OneRow { font @Font format rpart //below } } @MakeIndex @Case { Yes @Yield @Send lpart else @Yield @Null } } macro @InitialIndexSpacer { @IndexSpacer above { 0i } } def @IndexLetters { a @InitialIndexSpacer A b @IndexSpacer B c @IndexSpacer C d @IndexSpacer D e @IndexSpacer E f @IndexSpacer F g @IndexSpacer G h @IndexSpacer H i @IndexSpacer I j @IndexSpacer J k @IndexSpacer K l @IndexSpacer L m @IndexSpacer M n @IndexSpacer N o @IndexSpacer O p @IndexSpacer P q @IndexSpacer Q r @IndexSpacer R s @IndexSpacer S t @IndexSpacer T u @IndexSpacer U v @IndexSpacer V w @IndexSpacer W x @IndexSpacer X y @IndexSpacer Y z @IndexSpacer Z } def @BypassBeginIndexPlace { @Galley } def @BypassBeginIndex force into { @BypassBeginIndexPlace&&preceding } {} def @BypassRawIndex force into { @BypassIndexList&&preceding } named indent { 0f } right x { &indent x } def @BypassEndIndex { @Null } ########################################################################### # # # IndexA. # # # ########################################################################### def @IndexAList { @Galley //1vx @IndexAList } def @BypassIndexAList { @Galley //1vx @BypassIndexAList } def @IndexASection into { @IndexAPlace&&following } right etc { // @IndexABreak @Break @IndexAList // @IndexABreak @Break @BypassIndexAList // @ClearHeaderComponent // etc //1rt } def @DoIndexA into { @IndexAList&&following } left @Key # sort key named pgrange {} # page numbers, or empty if none named depth {} # 0, 1, or 2 (@IndexA, @Sub, or @SubSub) right body # body, not including any prefix { def @Body { depth @Case { 0 @Yield @IndexAFormat body 1 @Yield @SubIndexAFormat body 2 @Yield @SubSubIndexAFormat body } } def @Enclose right x { @IndexACtd.depth @Case { Yes.0 @Yield { @ClearHeaderComponent //1vx x //1vx 1vx @SetHeaderComponent { @Body @IndexACtdFormat {continued @WordVal @IndexACtdWord} } //1vx 1vx @BeginHeaderComponent (unused) } Yes.1 @Yield { @EndHeaderComponent //1vx x //1vx 1vx @BeginHeaderComponent { @Body @IndexACtdFormat {continued @WordVal @IndexACtdWord} } } else @Yield x } } def @Merge left lpart right rpart { { lpart @Rump { lpart @Meld rpart } } @Case { "" @Yield lpart else @Yield { { lpart{@OneCol ,} } @Meld rpart } } } @IndexAFont @Font @IndexABreak @Break pgrange @Case { "" @Yield { @Body &"0.03fu" {} } else @Yield { @Body &"0.03fu" {}{@OneCol ,} pgrange } } } def @RawIndexA left lpart named depth { 0 } right rpart { @MakeIndexA @Case { Yes @Yield { lpart @DoIndexA depth { depth } rpart } else @Yield @Null } } macro @RawSubIndexA { @RawIndexA depth { 1 } } macro @RawSubSubIndexA { @RawIndexA depth { 2 } } def @IndexA left lpart named @Tag {} named pnformat right @PageNum { Ordinary } named depth { 0 } named to {} right rpart { def @PgMk right tag { tag @CrossLink @PageOf tag } def @Fmt right x { {pnformat x} @Case { Ordinary @Yield @IndexATypeOrdinary x Main @Yield @IndexATypeMain x Special @Yield @IndexATypeSpecial x else @Yield {pnformat x} } } def @PgRange { to @Case { "" @Yield @PgMk @Tag else @Yield { { @PageOf @Tag } @Case { { @PageOf to } @Yield { @PgMk @Tag } else @Yield { {@PgMk @Tag} @IndexARangeFormat {@PgMk to} } } } } } @MakeIndexA @Case { Yes @Yield { @PageMark @Tag & lpart @DoIndexA depth { depth } pgrange { @Fmt @PgRange } rpart } else @Yield @Null } } macro @SubIndexA { @IndexA depth { 1 } } macro @SubSubIndexA { @IndexA depth { 2 } } def @IndexABlanks { b @RawIndexA {} c @RawIndexA {} d @RawIndexA {} e @RawIndexA {} f @RawIndexA {} g @RawIndexA {} h @RawIndexA {} i @RawIndexA {} j @RawIndexA {} k @RawIndexA {} l @RawIndexA {} m @RawIndexA {} n @RawIndexA {} o @RawIndexA {} p @RawIndexA {} q @RawIndexA {} r @RawIndexA {} s @RawIndexA {} t @RawIndexA {} u @RawIndexA {} v @RawIndexA {} w @RawIndexA {} x @RawIndexA {} y @RawIndexA {} z @RawIndexA {} } def @IndexASpacer left lpart named above { @IndexASpacerAbove } named below { @IndexASpacerBelow } named font { @IndexASpacerFont } named format right @Body { @IndexASpacerFormat @Body } right rpart { def @Send into { @IndexAList&&following } right @Key { @ClearHeaderComponent // //above @CNP @OneRow { font @Font format rpart //below } } @MakeIndexA @Case { Yes @Yield @Send lpart else @Yield @Null } } macro @InitialIndexASpacer { @IndexASpacer above { 0i } } def @IndexALetters { a @InitialIndexASpacer A b @IndexASpacer B c @IndexASpacer C d @IndexASpacer D e @IndexASpacer E f @IndexASpacer F g @IndexASpacer G h @IndexASpacer H i @IndexASpacer I j @IndexASpacer J k @IndexASpacer K l @IndexASpacer L m @IndexASpacer M n @IndexASpacer N o @IndexASpacer O p @IndexASpacer P q @IndexASpacer Q r @IndexASpacer R s @IndexASpacer S t @IndexASpacer T u @IndexASpacer U v @IndexASpacer V w @IndexASpacer W x @IndexASpacer X y @IndexASpacer Y z @IndexASpacer Z } def @BypassBeginIndexAPlace { @Galley } def @BypassBeginIndexA force into { @BypassBeginIndexAPlace&&preceding } {} def @BypassRawIndexA force into { @BypassIndexAList&&preceding } named indent { 0f } right x { &indent x } def @BypassEndIndexA { @Null } ########################################################################### # # # IndexB. # # # ########################################################################### def @IndexBList { @Galley //1vx @IndexBList } def @BypassIndexBList { @Galley //1vx @BypassIndexBList } def @IndexBSection into { @IndexBPlace&&following } right etc { // @IndexBBreak @Break @IndexBList // @IndexBBreak @Break @BypassIndexBList // @ClearHeaderComponent // etc //1rt } def @DoIndexB into { @IndexBList&&following } left @Key # sort key named pgrange {} # page numbers, or empty if none named depth {} # 0, 1, or 2 (@IndexB, @Sub, or @SubSub) right body # body, not including any prefix { def @Body { depth @Case { 0 @Yield @IndexBFormat body 1 @Yield @SubIndexBFormat body 2 @Yield @SubSubIndexBFormat body } } def @Enclose right x { @IndexBCtd.depth @Case { Yes.0 @Yield { @ClearHeaderComponent //1vx x //1vx 1vx @SetHeaderComponent { @Body @IndexBCtdFormat {continued @WordVal @IndexBCtdWord} } //1vx 1vx @BeginHeaderComponent (unused) } Yes.1 @Yield { @EndHeaderComponent //1vx x //1vx 1vx @BeginHeaderComponent { @Body @IndexBCtdFormat {continued @WordVal @IndexBCtdWord} } } else @Yield x } } def @Merge left lpart right rpart { { lpart @Rump { lpart @Meld rpart } } @Case { "" @Yield lpart else @Yield { { lpart{@OneCol ,} } @Meld rpart } } } @IndexBFont @Font @IndexBBreak @Break pgrange @Case { "" @Yield { @Body &"0.03fu" {} } else @Yield { @Body &"0.03fu" {}{@OneCol ,} pgrange } } } def @RawIndexB left lpart named depth { 0 } right rpart { @MakeIndexB @Case { Yes @Yield { lpart @DoIndexB depth { depth } rpart } else @Yield @Null } } macro @RawSubIndexB { @RawIndexB depth { 1 } } macro @RawSubSubIndexB { @RawIndexB depth { 2 } } def @IndexB left lpart named @Tag {} named pnformat right @PageNum { Ordinary } named depth { 0 } named to {} right rpart { def @PgMk right tag { tag @CrossLink @PageOf tag } def @Fmt right x { {pnformat x} @Case { Ordinary @Yield @IndexBTypeOrdinary x Main @Yield @IndexBTypeMain x Special @Yield @IndexBTypeSpecial x else @Yield {pnformat x} } } def @PgRange { to @Case { "" @Yield @PgMk @Tag else @Yield { { @PageOf @Tag } @Case { { @PageOf to } @Yield { @PgMk @Tag } else @Yield { {@PgMk @Tag} @IndexBRangeFormat {@PgMk to} } } } } } @MakeIndexB @Case { Yes @Yield { @PageMark @Tag & lpart @DoIndexB depth { depth } pgrange { @Fmt @PgRange } rpart } else @Yield @Null } } macro @SubIndexB { @IndexB depth { 1 } } macro @SubSubIndexB { @IndexB depth { 2 } } def @IndexBBlanks { b @RawIndexB {} c @RawIndexB {} d @RawIndexB {} e @RawIndexB {} f @RawIndexB {} g @RawIndexB {} h @RawIndexB {} i @RawIndexB {} j @RawIndexB {} k @RawIndexB {} l @RawIndexB {} m @RawIndexB {} n @RawIndexB {} o @RawIndexB {} p @RawIndexB {} q @RawIndexB {} r @RawIndexB {} s @RawIndexB {} t @RawIndexB {} u @RawIndexB {} v @RawIndexB {} w @RawIndexB {} x @RawIndexB {} y @RawIndexB {} z @RawIndexB {} } def @IndexBSpacer left lpart named above { @IndexBSpacerAbove } named below { @IndexBSpacerBelow } named font { @IndexBSpacerFont } named format right @Body { @IndexBSpacerFormat @Body } right rpart { def @Send into { @IndexBList&&following } right @Key { @ClearHeaderComponent // //above @CNP @OneRow { font @Font format rpart //below } } @MakeIndexB @Case { Yes @Yield @Send lpart else @Yield @Null } } macro @InitialIndexBSpacer { @IndexBSpacer above { 0i } } def @IndexBLetters { a @InitialIndexBSpacer A b @IndexBSpacer B c @IndexBSpacer C d @IndexBSpacer D e @IndexBSpacer E f @IndexBSpacer F g @IndexBSpacer G h @IndexBSpacer H i @IndexBSpacer I j @IndexBSpacer J k @IndexBSpacer K l @IndexBSpacer L m @IndexBSpacer M n @IndexBSpacer N o @IndexBSpacer O p @IndexBSpacer P q @IndexBSpacer Q r @IndexBSpacer R s @IndexBSpacer S t @IndexBSpacer T u @IndexBSpacer U v @IndexBSpacer V w @IndexBSpacer W x @IndexBSpacer X y @IndexBSpacer Y z @IndexBSpacer Z } def @BypassBeginIndexBPlace { @Galley } def @BypassBeginIndexB force into { @BypassBeginIndexBPlace&&preceding } {} def @BypassRawIndexB force into { @BypassIndexBList&&preceding } named indent { 0f } right x { &indent x } def @BypassEndIndexB { @Null } ########################################################################### # # # Colophon. # # # ########################################################################### def @ColophonList { @Galley //1vx @ColophonList } def @ColophonSection into { @ColophonPlace&&following } right etc { // @ColophonBreak @Break @ColophonFont @Font @ColophonList // etc //1rt } ########################################################################### # # # @LargeScaleStructure # # # # The prototype for the value of each large-scale structure symbol # # (@Chapter, @Section, etc.) # # # ########################################################################### def @LargeScaleStructure named tag {} # tag of this large-scale structure sym named type {} # MajorIntro, Major, VeryMajor, or Minor named initiallanguage {} # its language named title {} # its full title named runningtitle { dft } # its running title Jeffk 12/11/02 from {} named aboveheadinggap { 0f } # gap above heading named headingfont {} # its heading font named headingbreak {} # its heading break named headingformat # its heading format left @Num right @Body {} named headingtext { @Null } # heading text named incontents { No } # entry in table of contents required named contentsindent { 0f } # only used if type is Minor named word {} named numbers { None } named attachnum {} # only if numbers is not None named retrievenum {} # only if numbers is not None named bypassnumber {} # only if numbers is not None, or VeryMajor named prefix {} # prefix of number of this symbol named pnprefix {} # prefix for page numbers of this sym named majornum { dft } named majortitle { dft } named minornum { dft } named minortitle { dft } named intheorems { No } named indisplays { No } named infigures { No } named intables { No } named infloaters { No } named inrunners { No } named sendheader right @Body {} named innergap {} named endifmajor right innergap { @EndFigureList //innergap @EndNoteList 1 //innergap @ChapRefSection } named wantindefinite { No } named newpage { No } right @Body { def @ShortNum { numbers @Then { bypassnumber @Dft { prefix @Join { numbers @Num retrievenum } } } } def @LongNum { numbers @Then { initiallanguage @Language { word @NumSep @ShortNum } } } def @ShortTitle { initiallanguage @Language { runningtitle @Dft title } } def @IfMajor right x { type @Case { { MajorIntro Major ExtraMajor ExtraMajorIntro } @Yield x else @Yield @Null } } def @StartIfMajor { type @Case { { MajorIntro Major ExtraMajor ExtraMajorIntro VeryMajor } @Yield Start else @Yield NonStart } } def @Run right start { inrunners @Do type @Case { { Major MajorIntro } @Yield { start @Runner @MajorNum { majornum @Dft @LongNum } @MajorTitle { majortitle @Dft @ShortTitle } @MinorNum {} @MinorTitle {} @Owner { tag } @Prefix { pnprefix @Join @ShortNum } } { ExtraMajor ExtraMajorIntro } @Yield { start @Runner @MajorNum { majornum @Dft @LongNum } @MajorTitle { majortitle @Dft @ShortTitle } @MinorNum { majornum @Dft @LongNum } @MinorTitle { majortitle @Dft @ShortTitle } @Owner { tag } @Prefix { pnprefix @Join @ShortNum } } { VeryMajor } @Yield { start @Runner @MajorNum { majornum @Dft @LongNum } @MajorTitle { majortitle @Dft @ShortTitle } @MinorNum {} @MinorTitle {} @Owner { tag } @Prefix {} } Minor @Yield { start @Runner @MajorNum { majornum @Dft @LongNum } @MajorTitle { majortitle @Dft @ShortTitle } @MinorNum { minornum @Dft @LongNum } @MinorTitle { minortitle @Dft @ShortTitle } @Owner { tag } @Prefix { pnprefix @Join @ShortNum } } } } def @ContentsStuff { incontents.type @Case { Yes.Minor @Yield { incontents @ContentsEntry indent { contentsindent } crosstag { tag } number { @LongNum } title { initiallanguage @Language title } pagenum { @PageOf tag } } { Yes.Major Yes.MajorIntro Yes.ExtraMajor Yes.ExtraMajorIntro } @Yield { incontents @MajorContentsEntry indent { contentsindent } crosstag { tag } number { @LongNum } title { initiallanguage @Language title } pagenum { @PageOf tag } } { Yes.VeryMajor } @Yield { incontents @VeryMajorContentsEntry indent { contentsindent } title { initiallanguage @Language { bypassnumber @ColonSep title } } } else @Yield @Null } } def @MinorTitle right x { newpage @Case { { No no } @Yield @Protect {@LongNum headingformat title} { Yes yes } @Yield { @Null @NP @LongNum headingformat title } } } def @Heading { type @Case { Minor @Yield { headingfont @Font headingbreak @Break @MinorTitle {@LongNum headingformat title} // @Run @StartIfMajor // @PageMark tag @DP headingtext } { Major MajorIntro ExtraMajor ExtraMajorIntro } @Yield { sendheader { //aboveheadinggap headingfont @Font headingbreak @Break { @LongNum headingformat title } // @Run @StartIfMajor // @PageMark tag @DP headingtext } } { VeryMajor } @Yield { sendheader { //aboveheadinggap headingfont @Font headingbreak @Break { bypassnumber headingformat title } // @Run @StartIfMajor // @PageMark tag @DP headingtext } } } } initiallanguage @Language { @Heading // wantindefinite @Case { Yes @Yield @Null No @Yield "" } // numbers @Do { attachnum & @NumberMarker @Tag { tag } @Value { @ShortNum } } // @IfMajor { @FootNoteThrough @Do @BeginFootNoteCounter } # // @Run @StartIfMajor // @ContentsStuff // @TitleMarker @Tag { tag } @Value { title } // intheorems @BeginAllCounters @ShortNum // indisplays @BeginDisplayCounter @ShortNum // infigures @BeginFigureCounter @ShortNum // intables @BeginTableCounter @ShortNum // infloaters @BeginFloaterCounter @ShortNum // @Body //innergap @IfMajor endifmajor innergap // @Run NonStart } } @End @DocumentSetup