On Mon, Jan 12, 2026 at 05:57:07PM +0200, Eli Zaretskii wrote:
> > Date: Mon, 12 Jan 2026 09:03:27 -0600
> > From: "G. Branden Robinson" <[email protected]>
> > Cc: [email protected]
> > 
> > > > I assume that bug has since been fixed.  Can you tell me in which
> > > > release it was?  There's a non-zero chance the question will come up
> > > > on the groff mailing list, and I'd like to be prepared with an
> > > > answer.
> > > 
> > > If you can tell me how to test this and which man pages use this (or
> > > from where I can download them), I could then tell you whether it was
> > > indeed fixed and in what version of Emacs.  (None of the systems to
> > > which I have access have Groff 1.23 installed, so I cannot produce
> > > these man pages myself, sorry.)
> > 
> > Without groff 1.23.0, you can't really.
> 
> Would it be possible for you to send me a formatted man page, output
> from Groff 1.23, that I could use for testing this?

I've attached the file produced on my system by

$ MAN_KEEP_FORMATTING=1 man groff >groff.out

$ groff --version
GNU groff version 1.23.0
Copyright (C) 2022 Free Software Foundation, Inc.
GNU groff comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of groff and its subprograms
under the terms of the GNU General Public License.
For more information about these matters, see the file
named COPYING.

called subprograms:

GNU troff (groff) version 1.23.0
GNU grops (groff) version 1.23.0
$ man --version
man 2.12.0
groff(1)                                              General Commands 
Manual                                              groff(1)

Name
       groff - front end to the GNU roff document formatting system

Synopsis
       groff [-abcCeEgGijklNpRsStUVXzZ] [-d 
ctext] [-d string=text] 
[-D fallback-encoding] [-f font-family] 
[-F font-directory]
             [-I inclusion-directory] [-K 
input-encoding] [-L spooler-argument] [-m 
macro-package] [-M macro-directory] [-n 
page-
             number] [-o page-list] [-P 
postprocessor-argument] [-r 
cnumeric-expression] [-r 
register=numeric-expression]
             [-T output-device] [-w 
warning-category] [-W warning-category] 
[file ...]

       groff -h
       groff --help

       groff -v [option ...] [file ...]
       groff --version [option ...] [file ...]

Description
       groff  is  the  primary  front  end to the GNU roff 
document formatting system.  GNU roff is a typesetting system that 
reads
       plain text input files that include formatting commands to produce 
output in PostScript, PDF, HTML, DVI, or  other  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.  If no 
file operands are specified, or if file is β€œ-”,  
groff
       reads the standard input stream.

       A  reimplementation and extension of the typesetter from AT&T Unix, 
groff is present on most POSIX systems owing to its long
       association with Unix manuals (including man pages).  It and its 
predecessor are notable for  their  production  of  several
       best-selling  software  engineering texts.  groff is capable of 
producing typographically sophisticated documents while con‐
       suming minimal system resources.

       The groff command orchestrates the execution of preprocessors, 
the transformation of input documents into a  device-indepen‐
       dent page description language, and the production of output from that 
language.

Options
       -h and --help display a usage message and exit.

       Because  groff is intended to subsume most users' direct 
invocations of the ]8;;man:troff(1)\troff(1)]8;;\ formatter, the 
two programs share a set
       of options.  However, groff has some options that 
troff does not share, and others which groff interprets  
differently.   At
       the same time, not all valid troff options can be given to 
groff.

   groff-specific options
       The following options either do not exist in GNU troff or are 
interpreted differently by groff.

       -D enc Set fallback input encoding used by 
]8;;man:preconv(1)\preconv(1)]8;;\ to enc; implies 
-k.

       -e     Run ]8;;man:eqn(1)\eqn(1)]8;;\ preprocessor.

       -g     Run ]8;;man:grn(1)\grn(1)]8;;\ preprocessor.

       -G     Run ]8;;man:grap(1)\grap(1)]8;;\ 
preprocessor; implies -p.

       -I dir Works  as  troff's  option (see 
below), but also implies -g and -s.  It is passed to 
]8;;man:soelim(1)\soelim(1)]8;;\ and the output driver,
              and grn is passed an -M option with 
dir as its argument.

       -j     Run ]8;;man:chem(1)\chem(1)]8;;\ 
preprocessor; implies -p.

       -k     Run ]8;;man:preconv(1)\preconv(1)]8;;\ 
preprocessor.  Refer to its man page for its behavior if neither of 
groff's -K or -D options  is  also
              specified.

       -K enc Set input encoding used by 
]8;;man:preconv(1)\preconv(1)]8;;\ to enc; implies 
-k.

       -l     Send  the  output  to a spooler program for printing.  
The β€œprint” directive in the device description file specifies
              the default command to be used; see 
]8;;man:groff_font(5)\groff_font(5)]8;;\.  If no such directive is 
present for the output device, output  is
              piped to ]8;;man:lpr(1)\lpr(1)]8;;\.  See options 
-L and -X.

       -L arg Pass  arg  to  the print spooler 
program.  If multiple args are required, pass each with a separate 
-L option.  groff
              does not prefix an option dash to arg before passing it 
to the spooler program.

       -M     Works as troff's option (see below), but is 
