I was overjoyed to hear about this release. Until I got to this part of the release notes:
GNU troff no longer accepts C0 controls characters in identifiers. We > prohibit C0 controls to make the language less tolerant of unreadable input There's no reason to have done this. You've foisted a needlessly disruptive change upon users that breaks compatibility with older Groff versions and other Troff implementations. CSTR-54's section on valid character input is predictably terse, but it clearly states in §10.1 <https://troff.org/54.pdf#page=21>*Input character translations <https://troff.org/54.pdf#page=21>* that Ways of inputting the valid character set were discussed in §2.1. The ASCII > control characters horizontal tab (§9.1), SOH (§9.1), and backspace (§10.3) > are discussed elsewhere. The newline delimits input lines. *In addition, > STX, ETX, ENQ, ACK, and BEL are accepted*, and may be used as delimiters > or translated into a graphic with tr (§10.5). All others are ignored. Consider the amount of work that's been put into making Groff backwards-compatible with historical Troffs (even in this new release). How does it make sense to support *most* historical Troff macros and syntax, yet make a selective exception for a feature that, realistically, few Groff users know about, and even fewer make use of? Regards, — John On Sun, 1 Mar 2026 at 09:50, G. Branden Robinson < [email protected]> wrote: > We are pleased to announce the availability of groff 1.24.0. Obtain > it from the GNU mirror network, > > https://ftpmirror.gnu.org/groff/groff-1.24.0.tar.gz > > or, if the network is for some reason inoperative, directly from GNU. > > https://ftp.gnu.org/gnu/groff/groff-1.24.0.tar.gz > > Ensure the integrity of your download by checking this source code > archive's cryptographic signature; see "Obtaining groff" below. > > > What is groff? > ============== > > groff (GNU roff) is a typesetting system that reads plain text input > that includes formatting commands to produce output in PostScript, > PDF, HTML, or DVI formats or for display to a terminal. Formatting > commands can be low-level typesetting primitives, macros from a > supplied package, or user-defined macros. All three approaches can be > combined. > > A reimplementation and extension of troff and other programs from AT&T > Unix, groff is widely available on POSIX and other systems owing to its > long association with Unix manuals, including man pages. It and its > predecessor have produced several best-selling software engineering > texts. groff can create typographically sophisticated documents while > consuming minimal system resources. > > https://www.gnu.org/software/groff/ > > > Changes > ======= > > Since the groff 1.24.0.rc4 release candidate was made available on 20 > February, 2 people have authored a total of 32 commits. > > $ git shortlog --summary 1.24.0.rc4..1.24.0 > 1 Deri James > 31 G. Branden Robinson > > Thanks to Alexis Hildebrandt, Bjarni Ingi Gislason, and Deri James for > reporting defects in rc4. > > * A defect in gropdf that caused it to sometimes fail to format the > numeral "0" has been fixed, and a regression test for it added. > > * A defect in the build scripts' generation of HTML documents with groff > (affecting the "pic.html" manual and the "webpage.html" example) has > been corrected. > > * Spurious test failures on FreeBSD 14.0 and 15.0, NetBSD 10.0, OpenBSD > 7.8, and macOS/Darwin have been resolved. > > See "Details" below for changes since the groff 1.23.0 release. > > > Defects not resolved > -------------------- > > * On some systems (CentOS 7.9, Ubuntu 20.04) but not others (Debian > 12.12, Ubuntu 24.04, Solaris 11, Termux/Android), the test script > "tmac/tests/an_UR-works.sh" fails with the following message in its > log file. > > I/O Error: Couldn't open file '-' > > We have been unable to locate a cause. Hypotheses include a version > of pdftotext(1) that differs from others more commonly used (there are > at least two independent implementations), or the use of AppArmor on > Linux. We'd greatly appreciate your help root-causing this issue. > > Highlights of groff 1.24.0 > -------------------------- > > * groff_man(7) and groff_mdoc(7) now support hyperlinks between man > pages in PDF. They use the "man:" scheme for URLs, and can be > prepared to use PDF bookmarks internal to the document in a > collection of man pages if desired. groff builds a > "groff-man-pages.pdf" file that illustrates. > > * The groff_man(7) extension macros `SY` and `YS` macros have been > changed to enable greater user control over vertical spacing and to > make them convenient for synopsizing C language functions, not just > commands. In a "Synopsis" section of a man page, existing synopses > consisting of a single item require no migration. This is the most > common case. > > * groff 1.24.0 includes version 2.6 of the mom macro package. > > * The groff_mm(7) macro package has been adjusted in dozens of minor > ways to clean up its user interface and more accurately reproduce > historical mm documents, such as London & Reiser's 1978 paper > describing Unix/V32, the Unix port to the VAX-11/780. > > * groff 1.24.0 includes "install-font.bash", an example > script to aid integration of third-party fonts with groff. > > * The pic(1) preprocessor supports a new "polygon" command, and extends > reference point syntax to permit selection of objects' vertices and > midpoints (where applicable). > > * The gropdf(1) output driver has several new features. > - JFIF/JPEG and JPEG 2000 image files are embeddable in documents. > - If PerlMagick is installed, many more image formats are as well. > - It ships a grops(1)-compatible "SS" (slanted symbol) font. > - It subsets fonts by default, reducing file size. > - Its output conforms to the ISO 32000/PDF 1.7a standard by default. > - It permits control of page numbers in a PDF reader's outline pane. > - It supports characters outside the Unicode Basic Latin subset > in bookmarks, named destinations, and external hyperlinks. > > * The grops(1) output driver now supports fonts encoded using UTF-16. > > * The new "-t" option to the grotty(1) output driver causes it to > output ECMA SGR 38 and 48 escape sequences, which permit > specification of character cell foreground and background colors in > the RGB color space with 8 bits per channel. > > * GNU troff's new `hydefault` request permits a distinct hyphenation > mode default to be configured for each environment. groff's > localization macro files configure an appropriate default for the > selected language. > > * The formatter, GNU troff, has many new features to aid debugging > of documents and macro files. All write to the standard error > stream. `pchar`, `pcolor`, `pcomposite`, `pfp`, `pftr`, and `phw` > report the state of data manipulated by requests of the same name > without the "p" prefix. `ptr` has been renamed to `pwh` accordingly. > `pm` now dumps, in JSON encoding, the contents of macros, strings, > and diversions named as arguments. `pline` does the same for a > pending output line. `pstream` reports the status of open file > streams. `pnr` accepts register names as arguments, reporting only > those requested, and now discloses the autoincrementation amount and > interpolation format of each register (if it is not string-valued). > > * GNU troff now implements saturating rather than wrapping integer > arithmetic. > > * GNU troff now implements a more regular request syntax. The requests > `cf`, `hpf`, hpfa`, `lf`, `mso`, msoquiet`, `ns`, pi`, `pso`, `so`, > `soquiet`, `sy`, and `trf` now handle their arguments as the string- > populating requests `ds` and `as` do, stripping a leading neutral > double quote from relevant arguments and thereby permitting leading > spaces to be embedded in them. A consequence is that GNU troff > requests now handle file names with spaces in them as easily as any > other file name, unlike other troffs. > > * The soelim(1) preprocessor interprets `.so` tokens compatibly with > the foregoing change to GNU troff(1). > > * groff now offers output localization for Polish, Russian, and > Spanish, including hyphenation patterns and macro package string > translations. > > * A new macro file "koi8-r.tmac" supports the KOI8-R character > encoding, which in turn supports the new Russian locale for groff. > > For a more comprehensive list of feature changes, see "News" below. > > Much attention has been given to fixing bugs, validating input, > improving diagnostic messages, and correcting and expanding > documentation. The previous release shipped with 164 automated tests; > this one ships with over 300. > > Details > ------- > > Since groff 1.23.0 was released on 5 July 2023, 30 people have authored > a total of over 5,200 commits. (One author appears under two IDs.) > > $ git shortlog --summary 1.23.0..1.24.0 > 14 Alejandro Colomar > 2 Alexis > 6 Alexis Hildebrandt > 4 Bjarni Ingi Gislason > 3 Bruno Haible > 5 Colin Watson > 1 Collin Funk > 2 Dariusz Chilimoniuk > 12 Dave Kemper > 1 Deri > 83 Deri James > 1 Douglas McIlroy > 4 Duncan Losin > 1 Eloi Montañés > 5159 G. Branden Robinson > 1 Helmut Grohne > 2 Ian Ropers > 3 Ingo Schwarze > 1 Keith Marshall > 4 Lennart Jablonka > 4 Lukas Javorsky > 1 Nikita Ivanov > 10 Norwid Behrnd > 2 Paul Eggert > 44 Peter Schaffter > 1 Pim > 1 Robert Yang > 1 Sebastien Peterson-Boudreau > 3 Sven Schober > 6 TANAKA Takuji > 1 onf > > For a list of feature changes, see "News" below. > > As of this writing, per the GNU Savannah bug tracker, the groff > project has resolved 378 issues as fixed for the 1.24.0 release. > > Classifying these issues by type and the component of the project to > which they apply, we find the following. > > Type Component > ---- --------- > Build/installation 36 Core 122 > Crash/unresponsive 8 Driver: grohtml 1 > Documentation 58 Driver: gropdf 29 > Feature change 61 Driver: grops 3 > Incorrect behavior 115 Driver: grotty 5 > Lint 14 Driver: others/general 5 > Rendering/cosmetics 25 Font: devpdf 9 > Test 8 Font: devps 1 > Warning/suspicious behavior 53 Font: others/general 1 > General 41 > Macros: man 19 > Macros: mdoc 15 > Macros: me 4 > Macros: mm 33 > Macros: mom 9 > Macros: ms 9 > Macros: others/general 29 > Preprocessor: eqn 4 > Preprocessor: grn 0 > Preprocessor: html 2 > Preprocessor: pic 10 > Preprocessor: preconv 0 > Preprocessor: refer 4 > Preprocessor: soelim 1 > Preprocessor: tbl 8 > Preprocessor: others/general 6 > Utilities 8 > > Another way of capturing the amount of revision is as follows. > > $ git diff --stat 1.23.0 1.24.0 | tail -n 1 > 1224 files changed, 157612 insertions(+), 83697 deletions(-) > > > Obtaining groff > =============== > > Here are the compressed sources and a GPG detached signature[*]. > https://ftp.gnu.org/gnu/groff/groff-1.24.0.tar.gz > https://ftp.gnu.org/gnu/groff/groff-1.24.0.tar.gz.sig > > Use a mirror for higher download bandwidth. > https://ftpmirror.gnu.org/gnu/groff/groff-1.24.0.tar.gz > https://ftpmirror.gnu.org/gnu/groff/groff-1.24.0.tar.gz.sig > > Here are the SHA-1 and SHA-256 checksums. > > d0d5e822467695e158769c29988a89f2ce67e194 groff-1.24.0.tar.gz > 55u82P8+0CAOesVdOWKhXhGMEimZAhMCXy/IsmRydXA= groff-1.24.0.tar.gz > > The SHA-256 checksum is encoded in Base64 instead of the hexadecimal > form that most checksum tools default to. The mechanism follows. > > sha256sum < groff-1.24.0.tar.gz | cut -f1 -d\ | xxd -r -p | base64 > > (Because "base64" reads from a pipe, it doesn't know the file name, and > so the file name will not appear in the output.) > > [*] Use a .sig file to verify that the corresponding file (without the > .sig suffix) is intact. First, be sure to download both the .sig > file and the corresponding archive. Then, verify the archive. > > gpg --verify groff-1.24.0.tar.gz{.sig,} > > If that command fails because you don't have the required public > key, you can import it. > > wget -O 108747.asc \ > 'https://savannah.gnu.org/people/viewgpg.php?user_id=108747' > gpg --import 108747.asc > > Re-run the 'gpg --verify' command subsequently. > > > Caveats > ======= > > * GNU tools, or otherwise POSIX-conforming ones, are generally required > to build on Solaris 10 or 11. See the "PROBLEMS" file in the > distribution archive. > > * Solaris 10 has known problems with automated tests; see the > "PROBLEMS" file in the distribution archive. > > > News > ==== > > Noteworthy incompatible changes > ------------------------------- > > * If your roff(7) documents follow any of the requests `cf`, `hpf`, > `hpfa`, `mso`, `msoquiet`, `nx`, `open`, `opena`, `so`, `soquiet`, or > `trf` with a comment after their file name argument, and did not > place that comment immediately after the file name, you are likely to > get a diagnostic message resembling the following. > > warning: cannot open macro file 'e.tmac ': No such file or directory > > Or, less likely, the formatter will open the wrong file, one with > spaces at the end of its name. That is because these requests are > now able to process file names containing space characters. (This > change also makes the request syntax consistent with that of `ds`, > `as`, and others.) A quick fix is to place the comment escape > sequence as early as possible. For example, we would change: > > .mso e.tmac \" Load Eric Allman's package. > > to: > > .mso e.tmac\" Load Eric Allman's package. > > to tell the formatter to load the "e.tmac" file rather than > "e.tmac ". See the items below for further details. > > * If your roff(7) documents specify a file name that starts with a > neutral double quote (") to any of the requests `cf`, `hpf`, > `hpfa`, `mso`, `msoquiet`, `nx`, `open`, `opena`, `so`, `soquiet`, or > `trf`, you are likely to get a diagnostic message, or the formatter > will open a file of the same name except for the leading neutral > double quote. That is because these requests are now able to process > file names containing leading space characters. (This change also > makes the request syntax consistent with that of `ds`, `as`, and > others.) The solution is to add an additional neutral double quote > to the start of the file name argument. For example, we would > change: > > .so "5150".lrc > > to: > > .so ""5150".lrc > > to tell the formatter to read a file named '"5150".lrc', where the > neutral single quotes bracket the file name. > > * groff mdoc(7)'s font customization feature, undocumented but > analogous to that of 4.4BSD mdoc, now expects the strings that > designate font names to be precisely that: font _names_ (or abstract > styles, or mounting positions), rather than arbitrary *roff syntax. > (String interpolations remain acceptable, as long as what they > interpolate is a valid argument to the `ft` request or `\f[xxx]` > escape sequence.) > > * Support for terminal devices using the CCSID 1047 (EBCDIC) encoding > has been withdrawn. See below for motivation and a workaround. > > troff > ----- > > * troff now recognizes an -S option, which "locks" safer mode, > rejecting any subsequent specification of -U on the command line with > an error diagnostic. > > * The `cf` request is now disabled in safer mode; as with `pi` and > `sy`, you must specify troff's "unsafe mode" option `-U` to use it. > Alternatively, use the `trf` request, available since groff 0.6 > (circa 1990), to embed a file in GNU troff's output while discarding > characters (most C0 and C1 controls) that are invalid as GNU troff > input--and incidentally also undefined in GNU troff output. > > * The `hpfcode` request now emits an error when used, advising of its > planned withdrawal, but then proceeds with normal behavior. The > documented replacement mechanism, the `hcode` request, has existed > since groff 1.02 (June 1991) at the latest. > > * The `mso` request no longer attempts to open a macro file named, say, > "tmac.s" if "s.tmac" was specified as the argument and not found, nor > vice versa. This feature was a convenience for some old AT&T troff > installations, but few of those remain in the field, and of those > that we know to survive, few use a macro file naming convention for > which this feature is any help. (DWB 3.3 and Solaris do not, and we > think other System V troffs don't, either. Only Plan 9 troff does.) > `mso` now simply processes the macro search path for a file name > matching the request argument, and succeeds or fails depending on an > exact match. > > If you desire this functionality for portability (keeping in mind > that `mso` is itself a groff extension), consider the following. > > .\" Load the ms package, whatever it might be named. > .\" troffs without groff extensions must know its full path. > .if !\n(.g .so /path/to/tmac.s > .\" The following requests do nothing on non-GNU troffs. > .do msoquiet s.tmac\" If file present, defines `LP` macro. > .do if !d LP .msoquiet tmac.s > > * GNU troff no longer accepts nonpositive page lengths. Attempting to > set one with the `pl` request clamps the page length to the vertical > motion quantum as `ll` does with the horizontal motion quantum in > AT&T and GNU troffs. > > * GNU troff no longer accepts a newline as a delimiter for the > parameterized escape sequences `\A`, `\b`, `\o`, `\w`, `\X`, and > `\Z`. > > * GNU troff no longer accepts C0 controls or Latin-1 Supplement > characters in identifiers. We prohibit C0 controls to make the > language less tolerant of unreadable input, and Latin-1 Supplement > code points to enable us to pivot to reading UTF-8-encoded input in a > future release. (Thus, we plan for Latin-1 Supplement characters to > again be accepted in identifiers, but only as components of multibyte > UTF-8 sequences.) > > * The `color`, `cp`, `kern`, `linetabs`, and `vpt` requests now > interpret arguments with negative values as instructions to disable > the corresponding feature, using the *roff integer-to-Boolean > conversion idiom instead of the C/C++ one. Thus, if you invoke these > requests with a register interpolation as an argument, the outcome > agrees with an `if` test of the register's value. > > * GNU troff now implements saturating rather than wrapping integer > arithmetic. Where before overflow would cause an error diagnostic > and abort evaluation of the expression, the formatter now emits a > warning diagnostic in the "range" category and continues evaluation. > > * GNU troff now strips a leading neutral double quote from the argument > to the `cf`, `hpf`, `hpfa`, `lf`, `mso`, `msoquiet`, `nx`, `pi`, > `pso`, `so`, `soquiet`, `sy`, and `trf` requests, and the second > argument to the `open` and `opena` requests, allowing it to contain > embedded leading spaces. > > * GNU troff now accepts space characters in the argument to the `cf`, > `hpf`, `hpfa`, `lf`, `mso`, `msoquiet`, `nx`, `so`, `soquiet`, and > `trf` requests, and the second argument to the `open` and `opena` > requests. See "soelim" below. > > * The foregoing two changes make the syntax of the listed requests > consistent with that of `ds`, `as`, and others that take arguments > that the formatter reads to the next newline. > > * The "number" warning category has been withdrawn. The diagnostic > that formerly used it has been promoted to an error. > > * The "el" warning category has been withdrawn. If enabled (which it > was not by default), the formatter would emit a diagnostic if it > inferred an imbalance between `ie` and `el` requests. Unfortunately > its technique wasn't reliable and sometimes spuriously issued these > warnings, and making it perfectly reliable did not look tractable. > We recommend using brace escape sequences `\{` and `\}` to ensure > that your control flow structures remain maintainable. > > * The "right-brace" warning category has been withdrawn. If enabled > (which it was not by default), the formatter would emit a diagnostic > in exactly one circumstance: when a numeric expression was expected > (as, for instance, the second argument to an `nr` request) but a > right brace escape sequence `\}` was encountered instead. This > diagnostic still issues, but it is now an error. > > * GNU troff now performs some limited processing/transformation of the > argument to the `\X` escape sequence and its counterpart `device` > request, to address the requirement that some documents have to pass > metadata that must encode non-ASCII characters in device extension > commands. (For example, a document author may desire a document's > section headings containing non-ASCII code points to appear correctly > in PDF bookmarks. Further, GNU troff encodes its output page > description language only in ASCII.) This change is expected to be > of significance mainly to developers of output drivers for groff; > groff_diff(7) describes the transformations. If you have been using > `\X` or `.device` to pass ASCII data to the output driver as a device > extension command and require that it remain precisely as-is, use the > `\!` escape sequence or `output` request, and prefix your data with > "x X ", the device-independent troff means of expressing a device > extension command (see groff_out(5)). > > * In nroff mode (in other words, when producing output for devices that > claim to be terminals), the formatter now reports warning diagnostics > regarding certain output problems using units of lines (vertically) > and character cells [ens] (horizontally) instead of inches (or the > unit configured with the `warnscale` request) to describe the drawing > position where the problem occurred. > > * The device-independent page description language produced by GNU > troff now reports unbreakable spaces (those produced with the `\~` > escape sequence) as word boundaries with the documentary 'w' command, > just as it does for regular breakable spaces. > > * A new request, `hydefault`, and read-only register, `.hydefault`, > manage the default automatic hyphenation mode of an environment. > This resolves a long-standing problem of *roff formatting. > > When processing input like this, > .nh > and we temporarily shut off automatic hyphenation, > .hy > the foregoing request would not do exactly what we expect. > > AT&T and other troffs apply a hyphenation mode of 1 to the final > input line (and subsequent ones), rather than restoring the mode in > use before the `nh` request. Apart from overturning user > expectations, for GNU troff "1" is not an appropriate mode for its > English hyphenation patterns. (For example, "alibi" would break as > "ali-bi" instead of "al-ibi" after this argumentless `hy` > invocation.) With updates to groff's localization files accompanying > this release, the foregoing input now works as desired. > > * A new read-only, string-valued register, `.trap`, interpolates the > name of the next page location trap after the drawing position. > > * New registers `.it`, `.itc`, and `.itm` are available. These > read-only (and, in the case of `.itm`, string-valued) registers > report the number of lines remaining in a pending input trap, a > Boolean indication of whether that pending input trap honors output > line continuation (cf. the `it` and `itc` requests), and the name of > the macro associated with the pending input trap, respectively. > > * A new request, `pchar`, reports to the standard error stream details > of any class or ordinary, special, or indexed character arguments. > > * A new request, `pcolor`, reports to the standard error stream details > of each color name specified as an argument, including its color > space identifier and channel value assignments. Without arguments, > all defined colors are listed. (A device's default stroke and/or > fill colors, "default", are not listed since they are immutable and > their details unknown to the formatter.) > > * A new request, `pcomposite`, reports to the standard error stream the > list of configured composite character mappings. > > * A new request, `pfp`, reports to the standard error stream the > list of occupied font mounting positions and the corresponding > abstract style name or font information. > > * A new request, `pftr`, reports to the standard error stream the > list of configured font translations. > > * A new request, `phw`, reports to the standard error stream the > list of hyphenation exceptions associated with the current > hyphenation language. > > * A new request, `pline`, reports to the standard error stream the list > of output nodes (an internal data structure) corresponding to the > pending output line. The list is empty if no such nodes exist. > > * The `pm` request now interprets any arguments as a sequence of macro, > string, or diversion names, and reports their contents. > > * The `pnr` request now additionally reports the autoincrementation > amount and interpolation format of each register (if it is not > string-valued). > > * The `pnr` request now accepts arguments. It treats each as > identifying a register and reports its properties to the standard > error stream. > > * A new request, `pstream`, reports to the standard error stream the > name of each stream opened with the `open` or `opena` requests, the > name of the file backing it, and its mode (writing or appending). > > * The `ptr` request has been renamed to `pwh` (mnemonic: "Print WHen > traps will spring"). As a rule, debugging requests starting with `p` > correspond to a request name that manipulates the objects reported on > when the `p` is removed. However, `ptr` had nothing to do with the > `tr` request. The only exceptions to the stated rule of `p`-removal > are now `line`, `m`, and `stream`, none of which are request names. > > * The `hla` request, when invoked with no arguments, now clears the > hyphenation language, disabling automatic hyphenation. > > * The read-only registers `.m` and `.M` now interpolate "default" when > the default color is selected as the stroke or fill color, > respectively, rather than interpolating nothing. > > * Numeric expression contexts that accept the `z` and `u` scaling > units, such as the `ps` request and `\s` escape sequence, now also > accept `p` and `s`. > > * troff's `-c` command-line option now also removes the `color` > request's ability to enable multi-color output. > > eqn > --- > > * The "gifont" primitive replaces "gfont" as the means of configuring > the global italic face in preprocessed equations. "gfont" remains > recognized as a synonym for backward compatibility. The new name is > intended to ease acquisition of the eqn language in light of GNU > eqn's thirty-year-old extensions "gbfont" and "grfont". > > * New parameters tunable with the GNU eqn "set" primitive, "half_space" > and "full_space", enable a document to configure the space widths > produced by the eqn tokens '^' and '~', respectively. Previously, > their widths were determined by the "thin_space" and "thick_space" > parameters used to tune GNU eqn's automatic spacing computations. > > * The new "reset" primitive restores a named parameter to its default. > > groff > ----- > > * The groff command now encodes the fate of failing processes in the > pipeline it constructs and runs so that this information cannot be > confused with groff's own error conditions (such as a usage error, > which now produces an exit status of 2). See the section "Exit > status" of groff(1) for details. > > * groff now passes the -S option to pic and troff if it is specified. > > nroff > ----- > > * nroff now recognizes the -a, -D, -I, and -Z options and passes them > to groff. > > * nroff now supports clustered options ("-tzms", for example) as groff, > troff, and other GNU getopt-using programs do. > > pic > --- > > * A new command, `polygon`, supports drawing polygons using arbitrary > vertices. The command furthermore accepts the `fill[ed]` modifier. > You can address a polygon's vertices and the midpoints of its edges > with the new `.v[er[tex]]` and `.mid[point]` syntax suffixed to an > object identifier, analogously to the existing compass point and > `.c[enter]` feature. Thanks to Duncan Losin. > > * pic's -S option now "locks" safer mode, rejecting any subsequent > specification of -U on the command line with an error diagnostic. > > soelim > ------ > > * soelim no longer requires embedded space characters in `so` arguments > to be backslash-escaped. (It continues to support that syntax, even > though neither the AT&T nor GNU troff formatters ever have.) You can > now embed a sequence of leading spaces in the argument by prefixing > it with a with a neutral double quote character ("), which the > program discards. These changes are to better align this program's > parsing rules with the language of the formatter; consider the `ds` > and `as` requests. > > Macro packages > -------------- > > * Keith Marshall's pdfmark package is no longer distributed with groff, > but is now separately maintained. Please visit > <https://savannah.nongnu.org/projects/groff-pdfmark> for the latest > version. > > * mom version 2.6 is distributed with this release. It supports > multi-line headings. Thanks to Peter Schaffter. > > * The device-specific macro files loaded by "troffrc" automatically on > startup, such as "html.tmac", no longer perform font translations for > some font names used by varieties of AT&T troff ('C', 'Hb', 'HX', and > several others). > > These names are not portable: in AT&T troff, the font repertoire, > like the special character repertoire, was device-dependent. Since > groff 1.23.0, GNU troff diagnoses attempts to use nonexistent font > names. We recommend addressing such portability issues wherever > suits you: (1) in a document, perhaps by using `ie` and `el` requests > and the `.g` register to test whether the formatter claims support > for groff extensions, then `ie` and `el` again with the `F` groff > conditional expression operator to check for font availability, and > to perform font remappings with the groff `ftr` request as desired; > (2) doing so in your "troffrc" file; or (3) by modifying these macro > files similarly. Users of the "dvi" and "lbp" output devices should > be aware that these devices don't supply full families of monospaced > fonts (and never have). See grodvi(1) and grolbp(1) for lists of > font names supported by each device. > > The legacy names are retained for the "pdf" and "ps" devices for this > release; however, use of them prompts one warning in the "font" > category from the formatter per deprecated name. We expect to > withdraw support for the names completely in a future groff release. > See gropdf(1) and grops(1) for lists of font names supported by each > device. > > * Hyperlink support is now enabled by default on PDF and terminal > devices for an (man) and doc (mdoc) documents. Instructions and > commented code for disabling it are in the "man.local" and > "mdoc.local" files. > > * The `PDFPIC` macro implemented in the "pdfpic.tmac" macro file now > uses identify(1) (from ImageMagick/GraphicsMagick) and file(1), if > available, to attempt to determine the dimensions of an image to be > embedded in a PDF document. See also the item regarding gropdf(1) > below. Thanks to Deri James. > > * The an (man) package now supports use of its hyperlink macros (`UR`, > `UE`, `MT`, and `ME`) in paragraph tags (that is, on the next line > after a `TP` macro call). Use of the `MR` man page cross reference > macro in a tag was already supported in groff 1.23.0. > > * The behavior of the an (man) package's `SY` and `YS` macros has been > expanded to enable greater user control over vertical spacing and to > make them convenient for synopsizing C language functions, not just > commands. `SY` no longer puts vertical space on the output, and > initially breaks the output line _only_ if it is encountered > repeatedly without a preceding `YS` call. The computed indentation > of synopsis lines after the first now also includes the width of > anything already on the output line, so that you can precede the `SY` > call with, for instance, the C language data type used for the return > value in a function prototype. The `SY` macro now accepts an > optional second argument. This second argument is typeset in bold, > replaces the fixed-width space that is appended to the synopsis > keyword in `SY`'s single-argument form, and is used in computation of > the indentation of non-initial synopsis lines. However, this > computed indentation can now also be overridden with that of the > previous synopsis item. To do this, give any argument to the `YS` > macro call "closing" the synopsis whose indentation you want to > reuse. When you're done with such a grouped synopsis, leave the > argument off the final `YS` call. > > In a "Synopsis" section of a man page, existing synopses consisting > of a single item require no migration. This is the most common case. > > For others, where before you would write... > > .SY mv > .I source > .I destination > .YS > . > .SY mv > .I source > \&.\|.\|.\& > .I destination-directory > .YS > > ...you would now write the following. > > .SY mv > .I source > .I destination > .YS > . > .P > .SY mv > .I source > \&.\|.\|.\& > .I destination-directory > .YS > > (That is, simply add a paragraphing macro.) > > And where before you would write... > > .SY mv > .B \-h > . > .SY mv > .B \-\-help > .YS > > ...you would now write the following. > > .SY mv > .B \-h > .YS > . > .SY mv > .B \-\-help > .YS > > (That is, simply add `YS` after the first synopsis item.) > > Likely the biggest benefit of these changes is that it is now much > easier to format C function prototypes with these macros. Here's how > we would synopsize a somewhat complex standard C library function. > > .B "#include <stdio.h>" > .P > .B void *\c > .SY bsearch ( > .BI const\~void\~*\~ key , > .BI const\~void\~*\~ base , > .BI size_t\~ nmemb , > .BI int\~(* compar )\c > .B (const\~void\~*, const\~void\~*)); > .YS > > * The an (man), doc (mdoc), and doc-old (mdoc-old) macro packages have > changed the default line length when formatting on terminals from 78n > to 80n. The latter is a vastly more common device configuration, but > that line length had been avoided since the groff 1.18 release in > July 2002 (prior to that, the line length was 65n, as in AT&T nroff), > for an undocumented reason. That reason appears to have been the > interaction of bugs in GNU tbl(1) with an aspect of grotty(1)'s > design. Those bugs have been resolved. A man(1) program can still > instruct groff to format for any desired line length by setting the > `LL` register on {g,n,t}roff's command line. > > * The an (man) and doc (mdoc) macro packages use slightly different > vertical margins than previously, to align more closely with the > traditional implementations of these packages. Per man(7) in the > AT&T Unix System III manual (June 1980), the text area was 6.5 by 10 > inches (on typesetters). When formatting for terminals with > continuous rendering disabled (by default, it is enabled), the page > footer now sets one line higher than before. > > * The an (man) and doc (mdoc) macro packages have added additional > registers `BP`, `PO`, and `TS` for user configuration of man page > rendering at formatting time. As noted in groff_man(7) and > groff_mdoc(7), documents should never manipulate these. > > * The an (man) and doc (mdoc) macro packages now support a `BP` > register to configure the ("base") paragraph inset amount; that is > the amount used by man(7) for paragraphs not within an `RS`/`RE` > relative inset, and in mdoc(7) for all paragraphs. Formerly, the > `IN` register configured this amount with other indentation and inset > amount parameters used by man(7). (In mdoc(7), it had no other > purpose.) The base paragraph indentation default is now 5n, > corresponding to that used by historical man(7) and mdoc(7) > implementations going back to Unix Version 7 (1979) and 4.3BSD-Reno > (1990), respectively. > > * The an (man) and doc (mdoc) macro packages now support a `PO` > register to configure the page offset used by the formatter. > > * The an (man) macro package now supports a `TS` register to configure > the minimum space required between the tag of a `TP` paragraph and > its body. (If the width of the tag's formatted text plus this space > exceeds the paragraph indentation, the line is broken after the tag.) > This parameter, formerly hard-coded as `1n`, now defaults to `2n`. > > * The an (man) macro package's `IP` macro no longer honors the formerly > hard-coded 1n tag separation noted in the previous item. This means > that the first argument to the `IP` macro can abut the text of the > paragraph with no intervening space. If you use a word instead of > punctuation or a list enumerator for `IP`'s first argument, consider > migrating to `TP`. > > * The "an-ext.tmac" macro file, loaded automatically by the an (man) > macro package, no longer defines `DS` and `DE` macros. It had > defined them as empty (undocumentedly) since groff 1.20 (2009). > > * The doc (mdoc) macro package's `Mt` macro now sets its argument in > roman, not italics (or whatever the string `doc-Pa-font` was > configured to use). A new string, `doc-Mt-font`, for use in > "mdoc.local" files and similar, supports configuration of this face. > > * The doc (mdoc) macro package now performs font family switches > inline (that is, on the same output line) to Courier much less > frequently when formatting for typesetters, affecting the `Ar`, `Cm`, > `Er`, `Fa`, `Fd`, `Fl`, `Fn`, `Ft`, `Ic`, `Li`, and `Nm` macros. > This change was made to reduce the ambiguity of space widths when > typesetting the monospaced Courier and proportional Times fonts > adjacently. Bear in mind that you can use the "mdoc.local" file to > customize the font used to render nearly any mdoc(7) macro's > arguments; this mechanism has been in place since 1992. > > * The doc (mdoc) macro package's `Ql` macro now operates more simply; > it no longer (ever) quotes its arguments when formatting for > typesetters. In practice, it does not seem difficult to distinguish > even single characters in Courier from those in Times. (If it is, an > _explicit_ quoting macro like `Sq` or `Dq` should be used.) > > * The doc (mdoc) macro package's `Lk`, `Mt`, and `Xr` macros now > produce hyperlinks on HTML, PDF, and terminal devices. See above > regarding hyperlink support being enabled by default. > > * The doc (mdoc) macro package now honors the `U` register and `MF` > string as the an (man) package does. > > * The new macro file "koi8-r.tmac" supports the KOI8-R character > encoding, which supports the new Russian locale for groff. > > * The m (mm) macro package now uses a 3v bottom margin rather than 2v. > (Using the default type size and vertical spacing, the result is a > half-inch margin, just like the existing top margin.) When > formatting for terminals, content aligned to the bottom of the page > (footers, footnotes, `BS`/`BE` bottom blocks, and similar) now sets > one line higher than before. Further, the margin between the body > text and any page footers is now 2v, like that between the body text > and page headers, not 1v. > > * The m (mm) macro package's `Limsp` register (a GNU extension) has > been removed; see the item regarding the `LI` macro below. > > * The m (mm) macro package's `Le` register now defaults to `1`, > consistently with the `Lf`, `Lt`, and `Lx` registers of similar > purpose, but inconsistently with DWB 3.3 mm. Explicitly assigning > the `Le` register in a document's preamble works as it always has. > > * The m (mm) macro package's `AST` macro (a GNU extension) is > deprecated, warns upon usage, and is slated for withdrawal in a > future release. Assign to the new string `Abstract` instead. > > * The m (mm) macro package's `ISODATE` macro (a GNU extension) is > deprecated, warns upon usage, and is slated for withdrawal in a > future release. Assign to the new register `Isodate` instead. > > * The m (mm) macro package's `EPIC` macro (a GNU extension) now > interprets its "width" argument in ens by default, and its "height" > argument in vees, instead of basic units, for consistency with the > rest of the package. > > * Similarly, the m (mm) macro package's `PIC` macro (a GNU extension) > now interprets an argument to its `-I` option in ens instead of ems > by default. > > * The m (mm) macro package no longer superscripts _and_ brackets a > reference mark (the `Rf` string). Instead, the new `Rfstyle` > register controls its formatting. The default, 0, selects bracketing > in nroff mode and superscripting in troff mode. Set `Rfstyle` to 3 > in a document to obtain groff mm's previous mark formatting behavior. > > * The m (mm) macro package's `Li` register now defaults to 5 ens (not > 6) to align with the `Pi` register default. > > * The m (mm) macro package's `Li` register now configures the text > indentation of items in `RL` lists (as it long has for `AL` lists) > instead of hard-coding a value of 6 ens as DWB 3.3 mm does. > > * The m (mm) macro package's `BVL` (a GNU extension) and `VL` macros' > first arguments are now optional. If omitted, the paragraph > indentation amount (register `Pi`) is used for list items' text > indentations. > > * The m (mm) macro package's `DL` macro now uses the `EM` string as the > mark instead of an em dash special character literal. (The latter > remains the default definition of the `EM` string.) > > * The m (mm) macro package's `DS` macro now interprets its third > argument (a right-hand indentation) in ens by default, for > consistency with the rest of the package. This is a difference from > DWB mm (which passed the value unprocessed to the `ll` request, which > itself uses ems), and groff mm's own historical behavior, which used > basic units. > > * The m (mm) macro package's `HU` macro now supports an optional second > argument as a GNU extension. It corresponds to the optional third > argument of the `H` macro. > > * The m (mm) macro package's `IND` macro (a GNU extension), now calls > `SK` only if no `TXIND` macro is defined, instead of performing this > action as part of the fallback when no `TYIND` macro is defined. > > * The m (mm) macro package now supports a user-definable hook macro > `AFX`, which if defined is called by `AF` in lieu of the latter's > normal operation. Applications include customization of letterhead. > > * The m (mm) macro package now supports a user-definable hook macro > `RPX`, which if defined is called by `RP` in lieu of the latter's > normal operation (breaking the page [potentially], and formatting the > reference list caption string `Rp`). > > * The m (mm) macro package's `LI` macro now interprets its second > argument as a Boolean value indicating whether a space should > separate the list item mark from its prefix (the first argument). > Thus, where you formerly specified "2" to indicate no such > separation, you would now use "0", matching the semantics of the > former `Limsp` register. "2" continues to be recognized and handled > as before, but prompts a warning; migrate your documents. > > * The m (mm) macro package now supports an `Aumt` string to suppress > the appearance of positional arguments to the `AU` macro in the > document heading used by memorandum types 0-3 and 6. By default, all > such arguments appear, except the second (author initials). For > example, a value of "3 4" more accurately reproduces London & > Reiser's 1978 paper describing the porting of Unix to the VAX-11/780. > > * The m (mm) macro package now supports an `Rpfmt` string specifying > the `LB` macro arguments that the package uses to format the items in > an `RP` reference list. > > * The m (mm) macro package now supports the `E` register as DWB mm did. > > * The m (mm) macro package now supports DWB mm's `Rg` string. > > * The m (mm) macro package's `nP` macro now behaves more like DWB mm's. > It applies a temporary indentation to the second output line of a > paragraph to align it with the start of the paragraph text (not the > tag/label) in the first, and resets the paragraph counter when the > first- or second-level section heading number increments. > > * The m (mm) macro package's `Iso` register is now named `Isodate` to > make its meaning less ambiguous. The old name remains as an alias. > > * The m (mm) macro package's `Rpe` register is now named `Rpej` for > better symmetry with `Ej`. The old name remains as an alias. > > * The m (mm) macro package has renamed several strings to make their > purposes less obscure; they determine the content of captions, not > list items. > `Licon` -> `Captc` > `Liec` -> `Capec` > `Liex` -> `Capex` > `Lifg` -> `Capfg` > `Litb` -> `Captb` > The old names remain as aliases. > > * The m (mm) macro package has renamed the `Tcst` string to `Tcstatus` > to make its purpose less obscure. The old name remains as an alias. > > * The m (mm) macro package recognizes new register names `Ftnum` and > `Rfnum` for the automatically incrementing footnote and reference > counters. The old, DWB-compatible but cryptic, names `:p` and `:R` > remain supported. > > * The s (ms) macro package now sets the vertical spacing register > defaults for normal (`VS`) and footnote (`FVS`) text to 120% of the > type size configured in the `PS` and `FPS` registers, respectively, > rather than 2 points larger, to comport with generally accepted > typesetting principles. Thus, when formatting a document with a type > size of 20 points, the vertical spacing now defaults to 24 points > rather than 22. > > * The s (ms) macro package now subtracts one vee from the footer trap > location computed using the `FM` register. When using the default > `FM` value of `1i`, this makes the size of the margin from the footer > baseline to the bottom of the page 3 vees or one half-inch, > consistently with that between the header baseline and the page top. > While a bug fix, and consistent with DWB 3.3 ms, this computation is > inconsistent with Seventh Edition Unix ms and Heirloom Doctools ms. > When formatting for terminals, footers now set one line higher than > before. The size of the footnote area is not affected; instead there > is a 1v smaller margin between its bottom and the footer baseline. > > Output drivers > -------------- > > * grohtml(1), the (X)HTML output driver, supports a new `-k` command- > line option that takes a mandatory argument, either "ascii" or > "utf-8", which it recognizes case-insensitively. This feature > configures representation of character entities in the output. Based > on work by TANAKA Takuji. > > * gropdf(1), the PDF output driver, now allows embedding of JFIF/JPEG > and JPEG 2000 image file formats. If PerlMagick is installed, many > more image file formats, including PNG, PAM, and GIF, can be > embedded. See also the item regarding `PDFPIC` above. Thanks to > Deri James. > > * gropdf now supplies its own "SS" (slanted symbol) font to improve > rendering of documents requiring slanted lowercase Greek letters, > such as those employing the eqn(1) preprocessor. groff supplies the > font in PFB format, and gropdf automatically embeds it, as it is not > a standard PDF font. Formerly, groff's "pdf.tmac" file defined > fallback characters for lowercase Greek letters, applying a slant of > 16 degrees to the upright glyphs available in the standard symbol > font "S". That technique produced glyphs slightly larger than those > in grops's "SS" font. Thanks to Deri James. > > * gropdf now subsets embedded fonts by default, meaning that it stores > only the glyphs a document actually uses. Font subsetting usually > reduces the size of the PDF gropdf creates. Thanks to Deri James. > > * gropdf supports a new `--opt` command-line option, permitting a few > features, including font subsetting, to be selectively enabled. > Thanks to Deri James. > > * gropdf now emits PDFs that conform to the PDF 1.7 standard (also > known as ISO 32000). Its new `--pdfver` command-line option permits > production of PDF 1.4-conformant output instead. Thanks to Deri > James. > > * gropdf supports a new `pdf: pagenumbering` device extension command > and `pdfpagenumbering` convenience macro, allowing control of the > page numbers in a PDF reader's overview panel. It is common for a > document to number early pages with Roman numerals and then restart > page enumeration at decimal 1 for its main matter. Thanks to Deri > James. > > * gropdf now offers its own implementations of the "pdfmark" macro > package's "pdfhref" and other macros, supporting internal (bookmarks, > named destinations) and external (URL) hyperlinks, and the > specification of hotspots for link text. For example, when bundling > multiple man pages into a collection, as the supplied > groff-man-pages.pdf document and the Linux man-pages project do, > references to man pages within the collection are supported with > internal hyperlinks, and those outside with external ones. Thanks to > Deri James. > > * gropdf now supports characters outside the Unicode Basic Latin subset > in bookmarks, named destinations, and external hyperlinks. (They > must be encoded using groff's Unicode special character escape > sequences; the preconv preprocessor is helpful to simply this > requirement.) Thanks to Deri James. > > * gropdf now recognizes a `GROPDF_OPTIONS` environment variable, > interpreting it as a space-separated list of command-line options. > Explicit command-line options override any settings from this > environment variable. You can use this variable to obviate passing > options to gropdf via groff's `-P` option. Thanks to Deri James. > > * grops(1), the PostScript output driver, now supports fonts encoded > using UTF-16. Indicate the encoding by including the string > "-UTF16-" within the font's name as specified by the "internalname" > directive in its font description file. Thanks to TANAKA Takuji. > > * The PostScript output driver grops(1) no longer accepts spaces as > field separators in its "download" file; this is so that spaces can > appear in font file names, and to better align the syntax of this > file with that used by gropdf(1). The download file for grops > shipped by groff has long used tabs rather than spaces for field > separation. > > * The PostScript output driver grops(1)'s macro file "ps.tmac" no > longer defines fallback special characters `\[S ,]` and `\[S ,]` to > simulate support for what Unicode calls LATIN {CAPITAL,SMALL} LETTER > S WITH COMMA BELOW. The file's definition constructed these glyphs > by overstriking the Basic Latin "S" (or "s") with a cedilla accent, > which is regarded as less orthographically acceptable than in the > past. A user's document or macro file can still do exactly what > "ps.tmac" used to. > > .fchar \[S ,] \o'S\[ac]' > .hcode \[S ,]s > .fchar \[s ,] \o's\[ac]' > .hcode \[s ,]s > > * The PostScript output driver grops(1) once again accepts a file name > containing slashes as a document prolog or resource (such as a font > to be downloaded into the document). This is a restoration of groff > 1.22.4 and earlier behavior; groff's 1.23.0 change of not accepting a > file name containing slashes as an encoding or font description > remains in place. (We impose this restriction because the output > driver interprets the contents of these files; it does not interpret > the PostScript prolog or resource files.) > > * grotty(1) now supports devices recognizing ECMA-48/ISO 6429 SGR 38 > and 48 escape sequences that select RGB colors using 8 bits per color > channel. A new command-line option, `-t`, configures emission of > these escape sequences instead of the SGR 30-37 and 40-47 sequences > supporting 3- or 4-bit color. Thanks to Deri James. > > Example: > > $ groff -T utf8 -P -t <<EOF > .defcolor pink rgb #ffc0cb > .defcolor springgreen rgb #00ff7f > Hello, \f[B]\m[pink]colorful \m[springgreen]world\m[default]\f[]! > .pl \n[nl]u > EOF > > * gxditview(1), the X11 output driver and document previewer, now > accepts the option `-v` as a synonym of `--version` (and `-version`). > This change aligns it with other groff output drivers, and makes it > work correctly with "groff -vX". > > Utilities > --------- > > * afmtodit now recognizes a '-q' option to suppress diagnostics > reporting duplicate mappings in favor of a count thereof, and the > "BuildFoundries" script uses it. Recent versions of the URW fonts > have tons of duplicate mappings (for groff's purposes) and to our > knowledge these are all harmless. > > * grog no longer supports the `--ligatures` and `--run` options. > Simulate the former (which was specific to the "pdf" output device) > with the option sequence "-P -U -P y", and the latter by using the > command substitution feature of your shell; see section "Examples" of > groff(1). > > * groff now offers install-font.bash, a shell script that interactively > assists the configuration of fonts for use with the GNU troff > formatter and the gropdf and grops output drivers. For now, it is > provided as an example, as it lacks a man page. You can change to > its directory and run "bash install-font.bash -H" for a man page-like > description of its features and operation. > > Miscellaneous > ------------- > > * The contributed programs gperl and gpinyin no longer accept > abbreviated forms of the long options `--help` and `--version`. The > respective synonymous short options `-h` and `-v` remain. > > * Font description files now support a variant of the "charset" > directive: "charset-range" works like the existing "charset" > directive except that the glyph descriptions use a `name` of the form > "uEEEE..uFFFF" (where "EEEE" and "FFFF" are hexadecimal digit > sequences), and apply the metrics identically to all glyphs in the > designated range. Thanks to TANAKA Takuji. > > * groff now ships font description files usable with the "ps", "html", > "xhtml", and "utf8" output devices to support East Asian fonts. > (Caveat: with few exceptions, groff does not ship font files > themselves.) These are intended as abstractions of faces to permit > consistent naming while allowing custom font selections, just as with > the 12 text typefaces supported across output devices for Latin > scripts in groff (three families of four styles each). These CJK > font descriptions are not organized into groff font families, but are > similarly arranged. > > CSH: Simplified Chinese, Hei style > CSS: Simplified Chinese, Song style > CTH: Traditional Chinese, Hei style > CTS: Traditional Chinese, Song style > JPG: Japanese, Gothic style > JPM: Japanese, Mincho style > KOG: Korean, Gothic style > KOM: Korean, Mincho style > > Thanks to TANAKA Takuji. > > * The commands addftinfo, grodvi, post-grohtml, grolbp, grolj4, grops, > grotty, eqn, pre-grohtml, gxditview, pic, preconv, refer, soelim, > tbl, groff, troff, hpftodit, indxbib, lkbib, lookbib, tfmtodit, and > xtotroff now exit with status 2 instead of 1 on usage errors. grn > now exits with status 2 on a usage error instead of a successful > status (0). > > * Support for terminal devices using the CCSID 1047 (EBCDIC) encoding > has been withdrawn. This change partially clears the way for GNU > troff to interpret UTF-8 input directly (without preconv(1) > preprocessor usage) in the future. Use iconv(1) to covert a code > page 1047 document to US-ASCII or ISO Latin-1 prior to its input to > GNU troff. preconv(1), and therefore groff(1)'s `-k` and `-K` > options, can do this as well if preconv is built with iconv support. > Use `preconv -v` to determine this fact. > > * groff's "configure" script now tries harder to determine an > appropriate paper format for the system; its output reports how it > made its determination. Any existing "/etc/papersize" file is one of > the resources it consults. > > * groff's "configure" script now supports a "--without-urw-fonts" > option, for use on systems where the URW replacement fonts for > PostScript and PDF standard fonts are unavailable or not desired. It > also silences the lengthy warning the script issues when these fonts > and their metric files are not found. Configuring without URW font > support reduces the gropdf(1) output driver's functionality; see > subsection "Feature service levels and URW font support" of that man > page for details. > > * You can now specify any paper format you like--including the file > specification "/etc/papersize" for systems using "libpaper"--as the > default that the groff build writes to generated device description > files ("DESC") for the "dvi", "lbp", "lj4", "pdf", and "ps" output > drivers. (The paper format must still be valid; see groff_font(5).) > > Example: ./configure PAGE=/etc/papersize --prefix=/opt/gnu > > * Building groff no longer requires the PSUtils package. > > * Building groff no longer requires the makeinfo command. Since groff > 1.23.0, we ship groff's Texinfo manual in several formats as part of > groff's distribution archive. We ask that distributors provide their > users with all formats appropriate to the platform (GNU Info, HTML, > plain text, TeX DVI, and PDF). Thanks to onf. > > * Polish language input documents are now supported, including > hyphenation patterns from the CTAN project and localized strings > for the man, ms, me, mm, and mom packages. Thanks to Dariusz > Chilimoniuk. > > * Russian language input documents using the KOI8-R encoding are now > supported, including hyphenation patterns from the ruhyphen project > and localized strings for the man, ms, me, mm, and mom packages. > Thanks to Nikita Ivanov. > > * Spanish language input documents are now supported, including > hyphenation patterns from the hyph-utf8 project and localized strings > for the man, ms, me, mm, and mom packages. Thanks to Eloi Montañés. > > * The localization macro files now set up an appropriate hyphenation > mode default. For Chinese and Japanese, this is zero. > > * If groff programs have their current time overridden by the > SOURCE_DATE_EPOCH environment variable, then that time is always > displayed in UTC. That environment variable is normally only set > when specifically requesting build systems to produce reproducible > output, and it is useful for reproducibility test harnesses to vary > the TZ environment variable and ensure that it does not affect the > output of the build; those harnesses have no way to set TZ=UTC only > for groff programs. People setting SOURCE_DATE_EPOCH are likely to > be more in the "system programmer" camp as described in the release > notes for 1.23.0, so it is easier to defend time-zone-invariant > output to them. In all other cases, the current time remains > displayed in local time. Thanks to Colin Watson. > > * The minimum version of Perl required to build groff is now 5.8 (18 > July 2002), incremented from 5.6.1. > > * groff now looks for the Netpbm program pamcut(1) rather than > pnmcut(1). Per its developers, the former was introduced in 2001 > ago and the latter withdrawn in 2009. > > * The Makefile macro `DEVICE` has been renamed to `DEFAULT_DEVICE`; be > aware if your builds don't use "ps" as the default output device. > > * The groff_diff(7) man page no longer contains examples. They remain > in groff's Texinfo manual. > > * groff's Texinfo manual now adapts its content to the groff command > prefix configured at build time. If the build is configured without > a leading "g"--omitting it has been groff's default for many years, > possibly forever--then our Texinfo manual now omits that prefix when > mentioning the affected commands (all replacements for AT&T troff > commands). This way, if you select a command prefix, say "limbo", > and rebuild the Texinfo manual, the manual reflects the prefix used > by your build configuration, and talks about "limboeqn", > "limbotroff", "limborefer", and so on. > > > Acknowledgements > ================ > > We'd like to thank the following people for helping ensure the quality > of this release. > > Alan Coopersmith > Alex Colomar > Alexander Kanavin > Alexander Monakov > Alexis (flexibeast) > Alexis Hildebrandt > Andreas Kusalananda Kähäri > Andrew Bower > Axel Kielhorn > Benno Schulenberg > Bjarni Ingi Gislason > Brian Inglis > Bruno Haible > Carsten Kunze > Christof Meerwald > Colin Watson > Collin Funk > Damian McGuckin > Dan Plassche > Dariusz Chilimoniuk > Dave Kemper > Deri James > Doug McIlroy > Duncan Losin > Eli Schwartz > Eloi Montañés > Frazer Williams > Frederic Chartier > Gavin Smith > Gene > Grisha Levit > Günther Noack > Hanno Boeck > Hans Bezemer > Heinz-Jürgen Oertel > Helge Kreutzmann > Helmut Grohne > Ian Ropers > Ingo Schwarze > James Cloos > James Youngman > Jeff Conrad > Joerg van den Hoff > John de Armas > Jonathan Gray > Ken Mandelberg > Larry Kollar > Lennart Jablonka > Lukas Javorsky > Martin D. Kealey > Michał Kruszewski > Mike Fulton > Morten Bo Johansen > Nelson H. F. Beebe > Nikita Ivanov > Norwid Behrnd > Oliver Corff > onf > Patrice Dumas > Paul Eggert > Peter Chubb > Peter Schaffter > Phil Chadwick > Pim > Ralph Corderoy > Rob Kolstad > Robert Yang > Ross Burton > Russ Allbery > Sebastien Peterson-Boudreau > Stefan Möding > Sven Schober > T. Kurt Bond > TANAKA Takuji > Tadziu Hoffman > Thomas Dickey > Thorsten Glaser > Thérèse Godefroy > Walter Alejandro Iglesias > Werner Lemberg > наб >
