Update of bug #68256 (group groff):
Status: Need Info => Confirmed
Assigned to: deri => gbranden
Planned Release: None => 1.25.0
Summary: [troff] `.bd S 3 3` doesn't work => [troff] get `bd`
request out of conditional emboldening business and make `M` its default
scaling unit
_______________________________________________________
Follow-up Comment #24:
Given the analysis in comment #23, one might fairly wonder whether GNU _troff_
has regressed in this area.
My answer: not recently.
Using the same input exhibit as in comment #23:
$ cat EXPERIMENTS/bd-S-3-3.roff
.if \nB .bd S B 3
.ft B
Had we world enough +\(mi\(mu\(di\(** time.\|.\|.
I observe the following:
$ ~/groff-HEAD/bin/groff -Z EXPERIMENTS/bd-S-3-3.roff
>|bd-S-3-3-groff-HEAD.grout
$ ~/groff-1.24.1/bin/groff -Z EXPERIMENTS/bd-S-3-3.roff
>|bd-S-3-3-groff-1241.grout
$ ~/groff-1.24.0/bin/groff -Z EXPERIMENTS/bd-S-3-3.roff
>|bd-S-3-3-groff-1240.grout
$ ~/groff-1.23.0/bin/groff -Z EXPERIMENTS/bd-S-3-3.roff
>|bd-S-3-3-groff-1230.grout
$ ~/groff-1.22.4/bin/groff -Z EXPERIMENTS/bd-S-3-3.roff
>|bd-S-3-3-groff-1224.grout
$ ~/groff-1.22.3/bin/groff -Z EXPERIMENTS/bd-S-3-3.roff
>|bd-S-3-3-groff-1223.grout
$ diff -U0 bd-S-3-3-groff-1223.grout bd-S-3-3-groff-1224.grout && echo SAME
SAME
$ diff -U0 bd-S-3-3-groff-1224.grout bd-S-3-3-groff-1230.grout && echo SAME
SAME
$ diff -U0 bd-S-3-3-groff-1230.grout bd-S-3-3-groff-1240.grout && echo SAME
--- bd-S-3-3-groff-1230.grout 2026-07-08 01:51:07.033677293 -0500
+++ bd-S-3-3-groff-1240.grout 2026-07-08 01:50:41.653742635 -0500
@@ -8,2 +7,0 @@
-V12000
-H72000
@@ -11,0 +10,2 @@
+V12000
+H72000
$ diff -U0 bd-S-3-3-groff-1240.grout bd-S-3-3-groff-1241.grout && echo SAME
SAME
$ ^Cff -U0 bd-S-3-3-groff-1240.grout bd-S-3-3-groff-1241.grout && echo SAME
$ diff -U0 bd-S-3-3-groff-1241.grout bd-S-3-3-groff-HEAD.grout && echo SAME
SAME
The change in "grout" from 1.23.0 to 1.24.0 is immaterial to this ticket; it
is a change in sequencing of absolute motion commands. For emboldening, we
expect to see "local" (relative) motions and additional glyph writing
commands.
What about Deri's preferred form?
$ cat EXPERIMENTS/bd-S-B-3.roff
.if \nB .bd S B 3
.ft B
Had we world enough +\(mi\(mu\(di\(** time.\|.\|.
I observe the following:
$ ~/groff-HEAD/bin/groff -Z EXPERIMENTS/bd-S-B-3.roff
>|bd-S-B-3-groff-HEAD.grout
$ ~/groff-1.24.1/bin/groff -Z EXPERIMENTS/bd-S-B-3.roff
>|bd-S-B-3-groff-1241.grout
$ ~/groff-1.24.0/bin/groff -Z EXPERIMENTS/bd-S-B-3.roff
>|bd-S-B-3-groff-1240.grout
$ ~/groff-1.23.0/bin/groff -Z EXPERIMENTS/bd-S-B-3.roff
>|bd-S-B-3-groff-1230.grout
$ ~/groff-1.22.4/bin/groff -Z EXPERIMENTS/bd-S-B-3.roff
>|bd-S-B-3-groff-1224.grout
$ diff -U0 bd-S-3-3-groff-1223.grout bd-S-3-3-groff-1224.grout && echo SAME
diff -U0 bd-S-B-3-groff-1223.grout bd-S-B-3-groff-1224.grout && echo SAME
SAME
$ diff -U0 bd-S-B-3-groff-1223.grout bd-S-B-3-groff-1224.grout && echo SAME
diff -U0 bd-S-B-3-groff-1224.grout bd-S-B-3-groff-1230.grout && echo SAME
SAME
$ diff -U0 bd-S-B-3-groff-1224.grout bd-S-B-3-groff-1230.grout && echo SAME
diff -U0 bd-S-B-3-groff-1230.grout bd-S-B-3-groff-1240.grout && echo SAME
--- bd-S-B-3-groff-1230.grout 2026-07-08 02:06:24.787185386 -0500
+++ bd-S-B-3-groff-1240.grout 2026-07-08 02:06:01.179288593 -0500
@@ -8,2 +7,0 @@
-V12000
-H72000
@@ -11,0 +10,2 @@
+V12000
+H72000
$ diff -U0 bd-S-B-3-groff-1230.grout bd-S-B-3-groff-1240.grout && echo SAME
diff -U0 bd-S-B-3-groff-1240.grout bd-S-B-3-groff-1241.grout && echo SAME
SAME
$ diff -U0 bd-S-B-3-groff-1240.grout bd-S-B-3-groff-1241.grout && echo SAME
diff -U0 bd-S-B-3-groff-1241.grout bd-S-B-3-groff-HEAD.grout && echo SAME
SAME
So the answer is: no, GNU _troff_ has not changed handling 'conditional
emboldening'. The feature doesn't work, it's probably never worked, and in
that respect it is not distinguishable from AT&T _troff_ since, probably, at
least DWB 2.0/System V _troff_ (1984/5/6), and maybe since Kernighan's
device-independent rewrite of _troff_ circa 1980.
My new plan for _groff_ 1.25 is:
1. Simplify the `bd` request handler to support only one- and two-argument
forms. Use my new `read_font_identifier()` function for orthogonality (and to
prompt a celebration in the Deri James household) to gather the first
argument. (That is, either a mounting position or font name will be
accepted.)
2. Change the `bd` request handler to use a default scaling unit of `M`. As
this ticket has established, a default scaling unit of `u` is unportable
between devices because device resolutions vary, and a default of `u`
unnecessarily makes life harder for document authors.
3. Document the foregoing changes to request semantics with respect to what
_is_ implemented.
4. Document the universal yet little-noticed brokenness of conditional
emboldening, possibly in a footnote in the "Other Differences" section of our
manual. This fact also constitutes a CSTR #54 erratum.
5. Spawn a new Wish/Feature Change ticket to record the desire for a properly
working conditional emboldening feature. For now, I propose the request name
`condbd`. The new default scaling unit should closely enough resemble the
(bizarre) semantics of Ossanna _troff_ conditional emboldening that legacy
documents using `.bd S 3 3` and `.bd S B 3` should witness a noticeable
emboldening effect. N.B. that pixel perfection is not the goal. _troff_s
have never shipped their own fonts, so all reconstructions of historical
documents are at the mercy of the installed font repertoire of the host
system.
_______________________________________________________
Reply to this item at:
<https://savannah.gnu.org/bugs/?68256>
_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/
signature.asc
Description: PGP signature
