diff options
Diffstat (limited to 'doc/expert/det_size')
-rw-r--r-- | doc/expert/det_size | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/doc/expert/det_size b/doc/expert/det_size new file mode 100644 index 0000000..aea894b --- /dev/null +++ b/doc/expert/det_size @@ -0,0 +1,145 @@ +@Section + @Title { The style and size of objects } + @Tag { size } +@Begin +@PP +This section explains how Lout determines the style and size of each +object. Together, these attributes determine the object's final +appearance in the output. +style @Index { Style of an object } +@PP +The style of an object comprises the following: +@BulletList +@ListItem { Which font family, face and size to use (also defining the +@Code f unit); } +@ListItem { Whether small capitals are in effect or not; } +@ListItem { What gap to replace a single space between two objects by (also +defining the @Code s unit); } +@ListItem { The interpretation to place on white space separating +two objects ({@Code lout}, {@Code compress}, {@Code separate}, {@Code troff}, +or {@Code tex} as in Section {@NumberOf space}); } +@ListItem { The current value of the @Code y and @Code z units of +measurement (Section {@NumberOf yunit}); } +@ListItem { The kind of paragraph breaking to employ ({@Code adjust}, +{@Code ragged}, etc.) } +@ListItem { What gap to insert between the lines of paragraphs +(also defining the @Code v unit); } +@ListItem { Whether to permit hyphenation or not; } +@ListItem { What colour the object is to appear in; } +@ListItem { The language of the object; } +@ListItem { Whether @@VAdjust, @@HAdjust and @@PAdjust are in effect. } +@EndList +The style of an object depends on where it appears in the final +document. For example, the style of a parameter depends on where it is +used; the style of a galley is the style of the first target that it +attempts to attach itself to. Of course, the style of any object can be +changed by using the @@Font, @@Break, @@Space, @@SetColour or +@@SetColor, and @@Language symbols. +@PP +There are no standard default values for style, except that small capitals +are initially off, the interpretation of white space is initially {@Code +lout}, and the values of the @Code y and @Code z units are zero. Therefore +one must ensure that the root galley or each of its components is enclosed +in @@Font, @@Break, @@SetColour or @@SetColor, and @@Language symbols. From +there the style is passed to incoming galleys and the objects within +them. Enclosure in @@Space is not required because the @Code "s" unit +is also set by @@Font (Section {@NumberOf space}). +@PP +width. @Index { Width of an object } +height. @Index { Height of an object } +size. @Index { Size of an object } +The remainder of this section explains how the size of each object (its +width and height on the printed page) is determined. We will treat width +only, since height is determined in exactly the same way, except that the +complications introduced by paragraph breaking are absent. +@PP +With three exceptions (see below), the width of an object is as large as +it possibly could be without violating a @@Wide symbol or intruding into +the space occupied by neighbouring gaps or objects. As an aid to +investigating this rule, we will use the definition +@ID @OneRow @Code { +"def @TightBox right x" +"{" +" \"0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke\"" +" @Graphic x" +"}" +} +which draws a box around the boundary of its right parameter (Section +{@NumberOf graphic}) with no margin. The result of +@ID @Code { +"5c @Wide @TightBox metempsychosis" +} +is +@ID { +5c @Wide @TightBox metempsychosis +} +The widest that @Code "@TightBox metempsychosis" could possibly be is five +centimetres, and accordingly that is its width. The same applies to +{@Code metempsychosis}, which is five centimetres wide as well. Note +carefully that there is no object in this example whose width is equal +to the sum of the widths of the letters of {@Code metempsychosis}. +@PP +The first of the three exceptions to the `as wide as possible' rule is the +@@HContract symbol, which causes the width of its right parameter to be +reduced to a reasonable minimum (a formal definition will not be attempted): +@ID @OneRow @Code { +"5c @Wide @HContract @TightBox metempsychosis" +} +produces +@ID { +5c @Wide @HContract @TightBox metempsychosis +} +The object @Code "@HContract @TightBox metempsychosis" is still five centimetres +wide, but the object @Code "@TightBox metempsychosis" has been reduced. +@PP +The second of the three exceptions is the horizontal concatenation symbol +@Code "|" (and also {@Code "&"}). Consider this example: +@ID @OneRow @Code { +"5c @Wide @TightBox { A |1c B |1c C }" +} +As usual, the right parameter of @@Wide is five centimetres wide, and +the result looks like this: +@ID { +5c @Wide @TightBox { A |1c B |1c C } +} +Lout has to apportion the size minus inter-column gaps among the three +columns. +@PP +If the columns are wide enough to require paragraph breaking, Lout will +assign sizes to the columns in such a way as to leave narrow columns +unbroken and break wider columns to equal width, occupying the full +size. Otherwise, paragraph breaking is not required, and each column +will be assigned a reasonable minimum size in the manner of @@HContract, +except that the last column receives all the leftover width. For example, +@ID @OneRow @Code { +"5c @Wide { @TightBox A |1c @TightBox B |1c @TightBox C }" +} +has result +@ID { +5c @Wide { @TightBox A |1c @TightBox B |1c @TightBox C } +} +If it is desired that the leftover width remain unused, rather than +going into the last column, an empty column can be appended, or the last +column can be enclosed in @@HContract. Two other ways to apportion the +leftover width are provided by the @@HExpand and @@HAdjust symbols +(Sections {@NumberOf hexpand} and {@NumberOf hadjust}). +@PP +The third and final exception to the `as wide as possible' rule concerns +the components of the root galley. Each is considered to be enclosed +root.galley.size @SubIndex { size of components of } +in @@HContract and @@VContract symbols. +@PP +Up to this point we have treated width as a single quantity, but of +course it has two parts: width to left and right of the mark. The +`as wide as possible' rule applies to both directions: +@ID @Code { +"@HContract { @TightBox 953^.05 /0.5c @TightBox 2^.8286 }" +} +has result +@ID { +@HContract { @TightBox 953^.05 /0.5c @TightBox 2^.8286 } +} +Leftover width usually goes to the right, as we have seen, but here some +width was available only to the left of {@Code "2.8286"} owing to the +column mark alignment. +@End @Section |