also passed to ]8;;man:eqn(1)\eqn(1)]8;;\, 
]8;;man:grap(1)\grap(1)]8;;\, and 
]8;;man:grn(1)\grn(1)]8;;\.

       -N     Prohibit newlines between eqn delimiters: pass 
-N to ]8;;man:eqn(1)\eqn(1)]8;;\.

       -p     Run ]8;;man:pic(1)\pic(1)]8;;\ preprocessor.

       -P arg Pass arg to the postprocessor.  If 
multiple args are required, pass each with a separate -P 
option.  groff  does  not
              prefix an option dash to arg before passing it to the 
postprocessor.

       -R     Run  ]8;;man:refer(1)\refer(1)]8;;\  
preprocessor.  No mechanism is provided for passing arguments to refer 
because most refer options have
              equivalent language elements that can be specified within the 
document.

       -s     Run ]8;;man:soelim(1)\soelim(1)]8;;\ 
preprocessor.

       -S     Operate in β€œsafer” mode; see -U below for its 
opposite.  For security reasons, safer mode is enabled by default.

       -t     Run ]8;;man:tbl(1)\tbl(1)]8;;\ preprocessor.

       -T dev Direct troff to format the input for 
the output device dev.  groff then calls an output  driver  
to  convert  troff's
              output to a form appropriate for dev; see subsection 
β€œOutput devices” below.

       -U     Operate in unsafe mode: pass the -U option to 
pic and troff.

       -v
       --version
              Write version information for groff and all programs run 
by it to the standard output stream; that is, the given com‐
              mand line is processed in the usual way, passing -v to 
the formatter and any pre- or postprocessors invoked.

       -V     Output  the  pipeline  that groff would run to 
the standard output stream, but do not execute it.  If given more than
              once, groff both writes and runs the pipeline.

       -X     Use ]8;;man:gxditview(1)\gxditview(1)]8;;\ 
instead of the usual postprocessor to (pre)view a document on an X11 display.  
Combining this option
              with -Tps uses the font metrics of the PostScript 
device, whereas the -TX75 and -TX100 options use the metrics 
of X11
              fonts.

       -Z     Disable postprocessing.  troff output will 
appear on the standard output stream  (unless  suppressed  with  -z);  
see
              ]8;;man:groff_out(5)\groff_out(5)]8;;\ for a 
description of this format.

   Transparent options
       The following options are passed as-is to the formatter program 
]8;;man:troff(1)\troff(1)]8;;\ and described in more detail in its 
man page.

       -a     Generate a plain text approximation of the typeset 
output.

       -b     Write a backtrace to the standard error stream on each 
error or warning.

       -c     Start with color output disabled.

       -C     Enable AT&T troff compatibility mode; implies 
-c.

       -d cs
       -d name=string
              Define string.

       -E     Inhibit troff error messages; implies 
-Ww.

       -f fam Set default font family.

       -F dir Search in directory dir for the 
selected output device's directory of device and font description files.

       -i     Process standard input after the specified input files.

       -I dir Search dir for input files.

       -m name
              Process name.tmac before input files.

       -M dir Search directory dir for macro files.

       -n num Number the first page num.

       -o list
              Output only pages in list.

       -r cnumeric-expression
       -r register=numeric-expression
              Define register.

       -w name
       -W name
              Enable (-w) or inhibit (-W) emission of 
warnings in category name.

       -z     Suppress formatted device-independent output of 
troff.

Usage
       The architecture of the GNU roff system follows that of other 
device-independent roff implementations, comprising preproces‐
       sors, macro packages, output drivers (or β€œpostprocessors”), a suite of 
utilities, and the formatter troff at its heart.  See
       ]8;;man:roff(7)\roff(7)]8;;\ for a survey of how a 
roff system works.

       The  front end programs available in the GNU roff system make 
it easier to use than traditional roffs that required the con‐
       struction of pipelines or use of temporary files to carry a source 
document from maintainable form to  device-ready  output.
       The  discussion  below  summarizes the constituent parts of the GNU 
roff system.  It complements ]8;;man:roff(7)\roff(7)]8;;\ 
with groff-specific
       information.

   Getting started
       Those who prefer to learn by experimenting or are desirous of rapid 
feedback from the  system  may  wish  to  start  with  a
       β€œHello, world!” document.

       $ echo "Hello, world!" | groff -Tascii | sed '/^$/d'
       Hello, world!

       We  used  a  sed command only to eliminate the 65 blank lines 
that would otherwise flood the terminal screen.  (roff systems
       were developed in the days of paper-based terminals with 66 lines to a 
page.)

       Today's users may prefer output to a UTF-8-capable terminal.

       $ echo "Hello, world!" | groff -Tutf8 | sed '/^$/d'

       Producing PDF, HTML, or TeX's DVI is also straightforward.  The hard 
part may be selecting a viewer program for the output.

       $ echo "Hello, world!" | groff -Tpdf > hello.pdf
       $ evince hello.pdf
       $ echo "Hello, world!" | groff -Thtml > hello.html
       $ firefox hello.html
       $ echo "Hello, world!" | groff -Tdvi > hello.dvi
       $ xdvi hello.html

   Using groff as a REPL
       Those with a programmer's bent may be pleased to know that they can use 
