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