diff options
Diffstat (limited to 'doc/expert')
-rw-r--r-- | doc/expert/README | 2 | ||||
-rw-r--r-- | doc/expert/det_gall | 9 | ||||
-rw-r--r-- | doc/expert/det_lexi | 8 | ||||
-rw-r--r-- | doc/expert/mydefs | 174 | ||||
-rw-r--r-- | doc/expert/pre | 1 | ||||
-rw-r--r-- | doc/expert/pre_head | 113 | ||||
-rw-r--r-- | doc/expert/preface | 2 |
7 files changed, 220 insertions, 89 deletions
diff --git a/doc/expert/README b/doc/expert/README index d066d57..a69bf2b 100644 --- a/doc/expert/README +++ b/doc/expert/README @@ -16,4 +16,4 @@ copy of the final outfile.ps is included. There should be no warning messages on the fifth run. Jeffrey H. Kingston -26 February 2000 +9 March 2000 diff --git a/doc/expert/det_gall b/doc/expert/det_gall index e5e6e99..371a6d8 100644 --- a/doc/expert/det_gall +++ b/doc/expert/det_gall @@ -353,6 +353,15 @@ of any symbol that is available at that point, in the usual way. The of the galley symbol, rather than an inner definition as shown above, if desired. @PP +It makes sense for sorted galleys containing a @Code "@Merge" symbol +(Section {@NumberOf sorted}) to also have an @Code "@Enclose" symbol. The +meaning is that after all merging is done, each resulting galley has +an @Code "@Enclose" symbol which is applied in the usual way. The value +of this @Code "@Enclose" symbol will be the value of an @Code "@Enclose" +symbol from one of the contributing galleys, but exactly which one +is not defined. So it is safest if all such @Code "@Enclose" symbols +produce the same result. +@PP A @Code "following" galley may fail to find a first target lying in a following component of the same galley as its invocation point. This is a deficiency of Basser Lout, which occurs if the target has not been diff --git a/doc/expert/det_lexi b/doc/expert/det_lexi index 4f98875..d488917 100644 --- a/doc/expert/det_lexi +++ b/doc/expert/det_lexi @@ -91,8 +91,10 @@ do so. The complete list of predefined identifiers is { "@BackEnd" @JL "@Background" @JL "@Begin" + @JL "@BeginHeaderComponent" @JL "@Break" @JL "@Case" + @JL "@ClearHeaderComponent" @JL "@Common" @JL "@Char" @JL "@CurrFace" @@ -102,6 +104,7 @@ do so. The complete list of predefined identifiers is @JL "@CurrZUnit" @JL "@Database" @JL "@End" + @JL "@EndHeaderComponent" @JL "@Enclose" @JL "@Filter" @JL "@FilterErr" @@ -118,9 +121,9 @@ do so. The complete list of predefined identifiers is @JL "@High" @JL "@HLimited" @JL "@HScale" - @JL "@HShift" } |4.4cx { - "@HSpan" + "@HShift" + @JL "@HSpan" @JL "@Include" @JL "@IncludeGraphic" @JL "@Insert" @@ -157,6 +160,7 @@ do so. The complete list of predefined identifiers is @JL "@Scale" @JL "@SetColor" @JL "@SetColour" + @JL "@SetHeaderComponent" @JL "@Space" @JL "@StartHSpan" @JL "@StartHVSpan" diff --git a/doc/expert/mydefs b/doc/expert/mydefs index 0a4d364..92f9871 100644 --- a/doc/expert/mydefs +++ b/doc/expert/mydefs @@ -14,91 +14,95 @@ # # ################################################### - def @@BackEnd { @Code "@BackEnd" } - def @@Background { @Code "@Background" } - def @@Begin { @Code "@Begin" } - def @@Break { @Code "@Break" } - def @@Case { @Code "@Case" } - def @@Char { @Code "@Char" } - def @@Common { @Code "@Common" } - def @@CurrLang { @Code "@CurrLang" } - def @@CurrFamily { @Code "@CurrFamily" } - def @@CurrFace { @Code "@CurrFace" } - def @@CurrYUnit { @Code "@CurrYUnit" } - def @@CurrZUnit { @Code "@CurrZUnit" } - def @@Database { @Code "@Database" } - def @@End { @Code "@End" } - def @@Enclose { @Code "@Enclose" } - def @@Font { @Code "@Font" } - def @@ForceGalley { @Code "@ForceGalley" } - def @@Galley { @Code "@Galley" } - def @@Graphic { @Code "@Graphic" } - def @@HAdjust { @Code "@HAdjust" } - def @@HCover { @Code "@HCover" } - def @@HContract { @Code "@HContract" } - def @@HExpand { @Code "@HExpand" } - def @@HLimited { @Code "@HLimited" } - def @@High { @Code "@High" } - def @@HScale { @Code "@HScale" } - def @@HShift { @Code "@HShift" } - def @@HSpan { @Code "@HSpan" } - def @@Include { @Code "@Include" } - def @@IncludeGraphic { @Code "@IncludeGraphic" } - def @@KernShrink { @Code "@KernShrink" } - def @@Key { @Code "@Key" } - def @@Language { @Code "@Language" } - def @@LClos { @Code "@LClos" } - def @@LEnv { @Code "@LEnv" } - def @@LInput { @Code "@LInput" } - def @@LUse { @Code "@LUse" } - def @@LVis { @Code "@LVis" } - def @@Meld { @Code "@Meld" } - def @@Merge { @Code "@Merge" } - def @@Moment { @Code "@Moment" } - def @@Next { @Code "@Next" } - def @@NotRevealed { @Code "@NotRevealed" } - def @@Null { @Code "@Null" } - def @@OneCol { @Code "@OneCol" } - def @@OneOf { @Code "@OneOf" } - def @@OneRow { @Code "@OneRow" } - def @@Open { @Code "@Open" } - def @@Outline { @Code "@Outline" } - def @@PAdjust { @Code "@PAdjust" } - def @@PageLabel { @Code "@PageLabel" } - def @@PlainGraphic { @Code "@PlainGraphic" } - def @@PrependGraphic { @Code "@PrependGraphic" } - def @@RawVerbatim { @Code "@RawVerbatim" } - def @@Rotate { @Code "@Rotate" } - def @@Rump { @Code "@Rump" } - def @@Insert { @Code "@Insert" } - def @@Scale { @Code "@Scale" } - def @@SetColor { @Code "@SetColor" } - def @@SetColour { @Code "@SetColour" } - def @@Space { @Code "@Space" } - def @@StartHSpan { @Code "@StartHSpan" } - def @@StartVSpan { @Code "@StartVSpan" } - def @@StartHVSpan { @Code "@StartHVSpan" } - def @@SysDatabase { @Code "@SysDatabase" } - def @@SysInclude { @Code "@SysInclude" } - def @@SysIncludeGraphic { @Code "@SysIncludeGraphic" } - def @@SysPrependGraphic { @Code "@SysPrependGraphic" } - def @@Tag { @Code "@Tag" } - def @@Tagged { @Code "@Tagged" } - def @@Underline { @Code "@Underline" } - def @@Use { @Code "@Use" } - def @@VAdjust { @Code "@VAdjust" } - def @@VContract { @Code "@VContract" } - def @@VCover { @Code "@VCover" } - def @@VExpand { @Code "@VExpand" } - def @@Verbatim { @Code "@Verbatim" } - def @@VLimited { @Code "@VLimited" } - def @@VScale { @Code "@VScale" } - def @@VShift { @Code "@VShift" } - def @@VSpan { @Code "@VSpan" } - def @@Wide { @Code "@Wide" } - def @@Yield { @Code "@Yield" } - def @@YUnit { @Code "@YUnit" } - def @@ZUnit { @Code "@ZUnit" } + def @@BackEnd { @Code "@BackEnd" } + def @@Background { @Code "@Background" } + def @@Begin { @Code "@Begin" } + def @@BeginHeaderComponent { @Code "@BeginHeaderComponent" } + def @@Break { @Code "@Break" } + def @@Case { @Code "@Case" } + def @@Char { @Code "@Char" } + def @@ClearHeaderComponent { @Code "@ClearHeaderComponent" } + def @@Common { @Code "@Common" } + def @@CurrLang { @Code "@CurrLang" } + def @@CurrFamily { @Code "@CurrFamily" } + def @@CurrFace { @Code "@CurrFace" } + def @@CurrYUnit { @Code "@CurrYUnit" } + def @@CurrZUnit { @Code "@CurrZUnit" } + def @@Database { @Code "@Database" } + def @@End { @Code "@End" } + def @@EndHeaderComponent { @Code "@EndHeaderComponent" } + def @@Enclose { @Code "@Enclose" } + def @@Font { @Code "@Font" } + def @@ForceGalley { @Code "@ForceGalley" } + def @@Galley { @Code "@Galley" } + def @@Graphic { @Code "@Graphic" } + def @@HAdjust { @Code "@HAdjust" } + def @@HCover { @Code "@HCover" } + def @@HContract { @Code "@HContract" } + def @@HExpand { @Code "@HExpand" } + def @@HLimited { @Code "@HLimited" } + def @@High { @Code "@High" } + def @@HScale { @Code "@HScale" } + def @@HShift { @Code "@HShift" } + def @@HSpan { @Code "@HSpan" } + def @@Include { @Code "@Include" } + def @@IncludeGraphic { @Code "@IncludeGraphic" } + def @@KernShrink { @Code "@KernShrink" } + def @@Key { @Code "@Key" } + def @@Language { @Code "@Language" } + def @@LClos { @Code "@LClos" } + def @@LEnv { @Code "@LEnv" } + def @@LInput { @Code "@LInput" } + def @@LUse { @Code "@LUse" } + def @@LVis { @Code "@LVis" } + def @@Meld { @Code "@Meld" } + def @@Merge { @Code "@Merge" } + def @@Moment { @Code "@Moment" } + def @@Next { @Code "@Next" } + def @@NotRevealed { @Code "@NotRevealed" } + def @@Null { @Code "@Null" } + def @@OneCol { @Code "@OneCol" } + def @@OneOf { @Code "@OneOf" } + def @@OneRow { @Code "@OneRow" } + def @@Open { @Code "@Open" } + def @@Outline { @Code "@Outline" } + def @@PAdjust { @Code "@PAdjust" } + def @@PageLabel { @Code "@PageLabel" } + def @@PlainGraphic { @Code "@PlainGraphic" } + def @@PrependGraphic { @Code "@PrependGraphic" } + def @@RawVerbatim { @Code "@RawVerbatim" } + def @@Rotate { @Code "@Rotate" } + def @@Rump { @Code "@Rump" } + def @@Insert { @Code "@Insert" } + def @@Scale { @Code "@Scale" } + def @@SetColor { @Code "@SetColor" } + def @@SetColour { @Code "@SetColour" } + def @@SetHeaderComponent { @Code "@SetHeaderComponent" } + def @@Space { @Code "@Space" } + def @@StartHSpan { @Code "@StartHSpan" } + def @@StartVSpan { @Code "@StartVSpan" } + def @@StartHVSpan { @Code "@StartHVSpan" } + def @@SysDatabase { @Code "@SysDatabase" } + def @@SysInclude { @Code "@SysInclude" } + def @@SysIncludeGraphic { @Code "@SysIncludeGraphic" } + def @@SysPrependGraphic { @Code "@SysPrependGraphic" } + def @@Tag { @Code "@Tag" } + def @@Tagged { @Code "@Tagged" } + def @@Underline { @Code "@Underline" } + def @@Use { @Code "@Use" } + def @@VAdjust { @Code "@VAdjust" } + def @@VContract { @Code "@VContract" } + def @@VCover { @Code "@VCover" } + def @@VExpand { @Code "@VExpand" } + def @@Verbatim { @Code "@Verbatim" } + def @@VLimited { @Code "@VLimited" } + def @@VScale { @Code "@VScale" } + def @@VShift { @Code "@VShift" } + def @@VSpan { @Code "@VSpan" } + def @@Wide { @Code "@Wide" } + def @@Yield { @Code "@Yield" } + def @@YUnit { @Code "@YUnit" } + def @@ZUnit { @Code "@ZUnit" } ################################################### diff --git a/doc/expert/pre b/doc/expert/pre index 02320cc..c21b866 100644 --- a/doc/expert/pre +++ b/doc/expert/pre @@ -34,6 +34,7 @@ @Include { pre_mome } @Include { pre_null } @Include { pre_gall } +@Include { pre_head } @Include { pre_notr } @Include { pre_cros } @Include { pre_tagg } diff --git a/doc/expert/pre_head b/doc/expert/pre_head new file mode 100644 index 0000000..eb3d397 --- /dev/null +++ b/doc/expert/pre_head @@ -0,0 +1,113 @@ +@Section + @Title { "@BeginHeaderComponent", "@EndHeaderComponent", +"@SetHeaderComponent", and "@ClearHeaderComponent" } + @Tag { header_comp } +@Begin +@PP +Informally, header components are running headers that appear at the +header.component @Index { Header component of galley } +top of the displayed segments of galleys. They are used, for example, +by the @Code "@Tbl" table formatting package to place running headers +at the top of each page of a multi-page table, after the first page. +@PP +Formally, a header component of a galley is an ordinary component of +a galley (Section {@NumberOf targets}) together with an indication +that the component is a header component. When printed, a header +component looks exactly like it would have done as an ordinary +component; the difference is in whether the component is printed at all, +and if so where. +@PP +Every ordinary component of every galley has associated with it a +sequence of zero or more header components. Whenever a new target +is attached to which does not itself occupy an entire component +of its galley, copies of the header components associated with the +first ordinary component to be promoted into that target are +promoted into it first. +@PP +The condition `which does not itself occupy an entire component +of its galley' ensures that, for example, when part of a section +has header components, these are not printed where the section is +promoted into its chapter, but rather where the chapter is promoted +onto pages. If the target occupies the whole component, then the +incoming galley will not split at all, so headers would be of no +interest there. +@PP +The one remaining question is `How is the sequence of header +components of each ordinary component determined?' By default, +the header components of one component are the same as those +of the previous component. We can show this graphically as +follows: +@ID lines @Break @Eq { +C sub i : H sub 1 , H sub 2 ,..., H sub n +"/" +C sub i+1 : H sub 1 , H sub 2 ,..., H sub n +} +which may be read: `If ordinary component @E { C sub i } has +header component sequence @E { H sub 1 , H sub 2 ,..., H sub n }, +then its successor component @E { C sub i+1 } has header component +sequence @E { H sub 1 , H sub 2 ,..., H sub n } also.' Using this +notation, we may now define the four symbols that affect header +component sequences: +@ID lines @Break @Eq { +C sub i : H sub 1 , H sub 2 ,..., H sub n +"/" +gap `` @@BeginHeaderComponent `` H sub n+1 +"/" +C sub i+1 : H sub 1 , H sub 2 ,..., H sub n , H sub n+1 +} +That is, @@BeginHeaderComponent occupying an entire +begin.header.component.sym @Index { @@BeginHeaderComponent symbol } +component appends a header component to the sequence of the +following ordinary components. When printed, this header +component is separated by @E { gap } from the following component; +if @E { gap } is empty it denotes @Code { 0ie } as usual with +concatenation gaps. The appearance of the header component will be +exactly as it would have been had it occurred alone at that point, +rather than after @@BeginHeaderComponent. +@PP +Next comes @@EndHeaderComponent: +@ID lines @Break @Eq { +C sub i : H sub 1 , H sub 2 ,..., H sub n , H sub n+1 +"/" +@@EndHeaderComponent +"/" +C sub i+1 : H sub 1 , H sub 2 ,..., H sub n +} +That is, @@EndHeaderComponent (which has no parameters) occupying an +end.header.component.sym @Index { @@EndHeaderComponent symbol } +entire component deletes the last header component. If the sequence is +empty, a warning message is printed and it remains +empty. @@BeginHeaderComponent and @@EndHeaderComponent are naturally +used in matching (possibly nested) pairs, to introduce and subsequently +retract a header component. +@PP +Next comes @@SetHeaderComponent: +@ID lines @Break @Eq { +C sub i : H sub 1 , H sub 2 ,..., H sub n +"/" +gap `` @@SetHeaderComponent `` H sub n+1 +"/" +C sub i+1 : H sub n+1 +} +@@SetHeaderComponent clears any current header components +set.header.component.sym @Index { @@SetHeaderComponent symbol } +and replaces them by one of its own. Finally we have +@@ClearHeaderComponent: +@ID lines @Break @Eq { +C sub i : H sub 1 , H sub 2 ,..., H sub n +"/" +@@ClearHeaderComponent +"/" +C sub i+1 : +} +This symbol clears any header components, leaving the sequence empty. These +clear.header.component.sym @Index { @@ClearHeaderComponent symbol } +last two symbols combine less cleanly than the first two (either will +wreck any enclosing @@BeginHeaderComponent -- @@EndHeaderComponent pair), +but they are useful in situations where the range of one header is +terminated by the start of the range of the next. +@PP +All four symbols yield the value @@Null where they appear. If they +do not occupy entire components of their galley, they are silently +ignored. +@End @Section diff --git a/doc/expert/preface b/doc/expert/preface index 9e37913..826487f 100644 --- a/doc/expert/preface +++ b/doc/expert/preface @@ -21,7 +21,7 @@ This manual presents Version 3 of Basser Lout, publicly released in September 1994 @Cite { $kingston1995lout.program }. This manual was rendered into PostScript postscript @Index { PostScript } -by Version 3.18 of the Basser Lout interpreter, using the symbols +by Version 3.19 of the Basser Lout interpreter, using the symbols described in the User's Guide @Cite { $kingston1995lout.user }. @DP @Heading { Acknowledgment. } Version 3 has benefited from hundreds of |