groff in a read-evaluate-print loop  (REPL).   Doing
       so  can  be  handy  to  verify one's understanding of the formatter's 
behavior and/or the syntax it accepts.  Turning on all
       warnings with -ww can aid this goal.

       $ groff -ww -Tutf8
       \# This is a comment. Let's define a register.
       .nr a 1
       \# Do integer arithmetic with operators evaluated left-to-right.
       .nr b \n[a]+5/2
       \# Let's get the result on the standard error stream.
       .tm \n[b]
       3
       \# Now we'll define a string.
       .ds name Leslie\" This is another form of comment.
       .nr b (\n[a] + (7/2))
       \# Center the next two text input lines.
       .ce 2
       Hi, \*[name].
       Your secret number is \n[b].
       \# We will see that the division rounded toward zero.
       It is
       \# Here's an if-else control structure.
       .ie (\n[b] % 2) odd.
       .el even.
       \# This trick sets the page length to the current vertical
       \# position, so that blank lines don't spew when we're done.
       .pl \n[nl]u
       <Control-D>
                                  Hi, Leslie.
                           Your secret number is 4.
       It is even.

   Paper format
       In GNU roff, the page dimensions for the formatter 
troff and for output devices are handled separately.  In  the  
formatter,
       requests  are used to set the page length (.pl), page offset 
(or left margin, .po), and line length (.ll).  The right 
margin
       is not explicitly configured; the combination of page offset and line 
length provides the information  necessary  to  derive
       it.   The  papersize  macro package, automatically loaded by 
troff, provides an interface for configuring page dimensions by
       convenient names, like β€œletter” or β€œA4”; see 
]8;;man:groff_tmac(5)\groff_tmac(5)]8;;\.  The formatter's default 
in this installation is β€œA4”.

       It is up to each macro package to respect the page dimensions configured 
in this way.  Some offer alternative mechanisms.

       For each output device, the size of the output medium can be set in its 
DESC file.  Most output  drivers  also  recognize  a
       command-line  option -p to override the default dimensions and 
an option -l to use landscape orientation.  See 
]8;;man:groff_font(5)\groff_font(5)]8;;\
       for a description of the papersize directive, which takes an 
argument of the same form as -p.  The output driver's man page,
       such as ]8;;man:grops(1)\grops(1)]8;;\, may also be 
helpful.  groff uses the command-line option -P to pass 
options to output devices;  for  exam‐
       ple, use the following for PostScript output on A4 paper in landscape 
orientation.

              groff -Tps -dpaper=a4l -P-pa4 -P-l -ms foo.ms > foo.ps

   Front end
       The groff program is a wrapper around the 
]8;;man:troff(1)\troff(1)]8;;\ program.  It allows one to specify 
preprocessors via command-line options
       and  automatically  runs the appropriate postprocessor for the selected 
output device.  Doing so, the manual construction of
       pipelines or management of temporary files required of users of 
traditional ]8;;man:roff(7)\roff(7)]8;;\ systems can be avoided.  
Use the ]8;;man:grog(1)\grog(1)]8;;\
       program to infer an appropriate groff command line to format a 
document.

   Language
       Input to a roff system is in plain text interleaved with 
control lines and escape sequences.  The combination constitutes  a
       document  in  one  of a family of languages we also call roff; 
see ]8;;man:roff(7)\roff(7)]8;;\ for background.  An overview of 
GNU roff language
       syntax and features, including lists of all supported escape sequences, 
requests, and predefined registers, can be found  in
       ]8;;man:groff(7)\groff(7)]8;;\.   GNU  roff  
extensions to the AT&T troff language, a common subset of 
roff dialects extant today, are detailed in
       ]8;;man:groff_diff(7)\groff_diff(7)]8;;\.

   Preprocessors
       A preprocessor interprets a domain-specific language that produces 
roff language output.  Frequently, such input is confined
       to sections or regions of a roff input file (bracketed with 
macro calls specific to each preprocessor), which  it  replaces.
       Preprocessors  therefore  often interpret a subset of roff 
syntax along with their own language.  GNU roff provides reimple‐
       mentations of most preprocessors familiar to users of AT&T 
troff; these routinely have extended features and/or require  GNU
       troff to format their output.

              tbl         lays out tables;
              eqn         typesets mathematics;
              pic         draws diagrams;
              refer       processes bibliographic references;
              soelim      preprocesses β€œsourced” input files;
              grn         renders 
]8;;man:gremlin(1)\gremlin(1)]8;;\ diagrams;
              chem        draws chemical structural formulæ using 
pic;
              gperl       populates groff registers and 
strings using ]8;;man:perl(1)\perl(1)]8;;\;
              glilypond   embeds LilyPond sheet music; and
              gpinyin     eases Mandarin Chinese input using Hanyu 
Pinyin.

       A  preprocessor  unique  to GNU roff is 
]8;;man:preconv(1)\preconv(1)]8;;\, which converts various input 
encodings to something GNU troff can under‐
       stand.  When used, it is run before any other preprocessors.

       Most preprocessors enclose content between a pair of characteristic 
tokens.  Such a token must occur at the beginning of  an
       input  line  and use the dot control character.  Spaces and tabs must 
