Changes since groff 1.23.0.rc1 ============================== troff ----- o The groff locale (the default input language) is now determined using the system locale. The LC_ALL and LANG environment variables are checked, in that order. If set, the value's first two characters determine the groff locale. If these variables are not set, if the first one found is set to "C", or if no groff localization file exists for the language, groff falls back to English, loading en.tmac. Those who want groff's default locale to differ from LC_ALL/LANG should edit the troffrc file to source the appropriate groff locale macro file (cs.tmac, de.tmac, den.tmac, fr.tmac, ja.tmac, sv.tmac, zh.tmac). The default hyphenation mode (as used by the .hy request) for users of English is thus changed from "1", which was inappropriate for the TeX-based hyphenation patterns groff has used since at least 1991, to "4". However, calling .hy without an argument remains synonymous with ".hy 1". o A new read-only register ".nm" is implemented. It reports the enablement status of output line numbering (caused by the .nm request) irrespective of the temporary suspension of numbering with the .nn request. This register was introduced because there was no way to introspect its state, tbl(1) needs to be able to do so, and the writable line number register \n[ln] is not a reliable proxy for it. o New requests 'soquiet' and 'msoquiet' are available. They operate as 'so' and 'mso', respectively, except that they do not emit a warning diagnostic if the file name argument does not exist. nroff ----- o nroff now recognizes the -b, -k, -K, and -z options and passes them through to troff. Macro Packages -------------- o The new rfc1345 macro package, contributed by Dorai Sitaram, defines special character glyph names implementing RFC 1345 mnemonics (plus some additions from Vim, which itself uses RFC 1345 for its digraphs). It is documented in the groff_rfc1345(7) man page. o The s (ms) macro package supports a new string, FR, which defines the ratio of the footnote line length to the current line length. The default expression is "11/12", 11/12ths of the normal line length, adopted for better compatibility with ms documents prepared with AT&T ms or its descendant implementations in Heirloom Doctools and neatroff. This is a change from previous groff releases, which used a ratio of 5/6ths. You may wish to set the FR string to 1 to align with contemporary typesetting practices. In Version 7 Unix ms, its descendants, and groff prior to this release, an FL register was used for the line length in footnotes; however, setting this register at document initialization time had no effect on the footnote line length in multi-column arrangements. FR should be used in preference to the old FL register in contemporary documents; see the groff Texinfo manual or the "Using groff with the ms macros" document, also part of this release. Miscellaneous ------------- o The semantics of the environment variable SOURCE_DATE_EPOCH (support for which was added in 1.22.4) to groff were not established with respect to time zone selection, prompting divergent interpretations; Debian and distributions derived from it have for several years patched groff to implicitly use UTC as the time zone when interpreting the current time (or SOURCE_DATE_EPOCH) as a local time. While a convenient and defensible choice for reproducible build efforts, it runs against the grain of user expectations. Systems programmers like monotonically increasing clocks; the broader user base usually prefers a clock that follows an applicable civil calendar. Users of SOURCE_DATE_EPOCH may also wish to set the TZ environment variable. Changes since groff 1.22.4 ========================== troff ----- o A new read-only register ".cp" is implemented. Within a .do request, "\n[.cp]" holds the saved value of compatibility mode. See groff_diff(7) or the groff Texinfo manual for rationale, use case, and example. o Point-size escapes of the form '\sNN', where NN is in the range 10-39, are now recognized only in compatibility mode (groff -C); when encountered, an error diagnostic is emitted. In normal mode, \sN is interpreted as setting the point size to the single-digit value N, which ends the escape. This change eliminates a quirk in the language grammar that dates back to the mid-1970s (AT&T troff by Ossanna) but was not documented in the Troff User's Manual until 1992 when Kernighan updated CSTR #54 for device-independent AT&T troff. The form '\s(NN' is accepted for two-digit point sizes in all known troffs. The form '\s[NNN]' accepts a numeric expression of variable length; it has been supported by groff since version 1.02 (June 1991) at the latest and is by current versions of Heirloom Doctools troff and neatroff. The form "\s'NNN'" is also widely supported. Summary: in your documents, rewrite escapes beginning with '\s1', '\s2', or '\s3' in an unambiguous and portable form. For instance, '\s36' can become any of: \s(36 \s[36] \s'36' You can use grep '\\s[123]' to find instances in your documents. Those who have changed the escape character with the 'ec' request (an advanced usage) are expected to be able to cope; ask the development team for support if you need it. o New requests 'stringdown' and 'stringup' are available. These change the string named in their argument by replacing each of its bytes with its lowercase or uppercase version (if any), respectively. groff special characters (see the groff_char(7) man page) can be used and the output will often transform in the expected way due to the regular naming convention of the special character escapes for accented letters. nroff ----- o The new option -P takes an argument to pass to the output driver (always grotty(1)). "-P-i" directs the terminal device to display real italic (oblique) characters instead of underlining: it is up to your terminal (emulator) to support italics (xterm does since patch #314 [2014-12-28]). "-P-c" and "-P-h" can now be used instead of "-c" and "-h"; the latter pair may eventually be deprecated and repurposed. o The new option -V emits the constructed groff command that nroff would run to standard output instead of executing it. Arguments to nroff that contain shell metacharacters may not be sufficiently escaped for the output of nroff -V to be copied and pasted to the shell prompt; this is a historical deficiency of the Bourne shell family not yet corrected by the POSIX standard. o nroff now recognizes the -E option and passes it through to troff. Macro Packages -------------- o The an (man) macro package supports a new AD string to put the default adjustment mode under user control. The default is 'b' (adjust lines to both margins) as has been the Unix man page default since 1979. o The an (man) and doc (mdoc) macro packages support new CS and CT registers to control rendering of man page section headings and titles (seen in the page header), respectively, in full capitals. These default off (with no visible effect on pages which already fully capitalize these strings in man page sources). The rationale is to encourage man page authors to preserve case distinction information in (or restore it to) their titles and section headings, while giving users (including system administrators, distributors, integrators, and maintainers of man(1) implementations) a way to view the rendered page elements in full capitals if desired. o The an (man) macro package no longer honors an .ll request to set the line length in nroff devices prior to processing a man page. This was deprecated 18 years ago, and all known man program and macro package implementations either have set an LL register since 2002 (man-db man), 2005 (Brouwer/Lucifredi man), or don't let the user vary the line length freely (DWB troff, Solaris troff, Plan 9 troff) or at all (mandoc, Heirloom Doctools troff). o The groff_man(7) man page documenting the groff implementation of the an (man) macro package has been split into two pages. The original page remains as a terser reference for experienced users. A new page, groff_man_style(7), is a tutorial and style guide containing the same material supplemented with explanations, examples, and advice for the reader who is not an expert in *roff systems or in writing man pages. o The doc (mdoc) macro package now honors the HY register as the an (man) package does: to set the default hyphenation mode. It furthermore recognizes but ignores the AD string (see above) for compatibility with an (man). o The s (ms) macro package has added strings, \*< and \*>, to perform subscripting within a paragraph. They work analogously to the \*{ and \*} superscripting strings that have been present in groff ms since 1991 or earlier. o The s (ms) macro package no longer manipulates the warning level. If you want all warnings on, use the ".warn" request with no arguments in your ms document or pass "-w w" to groff (see troff(1) or the groff Texinfo manual for more on warnings). grotty ------ o On the Latin-1 output device ("groff -T latin1") the output glyph \[oq] (opening quote) is now rendered as code point 0x27 (apostrophe) instead of 0x60 (grave accent). The ISO 8859/ECMA-94 Latin character sets do not define any glyphs for directional ("typographer's") quotation marks, but the apostrophe is depicted as a neutral (vertical) glyph, whereas the grave accent 0x60 and acute accent 0xB4 are mirror-symmetric diacritical marks. This change has no effect on _input_ conventions for roff source documents. You can still get directional single quotes on UTF-8, PostScript, PDF, and other output devices supporting them by typing sequences like `this' in the input (character remapping with ".char" requests and similar notwithstanding). Miscellaneous ------------- o groffer has been deleted from the distribution.