n-t-roff / heirloom-doctools

The Heirloom Documentation Tools: troff, nroff, and related utilities
http://n-t-roff.github.io/heirloom/doctools.html
Other
127 stars 23 forks source link

.mso incorrectly initializes page #97

Open subrook opened 3 years ago

subrook commented 3 years ago

The .mso macro (as provided with the -mg option) is intended to emulate the groff .mso request, but it fails on an important aspect of this: maintaining the top margin of the first page.

Consider a simple input file:

.tm Top: vertical position is \n(nl
Hello.
.tm First line of output: vertical position is \n(nl

If the troff command line specifies a macro package that sets a default top margin, such as ms, this margin is reflected in the stderr output:

Top: vertical position is -1
First line of output: vertical position is 72000

In groff, loading a macro package first thing with .mso (instead of specifying it on the command line) retains this behavior. But Heirloom troff's .mso macro does not; this modified input file:

.tm Top: vertical position is \n(nl
.mso s
.tm After .mso: vertical position is \n(nl
Hello.
.tm First line of output: vertical position is \n(nl

prints to stderr:

Top: vertical position is -1
After .mso: vertical position is 0
First line of output: vertical position is 0

Thus the top margin set by the ms package is not respected on the first page of output. This is also true of the me and mm packages.