not follow the control character or precede the end of
       the input line.  Deviating from these rules defeats a token's 
recognition by the preprocessor.  Tokens  are  generally  pre‐
       served  in  preprocessor  output  and  interpreted  as macro calls 
subsequently by troff.  The ideal preprocessor is not yet
       available in groff.

                                           
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                           β”‚ preprocessor β”‚ starting token  β”‚  
ending token  β”‚
                                           
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
                                           β”‚     chem     β”‚     .cstart     β”‚   
  .cend      β”‚
                                           β”‚     eqn      β”‚       .EQ       β”‚   
   .EN       β”‚
                                           β”‚     grap     β”‚       .G1       β”‚   
   .G2       β”‚
                                           β”‚     grn      β”‚       .GS       β”‚   
   .GE       β”‚
                                           β”‚    ideal     β”‚       .IS       β”‚   
   .IE       β”‚
                                           β”‚              β”‚                 β”‚   
   .IF       β”‚
                                           β”‚     pic      β”‚       .PS       β”‚   
   .PE       β”‚
                                           β”‚              β”‚                 β”‚   
   .PF       β”‚
                                           β”‚              β”‚                 β”‚   
   .PY       β”‚
                                           β”‚    refer     β”‚       .R1       β”‚   
   .R2       β”‚
                                           β”‚     tbl      β”‚       .TS       β”‚   
   .TE       β”‚
                                           
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
                                           β”‚  glilypond   β”‚ .lilypond start β”‚ 
.lilypond stop β”‚
                                           β”‚    gperl     β”‚   .Perl start   β”‚   
.Perl stop   β”‚
                                           β”‚   gpinyin    β”‚  .pinyin start  β”‚  
.pinyin stop  β”‚
                                           
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

   Macro packages
       Macro files are roff input files designed to produce no output 
themselves but instead ease the  preparation  of  other  roff
       documents.  When a macro file is installed at a standard location and 
suitable for use by a general audience, it is termed a
       macro package.

       Macro  packages  can  be  loaded  prior to any roff input 
documents with the -m option.  The GNU roff system implements 
most
       well-known macro packages for AT&T troff in a compatible way 
and extends them.  These have one- or two-letter names  arising
       from  intense  practices  of naming economy in early Unix culture, a 
laconic approach that led to many of the packages being
       identified in general usage with the nroff and troff 
option letter used to invoke them, sometimes to punning effect, as with
       β€œman” (short for β€œmanual”), and even with the option dash, as in the 
case of the s package, much better known as ms or  even
       -ms.

       Macro packages serve a variety of purposes.  Some are β€œfull-service” 
packages, adopting responsibility for page layout among
       other  fundamental  tasks, and defining their own lexicon of macros for 
document composition; each such package stands alone
       and a given document can use at most one.

       an     is used to compose man pages in the format originating 
in Version 7 Unix (1979); see 
]8;;man:groff_man(7)\groff_man(7)]8;;\.  It can be  speci‐
              fied on the command line as -man.

       doc    is used to compose man pages in the format originating 
in 4.3BSD-Reno (1990); see 
]8;;man:groff_mdoc(7)\groff_mdoc(7)]8;;\.  It can be specified
              on the command line as -mdoc.

       e      is  the  Berkeley  general-purpose  macro suite, 
developed as an alternative to AT&T's s; see 
]8;;man:groff_me(7)\groff_me(7)]8;;\.  It can be
              specified on the command line as -me.

       m      implements the format used by the second-generation AT&T 
macro suite for general documents, a  successor  to  s;  see
              ]8;;man:groff_mm(7)\groff_mm(7)]8;;\.  It can be 
specified on the command line as -mm.

       om     (invariably  called β€œmom”) is a modern package written 
by Peter Schaffter specifically for GNU roff.  Consult the 
]8;;file:///usr/share/doc/groff-base/html/mom/toc.html\mom
              HTML manual]8;;\ for extensive documentation.  Sheβ€”for 
mom takes the female pronounβ€”can be specified on the  command  line
              as -mom.

       s      is  the  original  AT&T general-purpose document format; 
see ]8;;man:groff_ms(7)\groff_ms(7)]8;;\.  It can be specified on 
the command line as
              -ms.

       Others are supplemental.  For instance, andoc is a wrapper 
package specific to GNU roff that recognizes whether  a  document
       uses  man  or mdoc format and loads the corresponding 
macro package.  It can be specified on the command line as -mandoc.  A
       ]8;;man:man(1)\man(1)]8;;\ librarian program may use this 
macro file to delegate loading of the correct macro package; it  is  thus  
unnecessary
       for man itself to scan the contents of a document to decide the 
issue.

       Many  macro files augment the function of the full-service packages, or 
of roff documents that do not employ such a packageβ€”
       the latter are sometimes characterized as β€œraw”.  These auxiliary 
packages are described, along with details of  macro  file
       naming and placement, in 
]8;;man:groff_tmac(5)\groff_tmac(5)]8;;\.

   Formatters
       The formatter, the program that interprets roff language input, 
is ]8;;man:troff(1)\troff(1)]8;;\.  It provides the features of 
the AT&T troff and
       nroff  programs  as well as many extensions.  The command-line 
option -C switches troff into compatibility 
mode, which tries
       to emulate AT&T troff as closely as is practical to enable the 
