[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
custom NS and NE man(7) macros
From: |
G. Branden Robinson |
Subject: |
custom NS and NE man(7) macros |
Date: |
Sun, 24 Sep 2023 15:12:47 -0500 |
Hi Thomas,
I see the following macro definitions in the man pages of some of your
projects (ncurses, xterm, lynx), but not in pages from other projects
(by other people; I didn't check all the rest of yours).
.\" these would be fallbacks for DS/DE,
.\" but groff changed the meaning of the macros.
.de NS
.ie n .sp
.el .sp .5
.ie n .in +4
.el .in +2
.nf
.ft \*(CW
..
.de NE
.fi
.ft R
.ie n .in -4
.el .in -2
..
I have several questions about them.
1. I don't understand the comment. While it is true that groff man(7)
has defined `DS` and `DE` as no-ops for many years (first committed
January 2007, released in groff 1.20 January 2009), its definitions
do not foreclose local redefinitions after the `TH` macro in a
man(7) document. (This restriction on placement is due to the way
andoc.tmac/the "-mandoc" argument works, which in turn goes back to
4.3BSD-Reno in 1990.) And in fact I can change these definitions
(and their corresponding calls) to `DS` and `DE` with no impact on
the formatted pages. `DS` and `DE` have never been "standard"
man(7) macros [there is no standard]. They do not appear in Seventh
Edition Unix man(7)[1], nor in any USL descendant I have
encountered. They are not in PWB, DWB, or Solaris troffs. I do see
a late Berkeley implementation but they do not change the
typeface.[2] (DEC Ultrix did have display macros named `Ds` and
`De`--note the mixed case.)
2. The Ninth Edition Unix (1986) and groff 1.20 extension macros `EX`
and `EE` do much of what these macro definitions do: `EX` turns off
filling and selects a monospaced font (in a device-appropriate way),
while `EE` restores filling and selects the default font.
3. The vertical spacing used by `NS` is very nearly what you'd get from
an ordinary paragraphing macro. On terminals there is no
difference, and on typesetters, your `NS` macro adds .1 vee more
vertical space than the man(7) package default of 0.4v. On a
typesetter using 10-point type on 12-point spacing (*roff defaults),
this is a difference of 1.2 points, or 1/60th of an inch (there are
72 points to an inch). Is this difference important to you?
4. I am curious about the different amount of indentation used on
terminals vs. typesetters. The default scaling unit for the `in`
request is ens, and on terminals, one em is equal to one en, so the
result here is that you get four times as much indentation on
terminals as typesetters. Was that your intention?
Thanks for any light you can shed here.
Regards,
Branden
[1] https://minnie.tuhs.org/cgi-bin/utree.pl?file=V7/usr/lib/tmac/tmac.an
[2] The relevant file name appears to be "tmac.an.new". It has a long
history in BSD, but `DS` and `DE` macros did not appear until 4.3BSD
(1986). These macros got backported to 2.11BSD (a separate line of
Unix developed that retained support for PDP-11 machines), and
remained for 4.3BSD-Tahoe (1988) but disappeared from 4.3BSD-Reno
(1990), which also saw the debut of mdoc(7), so maybe the CSRG saw
no point in maintaining extensions to man(7) when they were trying
to deprecate that macro language altogether. BSD Net/2 (1991) and
4.4BSD shipped groff, which did not implement them.[3][4]
These BSD `DS` and `DE` macros moreover use the existing man(7) `RS`
and `RE` to manage indentation, not the custom requests that your
`NS` and `NE` macros employ.
If a person wants authentic BSD `DS` and `DE` workalike behavior, it
seems to me they should use the following.
.de DS
.RS
.nf
.sp
..
.de DE
.fi
.RE
.sp .5
..
[3]
https://minnie.tuhs.org/cgi-bin/utree.pl?file=Net2/usr/src/usr.bin/groff/macros/grot/tmac.an
[4]
https://minnie.tuhs.org/cgi-bin/utree.pl?file=4.4BSD/usr/share/tmac/tmac.groff_an
signature.asc
Description: PGP signature
- custom NS and NE man(7) macros,
G. Branden Robinson <=