I've hit a wall on the block column allocation thing.  I'm pretty sure
my C++ for counting block-containing columns is correct and that the general
theory of the emitted troff is sound (Werner thought so too
when I described it).  I've checked in logic that will enable anyone
to try out the new rule under the global flag 'experimental'.

But it doesn't work.  It leads to block columns widths that are too large.
The problem almost has to be in the troff generated by one of these 
two lines:

table.cpp:691 -- the block column width computation itself
 
table.cpp:2142 -- computation of available line width once non-block 
                  columns have been laid out.

My suspicions now focus on line 2142, but staring at it hasn't been 
getting me anywhere.  I'm getting stale and frustrated; I need to go work
on something else for a while.

I've enclosed the test load I use. To see the behavor under the existing
default, remove the 'experimental' flags from the table headers.

-- 
                <a href="http://www.catb.org/~esr/";>Eric S. Raymond</a>
.\"
.\" $Id: groff_mm.man,v 2.22 2007/02/06 10:34:51 esr Exp $
.\"
.TH GROFF_MM @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
.
.
.SH NAME
.
groff_mm \- groff mm macros
.
.
.SH SYNOPSIS
.
.B groff
.B [EMAIL PROTECTED]@m
[
.IR options .\|.\|.\&
]
[
.IR files .\|.\|.\&
]
.
.
.SH DESCRIPTION
.
.RS
.LP
.TS 
tab(@) experimental;
lb lb
l l.
[EMAIL PROTECTED]
[EMAIL PROTECTED], 1, 2, 3, .\|.\|.
[EMAIL PROTECTED], 001, 002, 003, .\|.\|.
[EMAIL PROTECTED], i, ii, iii, iv, .\|.\|.
[EMAIL PROTECTED], I, II, III, IV, .\|.\|.
[EMAIL PROTECTED], a, b, c, .\|.\|., z, aa, ab, .\|.\|.
[EMAIL PROTECTED], A, B, C, .\|.\|., Z, AA, AB, .\|.\|.
.TE
.RE
.
.TP
.BI AL\  \fR[\fPtype\ \fR[\fPtext-indent\  \fR[\fP1\fR]]]\fP
Start auto-increment list.
Items are numbered beginning with one.
The
.I type
argument controls the format of numbers.
.
.RS
.IP
.TS
tab(@) experimental;
lb lb
l l.
[EMAIL PROTECTED]
[EMAIL PROTECTED] (the default)
[EMAIL PROTECTED] letters (A-Z)
[EMAIL PROTECTED] letters (a-z)
[EMAIL PROTECTED] roman
[EMAIL PROTECTED] roman
.TE
.RE
.
.TP
.BI AS\  "\fR[\fParg \fR[\fPindent\fR]]\fP"
Abstract start.
Indentation is specified in `ens',
but scaling is allowed.
Argument
.I arg
controls where the abstract is printed.
.
.RS
.TS
tab(@) experimental;
lb lb
l l.
[EMAIL PROTECTED]
[EMAIL PROTECTED]
Abstract is printed on page\~1 and on the cover sheet if used in the
released-paper style (\fBMT 4\fP),
otherwise it is printed on page\~1 without a cover sheet.
T}
[EMAIL PROTECTED] is only printed on the cover sheet (\fBMT 4\fP only).
[EMAIL PROTECTED]
Abstract is printed only on the cover sheet (other than \fBMT 4\fP only).
The cover sheet is printed without a need for \fBCS\fP.
T}
.TE
.RE
.
.IP
.B De register
.
.RS
.IP
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED] special, this is the default.
[EMAIL PROTECTED]
A page eject occurs after each printed display,
giving only one display per page and no text following it.
T}
.TE
.RE
.
.IP
.B Df register
.
.RS
.IP
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED]
Displays are printed at the end of each section (when section-page
numbering is active) or at the end of the document.
T}
[EMAIL PROTECTED]
A new display is printed on the current page if there is enough space,
otherwise it is printed at the end of the document.
T}
[EMAIL PROTECTED]
One display is printed at the top of each page or column
(in multi-column mode).
T}
[EMAIL PROTECTED]
Print one display if there is enough space for it,
otherwise it is printed at the top of the next page or column.
T}
[EMAIL PROTECTED]
Print as many displays as possible in a new page or column.
A page break occurs between each display if
.B De
is not zero.
T}
[EMAIL PROTECTED]
Fill the current page with displays and the rest beginning at a new page
or column.
(This is the default.)
A page break occurs between each display
if \fBDe\fP is not zero.
T}
.TE
.RE
.RE
.
.IP
.B format
.
.RS
.IP
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED] indentation.
[EMAIL PROTECTED] indentation.
[EMAIL PROTECTED] indentation.
[EMAIL PROTECTED]
Indent text with the value of number register
.BR Si .
T}
[EMAIL PROTECTED] each line.
[EMAIL PROTECTED] the whole display as a block.
[EMAIL PROTECTED] the lines.
[EMAIL PROTECTED] the whole display as a block.
.TE
.RE
.
.IP
.B fill
.
.RS
.IP
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED] turned off.
[EMAIL PROTECTED] turned off.
[EMAIL PROTECTED] turned off.
[EMAIL PROTECTED] turned on.
.TE
.RE
.
.IP
.B flag
.
.RS
.IP
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED]
.I override
is a prefix to the number.
T}
[EMAIL PROTECTED]
.I override
is a prefix to the number.
T}
[EMAIL PROTECTED]
.I override
is a suffix to the number.
T}
[EMAIL PROTECTED]
.I override
replaces the number.
T}
.TE
.RE
.
.IP
.B strings available to EOP
.RS
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED] of \fBPF\fP
[EMAIL PROTECTED] of \fBEF\fP
[EMAIL PROTECTED] of \fBOF\fP
.TE
.RE
.
.TP
.BI FD\  \fR[\fParg\  \fR[\fP1\fR]]\fP
Footnote default format.
Controls the hyphenation (hyphen),
right margin justification (adjust),
and indentation of footnote text (indent).
It can also change the label justification (ljust).
.
.RS
.IP
.TS
tab(@) experimental;
lb lb lb lb lb
l l l l l.
[EMAIL PROTECTED]@[EMAIL PROTECTED]@ljust
[EMAIL PROTECTED]@[EMAIL PROTECTED]@left
[EMAIL PROTECTED]@[EMAIL PROTECTED]@left
[EMAIL PROTECTED]@[EMAIL PROTECTED]@left
[EMAIL PROTECTED]@[EMAIL PROTECTED]@left
[EMAIL PROTECTED]@[EMAIL PROTECTED]@left
[EMAIL PROTECTED]@[EMAIL PROTECTED]@left
[EMAIL PROTECTED]@[EMAIL PROTECTED]@left
[EMAIL PROTECTED]@[EMAIL PROTECTED]@left
[EMAIL PROTECTED]@[EMAIL PROTECTED]@right
[EMAIL PROTECTED]@[EMAIL PROTECTED]@right
[EMAIL PROTECTED]@[EMAIL PROTECTED]@right
[EMAIL PROTECTED]@[EMAIL PROTECTED]@right
.TE
.RE
.
.IP
.B Argument
.
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED] numerals.
[EMAIL PROTECTED] numerals with leading zeroes, one or more.
[EMAIL PROTECTED] alphabetic
[EMAIL PROTECTED] alphabetic
[EMAIL PROTECTED] roman numerals
[EMAIL PROTECTED] roman numerals
[EMAIL PROTECTED] numerals.
.TE
.
.IP
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED] numbers
[EMAIL PROTECTED] marks
[EMAIL PROTECTED]
Both page numbers and header marks, 
separated with a tab character.
T}
.TE
.
.IP
.B type
.
.RS
.IP
.br
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED]
[EMAIL PROTECTED])
3@(x)
[EMAIL PROTECTED]
5@<x>
[EMAIL PROTECTED]
.TE
.RE
.
.IP
All lists begin with a list initialization macro,
.BR LB .
There are, however, seven predefined list types to make lists easier to use.
They all call
.B LB
with different default values.
.
.RS
.IP
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED] Incremented List
[EMAIL PROTECTED] List
[EMAIL PROTECTED] List
[EMAIL PROTECTED] List
[EMAIL PROTECTED] List
[EMAIL PROTECTED] List
[EMAIL PROTECTED] Variable List.
.TE
.RE
.
.IP
These lists are described at other places in this manual.
See also
.BR LB .
.
.TP
.BI LT\  \fR[\fIarg\fR]\fI
Format a letter in one of four different styles depending
on the argument.
See also section
.BR INTERNALS .
.
.RS
.IP
.TS
tab(@) experimental;
lb lb
l l.
[EMAIL PROTECTED]
[EMAIL PROTECTED]
Blocked.
Date line, return address, writer's address and closing
begins at the center of the line.
All other lines begin at the left margin.
T}
[EMAIL PROTECTED]
Semi-blocked.
Same as blocked,
except that the first line in every paragraph is indented five spaces.
T}
[EMAIL PROTECTED]
Full-blocked.
All lines begin at the left margin.
T}
[EMAIL PROTECTED]
Simplified.
Almost the same as the full-blocked style.
Subject and the writer's identification are printed in all-capital.
T}
.TE
.RE
.
.TP
.BI LO\  "type \fR[\fParg\fR]\fP"
Specify options in letter (see
.BR .LT ).
This is a list of the standard options:
.
.RS
.IP
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED]
Confidential notation.
Prints `CONFIDENTIAL' on the second line below the date line.
Any argument replaces `CONFIDENTIAL'.
See also string variable
.BR LetCN .
T}
[EMAIL PROTECTED]
Reference notation.
Prints `In reference to:' and the argument two lines below the date line.
See also string variable
.BR LetRN .
T}
[EMAIL PROTECTED]
Attention.
Prints `ATTENTION:' and the argument below the inside address.
See also string variable
.BR LetAT .
T}
[EMAIL PROTECTED]
Salutation.
Prints `To Whom It May Concern:' or the argument if it was present.
The salutation is printed two lines below the inside address.
See also string variable
.BR LetSA .
T}
[EMAIL PROTECTED]
Subject line.
Prints the argument as subject prefixed with `SUBJECT:'
two lines below the inside address,
except in letter type `SP',
where the subject is printed in all-capital without any prefix.
See also string variable
.BR LetSJ .
T}
.TE
.RE
.
.IP
.B arg
.
.RS
.IP
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED] memorandum, no type printed.
[EMAIL PROTECTED] with `MEMORANDUM FOR FILE' printed.
[EMAIL PROTECTED] with `PROGRAMMER'S NOTES' printed.
[EMAIL PROTECTED] with `ENGINEER'S NOTES' printed.
[EMAIL PROTECTED] paper style.
[EMAIL PROTECTED] letter style.
.TE
.RE
.
.TP
.BI NS\  \fR[\fParg\  \fR[\fP1\fR]]\fP
Print different types of notations.
The argument selects between the predefined type of notations.
If the second argument is available, 
then the argument becomes the entire notation.
If the argument doesn't select a predefined type,
it is printed as `Copy (\fIarg\fP) to'.
It is possible to add more standard notations,
see the string variables
.B Letns
and
.BR Letnsdef .
.
.RS
.IP
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED]
[EMAIL PROTECTED] To
[EMAIL PROTECTED] To
[EMAIL PROTECTED] To (with att.\&) to
[EMAIL PROTECTED] To (without att.\&) to
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED] separate cover
[EMAIL PROTECTED] to
[EMAIL PROTECTED] to
[EMAIL PROTECTED] (with atts.\&) to
[EMAIL PROTECTED] (without atts.\&) to
[EMAIL PROTECTED] Only to
[EMAIL PROTECTED] Memorandum to
[EMAIL PROTECTED]
.TE
.RE
.
.IP
.B arg2
.
.RS
.IP
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED]
The reference page is printed on a separate page.
This is the default.
T}
[EMAIL PROTECTED] not eject page after the list.
[EMAIL PROTECTED] not eject page before the list.
[EMAIL PROTECTED] not eject page before and after the list.
.TE
.RE
.
.IP
.B strings available to TP
.RS
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED] of \fBPH\fP
[EMAIL PROTECTED] of \fBEH\fP
[EMAIL PROTECTED] of \fBOH\fP
.TE
.RE
.
.TP
.BI VERBON\  "\fR[\fPflag \fR[\fPpoint-size \fR[\fPfont\fR]]]\fP"
Begin verbatim output using Courier font.
Usually for printing programs.
All characters have equal width.
The point size can be changed with the second argument.
By specifying a third argument it is possible to use another
font instead of Courier.
.I flag
controls several special features.
Its value is the sum of all wanted features.
.
.RS
.IP
.TS
tab(@) experimental;
lb lb
l l.
[EMAIL PROTECTED]
[EMAIL PROTECTED]
Disable the escape character (\[rs]).
This is normally turned on during verbose output.
T}
[EMAIL PROTECTED] an empty line before the verbose text.
[EMAIL PROTECTED] an empty line after the verbose text.
[EMAIL PROTECTED]
Print the verbose text with numbered lines.
This adds four digit-sized spaces in the beginning of each line.
Finer control is available with the string variable
.BR Verbnm .
It contains all arguments to the
.BR troff (@MAN1EXT@)
command
.BR .nm ,
normally `1'.
T}
[EMAIL PROTECTED]
Indent the verbose text by `5n'.
This is controlled by the number-variable
.B Verbin
(in units).
T}
.TE
.RE
.
.TP
.BI WC\  "\fR[\fPformat1\fR] [\fPformat2\fR] [.\|.\|.]\fP"
Footnote and display width control.
.
.RS
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED]
Set default mode which is equal to using the options
.BR \-WF ,
.BR \-FF ,
.BR \-WD ,
and
.BR FB .
T}
[EMAIL PROTECTED]
Wide footnotes, wide also in two-column mode.
T}
[EMAIL PROTECTED] footnote width, follow column mode.
[EMAIL PROTECTED]
All footnotes gets the same width as the first footnote encountered.
T}
[EMAIL PROTECTED]
Normal footnotes, width follows \fBWF\fP and \fB-WF\fP.
T}
[EMAIL PROTECTED]
Wide displays, wide also in two-column mode.
T}
[EMAIL PROTECTED]
Normal display width, follow column mode.
T}
[EMAIL PROTECTED]
Floating displays generates a line break when printed on the current
page.
T}
[EMAIL PROTECTED]
Floating displays does not generate line break.
T}
.TE
.RE
.
.TP
.B Letns
is an array containing the different strings used in
.BR .NS .
It is really a number of string variables prefixed with
.BR Letns! .
If the argument doesn't exist,
it is included between
.B ()
with
.B Letns!copy
as a prefix and
.B Letns!to
as a suffix.
Observe the space after `Copy' and before `to'.
.
.RS
.IP
.TS
tab(@) experimental;
lb lb
l l.
[EMAIL PROTECTED]
[EMAIL PROTECTED] to
[EMAIL PROTECTED] (with att.\&) to
[EMAIL PROTECTED] (without att.\&) to
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED] separate cover
[EMAIL PROTECTED] to
[EMAIL PROTECTED] to
[EMAIL PROTECTED] (with atts.\&) to
[EMAIL PROTECTED] (without atts.\&) to
[EMAIL PROTECTED] Only to
[EMAIL PROTECTED] Memorandum to
[EMAIL PROTECTED]
[EMAIL PROTECTED] \[rs]"
Letns!to@" to
.TE
.RE
.
.TP
.B Tcst
Contains the current status of the table of contents and list of figures,
etc.
Empty outside of
.BR .TC .
Useful in user-defined macros like
.BR .TP .
.
.RS
.IP
.TS
tab(@) experimental;
lb lb
l l.
[EMAIL PROTECTED]
[EMAIL PROTECTED] of contents
[EMAIL PROTECTED] of figures
[EMAIL PROTECTED] of tables
[EMAIL PROTECTED] of equations
[EMAIL PROTECTED] of exhibits
[EMAIL PROTECTED]
.TE
.RE
.
.TP
.B Hi
Heading temporary indent.
A number in the range 0 to 2,
with a default value of\~1.
.
.RS
.IP
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED] indentation, left margin
[EMAIL PROTECTED]
indent to the right, similar to
.RB ` ".P 1" '
T}
[EMAIL PROTECTED] to line up with text part of preceding heading
.TE
.RE
.
.TP
.B Ht
Heading numbering type.
.
.RS
.IP
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED] levels (1.1.1, 1.1.2, etc.)
[EMAIL PROTECTED] level
.TE
.RE

.TP
.B Hy
Hyphenation status of text body.
.
.RS
.IP
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED] hyphenation
[EMAIL PROTECTED] on, set to value\~14
.TE
.RE
.
.TP
.B Limsp
A flag controlling the insertion of space between prefix and mark in
automatic lists
.RB ( .AL ).
.
.RS
.IP
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED] space
[EMAIL PROTECTED] space
.TE
.RE
.
.TP
.B N
Page numbering style.
.
.RS
.IP
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED] header for all pages.
[EMAIL PROTECTED] replaces footer on first page, header is empty.
[EMAIL PROTECTED] header is removed on the first page.
[EMAIL PROTECTED]' numbering style enabled.
[EMAIL PROTECTED] header is removed on the first page.
[EMAIL PROTECTED]' and `section-figure' numbering style enabled.
.TE
.RE
.
.TP
.B Np
A flag to control whether paragraphs are numbered.
.
.RS
.IP
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED] numbered
[EMAIL PROTECTED] in first-level headings.
.TE
.RE
.
.TP
.B Of
Format of figure, table, exhibit, and equation titles.
.
.RS
.IP
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED] \[dq]
[EMAIL PROTECTED] - \[dq]
.TE
.RE
.
.TP
.B Pgps
A flag to control whether header and footer point size should follow
the current settings or just change when the header and footer are defined.
.
.RS
.IP
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED]
Point size only changes to the current setting when
.BR .PH ,
.BR .PF ,
.BR .OH ,
.BR .EH ,
.BR .OF ,
or
.B .OE
is executed.
T}
[EMAIL PROTECTED]
Point size changes after every
.BR .S .
This is the default.
T}
.TE
.RE
.
.TP
.B Pt
Paragraph type.
.
.RS
.IP
.TS
tab(@) experimental;
l l.
[EMAIL PROTECTED]
[EMAIL PROTECTED] paragraphs
[EMAIL PROTECTED]
indented paragraphs except after
.BR .H ,
.BR .DE ,
or
.BR .LE .
T}
.TE
.RE
.
.\" Local Variables:
.\" mode: nroff
.\" coding: latin-1
.\" End:

Reply via email to