formatting of documents written for the older system.

       A shell script, ]8;;man:nroff(1)\nroff(1)]8;;\, emulates 
the behavior of AT&T nroff.  It attempts to correctly encode the 
output based on the  lo‐
       cale, relieving the user of the need to specify an output device with 
the -T option and is therefore convenient for use with
       terminal output devices, described in the next subsection.

       GNU  troff  generates  output  in  a  device-independent,  but  
not  device-agnostic,  page description language detailed in
       ]8;;man:groff_out(5)\groff_out(5)]8;;\.

   Output devices
       troff output is formatted for a particular output 
device, typically specified by the -T option to the formatter 
or  a  front
       end.   If  neither  this  option nor the GROFF_TYPESETTER 
environment variable is used, the default output device is ps.  An
       output device may be any of the following.

       ascii    for terminals using the ISO 646 1991:IRV character set 
and encoding, also known as US-ASCII.

       cp1047   for terminals using the IBM code page 1047 character 
set and encoding.

       dvi      for TeX DVI format.

       html
       xhtml    for HTML and XHTML output, respectively.

       latin1   for terminals using the ISO Latin-1 (ISO 8859-1) 
character set and encoding.

       lbp      for Canon CaPSL printers (LBP-4 and LBP-8 series laser 
printers).

       lj4      for HP LaserJet4-compatible (or other PCL5-compatible) 
printers.

       pdf      for PDF output.

       ps       for PostScript output.

       utf8     for terminals using the ISO 10646 (β€œUnicode”) 
character set in UTF-8 encoding.

       X75      for previewing with gxditview using 75 dpi 
resolution and a 10-point base type size.

       X75-12   for previewing with gxditview using 75 dpi 
resolution and a 12-point base type size.

       X100     for previewing with gxditview using 100 dpi 
resolution and a 10-point base type size.

       X100-12  for previewing with gxditview using 100 dpi 
resolution and a 12-point base type size.

   Postprocessors
       Any program that interprets the output of GNU troff is a 
postprocessor.  The postprocessors provided by GNU roff are  
output
       drivers,  which prepare a document for viewing or printing.  
Postprocessors for other purposes, such as page resequencing or
       statistical measurement of a document, are conceivable.

       An output driver supports one or more output devices, each with its own 
device description file.  A  device  determines  its
       postprocessor  with  the  postpro directive in its device 
description file; see ]8;;man:groff_font(5)\groff_font(5)]8;;\.  
The -X option overrides this
       selection, causing gxditview to serve as the output driver.

       ]8;;man:grodvi(1)\grodvi(1)]8;;\
              provides dvi.

       ]8;;man:grohtml(1)\grohtml(1)]8;;\
              provides html and xhtml.

       ]8;;man:grolbp(1)\grolbp(1)]8;;\
              provides lbp.

       ]8;;man:grolj4(1)\grolj4(1)]8;;\
              provides lj4.

       ]8;;man:gropdf(1)\gropdf(1)]8;;\
              provides pdf.

       ]8;;man:grops(1)\grops(1)]8;;\
              provides ps.

       ]8;;man:grotty(1)\grotty(1)]8;;\
              provides ascii, cp1047, latin1, and 
utf8.

       ]8;;man:gxditview(1)\gxditview(1)]8;;\
              provides X75, X75-12, X100, and 
X100-12, and additionally can preview ps.

   Utilities
       GNU roff includes a suite of utilities.

       ]8;;man:gdiffmk(1)\gdiffmk(1)]8;;\
              marks differences between a pair of roff input files.

       ]8;;man:grog(1)\grog(1)]8;;\
              infers the groff command a document requires.

       Several utilities prepare descriptions of fonts, enabling the formatter 
to use them when producing output for  a  given  de‐
       vice.

       ]8;;man:addftinfo(1)\addftinfo(1)]8;;\
              adds information to AT&T troff font description files to 
enable their use with GNU troff.

       ]8;;man:afmtodit(1)\afmtodit(1)]8;;\
              creates font description files for PostScript Type 1 fonts.

       ]8;;man:pfbtops(1)\pfbtops(1)]8;;\
              translates  a  PostScript Type 1 font in PFB (Printer Font 
Binary) format to PFA (Printer Font ASCII), which can then
              be interpreted by afmtodit.

       ]8;;man:hpftodit(1)\hpftodit(1)]8;;\
              creates font description files for the HP LaserJet 4 family of 
printers.

       ]8;;man:tfmtodit(1)\tfmtodit(1)]8;;\
              creates font description files for the TeX DVI device.

       ]8;;man:xtotroff(1)\xtotroff(1)]8;;\
              creates font description files for X Window System core fonts.

       A trio of tools transform material constructed using roff 
preprocessor languages into graphical image files.

       ]8;;man:eqn2graph(1)\eqn2graph(1)]8;;\
              converts an eqn equation into a cropped image.

       ]8;;man:grap2graph(1)\grap2graph(1)]8;;\
              converts a grap diagram into a cropped image.

       ]8;;man:pic2graph(1)\pic2graph(1)]8;;\
              converts a pic diagram into a cropped image.

       Another set of programs works with the bibliographic data files used by 
