At 2023-06-29T06:27:44+0000, segaloco via TUHS wrote:
Man of course finds use in the manual pages (although
different representations of manpages in nroff over time.)
Setting aside the well known bifurcation between man(7) and mdoc(7),
which manage to stay out of each other's way in the macro name space,
I'm not aware of any comparative survey of different man(7)
implementations. Ultrix at some point--I have no insight into the
chronology of it--had a large set of extensions that remains quietly
documented and supported by groff to this day, albeit off in a corner
where it seems to receive little attention. (Just as well, in my
opinion, as not all of its innovations are worthy of embrace.)
As far as other vendor extensions and developments go, I have collected
all of the information known to me into the groff_man(7) page in the
any-minute-now groff 1.23.0 release. Here are the relevant sections.
(There are two because concept and implementation are distinguishable.)
M. Douglas McIlroy designed, implemented, and documented the AT&T
man macros for Unix Version 7 (1979) and employed them to edit the
first volume of its Programmer's Manual, a compilation of all man
pages supplied by the system. That man supported the macros listed
in this page not described as extensions, except .P and the
deprecated .AT and .UC. The only strings defined were R and S; no
registers were documented.
.UC appeared in 3BSD (1980). Unix System III (1980) introduced .P
and exposed the registers IN and LL, which had been internal to
Seventh Edition Unix man. PWB/UNIX 2.0 (1980) added the Tm string.
4BSD (1980) added lq and rq strings. SunOS 2.0 (1985) recognized C,
D, P, and X registers. 4.3BSD (1986) added .AT and .P. Ninth
Edition Research Unix (1986) introduced .EX and .EE. SunOS 4.0
(1988) added .SB.
The foregoing features were what James Clark implemented in early
versions of groff. Later, groff 1.20 (2009) originated .SY/.YS,
.TQ, .MT/.ME, and .UR/.UE. Plan 9 from User Space's troff
introduced .MR in 2020.
The initial GNU implementation of the man macro package was written
by James Clark. Later, Werner Lemberg supplied the S, LT, and cR
registers, the last a 4.3BSD-Reno mdoc(7) feature. Larry Kollar
added the FT, HY, and SN registers; the HF string; and the PT and BT
macros. G. Branden Robinson implemented the AD and MF strings; CS,
CT, and U registers; and the MR macro. Except for .SB, the
extension macros were written by Lemberg, Eric S. Raymond, and
This document was originally written for the Debian GNU/Linux system
by Susan G. Kleinmann. It was corrected and updated by Lemberg and
Robinson. The extension macros were documented by Raymond and
I welcome any further insights people can offer. This man page isn't
the best place to document extensions that withered on the vine (like
Eighth/Ninth Edition Research Unix's addition of multi-column macros for
man(7)), but I wouldn't mind collecting such things into some sort of
While the mandoc(1)/mdocml project's "History of UNIX Manpages" is an
invaluable resource, it doesn't really do what's written on the tin, and
serves more as a history of (some) *roff _formatters_--not of the man(7)
language. I assume that this stance is in part due to the unease
bordering on antipathy that mandoc(1) proponents have for the man(7)
macro package. In their view, everybody should be writing mdoc(7).
Unfortunately this lacuna has left useful historical information about
the man(7) package uncollected.