aboutsummaryrefslogtreecommitdiffstats
path: root/doc/expert
diff options
context:
space:
mode:
Diffstat (limited to 'doc/expert')
-rw-r--r--doc/expert/README2
-rw-r--r--doc/expert/det_gall9
-rw-r--r--doc/expert/det_lexi8
-rw-r--r--doc/expert/mydefs174
-rw-r--r--doc/expert/pre1
-rw-r--r--doc/expert/pre_head113
-rw-r--r--doc/expert/preface2
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