the ]8;;man:refer(1)\refer(1)]8;;\ preprocessor.

       ]8;;man:indxbib(1)\indxbib(1)]8;;\
              makes inverted indices for bibliographic databases, speeding 
lookup operations on them.

       ]8;;man:lkbib(1)\lkbib(1)]8;;\
              searches the databases.

       ]8;;man:lookbib(1)\lookbib(1)]8;;\
              interactively searches the databases.

Exit status
       groff exits with a failure status if there was a problem 
parsing its arguments and a successful status if either of the  op‐
       tions  -h  or  --help  was  specified.   Otherwise,  
groff  runs a pipeline to process its input; if all commands within the
       pipeline exit successfully, groff does likewise.  If not, 
groff's exit status encodes a  summary  of  problems  encountered,
       setting  bit  0  if  a command exited with a failure status, bit 1 if a 
command was terminated with a signal, and bit 2 if a
       command could not be executed.  (Thus, if all three misfortunes befell 
one's pipeline, groff would exit with  status  2^0  +
       2^1  + 2^2 = 1+2+4 = 7.)  To troubleshoot pipeline problems, you may 
wish to re-run the groff command with the -V option and
       break the reported pipeline down into separate stages, inspecting the 
exit status of and diagnostic messages emitted by each
       command.

Environment
       Normally, the path separator in environment variables ending with 
PATH is the colon; this may vary depending on the  operat‐
       ing system.  For example, Windows uses a semicolon instead.

       GROFF_BIN_PATH
              This search path, followed by PATH, is used to locate 
commands executed by groff.  If it is not set, the installation
              directory of the GNU roff executables, 
/usr/bin, is searched before PATH.

       GROFF_COMMAND_PREFIX
              GNU  roff  can  be  configured  at compile time to apply 
a prefix to the names of the programs it provides that had a
              counterpart in AT&T troff, so that name collisions are 
avoided at run time.  The default prefix is empty.

              When used, this prefix is conventionally the letter β€œg”.  For 
example, GNU troff would be installed as  gtroff.   Be‐
              sides  troff, the prefix applies to the formatter 
nroff; the preprocessors eqn, grn, pic, 
refer, tbl, and soelim; and
              the utilities indxbib and lookbib.

       GROFF_ENCODING
              The value of this variable is passed to the preconv(1) 
preprocessor's -e option to select the character  encoding  of
              input  files.   This variable's existence implies the 
groff option -k.  If set but empty, groff calls 
preconv without
              an -e option.  groff's -K option 
overrides GROFF_ENCODING.

       GROFF_FONT_PATH
              Seek the selected output device's directory of device and font 
description files in this list  of  directories.   See
              ]8;;man:troff(1)\troff(1)]8;;\ and 
]8;;man:groff_font(5)\groff_font(5)]8;;\.

       GROFF_TMAC_PATH
              Seek macro files in this list of directories.  See 
]8;;man:troff(1)\troff(1)]8;;\ and 
]8;;man:groff_tmac(5)\groff_tmac(5)]8;;\.

       GROFF_TMPDIR
              Create  temporary  files  in this directory.  If not set, but the 
environment variable TMPDIR is set, temporary files
              are created there instead.  On Windows systems, if neither of the 
foregoing are set, the  environment  variables  TMP
              and  TEMP  (in  that  order)  are  checked  also.   
Otherwise,  temporary  files  are created in /tmp.  The 
]8;;man:refer(1)\refer(1)]8;;\,
              ]8;;man:grohtml(1)\grohtml(1)]8;;\, and 
]8;;man:grops(1)\grops(1)]8;;\ commands use temporary files.

       GROFF_TYPESETTER
              Set the default output device.  If empty or not set, ps 
is used.  The -T option overrides GROFF_TYPESETTER.

       SOURCE_DATE_EPOCH
              A time stamp (expressed as seconds since the Unix epoch) to use 
as the output creation time stamp  in  place  of  the
              current  time.  The time is converted to human-readable form 
using ]8;;man:gmtime(3)\gmtime(3)]8;;\ and 
]8;;man:asctime(3)\asctime(3)]8;;\ when the formatter starts
              up and stored in registers usable by documents and macro packages.

       TZ     The time zone to use when converting the current time to 
human-readable form; see ]8;;man:tzset(3)\tzset(3)]8;;\.  If 
SOURCE_DATE_EPOCH  is
              used, it is always converted to human-readable form using UTC.

Examples
       roff  systems  are best known for formatting man pages.  Once a 
]8;;man:man(1)\man(1)]8;;\ librarian program has located a man 
page, it may exe‐
       cute a groff command much like the following.
              groff -t -man -Tutf8 /usr/share/man/man1/groff.1
       The librarian will also pipe the output through a pager, which might not 
interpret the SGR terminal escape  sequences  groff
       emits for boldface, underlining, or italics; see section β€œLimitations” 
below.

       To  process  a  roff  input file using the preprocessors 
tbl and pic and the me macro package in the way to 
which AT&T troff
       users were accustomed, one would type (or script) a pipeline.

              pic foo.me | tbl | troff -me -Tutf8 | grotty

       Using groff, this pipe can be shortened to an equivalent 
