Hi Russ,

At 2025-08-24T13:08:52-0700, Russ Allbery wrote:
> > Notice how two spaces shrink to one after the rendered `no id!`.
> 
> Sorry, I need a bit more context here for why the *roff input needs to
> change.

Sure.

> That section of output is inside a ".nf" block. Why is groff messing
> with the spacing of output inside .nf? I would have naively assumed
> that it would be a bug in the *roff processor to make changes to
> whitespace inside ".nf".

I seem to remember making the same assumption when I first started
contributing to groff development.

It might help to remember that "no-fill" mode, as it has historically
been called, is not a "literal" mode.  The troff in Sixth Edition Unix
(1975) actually had one of those; its request was named `li`.  Seventh
Edition Unix (1979) de-documented but retained it.  It subsequently
rotted off of AT&T-descended troffs and was not implemented by groff.

"Filling" means that the formatter attempts to "fill" an output line
with as many words as will fit on it.  That is _all_ that it means.
It is a distinct process from inter-sentence space supplementation.

Since getting involved with groff development, I've tried to flag this
fact more prominently in our documentation.

https://www.gnu.org/software/groff/manual/groff.html.node/Text.html
  roff input files contain text interspersed with instructions to
  control the formatter.  Even in the absence of such instructions, GNU
  troff still processes its input in several ways, by filling,
  hyphenating, breaking, and adjusting it, and supplementing it with
  inter-sentence space.

groff_man_style(7) [recently]:
   Fundamental concepts
     groff is a programming system for typesetting: we thus often use
     the verb “to set” in the sense “to typeset”.  The formatter
     troff(1) collects words from the input and fills output lines with
     as many as can fit.  Words are separated by spaces and newlines.  A
     transition to a new output line is called a break.  Breaks can
     occur at explicit hyphens, at \% or \: escape sequences (see
     subsection “Portability” below), or at predetermined locations in a
     word if automatic hyphenation is enabled (see the -rHY option in
     section “Options” below).  An output line may be supplemented with
     inter‐sentence space, then potentially adjusted with more space to
     a consistent length (see the -dAD option).  roff(7) details these
     processes.  The formatter prepares output for terminals or for more
     capable typesetters that can change the type size and font family.

If I can think of a way to illustrate Seventh Edition Unix perceptibly
applying inter-sentence space to non-filled text, I'll fire up SIMH and
supply one.

You don't have to change anything about podlators regarding this issue,
of course; you can regard it as a bug in all _groff_ releases to date
and, if we implement the change proposed in this thread, it will be one
that groff 1.24 fixes.  Maybe not at the formatter level where you
expect, but one at which POD documentation will experience the remedy
nevertheless.

Regards,
Branden

Attachment: signature.asc
Description: PGP signature

Reply via email to