URL: <https://savannah.gnu.org/bugs/?67401>
Summary: [ms] footer line misplaced by one vee
Group: GNU roff
Submitter: gbranden
Submitted: Thu 07 Aug 2025 06:26:32 AM GMT
Category: Macro package ms
Severity: 3 - Normal
Item Group: Feature change
Status: In Progress
Privacy: Public
Assigned to: gbranden
Open/Closed: Open
Discussion Lock: Any
Planned Release: None
_______________________________________________________
Follow-up Comments:
-------------------------------------------------------
Date: Thu 07 Aug 2025 06:26:32 AM GMT By: G. Branden Robinson <gbranden>
This is an old bug, affecting _groff ms_ as far back as 1.22.3.
Unfortunately it's also a well-entrenched one and could change formatting of
user documents, so I'm marking it as a "Feature change"; I'll have to "NEWS"
it.
Observe:
$ cat ATTIC/footer-placement.ms
.nr LL 65n
.nr PO 0
.P1
.ds CH Header
.ds CF Footer
.de pp
.LP
Sed ut perspiciatis, unde omnis iste natus error sit voluptatem
accusantium doloremque laudantium, totam rem aperiam eaque ipsa, quae ab
illo inventore veritatis et quasi architecto beatae vitae dicta sunt,
explicabo. Nemo enim ipsam voluptatem, quia voluptas sit, aspernatur
aut odit aut fugit, sed quia consequuntur magni dolores eos, qui ratione
voluptatem sequi nesciunt, neque porro quisquam est, qui dolorem ipsum,
quia dolor sit amet consectetur adipiscivelit, sed quia non-numquam eius
modi tempora incidunt, ut labore et dolore magnam aliquam quaerat
voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam
corporis suscipitlaboriosam, nisi ut aliquid ex ea commodi consequatur?
Quis autem vel eum iure reprehenderit, qui inea voluptate velit esse,
quam nihil molestiae consequatur, vel illum, qui dolorem eum fugiat, quo
voluptas nulla pariatur? At vero eos et accusamus et iusto odio
dignissimos ducimus, qui blanditiis praesentium voluptatum deleniti
atque corrupti, quos dolores et quas molestias excepturi sint, obcaecati
cupiditate non-provident, similique sunt in culpa, qui officia deserunt
mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum
facilis est et expedita distinctio. Nam libero tempore, cum soluta
nobis est eligendi optio, cumque nihil impedit, quo minus id, quod
maxime placeat, facere possimus, omnis voluptas assumenda est, omnis
dolor repellendus. Temporibus autem quibusdam et aut officiis debitis
aut rerum necessitatibus saepe eveniet, ut et voluptates repudiandae
sint et molestiae non-recusandae.
..
.pp
.pp
$ ~/groff-HEAD/bin/nroff -ms ATTIC/footer-placement.ms | nl -ba | tail
57 sint et molestiae non‐recusandae.
58
59
60
61
62
63
64 Footer
65
66
There is a (nominally) half-inch margin (=3v at 10-on-12 point type) at the
top of the page but at the bottom, the margin is less.
The bug lingers...
$ ~/groff-1.22.4/bin/nroff -ms ATTIC/footer-placement.ms | nl -ba | tail
57 sint et molestiae non‐recusandae.
58
59
60
61
62
63
64 Footer
65
66
$ ~/groff-1.23.0/bin/nroff -ms ATTIC/footer-placement.ms | nl -ba | tail
57 sint et molestiae non‐recusandae.
58
59
60
61
62
63
64 Footer
65
66
...and affects HEAD.
$ ~/groff-HEAD/bin/nroff -ms ATTIC/footer-placement.ms | nl -ba | tail
57 sint et molestiae non‐recusandae.
58
59
60
61
62
63
64 Footer
65
66
What do other _troff_s do?
$ ./bin/nroff -ms ./footer-placement.ms | nl -ba | tail # Heirloom
57 repudiandae sint et molestiae non-recusandae.
58
59
60
61
62
63
64 Footer
65
66
$ DWBHOME=. ./bin/nroff -ms ./footer-placement.ms | nl -ba | tail
123
124
125
126
127
128
129 Footer
130
131
132
DWB gets the footer placement right. (It formats the text on two pages
because it doesn't honor the `PO` register setting. We don't have that
documented as a GNU (or even Berkeley) extension so I guess I get to research
its history.)
What about Seventh Edition Unix?
The foregoing technique is not possible on that platform because:
1. _nl_(1) doesn't exist; and
2. _sed_(1) is **CRAPTASTIC**. Its `s` command cannot handle even the
simplest of regexes in the matcher part of its argument. I had no idea _sed_
was ever this anemic.
But Version 7 Unix *did* have _awk_(1), so I reimplemented `nl -ba` in it.
Cheers to A, W, and K!
$ cat nl.awk
BEGIN { lineno = 1 }
{ print lineno, "\t", $0; lineno++ }
$ nroff -ms footerplac.ms | awk -f ./nl.awk
1
2
3
4
5
6
7 Sed ut perspiciatis, unde omnis iste natus error sit voluptatem
8 accusantium doloremque laudantium, totam rem aperiam eaque ipsa,
9 quae ab illo inventore veritatis et quasi architecto beatae vitae
10 dicta sunt, explicabo. Nemo enim ipsam voluptatem, quia voluptas
11 sit, aspernatur aut odit aut fugit, sed quia consequuntur magni
12 dolores eos, qui ratione voluptatem sequi nesciunt, neque porro
13 quisquam est, qui dolorem ipsum, quia dolor sit amet consectetur
14 adipiscivelit, sed quia non-numquam eius modi tempora incidunt,
15 ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim
16 ad minima veniam, quis nostrum exercitationem ullam corporis sus-
17 cipitlaboriosam, nisi ut aliquid ex ea commodi consequatur? Quis
18 autem vel eum iure reprehenderit, qui inea voluptate velit esse,
19 quam nihil molestiae consequatur, vel illum, qui dolorem eum
20 fugiat, quo voluptas nulla pariatur? At vero eos et accusamus et
21 iusto odio dignissimos ducimus, qui blanditiis praesentium volup-
22 tatum deleniti atque corrupti, quos dolores et quas molestias
23 excepturi sint, obcaecati cupiditate non-provident, similique
24 sunt in culpa, qui officia deserunt mollitia animi, id est
25 laborum et dolorum fuga. Et harum quidem rerum facilis est et
26 expedita distinctio. Nam libero tempore, cum soluta nobis est
27 eligendi optio, cumque nihil impedit, quo minus id, quod maxime
28 placeat, facere possimus, omnis voluptas assumenda est, omnis
29 dolor repellendus. Temporibus autem quibusdam et aut officiis
30 debitis aut rerum necessitatconsoledmr9#=Gut et voluptates
31 repudiandae sint et molestiae non-recusandae.
32
33 Sed ut perspiciatis, unde omnis iste natus error sit voluptatem
34 accusantium doloremque laudantium, totam rem aperiam eaque ipsa,
35 quae ab illo inventore veritatis et quasi architecto beatae vitae
36 dicta sunt, explicabo. Nemo enim ipsam voluptatem, quia voluptas
37 sit, aspernatur aut odit aut fugit, sed quia consequuntur magni
38 dolores eos, qui ratione voluptatem sequi nesciunt, neque porro
39 quisquam est, qui dolorem ipsum, quia dolor sit amet consectetur
40 adipiscivelit, sed quia non-numquam eius modi tempora incidunt,
41 ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim
42 ad minima veniam, quis nostrum exercitationem ullam corporis sus-
43 cipitlaboriosam, nisi ut aliquid ex ea commodi consequatur? Quis
44 autem vel eum iure reprehenderit, qui inea voluptate velit esse,
45 quam nihil molestiae consequatur, vel illum, qui dolorem eum
46 fugiat, quo voluptas nulla pariatur? At vero eos et accusamus et
47 iusto odio dignissimos ducimus, qui blanditiis praesentium volup-
48 tatum deleniti atque corrupti, quos dolores et quas molestias
49 excepturi sint, obcaecati cupiditate non-provident, similique
50 sunt in culpa, qui officia deserunt mollitia animi, id est
51 laborum et dolorum fuga. Et harum quidem rerum facilis est et
52 expedita distinctio. Nam libero tempore, cum soluta nobis est
53 eligendi optio, cumque nihil impedit, quo minus id, quod maxime
54 placeat, facere possimus, omnis voluptas assumenda est, omnis
55 dolor repellendus. Temporibus autem quibusdam et aut officiis
56 debitis aut rerum necessitatconsoledmr9#=Gut et voluptates
57 repudiandae sint et molestiae non-recusandae.
58
59
60
61
62
63
64 Footer
65
66
(There's no header on page 1 because it's page 1, and AT&T _ms_ didn't support
Berkeley's `P1` extension.)
Well, that's interesting. But I think DWB found and fixed a bug in _ms_, a
fix that unfortunately did not propagate into _groff_ in early days. I
suspect Heirloom copied _groff_'s behavior.
It's worth noting that _me_(7) had (and retains to this day) symmetric
vertical page margins.
Finally, the input document is pure ASCII:
$ file ATTIC/footer-placement.ms
ATTIC/footer-placement.ms: troff or preprocessor input, ASCII text
And yet we get some surprising output. I ain't touchin' that
"necessitatconsoledmr9#=Gut" stuff with a ten-foot pole. Not my 50-year-old
circus, not my geriatric monkeys.
_______________________________________________________
Reply to this item at:
<https://savannah.gnu.org/bugs/?67401>
_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/
signature.asc
Description: PGP signature