command.

              groff -p -t -me -T utf8 foo.me

       An even easier way to do this is to use 
]8;;man:grog(1)\grog(1)]8;;\ to guess the preprocessor and macro 
options and execute the result by  using
       the command substitution feature of the shell.

              $(grog -Tutf8 foo.me)

       Each  command-line option to a postprocessor must be specified with any 
required leading dashes β€œ-” because groff passes the
       arguments as-is to the postprocessor; this permits arbitrary arguments 
to be transmitted.  For example, to pass a  title  to
       the gxditview postprocessor, the shell commands
              groff -X -P -title -P 'trial run' mydoc.t
       and
              groff -X -Z mydoc.t | gxditview -title 'trial run' -
       are equivalent.

Limitations
       When  paging  output for the ascii, cp1047, 
latin1, and utf8 devices, programs like 
]8;;man:more(1)\more(1)]8;;\ and 
]8;;man:less(1)\less(1)]8;;\ may require command-
       line options to correctly handle some terminal escape sequences; see 
]8;;man:grotty(1)\grotty(1)]8;;\.

       On EBCDIC hosts such as OS/390 Unix, the output devices ascii 
and latin1 aren't available.  Conversely,  the  output  device
       cp1047 is not available on systems based on the ISO 646 or ISO 
8859 character encoding standards.

Installation directories
       GNU roff installs files in varying locations depending on its 
compile-time configuration.  On this installation, the follow‐
       ing locations are used.

       /etc/X11/app-defaults
              Application defaults directory for 
]8;;man:gxditview(1)\gxditview(1)]8;;\.

       /usr/bin
              Directory containing groff's executable commands.

       /usr/share/groff/1.23.0/eign
              List of common words for 
]8;;man:indxbib(1)\indxbib(1)]8;;\.

       /usr/share/groff/1.23.0
              Directory for data files.

       /usr/dict/papers/Ind
              Default index for ]8;;man:lkbib(1)\lkbib(1)]8;;\ and 
]8;;man:refer(1)\refer(1)]8;;\.

       /usr/share/doc/groff-base
              Documentation directory.

       /usr/share/doc/groff-base/examples
              Example directory.

       /usr/share/groff/1.23.0/font
              Font directory.

       /usr/share/doc/groff-base/html
              HTML documentation directory.

       /usr/lib/font
              Legacy font directory.

       /usr/share/groff/site-font
              Local font directory.

       /usr/share/groff/site-tmac
              Local macro package (tmac file) directory.

       /usr/share/groff/1.23.0/tmac
              Macro package (tmac file) directory.

       /usr/share/groff/1.23.0/oldfont
              Font directory for compatibility with old versions of 
groff; see ]8;;man:grops(1)\grops(1)]8;;\.

       /usr/share/doc/groff-base/pdf
              PDF documentation directory.

   groff macro directory
       Most  macro  files  supplied  with GNU roff are stored in 
/usr/share/groff/1.23.0/tmac for the installation corresponding to
       this document.  As a rule, multiple directories are searched for macro 
files; see ]8;;man:troff(1)\troff(1)]8;;\.  For a catalog  of  
macro  files
       GNU roff provides, see 
]8;;man:groff_tmac(5)\groff_tmac(5)]8;;\.

   groff device and font description directory
       Device  and  font  description  files supplied with GNU roff 
are stored in /usr/share/groff/1.23.0/font for the installation
       corresponding to this document.  As a rule, multiple directories are 
searched for device and  font  description  files;  see
       ]8;;man:troff(1)\troff(1)]8;;\.  For the formats of these 
files, see ]8;;man:groff_font(5)\groff_font(5)]8;;\.

Availability
       Obtain  links to groff releases for download, its source 
repository, discussion mailing lists, a support ticket tracker, and
       further information from the 
]8;;http://www.gnu.org/software/groff\groff page of the GNU 
website]8;;\.

       A free implementation of the grap preprocessor, written by 
]8;;mailto:[email protected]\Ted Faber]8;;\, can be found at the 
]8;;http://www.lunabase.org/~faber/Vault/software/grap/\grap 
website]8;;\.  groff supports only
       this grap.

Authors
       groff (both the front-end command and the overall system) was 
primarily written by ]8;;mailto:[email protected]\James Clark]8;;\.  
Contributors to this  docu‐
       ment include Clark, Trent A. Fisher, ]8;;mailto:[email protected]\Werner 
Lemberg]8;;\, ]8;;mailto:[email protected]\Bernd Warken]8;;\, 
and ]8;;mailto:[email protected]\G. Branden Robinson]8;;\.

See also
       Groff:  The GNU Implementation 
of troff, by Trent A. Fisher and Werner Lemberg, is the 
primary groff manual.  You can browse
       it interactively with β€œinfo groff”.

       Introduction, history, and further reading:
              ]8;;man:roff(7)\roff(7)]8;;\

       Viewer for groff (and AT&T device-independent troff) 
documents:
              ]8;;man:gxditview(1)\gxditview(1)]8;;\

       Preprocessors:
              ]8;;man:chem(1)\chem(1)]8;;\, 
]8;;man:eqn(1)\eqn(1)]8;;\, 
]8;;man:neqn(1)\neqn(1)]8;;\, 
]8;;man:glilypond(1)\glilypond(1)]8;;\, 
]8;;man:grn(1)\grn(1)]8;;\, 
]8;;man:preconv(1)\preconv(1)]8;;\, 
]8;;man:gperl(1)\gperl(1)]8;;\, 
]8;;man:pic(1)\pic(1)]8;;\, 
]8;;man:gpinyin(1)\gpinyin(1)]8;;\, 
]8;;man:refer(1)\refer(1)]8;;\, 
]8;;man:soelim(1)\soelim(1)]8;;\, 
]8;;man:tbl(1)\tbl(1)]8;;\

       Macro packages and package-specific utilities:
              ]8;;man:groff_hdtbl(7)\groff_hdtbl(7)]8;;\, 
]8;;man:groff_man(7)\groff_man(7)]8;;\, 
]8;;man:groff_man_style(7)\groff_man_style(7)]8;;\, 
]8;;man:groff_mdoc(7)\groff_mdoc(7)]8;;\, 
]8;;man:groff_me(7)\groff_me(7)]8;;\,  
]8;;man:groff_mm(7)\groff_mm(7)]8;;\,  
]8;;man:groff_mmse(7)\groff_mmse(7)]8;;\  (only  in
              Swedish locales), ]8;;man:mmroff(1)\mmroff(1)]8;;\, 
]8;;man:groff_mom(7)\groff_mom(7)]8;;\, 
]8;;man:pdfmom(1)\pdfmom(1)]8;;\, 
]8;;man:groff_ms(7)\groff_ms(7)]8;;\, 
]8;;man:groff_rfc1345(7)\groff_rfc1345(7)]8;;\, 
]8;;man:groff_trace(7)\groff_trace(7)]8;;\, 
]8;;man:groff_www(7)\groff_www(7)]8;;\

       Bibliographic database management tools:
              ]8;;man:indxbib(1)\indxbib(1)]8;;\, 
]8;;man:lkbib(1)\lkbib(1)]8;;\, 
]8;;man:lookbib(1)\lookbib(1)]8;;\

       Language, conventions, and GNU extensions:
              ]8;;man:groff(7)\groff(7)]8;;\, 
]8;;man:groff_char(7)\groff_char(7)]8;;\, 
]8;;man:groff_diff(7)\groff_diff(7)]8;;\, 
]8;;man:groff_font(5)\groff_font(5)]8;;\, 
]8;;man:groff_tmac(5)\groff_tmac(5)]8;;\

       Intermediate output language:
              ]8;;man:groff_out(5)\groff_out(5)]8;;\

       Formatter program:
              ]8;;man:troff(1)\troff(1)]8;;\

       Formatter wrappers:
              ]8;;man:nroff(1)\nroff(1)]8;;\, 
]8;;man:pdfroff(1)\pdfroff(1)]8;;\

       Postprocessors for output devices:
              ]8;;man:grodvi(1)\grodvi(1)]8;;\, 
]8;;man:grohtml(1)\grohtml(1)]8;;\, 
]8;;man:grolbp(1)\grolbp(1)]8;;\, 
]8;;man:grolj4(1)\grolj4(1)]8;;\, 
]8;;man:gropdf(1)\gropdf(1)]8;;\, 
]8;;man:grops(1)\grops(1)]8;;\, 
]8;;man:grotty(1)\grotty(1)]8;;\

       Font support utilities:
              ]8;;man:addftinfo(1)\addftinfo(1)]8;;\, 
]8;;man:afmtodit(1)\afmtodit(1)]8;;\, 
]8;;man:hpftodit(1)\hpftodit(1)]8;;\, 
]8;;man:pfbtops(1)\pfbtops(1)]8;;\, 
]8;;man:tfmtodit(1)\tfmtodit(1)]8;;\, 
]8;;man:xtotroff(1)\xtotroff(1)]8;;\

       Graphics conversion utilities:
              ]8;;man:eqn2graph(1)\eqn2graph(1)]8;;\, 
]8;;man:grap2graph(1)\grap2graph(1)]8;;\, 
]8;;man:pic2graph(1)\pic2graph(1)]8;;\

       Difference-marking utility:
              ]8;;man:gdiffmk(1)\gdiffmk(1)]8;;\

       β€œgroff guess” utility:
              ]8;;man:grog(1)\grog(1)]8;;\

groff 1.23.0                                               31 March 2024        
                                           groff(1)
  • info... G. Branden Robinson
    • ... G. Branden Robinson
    • ... Gavin Smith
      • ... Gavin Smith
        • ... G. Branden Robinson
          • ... Eli Zaretskii
            • ... G. Branden Robinson
              • ... Eli Zaretskii
              • ... G. Branden Robinson
              • ... Eli Zaretskii
              • ... Gavin Smith
          • ... Gavin Smith
      • ... Per Bothner
        • ... Gavin Smith
  • Re: ... Bruno Haible via Bug reports for the GNU Texinfo documentation system
    • ... Patrice Dumas
    • ... Patrice Dumas
      • ... Bruno Haible via Bug reports for the GNU Texinfo documentation system
  • Re: ... Bruno Haible via Bug reports for the GNU Texinfo documentation system
    • ... Bruno Haible via Bug reports for the GNU Texinfo documentation system
    • ... Patrice Dumas

Reply via email to