{
    "mode": "info",
    "parameter": "groff",
    "section": "",
    "url": "https://www.chedong.com/phpMan.php/info/groff/json",
    "generated": "2026-06-08T23:03:23Z",
    "sections": {
        "GNU troff": {
            "content": "* Menu:\n\n* Introduction::\n* Invoking groff::\n* Tutorial for Macro Users::\n* Macro Packages::\n* gtroff Reference::\n* Preprocessors::\n* Output Devices::\n* File formats::\n* Installation::\n* Copying This Manual::\n* Request Index::\n* Escape Index::\n* Operator Index::\n* Register Index::\n* Macro Index::\n* String Index::\n* Glyph Name Index::\n* Font File Keyword Index::\n* Program and File Index::\n* Concept Index::\n\nThis manual documents GNU 'troff' version 1.22.4.\n\nCopyright (C) 1994-2018 Free Software Foundation, Inc.\n\nPermission is granted to copy, distribute and/or modify this\ndocument under the terms of the GNU Free Documentation License,\nVersion 1.3 or any later version published by the Free Software\nFoundation; with no Invariant Sections, with the Front-Cover texts\nbeing \"A GNU Manual,\" and with the Back-Cover Texts as in (a)\nbelow.  A copy of the license is included in the section entitled\n\"GNU Free Documentation License.\"\n\n(a) The FSF's Back-Cover Text is: \"You have the freedom to copy and\nmodify this GNU manual.  Buying copies from the FSF supports it in\ndeveloping GNU and promoting software freedom.\"\n\nFile: groff.info,  Node: Introduction,  Next: Invoking groff,  Prev: Top,  Up: Top\n",
            "subsections": []
        },
        "1 Introduction": {
            "content": "GNU 'troff' (or 'groff') is a system for typesetting documents.  'troff'\nis very flexible and has been used extensively for some thirty years.\nIt is well entrenched in the Unix community.\n\n* Menu:\n\n* What Is groff?::\n* History::\n* groff Capabilities::\n* Macro Package Intro::\n* Preprocessor Intro::\n* Output device intro::\n* Credits::\n\nFile: groff.info,  Node: What Is groff?,  Next: History,  Prev: Introduction,  Up: Introduction\n",
            "subsections": [
                {
                    "name": "1.1 What Is 'groff'?",
                    "content": "'groff' belongs to an older generation of document preparation systems,\nwhich operate more like compilers than the more recent interactive\nWYSIWYG(1) (*note What Is groff?-Footnote-1::) systems.  'groff' and its\ncontemporary counterpart, TeX, both work using a \"batch\" paradigm: The\ninput (or \"source\") files are normal text files with embedded formatting\ncommands.  These files can then be processed by 'groff' to produce a\ntypeset document on a variety of devices.\n\n'groff' should not be confused with a \"word processor\", an integrated\nsystem of editor and text formatter.  Also, many word processors follow\nthe WYSIWYG paradigm discussed earlier.\n\nAlthough WYSIWYG systems may be easier to use, they have a number of\ndisadvantages compared to 'troff':\n\n* They must be used on a graphics display to work on a document.\n\n* Most of the WYSIWYG systems are either non-free or are not very\nportable.\n\n* 'troff' is firmly entrenched in all Unix systems.\n\n* It is difficult to have a wide range of capabilities within the\nconfines of a GUI/window system.\n\n* It is more difficult to make global changes to a document.\n\n\"GUIs normally make it simple to accomplish simple actions and\nimpossible to accomplish complex actions.\"  -Doug Gwyn (22/Jun/91\nin 'comp.unix.wizards')\n\nFile: groff.info,  Node: History,  Next: groff Capabilities,  Prev: What Is groff?,  Up: Introduction\n"
                },
                {
                    "name": "1.2 History",
                    "content": "'troff' can trace its origins back to a formatting program called\n'RUNOFF', written by Jerry Saltzer, which ran on the CTSS (Compatible\nTime Sharing System, a project of MIT, the Massachusetts Institute of\nTechnology) in the mid-sixties.(1)  (*note History-Footnote-1::) The\nname came from the use of the phrase \"run off a document\", meaning to\nprint it out.  Bob Morris ported it to the 635 architecture and called\nthe program 'roff' (an abbreviation of 'runoff').  It was rewritten as\n'rf' for the PDP-7 (before having Unix), and at the same time (1969),\nDoug McIlroy rewrote an extended and simplified version of 'roff' in the\nBCPL programming language.\n\nIn 1971, the Unix developers wanted to get a PDP-11, and to justify\nthe cost, proposed the development of a document formatting system for\nthe AT&T patents division.  This first formatting program was a\nreimplementation of McIlroy's 'roff', written by J. F. Ossanna.\n\nWhen they needed a more flexible language, a new version of 'roff'\ncalled 'nroff' (\"Newer 'roff'\") was written.  It had a much more\ncomplicated syntax, but provided the basis for all future versions.\nWhen they got a Graphic Systems CAT Phototypesetter, Ossanna wrote a\nversion of 'nroff' that would drive it.  It was dubbed 'troff', for\n\"typesetter 'roff'\", although many people have speculated that it\nactually means \"Times 'roff'\" because of the use of the Times font\nfamily in 'troff' by default.  As such, the name 'troff' is pronounced\n't-roff' rather than 'trough'.\n\nWith 'troff' came 'nroff' (they were actually the same program except\nfor some '#ifdef's), which was for producing output for line printers\nand character terminals.  It understood everything 'troff' did, and\nignored the commands that were not applicable (e.g. font changes).\n\nSince there are several things that cannot be done easily in 'troff',\nwork on several preprocessors began.  These programs would transform\ncertain parts of a document into 'troff', which made a very natural use\nof pipes in Unix.\n\nThe 'eqn' preprocessor allowed mathematical formulae to be specified\nin a much simpler and more intuitive manner.  'tbl' is a preprocessor\nfor formatting tables.  The 'refer' preprocessor (and the similar\nprogram, 'bib') processes citations in a document according to a\nbibliographic database.\n\nUnfortunately, Ossanna's 'troff' was written in PDP-11 assembly\nlanguage and produced output specifically for the CAT phototypesetter.\nHe rewrote it in C, although it was now 7000 lines of uncommented code\nand still dependent on the CAT.  As the CAT became less common, and was\nno longer supported by the manufacturer, the need to make it support\nother devices became a priority.  However, before this could be done,\nOssanna died by a severe heart attack in a hospital while recovering\nfrom a previous one.\n\nSo, Brian Kernighan took on the task of rewriting 'troff'.  The newly\nrewritten version produced device independent code that was very easy\nfor postprocessors to read and translate to the appropriate printer\ncodes.  Also, this new version of 'troff' (called 'ditroff' for \"device\nindependent 'troff'\") had several extensions, which included drawing\nfunctions.\n\nDue to the additional abilities of the new version of 'troff',\nseveral new preprocessors appeared.  The 'pic' preprocessor provides a\nwide range of drawing functions.  Likewise the 'ideal' preprocessor did\nthe same, although via a much different paradigm.  The 'grap'\npreprocessor took specifications for graphs, but, unlike other\npreprocessors, produced 'pic' code.\n\nJames Clark began work on a GNU implementation of 'ditroff' in\nearly 1989.  The first version, 'groff' 0.3.1, was released June 1990.\n'groff' included:\n\n* A replacement for 'ditroff' with many extensions.\n\n* The 'soelim', 'pic', 'tbl', and 'eqn' preprocessors.\n\n* Postprocessors for character devices, POSTSCRIPT, TeX DVI, and\nX Windows.  GNU 'troff' also eliminated the need for a separate\n'nroff' program with a postprocessor that would produce ASCII\noutput.\n\n* A version of the 'me' macros and an implementation of the 'man'\nmacros.\n\nAlso, a front-end was included that could construct the, sometimes\npainfully long, pipelines required for all the post- and preprocessors.\n\nDevelopment of GNU 'troff' progressed rapidly, and saw the additions\nof a replacement for 'refer', an implementation of the 'ms' and 'mm'\nmacros, and a program to deduce how to format a document ('grog').\n\nIt was declared a stable (i.e. non-beta) package with the release of\nversion 1.04 around November 1991.\n\nBeginning in 1999, 'groff' has new maintainers (the package was an\norphan for a few years).  As a result, new features and programs like\n'grn', a preprocessor for gremlin images, and an output device to\nproduce HTML and XHTML have been added.\n\nFile: groff.info,  Node: groff Capabilities,  Next: Macro Package Intro,  Prev: History,  Up: Introduction\n"
                },
                {
                    "name": "1.3 'groff' Capabilities",
                    "content": "So what exactly is 'groff' capable of doing?  'groff' provides a wide\nrange of low-level text formatting operations.  Using these, it is\npossible to perform a wide range of formatting tasks, such as footnotes,\ntable of contents, multiple columns, etc.  Here's a list of the most\nimportant operations supported by 'groff':\n\n* text filling, adjusting, and centering\n\n* hyphenation\n\n* page control\n\n* font and glyph size control\n\n* vertical spacing (e.g. double-spacing)\n\n* line length and indenting\n\n* macros, strings, diversions, and traps\n\n* number registers\n\n* tabs, leaders, and fields\n\n* input and output conventions and character translation\n\n* overstrike, bracket, line drawing, and zero-width functions\n\n* local horizontal and vertical motions and the width function\n\n* three-part titles\n\n* output line numbering\n\n* conditional acceptance of input\n\n* environment switching\n\n* insertions from the standard input\n\n* input/output file switching\n\n* output and error messages\n\nFile: groff.info,  Node: Macro Package Intro,  Next: Preprocessor Intro,  Prev: groff Capabilities,  Up: Introduction\n"
                },
                {
                    "name": "1.4 Macro Packages",
                    "content": "Since 'groff' provides such low-level facilities, it can be quite\ndifficult to use by itself.  However, 'groff' provides a \"macro\"\nfacility to specify how certain routine operations (e.g. starting\nparagraphs, printing headers and footers, etc.) should be done.  These\nmacros can be collected together into a \"macro package\".  There are a\nnumber of macro packages available; the most common (and the ones\ndescribed in this manual) are 'man', 'mdoc', 'me', 'ms', and 'mm'.\n\nFile: groff.info,  Node: Preprocessor Intro,  Next: Output device intro,  Prev: Macro Package Intro,  Up: Introduction\n"
                },
                {
                    "name": "1.5 Preprocessors",
                    "content": "Although 'groff' provides most functions needed to format a document,\nsome operations would be unwieldy (e.g. to draw pictures).  Therefore,\nprograms called \"preprocessors\" were written that understand their own\nlanguage and produce the necessary 'groff' operations.  These\npreprocessors are able to differentiate their own input from the rest of\nthe document via markers.\n\nTo use a preprocessor, Unix pipes are used to feed the output from\nthe preprocessor into 'groff'.  Any number of preprocessors may be used\non a given document; in this case, the preprocessors are linked together\ninto one pipeline.  However, with 'groff', the user does not need to\nconstruct the pipe, but only tell 'groff' what preprocessors to use.\n\n'groff' currently has preprocessors for producing tables ('tbl'),\ntypesetting equations ('eqn'), drawing pictures ('pic' and 'grn'),\nprocessing bibliographies ('refer'), and drawing chemical structures\n('chem').  An associated program that is useful when dealing with\npreprocessors is 'soelim'.\n\nA free implementation of 'grap', a preprocessor for drawing graphs,\ncan be obtained as an extra package; 'groff' can use 'grap' also.\n\nUnique to 'groff' is the 'preconv' preprocessor that enables 'groff'\nto handle documents in various input encodings.\n\nThere are other preprocessors in existence, but, unfortunately, no\nfree implementations are available.  Among them is a preprocessor for\ndrawing mathematical pictures ('ideal').\n\nFile: groff.info,  Node: Output device intro,  Next: Credits,  Prev: Preprocessor Intro,  Up: Introduction\n"
                },
                {
                    "name": "1.6 Output Devices",
                    "content": "'groff' actually produces device independent code that may be fed into a\npostprocessor to produce output for a particular device.  Currently,\n'groff' has postprocessors for POSTSCRIPT devices, character terminals,\nX Windows (for previewing), TeX DVI format, HP LaserJet 4 and Canon LBP\nprinters (which use CAPSL), HTML, XHTML, and PDF.\n\nFile: groff.info,  Node: Credits,  Prev: Output device intro,  Up: Introduction\n"
                },
                {
                    "name": "1.7 Credits",
                    "content": "Large portions of this manual were taken from existing documents, most\nnotably, the manual pages for the 'groff' package by James Clark, and\nEric Allman's papers on the 'me' macro package.\n\nThe section on the 'man' macro package is partly based on Susan G.\nKleinmann's 'groffman' manual page written for the Debian GNU/Linux\nsystem.\n\nLarry Kollar contributed the section on the 'ms' macro package.\n\nFile: groff.info,  Node: Invoking groff,  Next: Tutorial for Macro Users,  Prev: Introduction,  Up: Top\n"
                }
            ]
        },
        "2 Invoking 'groff'": {
            "content": "This section focuses on how to invoke the 'groff' front end.  This front\nend takes care of the details of constructing the pipeline among the\npreprocessors, 'gtroff' and the postprocessor.\n\nIt has become a tradition that GNU programs get the prefix 'g' to\ndistinguish it from its original counterparts provided by the host (see\n*note Environment::, for more details).  Thus, for example, 'geqn' is\nGNU 'eqn'.  On operating systems like GNU/Linux or the Hurd, which don't\ncontain proprietary versions of 'troff', and on MS-DOS/MS-Windows, where\n'troff' and associated programs are not available at all, this prefix is\nomitted since GNU 'troff' is the only used incarnation of 'troff'.\nException: 'groff' is never replaced by 'roff'.\n\nIn this document, we consequently say 'gtroff' when talking about the\nGNU 'troff' program.  All other implementations of 'troff' are called\nAT&T 'troff', which is the common origin of all 'troff' derivates (with\nmore or less compatible changes).  Similarly, we say 'gpic', 'geqn',\netc.\n\n* Menu:\n\n* Groff Options::\n* Environment::\n* Macro Directories::\n* Font Directories::\n* Paper Size::\n* Invocation Examples::\n\nFile: groff.info,  Node: Groff Options,  Next: Environment,  Prev: Invoking groff,  Up: Invoking groff\n",
            "subsections": [
                {
                    "name": "2.1 Options",
                    "content": "'groff' normally runs the 'gtroff' program and a postprocessor\nappropriate for the selected device.  The default device is 'ps' (but it\ncan be changed when 'groff' is configured and built).  It can optionally\npreprocess with any of 'gpic', 'geqn', 'gtbl', 'ggrn', 'grap', 'gchem',\n'grefer', 'gsoelim', or 'preconv'.\n\nThis section only documents options to the 'groff' front end.  Many\nof the arguments to 'groff' are passed on to 'gtroff', therefore those\nare also included.  Arguments to pre- or postprocessors can be found in\n*note Invoking gpic::, *note Invoking geqn::, *note Invoking gtbl::,\n*note Invoking ggrn::, *note Invoking grefer::, *note Invoking gchem::,\n*note Invoking gsoelim::, *note Invoking preconv::, *note Invoking\ngrotty::, *note Invoking grops::, *note Invoking gropdf::, *note\nInvoking grohtml::, *note Invoking grodvi::, *note Invoking grolj4::,\n*note Invoking grolbp::, and *note Invoking gxditview::.\n\nThe command-line format for 'groff' is:\n\ngroff [ -abceghijklpstvzCEGNRSUVXZ ] [ -dCS ] [ -DARG ]\n[ -fFAM ] [ -FDIR ] [ -IDIR ] [ -KARG ]\n[ -LARG ] [ -mNAME ] [ -MDIR ] [ -nNUM ]\n[ -oLIST ] [ -PARG ] [ -rCN ] [ -TDEV ]\n[ -wNAME ] [ -WNAME ] [ FILES... ]\n\nThe command-line format for 'gtroff' is as follows.\n\ngtroff [ -abcivzCERU ] [ -dCS ] [ -fFAM ] [ -FDIR ]\n[ -mNAME ] [ -MDIR ] [ -nNUM ] [ -oLIST ]\n[ -rCN ] [ -TNAME ] [ -wNAME ] [ -WNAME ]\n[ FILES... ]\n\nObviously, many of the options to 'groff' are actually passed on to\n'gtroff'.\n\nOptions without an argument can be grouped behind a single '-'.  A\nfilename of '-' denotes the standard input.  It is possible to have\nwhitespace between an option and its parameter.\n\nThe 'grog' command can be used to guess the correct 'groff' command\nto format a file.\n\nHere's the description of the command-line options:\n\n'-a'\nGenerate an ASCII approximation of the typeset output.  The\nread-only register '.A' is then set to 1.  *Note Built-in\nRegisters::.  A typical example is\n\ngroff -a -man -Tdvi troff.man | less\n\nwhich shows how lines are broken for the DVI device.  Note that\nthis option is rather useless today since graphic output devices\nare available virtually everywhere.\n\n'-b'\nPrint a backtrace with each warning or error message.  This\nbacktrace should help track down the cause of the error.  The line\nnumbers given in the backtrace may not always be correct: 'gtroff'\ncan get confused by 'as' or 'am' requests while counting line\nnumbers.\n\n'-c'\nSuppress color output.\n\n'-C'\nEnable compatibility mode.  *Note Implementation Differences::, for\nthe list of incompatibilities between 'groff' and AT&T 'troff'.\n\n'-dCS'\n'-dNAME=S'\nDefine C or NAME to be a string S.  C must be a one-letter name;\nNAME can be of arbitrary length.  All string assignments happen\nbefore loading any macro file (including the start-up file).\n\n'-DARG'\nSet default input encoding used by 'preconv' to ARG.  Implies '-k'.\n\n'-e'\nPreprocess with 'geqn'.\n\n'-E'\nInhibit all error messages.\n\n'-fFAM'\nUse FAM as the default font family.  *Note Font Families::.\n\n'-FDIR'\nSearch 'DIR' for subdirectories 'devNAME' (NAME is the name of the\ndevice), for the 'DESC' file, and for font files before looking in\nthe standard directories (*note Font Directories::).  This option\nis passed to all pre- and postprocessors using the\n'GROFFFONTPATH' environment variable.\n\n'-g'\nPreprocess with 'ggrn'.\n\n'-G'\nPreprocess with 'grap'.  Implies '-p'.\n\n'-h'\nPrint a help message.\n\n'-i'\nRead the standard input after all the named input files have been\nprocessed.\n\n'-IDIR'\nThis option may be used to specify a directory to search for files.\nIt is passed to the following programs:\n\n* 'gsoelim' (see *note gsoelim:: for more details); it also\nimplies 'groff''s '-s' option.\n\n* 'gtroff'; it is used to search files named in the 'psbb' and\n'so' requests.\n\n* 'grops'; it is used to search files named in the\n'\\X'ps: import' and '\\X'ps: file' escapes.\n\nThe current directory is always searched first.  This option may be\nspecified more than once; the directories are searched in the order\nspecified.  No directory search is performed for files specified\nusing an absolute path.\n\n'-j'\nPreprocess with 'gchem'.  Implies '-p'.\n\n'-k'\nPreprocess with 'preconv'.  This is run before any other\npreprocessor.  Please refer to 'preconv''s manual page for its\nbehaviour if no '-K' (or '-D') option is specified.\n\n'-KARG'\nSet input encoding used by preconv to ARG.  Implies '-k'.\n\n'-l'\nSend the output to a spooler for printing.  The command used for\nthis is specified by the 'print' command in the device description\nfile (see *note Font Files::, for more info).  If not present, '-l'\nis ignored.\n\n'-LARG'\nPass ARG to the spooler.  Each argument should be passed with a\nseparate '-L' option.  Note that 'groff' does not prepend a '-' to\nARG before passing it to the postprocessor.  If the 'print' keyword\nin the device description file is missing, '-L' is ignored.\n\n'-mNAME'\nRead in the file 'NAME.tmac'.  Normally 'groff' searches for this\nin its macro directories.  If it isn't found, it tries 'tmac.NAME'\n(searching in the same directories).\n\n'-MDIR'\nSearch directory 'DIR' for macro files before the standard\ndirectories (*note Macro Directories::).\n\n'-nNUM'\nNumber the first page NUM.\n\n'-N'\nDon't allow newlines with 'eqn' delimiters.  This is the same as\nthe '-N' option in 'geqn'.\n\n'-oLIST'\nOutput only pages in LIST, which is a comma-separated list of page\nranges; 'N' means print page N, 'M-N' means print every page\nbetween M and N, '-N' means print every page up to N, 'N-' means\nprint every page beginning with N.  'gtroff' exits after printing\nthe last page in the list.  All the ranges are inclusive on both\nends.\n\nWithin 'gtroff', this information can be extracted with the '.P'\nregister.  *Note Built-in Registers::.\n\nIf your document restarts page numbering at the beginning of each\nchapter, then 'gtroff' prints the specified page range for each\nchapter.\n\n'-p'\nPreprocess with 'gpic'.\n\n'-PARG'\nPass ARG to the postprocessor.  Each argument should be passed with\na separate '-P' option.  Note that 'groff' does not prepend '-' to\nARG before passing it to the postprocessor.\n\n'-rCN'\n'-rNAME=N'\nSet number register C or NAME to the value N.  C must be a\none-letter name; NAME can be of arbitrary length.  N can be any\n'gtroff' numeric expression.  All register assignments happen\nbefore loading any macro file (including the start-up file).\n\n'-R'\nPreprocess with 'grefer'.  No mechanism is provided for passing\narguments to 'grefer' because most 'grefer' options have equivalent\ncommands that can be included in the file.  *Note grefer::, for\nmore details.\n\nNote that 'gtroff' also accepts a '-R' option, which is not\naccessible via 'groff'.  This option prevents the loading of the\n'troffrc' and 'troffrc-end' files.\n\n'-s'\nPreprocess with 'gsoelim'.\n\n'-S'\nSafer mode.  Pass the '-S' option to 'gpic' and disable the 'open',\n'opena', 'pso', 'sy', and 'pi' requests.  For security reasons,\nthis is enabled by default.\n\n'-t'\nPreprocess with 'gtbl'.\n\n'-TDEV'\nPrepare output for device DEV.  The default device is 'ps', unless\nchanged when 'groff' was configured and built.  The following are\nthe output devices currently available:\n\n'ps'\nFor POSTSCRIPT printers and previewers.\n\n'pdf'\nFor PDF viewers or printers.\n\n'dvi'\nFor TeX DVI format.\n\n'X75'\nFor a 75dpi X11 previewer.\n\n'X75-12'\nFor a 75dpi X11 previewer with a 12pt base font in the\ndocument.\n\n'X100'\nFor a 100dpi X11 previewer.\n\n'X100-12'\nFor a 100dpi X11 previewer with a 12pt base font in the\ndocument.\n\n'ascii'\nFor typewriter-like devices using the (7-bit) ASCII character\nset.\n\n'latin1'\nFor typewriter-like devices that support the Latin-1\n(ISO 8859-1) character set.\n\n'utf8'\nFor typewriter-like devices that use the Unicode (ISO 10646)\ncharacter set with UTF-8 encoding.\n\n'cp1047'\nFor typewriter-like devices that use the EBCDIC encoding IBM\ncp1047.\n\n'lj4'\nFor HP LaserJet4-compatible (or other PCL5-compatible)\nprinters.\n\n'lbp'\nFor Canon CAPSL printers (LBP-4 and LBP-8 series laser\nprinters).\n\n'html'\n'xhtml'\nTo produce HTML and XHTML output, respectively.  Note that\nthis driver consists of two parts, a preprocessor\n('pre-grohtml') and a postprocessor ('post-grohtml').\n\nThe predefined 'gtroff' string register '.T' contains the current\noutput device; the read-only number register '.T' is set to 1 if\nthis option is used (which is always true if 'groff' is used to\ncall 'gtroff').  *Note Built-in Registers::.\n\nThe postprocessor to be used for a device is specified by the\n'postpro' command in the device description file.  (*Note Font\nFiles::, for more info.)  This can be overridden with the '-X'\noption.\n\n'-U'\nUnsafe mode.  This enables the 'open', 'opena', 'pso', 'sy', and\n'pi' requests.\n\n'-wNAME'\nEnable warning NAME.  Available warnings are described in *note\nDebugging::.  Multiple '-w' options are allowed.\n\n'-WNAME'\nInhibit warning NAME.  Multiple '-W' options are allowed.\n\n'-v'\nMake programs run by 'groff' print out their version number.\n\n'-V'\nPrint the pipeline on 'stdout' instead of executing it.  If\nspecified more than once, print the pipeline on 'stderr' and\nexecute it.\n\n'-X'\nPreview with 'gxditview' instead of using the usual postprocessor.\nThis is unlikely to produce good results except with '-Tps'.\n\nNote that this is not the same as using '-TX75' or '-TX100' to view\na document with 'gxditview': The former uses the metrics of the\nspecified device, whereas the latter uses X-specific fonts and\nmetrics.\n\n'-z'\nSuppress output from 'gtroff'.  Only error messages are printed.\n\n'-Z'\nDo not postprocess the output of 'gtroff'.  Normally 'groff'\nautomatically runs the appropriate postprocessor.\n\nFile: groff.info,  Node: Environment,  Next: Macro Directories,  Prev: Groff Options,  Up: Invoking groff\n"
                },
                {
                    "name": "2.2 Environment",
                    "content": "There are also several environment variables (of the operating system,\nnot within 'gtroff') that can modify the behavior of 'groff'.\n\n'GROFFBINPATH'\nThis search path, followed by 'PATH', is used for commands executed\nby 'groff'.\n\n'GROFFCOMMANDPREFIX'\nIf this is set to X, then 'groff' runs 'Xtroff' instead of\n'gtroff'.  This also applies to 'tbl', 'pic', 'eqn', 'grn', 'chem',\n'refer', and 'soelim'.  It does not apply to 'grops', 'grodvi',\n'grotty', 'pre-grohtml', 'post-grohtml', 'preconv', 'grolj4',\n'gropdf', and 'gxditview'.\n\nThe default command prefix is determined during the installation\nprocess.  If a non-GNU troff system is found, prefix 'g' is used,\nnone otherwise.\n\n'GROFFENCODING'\nThe value of this environment value is passed to the 'preconv'\npreprocessor to select the encoding of input files.  Setting this\noption implies 'groff''s command-line option '-k' (that is, 'groff'\nactually always calls 'preconv').  If set without a value, 'groff'\ncalls 'preconv' without arguments.  An explicit '-K' command-line\noption overrides the value of 'GROFFENCODING'.  See the manual\npage of 'preconv' for details.\n\n'GROFFFONTPATH'\nA colon-separated list of directories in which to search for the\n'dev'NAME directory (before the default directories are tried).\n*Note Font Directories::.\n\n'GROFFTMACPATH'\nA colon-separated list of directories in which to search for macro\nfiles (before the default directories are tried).  *Note Macro\nDirectories::.\n\n'GROFFTMPDIR'\nThe directory in which 'groff' creates temporary files.  If this is\nnot set and 'TMPDIR' is set, temporary files are created in that\ndirectory.  Otherwise temporary files are created in a\nsystem-dependent default directory (on Unix and GNU/Linux systems,\nthis is usually '/tmp').  'grops', 'grefer', 'pre-grohtml', and\n'post-grohtml' can create temporary files in this directory.\n\n'GROFFTYPESETTER'\nThe default output device.\n\n'SOURCEDATEEPOCH'\nA timestamp (expressed as seconds since the Unix epoch) to use in\nplace of the current time when initializing time-based built-in\nregisters such as '\\n[seconds]'.\n\nNote that MS-DOS and MS-Windows ports of 'groff' use semi-colons,\nrather than colons, to separate the directories in the lists described\nabove.\n\nFile: groff.info,  Node: Macro Directories,  Next: Font Directories,  Prev: Environment,  Up: Invoking groff\n"
                },
                {
                    "name": "2.3 Macro Directories",
                    "content": "All macro file names must be named 'NAME.tmac' or 'tmac.NAME' to make\nthe '-mNAME' command-line option work.  The 'mso' request doesn't have\nthis restriction; any file name can be used, and 'gtroff' won't try to\nappend or prepend the 'tmac' string.\n\nMacro files are kept in the \"tmac directories\", all of which\nconstitute the \"tmac path\".  The elements of the search path for macro\nfiles are (in that order):\n\n* The directories specified with 'gtroff''s or 'groff''s '-M'\ncommand-line option.\n\n* The directories given in the 'GROFFTMACPATH' environment\nvariable.\n\n* The current directory (only if in unsafe mode using the '-U'\ncommand-line switch).\n\n* The home directory.\n\n* A platform-dependent directory, a site-specific\n(platform-independent) directory, and the main tmac directory; the\ndefault locations are\n\n/usr/local/lib/groff/site-tmac\n/usr/local/share/groff/site-tmac\n/usr/local/share/groff/1.22.3/tmac\n\nassuming that the version of 'groff' is 1.22.3, and the\ninstallation prefix was '/usr/local'.  It is possible to fine-tune\nthose directories during the installation process.\n\nFile: groff.info,  Node: Font Directories,  Next: Paper Size,  Prev: Macro Directories,  Up: Invoking groff\n"
                },
                {
                    "name": "2.4 Font Directories",
                    "content": "Basically, there is no restriction how font files for 'groff' are named\nand how long font names are; however, to make the font family mechanism\nwork (*note Font Families::), fonts within a family should start with\nthe family name, followed by the shape.  For example, the Times family\nuses 'T' for the family name and 'R', 'B', 'I', and 'BI' to indicate the\nshapes 'roman', 'bold', 'italic', and 'bold italic', respectively.  Thus\nthe final font names are 'TR', 'TB', 'TI', and 'TBI'.\n\nAll font files are kept in the \"font directories\", which constitute\nthe \"font path\".  The file search functions always append the directory\n'dev'NAME, where NAME is the name of the output device.  Assuming, say,\nDVI output, and '/foo/bar' as a font directory, the font files for\n'grodvi' must be in '/foo/bar/devdvi'.\n\nThe elements of the search path for font files are (in that order):\n\n* The directories specified with 'gtroff''s or 'groff''s '-F'\ncommand-line option.  All device drivers and some preprocessors\nalso have this option.\n\n* The directories given in the 'GROFFFONTPATH' environment\nvariable.\n\n* A site-specific directory and the main font directory; the default\nlocations are\n\n/usr/local/share/groff/site-font\n/usr/local/share/groff/1.22.3/font\n\nassuming that the version of 'groff' is 1.22.3, and the\ninstallation prefix was '/usr/local'.  It is possible to fine-tune\nthose directories during the installation process.\n\nFile: groff.info,  Node: Paper Size,  Next: Invocation Examples,  Prev: Font Directories,  Up: Invoking groff\n"
                },
                {
                    "name": "2.5 Paper Size",
                    "content": "In groff, the page size for 'gtroff' and for output devices are handled\nseparately.  *Note Page Layout::, for vertical manipulation of the page\nsize.  *Note Line Layout::, for horizontal changes.\n\nA default paper size can be set in the device's 'DESC' file.  Most\noutput devices also have a command-line option '-p' to override the\ndefault paper size and option '-l' to use landscape orientation.  *Note\nDESC File Format::, for a description of the 'papersize' keyword, which\ntakes the same argument as '-p'.\n\nA convenient shorthand to set a particular paper size for 'gtroff' is\ncommand-line option '-dpaper=SIZE'.  This defines string 'paper', which\nis processed in file 'papersize.tmac' (loaded in the start-up file\n'troffrc' by default).  Possible values for SIZE are the same as the\npredefined values for the 'papersize' keyword (but only in lowercase)\nexcept 'a7'-'d7'.  An appended 'l' (ell) character denotes landscape\norientation.\n\nFor example, use the following for PS output on A4 paper in landscape\norientation:\n\ngroff -Tps -dpaper=a4l -P-pa4 -P-l -ms foo.ms > foo.ps\n\nNote that it is up to the particular macro package to respect default\npage dimensions set in this way (most do).\n\nFile: groff.info,  Node: Invocation Examples,  Prev: Paper Size,  Up: Invoking groff\n"
                },
                {
                    "name": "2.6 Invocation Examples",
                    "content": "This section lists several common uses of 'groff' and the corresponding\ncommand lines.\n\ngroff file\n\nThis command processes 'file' without a macro package or a preprocessor.\nThe output device is the default, 'ps', and the output is sent to\n'stdout'.\n\ngroff -t -mandoc -Tascii file | less\n\nThis is basically what a call to the 'man' program does.  'gtroff'\nprocesses the manual page 'file' with the 'mandoc' macro file (which in\nturn either calls the 'man' or the 'mdoc' macro package), using the\n'tbl' preprocessor and the ASCII output device.  Finally, the 'less'\npager displays the result.\n\ngroff -X -m me file\n\nPreview 'file' with 'gxditview', using the 'me' macro package.  Since no\n'-T' option is specified, use the default device ('ps').  Note that you\ncan either say '-m me' or '-me'; the latter is an anachronism from the\nearly days of Unix.(1)  (*note Invocation Examples-Footnote-1::)\n\ngroff -man -rD1 -z file\n\nCheck 'file' with the 'man' macro package, forcing double-sided printing\n- don't produce any output.\n\n* Menu:\n\n* grog::\n\nFile: groff.info,  Node: grog,  Prev: Invocation Examples,  Up: Invocation Examples\n\n\n'grog' reads files, guesses which of the 'groff' preprocessors and/or\nmacro packages are required for formatting them, and prints the 'groff'\ncommand including those options on the standard output.  It generates\none or more of the options '-e', '-man', '-me', '-mm', '-mom', '-ms',\n'-mdoc', '-mdoc-old', '-p', '-R', '-g', '-G', '-s', and '-t'.\n\nA special file name '-' refers to the standard input.  Specifying no\nfiles also means to read the standard input.  Any specified options are\nincluded in the printed command.  No space is allowed between options\nand their arguments.  The only options recognized are '-C' (which is\nalso passed on) to enable compatibility mode, and '-v' to print the\nversion number and exit.\n\nFor example,\n\ngrog -Tdvi paper.ms\n\nguesses the appropriate command to print 'paper.ms' and then prints it\nto the command line after adding the '-Tdvi' option.  For direct\nexecution, enclose the call to 'grog' in backquotes at the Unix shell\nprompt:\n\n`grog -Tdvi paper.ms` > paper.dvi\n\nAs seen in the example, it is still necessary to redirect the output to\nsomething meaningful (i.e. either a file or a pager program like\n'less').\n\nFile: groff.info,  Node: Tutorial for Macro Users,  Next: Macro Packages,  Prev: Invoking groff,  Up: Top\n"
                }
            ]
        },
        "3 Tutorial for Macro Users": {
            "content": "Most users tend to use a macro package to format their papers.  This\nmeans that the whole breadth of 'groff' is not necessary for most\npeople.  This chapter covers the material needed to efficiently use a\nmacro package.\n\n* Menu:\n\n* Basics::\n* Common Features::\n\nFile: groff.info,  Node: Basics,  Next: Common Features,  Prev: Tutorial for Macro Users,  Up: Tutorial for Macro Users\n",
            "subsections": [
                {
                    "name": "3.1 Basics",
                    "content": "This section covers some of the basic concepts necessary to understand\nhow to use a macro package.(1)  (*note Basics-Footnote-1::) References\nare made throughout to more detailed information, if desired.\n\n'gtroff' reads an input file prepared by the user and outputs a\nformatted document suitable for publication or framing.  The input\nconsists of text, or words to be printed, and embedded commands\n(\"requests\" and \"escapes\"), which tell 'gtroff' how to format the\noutput.  For more detail on this, see *note Embedded Commands::.\n\nThe word \"argument\" is used in this chapter to mean a word or number\nthat appears on the same line as a request, and which modifies the\nmeaning of that request.  For example, the request\n\n.sp\n\nspaces one line, but\n\n.sp 4\n\nspaces four lines.  The number 4 is an argument to the 'sp' request,\nwhich says to space four lines instead of one.  Arguments are separated\nfrom the request and from each other by spaces (no tabs).  More\ndetails on this can be found in *note Request and Macro Arguments::.\n\nThe primary function of 'gtroff' is to collect words from input\nlines, fill output lines with those words, justify the right-hand margin\nby inserting extra spaces in the line, and output the result.  For\nexample, the input:\n\nNow is the time\nfor all good men\nto come to the aid\nof their party.\nFour score and seven\nyears ago, etc.\n\nis read, packed onto output lines, and justified to produce:\n\nNow is the time for all good men to come to the aid of their party.\nFour score and seven years ago, etc.\n\nSometimes a new output line should be started even though the current\nline is not yet full; for example, at the end of a paragraph.  To do\nthis it is possible to cause a \"break\", which starts a new output line.\nSome requests cause a break automatically, as normally do blank input\nlines and input lines beginning with a space.\n\nNot all input lines are text to be formatted.  Some input lines are\nrequests that describe how to format the text.  Requests always have a\nperiod ('.') or an apostrophe (''') as the first character of the input\nline.\n\nThe text formatter also does more complex things, such as\nautomatically numbering pages, skipping over page boundaries, putting\nfootnotes in the correct place, and so forth.\n\nHere are a few hints for preparing text for input to 'gtroff'.\n\n* First, keep the input lines short.  Short input lines are easier to\nedit, and 'gtroff' packs words onto longer lines anyhow.\n\n* In keeping with this, it is helpful to begin a new line after every\ncomma or phrase, since common corrections are to add or delete\nsentences or phrases.\n\n* End each sentence with two spaces - or better, start each sentence\non a new line.  'gtroff' recognizes characters that usually end a\nsentence, and inserts sentence space accordingly.\n\n* Do not hyphenate words at the end of lines - 'gtroff' is smart\nenough to hyphenate words as needed, but is not smart enough to\ntake hyphens out and join a word back together.  Also, words such\nas \"mother-in-law\" should not be broken over a line, since then a\nspace can occur where not wanted, such as \"mother- in-law\".\n\n'gtroff' double-spaces output text automatically if you use the\nrequest '.ls 2'.  Reactivate single-spaced mode by typing '.ls 1'.(2)\n(*note Basics-Footnote-2::)\n\nA number of requests allow to change the way the output looks,\nsometimes called the \"layout\" of the output page.  Most of these\nrequests adjust the placing of \"whitespace\" (blank lines or spaces).\n\nThe 'bp' request starts a new page, causing a line break.\n\nThe request '.sp N' leaves N lines of blank space.  N can be omitted\n(meaning skip a single line) or can be of the form Ni (for N inches) or\nNc (for N centimeters).  For example, the input:\n\n.sp 1.5i\nMy thoughts on the subject\n.sp\n\nleaves one and a half inches of space, followed by the line \"My thoughts\non the subject\", followed by a single blank line (more measurement units\nare available, see *note Measurements::).\n\nText lines can be centered by using the 'ce' request.  The line after\n'ce' is centered (horizontally) on the page.  To center more than one\nline, use '.ce N' (where N is the number of lines to center), followed\nby the N lines.  To center many lines without counting them, type:\n\n.ce 1000\nlines to center\n.ce 0\n\nThe '.ce 0' request tells 'groff' to center zero more lines, in other\nwords, stop centering.\n\nAll of these requests cause a break; that is, they always start a new\nline.  To start a new line without performing any other action, use\n'br'.\n\nFile: groff.info,  Node: Common Features,  Prev: Basics,  Up: Tutorial for Macro Users\n"
                },
                {
                    "name": "3.2 Common Features",
                    "content": "'gtroff' provides very low-level operations for formatting a document.\nThere are many common routine operations that are done in all documents.\nThese common operations are written into \"macros\" and collected into a\n\"macro package\".\n\nAll macro packages provide certain common capabilities that fall into\nthe following categories.\n\n* Menu:\n\n* Paragraphs::\n* Sections and Chapters::\n* Headers and Footers::\n* Page Layout Adjustment::\n* Displays::\n* Footnotes and Annotations::\n* Table of Contents::\n* Indices::\n* Paper Formats::\n* Multiple Columns::\n* Font and Size Changes::\n* Predefined Strings::\n* Preprocessor Support::\n* Configuration and Customization::\n\nFile: groff.info,  Node: Paragraphs,  Next: Sections and Chapters,  Prev: Common Features,  Up: Common Features\n\n\nOne of the most common and most used capability is starting a paragraph.\nThere are a number of different types of paragraphs, any of which can be\ninitiated with macros supplied by the macro package.  Normally,\nparagraphs start with a blank line and the first line indented, like the\ntext in this manual.  There are also block style paragraphs, which omit\nthe indentation:\n\nSome   men  look   at  constitutions   with  sanctimonious\nreverence, and deem them like the ark of the covenant, too\nsacred to be touched.\n\nAnd there are also indented paragraphs, which begin with a tag or label\nat the margin and the remaining text indented.\n\none   This is  the first paragraph.  Notice  how the first\nline of  the resulting  paragraph lines up  with the\nother lines in the paragraph.\n\nlonglabel\nThis  paragraph   had  a  long   label.   The  first\ncharacter of text on the first line does not line up\nwith  the  text  on  second  and  subsequent  lines,\nalthough they line up with each other.\n\nA variation of this is a bulleted list.\n\n.     Bulleted lists start with a bullet.   It is possible\nto use other glyphs instead of the bullet.  In nroff\nmode using the ASCII character set for output, a dot\nis used instead of a real bullet.\n\nFile: groff.info,  Node: Sections and Chapters,  Next: Headers and Footers,  Prev: Paragraphs,  Up: Common Features\n\n\nMost macro packages supply some form of section headers.  The simplest\nkind is simply the heading on a line by itself in bold type.  Others\nsupply automatically numbered section heading or different heading\nstyles at different levels.  Some, more sophisticated, macro packages\nsupply macros for starting chapters and appendices.\n\nFile: groff.info,  Node: Headers and Footers,  Next: Page Layout Adjustment,  Prev: Sections and Chapters,  Up: Common Features\n\n\nEvery macro package gives some way to manipulate the \"headers\" and\n\"footers\" (also called \"titles\") on each page.  This is text put at the\ntop and bottom of each page, respectively, which contain data like the\ncurrent page number, the current chapter title, and so on.  Its\nappearance is not affected by the running text.  Some packages allow for\ndifferent ones on the even and odd pages (for material printed in a book\nform).\n\nThe titles are called \"three-part titles\", that is, there is a\nleft-justified part, a centered part, and a right-justified part.  An\nautomatically generated page number may be put in any of these fields\nwith the '%' character (see *note Page Layout::, for more details).\n\nFile: groff.info,  Node: Page Layout Adjustment,  Next: Displays,  Prev: Headers and Footers,  Up: Common Features\n\n\nMost macro packages let the user specify top and bottom margins and\nother details about the appearance of the printed pages.\n\nFile: groff.info,  Node: Displays,  Next: Footnotes and Annotations,  Prev: Page Layout Adjustment,  Up: Common Features\n\n\n\"Displays\" are sections of text to be set off from the body of the\npaper.  Major quotes, tables, and figures are types of displays, as are\nall the examples used in this document.\n\n\"Major quotes\" are quotes that are several lines long, and hence are\nset in from the rest of the text without quote marks around them.\n\nA \"list\" is an indented, single-spaced, unfilled display.  Lists\nshould be used when the material to be printed should not be filled and\njustified like normal text, such as columns of figures or the examples\nused in this paper.\n\nA \"keep\" is a display of lines that are kept on a single page if\npossible.  An example for a keep might be a diagram.  Keeps differ from\nlists in that lists may be broken over a page boundary whereas keeps are\nnot.\n\n\"Floating keeps\" move relative to the text.  Hence, they are good for\nthings that are referred to by name, such as \"See figure 3\".  A floating\nkeep appears at the bottom of the current page if it fits; otherwise, it\nappears at the top of the next page.  Meanwhile, the surrounding text\n'flows' around the keep, thus leaving no blank areas.\n\nFile: groff.info,  Node: Footnotes and Annotations,  Next: Table of Contents,  Prev: Displays,  Up: Common Features\n\n\nThere are a number of requests to save text for later printing.\n\n\"Footnotes\" are printed at the bottom of the current page.\n\n\"Delayed text\" is very similar to a footnote except that it is\nprinted when called for explicitly.  This allows a list of references to\nappear (for example) at the end of each chapter, as is the convention in\nsome disciplines.\n\nMost macro packages that supply this functionality also supply a\nmeans of automatically numbering either type of annotation.\n\nFile: groff.info,  Node: Table of Contents,  Next: Indices,  Prev: Footnotes and Annotations,  Up: Common Features\n\n\n\"Tables of contents\" are a type of delayed text having a tag (usually\nthe page number) attached to each entry after a row of dots.  The table\naccumulates throughout the paper until printed, usually after the paper\nhas ended.  Many macro packages provide the ability to have several\ntables of contents (e.g. a standard table of contents, a list of tables,\netc).\n\nFile: groff.info,  Node: Indices,  Next: Paper Formats,  Prev: Table of Contents,  Up: Common Features\n\n\nWhile some macro packages use the term \"index\", none actually provide\nthat functionality.  The facilities they call indices are actually more\nappropriate for tables of contents.\n\nTo produce a real index in a document, external tools like the\n'makeindex' program are necessary.\n\nFile: groff.info,  Node: Paper Formats,  Next: Multiple Columns,  Prev: Indices,  Up: Common Features\n\n\nSome macro packages provide stock formats for various kinds of\ndocuments.  Many of them provide a common format for the title and\nopening pages of a technical paper.  The 'mm' macros in particular\nprovide formats for letters and memoranda.\n\nFile: groff.info,  Node: Multiple Columns,  Next: Font and Size Changes,  Prev: Paper Formats,  Up: Common Features\n\n\nSome macro packages (but not 'man') provide the ability to have two or\nmore columns on a page.\n\nFile: groff.info,  Node: Font and Size Changes,  Next: Predefined Strings,  Prev: Multiple Columns,  Up: Common Features\n\n\nThe built-in font and size functions are not always intuitive, so all\nmacro packages provide macros to make these operations simpler.\n\nFile: groff.info,  Node: Predefined Strings,  Next: Preprocessor Support,  Prev: Font and Size Changes,  Up: Common Features\n\n\nMost macro packages provide various predefined strings for a variety of\nuses; examples are sub- and superscripts, printable dates, quotes and\nvarious special characters.\n\nFile: groff.info,  Node: Preprocessor Support,  Next: Configuration and Customization,  Prev: Predefined Strings,  Up: Common Features\n\n\nAll macro packages provide support for various preprocessors and may\nextend their functionality.\n\nFor example, all macro packages mark tables (which are processed with\n'gtbl') by placing them between 'TS' and 'TE' macros.  The 'ms' macro\npackage has an option, '.TS H', that prints a caption at the top of a\nnew page (when the table is too long to fit on a single page).\n\nFile: groff.info,  Node: Configuration and Customization,  Prev: Preprocessor Support,  Up: Common Features\n\n\nSome macro packages provide means of customizing many of the details of\nhow the package behaves.  This ranges from setting the default type size\nto changing the appearance of section headers.\n\nFile: groff.info,  Node: Macro Packages,  Next: gtroff Reference,  Prev: Tutorial for Macro Users,  Up: Top\n"
                }
            ]
        },
        "4 Macro Packages": {
            "content": "This chapter documents the main macro packages that come with 'groff'.\n\nDifferent main macro packages can't be used at the same time; for\nexample\n\ngroff -m man foo.man -m ms bar.doc\n\ndoesn't work.  Note that option arguments are processed before\nnon-option arguments; the above (failing) sample is thus reordered to\n\ngroff -m man -m ms foo.man bar.doc\n\n* Menu:\n\n* man::\n* mdoc::\n* ms::\n* me::\n* mm::\n* mom::\n\nFile: groff.info,  Node: man,  Next: mdoc,  Prev: Macro Packages,  Up: Macro Packages\n",
            "subsections": [
                {
                    "name": "4.1 'man'",
                    "content": "This is the most popular and probably the most important macro package\nof 'groff'.  It is easy to use, and a vast majority of manual pages are\nbased on it.\n\n* Menu:\n\n* Man options::\n* Man usage::\n* Man font macros::\n* Miscellaneous man macros::\n* Predefined man strings::\n* Preprocessors in man pages::\n* Optional man extensions::\n\nFile: groff.info,  Node: Man options,  Next: Man usage,  Prev: man,  Up: man\n\n\nThe command-line format for using the 'man' macros with 'groff' is:\n\ngroff -m man [ -rLL=LENGTH ] [ -rLT=LENGTH ] [ -rFT=DIST ]\n[ -rcR=1 ] [ -rC1 ] [ -rD1 ] [-rHY=FLAGS ]\n[ -rPNNN ] [ -rSXX ] [ -rXNNN ]\n[ -rIN=LENGTH ] [ -rSN=LENGTH ] [ FILES... ]\n\nIt is possible to use '-man' instead of '-m man'.\n\n'-rcR=1'\nThis option (the default if a TTY output device is used) creates a\nsingle, very long page instead of multiple pages.  Use '-rcR=0' to\ndisable it.\n\n'-rC1'\nIf more than one manual page is given on the command line, number\nthe pages continuously, rather than starting each at 1.\n\n'-rD1'\nDouble-sided printing.  Footers for even and odd pages are\nformatted differently.\n\n'-rFT=DIST'\nSet the position of the footer text to DIST.  If positive, the\ndistance is measured relative to the top of the page, otherwise it\nis relative to the bottom.  The default is -0.5i.\n\n'-rHY=FLAGS'\nSet hyphenation flags.  Possible values are 1 to hyphenate without\nrestrictions, 2 to not hyphenate the last word on a page, 4 to not\nhyphenate the last two characters of a word, and 8 to not hyphenate\nthe first two characters of a word.  These values are additive; the\ndefault is 8.\n\n'-rIN=LENGTH'\nSet the body text indentation to LENGTH.  If not specified, the\nindentation defaults to 7n (7 characters) in nroff mode and 7.2n\notherwise.  For nroff, this value should always be an integer\nmultiple of unit 'n' to get consistent indentation.\n\n'-rLL=LENGTH'\nSet line length to LENGTH.  If not specified, the line length is\nset to respect any value set by a prior 'll' request (which must\nbe in effect when the 'TH' macro is invoked), if this differs from\nthe built-in default for the formatter; otherwise it defaults to\n78n in nroff mode (this is 78 characters per line) and 6.5i in\ntroff mode.(1)  (*note Man options-Footnote-1::)\n\n'-rLT=LENGTH'\nSet title length to LENGTH.  If not specified, the title length\ndefaults to the line length.\n\n'-rPNNN'\nPage numbering starts with NNN rather than with 1.\n\n'-rSXX'\nUse XX (which can be 10, 11, or 12pt) as the base document font\nsize instead of the default value of 10pt.\n\n'-rSN=LENGTH'\nSet the indentation for sub-subheadings to LENGTH.  If not\nspecified, the indentation defaults to 3n.\n\n'-rXNNN'\nAfter page NNN, number pages as NNNa, NNNb, NNNc, etc.  For\nexample, the option '-rX2' produces the following page numbers: 1,\n2, 2a, 2b, 2c, etc.\n\nFile: groff.info,  Node: Man usage,  Next: Man font macros,  Prev: Man options,  Up: man\n\n\nThis section describes the available macros for manual pages.  For\nfurther customization, put additional macros and requests into the file\n'man.local', which is loaded immediately after the 'man' package.\n\n-- Macro: .TH title section [extra1 [extra2 [extra3]]]\nSet the title of the man page to TITLE and the section to SECTION,\nwhich must have a value between 1 and 8.  The value of SECTION may\nalso have a string appended, e.g. '.pm', to indicate a specific\nsubsection of the man pages.\n\nBoth TITLE and SECTION are positioned at the left and right in the\nheader line (with SECTION in parentheses immediately appended to\nTITLE.  EXTRA1 is positioned in the middle of the footer line.\nEXTRA2 is positioned at the left in the footer line (or at the left\non even pages and at the right on odd pages if double-sided\nprinting is active).  EXTRA3 is centered in the header line.\n\nFor HTML and XHTML output, headers and footers are completely\nsuppressed.\n\nAdditionally, this macro starts a new page; the new line number\nis 1 again (except if the '-rC1' option is given on the command\nline) - this feature is intended only for formatting multiple man\npages; a single man page should contain exactly one 'TH' macro at\nthe beginning of the file.\n\n-- Macro: .SH [heading]\nSet up an unnumbered section heading sticking out to the left.\nPrints out all the text following 'SH' up to the end of the line\n(or the text in the next line if there is no argument to 'SH') in\nbold face (or the font specified by the string 'HF'), one size\nlarger than the base document size.  Additionally, the left margin\nand the indentation for the following text is reset to its default\nvalue.\n\n-- Macro: .SS [heading]\nSet up an unnumbered (sub)section heading.  Prints out all the text\nfollowing 'SS' up to the end of the line (or the text in the next\nline if there is no argument to 'SS') in bold face (or the font\nspecified by the string 'HF'), at the same size as the base\ndocument size.  Additionally, the left margin and the indentation\nfor the following text is reset to its default value.\n\n-- Macro: .TP [nnn]\nSet up an indented paragraph with label.  The indentation is set to\nNNN if that argument is supplied (the default unit is 'n' if\nomitted), otherwise it is set to the previous indentation value\nspecified with 'TP', 'IP', or 'HP' (or to the default value if none\nof them have been used yet).\n\nThe first line of text following this macro is interpreted as a\nstring to be printed flush-left, as it is appropriate for a label.\nIt is not interpreted as part of a paragraph, so there is no\nattempt to fill the first line with text from the following input\nlines.  Nevertheless, if the label is not as wide as the\nindentation the paragraph starts at the same line (but indented),\ncontinuing on the following lines.  If the label is wider than the\nindentation the descriptive part of the paragraph begins on the\nline following the label, entirely indented.  Note that neither\nfont shape nor font size of the label is set to a default value; on\nthe other hand, the rest of the text has default font settings.\n\n-- Macro: .LP\n-- Macro: .PP\n-- Macro: .P\nThese macros are mutual aliases.  Any of them causes a line break\nat the current position, followed by a vertical space downwards by\nthe amount specified by the 'PD' macro.  The font size and shape\nare reset to the default value (10pt roman if no '-rS' option is\ngiven on the command line).  Finally, the current left margin and\nthe indentation is restored.\n\n-- Macro: .IP [designator [nnn]]\nSet up an indented paragraph, using DESIGNATOR as a tag to mark its\nbeginning.  The indentation is set to NNN if that argument is\nsupplied (default unit is 'n'), otherwise it is set to the previous\nindentation value specified with 'TP', 'IP', or 'HP' (or the\ndefault value if none of them have been used yet).  Font size and\nface of the paragraph (but not the designator) are reset to their\ndefault values.\n\nTo start an indented paragraph with a particular indentation but\nwithout a designator, use '\"\"' (two double quotes) as the first\nargument of 'IP'.\n\nFor example, to start a paragraph with bullets as the designator\nand 4 en indentation, write\n\n.IP \\(bu 4\n\n-- Macro: .HP [nnn]\nSet up a paragraph with hanging left indentation.  The indentation\nis set to NNN if that argument is supplied (default unit is 'n'),\notherwise it is set to the previous indentation value specified\nwith 'TP', 'IP', or 'HP' (or the default value if non of them have\nbeen used yet).  Font size and face are reset to their default\nvalues.\n\n-- Macro: .RS [nnn]\nMove the left margin to the right by the value NNN if specified\n(default unit is 'n'); otherwise it is set to the previous\nindentation value specified with 'TP', 'IP', or 'HP' (or to the\ndefault value if none of them have been used yet).  The indentation\nvalue is then set to the default.\n\nCalls to the 'RS' macro can be nested.\n\n-- Macro: .RE [nnn]\nMove the left margin back to level NNN, restoring the previous left\nmargin.  If no argument is given, it moves one level back.  The\nfirst level (i.e., no call to 'RS' yet) has number 1, and each call\nto 'RS' increases the level by 1.\n\nTo summarize, the following macros cause a line break with the\ninsertion of vertical space (which amount can be changed with the 'PD'\nmacro): 'SH', 'SS', 'TP', 'LP' ('PP', 'P'), 'IP', and 'HP'.\n\nThe macros 'RS' and 'RE' also cause a break but do not insert\nvertical space.\n\nFinally, the macros 'SH', 'SS', 'LP' ('PP', 'P'), and 'RS' reset the\nindentation to its default value.\n\nFile: groff.info,  Node: Man font macros,  Next: Miscellaneous man macros,  Prev: Man usage,  Up: man\n\n\nThe standard font is roman; the default text size is 10 points.  If\ncommand-line option '-rS=N' is given, use N points as the default text\nsize.\n\n-- Macro: .SM [text]\nSet the text on the same line or the text on the next line in a\nfont that is one point size smaller than the default font.\n\n-- Macro: .SB [text]\nSet the text on the same line or the text on the next line in bold\nface font, one point size smaller than the default font.\n\n-- Macro: .BI text\nSet its arguments alternately in bold face and italic, without a\nspace between the arguments.  Thus,\n\n.BI this \"word and\" that\n\nproduces \"thisword andthat\" with \"this\" and \"that\" in bold face,\nand \"word and\" in italics.\n\n-- Macro: .IB text\nSet its arguments alternately in italic and bold face, without a\nspace between the arguments.\n\n-- Macro: .RI text\nSet its arguments alternately in roman and italic, without a space\nbetween the arguments.\n\n-- Macro: .IR text\nSet its arguments alternately in italic and roman, without a space\nbetween the arguments.\n\n-- Macro: .BR text\nSet its arguments alternately in bold face and roman, without a\nspace between the arguments.\n\n-- Macro: .RB text\nSet its arguments alternately in roman and bold face, without a\nspace between the arguments.\n\n-- Macro: .B [text]\nSet TEXT in bold face.  If no text is present on the line where the\nmacro is called, then the text of the next line appears in bold\nface.\n\n-- Macro: .I [text]\nSet TEXT in italic.  If no text is present on the line where the\nmacro is called, then the text of the next line appears in italic.\n\nFile: groff.info,  Node: Miscellaneous man macros,  Next: Predefined man strings,  Prev: Man font macros,  Up: man\n\n\nThe default indentation is 7.2n in troff mode and 7n in nroff mode\nexcept for 'grohtml', which ignores indentation.\n\n-- Macro: .DT\nSet tabs every 0.5 inches.  Since this macro is always executed\nduring a call to the 'TH' macro, it makes sense to call it only if\nthe tab positions have been changed.\n\n-- Macro: .PD [nnn]\nAdjust the empty space before a new paragraph (or section).  The\noptional argument gives the amount of space (default unit is 'v');\nwithout parameter, the value is reset to its default value (1 line\nin nroff mode, 0.4v otherwise).\n\nThis affects the macros 'SH', 'SS', 'TP', 'LP' (as well as 'PP' and\n'P'), 'IP', and 'HP'.\n\nThe following two macros are included for BSD compatibility.\n\n-- Macro: .AT [system [release]]\nAlter the footer for use with AT&T manpages.  This command exists\nonly for compatibility; don't use it.  The first argument SYSTEM\ncan be:\n\n'3'\n7th Edition (the default)\n\n'4'\nSystem III\n\n'5'\nSystem V\n\nAn optional second argument RELEASE to 'AT' specifies the release\nnumber (such as \"System V Release 3\").\n\n-- Macro: .UC [version]\nAlters the footer for use with BSD manpages.  This command exists\nonly for compatibility; don't use it.  The argument can be:\n\n'3'\n3rd Berkeley Distribution (the default)\n\n'4'\n4th Berkeley Distribution\n\n'5'\n4.2 Berkeley Distribution\n\n'6'\n4.3 Berkeley Distribution\n\n'7'\n4.4 Berkeley Distribution\n\nFile: groff.info,  Node: Predefined man strings,  Next: Preprocessors in man pages,  Prev: Miscellaneous man macros,  Up: man\n\n\nThe following strings are defined:\n\n-- String: \\*[S]\nSwitch back to the default font size.\n\n-- String: \\*[HF]\nThe typeface used for headings.  The default is 'B'.\n\n-- String: \\*[R]\nThe 'registered' sign.\n\n-- String: \\*[Tm]\nThe 'trademark' sign.\n\n-- String: \\*[lq]\n-- String: \\*[rq]\nLeft and right quote.  This is equal to '\\(lq' and '\\(rq',\nrespectively.\n\nFile: groff.info,  Node: Preprocessors in man pages,  Next: Optional man extensions,  Prev: Predefined man strings,  Up: man\n\n\nIf a preprocessor like 'gtbl' or 'geqn' is needed, it has become common\nusage to make the first line of the man page look like this:\n\n'\\\" WORD\n\nNote the single space character after the double quote.  WORD consists\nof letters for the needed preprocessors: 'e' for 'geqn', 'r' for\n'grefer', 't' for 'gtbl'.  Modern implementations of the 'man' program\nread this first line and automatically call the right preprocessor(s).\n\nFile: groff.info,  Node: Optional man extensions,  Prev: Preprocessors in man pages,  Up: man\n\n\nUse the file 'man.local' for local extensions to the 'man' macros or for\nstyle changes.\n\nCustom headers and footers\n..........................\n\nIn groff versions 1.18.2 and later, you can specify custom headers and\nfooters by redefining the following macros in 'man.local'.\n\n-- Macro: .PT\nControl the content of the headers.  Normally, the header prints\nthe command name and section number on either side, and the\noptional fifth argument to 'TH' in the center.\n\n-- Macro: .BT\nControl the content of the footers.  Normally, the footer prints\nthe page number and the third and fourth arguments to 'TH'.\n\nUse the 'FT' number register to specify the footer position.  The\ndefault is -0.5i.\n\nUltrix-specific man macros\n..........................\n\nThe 'groff' source distribution includes a file named 'man.ultrix',\ncontaining macros compatible with the Ultrix variant of 'man'.  Copy\nthis file into 'man.local' (or use the 'mso' request to load it) to\nenable the following macros.\n\n-- Macro: .CT key\nPrint '<CTRL/KEY>'.\n\n-- Macro: .CW\nPrint subsequent text using the constant width (Courier) typeface.\n\n-- Macro: .Ds\nBegin a non-filled display.\n\n-- Macro: .De\nEnd a non-filled display started with 'Ds'.\n\n-- Macro: .EX [indent]\nBegin a non-filled display using the constant width (Courier)\ntypeface.  Use the optional INDENT argument to indent the display.\n\n-- Macro: .EE\nEnd a non-filled display started with 'EX'.\n\n-- Macro: .G [text]\nSet TEXT in Helvetica.  If no text is present on the line where the\nmacro is called, then the text of the next line appears in\nHelvetica.\n\n-- Macro: .GL [text]\nSet TEXT in Helvetica Oblique.  If no text is present on the line\nwhere the macro is called, then the text of the next line appears\nin Helvetica Oblique.\n\n-- Macro: .HB [text]\nSet TEXT in Helvetica Bold.  If no text is present on the line\nwhere the macro is called, then all text up to the next 'HB'\nappears in Helvetica Bold.\n\n-- Macro: .TB [text]\nIdentical to 'HB'.\n\n-- Macro: .MS title sect [punct]\nSet a manpage reference in Ultrix format.  The TITLE is in Courier\ninstead of italic.  Optional punctuation follows the section number\nwithout an intervening space.\n\n-- Macro: .NT [C] [title]\nBegin a note.  Print the optional title, or the word \"Note\",\ncentered on the page.  Text following the macro makes up the body\nof the note, and is indented on both sides.  If the first argument\nis 'C', the body of the note is printed centered (the second\nargument replaces the word \"Note\" if specified).\n\n-- Macro: .NE\nEnd a note begun with 'NT'.\n\n-- Macro: .PN path [punct]\nSet the path name in constant width (Courier), followed by optional\npunctuation.\n\n-- Macro: .Pn [punct] path [punct]\nIf called with two arguments, identical to 'PN'.  If called with\nthree arguments, set the second argument in constant width\n(Courier), bracketed by the first and third arguments in the\ncurrent font.\n\n-- Macro: .R\nSwitch to roman font and turn off any underlining in effect.\n\n-- Macro: .RN\nPrint the string '<RETURN>'.\n\n-- Macro: .VS [4]\nStart printing a change bar in the margin if the number '4' is\nspecified.  Otherwise, this macro does nothing.\n\n-- Macro: .VE\nEnd printing the change bar begun by 'VS'.\n\nSimple example\n..............\n\nThe following example 'man.local' file alters the 'SH' macro to add some\nextra vertical space before printing the heading.  Headings are printed\nin Helvetica Bold.\n\n.\\\" Make the heading fonts Helvetica\n.ds HF HB\n.\n.\\\" Put more whitespace in front of headings.\n.rn SH SH-orig\n.de SH\n.  if t .sp (u;\\\\n[PD]*2)\n.  SH-orig \\\\$*\n..\n\nFile: groff.info,  Node: mdoc,  Next: ms,  Prev: man,  Up: Macro Packages\n"
                },
                {
                    "name": "4.2 'mdoc'",
                    "content": "See the 'groffmdoc(7)' man page (type 'man groffmdoc' at the command\nline).\n\nFile: groff.info,  Node: ms,  Next: me,  Prev: mdoc,  Up: Macro Packages\n"
                },
                {
                    "name": "4.3 'ms'",
                    "content": "The '-ms' macros are suitable for reports, letters, books, user manuals,\nand so forth.  The package provides macros for cover pages, section\nheadings, paragraphs, lists, footnotes, pagination, and a table of\ncontents.\n\n* Menu:\n\n* ms Intro::\n* General ms Structure::\n* ms Document Control Registers::\n* ms Cover Page Macros::\n* ms Body Text::\n* ms Page Layout::\n* Differences from AT&T ms::\n* Naming Conventions::\n\nFile: groff.info,  Node: ms Intro,  Next: General ms Structure,  Prev: ms,  Up: ms\n\n\nThe original '-ms' macros were included with AT&T 'troff' as well as the\n'man' macros.  While the 'man' package is intended for brief documents\nthat can be read on-line as well as printed, the 'ms' macros are\nsuitable for longer documents that are meant to be printed rather than\nread on-line.\n\nThe 'ms' macro package included with 'groff' is a complete, bottom-up\nre-implementation.  Several macros (specific to AT&T or Berkeley) are\nnot included, while several new commands are.  *Note Differences from\nAT&T ms::, for more information.\n\nFile: groff.info,  Node: General ms Structure,  Next: ms Document Control Registers,  Prev: ms Intro,  Up: ms\n\n\nThe 'ms' macro package expects a certain amount of structure, but not as\nmuch as packages such as 'man' or 'mdoc'.\n\nThe simplest documents can begin with a paragraph macro (such as 'LP'\nor 'PP'), and consist of text separated by paragraph macros or even\nblank lines.  Longer documents have a structure as follows:\n\n*Document type*\nIf you invoke the 'RP' (report) macro on the first line of the\ndocument, 'groff' prints the cover page information on its own\npage; otherwise it prints the information on the first page with\nyour document text immediately following.  Other document formats\nfound in AT&T 'troff' are specific to AT&T or Berkeley, and are not\nsupported in 'groff'.\n\n*Format and layout*\nBy setting number registers, you can change your document's type\n(font and size), margins, spacing, headers and footers, and\nfootnotes.  *Note ms Document Control Registers::, for more\ndetails.\n\n*Cover page*\nA cover page consists of a title, the author's name and\ninstitution, an abstract, and the date.(1)  (*note General ms\nStructure-Footnote-1::) *Note ms Cover Page Macros::, for more\ndetails.\n\n*Body*\nFollowing the cover page is your document.  You can use the 'ms'\nmacros to write reports, letters, books, and so forth.  The package\nis designed for structured documents, consisting of paragraphs\ninterspersed with headings and augmented by lists, footnotes,\ntables, and other common constructs.  *Note ms Body Text::, for\nmore details.\n\n*Table of contents*\nLonger documents usually include a table of contents, which you can\ninvoke by placing the 'TC' macro at the end of your document.  The\n'ms' macros have minimal indexing facilities, consisting of the\n'IX' macro, which prints an entry on standard error.  Printing the\ntable of contents at the end is necessary since 'groff' is a\nsingle-pass text formatter, thus it cannot determine the page\nnumber of each section until that section has actually been set and\nprinted.  Since 'ms' output is intended for hardcopy, you can\nmanually relocate the pages containing the table of contents\nbetween the cover page and the body text after printing.\n\nFile: groff.info,  Node: ms Document Control Registers,  Next: ms Cover Page Macros,  Prev: General ms Structure,  Up: ms\n\n\nThe following is a list of document control number registers.  For the\nsake of consistency, set registers related to margins at the beginning\nof your document, or just after the 'RP' macro.  You can set other\nregisters later in your document, but you should keep them together at\nthe beginning to make them easy to find and edit as necessary.\n\nMargin Settings\n...............\n\n-- Register: \\n[PO]\nDefines the page offset (i.e., the left margin).  There is no\nexplicit right margin setting; the combination of the 'PO' and 'LL'\nregisters implicitly define the right margin width.\n\nEffective: next page.\n\nDefault value: 1i.\n\n-- Register: \\n[LL]\nDefines the line length (i.e., the width of the body text).\n\nEffective: next paragraph.\n\nDefault: 6i.\n\n-- Register: \\n[LT]\nDefines the title length (i.e., the header and footer width).  This\nis usually the same as 'LL', but not necessarily.\n\nEffective: next paragraph.\n\nDefault: 6i.\n\n-- Register: \\n[HM]\nDefines the header margin height at the top of the page.\n\nEffective: next page.\n\nDefault: 1i.\n\n-- Register: \\n[FM]\nDefines the footer margin height at the bottom of the page.\n\nEffective: next page.\n\nDefault: 1i.\n\nText Settings\n.............\n\n-- Register: \\n[PS]\nDefines the point size of the body text.  If the value is larger\nthan or equal to 1000, divide it by 1000 to get a fractional point\nsize.  For example, '.nr PS 10250' sets the document's point size\nto 10.25p.\n\nEffective: next paragraph.\n\nDefault: 10p.\n\n-- Register: \\n[VS]\nDefines the space between lines (line height plus leading).  If the\nvalue is larger than or equal to 1000, divide it by 1000 to get a\nfractional point size.  Due to backwards compatibility, 'VS' must\nbe smaller than 40000 (this is 40.0p).\n\nEffective: next paragraph.\n\nDefault: 12p.\n\n-- Register: \\n[PSINCR]\nDefines an increment in point size, which is applied to section\nheadings at nesting levels below the value specified in 'GROWPS'.\nThe value of 'PSINCR' should be specified in points, with the p\nscaling factor, and may include a fractional component; for\nexample, '.nr PSINCR 1.5p' sets a point size increment of 1.5p.\n\nEffective: next section heading.\n\nDefault: 1p.\n\n-- Register: \\n[GROWPS]\nDefines the heading level below which the point size increment set\nby 'PSINCR' becomes effective.  Section headings at and above the\nlevel specified by 'GROWPS' are printed at the point size set by\n'PS'; for each level below the value of 'GROWPS', the point size is\nincreased in steps equal to the value of 'PSINCR'.  Setting\n'GROWPS' to any value less than 2 disables the incremental heading\nsize feature.\n\nEffective: next section heading.\n\nDefault: 0.\n\n-- Register: \\n[HY]\nDefines the hyphenation level.  'HY' sets safely the value of the\nlow-level 'hy' register.  Setting the value of 'HY' to 0 is\nequivalent to using the 'nh' request.\n\nEffective: next paragraph.\n\nDefault: 6.\n\n-- Register: \\n[FAM]\nDefines the font family used to typeset the document.\n\nEffective: next paragraph.\n\nDefault: as defined in the output device.\n\nParagraph Settings\n..................\n\n-- Register: \\n[PI]\nDefines the initial indentation of a ('PP' macro) paragraph.\n\nEffective: next paragraph.\n\nDefault: 5n.\n\n-- Register: \\n[PD]\nDefines the space between paragraphs.\n\nEffective: next paragraph.\n\nDefault: 0.3v.\n\n-- Register: \\n[QI]\nDefines the indentation on both sides of a quoted ('QP', 'QS', and\n'QE' macros) paragraph.\n\nEffective: next paragraph.\n\nDefault: 5n.\n\n-- Register: \\n[PORPHANS]\nDefines the minimum number of initial lines of any paragraph that\nshould be kept together, to avoid orphan lines at the bottom of a\npage.  If a new paragraph is started close to the bottom of a page,\nand there is insufficient space to accommodate 'PORPHANS' lines\nbefore an automatic page break, then the page break is forced,\nbefore the start of the paragraph.\n\nEffective: next paragraph.\n\nDefault: 1.\n\n-- Register: \\n[HORPHANS]\nDefines the minimum number of lines of the following paragraph that\nshould be kept together with any section heading introduced by the\n'NH' or 'SH' macros.  If a section heading is placed close to the\nbottom of a page, and there is insufficient space to accommodate\nboth the heading and at least 'HORPHANS' lines of the following\nparagraph, before an automatic page break, then the page break is\nforced before the heading.\n\nEffective: next paragraph.\n\nDefault: 1.\n\nFootnote Settings\n.................\n\n-- Register: \\n[FL]\nDefines the length of a footnote.\n\nEffective: next footnote.\n\nDefault: '\\n[LL]' * 5 / 6.\n\n-- Register: \\n[FI]\nDefines the footnote indentation.\n\nEffective: next footnote.\n\nDefault: 2n.\n\n-- Register: \\n[FF]\nThe footnote format:\n'0'\nPrint the footnote number as a superscript; indent the\nfootnote (default).\n\n'1'\nPrint the number followed by a period (like 1.) and indent the\nfootnote.\n\n'2'\nLike 1, without an indentation.\n\n'3'\nLike 1, but print the footnote number as a hanging paragraph.\n\nEffective: next footnote.\n\nDefault: 0.\n\n-- Register: \\n[FPS]\nDefines the footnote point size.  If the value is larger than or\nequal to 1000, divide it by 1000 to get a fractional point size.\n\nEffective: next footnote.\n\nDefault: '\\n[PS]' - 2.\n\n-- Register: \\n[FVS]\nDefines the footnote vertical spacing.  If the value is larger than\nor equal to 1000, divide it by 1000 to get a fractional point size.\n\nEffective: next footnote.\n\nDefault: '\\n[FPS]' + 2.\n\n-- Register: \\n[FPD]\nDefines the footnote paragraph spacing.\n\nEffective: next footnote.\n\nDefault: '\\n[PD]' / 2.\n\nMiscellaneous Number Registers\n..............................\n\n-- Register: \\n[MINGW]\nDefines the minimum width between columns in a multi-column\ndocument.\n\nEffective: next page.\n\nDefault: 2n.\n\n-- Register: \\n[DD]\nSets the vertical spacing before and after a display, a 'tbl'\ntable, an 'eqn' equation, or a 'pic' image.\n\nEffective: next paragraph.\n\nDefault: 0.5v.\n\nFile: groff.info,  Node: ms Cover Page Macros,  Next: ms Body Text,  Prev: ms Document Control Registers,  Up: ms\n\n\nUse the following macros to create a cover page for your document in the\norder shown.\n\n-- Macro: .RP [no]\nSpecifies the report format for your document.  The report format\ncreates a separate cover page.  The default action (no 'RP' macro)\nis to print a subset of the cover page on page 1 of your document.\n\nIf you use the word 'no' as an optional argument, 'groff' prints a\ntitle page but does not repeat any of the title page information\n(title, author, abstract, etc.) on page 1 of the document.\n\n-- Macro: .P1\n(P-one) Prints the header on page 1.  The default is to suppress\nthe header.\n\n-- Macro: .DA [...]\n(optional) Prints the current date, or the arguments to the macro\nif any, on the title page (if specified) and in the footers.  This\nis the default for 'nroff'.\n\n-- Macro: .ND [...]\n(optional) Prints the current date, or the arguments to the macro\nif any, on the title page (if specified) but not in the footers.\nThis is the default for 'troff'.\n\n-- Macro: .TL\nSpecifies the document title.  'groff' collects text following the\n'TL' macro into the title, until reaching the author name or\nabstract.\n\n-- Macro: .AU\nSpecifies the author's name, which appears on the line (or lines)\nimmediately following.  You can specify multiple authors as\nfollows:\n\n.AU\nJohn Doe\n.AI\nUniversity of West Bumblefuzz\n.AU\nMartha Buck\n.AI\nMonolithic Corporation\n\n...\n\n-- Macro: .AI\nSpecifies the author's institution.  You can specify multiple\ninstitutions in the same way that you specify multiple authors.\n\n-- Macro: .AB [no]\nBegins the abstract.  The default is to print the word ABSTRACT,\ncentered and in italics, above the text of the abstract.  The word\n'no' as an optional argument suppresses this heading.\n\n-- Macro: .AE\nEnds the abstract.\n\nThe following is example mark-up for a title page.\n\n.RP\n.TL\nThe Inevitability of Code Bloat\nin Commercial and Free Software\n.AU\nJ. Random Luser\n.AI\nUniversity of West Bumblefuzz\n.AB\nThis report examines the long-term growth\nof the code bases in two large, popular software\npackages; the free Emacs and the commercial\nMicrosoft Word.\nWhile differences appear in the type or order\nof features added, due to the different\nmethodologies used, the results are the same\nin the end.\n.PP\nThe free software approach is shown to be\nsuperior in that while free software can\nbecome as bloated as commercial offerings,\nfree software tends to have fewer serious\nbugs and the added features are in line with\nuser demand.\n.AE\n\n... the rest of the paper follows ...\n\nFile: groff.info,  Node: ms Body Text,  Next: ms Page Layout,  Prev: ms Cover Page Macros,  Up: ms\n\n\nThis section describes macros used to mark up the body of your document.\nExamples include paragraphs, sections, and other groups.\n\n* Menu:\n\n* Paragraphs in ms::\n* Headings in ms::\n* Highlighting in ms::\n* Lists in ms::\n* Indentation values in ms::\n* Tabstops in ms::\n* ms Displays and Keeps::\n* ms Insertions::\n* Example multi-page table::\n* ms Footnotes::\n\nFile: groff.info,  Node: Paragraphs in ms,  Next: Headings in ms,  Prev: ms Body Text,  Up: ms Body Text\n\n4.3.5.1 Paragraphs\n..................\n\nThe following paragraph types are available.\n\n-- Macro: .PP\nSets a paragraph with an initial indentation.\n\n-- Macro: .LP\nSets a paragraph without an initial indentation.\n\n-- Macro: .QP\nSets a paragraph that is indented at both left and right margins by\nthe amount of the register 'QI'.  The effect is identical to the\nHTML '<BLOCKQUOTE>' element.  The next paragraph or heading returns\nmargins to normal.  'QP' inserts vertical space of amount set by\nregister 'PD' before the paragraph.\n\n-- Macro: .QS\n-- Macro: .QE\nThese macros begin and end a quoted section.  The 'QI' register\ncontrols the amount of indentation.  Both 'QS' and 'QE' insert\ninter-paragraph vertical space set by register 'PD'.  The text\nbetween 'QS' and 'QE' can be structured further by use of the\nmacros 'LP' or 'PP'.\n\n-- Macro: .XP\nSets a paragraph whose lines are indented, except for the first\nline.  This is a Berkeley extension.\n\nThe following markup uses all four paragraph macros.\n\n.NH 2\nCases used in the study\n.LP\nThe following software and versions were\nconsidered for this report.\n.PP\nFor commercial software, we chose\n.B \"Microsoft Word for Windows\" ,\nstarting with version 1.0 through the\ncurrent version (Word 2000).\n.PP\nFor free software, we chose\n.B Emacs ,\nfrom its first appearance as a standalone\neditor through the current version (v20).\nSee [Bloggs 2002] for details.\n.QP\nFranklin's Law applied to software:\nsoftware expands to outgrow both\nRAM and disk space over time.\n.LP\nBibliography:\n.XP\nBloggs, Joseph R.,\n.I \"Everyone's a Critic\" ,\nUnderground Press, March 2002.\nA definitive work that answers all questions\nand criticisms about the quality and usability of\nfree software.\n\nThe 'PORPHANS' register (*note ms Document Control Registers::)\noperates in conjunction with each of these macros, to inhibit the\nprinting of orphan lines at the bottom of any page.\n\nFile: groff.info,  Node: Headings in ms,  Next: Highlighting in ms,  Prev: Paragraphs in ms,  Up: ms Body Text\n\n4.3.5.2 Headings\n................\n\nUse headings to create a hierarchical structure for your document.  The\n'ms' macros print headings in *bold*, using the same font family and\npoint size as the body text.\n\nThe following describes the heading macros:\n\n-- Macro: .NH curr-level\n-- Macro: .NH S level0 ...\nNumbered heading.  The argument is either a numeric argument to\nindicate the level of the heading, or the letter 'S' followed by\nnumeric arguments to set the heading level explicitly.\n\nIf you specify heading levels out of sequence, such as invoking\n'.NH 3' after '.NH 1', 'groff' prints a warning on standard error.\n\n-- String: \\*[SN]\n-- String: \\*[SN-DOT]\n-- String: \\*[SN-NO-DOT]\nAfter invocation of 'NH', the assigned section number is made\navailable in the strings 'SN-DOT' (as it appears in a printed\nsection heading with default formatting, followed by a terminating\nperiod), and 'SN-NO-DOT' (with the terminating period omitted).\nThe string 'SN' is also defined, as an alias for 'SN-DOT'; if\npreferred, you may redefine it as an alias for 'SN-NO-DOT', by\nincluding the initialization\n.als SN SN-NO-DOT\n\nat any time *before* you would like the change to take effect.\n\n-- String: \\*[SN-STYLE]\nYou may control the style used to print section numbers, within\nnumbered section headings, by defining an appropriate alias for the\nstring 'SN-STYLE'.  The default style, in which the printed section\nnumber is followed by a terminating period, is obtained by defining\nthe alias\n\n.als SN-STYLE SN-DOT\n\nIf you prefer to omit the terminating period, from section numbers\nappearing in numbered section headings, you may define the alias\n\n.als SN-STYLE SN-NO-DOT\n\nAny such change in section numbering style becomes effective from\nthe next use of '.NH', following redefinition of the alias for\n'SN-STYLE'.\n\n-- Macro: .SH [match-level]\nUnnumbered subheading.\n\nThe optional MATCH-LEVEL argument is a GNU extension.  It is a\nnumber indicating the level of the heading, in a manner analogous\nto the CURR-LEVEL argument to '.NH'.  Its purpose is to match the\npoint size, at which the heading is printed, to the size of a\nnumbered heading at the same level, when the 'GROWPS' and 'PSINCR'\nheading size adjustment mechanism is in effect.  *Note ms Document\nControl Registers::.\n\nThe 'HORPHANS' register (*note ms Document Control Registers::)\noperates in conjunction with the 'NH' and 'SH' macros, to inhibit the\nprinting of orphaned section headings at the bottom of any page.\n\nFile: groff.info,  Node: Highlighting in ms,  Next: Lists in ms,  Prev: Headings in ms,  Up: ms Body Text\n\n4.3.5.3 Highlighting\n....................\n\nThe 'ms' macros provide a variety of methods to highlight or emphasize\ntext:\n\n-- Macro: .B [txt [post [pre]]]\nSets its first argument in *bold type*.  If you specify a second\nargument, 'groff' prints it in the previous font after the bold\ntext, with no intervening space (this allows you to set punctuation\nafter the highlighted text without highlighting the punctuation).\nSimilarly, it prints the third argument (if any) in the previous\nfont *before* the first argument.  For example,\n\n.B foo ) (\n\nprints (*foo*).\n\nIf you give this macro no arguments, 'groff' prints all text\nfollowing in bold until the next highlighting, paragraph, or\nheading macro.\n\n-- Macro: .R [txt [post [pre]]]\nSets its first argument in roman (or regular) type.  It operates\nsimilarly to the 'B' macro otherwise.\n\n-- Macro: .I [txt [post [pre]]]\nSets its first argument in italic type.  It operates similarly to\nthe 'B' macro otherwise.\n\n-- Macro: .CW [txt [post [pre]]]\nSets its first argument in a 'constant width face'.  It operates\nsimilarly to the 'B' macro otherwise.\n\n-- Macro: .BI [txt [post [pre]]]\nSets its first argument in bold italic type.  It operates similarly\nto the 'B' macro otherwise.\n\n-- Macro: .BX [txt]\nPrints its argument and draws a box around it.  If you want to box\na string that contains spaces, use a digit-width space ('\\0').\n\n-- Macro: .UL [txt [post]]\nPrints its first argument with an underline.  If you specify a\nsecond argument, 'groff' prints it in the previous font after the\nunderlined text, with no intervening space.\n\n-- Macro: .LG\nPrints all text following in larger type (two points larger than\nthe current point size) until the next font size, highlighting,\nparagraph, or heading macro.  You can specify this macro multiple\ntimes to enlarge the point size as needed.\n\n-- Macro: .SM\nPrints all text following in smaller type (two points smaller than\nthe current point size) until the next type size, highlighting,\nparagraph, or heading macro.  You can specify this macro multiple\ntimes to reduce the point size as needed.\n\n-- Macro: .NL\nPrints all text following in the normal point size (that is, the\nvalue of the 'PS' register).\n\n-- String: \\*[{]\n-- String: \\*[}]\nText enclosed with '\\*{' and '\\*}' is printed as a superscript.\n\nFile: groff.info,  Node: Lists in ms,  Next: Indentation values in ms,  Prev: Highlighting in ms,  Up: ms Body Text\n\n4.3.5.4 Lists\n.............\n\nThe 'IP' macro handles duties for all lists.\n\n-- Macro: .IP [marker [width]]\nThe MARKER is usually a bullet glyph ('\\[bu]') for unordered lists,\na number (or auto-incrementing number register) for numbered lists,\nor a word or phrase for indented (glossary-style) lists.\n\nThe WIDTH specifies the indentation for the body of each list item;\nits default unit is 'n'.  Once specified, the indentation remains\nthe same for all list items in the document until specified again.\n\nThe 'PORPHANS' register (*note ms Document Control Registers::)\noperates in conjunction with the 'IP' macro, to inhibit the\nprinting of orphaned list markers at the bottom of any page.\n\nThe following is an example of a bulleted list.\n\nA bulleted list:\n.IP \\[bu] 2\nlawyers\n.IP \\[bu]\nguns\n.IP \\[bu]\nmoney\n\nProduces:\n\nA bulleted list:\n\no lawyers\n\no guns\n\no money\n\nThe following is an example of a numbered list.\n\n.nr step 1 1\nA numbered list:\n.IP \\n[step] 3\nlawyers\n.IP \\n+[step]\nguns\n.IP \\n+[step]\nmoney\n\nProduces:\n\nA numbered list:\n\n1. lawyers\n\n2. guns\n\n3. money\n\nNote the use of the auto-incrementing number register in this\nexample.\n\nThe following is an example of a glossary-style list.\n\nA glossary-style list:\n.IP lawyers 0.4i\nTwo or more attorneys.\n.IP guns\nFirearms, preferably\nlarge-caliber.\n.IP money\nGotta pay for those\nlawyers and guns!\n\nProduces:\n\nA glossary-style list:\n\nlawyers\nTwo or more attorneys.\n\nguns  Firearms, preferably large-caliber.\n\nmoney\nGotta pay for those lawyers and guns!\n\nIn the last example, the 'IP' macro places the definition on the same\nline as the term if it has enough space; otherwise, it breaks to the\nnext line and starts the definition below the term.  This may or may not\nbe the effect you want, especially if some of the definitions break and\nsome do not.  The following examples show two possible ways to force a\nbreak.\n\nThe first workaround uses the 'br' request to force a break after\nprinting the term or label.\n\nA glossary-style list:\n.IP lawyers 0.4i\nTwo or more attorneys.\n.IP guns\n.br\nFirearms, preferably large-caliber.\n.IP money\nGotta pay for those lawyers and guns!\n\nThe second workaround uses the '\\p' escape to force the break.  Note\nthe space following the escape; this is important.  If you omit the\nspace, 'groff' prints the first word on the same line as the term or\nlabel (if it fits) *then* breaks the line.\n\nA glossary-style list:\n.IP lawyers 0.4i\nTwo or more attorneys.\n.IP guns\n\\p Firearms, preferably large-caliber.\n.IP money\nGotta pay for those lawyers and guns!\n\nTo set nested lists, use the 'RS' and 'RE' macros.  *Note Indentation\nvalues in ms::, for more information.\n\nFor example:\n\n.IP \\[bu] 2\nLawyers:\n.RS\n.IP \\[bu]\nDewey,\n.IP \\[bu]\nCheatham,\n.IP \\[bu]\nand Howe.\n.RE\n.IP \\[bu]\nGuns\n\nProduces:\n\no Lawyers:\n\no  Dewey,\n\no  Cheatham,\n\no  and Howe.\n\no Guns\n\nFile: groff.info,  Node: Indentation values in ms,  Next: Tabstops in ms,  Prev: Lists in ms,  Up: ms Body Text\n\n4.3.5.5 Indentation values\n..........................\n\nIn many situations, you may need to indentation a section of text while\nstill wrapping and filling.  *Note Lists in ms::, for an example of\nnested lists.\n\n-- Macro: .RS\n-- Macro: .RE\nThese macros begin and end an indented section.  The 'PI' register\ncontrols the amount of indentation, allowing the indented text to\nline up under hanging and indented paragraphs.\n\n*Note ms Displays and Keeps::, for macros to indentation and turn off\nfilling.\n\nFile: groff.info,  Node: Tabstops in ms,  Next: ms Displays and Keeps,  Prev: Indentation values in ms,  Up: ms Body Text\n\n4.3.5.6 Tab Stops\n.................\n\nUse the 'ta' request to define tab stops as needed.  *Note Tabs and\nFields::.\n\n-- Macro: .TA\nUse this macro to reset the tab stops to the default for 'ms'\n(every 5n).  You can redefine the 'TA' macro to create a different\nset of default tab stops.\n\nFile: groff.info,  Node: ms Displays and Keeps,  Next: ms Insertions,  Prev: Tabstops in ms,  Up: ms Body Text\n\n4.3.5.7 Displays and keeps\n..........................\n\nUse displays to show text-based examples or figures (such as code\nlistings).\n\nDisplays turn off filling, so lines of code are displayed as-is\nwithout inserting 'br' requests in between each line.  Displays can be\n\"kept\" on a single page, or allowed to break across pages.\n\n-- Macro: .DS L\n-- Macro: .LD\n-- Macro: .DE\nLeft-justified display.  The '.DS L' call generates a page break,\nif necessary, to keep the entire display on one page.  The 'LD'\nmacro allows the display to break across pages.  The 'DE' macro\nends the display.\n\n-- Macro: .DS I\n-- Macro: .ID\n-- Macro: .DE\nIndents the display as defined by the 'DI' register.  The '.DS I'\ncall generates a page break, if necessary, to keep the entire\ndisplay on one page.  The 'ID' macro allows the display to break\nacross pages.  The 'DE' macro ends the display.\n\n-- Macro: .DS B\n-- Macro: .BD\n-- Macro: .DE\nSets a block-centered display: the entire display is\nleft-justified, but indented so that the longest line in the\ndisplay is centered on the page.  The '.DS B' call generates a page\nbreak, if necessary, to keep the entire display on one page.  The\n'BD' macro allows the display to break across pages.  The 'DE'\nmacro ends the display.\n\n-- Macro: .DS C\n-- Macro: .CD\n-- Macro: .DE\nSets a centered display: each line in the display is centered.  The\n'.DS C' call generates a page break, if necessary, to keep the\nentire display on one page.  The 'CD' macro allows the display to\nbreak across pages.  The 'DE' macro ends the display.\n\n-- Macro: .DS R\n-- Macro: .RD\n-- Macro: .DE\nRight-justifies each line in the display.  The '.DS R' call\ngenerates a page break, if necessary, to keep the entire display on\none page.  The 'RD' macro allows the display to break across pages.\nThe 'DE' macro ends the display.\n\n-- Macro: .Ds\n-- Macro: .De\nThese two macros were formerly provided as aliases for 'DS' and\n'DE', respectively.  They have been removed, and should no longer\nbe used.  The original implementations of 'DS' and 'DE' are\nretained, and should be used instead.  X11 documents that actually\nuse 'Ds' and 'De' always load a specific macro file from the X11\ndistribution ('macros.t') that provides proper definitions for the\ntwo macros.\n\nOn occasion, you may want to \"keep\" other text together on a page.\nFor example, you may want to keep two paragraphs together, or a\nparagraph that refers to a table (or list, or other item) immediately\nfollowing.  The 'ms' macros provide the 'KS' and 'KE' macros for this\npurpose.\n\n-- Macro: .KS\n-- Macro: .KE\nThe 'KS' macro begins a block of text to be kept on a single page,\nand the 'KE' macro ends the block.\n\n-- Macro: .KF\n-- Macro: .KE\nSpecifies a \"floating keep\"; if the keep cannot fit on the current\npage, 'groff' holds the contents of the keep and allows text\nfollowing the keep (in the source file) to fill in the remainder of\nthe current page.  When the page breaks, whether by an explicit\n'bp' request or by reaching the end of the page, 'groff' prints the\nfloating keep at the top of the new page.  This is useful for\nprinting large graphics or tables that do not need to appear\nexactly where specified.\n\nYou can also use the 'ne' request to force a page break if there is\nnot enough vertical space remaining on the page.\n\nUse the following macros to draw a box around a section of text (such\nas a display).\n\n-- Macro: .B1\n-- Macro: .B2\nMarks the beginning and ending of text that is to have a box drawn\naround it.  The 'B1' macro begins the box; the 'B2' macro ends it.\nText in the box is automatically placed in a diversion (keep).\n\nFile: groff.info,  Node: ms Insertions,  Next: Example multi-page table,  Prev: ms Displays and Keeps,  Up: ms Body Text\n\n4.3.5.8 Tables, figures, equations, and references\n..................................................\n\nThe 'ms' macros support the standard 'groff' preprocessors: 'tbl',\n'pic', 'eqn', and 'refer'.  You mark text meant for preprocessors by\nenclosing it in pairs of tags as follows.\n\n-- Macro: .TS [H]\n-- Macro: .TE\nDenotes a table, to be processed by the 'tbl' preprocessor.  The\noptional argument 'H' to 'TS' instructs 'groff' to create a running\nheader with the information up to the 'TH' macro.  'groff' prints\nthe header at the beginning of the table; if the table runs onto\nanother page, 'groff' prints the header on the next page as well.\n\n-- Macro: .PS\n-- Macro: .PE\nDenotes a graphic, to be processed by the 'pic' preprocessor.  You\ncan create a 'pic' file by hand, using the AT&T 'pic' manual\navailable on the Web as a reference, or by using a graphics program\nsuch as 'xfig'.\n\n-- Macro: .EQ [align]\n-- Macro: .EN\nDenotes an equation, to be processed by the 'eqn' preprocessor.\nThe optional ALIGN argument can be 'C', 'L', or 'I' to center (the\ndefault), left-justify, or indent the equation.\n\n-- Macro: .[\n-- Macro: .]\nDenotes a reference, to be processed by the 'refer' preprocessor.\nThe GNU 'refer(1)' man page provides a comprehensive reference to\nthe preprocessor and the format of the bibliographic database.\n\n* Menu:\n\n* Example multi-page table::\n\nFile: groff.info,  Node: Example multi-page table,  Next: ms Footnotes,  Prev: ms Insertions,  Up: ms Body Text\n\n4.3.5.9 An example multi-page table\n...................................\n\nThe following is an example of how to set up a table that may print\nacross two or more pages.\n\n.TS H\nallbox expand;\ncb | cb .\nText      ...of heading...\n\n.TH\n.T&\nl | l .\n... the rest of the table follows...\n.CW\n.TE\n\nFile: groff.info,  Node: ms Footnotes,  Prev: Example multi-page table,  Up: ms Body Text\n\n4.3.5.10 Footnotes\n..................\n\nThe 'ms' macro package has a flexible footnote system.  You can specify\neither numbered footnotes or symbolic footnotes (that is, using a marker\nsuch as a dagger symbol).\n\n-- String: \\*[*]\nSpecifies the location of a numbered footnote marker in the text.\n\n-- Macro: .FS\n-- Macro: .FE\nSpecifies the text of the footnote.  The default action is to\ncreate a numbered footnote; you can create a symbolic footnote by\nspecifying a \"mark\" glyph (such as '\\[dg]' for the dagger glyph) in\nthe body text and as an argument to the 'FS' macro, followed by the\ntext of the footnote and the 'FE' macro.\n\nYou can control how 'groff' prints footnote numbers by changing the\nvalue of the 'FF' register.  *Note ms Document Control Registers::.\n\nFootnotes can be safely used within keeps and displays, but you\nshould avoid using numbered footnotes within floating keeps.  You can\nset a second '\\' marker between a '\\' and its corresponding '.FS'\nentry; as long as each 'FS' macro occurs after the corresponding '\\'\nand the occurrences of '.FS' are in the same order as the corresponding\noccurrences of '\\'.\n\nFile: groff.info,  Node: ms Page Layout,  Next: Differences from AT&T ms,  Prev: ms Body Text,  Up: ms\n\n\nThe default output from the 'ms' macros provides a minimalist page\nlayout: it prints a single column, with the page number centered at the\ntop of each page.  It prints no footers.\n\nYou can change the layout by setting the proper number registers and\nstrings.\n\n* Menu:\n\n* ms Headers and Footers::\n* ms Margins::\n* ms Multiple Columns::\n* ms TOC::\n* ms Strings and Special Characters::\n\nFile: groff.info,  Node: ms Headers and Footers,  Next: ms Margins,  Prev: ms Page Layout,  Up: ms Page Layout\n\n4.3.6.1 Headers and footers\n...........................\n\nFor documents that do not distinguish between odd and even pages, set\nthe following strings:\n\n-- String: \\*[LH]\n-- String: \\*[CH]\n-- String: \\*[RH]\nSets the left, center, and right headers.\n\n-- String: \\*[LF]\n-- String: \\*[CF]\n-- String: \\*[RF]\nSets the left, center, and right footers.\n\nFor documents that need different information printed in the even and\nodd pages, use the following macros:\n\n-- Macro: .OH 'left'center'right'\n-- Macro: .EH 'left'center'right'\n-- Macro: .OF 'left'center'right'\n-- Macro: .EF 'left'center'right'\nThe 'OH' and 'EH' macros define headers for the odd and even pages;\nthe 'OF' and 'EF' macros define footers for the odd and even pages.\nThis is more flexible than defining the individual strings.\n\nYou can replace the quote (''') marks with any character not\nappearing in the header or footer text.\n\nTo specify custom header and footer processing, redefine the\nfollowing macros:\n\n-- Macro: .PT\n-- Macro: .HD\n-- Macro: .BT\nThe 'PT' macro defines a custom header; the 'BT' macro defines a\ncustom footer.  These macros must handle odd/even/first page\ndifferences if necessary.\n\nThe 'HD' macro defines additional header processing to take place\nafter executing the 'PT' macro.\n\nFile: groff.info,  Node: ms Margins,  Next: ms Multiple Columns,  Prev: ms Headers and Footers,  Up: ms Page Layout\n\n4.3.6.2 Margins\n...............\n\nYou control margins using a set of number registers.  *Note ms Document\nControl Registers::, for details.\n\nFile: groff.info,  Node: ms Multiple Columns,  Next: ms TOC,  Prev: ms Margins,  Up: ms Page Layout\n\n4.3.6.3 Multiple columns\n........................\n\nThe 'ms' macros can set text in as many columns as do reasonably fit on\nthe page.  The following macros are available; all of them force a page\nbreak if a multi-column mode is already set.  However, if the current\nmode is single-column, starting a multi-column mode does not force a\npage break.\n\n-- Macro: .1C\nSingle-column mode.\n\n-- Macro: .2C\nTwo-column mode.\n\n-- Macro: .MC [width [gutter]]\nMulti-column mode.  If you specify no arguments, it is equivalent\nto the '2C' macro.  Otherwise, WIDTH is the width of each column\nand GUTTER is the space between columns.  The 'MINGW' number\nregister controls the default gutter width.\n\nFile: groff.info,  Node: ms TOC,  Next: ms Strings and Special Characters,  Prev: ms Multiple Columns,  Up: ms Page Layout\n\n4.3.6.4 Creating a table of contents\n....................................\n\nThe facilities in the 'ms' macro package for creating a table of\ncontents are semi-automated at best.  Assuming that you want the table\nof contents to consist of the document's headings, you need to repeat\nthose headings wrapped in 'XS' and 'XE' macros.\n\n-- Macro: .XS [page]\n-- Macro: .XA [page]\n-- Macro: .XE\nThese macros define a table of contents or an individual entry in\nthe table of contents, depending on their use.  The macros are very\nsimple; they cannot indent a heading based on its level.  The\neasiest way to work around this is to add tabs to the table of\ncontents string.  The following is an example:\n\n.NH 1\nIntroduction\n.XS\nIntroduction\n.XE\n.LP\n...\n.CW\n.NH 2\nMethodology\n.XS\nMethodology\n.XE\n.LP\n...\n\nYou can manually create a table of contents by beginning with the\n'XS' macro for the first entry, specifying the page number for that\nentry as the argument to 'XS'.  Add subsequent entries using the\n'XA' macro, specifying the page number for that entry as the\nargument to 'XA'.  The following is an example:\n\n.XS 1\nIntroduction\n.XA 2\nA Brief History of the Universe\n.XA 729\nDetails of Galactic Formation\n...\n.XE\n\n-- Macro: .TC [no]\nPrints the table of contents on a new page, setting the page number\nto *i* (Roman lowercase numeral one).  You should usually place\nthis macro at the end of the file, since 'groff' is a single-pass\nformatter and can only print what has been collected up to the\npoint that the 'TC' macro appears.\n\nThe optional argument 'no' suppresses printing the title specified\nby the string register 'TOC'.\n\n-- Macro: .PX [no]\nPrints the table of contents on a new page, using the current page\nnumbering sequence.  Use this macro to print a manually generated\ntable of contents at the beginning of your document.\n\nThe optional argument 'no' suppresses printing the title specified\nby the string register 'TOC'.\n\nThe 'Groff and Friends HOWTO' includes a 'sed' script that\nautomatically inserts 'XS' and 'XE' macro entries after each heading in\na document.\n\nAltering the 'NH' macro to automatically build the table of contents\nis perhaps initially more difficult, but would save a great deal of time\nin the long run if you use 'ms' regularly.\n\nFile: groff.info,  Node: ms Strings and Special Characters,  Prev: ms TOC,  Up: ms Page Layout\n\n4.3.6.5 Strings and Special Characters\n......................................\n\nThe 'ms' macros provide the following predefined strings.  You can\nchange the string definitions to help in creating documents in languages\nother than English.\n\n-- String: \\*[REFERENCES]\nContains the string printed at the beginning of the references\n(bibliography) page.  The default is 'References'.\n\n-- String: \\*[ABSTRACT]\nContains the string printed at the beginning of the abstract.  The\ndefault is 'ABSTRACT'.\n\n-- String: \\*[TOC]\nContains the string printed at the beginning of the table of\ncontents.\n\n-- String: \\*[MONTH1]\n-- String: \\*[MONTH2]\n-- String: \\*[MONTH3]\n-- String: \\*[MONTH4]\n-- String: \\*[MONTH5]\n-- String: \\*[MONTH6]\n-- String: \\*[MONTH7]\n-- String: \\*[MONTH8]\n-- String: \\*[MONTH9]\n-- String: \\*[MONTH10]\n-- String: \\*[MONTH11]\n-- String: \\*[MONTH12]\nPrints the full name of the month in dates.  The default is\n'January', 'February', etc.\n\nThe following special characters are available(1) (*note ms Strings\nand Special Characters-Footnote-1::):\n\n-- String: \\*[-]\nPrints an em dash.\n\n-- String: \\*[Q]\n-- String: \\*[U]\nPrints typographer's quotes in troff, and plain quotes in nroff.\n'\\*Q' is the left quote and '\\*U' is the right quote.\n\nImproved accent marks are available in the 'ms' macros.\n\n-- Macro: .AM\nSpecify this macro at the beginning of your document to enable\nextended accent marks and special characters.  This is a Berkeley\nextension.\n\nTo use the accent marks, place them *after* the character being\naccented.\n\nNote that groff's native support for accents is superior to the\nfollowing definitions.\n\nThe following accent marks are available after invoking the 'AM'\nmacro:\n\n-- String: \\*[']\nAcute accent.\n\n-- String: \\*[`]\nGrave accent.\n\n-- String: \\*[^]\nCircumflex.\n\n-- String: \\*[,]\nCedilla.\n\n-- String: \\*[~]\nTilde.\n\n-- String: \\*[:]\nUmlaut.\n\n-- String: \\*[v]\nHacek.\n\n-- String: \\*[]\nMacron (overbar).\n\n-- String: \\*[.]\nUnderdot.\n\n-- String: \\*[o]\nRing above.\n\nThe following are standalone characters available after invoking the\n'AM' macro:\n\n-- String: \\*[?]\nUpside-down question mark.\n\n-- String: \\*[!]\nUpside-down exclamation point.\n\n-- String: \\*[8]\nGerman ss ligature.\n\n-- String: \\*[3]\nYogh.\n\n-- String: \\*[Th]\nUppercase thorn.\n\n-- String: \\*[th]\nLowercase thorn.\n\n-- String: \\*[D-]\nUppercase eth.\n\n-- String: \\*[d-]\nLowercase eth.\n\n-- String: \\*[q]\nHooked o.\n\n-- String: \\*[ae]\nLowercase ae ligature.\n\n-- String: \\*[Ae]\nUppercase ? ligature.\n\nFile: groff.info,  Node: Differences from AT&T ms,  Next: Naming Conventions,  Prev: ms Page Layout,  Up: ms\n\n\nThis section lists the (minor) differences between the 'groff -ms'\nmacros and AT&T 'troff -ms' macros.\n\n* The internals of 'groff -ms' differ from the internals of AT&T\n'troff -ms'.  Documents that depend upon implementation details of\nAT&T 'troff -ms' may not format properly with 'groff -ms'.\n\n* The general error-handling policy of 'groff -ms' is to detect and\nreport errors, rather than silently to ignore them.\n\n* 'groff -ms' does not work in compatibility mode (that is, with the\n'-C' option).\n\n* There is no special support for typewriter-like devices.\n\n* 'groff -ms' does not provide cut marks.\n\n* Multiple line spacing is not supported.  Use a larger vertical\nspacing instead.\n\n* Some Unix 'ms' documentation says that the 'CW' and 'GW' number\nregisters can be used to control the column width and gutter width,\nrespectively.  These number registers are not used in 'groff -ms'.\n\n* Macros that cause a reset (paragraphs, headings, etc.) may change\nthe indentation.  Macros that change the indentation do not\nincrement or decrement the indentation, but rather set it\nabsolutely.  This can cause problems for documents that define\nadditional macros of their own.  The solution is to use not the\n'in' request but instead the 'RS' and 'RE' macros.\n\n* To make 'groff -ms' use the default page offset (which also\nspecifies the left margin), the 'PO' register must stay undefined\nuntil the first '-ms' macro is evaluated.  This implies that 'PO'\nshould not be used early in the document, unless it is changed\nalso: Remember that accessing an undefined register automatically\ndefines it.\n\n-- Register: \\n[GS]\nThis number register is set to 1 by the 'groff -ms' macros, but it\nis not used by the 'AT&T' 'troff -ms' macros.  Documents that need\nto determine whether they are being formatted with 'AT&T' 'troff\n-ms' or 'groff -ms' should use this number register.\n\nEmulations of a few ancient Bell Labs macros can be re-enabled by\ncalling the otherwise undocumented 'SC' section-header macro.  Calling\n'SC' enables 'UC' for marking up a product or application name, and the\npair 'P1'/'P2' for surrounding code example displays.\n\nThese are not enabled by default because (a) they were not\ndocumented, in the original 'ms' manual, and (b) the 'P1' and 'UC'\nmacros collide with different macros with the same names in the Berkeley\nversion of 'ms'.\n\nThese 'groff' emulations are sufficient to give back the 1976\nKernighan & Cherry paper 'Typesetting Mathematics - User's Guide' its\nsection headings, and restore some text that had gone missing as\narguments of undefined macros.  No warranty express or implied is given\nas to how well the typographic details these produce match the original\nBell Labs macros.\n\n* Menu:\n\n* Missing ms Macros::\n* Additional ms Macros::\n\nFile: groff.info,  Node: Missing ms Macros,  Next: Additional ms Macros,  Prev: Differences from AT&T ms,  Up: Differences from AT&T ms\n\n4.3.7.1 'troff' macros not appearing in 'groff'\n...............................................\n\nMacros missing from 'groff -ms' are cover page macros specific to Bell\nLabs and Berkeley.  The macros known to be missing are:\n\n'.TM'\nTechnical memorandum; a cover sheet style\n\n'.IM'\nInternal memorandum; a cover sheet style\n\n'.MR'\nMemo for record; a cover sheet style\n\n'.MF'\nMemo for file; a cover sheet style\n\n'.EG'\nEngineer's notes; a cover sheet style\n\n'.TR'\nComputing Science Tech Report; a cover sheet style\n\n'.OK'\nOther keywords\n\n'.CS'\nCover sheet information\n\n'.MH'\nA cover sheet macro\n\nFile: groff.info,  Node: Additional ms Macros,  Prev: Missing ms Macros,  Up: Differences from AT&T ms\n\n4.3.7.2 'groff' macros not appearing in AT&T 'troff'\n....................................................\n\nThe 'groff -ms' macros have a few minor extensions compared to the AT&T\n'troff -ms' macros.\n\n-- Macro: .AM\nImproved accent marks.  *Note ms Strings and Special Characters::,\nfor details.\n\n-- Macro: .DS I\nIndented display.  The default behavior of AT&T 'troff -ms' was to\nindent; the 'groff' default prints displays flush left with the\nbody text.\n\n-- Macro: .CW\nPrint text in 'constant width' (Courier) font.\n\n-- Macro: .IX\nIndexing term (printed on standard error).  You can write a script\nto capture and process an index generated in this manner.\n\nThe following additional number registers appear in 'groff -ms':\n\n-- Register: \\n[MINGW]\nSpecifies a minimum space between columns (for multi-column\noutput); this takes the place of the 'GW' register that was\ndocumented but apparently not implemented in AT&T 'troff'.\n\nSeveral new string registers are available as well.  You can change\nthese to handle (for example) the local language.  *Note ms Strings and\nSpecial Characters::, for details.\n\nFile: groff.info,  Node: Naming Conventions,  Prev: Differences from AT&T ms,  Up: ms\n\n\nThe following conventions are used for names of macros, strings and\nnumber registers.  External names available to documents that use the\n'groff -ms' macros contain only uppercase letters and digits.\n\nInternally the macros are divided into modules; naming conventions\nare as follows:\n\n* Names used only within one module are of the form MODULE'*'NAME.\n\n* Names used outside the module in which they are defined are of the\nform MODULE'@'NAME.\n\n* Names associated with a particular environment are of the form\nENVIRONMENT':'NAME; these are used only within the 'par' module.\n\n* NAME does not have a module prefix.\n\n* Constructed names used to implement arrays are of the form\nARRAY'!'INDEX.\n\nThus the groff ms macros reserve the following names:\n\n* Names containing the characters '*', '@', and ':'.\n\n* Names containing only uppercase letters and digits.\n\nFile: groff.info,  Node: me,  Next: mm,  Prev: ms,  Up: Macro Packages\n"
                },
                {
                    "name": "4.4 'me'",
                    "content": "See the 'meintro.me' and 'meref.me' documents in groff's 'doc'\ndirectory.\n\nFile: groff.info,  Node: mm,  Next: mom,  Prev: me,  Up: Macro Packages\n"
                },
                {
                    "name": "4.5 'mm'",
                    "content": "See the 'groffmm(7)' man page (type 'man groffmm' at the command\nline).\n\nFile: groff.info,  Node: mom,  Prev: mm,  Up: Macro Packages\n"
                },
                {
                    "name": "4.6 'mom'",
                    "content": "The main documentation files for the 'mom' macros are in HTML format.\nAdditional, useful documentation is in PDF format.  See the 'groff(1)'\nman page, section \"Installation Directories\", for their location.\n\n* 'toc.html' Entry point to the full mom manual.\n\n* 'macrolist.html' Hyperlinked index of macros with brief\ndescriptions, arranged by category.\n\n* 'mom-pdf.pdf' PDF features and usage.\n\nThe mom macros are in active development between groff releases.  The\nmost recent version, along with up-to-date documentation, is available\nat <http://www.schaffter.ca/mom/mom-05.html>.\n\nThe 'groffmom(7)' man page (type 'man groffmom' at the command\nline) contains a partial list of available macros, however their usage\nis best understood by consulting the HTML documentation.\n\nFile: groff.info,  Node: gtroff Reference,  Next: Preprocessors,  Prev: Macro Packages,  Up: Top\n"
                }
            ]
        },
        "5 'gtroff' Reference": {
            "content": "This chapter covers *all* of the facilities of 'gtroff'.  Users of macro\npackages may skip it if not interested in details.\n\n* Menu:\n\n* Text::\n* Measurements::\n* Expressions::\n* Identifiers::\n* Embedded Commands::\n* Registers::\n* Manipulating Filling and Adjusting::\n* Manipulating Hyphenation::\n* Manipulating Spacing::\n* Tabs and Fields::\n* Character Translations::\n* Troff and Nroff Mode::\n* Line Layout::\n* Line Control::\n* Page Layout::\n* Page Control::\n* Fonts and Symbols::\n* Sizes::\n* Strings::\n* Conditionals and Loops::\n* Writing Macros::\n* Page Motions::\n* Drawing Requests::\n* Traps::\n* Diversions::\n* Environments::\n* Suppressing output::\n* Colors::\n* I/O::\n* Postprocessor Access::\n* Miscellaneous::\n* Gtroff Internals::\n* Debugging::\n* Implementation Differences::\n\nFile: groff.info,  Node: Text,  Next: Measurements,  Prev: gtroff Reference,  Up: gtroff Reference\n",
            "subsections": [
                {
                    "name": "5.1 Text",
                    "content": "'gtroff' input files contain text with control commands interspersed\nthroughout.  But, even without control codes, 'gtroff' still does\nseveral things with the input text:\n\n* filling and adjusting\n\n* adding additional space after sentences\n\n* hyphenating\n\n* inserting implicit line breaks\n\n* Menu:\n\n* Filling and Adjusting::\n* Hyphenation::\n* Sentences::\n* Tab Stops::\n* Implicit Line Breaks::\n* Input Conventions::\n* Input Encodings::\n\nFile: groff.info,  Node: Filling and Adjusting,  Next: Hyphenation,  Prev: Text,  Up: Text\n\n\nWhen 'gtroff' reads text, it collects words from the input and fits as\nmany of them together on one output line as it can.  This is known as\n\"filling\".\n\nOnce 'gtroff' has a \"filled\" line, it tries to \"adjust\" it.  This\nmeans it widens the spacing between words until the text reaches the\nright margin (in the default adjustment mode).  Extra spaces between\nwords are preserved, but spaces at the end of lines are ignored.  Spaces\nat the front of a line cause a \"break\" (breaks are explained in *note\nImplicit Line Breaks::).\n\n*Note Manipulating Filling and Adjusting::.\n\nFile: groff.info,  Node: Hyphenation,  Next: Sentences,  Prev: Filling and Adjusting,  Up: Text\n\n\nSince the odds are not great for finding a set of words, for every\noutput line, which fit nicely on a line without inserting excessive\namounts of space between words, 'gtroff' hyphenates words so that it can\njustify lines without inserting too much space between words.  It uses\nan internal hyphenation algorithm (a simplified version of the algorithm\nused within TeX) to indicate which words can be hyphenated and how to do\nso.  When a word is hyphenated, the first part of the word is added to\nthe current filled line being output (with an attached hyphen), and the\nother portion is added to the next line to be filled.\n\n*Note Manipulating Hyphenation::.\n\nFile: groff.info,  Node: Sentences,  Next: Tab Stops,  Prev: Hyphenation,  Up: Text\n\n\nAlthough it is often debated, some typesetting rules say there should be\ndifferent amounts of space after various punctuation marks.  For\nexample, the 'Chicago typesetting manual' says that a period at the end\nof a sentence should have twice as much space following it as would a\ncomma or a period as part of an abbreviation.\n\n'gtroff' does this by flagging certain characters (normally '!', '?',\nand '.') as \"end-of-sentence\" characters.  When 'gtroff' encounters one\nof these characters at the end of a line, it appends a normal space\nfollowed by a \"sentence space\" in the formatted output.  (This justifies\none of the conventions mentioned in *note Input Conventions::.)\n\nIn addition, the following characters and symbols are treated\ntransparently while handling end-of-sentence characters: '\"', ''', ')',\n']', '*', '\\[dg]', '\\[rq]', and '\\[cq]'.\n\nSee the 'cflags' request in *note Using Symbols::, for more details.\n\nTo prevent the insertion of extra space after an end-of-sentence\ncharacter (at the end of a line), append '\\&'.\n\nFile: groff.info,  Node: Tab Stops,  Next: Implicit Line Breaks,  Prev: Sentences,  Up: Text\n\n\n'gtroff' translates \"tabulator characters\", also called \"tabs\" (normally\ncode point ASCII '0x09' or EBCDIC '0x05'), in the input into movements\nto the next tabulator stop.  These tab stops are initially located every\nhalf inch across the page.  Using this, simple tables can be made\neasily.  However, it can often be deceptive as the appearance (and\nwidth) of the text on a terminal and the results from 'gtroff' can vary\ngreatly.\n\nAlso, a possible sticking point is that lines beginning with tab\ncharacters are still filled, again producing unexpected results.  For\nexample, the following input\n\n1          2          3\n4          5\n\nproduces\n\n1          2          3                     4          5\n\n*Note Tabs and Fields::.\n\nFile: groff.info,  Node: Implicit Line Breaks,  Next: Input Conventions,  Prev: Tab Stops,  Up: Text\n\n\nAn important concept in 'gtroff' is the \"break\".  When a break occurs,\n'gtroff' outputs the partially filled line (unjustified), and resumes\ncollecting and filling text on the next output line.\n\nThere are several ways to cause a break in 'gtroff'.  A blank line\nnot only causes a break, but it also outputs a one-line vertical space\n(effectively a blank line).  Note that this behaviour can be modified\nwith the blank line macro request 'blm'.  *Note Blank Line Traps::.\n\nA line that begins with a space causes a break and the space is\noutput at the beginning of the next line.  Note that this space isn't\nadjusted, even in fill mode; however, the behaviour can be modified with\nthe leading spaces macro request 'lsm'.  *Note Leading Spaces Traps::.\n\nThe end of file also causes a break - otherwise the last line of the\ndocument may vanish!\n\nCertain requests also cause breaks, implicitly or explicitly.  This\nis discussed in *note Manipulating Filling and Adjusting::.\n\nFile: groff.info,  Node: Input Conventions,  Next: Input Encodings,  Prev: Implicit Line Breaks,  Up: Text\n\n\nSince 'gtroff' does filling automatically, it is traditional in 'groff'\nnot to try and type things in as nicely formatted paragraphs.  These are\nsome conventions commonly used when typing 'gtroff' text:\n\n* Break lines after punctuation, particularly at the end of a\nsentence and in other logical places.  Keep separate phrases on\nlines by themselves, as entire phrases are often added or deleted\nwhen editing.\n\n* Try to keep lines less than 40-60 characters, to allow space for\ninserting more text.\n\n* Do not try to do any formatting in a WYSIWYG manner (i.e., don't\ntry using spaces to get proper indentation).\n\nFile: groff.info,  Node: Input Encodings,  Prev: Input Conventions,  Up: Text\n\n\nCurrently, the following input encodings are available.\n\ncp1047\nThis input encoding works only on EBCDIC platforms (and vice versa,\nthe other input encodings don't work with EBCDIC); the file\n'cp1047.tmac' is by default loaded at start-up.\n\nlatin-1\nThis is the default input encoding on non-EBCDIC platforms; the\nfile 'latin1.tmac' is loaded at start-up.\n\nlatin-2\nTo use this encoding, either say '.mso latin2.tmac' at the very\nbeginning of your document or use '-mlatin2' as a command-line\nargument for 'groff'.\n\nlatin-5\nFor Turkish.  Either say '.mso latin5.tmac' at the very beginning\nof your document or use '-mlatin5' as a command-line argument for\n'groff'.\n\nlatin-9 (latin-0)\nThis encoding is intended (at least in Europe) to replace latin-1\nencoding.  The main difference to latin-1 is that latin-9 contains\nthe Euro character.  To use this encoding, either say\n'.mso latin9.tmac' at the very beginning of your document or use\n'-mlatin9' as a command-line argument for 'groff'.\n\nNote that it can happen that some input encoding characters are not\navailable for a particular output device.  For example, saying\n\ngroff -Tlatin1 -mlatin9 ...\n\nfails if you use the Euro character in the input.  Usually, this\nlimitation is present only for devices that have a limited set of output\nglyphs (e.g. '-Tascii' and '-Tlatin1'); for other devices it is usually\nsufficient to install proper fonts that contain the necessary glyphs.\n\nDue to the importance of the Euro glyph in Europe, the groff package\nnow comes with a POSTSCRIPT font called 'freeeuro.pfa', which provides\nvarious glyph shapes for the Euro.  In other words, latin-9 encoding is\nsupported for the '-Tps' device out of the box (latin-2 isn't).\n\nBy its very nature, '-Tutf8' supports all input encodings; '-Tdvi'\nhas support for both latin-2 and latin-9 if the command-line '-mec' is\nused also to load the file 'ec.tmac' (which flips to the EC fonts).\n\nFile: groff.info,  Node: Measurements,  Next: Expressions,  Prev: Text,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.2 Measurements",
                    "content": "'gtroff' (like many other programs) requires numeric parameters to\nspecify various measurements.  Most numeric parameters(1) (*note\nMeasurements-Footnote-1::) may have a \"measurement unit\" attached.\nThese units are specified as a single character that immediately follows\nthe number or expression.  Each of these units are understood, by\n'gtroff', to be a multiple of its \"basic unit\".  So, whenever a\ndifferent measurement unit is specified 'gtroff' converts this into its\n\"basic units\".  This basic unit, represented by a 'u', is a device\ndependent measurement, which is quite small, ranging from 1/75th to\n1/72000th of an inch.  The values may be given as fractional numbers;\nhowever, fractional basic units are always rounded to integers.\n\nSome of the measurement units are completely independent of any of\nthe current settings (e.g. type size) of 'gtroff'.\n\nAlthough groff's basic unit is device-dependent, it may still be\nsmaller than the smallest unit the device is capable of producing.  The\nregister '.H' specifies how many groff basic units constitute the\ncurrent device's basic unit horizontally, and the register '.V'\nspecifies this value vertically.\n\n'i'\nInches.  An antiquated measurement unit still in use in certain\nbackwards countries with incredibly low-cost computer equipment.\nOne inch is defined to be 2.54 cm (worldwide since 1964).\n\n'c'\nCentimeters.  One centimeter is about 0.3937 in.\n\n'p'\nPoints.  This is a typesetter's measurement used for measure type\nsize.  It is 72 points to an inch.\n\n'P'\nPica.  Another typesetting measurement.  6 picas to an inch (and\n12 points to a pica).\n\n's'\n'z'\n*Note Fractional Type Sizes::, for a discussion of these units.\n\n'f'\nFractions.  Value is 65536.  *Note Colors::, for usage.\n\nThe other measurements understood by 'gtroff' depend on settings\ncurrently in effect in 'gtroff'.  These are very useful for specifying\nmeasurements that should look proper with any size of text.\n\n'm'\nEms.  This unit is equal to the current font size in points.  So\ncalled because it is approximately the width of the letter 'm' in\nthe current font.\n\n'n'\nEns.  In 'groff', this is half of an em.\n\n'v'\nVertical space.  This is equivalent to the current line spacing.\n*Note Sizes::, for more information about this.\n\n'M'\n100ths of an em.\n\n* Menu:\n\n* Default Units::\n\nFile: groff.info,  Node: Default Units,  Prev: Measurements,  Up: Measurements\n\n\nMany requests take a default unit.  While this can be helpful at times,\nit can cause strange errors in some expressions.  For example, the line\nlength request expects em units.  Here are several attempts to get a\nline length of 3.5 inches and their results:\n\n3.5i      =>   3.5i\n7/2       =>   0i\n7/2i      =>   0i\n(7 / 2)u  =>   0i\n7i/2      =>   0.1i\n7i/2u     =>   3.5i\n\nEverything is converted to basic units first.  In the above example it\nis assumed that 1i equals 240u, and 1m equals 10p (thus 1m equals 33u).\nThe value 7i/2 is first handled as 7i/2m, then converted to 1680u/66u,\nwhich is 25u, and this is approximately 0.1i.  As can be seen, a scaling\nindicator after a closing parenthesis is simply ignored.\n\nThus, the safest way to specify measurements is to always attach a\nscaling indicator.  If you want to multiply or divide by a certain\nscalar value, use 'u' as the unit for that value.\n\nFile: groff.info,  Node: Expressions,  Next: Identifiers,  Prev: Measurements,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.3 Expressions",
                    "content": "'gtroff' has most arithmetic operators common to other languages:\n\n* Arithmetic: '+' (addition), '-' (subtraction), '/' (division), '*'\n(multiplication), '%' (modulo).\n\n'gtroff' only provides integer arithmetic.  The internal type used\nfor computing results is 'int', which is usually a 32-bit signed\ninteger.\n\n* Comparison: '<' (less than), '>' (greater than), '<=' (less than or\nequal), '>=' (greater than or equal), '=' (equal), '==' (the same\nas '=').\n\n* Logical: '&' (logical and), ':' (logical or).\n\n* Unary operators: '-' (negating, i.e. changing the sign), '+' (just\nfor completeness; does nothing in expressions), '!' (logical not;\nthis works only within 'if' and 'while' requests).(1)  (*note\nExpressions-Footnote-1::) See below for the use of unary operators\nin motion requests.\n\nThe logical not operator, as described above, works only within\n'if' and 'while' requests.  Furthermore, it may appear only at the\nbeginning of an expression, and negates the entire expression.\nAttempting to insert the '!' operator within the expression results\nin a 'numeric expression expected' warning.  This maintains\ncompatibility with old versions of 'troff'.\n\nExample:\n\n.nr X 1\n.nr Y 0\n.\\\" This does not work as expected\n.if (\\n[X])&(!\\n[Y]) .nop X only\n.\n.\\\" Use this construct instead\n.if (\\n[X]=1)&(\\n[Y]=0) .nop X only\n\n* Extrema: '>?' (maximum), '<?' (minimum).\n\nExample:\n\n.nr x 5\n.nr y 3\n.nr z (\\n[x] >? \\n[y])\n\nThe register 'z' now contains 5.\n\n* Scaling: '(C;E)'.  Evaluate E using C as the default scaling\nindicator.  If C is missing, ignore scaling indicators in the\nevaluation of E.\n\nParentheses may be used as in any other language.  However, in\n'gtroff' they are necessary to ensure order of evaluation.  'gtroff' has\nno operator precedence; expressions are evaluated left to right.  This\nmeans that 'gtroff' evaluates '3+5*4' as if it were parenthesized like\n'(3+5)*4', not as '3+(5*4)', as might be expected.\n\nFor many requests that cause a motion on the page, the unary\noperators '+' and '-' work differently if leading an expression.  They\nthen indicate a motion relative to the current position (down or up,\nrespectively).\n\nSimilarly, a leading '|' operator indicates an absolute position.\nFor vertical movements, it specifies the distance from the top of the\npage; for horizontal movements, it gives the distance from the beginning\nof the input line.\n\n'+' and '-' are also treated differently by the following requests\nand escapes: 'bp', 'in', 'll', 'lt', 'nm', 'nr', 'pl', 'pn', 'po', 'ps',\n'pvs', 'rt', 'ti', '\\H', '\\R', and '\\s'.  Here, leading plus and minus\nsigns indicate increments and decrements.\n\n*Note Setting Registers::, for some examples.\n\n-- Escape: \\B'anything'\nReturn 1 if ANYTHING is a valid numeric expression; or 0 if\nANYTHING is empty or not a valid numeric expression.\n\nDue to the way arguments are parsed, spaces are not allowed in\nexpressions, unless the entire expression is surrounded by parentheses.\n\n*Note Request and Macro Arguments::, and *note Conditionals and\nLoops::.\n\nFile: groff.info,  Node: Identifiers,  Next: Embedded Commands,  Prev: Expressions,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.4 Identifiers",
                    "content": "Like any other language, 'gtroff' has rules for properly formed\n\"identifiers\".  In 'gtroff', an identifier can be made up of almost any\nprintable character, with the exception of the following characters:\n\n* Whitespace characters (spaces, tabs, and newlines).\n\n* Backspace (ASCII '0x08' or EBCDIC '0x16') and character code\n'0x01'.\n\n* The following input characters are invalid and are ignored if\n'groff' runs on a machine based on ASCII, causing a warning message\nof type 'input' (see *note Debugging::, for more details): '0x00',\n'0x0B', '0x0D'-'0x1F', '0x80'-'0x9F'.\n\nAnd here are the invalid input characters if 'groff' runs on an\nEBCDIC host: '0x00', '0x08', '0x09', '0x0B', '0x0D'-'0x14',\n'0x17'-'0x1F', '0x30'-'0x3F'.\n\nCurrently, some of these reserved codepoints are used internally,\nthus making it non-trivial to extend 'gtroff' to cover Unicode or\nother character sets and encodings that use characters of these\nranges.\n\nNote that invalid characters are removed before parsing; an\nidentifier 'foo', followed by an invalid character, followed by\n'bar' is treated as 'foobar'.\n\nFor example, any of the following is valid.\n\nbr\nPP\n(l\nend-list\n@\n\nNote that identifiers longer than two characters with a closing bracket\n(']') in its name can't be accessed with escape sequences that expect an\nidentifier as a parameter.  For example, '\\[foo]]' accesses the glyph\n'foo', followed by ']', whereas '\\C'foo]'' really asks for glyph 'foo]'.\n\nTo avoid problems with the 'refer' preprocessor, macro names should\nnot start with '[' or ']'.  Due to backwards compatibility, everything\nafter '.[' and '.]' is handled as a special argument to 'refer'.  For\nexample, '.[foo' makes 'refer' to start a reference, using 'foo' as a\nparameter.\n\n-- Escape: \\A'ident'\nTest whether an identifier IDENT is valid in 'gtroff'.  It expands\nto the character 1 or 0 according to whether its argument (usually\ndelimited by quotes) is or is not acceptable as the name of a\nstring, macro, diversion, number register, environment, or font.\nIt returns 0 if no argument is given.  This is useful for looking\nup user input in some sort of associative table.\n\n\\A'end-list'\n=> 1\n\n*Note Escapes::, for details on parameter delimiting characters.\n\nIdentifiers in 'gtroff' can be any length, but, in some contexts,\n'gtroff' needs to be told where identifiers end and text begins (and in\ndifferent ways depending on their length):\n\n* Single character.\n\n* Two characters.  Must be prefixed with '(' in some situations.\n\n* Arbitrary length ('gtroff' only).  Must be bracketed with '['\nand ']' in some situations.  Any length identifier can be put in\nbrackets.\n\nUnlike many other programming languages, undefined identifiers are\nsilently ignored or expanded to nothing.  When 'gtroff' finds an\nundefined identifier, it emits a warning, doing the following:\n\n* If the identifier is a string, macro, or diversion, 'gtroff'\ndefines it as empty.\n\n* If the identifier is a number register, 'gtroff' defines it with a\nvalue of 0.\n\n*Note Warnings::., *note Interpolating Registers::, and *note\nStrings::.\n\nNote that macros, strings, and diversions share the same name space.\n\n.de xxx\n.  nop foo\n..\n.\n.di xxx\nbar\n.br\n.di\n.\n.xxx\n=> bar\n\nAs can be seen in the previous example, 'gtroff' reuses the identifier\n'xxx', changing it from a macro to a diversion.  No warning is emitted!\nThe contents of the first macro definition is lost.\n\n*Note Interpolating Registers::, and *note Strings::.\n\nFile: groff.info,  Node: Embedded Commands,  Next: Registers,  Prev: Identifiers,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.5 Embedded Commands",
                    "content": "Most documents need more functionality beyond filling, adjusting and\nimplicit line breaking.  In order to gain further functionality,\n'gtroff' allows commands to be embedded into the text, in two ways.\n\nThe first is a \"request\" that takes up an entire line, and does some\nlarge-scale operation (e.g. break lines, start new pages).\n\nThe other is an \"escape\" that can be usually embedded anywhere in the\ntext; most requests can accept it even as an argument.  Escapes\ngenerally do more minor operations like sub- and superscripts, print a\nsymbol, etc.\n\n* Menu:\n\n* Requests::\n* Macros::\n* Escapes::\n\nFile: groff.info,  Node: Requests,  Next: Macros,  Prev: Embedded Commands,  Up: Embedded Commands\n\n\nA request line begins with a control character, which is either a single\nquote (''', the \"no-break control character\") or a period ('.', the\nnormal \"control character\").  These can be changed; see *note Character\nTranslations::, for details.  After this there may be optional tabs or\nspaces followed by an identifier, which is the name of the request.\nThis may be followed by any number of space-separated arguments (no\ntabs here).\n\nSince a control character followed by whitespace only is ignored, it\nis common practice to use this feature for structuring the source code\nof documents or macro packages.\n\n.de foo\n.  tm This is foo.\n..\n.\n.\n.de bar\n.  tm This is bar.\n..\n\nAnother possibility is to use the blank line macro request 'blm' by\nassigning an empty macro to it.\n\n.de do-nothing\n..\n.blm do-nothing  \\\" activate blank line macro\n\n.de foo\n.  tm This is foo.\n..\n\n\n.de bar\n.  tm This is bar.\n..\n\n.blm             \\\" deactivate blank line macro\n\n*Note Blank Line Traps::.\n\nTo begin a line with a control character without it being\ninterpreted, precede it with '\\&'.  This represents a zero width space,\nwhich means it does not affect the output.\n\nIn most cases the period is used as a control character.  Several\nrequests cause a break implicitly; using the single quote control\ncharacter prevents this.\n\n-- Register: \\n[.br]\nA read-only number register, which is set to 1 if a macro is called\nwith the normal control character (as defined with the 'cc'\nrequest), and set to 0 otherwise.\n\nThis allows reliable modification of requests.\n\n.als bp*orig bp\n.de bp\n.  tm before bp\n.  ie \\\\n[.br] .bp*orig\n.  el 'bp*orig\n.  tm after bp\n..\n\nUsing this register outside of a macro makes no sense (it always\nreturns zero in such cases).\n\nIf a macro is called as a string (that is, using '\\*'), the value\nof the '.br' register is inherited from the caller.\n\n* Menu:\n\n* Request and Macro Arguments::\n\nFile: groff.info,  Node: Request and Macro Arguments,  Prev: Requests,  Up: Requests\n\n5.5.1.1 Request and Macro Arguments\n...................................\n\nArguments to requests and macros are processed much like the shell: The\nline is split into arguments according to spaces.(1)  (*note Request and\nMacro Arguments-Footnote-1::)\n\nAn argument to a macro that is intended to contain spaces can either\nbe enclosed in double quotes, or have the spaces \"escaped\" with\nbackslashes.  This is not true for requests.\n\nHere are a few examples for a hypothetical macro 'uh':\n\n.uh The Mouse Problem\n.uh \"The Mouse Problem\"\n.uh The\\ Mouse\\ Problem\n\nThe first line is the 'uh' macro being called with 3 arguments, 'The',\n'Mouse', and 'Problem'.  The latter two have the same effect of calling\nthe 'uh' macro with one argument, 'The Mouse Problem'.(2)  (*note\nRequest and Macro Arguments-Footnote-2::)\n\nA double quote that isn't preceded by a space doesn't start a macro\nargument.  If not closing a string, it is printed literally.\n\nFor example,\n\n.xxx a\" \"b c\" \"de\"fg\"\n\nhas the arguments 'a\"', 'b c', 'de', and 'fg\"'.  Don't rely on this\nobscure behaviour!\n\nThere are two possibilities to get a double quote reliably.\n\n* Enclose the whole argument with double quotes and use two\nconsecutive double quotes to represent a single one.  This\ntraditional solution has the disadvantage that double quotes don't\nsurvive argument expansion again if called in compatibility mode\n(using the '-C' option of 'groff'):\n\n.de xx\n.  tm xx: `\\\\$1' `\\\\$2' `\\\\$3'\n.\n.  yy \"\\\\$1\" \"\\\\$2\" \"\\\\$3\"\n..\n.de yy\n.  tm yy: `\\\\$1' `\\\\$2' `\\\\$3'\n..\n.xx A \"test with \"\"quotes\"\"\" .\n=> xx: `A' `test with \"quotes\"' `.'\n=> yy: `A' `test with ' `quotes\"\"'\n\nIf not in compatibility mode, you get the expected result\n\nxx: `A' `test with \"quotes\"' `.'\nyy: `A' `test with \"quotes\"' `.'\n\nsince 'gtroff' preserves the input level.\n\n* Use the double quote glyph '\\(dq'.  This works with and without\ncompatibility mode enabled since 'gtroff' doesn't convert '\\(dq'\nback to a double quote input character.\n\nNote that this method won't work with Unix 'troff' in general since\nthe glyph 'dq' isn't defined normally.\n\nDouble quotes in the 'ds' request are handled differently.  *Note\nStrings::, for more details.\n\nFile: groff.info,  Node: Macros,  Next: Escapes,  Prev: Requests,  Up: Embedded Commands\n\n\n'gtroff' has a \"macro\" facility for defining a series of lines that can\nbe invoked by name.  They are called in the same manner as requests -\narguments also may be passed basically in the same manner.\n\n*Note Writing Macros::, and *note Request and Macro Arguments::.\n\nFile: groff.info,  Node: Escapes,  Prev: Macros,  Up: Embedded Commands\n\n\nEscapes may occur anywhere in the input to 'gtroff'.  They usually begin\nwith a backslash and are followed by a single character, which indicates\nthe function to be performed.  The escape character can be changed; see\n*note Character Translations::.\n\nEscape sequences that require an identifier as a parameter accept\nthree possible syntax forms.\n\n* The next single character is the identifier.\n\n* If this single character is an opening parenthesis, take the\nfollowing two characters as the identifier.  Note that there is no\nclosing parenthesis after the identifier.\n\n* If this single character is an opening bracket, take all characters\nuntil a closing bracket as the identifier.\n\nExamples:\n\n\\fB\n\\n(XX\n\\*[TeX]\n\nOther escapes may require several arguments and/or some special\nformat.  In such cases the argument is traditionally enclosed in single\nquotes (and quotes are always used in this manual for the definitions of\nescape sequences).  The enclosed text is then processed according to\nwhat that escape expects.  Example:\n\n\\l'1.5i\\(bu'\n\nNote that the quote character can be replaced with any other\ncharacter that does not occur in the argument (even a newline or a space\ncharacter) in the following escapes: '\\o', '\\b', and '\\X'.  This makes\ne.g.\n\nA caf\n\\o\ne\\'\n\n\nin Paris\n=> A cafe' in Paris\n\npossible, but it is better not to use this feature to avoid confusion.\n\nThe following escape sequences (which are handled similarly to\ncharacters since they don't take a parameter) are also allowed as\ndelimiters: '\\%', '\\ ', '\\|', '\\^', '\\{', '\\}', '\\'', '\\`', '\\-', '\\',\n'\\!', '\\?', '\\)', '\\/', '\\,', '\\&', '\\:', '\\~', '\\0', '\\a', '\\c', '\\d',\n'\\e', '\\E', '\\p', '\\r', '\\t', and '\\u'.  Again, don't use these if\npossible.\n\nNo newline characters as delimiters are allowed in the following\nescapes: '\\A', '\\B', '\\Z', '\\C', and '\\w'.\n\nFinally, the escapes '\\D', '\\h', '\\H', '\\l', '\\L', '\\N', '\\R', '\\s',\n'\\S', '\\v', and '\\x' can't use the following characters as delimiters:\n\n* The digits '0'-'9'.\n\n* The (single-character) operators '+-/*%<>=&:().'.\n\n* The space, tab, and newline characters.\n\n* All escape sequences except '\\%', '\\:', '\\{', '\\}', '\\'', '\\`',\n'\\-', '\\', '\\!', '\\/', '\\c', '\\e', and '\\p'.\n\nTo have a backslash (actually, the current escape character) appear\nin the output several escapes are defined: '\\\\', '\\e' or '\\E'.  These\nare very similar, and only differ with respect to being used in macros\nor diversions.  *Note Character Translations::, for an exact description\nof those escapes.\n\n*Note Implementation Differences::, *note Copy-in Mode::, and *note\nDiversions::, *note Identifiers::, for more information.\n\n* Menu:\n\n* Comments::\n\nFile: groff.info,  Node: Comments,  Prev: Escapes,  Up: Escapes\n\n5.5.3.1 Comments\n................\n\nProbably one of the most(1) (*note Comments-Footnote-1::) common forms\nof escapes is the comment.\n\n-- Escape: \\\"\nStart a comment.  Everything to the end of the input line is\nignored.\n\nThis may sound simple, but it can be tricky to keep the comments\nfrom interfering with the appearance of the final output.\n\nIf the escape is to the right of some text or a request, that\nportion of the line is ignored, but the space leading up to it is\nnoticed by 'gtroff'.  This only affects the 'ds' and 'as' request\nand its variants.\n\nOne possibly irritating idiosyncracy is that tabs must not be used\nto line up comments.  Tabs are not treated as whitespace between\nthe request and macro arguments.\n\nA comment on a line by itself is treated as a blank line, because\nafter eliminating the comment, that is all that remains:\n\nTest\n\\\" comment\nTest\n\nproduces\n\nTest\n\nTest\n\nTo avoid this, it is common to start the line with '.\\\"', which\ncauses the line to be treated as an undefined request and thus\nignored completely.\n\nAnother commenting scheme seen sometimes is three consecutive\nsingle quotes (''''') at the beginning of a line.  This works, but\n'gtroff' gives a warning about an undefined macro (namely ''''),\nwhich is harmless, but irritating.\n\n-- Escape: \\#\nTo avoid all this, 'gtroff' has a new comment mechanism using the\n'\\#' escape.  This escape works the same as '\\\"' except that the\nnewline is also ignored:\n\nTest\n\\# comment\nTest\n\nproduces\n\nTest Test\n\nas expected.\n\n-- Request: .ig [end]\nIgnore all input until 'gtroff' encounters the macro named '.'END\non a line by itself (or '..' if END is not specified).  This is\nuseful for commenting out large blocks of text:\n\ntext text text...\n.ig\nThis is part of a large block\nof text that has been\ntemporarily(?) commented out.\n\nWe can restore it simply by removing\nthe .ig request and the \"..\" at the\nend of the block.\n..\nMore text text text...\n\nproduces\n\ntext text text...  More text text text...\n\nNote that the commented-out block of text does not cause a break.\n\nThe input is read in copy-mode; auto-incremented registers are\naffected (*note Auto-increment::).\n\nFile: groff.info,  Node: Registers,  Next: Manipulating Filling and Adjusting,  Prev: Embedded Commands,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.6 Registers",
                    "content": "Numeric variables in 'gtroff' are called \"registers\".  There are a\nnumber of built-in registers, supplying anything from the date to\ndetails of formatting parameters.\n\n*Note Identifiers::, for details on register identifiers.\n\n* Menu:\n\n* Setting Registers::\n* Interpolating Registers::\n* Auto-increment::\n* Assigning Formats::\n* Built-in Registers::\n\nFile: groff.info,  Node: Setting Registers,  Next: Interpolating Registers,  Prev: Registers,  Up: Registers\n\n\nDefine or set registers using the 'nr' request or the '\\R' escape.\n\nAlthough the following requests and escapes can be used to create\nregisters, simply using an undefined register will cause it to be set to\nzero.\n\n-- Request: .nr ident value\n-- Escape: \\R'ident value'\nSet number register IDENT to VALUE.  If IDENT doesn't exist,\n'gtroff' creates it.\n\nThe argument to '\\R' usually has to be enclosed in quotes.  *Note\nEscapes::, for details on parameter delimiting characters.\n\nThe '\\R' escape doesn't produce an input token in 'gtroff'; in\nother words, it vanishes completely after 'gtroff' has processed\nit.\n\nFor example, the following two lines are equivalent:\n\n.nr a (((17 + (3 * 4))) % 4)\n\\R'a (((17 + (3 * 4))) % 4)'\n=> 1\n\nNote that the complete transparency of '\\R' can cause surprising\neffects if you use number registers like '.k', which get evaluated\nat the time they are accessed.\n\n.ll 1.6i\n.\naaa bbb ccc ddd eee fff ggg hhh\\R':k \\n[.k]'\n.tm :k == \\n[:k]\n=> :k == 126950\n.\n.br\n.\naaa bbb ccc ddd eee fff ggg hhh\\h'0'\\R':k \\n[.k]'\n.tm :k == \\n[:k]\n=> :k == 15000\n\nIf you process this with the POSTSCRIPT device ('-Tps'), there will\nbe a line break eventually after 'ggg' in both input lines.\nHowever, after processing the space after 'ggg', the partially\ncollected line is not overfull yet, so 'troff' continues to collect\ninput until it sees the space (or in this case, the newline) after\n'hhh'.  At this point, the line is longer than the line length, and\nthe line gets broken.\n\nIn the first input line, since the '\\R' escape leaves no traces,\nthe check for the overfull line hasn't been done yet at the point\nwhere '\\R' gets handled, and you get a value for the '.k' number\nregister that is even greater than the current line length.\n\nIn the second input line, the insertion of '\\h'0'' to emit an\ninvisible zero-width space forces 'troff' to check the line length,\nwhich in turn causes the start of a new output line.  Now '.k'\nreturns the expected value.\n\nBoth 'nr' and '\\R' have two additional special forms to increment or\ndecrement a register.\n\n-- Request: .nr ident +value\n-- Request: .nr ident -value\n-- Escape: \\R'ident +value'\n-- Escape: \\R'ident -value'\nIncrement (decrement) register IDENT by VALUE.\n\n.nr a 1\n.nr a +1\n\\na\n=> 2\n\nTo assign the negated value of a register to another register, some\ncare must be taken to get the desired result:\n\n.nr a 7\n.nr b 3\n.nr a -\\nb\n\\na\n=> 4\n.nr a (-\\nb)\n\\na\n=> -3\n\nThe surrounding parentheses prevent the interpretation of the minus\nsign as a decrementing operator.  An alternative is to start the\nassignment with a '0':\n\n.nr a 7\n.nr b -3\n.nr a \\nb\n\\na\n=> 4\n.nr a 0\\nb\n\\na\n=> -3\n\n-- Request: .rr ident\nRemove number register IDENT.  If IDENT doesn't exist, the request\nis ignored.\n\n-- Request: .rnn ident1 ident2\nRename number register IDENT1 to IDENT2.  If either IDENT1 or\nIDENT2 doesn't exist, the request is ignored.\n\n-- Request: .aln ident1 ident2\nCreate an alias IDENT1 for a number register IDENT2.  The new name\nand the old name are exactly equivalent.  If IDENT1 is undefined, a\nwarning of type 'reg' is generated, and the request is ignored.\n*Note Debugging::, for information about warnings.\n\nFile: groff.info,  Node: Interpolating Registers,  Next: Auto-increment,  Prev: Setting Registers,  Up: Registers\n\n\nNumeric registers can be accessed via the '\\n' escape.\n\n-- Escape: \\ni\n-- Escape: \\n(id\n-- Escape: \\n[ident]\nInterpolate number register with name IDENT (one-character name I,\ntwo-character name ID).  This means that the value of the register\nis expanded in-place while 'gtroff' is parsing the input line.\nNested assignments (also called indirect assignments) are possible.\n\n.nr a 5\n.nr as \\na+\\na\n\\n(as\n=> 10\n\n.nr a1 5\n.nr ab 6\n.ds str b\n.ds num 1\n\\n[a\\n[num]]\n=> 5\n\\n[a\\*[str]]\n=> 6\n\nFile: groff.info,  Node: Auto-increment,  Next: Assigning Formats,  Prev: Interpolating Registers,  Up: Registers\n\n\nNumber registers can also be auto-incremented and auto-decremented.  The\nincrement or decrement value can be specified with a third argument to\nthe 'nr' request or '\\R' escape.\n\n-- Request: .nr ident value incr\nSet number register IDENT to VALUE; the increment for\nauto-incrementing is set to INCR.  Note that the '\\R' escape\ndoesn't support this notation.\n\nTo activate auto-incrementing, the escape '\\n' has a special syntax\nform.\n\n-- Escape: \\n+i\n-- Escape: \\n-i\n-- Escape: \\n+(id\n-- Escape: \\n-(id\n-- Escape: \\n+[ident]\n-- Escape: \\n-[ident]\nBefore interpolating, increment or decrement IDENT (one-character\nname I, two-character name ID) by the auto-increment value as\nspecified with the 'nr' request (or the '\\R' escape).  If no\nauto-increment value has been specified, these syntax forms are\nidentical to '\\n'.\n\nFor example,\n\n.nr a 0 1\n.nr xx 0 5\n.nr foo 0 -2\n\\n+a, \\n+a, \\n+a, \\n+a, \\n+a\n.br\n\\n-(xx, \\n-(xx, \\n-(xx, \\n-(xx, \\n-(xx\n.br\n\\n+[foo], \\n+[foo], \\n+[foo], \\n+[foo], \\n+[foo]\n\nproduces\n\n1, 2, 3, 4, 5\n-5, -10, -15, -20, -25\n-2, -4, -6, -8, -10\n\nTo change the increment value without changing the value of a\nregister (A in the example), the following can be used:\n\n.nr a \\na 10\n\nFile: groff.info,  Node: Assigning Formats,  Next: Built-in Registers,  Prev: Auto-increment,  Up: Registers\n\n\nWhen a register is used, it is always textually replaced (or\ninterpolated) with a representation of that number.  This output format\ncan be changed to a variety of formats (numbers, Roman numerals, etc.).\nThis is done using the 'af' request.\n\n-- Request: .af ident format\nChange the output format of a number register.  The first argument\nIDENT is the name of the number register to be changed, and the\nsecond argument FORMAT is the output format.  The following output\nformats are available:\n\n'1'\nDecimal arabic numbers.  This is the default format: 0, 1, 2,\n3, ...\n\n'0...0'\nDecimal numbers with as many digits as specified.  So, '00'\nwould result in printing numbers as 01, 02, 03, ...\n\nIn fact, any digit instead of zero does work; 'gtroff' only\ncounts how many digits are specified.  As a consequence,\n'af''s default format '1' could be specified as '0' also (and\nexactly this is returned by the '\\g' escape, see below).\n\n'I'\nUpper-case Roman numerals: 0, I, II, III, IV, ...\n\n'i'\nLower-case Roman numerals: 0, i, ii, iii, iv, ...\n\n'A'\nUpper-case letters: 0, A, B, C, ..., Z, AA, AB, ...\n\n'a'\nLower-case letters: 0, a, b, c, ..., z, aa, ab, ...\n\nOmitting the number register format causes a warning of type\n'missing'.  *Note Debugging::, for more details.  Specifying a\nnonexistent format causes an error.\n\nThe following example produces '10, X, j, 010':\n\n.nr a 10\n.af a 1           \\\" the default format\n\\na,\n.af a I\n\\na,\n.af a a\n\\na,\n.af a 001\n\\na\n\nThe largest number representable for the 'i' and 'I' formats is\n39999 (or -39999); Unix 'troff' uses 'z' and 'w' to represent 10000\nand 5000 in Roman numerals, and so does 'gtroff'.  Currently, the\ncorrect glyphs of Roman numeral five thousand and Roman numeral ten\nthousand (Unicode code points 'U+2182' and 'U+2181', respectively)\nare not available.\n\nIf IDENT doesn't exist, it is created.\n\nChanging the output format of a read-only register causes an error.\nIt is necessary to first copy the register's value to a writeable\nregister, then apply the 'af' request to this other register.\n\n-- Escape: \\gi\n-- Escape: \\g(id\n-- Escape: \\g[ident]\nReturn the current format of the specified register IDENT\n(one-character name I, two-character name ID).  For example, '\\ga'\nafter the previous example would produce the string '000'.  If the\nregister hasn't been defined yet, nothing is returned.\n\nFile: groff.info,  Node: Built-in Registers,  Prev: Assigning Formats,  Up: Registers\n\n\nThe following lists some built-in registers that are not described\nelsewhere in this manual.  Any register that begins with a '.' is\nread-only.  A complete listing of all built-in registers can be found in\n*note Register Index::.\n\n'\\n[.F]'\nThis string-valued register returns the current input file name.\n\n'\\n[.H]'\nNumber of basic units per horizontal unit of output device\nresolution.  *Note Measurements::.\n\n'\\n[.R]'\nThe number of number registers available.  This is always 10000 in\nGNU 'troff'; it exists for backward compatibility.\n\n'\\n[.U]'\nIf 'gtroff' is called with the '-U' command-line option to activate\nunsafe mode, the number register '.U' is set to 1, and to zero\notherwise.  *Note Groff Options::.\n\n'\\n[.V]'\nNumber of basic units per vertical unit of output device\nresolution.  *Note Measurements::.\n\n'\\n[seconds]'\nThe number of seconds after the minute, normally in the range 0\nto 59, but can be up to 61 to allow for leap seconds.  Initialized\nat start-up of 'gtroff'.\n\n'\\n[minutes]'\nThe number of minutes after the hour, in the range 0 to 59.\nInitialized at start-up of 'gtroff'.\n\n'\\n[hours]'\nThe number of hours past midnight, in the range 0 to 23.\nInitialized at start-up of 'gtroff'.\n\n'\\n[dw]'\nDay of the week (1-7).\n\n'\\n[dy]'\nDay of the month (1-31).\n\n'\\n[mo]'\nCurrent month (1-12).\n\n'\\n[year]'\nThe current year.\n\n'\\n[yr]'\nThe current year minus 1900.  Unfortunately, the documentation of\nUnix Version 7's 'troff' had a year 2000 bug: It incorrectly\nclaimed that 'yr' contains the last two digits of the year.  That\nclaim has never been true of either AT&T 'troff' or GNU 'troff'.\nOld 'troff' input that looks like this:\n\n'\\\" The following line stopped working after 1999\nThis document was formatted in 19\\n(yr.\n\ncan be corrected as follows:\n\nThis document was formatted in \\n[year].\n\nor, to be portable to older 'troff' versions, as follows:\n\n.nr y4 1900+\\n(yr\nThis document was formatted in \\n(y4.\n\n'\\n[.c]'\n'\\n[c.]'\nThe current input line number.  Register '.c' is read-only,\nwhereas 'c.' (a 'gtroff' extension) is writable also, affecting\nboth '.c' and 'c.'.\n\n'\\n[ln]'\nThe current output line number after a call to the 'nm' request\nto activate line numbering.\n\n*Note Miscellaneous::, for more information about line numbering.\n\n'\\n[.x]'\nThe major version number.  For example, if the version number is\n1.03 then '.x' contains '1'.\n\n'\\n[.y]'\nThe minor version number.  For example, if the version number is\n1.03 then '.y' contains '03'.\n\n'\\n[.Y]'\nThe revision number of 'groff'.\n\n'\\n[$$]'\nThe process ID of 'gtroff'.\n\n'\\n[.g]'\nAlways 1.  Macros should use this to determine whether they are\nrunning under GNU 'troff'.\n\n'\\n[.A]'\nIf the command-line option '-a' is used to produce an ASCII\napproximation of the output, this is set to 1, zero otherwise.\n*Note Groff Options::.\n\n'\\n[.O]'\nThis read-only register is set to the suppression nesting level\n(see escapes '\\O').  *Note Suppressing output::.\n\n'\\n[.P]'\nThis register is set to 1 (and to 0 otherwise) if the current page\nis actually being printed, i.e., if the '-o' option is being used\nto only print selected pages.  *Note Groff Options::, for more\ninformation.\n\n'\\n[.T]'\nIf 'gtroff' is called with the '-T' command-line option, the number\nregister '.T' is set to 1, and zero otherwise.  *Note Groff\nOptions::.\n\n'\\*[.T]'\nA single read-write string register that contains the current\noutput device (for example, 'latin1' or 'ps').  This is the only\nstring register defined by 'gtroff'.\n\nFile: groff.info,  Node: Manipulating Filling and Adjusting,  Next: Manipulating Hyphenation,  Prev: Registers,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.7 Manipulating Filling and Adjusting",
                    "content": "Various ways of causing \"breaks\" were given in *note Implicit Line\nBreaks::.  The 'br' request likewise causes a break.  Several other\nrequests also cause breaks, but implicitly.  These are 'bp', 'ce', 'cf',\n'fi', 'fl', 'in', 'nf', 'rj', 'sp', 'ti', and 'trf'.\n\n-- Request: .br\nBreak the current line, i.e., the input collected so far is emitted\nwithout adjustment.\n\nIf the no-break control character is used, 'gtroff' suppresses the\nbreak:\n\na\n'br\nb\n=> a b\n\nInitially, 'gtroff' fills and adjusts text to both margins.  Filling\ncan be disabled via the 'nf' request and re-enabled with the 'fi'\nrequest.\n\n-- Request: .fi\n-- Register: \\n[.u]\nActivate fill mode (which is the default).  This request implicitly\nenables adjusting; it also inserts a break in the text currently\nbeing filled.  The read-only number register '.u' is set to 1.\n\nThe fill mode status is associated with the current environment\n(*note Environments::).\n\nSee *note Line Control::, for interaction with the '\\c' escape.\n\n-- Request: .nf\nActivate no-fill mode.  Input lines are output as-is, retaining\nline breaks and ignoring the current line length.  This command\nimplicitly disables adjusting; it also causes a break.  The number\nregister '.u' is set to 0.\n\nThe fill mode status is associated with the current environment\n(*note Environments::).\n\nSee *note Line Control::, for interaction with the '\\c' escape.\n\n-- Request: .ad [mode]\n-- Register: \\n[.j]\nSet adjusting mode.\n\nActivation and deactivation of adjusting is done implicitly with\ncalls to the 'fi' or 'nf' requests.\n\nMODE can have one of the following values:\n\n'l'\nAdjust text to the left margin.  This produces what is\ntraditionally called ragged-right text.\n\n'r'\nAdjust text to the right margin, producing ragged-left text.\n\n'c'\nCenter filled text.  This is different to the 'ce' request,\nwhich only centers text without filling.\n\n'b'\n'n'\nJustify to both margins.  This is the default used by\n'gtroff'.\n\nFinally, MODE can be the numeric argument returned by the '.j'\nregister.\n\nUsing 'ad' without argument is the same as saying '.ad \\[.j]'.  In\nparticular, 'gtroff' adjusts lines in the same way it did before\nadjusting was deactivated (with a call to 'na', say).  For example,\nthis input code\n\n.de AD\n.  br\n.  ad \\\\$1\n..\n.\n.de NA\n.  br\n.  na\n..\n.\ntextA\n.AD r\n.nr ad \\n[.j]\ntextB\n.AD c\ntextC\n.NA\ntextD\n.AD         \\\" back to centering\ntextE\n.AD \\n[ad]  \\\" back to right justifying\ntextF\n\nproduces the following output:\n\ntextA\ntextB\ntextC\ntextD\ntextE\ntextF\n\nAs just demonstrated, the current adjustment mode is available in\nthe read-only number register '.j'; it can be stored and\nsubsequently used to set adjustment.\n\nThe adjustment mode status is associated with the current\nenvironment (*note Environments::).\n\n-- Request: .na\nDisable adjusting.  This request won't change the current\nadjustment mode: A subsequent call to 'ad' uses the previous\nadjustment setting.\n\nThe adjustment mode status is associated with the current\nenvironment (*note Environments::).\n\n-- Request: .brp\n-- Escape: \\p\nBreak, adjusting the current line per the current adjustment mode.\n\nWith '\\p', this break will happen at the next word boundary.  The\n'\\p' itself is removed entirely, adding neither a break nor a space\nwhere it appears in input; it can thus be placed in the middle of a\nword to cause a break at the end of that word.\n\nIn most cases this produces very ugly results since 'gtroff'\ndoesn't have a sophisticated paragraph building algorithm (as TeX\nhas, for example); instead, 'gtroff' fills and adjusts a paragraph\nline by line:\n\nThis is an uninteresting sentence.\nThis is an uninteresting sentence.\\p\nThis is an uninteresting sentence.\n\nis formatted as\n\nThis is  an uninteresting  sentence.   This  is an\nuninteresting                            sentence.\nThis is an uninteresting sentence.\n\n-- Request: .ss wordspacesize [sentencespacesize]\n-- Register: \\n[.ss]\n-- Register: \\n[.sss]\nChange the size of a space between words.  It takes its units as\none twelfth of the space width parameter for the current font.\nInitially both the WORDSPACESIZE and SENTENCESPACESIZE are 12.\nIn fill mode, the values specify the minimum distance.\n\nIf two arguments are given to the 'ss' request, the second argument\nsets the sentence space size.  If the second argument is not given,\nsentence space size is set to WORDSPACESIZE.  The sentence space\nsize is used in two circumstances: If the end of a sentence occurs\nat the end of a line in fill mode, then both an inter-word space\nand a sentence space are added; if two spaces follow the end of a\nsentence in the middle of a line, then the second space is a\nsentence space.  If a second argument is never given to the 'ss'\nrequest, the behaviour of Unix 'troff' is the same as that\nexhibited by GNU 'troff'.  In GNU 'troff', as in Unix 'troff', a\nsentence should always be followed by either a newline or two\nspaces.\n\nThe read-only number registers '.ss' and '.sss' hold the values of\nthe parameters set by the first and second arguments of the 'ss'\nrequest.\n\nThe word space and sentence space values are associated with the\ncurrent environment (*note Environments::).\n\nContrary to AT&T 'troff', this request is not ignored if a TTY\noutput device is used; the given values are then rounded down to a\nmultiple of 12 (*note Implementation Differences::).\n\nThe request is ignored if there is no parameter.\n\nAnother useful application of the 'ss' request is to insert\ndiscardable horizontal space, i.e., space that is discarded at a\nline break.  For example, paragraph-style footnotes could be\nseparated this way:\n\n.ll 4.5i\n1.\\ This is the first footnote.\\c\n.ss 48\n.nop\n.ss 12\n2.\\ This is the second footnote.\n\nThe result:\n\n1. This is the first footnote.        2. This\nis the second footnote.\n\nNote that the '\\h' escape produces unbreakable space.\n\n-- Request: .ce [nnn]\n-- Register: \\n[.ce]\nCenter text.  While the '.ad c' request also centers text, it fills\nthe text as well.  'ce' does not fill the text it affects.  This\nrequest causes a break.  The number of lines still to be centered\nis associated with the current environment (*note Environments::).\n\nThe following example demonstrates the differences.  Here is the\ninput:\n\n.ll 4i\n.ce 1000\nThis is a small text fragment that shows the differences\nbetween the `.ce' and the `.ad c' request.\n.ce 0\n\n.ad c\nThis is a small text fragment that shows the differences\nbetween the `.ce' and the `.ad c' request.\n\nAnd here the result:\n\nThis is a small text fragment that\nshows the differences\nbetween the `.ce' and the `.ad c' request.\n\nThis is a small text fragment that\nshows the differences between the `.ce'\nand the `.ad c' request.\n\nWith no arguments, 'ce' centers the next line of text.  NNN\nspecifies the number of lines to be centered.  If the argument is\nzero or negative, centering is disabled.\n\nThe basic length for centering text is the line length (as set with\nthe 'll' request) minus the indentation (as set with the 'in'\nrequest).  Temporary indentation is ignored.\n\nAs can be seen in the previous example, it is a common idiom to\nturn on centering for a large number of lines, and to turn off\ncentering after text to be centered.  This is useful for any\nrequest that takes a number of lines as an argument.\n\nThe '.ce' read-only number register contains the number of lines\nremaining to be centered, as set by the 'ce' request.\n\n-- Request: .rj [nnn]\n-- Register: \\n[.rj]\nJustify unfilled text to the right margin.  Arguments are identical\nto the 'ce' request.  The '.rj' read-only number register is the\nnumber of lines to be right-justified as set by the 'rj' request.\nThis request causes a break.  The number of lines still to be\nright-justified is associated with the current environment (*note\nEnvironments::).\n\nFile: groff.info,  Node: Manipulating Hyphenation,  Next: Manipulating Spacing,  Prev: Manipulating Filling and Adjusting,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.8 Manipulating Hyphenation",
                    "content": "Here a description of requests that influence hyphenation.\n\n-- Request: .hy [mode]\n-- Register: \\n[.hy]\nEnable hyphenation.  The request has an optional numeric argument,\nMODE, to restrict hyphenation if necessary:\n\n'1'\nThe default argument if MODE is omitted: hyphenation is\nenabled, and the first and the last characters of a word are\nnot hyphenated.  This is also the start-up value of 'gtroff'.\n\n'2'\nDo not hyphenate the last word on a page or column.\n\n'4'\nDo not hyphenate the last two characters of a word.\n\n'8'\nDo not hyphenate the first two characters of a word.\n\n'16'\nAllow hyphenation before the last character of a word.\n\n'32'\nAllow hyphenation after the first character of a word.\n\nThe values in the previous table are additive.  For example,\nvalue 12 causes 'gtroff' to neither hyphenate the last two nor the\nfirst two characters of a word.  Note that value 13 would do\nexactly the same; in other words, value 1 need not be added if the\nvalue is larger than 1.\n\nSome values cannot be used together because they contradict; for\ninstance, values 4 and 16, and values 8 and 32.\n\nThe number of characters at the beginning of a word after which the\nfirst hyphenation point should be inserted is determined by the\npatterns themselves; it can't be reduced further without\nintroducing additional, invalid hyphenation points (unfortunately,\nthis information is not part of a pattern file, you have to know it\nin advance).  The same is true for the number of characters at the\nend of word before the last hyphenation point should be inserted.\nFor example, the code\n\n.ll 1\n.hy 48\nsplitting\n\nreturns\n\ns-\nplit-\nt-\nin-\ng\n\ninstead of the correct 'split-ting'.  US-English patterns as\ndistributed with groff need two characters at the beginning and\nthree characters at the end; this means that value 4 of 'hy' is\nmandatory.  Value 8 is possible as an additional restriction, but\nvalues 1 (the default!), 16, and 32 should be avoided.\n\nHere is a table of left and right minimum values for hyphenation as\nneeded by the patterns distributed with groff; see the\n'grofftmac(5) man page' (type 'man grofftmac' at the command\nline) for more information on groff's language macro files.\n\nCzech                cs             2          2\nUS English           us             2          3\nFrench               fr             2          3\nGerman traditional   det            2          2\nGerman reformed      den            2          2\nSwedish              sv             1          2\n\nHyphenation exceptions within pattern files (i.e., the words within\na '\\hyphenation' group) also obey the hyphenation restrictions\ngiven by 'hy'.  However, exceptions specified with the 'hw' do not.\n\nThe current hyphenation restrictions can be found in the read-only\nnumber register '.hy'.\n\nThe hyphenation mode is associated with the current environment\n(*note Environments::).\n\n-- Request: .nh\nDisable hyphenation (i.e., set the hyphenation mode to zero).  Note\nthat the hyphenation mode of the last call to 'hy' is not\nremembered.\n\nThe hyphenation mode is associated with the current environment\n(*note Environments::).\n\n-- Request: .hlm [nnn]\n-- Register: \\n[.hlm]\n-- Register: \\n[.hlc]\nSet the maximum number of consecutive hyphenated lines to NNN.  If\nthis number is negative, there is no maximum.  The default value\nis -1 if NNN is omitted.  This value is associated with the current\nenvironment (*note Environments::).  Only lines output from a given\nenvironment count towards the maximum associated with that\nenvironment.  Hyphens resulting from '\\%' are counted; explicit\nhyphens are not.\n\nThe current setting of 'hlm' is available in the '.hlm' read-only\nnumber register.  Also the number of immediately preceding\nconsecutive hyphenated lines are available in the read-only number\nregister '.hlc'.\n\n-- Request: .hw word1 word2 ...\nDefine how WORD1, WORD2, etc. are to be hyphenated.  The words must\nbe given with hyphens at the hyphenation points.  For example:\n\n.hw in-sa-lub-rious\n\nBesides the space character, any character whose hyphenation code\nvalue is zero can be used to separate the arguments of 'hw' (see\nthe documentation for the 'hcode' request below for more\ninformation).  In addition, this request can be used more than\nonce.\n\nHyphenation points specified with 'hw' are not subject to the\nrestrictions given by the 'hy' request.\n\nHyphenation exceptions specified with the 'hw' request are\nassociated with the current hyphenation language; it causes an\nerror if there is no current hyphenation language.\n\nThis request is ignored if there is no parameter.\n\nIn old versions of 'troff' there was a limited amount of space to\nstore such information; fortunately, with 'gtroff', this is no\nlonger a restriction.\n\n-- Escape: \\%\n-- Escape: \\:\nTo tell 'gtroff' how to hyphenate words on the fly, use the '\\%'\nescape, also known as the \"hyphenation character\".  Preceding a\nword with this character prevents it from being hyphenated; putting\nit inside a word indicates to 'gtroff' that the word may be\nhyphenated at that point.  Note that this mechanism only affects\nthat one occurrence of the word; to change the hyphenation of a\nword for the entire document, use the 'hw' request.\n\nThe '\\:' escape inserts a zero-width break point (that is, the word\nbreaks but without adding a hyphen).\n\n... check the /var/log/\\:httpd/\\:accesslog file ...\n\nNote that '\\X' and '\\Y' start a word, that is, the '\\%' escape in\n(say) '\\X'...'\\%foobar' and '\\Y'...'\\%foobar' no longer prevents\nhyphenation but inserts a hyphenation point at the beginning of\n'foobar'; most likely this isn't what you want to do.\n\n-- Request: .hc [char]\nChange the hyphenation character to CHAR.  This character then\nworks the same as the '\\%' escape, and thus, no longer appears in\nthe output.  Without an argument, 'hc' resets the hyphenation\ncharacter to be '\\%' (the default) only.\n\nThe hyphenation character is associated with the current\nenvironment (*note Environments::).\n\n-- Request: .hpf patternfile\n-- Request: .hpfa patternfile\n-- Request: .hpfcode a b [c d ...]\nRead in a file of hyphenation patterns.  This file is searched for\nin the same way as 'NAME.tmac' (or 'tmac.NAME') is searched for if\nthe '-mNAME' option is specified.\n\nIt should have the same format as (simple) TeX patterns files.\nMore specifically, the following scanning rules are implemented.\n\n* A percent sign starts a comment (up to the end of the line)\neven if preceded by a backslash.\n\n* No support for 'digraphs' like '\\$'.\n\n* '^^XX' (X is 0-9 or a-f) and '^^X' (character code of X in the\nrange 0-127) are recognized; other use of '^' causes an error.\n\n* No macro expansion.\n\n* 'hpf' checks for the expression '\\patterns{...}' (possibly\nwith whitespace before and after the braces).  Everything\nbetween the braces is taken as hyphenation patterns.\nConsequently, '{' and '}' are not allowed in patterns.\n\n* Similarly, '\\hyphenation{...}' gives a list of hyphenation\nexceptions.\n\n* '\\endinput' is recognized also.\n\n* For backwards compatibility, if '\\patterns' is missing, the\nwhole file is treated as a list of hyphenation patterns (only\nrecognizing the '%' character as the start of a comment).\n\nIf no 'hpf' request is specified (either in the document or in a\nmacro package), 'gtroff' won't hyphenate at all.\n\nThe 'hpfa' request appends a file of patterns to the current list.\n\nThe 'hpfcode' request defines mapping values for character codes in\nhyphenation patterns.  'hpf' or 'hpfa' then apply the mapping\n(after reading the patterns) before replacing or appending them to\nthe current list of patterns.  Its arguments are pairs of character\ncodes - integers from 0 to 255.  The request maps character code A\nto code B, code C to code D, and so on.  You can use character\ncodes that would be invalid otherwise.  By default, everything maps\nto itself except letters 'A' to 'Z', which map to 'a' to 'z'.\n\nThe set of hyphenation patterns is associated with the current\nlanguage set by the 'hla' request.  The 'hpf' request is usually\ninvoked by the 'troffrc' or 'troffrc-end' file; by default,\n'troffrc' loads hyphenation patterns and exceptions for American\nEnglish (in files 'hyphen.us' and 'hyphenex.us').\n\nA second call to 'hpf' (for the same language) replaces the\nhyphenation patterns with the new ones.\n\nInvoking 'hpf' causes an error if there is no current hyphenation\nlanguage.\n\n-- Request: .hcode c1 code1 [c2 code2 ...]\nSet the hyphenation code of character C1 to CODE1, that of C2 to\nCODE2, etc.  A hyphenation code must be a single input character\n(not a special character) other than a digit or a space.\n\nTo make hyphenation work, hyphenation codes must be set up.  At\nstart-up, groff only assigns hyphenation codes to the letters\n'a'-'z' (mapped to themselves) and to the letters 'A'-'Z' (mapped\nto 'a'-'z'); all other hyphenation codes are set to zero.\nNormally, hyphenation patterns contain only lowercase letters,\nwhich should be applied regardless of case.  In other words, the\nwords 'FOO' and 'Foo' should be hyphenated exactly the same way as\nthe word 'foo' is hyphenated, and this is what 'hcode' is good for.\nWords that contain other letters won't be hyphenated properly if\nthe corresponding hyphenation patterns actually do contain them.\nFor example, the following 'hcode' requests are necessary to assign\nhyphenation codes to the letters 'A\"a\"O\"o\"U\"u\"ss' (this is needed for\nGerman):\n\n.hcode a\" a\"  A\" a\"\n.hcode o\" o\"  O\" o\"\n.hcode u\" u\"  U\" u\"\n.hcode ss ss\n\nWithout those assignments, groff treats German words like\n'Kinderga\"rten' (the plural form of 'kindergarten') as two\nsubstrings 'kinderg' and 'rten' because the hyphenation code of the\numlaut a is zero by default.  There is a German hyphenation pattern\nthat covers 'kinder', so groff finds the hyphenation 'kin-der'.\nThe other two hyphenation points ('kin-der-ga\"r-ten') are missed.\n\nThis request is ignored if it has no parameter.\n\n-- Request: .hym [length]\n-- Register: \\n[.hym]\nSet the (right) hyphenation margin to LENGTH.  If the current\nadjustment mode is not 'b' or 'n', the line is not hyphenated if it\nis shorter than LENGTH.  Without an argument, the hyphenation\nmargin is reset to its default value, which is 0.  The default\nscaling indicator for this request is 'm'.  The hyphenation margin\nis associated with the current environment (*note Environments::).\n\nA negative argument resets the hyphenation margin to zero, emitting\na warning of type 'range'.\n\nThe current hyphenation margin is available in the '.hym' read-only\nnumber register.\n\n-- Request: .hys [hyphenationspace]\n-- Register: \\n[.hys]\nSet the hyphenation space to HYPHENATIONSPACE.  If the current\nadjustment mode is 'b' or 'n', don't hyphenate the line if it can\nbe justified by adding no more than HYPHENATIONSPACE extra space\nto each word space.  Without argument, the hyphenation space is set\nto its default value, which is 0.  The default scaling indicator\nfor this request is 'm'.  The hyphenation space is associated with\nthe current environment (*note Environments::).\n\nA negative argument resets the hyphenation space to zero, emitting\na warning of type 'range'.\n\nThe current hyphenation space is available in the '.hys' read-only\nnumber register.\n\n-- Request: .shc [glyph]\nSet the \"soft hyphen character\" to GLYPH.(1)  (*note Manipulating\nHyphenation-Footnote-1::) If the argument is omitted, the soft\nhyphen character is set to the default glyph '\\(hy' (this is the\nstart-up value of 'gtroff' also).  The soft hyphen character is the\nglyph that is inserted when a word is hyphenated at a line break.\nIf the soft hyphen character does not exist in the font of the\ncharacter immediately preceding a potential break point, then the\nline is not broken at that point.  Neither definitions (specified\nwith the 'char' request) nor translations (specified with the 'tr'\nrequest) are considered when finding the soft hyphen character.\n\n-- Request: .hla language\n-- Register: \\n[.hla]\nSet the current hyphenation language to the string LANGUAGE.\nHyphenation exceptions specified with the 'hw' request and\nhyphenation patterns specified with the 'hpf' and 'hpfa' requests\nare both associated with the current hyphenation language.  The\n'hla' request is usually invoked by the 'troffrc' or the\n'troffrc-end' files; 'troffrc' sets the default language to 'us'.\n\nThe current hyphenation language is available as a string in the\nread-only number register '.hla'.\n\n.ds currlanguage \\n[.hla]\n\\*[currlanguage]\n=> us\n\nFile: groff.info,  Node: Manipulating Spacing,  Next: Tabs and Fields,  Prev: Manipulating Hyphenation,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.9 Manipulating Spacing",
                    "content": "-- Request: .sp [distance]\nSpace downwards DISTANCE.  With no argument it advances 1 line.  A\nnegative argument causes 'gtroff' to move up the page the specified\ndistance.  If the argument is preceded by a '|' then 'gtroff' moves\nthat distance from the top of the page.  This request causes a line\nbreak, and that adds the current line spacing to the space you have\njust specified.  The default scaling indicator is 'v'.\n\nFor convenience you may wish to use the following macros to set the\nheight of the next line at a given distance from the top or the\nbottom of the page:\n\n.de y-from-top-down\n.  sp |\\\\$1-\\\\n[.v]u\n..\n.\n.de y-from-bot-up\n.  sp |\\\\n[.p]u-\\\\$1-\\\\n[.v]u\n..\n\nA call to '.y-from-bot-up 10c' means that the bottom of the next\nline will be at 10 cm from the paper edge at the bottom.\n\nIf a vertical trap is sprung during execution of 'sp', the amount\nof vertical space after the trap is discarded.  For example, this\n\n.de xxx\n..\n.\n.wh 0 xxx\n.\n.pl 5v\nfoo\n.sp 2\nbar\n.sp 50\nbaz\n\nresults in\n\nfoo\n\n\nbar\n\nbaz\n\nThe amount of discarded space is available in the number register\n'.trunc'.\n\nTo protect 'sp' against vertical traps, use the 'vpt' request:\n\n.vpt 0\n.sp -3\n.vpt 1\n\n-- Request: .ls [nnn]\n-- Register: \\n[.L]\nOutput NNN-1 blank lines after each line of text.  With no\nargument, 'gtroff' uses the previous value before the last 'ls'\ncall.\n\n.ls 2    \\\" This causes double-spaced output\n.ls 3    \\\" This causes triple-spaced output\n.ls      \\\" Again double-spaced\n\nThe line spacing is associated with the current environment (*note\nEnvironments::).\n\nThe read-only number register '.L' contains the current line\nspacing setting.\n\n*Note Changing Type Sizes::, for the requests 'vs' and 'pvs' as\nalternatives to 'ls'.\n\n-- Escape: \\x'spacing'\n-- Register: \\n[.a]\nSometimes, extra vertical spacing is only needed occasionally, e.g.\nto allow space for a tall construct (like an equation).  The '\\x'\nescape does this.  The escape is given a numerical argument,\nusually enclosed in quotes (like '\\x'3p''); the default scaling\nindicator is 'v'.  If this number is positive extra vertical space\nis inserted below the current line.  A negative number adds space\nabove.  If this escape is used multiple times on the same line, the\nmaximum of the values is used.\n\n*Note Escapes::, for details on parameter delimiting characters.\n\nThe '.a' read-only number register contains the most recent\n(non-negative) extra vertical line space.\n\nUsing '\\x' can be necessary in combination with the '\\b' escape, as\nthe following example shows.\n\nThis is a test with the \\[rs]b escape.\n.br\nThis is a test with the \\[rs]b escape.\n.br\nThis is a test with \\b'xyz'\\x'-1m'\\x'1m'.\n.br\nThis is a test with the \\[rs]b escape.\n.br\nThis is a test with the \\[rs]b escape.\n\nproduces\n\nThis is a test with the \\b escape.\nThis is a test with the \\b escape.\nx\nThis is a test with y.\nz\nThis is a test with the \\b escape.\nThis is a test with the \\b escape.\n\n-- Request: .ns\n-- Request: .rs\n-- Register: \\n[.ns]\nEnable \"no-space mode\".  In this mode, spacing (either via 'sp' or\nvia blank lines) is disabled.  The 'bp' request to advance to the\nnext page is also disabled, except if it is accompanied by a page\nnumber (see *note Page Control::, for more information).  This mode\nends when actual text is output or the 'rs' request is encountered,\nwhich ends no-space mode.  The read-only number register '.ns' is\nset to 1 as long as no-space mode is active.\n\nThis request is useful for macros that conditionally insert\nvertical space before the text starts (for example, a paragraph\nmacro could insert some space except when it is the first paragraph\nafter a section header).\n\nFile: groff.info,  Node: Tabs and Fields,  Next: Character Translations,  Prev: Manipulating Spacing,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.10 Tabs and Fields",
                    "content": "A tab character (ASCII char 9, EBCDIC char 5) causes a horizontal\nmovement to the next tab stop (much like it did on a typewriter).\n\n-- Escape: \\t\nThis escape is a non-interpreted tab character.  In copy mode\n(*note Copy-in Mode::), '\\t' is the same as a real tab character.\n\n-- Request: .ta [n1 n2 ... nn T r1 r2 ... rn]\n-- Register: \\n[.tabs]\nChange tab stop positions.  This request takes a series of tab\nspecifiers as arguments (optionally divided into two groups with\nthe letter 'T') that indicate where each tab stop is to be\n(overriding any previous settings).\n\nTab stops can be specified absolutely, i.e., as the distance from\nthe left margin.  For example, the following sets 6 tab stops every\none inch.\n\n.ta 1i 2i 3i 4i 5i 6i\n\nTab stops can also be specified using a leading '+', which means\nthat the specified tab stop is set relative to the previous tab\nstop.  For example, the following is equivalent to the previous\nexample.\n\n.ta 1i +1i +1i +1i +1i +1i\n\n'gtroff' supports an extended syntax to specify repeat values after\nthe 'T' mark (these values are always taken as relative) - this is\nthe usual way to specify tabs set at equal intervals.  The\nfollowing is, yet again, the same as the previous examples.  It\ndoes even more since it defines an infinite number of tab stops\nseparated by one inch.\n\n.ta T 1i\n\nNow we are ready to interpret the full syntax given at the\nbeginning: Set tabs at positions N1, N2, ..., NN and then set tabs\nat NN+R1, NN+R2, ..., NN+RN and then at NN+RN+R1, NN+RN+R2, ...,\nNN+RN+RN, and so on.\n\nExample: '4c +6c T 3c 5c 2c' is equivalent to '4c 10c 13c 18c 20c\n23c 28c 30c ...'.\n\nThe material in each tab column (i.e., the column between two tab\nstops) may be justified to the right or left or centered in the\ncolumn.  This is specified by appending 'R', 'L', or 'C' to the tab\nspecifier.  The default justification is 'L'.  Example:\n\n.ta 1i 2iC 3iR\n\nSome notes:\n\n* The default unit of the 'ta' request is 'm'.\n\n* A tab stop is converted into a non-breakable horizontal\nmovement that can be neither stretched nor squeezed.  For\nexample,\n\n.ds foo a\\tb\\tc\n.ta T 5i\n\\*[foo]\n\ncreates a single line, which is a bit longer than 10 inches (a\nstring is used to show exactly where the tab characters are).\nNow consider the following:\n\n.ds bar a\\tb b\\tc\n.ta T 5i\n\\*[bar]\n\n'gtroff' first converts the tab stops of the line into\nunbreakable horizontal movements, then splits the line after\nthe second 'b' (assuming a sufficiently short line length).\nUsually, this isn't what the user wants.\n\n* Superfluous tabs (i.e., tab characters that do not correspond\nto a tab stop) are ignored except the first one, which\ndelimits the characters belonging to the last tab stop for\nright-justifying or centering.  Consider the following example\n\n.ds Z   foo\\tbar\\tfoo\n.ds ZZ  foo\\tbar\\tfoobar\n.ds ZZZ foo\\tbar\\tfoo\\tbar\n.ta 2i 4iR\n\\*[Z]\n.br\n\\*[ZZ]\n.br\n\\*[ZZZ]\n.br\n\nwhich produces the following output:\n\nfoo                 bar              foo\nfoo                 bar           foobar\nfoo                 bar              foobar\n\nThe first line right-justifies the second 'foo' relative to\nthe tab stop.  The second line right-justifies 'foobar'.  The\nthird line finally right-justifies only 'foo' because of the\nadditional tab character, which marks the end of the string\nbelonging to the last defined tab stop.\n\n* Tab stops are associated with the current environment (*note\nEnvironments::).\n\n* Calling 'ta' without an argument removes all tab stops.\n\n* The start-up value of 'gtroff' is 'T 0.5i'.\n\nThe read-only number register '.tabs' contains a string\nrepresentation of the current tab settings suitable for use as an\nargument to the 'ta' request.\n\n.ds tab-string \\n[.tabs]\n\\*[tab-string]\n=> T120u\n\nThe 'troff' version of the Plan 9 operating system uses register\n'.S' for the same purpose.\n\n-- Request: .tc [fill-glyph]\nNormally 'gtroff' fills the space to the next tab stop with\nwhitespace.  This can be changed with the 'tc' request.  With no\nargument 'gtroff' reverts to using whitespace, which is the\ndefault.  The value of this \"tab repetition character\" is\nassociated with the current environment (*note Environments::).(1)\n(*note Tabs and Fields-Footnote-1::)\n\n-- Request: .linetabs n\n-- Register: \\n[.linetabs]\nIf N is missing or not zero, enable \"line-tabs\" mode, or disable it\notherwise (the default).  In line-tabs mode, 'gtroff' computes tab\ndistances relative to the (current) output line instead of the\ninput line.\n\nFor example, the following code:\n\n.ds x a\\t\\c\n.ds y b\\t\\c\n.ds z c\n.ta 1i 3i\n\\*x\n\\*y\n\\*z\n\nin normal mode, results in the output\n\na         b         c\n\nin line-tabs mode, the same code outputs\n\na         b                   c\n\nLine-tabs mode is associated with the current environment.  The\nread-only register '.linetabs' is set to 1 if in line-tabs mode,\nand 0 in normal mode.\n\n* Menu:\n\n* Leaders::\n* Fields::\n\nFile: groff.info,  Node: Leaders,  Next: Fields,  Prev: Tabs and Fields,  Up: Tabs and Fields\n\n\nSometimes it may be desirable to use the 'tc' request to fill a\nparticular tab stop with a given glyph (for example dots in a table of\ncontents), but also normal tab stops on the rest of the line.  For this\n'gtroff' provides an alternate tab mechanism, called \"leaders\", which\ndoes just that.\n\nA leader character (character code 1) behaves similarly to a tab\ncharacter: It moves to the next tab stop.  The only difference is that\nfor this movement, the fill glyph defaults to a period character and not\nto space.\n\n-- Escape: \\a\nThis escape is a non-interpreted leader character.  In copy mode\n(*note Copy-in Mode::), '\\a' is the same as a real leader\ncharacter.\n\n-- Request: .lc [fill-glyph]\nDeclare the \"leader repetition character\".(1)  (*note\nLeaders-Footnote-1::) Without an argument, leaders act the same as\ntabs (i.e., using whitespace for filling).  'gtroff''s start-up\nvalue is a dot ('.').  The value of the leader repetition character\nis associated with the current environment (*note Environments::).\n\nFor a table of contents, to name an example, tab stops may be defined\nso that the section number is one tab stop, the title is the second with\nthe remaining space being filled with a line of dots, and then the page\nnumber slightly separated from the dots.\n\n.ds entry 1.1\\tFoo\\a\\t12\n.lc .\n.ta 1i 5i +.25i\n\\*[entry]\n\nThis produces\n\n1.1  Foo..........................................  12\n\nFile: groff.info,  Node: Fields,  Prev: Leaders,  Up: Tabs and Fields\n\n\n\"Fields\" are a more general way of laying out tabular data.  A field is\ndefined as the data between a pair of \"delimiting characters\".  It\ncontains substrings that are separated by \"padding characters\".  The\nwidth of a field is the distance on the input line from the position\nwhere the field starts to the next tab stop.  A padding character\ninserts stretchable space similar to TeX's '\\hss' command (thus it can\neven be negative) to make the sum of all substring lengths plus the\nstretchable space equal to the field width.  If more than one padding\ncharacter is inserted, the available space is evenly distributed among\nthem.\n\n-- Request: .fc [delim-char [padding-char]]\nDefine a delimiting and a padding character for fields.  If the\nlatter is missing, the padding character defaults to a space\ncharacter.  If there is no argument at all, the field mechanism is\ndisabled (which is the default).  Note that contrary to e.g. the\ntab repetition character, delimiting and padding characters are\nnot associated to the current environment (*note Environments::).\n\nExample:\n\n.fc # ^\n.ta T 3i\n#foo^bar^smurf#\n.br\n#foo^^bar^smurf#\n\nand here the result:\n\nfoo         bar          smurf\nfoo            bar       smurf\n\nFile: groff.info,  Node: Character Translations,  Next: Troff and Nroff Mode,  Prev: Tabs and Fields,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.11 Character Translations",
                    "content": "The control character ('.') and the no-break control character (''') can\nbe changed with the 'cc' and 'c2' requests, respectively.\n\n-- Request: .cc [c]\nSet the control character to C.  With no argument the default\ncontrol character '.' is restored.  The value of the control\ncharacter is associated with the current environment (*note\nEnvironments::).\n\n-- Request: .c2 [c]\nSet the no-break control character to C.  With no argument the\ndefault control character ''' is restored.  The value of the\nno-break control character is associated with the current\nenvironment (*note Environments::).\n\n*Note Requests::.\n\n-- Request: .eo\nDisable the escape mechanism completely.  After executing this\nrequest, the backslash character '\\' no longer starts an escape\nsequence.\n\nThis request can be very helpful in writing macros since it is not\nnecessary then to double the escape character.  Here an example:\n\n.\\\" This is a simplified version of the\n.\\\" .BR request from the man macro package\n.eo\n.de BR\n.  ds result \\&\n.  while (\\n[.$] >= 2) \\{\\\n.    as result \\fB\\$1\\fR\\$2\n.    shift 2\n.  \\}\n.  if \\n[.$] .as result \\fB\\$1\n\\*[result]\n.  ft R\n..\n.ec\n\n-- Request: .ec [c]\nSet the escape character to C.  With no argument the default escape\ncharacter '\\' is restored.  It can be also used to re-enable the\nescape mechanism after an 'eo' request.\n\nNote that changing the escape character globally likely breaks\nmacro packages since 'gtroff' has no mechanism to 'intern' macros,\ni.e., to convert a macro definition into an internal form that is\nindependent of its representation (TeX has this mechanism).  If a\nmacro is called, it is executed literally.\n\n-- Request: .ecs\n-- Request: .ecr\nThe 'ecs' request saves the current escape character in an internal\nregister.  Use this request in combination with the 'ec' request to\ntemporarily change the escape character.\n\nThe 'ecr' request restores the escape character saved with 'ecs'.\nWithout a previous call to 'ecs', this request sets the escape\ncharacter to '\\'.\n\n-- Escape: \\\\\n-- Escape: \\e\n-- Escape: \\E\nPrint the current escape character (which is the backslash\ncharacter '\\' by default).\n\n'\\\\' is a 'delayed' backslash; more precisely, it is the default\nescape character followed by a backslash, which no longer has\nspecial meaning due to the leading escape character.  It is not\nan escape sequence in the usual sense!  In any unknown escape\nsequence '\\X' the escape character is ignored and X is printed.\nBut if X is equal to the current escape character, no warning is\nemitted.\n\nAs a consequence, only at top-level or in a diversion a backslash\nglyph is printed; in copy-in mode, it expands to a single\nbackslash, which then combines with the following character to an\nescape sequence.\n\nThe '\\E' escape differs from '\\e' by printing an escape character\nthat is not interpreted in copy mode.  Use this to define strings\nwith escapes that work when used in copy mode (for example, as a\nmacro argument).  The following example defines strings to begin\nand end a superscript:\n\n.ds { \\v'-.3m'\\s'\\En[.s]*60/100'\n.ds } \\s0\\v'.3m'\n\nAnother example to demonstrate the differences between the various\nescape sequences, using a strange escape character, '-'.\n\n.ec -\n.de xxx\n--A'foo'\n..\n.xxx\n=> -A'foo'\n\nThe result is surprising for most users, expecting '1' since 'foo'\nis a valid identifier.  What has happened?  As mentioned above, the\nleading escape character makes the following character ordinary.\nWritten with the default escape character the sequence '--' becomes\n'\\-' - this is the minus sign.\n\nIf the escape character followed by itself is a valid escape\nsequence, only '\\E' yields the expected result:\n\n.ec -\n.de xxx\n-EA'foo'\n..\n.xxx\n=> 1\n\n-- Escape: \\.\nSimilar to '\\\\', the sequence '\\.' isn't a real escape sequence.\nAs before, a warning message is suppressed if the escape character\nis followed by a dot, and the dot itself is printed.\n\n.de foo\n.  nop foo\n.\n.  de bar\n.    nop bar\n\\\\..\n.\n..\n.foo\n.bar\n=> foo bar\n\nThe first backslash is consumed while the macro is read, and the\nsecond is swallowed while executing macro 'foo'.\n\nA \"translation\" is a mapping of an input character to an output\nglyph.  The mapping occurs at output time, i.e., the input character\ngets assigned the metric information of the mapped output character\nright before input tokens are converted to nodes (*note Gtroff\nInternals::, for more on this process).\n\n-- Request: .tr abcd...\n-- Request: .trin abcd...\nTranslate character A to glyph B, character C to glyph D, etc.  If\nthere is an odd number of arguments, the last one is translated to\nan unstretchable space ('\\ ').\n\nThe 'trin' request is identical to 'tr', but when you unformat a\ndiversion with 'asciify' it ignores the translation.  *Note\nDiversions::, for details about the 'asciify' request.\n\nSome notes:\n\n* Special characters ('\\(XX', '\\[XXX]', '\\C'XXX'', '\\'', '\\`',\n'\\-', '\\'), glyphs defined with the 'char' request, and\nnumbered glyphs ('\\N'XXX'') can be translated also.\n\n* The '\\e' escape can be translated also.\n\n* Characters can be mapped onto the '\\%' and '\\~' escapes (but\n'\\%' and '\\~' can't be mapped onto another glyph).\n\n* The following characters can't be translated: space (with one\nexception, see below), backspace, newline, leader (and '\\a'),\ntab (and '\\t').\n\n* Translations are not considered for finding the soft hyphen\ncharacter set with the 'shc' request.\n\n* The pair 'C\\&' (this is an arbitrary character C followed by\nthe zero width space character) maps this character to\nnothing.\n\n.tr a\\&\nfoo bar\n=> foo br\n\nIt is even possible to map the space character to nothing:\n\n.tr aa \\&\nfoo bar\n=> foobar\n\nAs shown in the example, the space character can't be the\nfirst character/glyph pair as an argument of 'tr'.\nAdditionally, it is not possible to map the space character to\nany other glyph; requests like '.tr aa x' undo '.tr aa \\&'\ninstead.\n\nIf justification is active, lines are justified in spite of\nthe 'empty' space character (but there is no minimal distance,\ni.e. the space character, between words).\n\n* After an output glyph has been constructed (this happens at\nthe moment immediately before the glyph is appended to an\noutput glyph list, either by direct output, in a macro,\ndiversion, or string), it is no longer affected by 'tr'.\n\n* Translating character to glyphs where one of them or both are\nundefined is possible also; 'tr' does not check whether the\nentities in its argument do exist.\n\n*Note Gtroff Internals::.\n\n* 'troff' no longer has a hard-coded dependency on Latin-1; all\n'charXXX' entities have been removed from the font description\nfiles.  This has a notable consequence that shows up in\nwarnings like 'can't find character with input code XXX' if\nthe 'tr' request isn't handled properly.\n\nConsider the following translation:\n\n.tr e'?\n\nThis maps input character 'e'' onto glyph '?', which is\nidentical to glyph 'char201'.  But this glyph intentionally\ndoesn't exist!  Instead, '\\[char201]' is treated as an input\ncharacter entity and is by default mapped onto '\\['E]', and\n'gtroff' doesn't handle translations of translations.\n\nThe right way to write the above translation is\n\n.tr e'\\['E]\n\nIn other words, the first argument of 'tr' should be an input\ncharacter or entity, and the second one a glyph entity.\n\n* Without an argument, the 'tr' request is ignored.\n\n-- Request: .trnt abcd...\n'trnt' is the same as the 'tr' request except that the translations\ndo not apply to text that is transparently throughput into a\ndiversion with '\\!'.  *Note Diversions::, for more information.\n\nFor example,\n\n.tr ab\n.di x\n\\!.tm a\n.di\n.x\n\nprints 'b' to the standard error stream; if 'trnt' is used instead\nof 'tr' it prints 'a'.\n\nFile: groff.info,  Node: Troff and Nroff Mode,  Next: Line Layout,  Prev: Character Translations,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.12 Troff and Nroff Mode",
                    "content": "Originally, 'nroff' and 'troff' were two separate programs, the former\nfor TTY output, the latter for everything else.  With GNU 'troff', both\nprograms are merged into one executable, sending its output to a device\ndriver ('grotty' for TTY devices, 'grops' for POSTSCRIPT, etc.) which\ninterprets the intermediate output of 'gtroff'.  For Unix 'troff' it\nmakes sense to talk about \"Nroff mode\" and \"Troff mode\" since the\ndifferences are hardcoded.  For GNU 'troff', this distinction is not\nappropriate because 'gtroff' simply takes the information given in the\nfont files for a particular device without handling requests specially\nif a TTY output device is used.\n\nUsually, a macro package can be used with all output devices.\nNevertheless, it is sometimes necessary to make a distinction between\nTTY and non-TTY devices: 'gtroff' provides two built-in conditions 'n'\nand 't' for the 'if', 'ie', and 'while' requests to decide whether\n'gtroff' shall behave like 'nroff' or like 'troff'.\n\n-- Request: .troff\nMake the 't' built-in condition true (and the 'n' built-in\ncondition false) for 'if', 'ie', and 'while' conditional requests.\nThis is the default if 'gtroff' (not 'groff') is started with the\n'-R' switch to avoid loading of the start-up files 'troffrc' and\n'troffrc-end'.  Without '-R', 'gtroff' stays in troff mode if the\noutput device is not a TTY (e.g. 'ps').\n\n-- Request: .nroff\nMake the 'n' built-in condition true (and the 't' built-in\ncondition false) for 'if', 'ie', and 'while' conditional requests.\nThis is the default if 'gtroff' uses a TTY output device; the code\nfor switching to nroff mode is in the file 'tty.tmac', which is\nloaded by the start-up file 'troffrc'.\n\n*Note Conditionals and Loops::, for more details on built-in\nconditions.\n\nFile: groff.info,  Node: Line Layout,  Next: Line Control,  Prev: Troff and Nroff Mode,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.13 Line Layout",
                    "content": "The following drawing shows the dimensions that 'gtroff' uses for\nplacing a line of output onto the page.  They are labeled with the\nrequest that manipulates each dimension.\n\n-->| in |<--\n|<-----------ll------------>|\n+----+----+----------------------+----+\n|    :    :                      :    |\n+----+----+----------------------+----+\n-->| po |<--\n|<--------paper width---------------->|\n\nThese dimensions are:\n\n'po'\n\"Page offset\" - this is the leftmost position of text on the final\noutput, defining the \"left margin\".\n\n'in'\n\"Indentation\" - this is the distance from the left margin where\ntext is printed.\n\n'll'\n\"Line length\" - this is the distance from the left margin to right\nmargin.\n\nA simple demonstration:\n\n.ll 3i\nThis is text without indentation.\nThe line length has been set to 3\\~inch.\n.in +.5i\n.ll -.5i\nNow the left and right margins are both increased.\n.in\n.ll\nCalling .in and .ll without parameters restore\nthe previous values.\n\nResult:\n\nThis  is text without indenta-\ntion.   The  line  length  has\nbeen set to 3 inch.\nNow   the  left  and\nright  margins   are\nboth increased.\nCalling  .in  and  .ll without\nparameters restore the  previ-\nous values.\n\n-- Request: .po [offset]\n-- Request: .po +offset\n-- Request: .po -offset\n-- Register: \\n[.o]\nSet horizontal page offset to OFFSET (or increment or decrement the\ncurrent value by OFFSET).  Note that this request does not cause a\nbreak, so changing the page offset in the middle of text being\nfilled may not yield the expected result.  The initial value is 1i.\nFor TTY output devices, it is set to 0 in the startup file\n'troffrc'; the default scaling indicator is 'm' (and not 'v' as\nincorrectly documented in the original Unix troff manual).\n\nThe current page offset can be found in the read-only number\nregister '.o'.\n\nIf 'po' is called without an argument, the page offset is reset to\nthe previous value before the last call to 'po'.\n\n.po 3i\n\\n[.o]\n=> 720\n.po -1i\n\\n[.o]\n=> 480\n.po\n\\n[.o]\n=> 720\n\n-- Request: .in [indent]\n-- Request: .in +indent\n-- Request: .in -indent\n-- Register: \\n[.i]\nSet indentation to INDENT (or increment or decrement the current\nvalue by INDENT).  This request causes a break.  Initially, there\nis no indentation.\n\nIf 'in' is called without an argument, the indentation is reset to\nthe previous value before the last call to 'in'.  The default\nscaling indicator is 'm'.\n\nThe indentation is associated with the current environment (*note\nEnvironments::).\n\nIf a negative indentation value is specified (which is not\nallowed), 'gtroff' emits a warning of type 'range' and sets the\nindentation to zero.\n\nThe effect of 'in' is delayed until a partially collected line (if\nit exists) is output.  A temporary indentation value is reset to\nzero also.\n\nThe current indentation (as set by 'in') can be found in the\nread-only number register '.i'.\n\n-- Request: .ti offset\n-- Request: .ti +offset\n-- Request: .ti -offset\n-- Register: \\n[.in]\nTemporarily indent the next output line by OFFSET.  If an increment\nor decrement value is specified, adjust the temporary indentation\nrelative to the value set by the 'in' request.\n\nThis request causes a break; its value is associated with the\ncurrent environment (*note Environments::).  The default scaling\nindicator is 'm'.  A call of 'ti' without an argument is ignored.\n\nIf the total indentation value is negative (which is not allowed),\n'gtroff' emits a warning of type 'range' and sets the temporary\nindentation to zero.  'Total indentation' is either OFFSET if\nspecified as an absolute value, or the temporary plus normal\nindentation, if OFFSET is given as a relative value.\n\nThe effect of 'ti' is delayed until a partially collected line (if\nit exists) is output.\n\nThe read-only number register '.in' is the indentation that applies\nto the current output line.\n\nThe difference between '.i' and '.in' is that the latter takes into\naccount whether a partially collected line still uses the old\nindentation value or a temporary indentation value is active.\n\n-- Request: .ll [length]\n-- Request: .ll +length\n-- Request: .ll -length\n-- Register: \\n[.l]\n-- Register: \\n[.ll]\nSet the line length to LENGTH (or increment or decrement the\ncurrent value by LENGTH).  Initially, the line length is set to\n6.5i.  The effect of 'll' is delayed until a partially collected\nline (if it exists) is output.  The default scaling indicator is\n'm'.\n\nIf 'll' is called without an argument, the line length is reset to\nthe previous value before the last call to 'll'.  If a negative\nline length is specified (which is not allowed), 'gtroff' emits a\nwarning of type 'range' and sets the line length to zero.\n\nThe line length is associated with the current environment (*note\nEnvironments::).\n\nThe current line length (as set by 'll') can be found in the\nread-only number register '.l'.  The read-only number register\n'.ll' is the line length that applies to the current output line.\n\nSimilar to '.i' and '.in', the difference between '.l' and '.ll' is\nthat the latter takes into account whether a partially collected\nline still uses the old line length value.\n\nFile: groff.info,  Node: Line Control,  Next: Page Layout,  Prev: Line Layout,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.14 Line Control",
                    "content": "It is important to understand how 'gtroff' handles input and output\nlines.\n\nMany escapes use positioning relative to the input line.  For\nexample, this\n\nThis is a \\h'|1.2i'test.\n\nThis is a\n\\h'|1.2i'test.\n\nproduces\n\nThis is a   test.\n\nThis is a             test.\n\nThe main usage of this feature is to define macros that act exactly\nat the place where called.\n\n.\\\" A simple macro to underline a word\n.de underline\n.  nop \\\\$1\\l'|0\\[ul]'\n..\n\nIn the above example, '|0' specifies a negative distance from the\ncurrent position (at the end of the just emitted argument '\\$1') back to\nthe beginning of the input line.  Thus, the '\\l' escape draws a line\nfrom right to left.\n\n'gtroff' makes a difference between input and output line\ncontinuation; the latter is also called \"interrupting\" a line.\n\n-- Escape: \\<RET>\n-- Escape: \\c\n-- Register: \\n[.int]\nContinue a line.  '\\<RET>' (this is a backslash at the end of a\nline immediately followed by a newline) works on the input level,\nsuppressing the effects of the following newline in the input.\n\nThis is a \\\n.test\n=> This is a .test\n\nThe '|' operator is also affected.\n\n'\\c' works on the output level.  Anything after this escape on the\nsame line is ignored except '\\R', which works as usual.  Anything\nbefore '\\c' on the same line is appended to the current partial\noutput line.  The next non-command line after an interrupted line\ncounts as a new input line.\n\nThe visual results depend on whether no-fill mode is active.\n\n* If no-fill mode is active (using the 'nf' request), the next\ninput text line after '\\c' is handled as a continuation of the\nsame input text line.\n\n.nf\nThis is a \\c\ntest.\n=> This is a test.\n\n* If fill mode is active (using the 'fi' request), a word\ninterrupted with '\\c' is continued with the text on the next\ninput text line, without an intervening space.\n\nThis is a te\\c\nst.\n=> This is a test.\n\nNote that an intervening control line that causes a break is\nstronger than '\\c', flushing out the current partial line in the\nusual way.\n\nThe '.int' register contains a positive value if the last output\nline was interrupted with '\\c'; this is associated with the current\nenvironment (*note Environments::).\n\nFile: groff.info,  Node: Page Layout,  Next: Page Control,  Prev: Line Control,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.15 Page Layout",
                    "content": "'gtroff' provides some very primitive operations for controlling page\nlayout.\n\n-- Request: .pl [length]\n-- Request: .pl +length\n-- Request: .pl -length\n-- Register: \\n[.p]\nSet the \"page length\" to LENGTH (or increment or decrement the\ncurrent value by LENGTH).  This is the length of the physical\noutput page.  The default scaling indicator is 'v'.\n\nThe current setting can be found in the read-only number register\n'.p'.\n\nNote that this only specifies the size of the page, not the top and\nbottom margins.  Those are not set by 'gtroff' directly.  *Note\nTraps::, for further information on how to do this.\n\nNegative 'pl' values are possible also, but not very useful: No\ntrap is sprung, and each line is output on a single page (thus\nsuppressing all vertical spacing).\n\nIf no argument or an invalid argument is given, 'pl' sets the page\nlength to 11i.\n\n'gtroff' provides several operations that help in setting up top and\nbottom titles (or headers and footers).\n\n-- Request: .tl 'left'center'right'\nPrint a \"title line\".  It consists of three parts: a left justified\nportion, a centered portion, and a right justified portion.  The\nargument separator ''' can be replaced with any character not\noccurring in the title line.  The '%' character is replaced with\nthe current page number.  This character can be changed with the\n'pc' request (see below).\n\nWithout argument, 'tl' is ignored.\n\nSome notes:\n\n* The line length set by the 'll' request is not honoured by\n'tl'; use the 'lt' request (described below) instead, to\ncontrol line length for text set by 'tl'.\n\n* A title line is not restricted to the top or bottom of a page.\n\n* 'tl' prints the title line immediately, ignoring a partially\nfilled line (which stays untouched).\n\n* It is not an error to omit closing delimiters.  For example,\n'.tl /foo' is equivalent to '.tl /foo///': It prints a title\nline with the left justified word 'foo'; the centered and\nright justified parts are empty.\n\n* 'tl' accepts the same parameter delimiting characters as the\n'\\A' escape; see *note Escapes::.\n\n-- Request: .lt [length]\n-- Request: .lt +length\n-- Request: .lt -length\n-- Register: \\n[.lt]\nThe title line is printed using its own line length, which is\nspecified (or incremented or decremented) with the 'lt' request.\nInitially, the title line length is set to 6.5i.  If a negative\nline length is specified (which is not allowed), 'gtroff' emits a\nwarning of type 'range' and sets the title line length to zero.\nThe default scaling indicator is 'm'.  If 'lt' is called without an\nargument, the title length is reset to the previous value before\nthe last call to 'lt'.\n\nThe current setting of this is available in the '.lt' read-only\nnumber register; it is associated with the current environment\n(*note Environments::).\n\n-- Request: .pn page\n-- Request: .pn +page\n-- Request: .pn -page\n-- Register: \\n[.pn]\nChange (increase or decrease) the page number of the next page.\nThe only argument is the page number; the request is ignored\nwithout a parameter.\n\nThe read-only number register '.pn' contains the number of the next\npage: either the value set by a 'pn' request, or the number of the\ncurrent page plus 1.\n\n-- Request: .pc [char]\nChange the page number character (used by the 'tl' request) to a\ndifferent character.  With no argument, this mechanism is disabled.\nNote that this doesn't affect the number register '%'.\n\n*Note Traps::.\n\nFile: groff.info,  Node: Page Control,  Next: Fonts and Symbols,  Prev: Page Layout,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.16 Page Control",
                    "content": "-- Request: .bp [page]\n-- Request: .bp +page\n-- Request: .bp -page\n-- Register: \\n[%]\nStop processing the current page and move to the next page.  This\nrequest causes a break.  It can also take an argument to set\n(increase, decrease) the page number of the next page (which\nactually becomes the current page after 'bp' has finished).  The\ndifference between 'bp' and 'pn' is that 'pn' does not cause a\nbreak or actually eject a page.  *Note Page Layout::.\n\n.de newpage                         \\\" define macro\n'bp                                 \\\" begin page\n'sp .5i                             \\\" vertical space\n.tl 'left top'center top'right top' \\\" title\n'sp .3i                             \\\" vertical space\n..                                  \\\" end macro\n\n'bp' has no effect if not called within the top-level diversion\n(*note Diversions::).\n\nThe read-write register '%' holds the current page number.\n\nThe number register '.pe' is set to 1 while 'bp' is active.  *Note\nPage Location Traps::.\n\n-- Request: .ne [space]\nIt is often necessary to force a certain amount of space before a\nnew page occurs.  This is most useful to make sure that there is\nnot a single \"orphan\" line left at the bottom of a page.  The 'ne'\nrequest ensures that there is a certain distance, specified by the\nfirst argument, before the next page is triggered (see *note\nTraps::, for further information).  The default scaling indicator\nfor 'ne' is 'v'; the default value of SPACE is 1v if no argument is\ngiven.\n\nFor example, to make sure that no fewer than 2 lines get orphaned,\ndo the following before each paragraph:\n\n.ne 2\ntext text text\n\n'ne' then automatically causes a page break if there is space for\none line only.\n\n-- Request: .sv [space]\n-- Request: .os\n'sv' is similar to the 'ne' request; it reserves the specified\namount of vertical space.  If the desired amount of space exists\nbefore the next trap (or the bottom page boundary if no trap is\nset), the space is output immediately (ignoring a partially filled\nline, which stays untouched).  If there is not enough space, it is\nstored for later output via the 'os' request.  The default value\nis 1v if no argument is given; the default scaling indicator is\n'v'.\n\nBoth 'sv' and 'os' ignore no-space mode.  While the 'sv' request\nallows negative values for SPACE, 'os' ignores them.\n\n-- Register: \\n[nl]\nThis register contains the current vertical position.  If the\nvertical position is zero and the top of page transition hasn't\nhappened yet, 'nl' is set to negative value.  'gtroff' itself does\nthis at the very beginning of a document before anything has been\nprinted, but the main usage is to plant a header trap on a page if\nthis page has already started.\n\nConsider the following:\n\n.de xxx\n.  sp\n.  tl ''Header''\n.  sp\n..\n.\nFirst page.\n.bp\n.wh 0 xxx\n.nr nl (-1)\nSecond page.\n\nResult:\n\nFirst page.\n\n...\n\nHeader\n\nSecond page.\n\n...\n\nWithout resetting 'nl' to a negative value, the just planted trap\nwould be active beginning with the next page, not the current\none.\n\n*Note Diversions::, for a comparison with the '.h' and '.d'\nregisters.\n\nFile: groff.info,  Node: Fonts and Symbols,  Next: Sizes,  Prev: Page Control,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.17 Fonts and Symbols",
                    "content": "'gtroff' can switch fonts at any point in the text.\n\nThe basic set of fonts is 'R', 'I', 'B', and 'BI'.  These are Times\nRoman, Italic, Bold, and Bold Italic.  For non-TTY devices, there is\nalso at least one symbol font that contains various special symbols\n(Greek, mathematics).\n\n* Menu:\n\n* Changing Fonts::\n* Font Families::\n* Font Positions::\n* Using Symbols::\n* Character Classes::\n* Special Fonts::\n* Artificial Fonts::\n* Ligatures and Kerning::\n\nFile: groff.info,  Node: Changing Fonts,  Next: Font Families,  Prev: Fonts and Symbols,  Up: Fonts and Symbols\n\n\n-- Request: .ft [font]\n-- Escape: \\ff\n-- Escape: \\f(fn\n-- Escape: \\f[font]\n-- Register: \\n[.sty]\nThe 'ft' request and the '\\f' escape change the current font to\nFONT (one-character name F, two-character name FN).\n\nIf FONT is a style name (as set with the 'sty' request or with the\n'styles' command in the 'DESC' file), use it within the current\nfont family (as set with the 'fam' request, the '\\F' escape, or the\n'family' command in the 'DESC' file).\n\nIt is not possible to switch to a font with the name 'DESC'\n(whereas this name could be used as a style name; however, this is\nnot recommended).\n\nWith no argument or using 'P' as an argument, '.ft' switches to the\nprevious font.  Use '\\f[]' to do this with the escape.  The old\nsyntax forms '\\fP' or '\\f[P]' are also supported.\n\nFonts are generally specified as upper-case strings, which are\nusually 1 to 4 characters representing an abbreviation or acronym\nof the font name.  This is no limitation, just a convention.\n\nThe example below produces two identical lines.\n\neggs, bacon,\n.ft B\nspam\n.ft\nand sausage.\n\neggs, bacon, \\fBspam\\fP and sausage.\n\nNote that '\\f' doesn't produce an input token in 'gtroff'.  As a\nconsequence, it can be used in requests like 'mc' (which expects a\nsingle character as an argument) to change the font on the fly:\n\n.mc \\f[I]x\\f[]\n\nThe current style name is available in the read-only number\nregister '.sty' (this is a string-valued register); if the current\nfont isn't a style, the empty string is returned.  It is associated\nwith the current environment.\n\n*Note Font Positions::, for an alternative syntax.\n\n-- Request: .ftr f [g]\nTranslate font F to font G.  Whenever a font named F is referred to\nin a '\\f' escape sequence, in the 'F' and 'S' conditional\noperators, or in the 'ft', 'ul', 'bd', 'cs', 'tkf', 'special',\n'fspecial', 'fp', or 'sty' requests, font G is used.  If G is\nmissing or equal to F the translation is undone.\n\nNote that it is not possible to chain font translations.  Example:\n\n.ftr XXX TR\n.ftr XXX YYY\n.ft XXX\n=> warning: can't find font `XXX'\n\n-- Request: .fzoom f [zoom]\n-- Register: \\n[.zoom]\nSet magnification of font F to factor ZOOM, which must be a\nnon-negative integer multiple of 1/1000th.  This request is useful\nto adjust the optical size of a font in relation to the others.  In\nthe example below, font 'CR' is magnified by 10% (the zoom factor\nis thus 1.1).\n\n.fam P\n.fzoom CR 1100\n.ps 12\nPalatino and \\f[CR]Courier\\f[]\n\nA missing or zero value of ZOOM is the same as a value of 1000,\nwhich means no magnification.  F must be a real font name, not a\nstyle.\n\nNote that the magnification of a font is completely transparent to\ntroff; a change of the zoom factor doesn't cause any effect except\nthat the dimensions of glyphs, (word) spaces, kerns, etc., of the\naffected font are adjusted accordingly.\n\nThe zoom factor of the current font is available in the read-only\nnumber register '.zoom', in multiples of 1/1000th.  It returns zero\nif there is no magnification.\n\nFile: groff.info,  Node: Font Families,  Next: Font Positions,  Prev: Changing Fonts,  Up: Fonts and Symbols\n\n\nDue to the variety of fonts available, 'gtroff' has added the concept of\n\"font families\" and \"font styles\".  The fonts are specified as the\nconcatenation of the font family and style.  Specifying a font without\nthe family part causes 'gtroff' to use that style of the current family.\n\nCurrently, fonts for the devices '-Tps', '-Tpdf', '-Tdvi', '-Tlj4',\n'-Tlbp', and the X11 fonts are set up to this mechanism.  By default,\n'gtroff' uses the Times family with the four styles 'R', 'I', 'B', and\n'BI'.\n\nThis way, it is possible to use the basic four fonts and to select a\ndifferent font family on the command line (*note Groff Options::).\n\n-- Request: .fam [family]\n-- Register: \\n[.fam]\n-- Escape: \\Ff\n-- Escape: \\F(fm\n-- Escape: \\F[family]\n-- Register: \\n[.fn]\nSwitch font family to FAMILY (one-character name F, two-character\nname FM).  If no argument is given, switch back to the previous\nfont family.  Use '\\F[]' to do this with the escape.  Note that\n'\\FP' doesn't work; it selects font family 'P' instead.\n\nThe value at start-up is 'T'.  The current font family is available\nin the read-only number register '.fam' (this is a string-valued\nregister); it is associated with the current environment.\n\nspam,\n.fam H    \\\" helvetica family\nspam,     \\\" used font is family H + style R = HR\n.ft B     \\\" family H + style B = font HB\nspam,\n.fam T    \\\" times family\nspam,     \\\" used font is family T + style B = TB\n.ft AR    \\\" font AR (not a style)\nbaked beans,\n.ft R     \\\" family T + style R = font TR\nand spam.\n\nNote that '\\F' doesn't produce an input token in 'gtroff'.  As a\nconsequence, it can be used in requests like 'mc' (which expects a\nsingle character as an argument) to change the font family on the\nfly:\n\n.mc \\F[P]x\\F[]\n\nThe '.fn' register contains the current \"real font name\" of the\ncurrent font.  This is a string-valued register.  If the current\nfont is a style, the value of '\\n[.fn]' is the proper concatenation\nof family and style name.\n\n-- Request: .sty n style\nAssociate STYLE with font position N.  A font position can be\nassociated either with a font or with a style.  The current font is\nthe index of a font position and so is also either a font or a\nstyle.  If it is a style, the font that is actually used is the\nfont which name is the concatenation of the name of the current\nfamily and the name of the current style.  For example, if the\ncurrent font is 1 and font position 1 is associated with style 'R'\nand the current font family is 'T', then font 'TR' is used.  If the\ncurrent font is not a style, then the current family is ignored.\nIf the requests 'cs', 'bd', 'tkf', 'uf', or 'fspecial' are applied\nto a style, they are instead applied to the member of the current\nfamily corresponding to that style.\n\nN must be a non-negative integer value.\n\nThe default family can be set with the '-f' option (*note Groff\nOptions::).  The 'styles' command in the 'DESC' file controls which\nfont positions (if any) are initially associated with styles rather\nthan fonts.  For example, the default setting for POSTSCRIPT fonts\n\nstyles R I B BI\n\nis equivalent to\n\n.sty 1 R\n.sty 2 I\n.sty 3 B\n.sty 4 BI\n\n'fam' and '\\F' always check whether the current font position is\nvalid; this can give surprising results if the current font\nposition is associated with a style.\n\nIn the following example, we want to access the POSTSCRIPT font\n'FooBar' from the font family 'Foo':\n\n.sty \\n[.fp] Bar\n.fam Foo\n=> warning: can't find font `FooR'\n\nThe default font position at start-up is 1; for the POSTSCRIPT\ndevice, this is associated with style 'R', so 'gtroff' tries to\nopen 'FooR'.\n\nA solution to this problem is to use a dummy font like the\nfollowing:\n\n.fp 0 dummy TR    \\\" set up dummy font at position 0\n.sty \\n[.fp] Bar  \\\" register style `Bar'\n.ft 0             \\\" switch to font at position 0\n.fam Foo          \\\" activate family `Foo'\n.ft Bar           \\\" switch to font `FooBar'\n\n*Note Font Positions::.\n\nFile: groff.info,  Node: Font Positions,  Next: Using Symbols,  Prev: Font Families,  Up: Fonts and Symbols\n\n\nFor the sake of old phototypesetters and compatibility with old versions\nof 'troff', 'gtroff' has the concept of font \"positions\", on which\nvarious fonts are mounted.\n\n-- Request: .fp pos font [external-name]\n-- Register: \\n[.f]\n-- Register: \\n[.fp]\nMount font FONT at position POS (which must be a non-negative\ninteger).  This numeric position can then be referred to with font\nchanging commands.  When 'gtroff' starts it is using font\nposition 1 (which must exist; position 0 is unused usually at\nstart-up).\n\nThe current font in use, as a font position, is available in the\nread-only number register '.f'.  This can be useful to remember the\ncurrent font for later recall.  It is associated with the current\nenvironment (*note Environments::).\n\n.nr save-font \\n[.f]\n.ft B\n... text text text ...\n.ft \\n[save-font]\n\nThe number of the next free font position is available in the\nread-only number register '.fp'.  This is useful when mounting a\nnew font, like so:\n\n.fp \\n[.fp] NEATOFONT\n\nFonts not listed in the 'DESC' file are automatically mounted on\nthe next available font position when they are referenced.  If a\nfont is to be mounted explicitly with the 'fp' request on an unused\nfont position, it should be mounted on the first unused font\nposition, which can be found in the '.fp' register.  Although\n'gtroff' does not enforce this strictly, it is not allowed to mount\na font at a position whose number is much greater (approx. 1000\npositions) than that of any currently used position.\n\nThe 'fp' request has an optional third argument.  This argument\ngives the external name of the font, which is used for finding the\nfont description file.  The second argument gives the internal name\nof the font, which is used to refer to the font in 'gtroff' after\nit has been mounted.  If there is no third argument then the\ninternal name is used as the external name.  This feature makes it\npossible to use fonts with long names in compatibility mode.\n\nBoth the 'ft' request and the '\\f' escape have alternative syntax\nforms to access font positions.\n\n-- Request: .ft nnn\n-- Escape: \\fn\n-- Escape: \\f(nn\n-- Escape: \\f[nnn]\nChange the current font position to NNN (one-digit position N,\ntwo-digit position NN), which must be a non-negative integer.\n\nIf NNN is associated with a style (as set with the 'sty' request or\nwith the 'styles' command in the 'DESC' file), use it within the\ncurrent font family (as set with the 'fam' request, the '\\F'\nescape, or the 'family' command in the 'DESC' file).\n\nthis is font 1\n.ft 2\nthis is font 2\n.ft                   \\\" switch back to font 1\n.ft 3\nthis is font 3\n.ft\nthis is font 1 again\n\n*Note Changing Fonts::, for the standard syntax form.\n\nFile: groff.info,  Node: Using Symbols,  Next: Character Classes,  Prev: Font Positions,  Up: Fonts and Symbols\n\n\nA \"glyph\" is a graphical representation of a \"character\".  While a\ncharacter is an abstract entity containing semantic information, a glyph\nis something that can be actually seen on screen or paper.  It is\npossible that a character has multiple glyph representation forms (for\nexample, the character 'A' can be either written in a roman or an italic\nfont, yielding two different glyphs); sometimes more than one character\nmaps to a single glyph (this is a \"ligature\" - the most common is 'fi').\n\nA \"symbol\" is simply a named glyph.  Within 'gtroff', all glyph names\nof a particular font are defined in its font file.  If the user requests\na glyph not available in this font, 'gtroff' looks up an ordered list of\n\"special fonts\".  By default, the POSTSCRIPT output device supports the\ntwo special fonts 'SS' (slanted symbols) and 'S' (symbols) (the former\nis looked up before the latter).  Other output devices use different\nnames for special fonts.  Fonts mounted with the 'fonts' keyword in the\n'DESC' file are globally available.  To install additional special fonts\nlocally (i.e. for a particular font), use the 'fspecial' request.\n\nHere are the exact rules how 'gtroff' searches a given symbol:\n\n* If the symbol has been defined with the 'char' request, use it.\nThis hides a symbol with the same name in the current font.\n\n* Check the current font.\n\n* If the symbol has been defined with the 'fchar' request, use it.\n\n* Check whether the current font has a font-specific list of special\nfonts; test all fonts in the order of appearance in the last\n'fspecial' call if appropriate.\n\n* If the symbol has been defined with the 'fschar' request for the\ncurrent font, use it.\n\n* Check all fonts in the order of appearance in the last 'special'\ncall.\n\n* If the symbol has been defined with the 'schar' request, use it.\n\n* As a last resort, consult all fonts loaded up to now for special\nfonts and check them, starting with the lowest font number.  Note\nthat this can sometimes lead to surprising results since the\n'fonts' line in the 'DESC' file often contains empty positions,\nwhich are filled later on.  For example, consider the following:\n\nfonts 3 0 0 FOO\n\nThis mounts font 'foo' at font position 3.  We assume that 'FOO' is\na special font, containing glyph 'foo', and that no font has been\nloaded yet.  The line\n\n.fspecial BAR BAZ\n\nmakes font 'BAZ' special only if font 'BAR' is active.  We further\nassume that 'BAZ' is really a special font, i.e., the font\ndescription file contains the 'special' keyword, and that it also\ncontains glyph 'foo' with a special shape fitting to font 'BAR'.\nAfter executing 'fspecial', font 'BAR' is loaded at font\nposition 1, and 'BAZ' at position 2.\n\nWe now switch to a new font 'XXX', trying to access glyph 'foo'\nthat is assumed to be missing.  There are neither font-specific\nspecial fonts for 'XXX' nor any other fonts made special with the\n'special' request, so 'gtroff' starts the search for special fonts\nin the list of already mounted fonts, with increasing font\npositions.  Consequently, it finds 'BAZ' before 'FOO' even for\n'XXX', which is not the intended behaviour.\n\n*Note Font Files::, and *note Special Fonts::, for more details.\n\nThe list of available symbols is device dependent; see the\n'groffchar(7)' man page for a complete list of all glyphs.  For\nexample, say\n\nman -Tdvi groffchar > groffchar.dvi\n\nfor a list using the default DVI fonts (not all versions of the 'man'\nprogram support the '-T' option).  If you want to use an additional\nmacro package to change the used fonts, 'groff' must be called directly:\n\ngroff -Tdvi -mec -man groffchar.7 > groffchar.dvi\n\nGlyph names not listed in groffchar(7) are derived algorithmically,\nusing a simplified version of the Adobe Glyph List (AGL) algorithm,\nwhich is described in <https://github.com/adobe-type-tools/agl-aglfn>.\nThe (frozen) set of glyph names that can't be derived algorithmically is\ncalled \"groff glyph list (GGL)\".\n\n* A glyph for Unicode character U+XXXX[X[X]], which is not a\ncomposite character is named 'uXXXX[X[X]]'.  X must be an uppercase\nhexadecimal digit.  Examples: 'u1234', 'u008E', 'u12DB8'.  The\nlargest Unicode value is 0x10FFFF. There must be at least four 'X'\ndigits; if necessary, add leading zeroes (after the 'u').  No zero\npadding is allowed for character codes greater than 0xFFFF.\nSurrogates (i.e., Unicode values greater than 0xFFFF represented\nwith character codes from the surrogate area U+D800-U+DFFF) are not\nallowed too.\n\n* A glyph representing more than a single input character is named\n\n'u' COMPONENT1 '' COMPONENT2 '' COMPONENT3 ...\n\nExample: 'u004503020301'.\n\nFor simplicity, all Unicode characters that are composites must be\ndecomposed maximally (this is normalization form D in the Unicode\nstandard); for example, 'u00CA0301' is not a valid glyph name\nsince U+00CA (LATIN CAPITAL LETTER E WITH CIRCUMFLEX) can be\nfurther decomposed into U+0045 (LATIN CAPITAL LETTER E) and U+0302\n(COMBINING CIRCUMFLEX ACCENT).  'u004503020301' is thus the glyph\nname for U+1EBE, LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE.\n\n* groff maintains a table to decompose all algorithmically derived\nglyph names that are composites itself.  For example, 'u0100'\n(LATIN LETTER A WITH MACRON) is automatically decomposed into\n'u00410304'.  Additionally, a glyph name of the GGL is preferred\nto an algorithmically derived glyph name; groff also automatically\ndoes the mapping.  Example: The glyph 'u00450302' is mapped to\n'^E'.\n\n* glyph names of the GGL can't be used in composite glyph names; for\nexample, '^Eu0301' is invalid.\n\n-- Escape: \\(nm\n-- Escape: \\[name]\n-- Escape: \\[component1 component2 ...]\nInsert a symbol NAME (two-character name NM) or a composite glyph\nwith component glyphs COMPONENT1, COMPONENT2, ...  There is no\nspecial syntax for one-character names - the natural form '\\N'\nwould collide with escapes.(1)  (*note Using Symbols-Footnote-1::)\n\nIf NAME is undefined, a warning of type 'char' is generated, and\nthe escape is ignored.  *Note Debugging::, for information about\nwarnings.\n\ngroff resolves '\\[...]' with more than a single component as\nfollows:\n\n* Any component that is found in the GGL is converted to the\n'uXXXX' form.\n\n* Any component 'uXXXX' that is found in the list of\ndecomposable glyphs is decomposed.\n\n* The resulting elements are then concatenated with '' in\nbetween, dropping the leading 'u' in all elements but the\nfirst.\n\nNo check for the existence of any component (similar to 'tr'\nrequest) is done.\n\nExamples:\n\n'\\[A ho]'\n'A' maps to 'u0041', 'ho' maps to 'u02DB', thus the final\nglyph name would be 'u004102DB'.  Note this is not the\nexpected result: The ogonek glyph 'ho' is a spacing ogonek,\nbut for a proper composite a non-spacing ogonek (U+0328) is\nnecessary.  Looking into the file 'composite.tmac' one can\nfind '.composite ho u0328', which changes the mapping of 'ho'\nwhile a composite glyph name is constructed, causing the final\nglyph name to be 'u00410328'.\n\n'\\[^E u0301]'\n'\\[^E aa]'\n'\\[E a^ aa]'\n'\\[E ^ ']'\n'^E' maps to 'u00450302', thus the final glyph name is\n'u004503020301' in all forms (assuming proper calls of the\n'composite' request).\n\nIt is not possible to define glyphs with names like 'A ho' within a\ngroff font file.  This is not really a limitation; instead, you\nhave to define 'u00410328'.\n\n-- Escape: \\C'xxx'\nTypeset the glyph named XXX.(2)  (*note Using Symbols-Footnote-2::)\nNormally it is more convenient to use '\\[XXX]', but '\\C' has the\nadvantage that it is compatible with newer versions of AT&T 'troff'\nand is available in compatibility mode.\n\n-- Request: .composite from to\nMap glyph name FROM to glyph name TO if it is used in '\\[...]' with\nmore than one component.  See above for examples.\n\nThis mapping is based on glyph names only; no check for the\nexistence of either glyph is done.\n\nA set of default mappings for many accents can be found in the file\n'composite.tmac', which is loaded at start-up.\n\n-- Escape: \\N'n'\nTypeset the glyph with code N in the current font ('n' is *not* the\ninput character code).  The number N can be any non-negative\ndecimal integer.  Most devices only have glyphs with codes between\n0 and 255; the Unicode output device uses codes in the range\n0-65535.  If the current font does not contain a glyph with that\ncode, special fonts are not searched.  The '\\N' escape sequence\ncan be conveniently used in conjunction with the 'char' request:\n\n.char \\[phone] \\f[ZD]\\N'37'\n\nThe code of each glyph is given in the fourth column in the font\ndescription file after the 'charset' command.  It is possible to\ninclude unnamed glyphs in the font description file by using a name\nof '---'; the '\\N' escape sequence is the only way to use these.\n\nNo kerning is applied to glyphs accessed with '\\N'.\n\nSome escape sequences directly map onto special glyphs.\n\n-- Escape: \\'\nThis is a backslash followed by the apostrophe character, ASCII\ncharacter '0x27' (EBCDIC character '0x7D').  The same as '\\[aa]',\nthe acute accent.\n\n-- Escape: \\`\nThis is a backslash followed by ASCII character '0x60' (EBCDIC\ncharacter '0x79' usually).  The same as '\\[ga]', the grave accent.\n\n-- Escape: \\-\nThis is the same as '\\[-]', the minus sign in the current font.\n\n-- Escape: \\\nThis is the same as '\\[ul]', the underline character.\n\n-- Request: .cflags n c1 c2 ...\nInput characters and symbols have certain properties associated\nwith it.(3)  (*note Using Symbols-Footnote-3::) These properties\ncan be modified with the 'cflags' request.  The first argument is\nthe sum of the desired flags and the remaining arguments are the\ncharacters or symbols to have those properties.  It is possible to\nomit the spaces between the characters or symbols.  Instead of\nsingle characters or symbols you can also use character classes\n(see *note Character Classes:: for more details).\n\n'1'\nThe character ends sentences (initially characters '.?!' have\nthis property).\n\n'2'\nLines can be broken before the character (initially no\ncharacters have this property).  This only works if both the\ncharacters before and after have non-zero hyphenation codes\n(as set with the 'hcode' request).  Use value 64 to override\nthis behaviour.\n\n'4'\nLines can be broken after the character (initially the\ncharacter '-' and the symbols '\\[hy]' and '\\[em]' have this\nproperty).  This only works if both the characters before and\nafter have non-zero hyphenation codes (as set with the 'hcode'\nrequest).  Use value 64 to override this behaviour.\n\n'8'\nThe character overlaps horizontally if used as a horizontal\nline building element.  Initially the symbols '\\[ul]',\n'\\[rn]', '\\[ru]', '\\[radicalex]', and '\\[sqrtex]' have this\nproperty.\n\n'16'\nThe character overlaps vertically if used as vertical line\nbuilding element.  Initially symbol '\\[br]' has this property.\n\n'32'\nAn end-of-sentence character followed by any number of\ncharacters with this property is treated as the end of a\nsentence if followed by a newline or two spaces; in other\nwords the character is \"transparent\" for the purposes of\nend-of-sentence recognition - this is the same as having a\nzero space factor in TeX (initially characters '\"')]*' and the\nsymbols '\\[dg]', '\\[rq]', and '\\[cq]' have this property).\n\n'64'\nIgnore hyphenation code values of the surrounding characters.\nUse this in combination with values 2 and 4 (initially no\ncharacters have this property).  For example, if you need an\nautomatic break point after the en-dash in number ranges like\n'3000-5000', insert\n\n.cflags 68 \\(en\n\ninto your document.  Note, however, that this can lead to bad\nlayout if done without thinking; in most situations, a better\nsolution instead of changing the 'cflags' value is to insert\n'\\:' right after the hyphen at the places that really need a\nbreak point.\n\n'128'\nProhibit a line break before the character, but allow a line\nbreak after the character.  This works only in combination\nwith flags 256 and 512 (see below) and has no effect\notherwise.\n\n'256'\nProhibit a line break after the character, but allow a line\nbreak before the character.  This works only in combination\nwith flags 128 and 512 (see below) and has no effect\notherwise.\n\n'512'\nAllow line break before or after the character.  This works\nonly in combination with flags 128 and 256 and has no effect\notherwise.\n\nContrary to flag values 2 and 4, the flags 128, 256, and 512\nwork pairwise.  If, for example, the left character has value\n512, and the right character 128, no line break gets inserted.\nIf we use value 6 instead for the left character, a line break\nafter the character can't be suppressed since the right\nneighbour character doesn't get examined.\n\n-- Request: .char g [string]\n-- Request: .fchar g [string]\n-- Request: .fschar f g [string]\n-- Request: .schar g [string]\nDefine a new glyph G to be STRING (which can be empty).(4)  (*note\nUsing Symbols-Footnote-4::) Every time glyph G needs to be printed,\nSTRING is processed in a temporary environment and the result is\nwrapped up into a single object.  Compatibility mode is turned off\nand the escape character is set to '\\' while STRING is being\nprocessed.  Any emboldening, constant spacing or track kerning is\napplied to this object rather than to individual characters in\nSTRING.\n\nA glyph defined by these requests can be used just like a normal\nglyph provided by the output device.  In particular, other\ncharacters can be translated to it with the 'tr' or 'trin'\nrequests; it can be made the leader character by the 'lc' request;\nrepeated patterns can be drawn with the glyph using the '\\l' and\n'\\L' escape sequences; words containing the glyph can be hyphenated\ncorrectly if the 'hcode' request is used to give the glyph's symbol\na hyphenation code.\n\nThere is a special anti-recursion feature: Use of 'g' within the\nglyph's definition is handled like normal characters and symbols\nnot defined with 'char'.\n\nNote that the 'tr' and 'trin' requests take precedence if 'char'\naccesses the same symbol.\n\n.tr XY\nX\n=> Y\n.char X Z\nX\n=> Y\n.tr XX\nX\n=> Z\n\nThe 'fchar' request defines a fallback glyph: 'gtroff' only checks\nfor glyphs defined with 'fchar' if it cannot find the glyph in the\ncurrent font.  'gtroff' carries out this test before checking\nspecial fonts.\n\n'fschar' defines a fallback glyph for font F: 'gtroff' checks for\nglyphs defined with 'fschar' after the list of fonts declared as\nfont-specific special fonts with the 'fspecial' request, but before\nthe list of fonts declared as global special fonts with the\n'special' request.\n\nFinally, the 'schar' request defines a global fallback glyph:\n'gtroff' checks for glyphs defined with 'schar' after the list of\nfonts declared as global special fonts with the 'special' request,\nbut before the already mounted special fonts.\n\n*Note Using Symbols::, for a detailed description of the glyph\nsearching mechanism in 'gtroff'.\n\n-- Request: .rchar c1 c2 ...\n-- Request: .rfschar f c1 c2 ...\nRemove the definitions of glyphs C1, C2, ...  This undoes the\neffect of a 'char', 'fchar', or 'schar' request.\n\nIt is possible to omit the whitespace between arguments.\n\nThe request 'rfschar' removes glyph definitions defined with\n'fschar' for glyph f.\n\n*Note Special Characters::.\n\nFile: groff.info,  Node: Character Classes,  Next: Special Fonts,  Prev: Using Symbols,  Up: Fonts and Symbols\n\n\nClasses are particularly useful for East Asian languages such as\nChinese, Japanese, and Korean, where the number of needed characters is\nmuch larger than in European languages, and where large sets of\ncharacters share the same properties.\n\n-- Request: .class n c1 c2 ...\nIn 'groff', a \"character class\" (or simply \"class\") is a set of\ncharacters, grouped by some user aspect.  The 'class' request\ndefines such classes so that other requests can refer to all\ncharacters belonging to this set with a single class name.\nCurrently, only the 'cflags' request can handle character classes.\n\nA 'class' request takes a class name followed by a list of\nentities.  In its simplest form, the entities are characters or\nsymbols:\n\n.class [prepunct] , : ; > }\n\nSince class and glyph names share the same namespace, it is\nrecommended to start and end the class name with '[' and ']',\nrespectively, to avoid collisions with normal 'groff' symbols (and\nsymbols defined by the user).  In particular, the presence of ']'\nin the symbol name intentionally prevents the usage of '\\[...]',\nthus you must use the '\\C' escape to access a class with such a\nname.\n\nYou can also use a special character range notation, consisting of\na start character or symbol, followed by '-', and an end character\nor symbol.  Internally, 'gtroff' converts these two symbol names to\nUnicode values (according to the groff glyph gist), which then give\nthe start and end value of the range.  If that fails, the class\ndefinition is skipped.\n\nFinally, classes can be nested, too.\n\nHere is a more complex example:\n\n.class [prepunctx] \\C'[prepunct]' \\[u2013]-\\[u2016]\n\nThe class 'prepunctx' now contains the contents of the class\n'prepunct' as defined above (the set ', : ; > }'), and characters\nin the range between 'U+2013' and 'U+2016'.\n\nIf you want to add '-' to a class, it must be the first character\nvalue in the argument list, otherwise it gets misinterpreted as a\nrange.\n\nNote that it is not possible to use class names within range\ndefinitions.\n\nTypical use of the 'class' request is to control line-breaking and\nhyphenation rules as defined by the 'cflags' request.  For example,\nto inhibit line breaks before the characters belonging to the\n'prepunctx' class, you can write:\n\n.cflags 2 \\C'[prepunctx]'\n\nSee the 'cflags' request in *note Using Symbols::, for more\ndetails.\n\nFile: groff.info,  Node: Special Fonts,  Next: Artificial Fonts,  Prev: Character Classes,  Up: Fonts and Symbols\n\n\nSpecial fonts are those that 'gtroff' searches when it cannot find the\nrequested glyph in the current font.  The Symbol font is usually a\nspecial font.\n\n'gtroff' provides the following two requests to add more special\nfonts.  *Note Using Symbols::, for a detailed description of the glyph\nsearching mechanism in 'gtroff'.\n\nUsually, only non-TTY devices have special fonts.\n\n-- Request: .special [s1 s2 ...]\n-- Request: .fspecial f [s1 s2 ...]\nUse the 'special' request to define special fonts.  Initially, this\nlist is empty.\n\nUse the 'fspecial' request to designate special fonts only when\nfont F is active.  Initially, this list is empty.\n\nPrevious calls to 'special' or 'fspecial' are overwritten; without\narguments, the particular list of special fonts is set to empty.\nSpecial fonts are searched in the order they appear as arguments.\n\nAll fonts that appear in a call to 'special' or 'fspecial' are\nloaded.\n\n*Note Using Symbols::, for the exact search order of glyphs.\n\nFile: groff.info,  Node: Artificial Fonts,  Next: Ligatures and Kerning,  Prev: Special Fonts,  Up: Fonts and Symbols\n\n\nThere are a number of requests and escapes for artificially creating\nfonts.  These are largely vestiges of the days when output devices did\nnot have a wide variety of fonts, and when 'nroff' and 'troff' were\nseparate programs.  Most of them are no longer necessary in GNU 'troff'.\nNevertheless, they are supported.\n\n-- Escape: \\H'height'\n-- Escape: \\H'+height'\n-- Escape: \\H'-height'\n-- Register: \\n[.height]\nChange (increment, decrement) the height of the current font, but\nnot the width.  If HEIGHT is zero, restore the original height.\nDefault scaling indicator is 'z'.\n\nThe read-only number register '.height' contains the font height as\nset by '\\H'.\n\nCurrently, only the '-Tps' and '-Tpdf' devices support this\nfeature.\n\nNote that '\\H' doesn't produce an input token in 'gtroff'.  As a\nconsequence, it can be used in requests like 'mc' (which expects a\nsingle character as an argument) to change the font on the fly:\n\n.mc \\H'+5z'x\\H'0'\n\nIn compatibility mode, 'gtroff' behaves differently: If an\nincrement or decrement is used, it is always taken relative to the\ncurrent point size and not relative to the previously selected font\nheight.  Thus,\n\n.cp 1\n\\H'+5'test \\H'+5'test\n\nprints the word 'test' twice with the same font height (five points\nlarger than the current font size).\n\n-- Escape: \\S'slant'\n-- Register: \\n[.slant]\nSlant the current font by SLANT degrees.  Positive values slant to\nthe right.  Only integer values are possible.\n\nThe read-only number register '.slant' contains the font slant as\nset by '\\S'.\n\nCurrently, only the '-Tps' and '-Tpdf' devices support this\nfeature.\n\nNote that '\\S' doesn't produce an input token in 'gtroff'.  As a\nconsequence, it can be used in requests like 'mc' (which expects a\nsingle character as an argument) to change the font on the fly:\n\n.mc \\S'20'x\\S'0'\n\nThis request is incorrectly documented in the original Unix troff\nmanual; the slant is always set to an absolute value.\n\n-- Request: .ul [lines]\nThe 'ul' request normally underlines subsequent lines if a TTY\noutput device is used.  Otherwise, the lines are printed in italics\n(only the term 'underlined' is used in the following).  The single\nargument is the number of input lines to be underlined; with no\nargument, the next line is underlined.  If LINES is zero or\nnegative, stop the effects of 'ul' (if it was active).  Requests\nand empty lines do not count for computing the number of underlined\ninput lines, even if they produce some output like 'tl'.  Lines\ninserted by macros (e.g. invoked by a trap) do count.\n\nAt the beginning of 'ul', the current font is stored and the\nunderline font is activated.  Within the span of a 'ul' request, it\nis possible to change fonts, but after the last line affected by\n'ul' the saved font is restored.\n\nThis number of lines still to be underlined is associated with the\ncurrent environment (*note Environments::).  The underline font can\nbe changed with the 'uf' request.\n\nThe 'ul' request does not underline spaces.\n\n-- Request: .cu [lines]\nThe 'cu' request is similar to 'ul' but underlines spaces as well\n(if a TTY output device is used).\n\n-- Request: .uf font\nSet the underline font (globally) used by 'ul' and 'cu'.  By\ndefault, this is the font at position 2.  FONT can be either a\nnon-negative font position or the name of a font.\n\n-- Request: .bd font [offset]\n-- Request: .bd font1 font2 [offset]\n-- Register: \\n[.b]\nArtificially create a bold font by printing each glyph twice,\nslightly offset.\n\nTwo syntax forms are available.\n\n* Imitate a bold font unconditionally.  The first argument\nspecifies the font to embolden, and the second is the number\nof basic units, minus one, by which the two glyphs are offset.\nIf the second argument is missing, emboldening is turned off.\n\nFONT can be either a non-negative font position or the name of\na font.\n\nOFFSET is available in the '.b' read-only register if a\nspecial font is active; in the 'bd' request, its default unit\nis 'u'.\n\n* Imitate a bold form conditionally.  Embolden FONT1 by OFFSET\nonly if font FONT2 is the current font.  This command can be\nissued repeatedly to set up different emboldening values for\ndifferent current fonts.  If the second argument is missing,\nemboldening is turned off for this particular current font.\n\nThis affects special fonts only (either set up with the\n'special' command in font files or with the 'fspecial'\nrequest).\n\n-- Request: .cs font [width [em-size]]\nSwitch to and from \"constant glyph space mode\".  If activated, the\nwidth of every glyph is WIDTH/36 ems.  The em size is given\nabsolutely by EM-SIZE; if this argument is missing, the em value is\ntaken from the current font size (as set with the 'ps' request)\nwhen the font is effectively in use.  Without second and third\nargument, constant glyph space mode is deactivated.\n\nDefault scaling indicator for EM-SIZE is 'z'; WIDTH is an integer.\n\nFile: groff.info,  Node: Ligatures and Kerning,  Prev: Artificial Fonts,  Up: Fonts and Symbols\n\n\nLigatures are groups of characters that are run together, i.e, producing\na single glyph.  For example, the letters 'f' and 'i' can form a\nligature 'fi' as in the word 'file'.  This produces a cleaner look\n(albeit subtle) to the printed output.  Usually, ligatures are not\navailable in fonts for TTY output devices.\n\nMost POSTSCRIPT fonts support the fi and fl ligatures.  The C/A/T\ntypesetter that was the target of AT&T 'troff' also supported 'ff',\n'ffi', and 'ffl' ligatures.  Advanced typesetters or 'expert' fonts may\ninclude ligatures for 'ft' and 'ct', although GNU 'troff' does not\nsupport these (yet).\n\nOnly the current font is checked for ligatures and kerns; neither\nspecial fonts nor entities defined with the 'char' request (and its\nsiblings) are taken into account.\n\n-- Request: .lg [flag]\n-- Register: \\n[.lg]\nSwitch the ligature mechanism on or off; if the parameter is\nnon-zero or missing, ligatures are enabled, otherwise disabled.\nDefault is on.  The current ligature mode can be found in the\nread-only number register '.lg' (set to 1 or 2 if ligatures are\nenabled, 0 otherwise).\n\nSetting the ligature mode to 2 enables the two-character ligatures\n(fi, fl, and ff) and disables the three-character ligatures (ffi\nand ffl).\n\n\"Pairwise kerning\" is another subtle typesetting mechanism that\nmodifies the distance between a glyph pair to improve readability.  In\nmost cases (but not always) the distance is decreased.  Typewriter-like\nfonts and fonts for terminals where all glyphs have the same width don't\nuse kerning.\n\n-- Request: .kern [flag]\n-- Register: \\n[.kern]\nSwitch kerning on or off.  If the parameter is non-zero or missing,\nenable pairwise kerning, otherwise disable it.  The read-only\nnumber register '.kern' is set to 1 if pairwise kerning is enabled,\n0 otherwise.\n\nIf the font description file contains pairwise kerning information,\nglyphs from that font are kerned.  Kerning between two glyphs can\nbe inhibited by placing '\\&' between them: 'V\\&A'.\n\n*Note Font File Format::.\n\n\"Track kerning\" expands or reduces the space between glyphs.  This\ncan be handy, for example, if you need to squeeze a long word onto a\nsingle line or spread some text to fill a narrow column.  It must be\nused with great care since it is usually considered bad typography if\nthe reader notices the effect.\n\n-- Request: .tkf f s1 n1 s2 n2\nEnable track kerning for font F.  If the current font is F the\nwidth of every glyph is increased by an amount between N1 and N2\n(N1, N2 can be negative); if the current point size is less than or\nequal to S1 the width is increased by N1; if it is greater than or\nequal to S2 the width is increased by N2; if the point size is\ngreater than or equal to S1 and less than or equal to S2 the\nincrease in width is a linear function of the point size.\n\nThe default scaling indicator is 'z' for S1 and S2, 'p' for N1 and\nN2.\n\nNote that the track kerning amount is added even to the rightmost\nglyph in a line; for large values it is thus recommended to\nincrease the line length by the same amount to compensate it.\n\nSometimes, when typesetting letters of different fonts, more or less\nspace at such boundaries is needed.  There are two escapes to help with\nthis.\n\n-- Escape: \\/\nIncrease the width of the preceding glyph so that the spacing\nbetween that glyph and the following glyph is correct if the\nfollowing glyph is a roman glyph.  For example, if an italic 'f' is\nimmediately followed by a roman right parenthesis, then in many\nfonts the top right portion of the 'f' overlaps the top left of the\nright parenthesis.  Use this escape sequence whenever an italic\nglyph is immediately followed by a roman glyph without any\nintervening space.  This small amount of space is also called\n\"italic correction\".\n\n-- Escape: \\,\nModify the spacing of the following glyph so that the spacing\nbetween that glyph and the preceding glyph is correct if the\npreceding glyph is a roman glyph.  Use this escape sequence\nwhenever a roman glyph is immediately followed by an italic glyph\nwithout any intervening space.  In analogy to above, this space\ncould be called \"left italic correction\", but this term isn't used\nwidely.\n\n-- Escape: \\&\nInsert a zero-width character, which is invisible.  Its intended\nuse is to stop interaction of a character with its surroundings.\n\n* It prevents the insertion of extra space after an\nend-of-sentence character.\n\nTest.\nTest.\n=> Test.  Test.\nTest.\\&\nTest.\n=> Test. Test.\n\n* It prevents interpretation of a control character at the\nbeginning of an input line.\n\n.Test\n=> warning: `Test' not defined\n\\&.Test\n=> .Test\n\n* It prevents kerning between two glyphs.\n\n* It is needed to map an arbitrary character to nothing in the\n'tr' request (*note Character Translations::).\n\n-- Escape: \\)\nThis escape is similar to '\\&' except that it behaves like a\ncharacter declared with the 'cflags' request to be transparent for\nthe purposes of an end-of-sentence character.\n\nIts main usage is in macro definitions to protect against arguments\nstarting with a control character.\n\n.de xxx\n\\)\\\\$1\n..\n.de yyy\n\\&\\\\$1\n..\nThis is a test.\\c\n.xxx '\nThis is a test.\n=>This is a test.'  This is a test.\nThis is a test.\\c\n.yyy '\nThis is a test.\n=>This is a test.' This is a test.\n\nFile: groff.info,  Node: Sizes,  Next: Strings,  Prev: Fonts and Symbols,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.18 Sizes",
                    "content": "'gtroff' uses two dimensions with each line of text, type size and\nvertical spacing.  The \"type size\" is approximately the height of the\ntallest glyph.(1)  (*note Sizes-Footnote-1::) \"Vertical spacing\" is the\namount of space 'gtroff' allows for a line of text; normally, this is\nabout 20% larger than the current type size.  Ratios smaller than this\ncan result in hard-to-read text; larger than this, it spreads the text\nout more vertically (useful for term papers).  By default, 'gtroff' uses\n10 point type on 12 point spacing.\n\nThe difference between type size and vertical spacing is known, by\ntypesetters, as \"leading\" (this is pronounced 'ledding').\n\n* Menu:\n\n* Changing Type Sizes::\n* Fractional Type Sizes::\n\nFile: groff.info,  Node: Changing Type Sizes,  Next: Fractional Type Sizes,  Prev: Sizes,  Up: Sizes\n\n\n-- Request: .ps [size]\n-- Request: .ps +size\n-- Request: .ps -size\n-- Escape: \\ssize\n-- Register: \\n[.s]\nUse the 'ps' request or the '\\s' escape to change (increase,\ndecrease) the type size (in points).  Specify SIZE as either an\nabsolute point size, or as a relative change from the current size.\nThe size 0 (for both '.ps' and '\\s'), or no argument (for '.ps'\nonly), goes back to the previous size.\n\nDefault scaling indicator of 'size' is 'z'.  If 'size' is negative,\nit is set to 1u.\n\nThe read-only number register '.s' returns the point size in points\nas a decimal fraction.  This is a string.  To get the point size in\nscaled points, use the '.ps' register instead.\n\n'.s' is associated with the current environment (*note\nEnvironments::).\n\nsnap, snap,\n.ps +2\ngrin, grin,\n.ps +2\nwink, wink, \\s+2nudge, nudge,\\s+8 say no more!\n.ps 10\n\nThe '\\s' escape may be called in a variety of ways.  Much like\nother escapes there must be a way to determine where the argument\nends and the text begins.  Any of the following forms are valid:\n\n'\\sN'\nSet the point size to N points.  N must be either 0 or in the\nrange 4 to 39.\n\n'\\s+N'\n'\\s-N'\nIncrease or decrease the point size by N points.  N must be\nexactly one digit.\n\n'\\s(NN'\nSet the point size to NN points.  NN must be exactly two\ndigits.\n\n'\\s+(NN'\n'\\s-(NN'\n'\\s(+NN'\n'\\s(-NN'\nIncrease or decrease the point size by NN points.  NN must be\nexactly two digits.\n\nNote that '\\s' doesn't produce an input token in 'gtroff'.  As a\nconsequence, it can be used in requests like 'mc' (which expects a\nsingle character as an argument) to change the font on the fly:\n\n.mc \\s[20]x\\s[0]\n\n*Note Fractional Type Sizes::, for yet another syntactical form of\nusing the '\\s' escape.\n\n-- Request: .sizes s1 s2 ... sn [0]\nSome devices may only have certain permissible sizes, in which case\n'gtroff' rounds to the nearest permissible size.  The 'DESC' file\nspecifies which sizes are permissible for the device.\n\nUse the 'sizes' request to change the permissible sizes for the\ncurrent output device.  Arguments are in scaled points; the\n'sizescale' line in the 'DESC' file for the output device provides\nthe scaling factor.  For example, if the scaling factor is 1000,\nthen the value 12000 is 12 points.\n\nEach argument can be a single point size (such as '12000'), or a\nrange of sizes (such as '4000-72000').  You can optionally end the\nlist with a zero.\n\n-- Request: .vs [space]\n-- Request: .vs +space\n-- Request: .vs -space\n-- Register: \\n[.v]\nChange (increase, decrease) the vertical spacing by SPACE.  The\ndefault scaling indicator is 'p'.\n\nIf 'vs' is called without an argument, the vertical spacing is\nreset to the previous value before the last call to 'vs'.\n\n'gtroff' creates a warning of type 'range' if SPACE is negative;\nthe vertical spacing is then set to smallest positive value, the\nvertical resolution (as given in the '.V' register).\n\nNote that '.vs 0' isn't saved in a diversion since it doesn't\nresult in a vertical motion.  You explicitly have to repeat this\ncommand before inserting the diversion.\n\nThe read-only number register '.v' contains the current vertical\nspacing; it is associated with the current environment (*note\nEnvironments::).\n\nThe effective vertical line spacing consists of four components.\nBreaking a line causes the following actions (in the given order).\n\n* Move the current point vertically by the \"extra pre-vertical line\nspace\".  This is the minimum value of all '\\x' escapes with a\nnegative argument in the current output line.\n\n* Move the current point vertically by the vertical line spacing as\nset with the 'vs' request.\n\n* Output the current line.\n\n* Move the current point vertically by the \"extra post-vertical line\nspace\".  This is the maximum value of all '\\x' escapes with a\npositive argument in the line that has just been output.\n\n* Move the current point vertically by the \"post-vertical line\nspacing\" as set with the 'pvs' request.\n\nIt is usually better to use 'vs' or 'pvs' instead of 'ls' to produce\ndouble-spaced documents: 'vs' and 'pvs' have a finer granularity for the\ninserted vertical space compared to 'ls'; furthermore, certain\npreprocessors assume single-spacing.\n\n*Note Manipulating Spacing::, for more details on the '\\x' escape and\nthe 'ls' request.\n\n-- Request: .pvs [space]\n-- Request: .pvs +space\n-- Request: .pvs -space\n-- Register: \\n[.pvs]\nChange (increase, decrease) the post-vertical spacing by SPACE.\nThe default scaling indicator is 'p'.\n\nIf 'pvs' is called without an argument, the post-vertical spacing\nis reset to the previous value before the last call to 'pvs'.\n\n'gtroff' creates a warning of type 'range' if SPACE is zero or\nnegative; the vertical spacing is then set to zero.\n\nThe read-only number register '.pvs' contains the current\npost-vertical spacing; it is associated with the current\nenvironment (*note Environments::).\n\nFile: groff.info,  Node: Fractional Type Sizes,  Prev: Changing Type Sizes,  Up: Sizes\n\n\nA \"scaled point\" is equal to 1/SIZESCALE points, where SIZESCALE is\nspecified in the 'DESC' file (1 by default).  There is a new scale\nindicator 'z', which has the effect of multiplying by SIZESCALE.\nRequests and escape sequences in 'gtroff' interpret arguments that\nrepresent a point size as being in units of scaled points, but they\nevaluate each such argument using a default scale indicator of 'z'.\nArguments treated in this way are the argument to the 'ps' request, the\nthird argument to the 'cs' request, the second and fourth arguments to\nthe 'tkf' request, the argument to the '\\H' escape sequence, and those\nvariants of the '\\s' escape sequence that take a numeric expression as\ntheir argument (see below).\n\nFor example, suppose SIZESCALE is 1000; then a scaled point is\nequivalent to a millipoint; the request '.ps 10.25' is equivalent to\n'.ps 10.25z' and thus sets the point size to 10250 scaled points, which\nis equal to 10.25 points.\n\n'gtroff' disallows the use of the 'z' scale indicator in instances\nwhere it would make no sense, such as a numeric expression whose default\nscale indicator was neither 'u' nor 'z'.  Similarly it would make no\nsense to use a scaling indicator other than 'z' or 'u' in a numeric\nexpression whose default scale indicator was 'z', and so 'gtroff'\ndisallows this as well.\n\nThere is also new scale indicator 's', which multiplies by the number\nof units in a scaled point.  So, for example, '\\n[.ps]s' is equal to\n'1m'.  Be sure not to confuse the 's' and 'z' scale indicators.\n\n-- Register: \\n[.ps]\nA read-only number register returning the point size in scaled\npoints.\n\n'.ps' is associated with the current environment (*note\nEnvironments::).\n\n-- Register: \\n[.psr]\n-- Register: \\n[.sr]\nThe last-requested point size in scaled points is contained in the\n'.psr' read-only number register.  The last requested point size in\npoints as a decimal fraction can be found in '.sr'.  This is a\nstring-valued read-only number register.\n\nNote that the requested point sizes are device-independent, whereas\nthe values returned by the '.ps' and '.s' registers are not.  For\nexample, if a point size of 11pt is requested, and a 'sizes'\nrequest (or a 'sizescale' line in a 'DESC' file) specifies 10.95pt\ninstead, this value is actually used.\n\nBoth registers are associated with the current environment (*note\nEnvironments::).\n\nThe '\\s' escape has the following syntax for working with fractional\ntype sizes:\n\n'\\s[N]'\n'\\s'N''\nSet the point size to N scaled points; N is a numeric expression\nwith a default scale indicator of 'z'.\n\n'\\s[+N]'\n'\\s[-N]'\n'\\s+[N]'\n'\\s-[N]'\n'\\s'+N''\n'\\s'-N''\n'\\s+'N''\n'\\s-'N''\nIncrease or decrease the point size by N scaled points; N is a\nnumeric expression (which may start with a minus sign) with a\ndefault scale indicator of 'z'.\n\n*Note Font Files::.\n\nFile: groff.info,  Node: Strings,  Next: Conditionals and Loops,  Prev: Sizes,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.19 Strings",
                    "content": "'gtroff' has string variables, which are entirely for user convenience\n(i.e. there are no built-in strings except '.T', but even this is a\nread-write string variable).\n\nAlthough the following requests can be used to create strings, simply\nusing an undefined string will cause it to be defined as empty.  *Note\nIdentifiers::.\n\n-- Request: .ds name [string]\n-- Request: .ds1 name [string]\n-- Escape: \\*n\n-- Escape: \\*(nm\n-- Escape: \\*[name arg1 arg2 ...]\nDefine and access a string variable NAME (one-character name N,\ntwo-character name NM).  If NAME already exists, 'ds' overwrites\nthe previous definition.  Only the syntax form using brackets can\ntake arguments that are handled identically to macro arguments; the\nsingle exception is that a closing bracket as an argument must be\nenclosed in double quotes.  *Note Request and Macro Arguments::,\nand *note Parameters::.\n\nExample:\n\n.ds foo a \\\\$1 test\n.\nThis is \\*[foo nice].\n=> This is a nice test.\n\nThe '\\*' escape \"interpolates\" (expands in-place) a previously\ndefined string variable.  To be more precise, the stored string is\npushed onto the input stack, which is then parsed by 'gtroff'.\nSimilar to number registers, it is possible to nest strings, i.e.,\nstring variables can be called within string variables.\n\nIf the string named by the '\\*' escape does not exist, it is\ndefined as empty, and a warning of type 'mac' is emitted (see *note\nDebugging::, for more details).\n\n*Caution:* Unlike other requests, the second argument to the 'ds'\nrequest takes up the entire line including trailing spaces.  This\nmeans that comments on a line with such a request can introduce\nunwanted space into a string.\n\n.ds TeX T\\h'-.2m'\\v'.2m'E\\v'-.2m'\\h'-.1m'X \\\" Knuth's TeX\n\nInstead the comment should be put on another line or have the\ncomment escape adjacent with the end of the string.\n\n.ds TeX T\\h'-.2m'\\v'.2m'E\\v'-.2m'\\h'-.1m'X\\\" Knuth's TeX\n\nTo produce leading space the string can be started with a double\nquote.  No trailing quote is needed; in fact, any trailing quote is\nincluded in your string.\n\n.ds sign \"           Yours in a white wine sauce,\n\nStrings are not limited to a single line of text.  A string can\nspan several lines by escaping the newlines with a backslash.  The\nresulting string is stored without the newlines.\n\n.ds foo lots and lots \\\nof text are on these \\\nnext several lines\n\nIt is not possible to have real newlines in a string.  To put a\nsingle double quote character into a string, use two consecutive\ndouble quote characters.\n\nThe 'ds1' request turns off compatibility mode while interpreting a\nstring.  To be more precise, a \"compatibility save\" input token is\ninserted at the beginning of the string, and a \"compatibility\nrestore\" input token at the end.\n\n.nr xxx 12345\n.ds aa The value of xxx is \\\\n[xxx].\n.ds1 bb The value of xxx is \\\\n[xxx].\n.\n.cp 1\n.\n\\*(aa\n=> warning: number register `[' not defined\n=> The value of xxx is 0xxx].\n\\*(bb\n=> The value of xxx is 12345.\n\nStrings, macros, and diversions (and boxes) share the same name\nspace.  Internally, even the same mechanism is used to store them.\nThis has some interesting consequences.  For example, it is\npossible to call a macro with string syntax and vice versa.\n\n.de xxx\na funny test.\n..\nThis is \\*[xxx]\n=> This is a funny test.\n\n.ds yyy a funny test\nThis is\n.yyy\n=> This is a funny test.\n\nIn particular, interpolating a string does not hide existing macro\narguments.  Thus in a macro, a more efficient way of doing\n\n.xx \\\\$@\n\nis\n\n\\\\*[xx]\\\\\n\nNote that the latter calling syntax doesn't change the value of\n'\\$0', which is then inherited from the calling macro.\n\nDiversions and boxes can be also called with string syntax.\n\nAnother consequence is that you can copy one-line diversions or\nboxes to a string.\n\n.di xxx\na \\fItest\\fR\n.br\n.di\n.ds yyy This is \\*[xxx]\\c\n\\*[yyy].\n=> This is a test.\n\nAs the previous example shows, it is possible to store formatted\noutput in strings.  The '\\c' escape prevents the insertion of an\nadditional blank line in the output.\n\nCopying diversions longer than a single output line produces\nunexpected results.\n\n.di xxx\na funny\n.br\ntest\n.br\n.di\n.ds yyy This is \\*[xxx]\\c\n\\*[yyy].\n=> test This is a funny.\n\nUsually, it is not predictable whether a diversion contains one or\nmore output lines, so this mechanism should be avoided.  With Unix\n'troff', this was the only solution to strip off a final newline\nfrom a diversion.  Another disadvantage is that the spaces in the\ncopied string are already formatted, making them unstretchable.\nThis can cause ugly results.\n\nA clean solution to this problem is available in GNU 'troff', using\nthe requests 'chop' to remove the final newline of a diversion, and\n'unformat' to make the horizontal spaces stretchable again.\n\n.box xxx\na funny\n.br\ntest\n.br\n.box\n.chop xxx\n.unformat xxx\nThis is \\*[xxx].\n=> This is a funny test.\n\n*Note Gtroff Internals::, for more information.\n\n-- Request: .as name [string]\n-- Request: .as1 name [string]\nThe 'as' request is similar to 'ds' but appends STRING to the\nstring stored as NAME instead of redefining it.  If NAME doesn't\nexist yet, it is created.\n\n.as sign \" with shallots, onions and garlic,\n\nThe 'as1' request is similar to 'as', but compatibility mode is\nswitched off while the appended string is interpreted.  To be more\nprecise, a \"compatibility save\" input token is inserted at the\nbeginning of the appended string, and a \"compatibility restore\"\ninput token at the end.\n\nRudimentary string manipulation routines are given with the next two\nrequests.\n\n-- Request: .substring str n1 [n2]\nReplace the string named STR with the substring defined by the\nindices N1 and N2.  The first character in the string has index 0.\nIf N2 is omitted, it is implicitly set to the largest valid value\n(the string length minus one).  If the index value N1 or N2 is\nnegative, it is counted from the end of the string, going\nbackwards: The last character has index -1, the character before\nthe last character has index -2, etc.\n\n.ds xxx abcdefgh\n.substring xxx 1 -4\n\\*[xxx]\n=> bcde\n.substring xxx 2\n\\*[xxx]\n=> de\n\n-- Request: .length reg str\nCompute the number of characters of STR and return it in the number\nregister REG.  If REG doesn't exist, it is created.  'str' is read\nin copy mode.\n\n.ds xxx abcd\\h'3i'efgh\n.length yyy \\*[xxx]\n\\n[yyy]\n=> 14\n\n-- Request: .rn xx yy\nRename the request, macro, diversion, or string XX to YY.\n\n-- Request: .rm xx\nRemove the request, macro, diversion, or string XX.  'gtroff'\ntreats subsequent invocations as if the object had never been\ndefined.\n\n-- Request: .als new old\nCreate an alias named NEW for the request, string, macro, or\ndiversion object named OLD.  The new name and the old name are\nexactly equivalent (it is similar to a hard rather than a soft\nlink).  If OLD is undefined, 'gtroff' generates a warning of type\n'mac' and ignores the request.\n\nTo understand how the 'als' request works it is probably best to\nthink of two different pools: one pool for objects (macros,\nstrings, etc.), and another one for names.  As soon as an object is\ndefined, 'gtroff' adds it to the object pool, adds its name to the\nname pool, and creates a link between them.  When 'als' creates an\nalias, it adds a new name to the name pool that gets linked to the\nsame object as the old name.\n\nNow consider this example.\n\n.de foo\n..\n.\n.als bar foo\n.\n.de bar\n.  foo\n..\n.\n.bar\n=> input stack limit exceeded\n\nThe definition of macro 'bar' replaces the old object this name is\nlinked to.  However, the alias to 'foo' is still active!  In other\nwords, 'foo' is still linked to the same object as 'bar', and the\nresult of calling 'bar' is an infinite, recursive loop that finally\nleads to an error.\n\nTo undo an alias, simply call 'rm' on the aliased name.  The object\nitself is not destroyed until there are no more aliases.\n\n-- Request: .chop xx\nRemove (chop) the last character from the macro, string, or\ndiversion named XX.  This is useful for removing the newline from\nthe end of diversions that are to be interpolated as strings.  This\ncommand can be used repeatedly; see *note Gtroff Internals::, for\ndetails on nodes inserted additionally by 'gtroff'.\n\n*Note Identifiers::, and *note Comments::.\n\nFile: groff.info,  Node: Conditionals and Loops,  Next: Writing Macros,  Prev: Strings,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.20 Conditionals and Loops",
                    "content": "* Menu:\n\n* Operators in Conditionals::\n* if-else::\n* while::\n\nFile: groff.info,  Node: Operators in Conditionals,  Next: if-else,  Prev: Conditionals and Loops,  Up: Conditionals and Loops\n\n\nIn 'if', 'ie', and 'while' requests, in addition to ordinary *note\nExpressions::, there are several more operators available:\n\n'e'\n'o'\nTrue if the current page is even or odd numbered (respectively).\n\n'n'\nTrue if the document is being processed in nroff mode (i.e., the\n'.nroff' command has been issued).  *Note Troff and Nroff Mode::.\n\n't'\nTrue if the document is being processed in troff mode (i.e., the\n'.troff' command has been issued).  *Note Troff and Nroff Mode::.\n\n'v'\nAlways false.  This condition is for compatibility with other\n'troff' versions only (identifying a '-Tversatec' device).\n\n''XXX'YYY''\nTrue if the output produced by XXX is equal to the output produced\nby YYY.  Other characters can be used in place of the single\nquotes; the same set of delimiters as for the '\\D' escape is used\n(*note Escapes::).  'gtroff' formats XXX and YYY in separate\nenvironments; after the comparison the resulting data is discarded.\n\n.ie \"|\"\\fR|\\fP\" \\\ntrue\n.el \\\nfalse\n=> true\n\nThe resulting motions, glyph sizes, and fonts have to match,(1)\n(*note Operators in Conditionals-Footnote-1::) and not the\nindividual motion, size, and font requests.  In the previous\nexample, '|' and '\\fR|\\fP' both result in a roman '|' glyph with\nthe same point size and at the same location on the page, so the\nstrings are equal.  If '.ft I' had been added before the '.ie', the\nresult would be \"false\" because (the first) '|' produces an italic\n'|' rather than a roman one.\n\nTo compare strings without processing, surround the data with '\\?'.\n\n.ie \"\\?|\\?\"\\?\\fR|\\fP\\?\" \\\ntrue\n.el \\\nfalse\n=> false\n\nSince data protected with '\\?' is read in copy-in mode it is even\npossible to use incomplete input without causing an error.\n\n.ds a \\[\n.ds b \\[\n.ie '\\?\\*a\\?'\\?\\*b\\?' \\\ntrue\n.el \\\nfalse\n=> true\n\n'r XXX'\nTrue if there is a number register named XXX.\n\n'd XXX'\nTrue if there is a string, macro, diversion, or request named XXX.\n\n'm XXX'\nTrue if there is a color named XXX.\n\n'c G'\nTrue if there is a glyph G available(2) (*note Operators in\nConditionals-Footnote-2::); G is either an ASCII character or a\nspecial character ('\\N'XXX'', '\\(GG' or '\\[GGG]'); the condition is\nalso true if G has been defined by the 'char' request.\n\n'F FONT'\nTrue if a font named FONT exists.  FONT is handled as if it was\nopened with the 'ft' request (that is, font translation and styles\nare applied), without actually mounting it.\n\nThis test doesn't load the complete font but only its header to\nverify its validity.\n\n'S STYLE'\nTrue if style STYLE has been registered.  Font translation is\napplied.\n\nNote that these operators can't be combined with other operators like\n':' or '&'; only a leading '!' (without whitespace between the\nexclamation mark and the operator) can be used to negate the result.\n\n.nr xxx 1\n.ie !r xxx \\\ntrue\n.el \\\nfalse\n=> false\n\nA whitespace after '!' always evaluates to zero (this bizarre\nbehaviour is due to compatibility with Unix 'troff').\n\n.nr xxx 1\n.ie ! r xxx \\\ntrue\n.el \\\nfalse\n=> r xxx true\n\nIt is possible to omit the whitespace before the argument to the 'r',\n'd', and 'c' operators.\n\n*Note Expressions::.\n\nFile: groff.info,  Node: if-else,  Next: while,  Prev: Operators in Conditionals,  Up: Conditionals and Loops\n\n\n'gtroff' has if-then-else constructs like other languages, although the\nformatting can be painful.\n\n-- Request: .if expr anything\n\nEvaluate the expression EXPR, and executes ANYTHING (the remainder\nof the line) if EXPR evaluates to a value greater than zero (true).\nANYTHING is interpreted as though it was on a line by itself\n(except that leading spaces are swallowed).  *Note Operators in\nConditionals::, for more info.\n\n.nr xxx 1\n.nr yyy 2\n.if ((\\n[xxx] == 1) & (\\n[yyy] == 2)) true\n=> true\n\n-- Request: .nop anything\nExecutes ANYTHING.  This is similar to '.if 1'.\n\n-- Request: .ie expr anything\n-- Request: .el anything\nUse the 'ie' and 'el' requests to write an if-then-else.  The first\nrequest is the 'if' part and the latter is the 'else' part.\n\n.ie n .ls 2 \\\" double-spacing in nroff\n.el   .ls 1 \\\" single-spacing in troff\n\n-- Escape: \\{\n-- Escape: \\}\nIn many cases, an if (or if-else) construct needs to execute more\nthan one request.  This can be done using the escapes '\\{' (which\nmust start the first line) and '\\}' (which must end the last line).\n\n.ie t \\{\\\n.    ds lq ``\n.    ds rq ''\n.\\}\n.el \\{\\\n.    ds lq \"\"\n.    ds rq \"\"\n.\\}\n\n*Note Expressions::.\n\nFile: groff.info,  Node: while,  Prev: if-else,  Up: Conditionals and Loops\n\n\n'gtroff' provides a looping construct using the 'while' request, which\nis used much like the 'if' (and related) requests.\n\n-- Request: .while expr anything\nEvaluate the expression EXPR, and repeatedly execute ANYTHING (the\nremainder of the line) until EXPR evaluates to 0.\n\n.nr a 0 1\n.while (\\na < 9) \\{\\\n\\n+a,\n.\\}\n\\n+a\n=> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10\n\nSome remarks.\n\n* The body of a 'while' request is treated like the body of a\n'de' request: 'gtroff' temporarily stores it in a macro that\nis deleted after the loop has been exited.  It can\nconsiderably slow down a macro if the body of the 'while'\nrequest (within the macro) is large.  Each time the macro is\nexecuted, the 'while' body is parsed and stored again as a\ntemporary macro.\n\n.de xxx\n.  nr num 10\n.  while (\\\\n[num] > 0) \\{\\\n.    \\\" many lines of code\n.    nr num -1\n.  \\}\n..\n\nThe traditional and often better solution (Unix 'troff'\ndoesn't have the 'while' request) is to use a recursive macro\ninstead that is parsed only once during its definition.\n\n.de yyy\n.  if (\\\\n[num] > 0) \\{\\\n.    \\\" many lines of code\n.    nr num -1\n.    yyy\n.  \\}\n..\n.\n.de xxx\n.  nr num 10\n.  yyy\n..\n\nNote that the number of available recursion levels is set\nto 1000 (this is a compile-time constant value of 'gtroff').\n\n* The closing brace of a 'while' body must end a line.\n\n.if 1 \\{\\\n.  nr a 0 1\n.  while (\\n[a] < 10) \\{\\\n.    nop \\n+[a]\n.\\}\\}\n=> unbalanced \\{ \\}\n\n-- Request: .break\nBreak out of a 'while' loop.  Be sure not to confuse this with the\n'br' request (causing a line break).\n\n-- Request: .continue\nFinish the current iteration of a 'while' loop, immediately\nrestarting the next iteration.\n\n*Note Expressions::.\n\nFile: groff.info,  Node: Writing Macros,  Next: Page Motions,  Prev: Conditionals and Loops,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.21 Writing Macros",
                    "content": "A \"macro\" is a collection of text and embedded commands that can be\ninvoked multiple times.  Use macros to define common operations.  *Note\nStrings::, for a (limited) alternative syntax to call macros.\n\nAlthough the following requests can be used to create macros, simply\nusing an undefined macro will cause it to be defined as empty.  *Note\nIdentifiers::.\n\n-- Request: .de name [end]\n-- Request: .de1 name [end]\n-- Request: .dei name [end]\n-- Request: .dei1 name [end]\nDefine a new macro named NAME.  'gtroff' copies subsequent lines\n(starting with the next one) into an internal buffer until it\nencounters the line '..' (two dots).  If the optional second\nargument to 'de' is present it is used as the macro closure request\ninstead of '..'.\n\nThere can be whitespace after the first dot in the line containing\nthe ending token (either '.' or macro 'END').  Don't insert a tab\ncharacter immediately after the '..', otherwise it isn't recognized\nas the end-of-macro symbol.(1)  (*note Writing Macros-Footnote-1::)\n\nHere a small example macro called 'P' that causes a break and\ninserts some vertical space.  It could be used to separate\nparagraphs.\n\n.de P\n.  br\n.  sp .8v\n..\n\nThe following example defines a macro within another.  Remember\nthat expansion must be protected twice; once for reading the macro\nand once for executing.\n\n\\# a dummy macro to avoid a warning\n.de end\n..\n.\n.de foo\n.  de bar end\n.    nop \\f[B]Hello \\\\\\\\$1!\\f[]\n.  end\n..\n.\n.foo\n.bar Joe\n=> Hello Joe!\n\nSince '\\f' has no expansion, it isn't necessary to protect its\nbackslash.  Had we defined another macro within 'bar' that takes a\nparameter, eight backslashes would be necessary before '$1'.\n\nThe 'de1' request turns off compatibility mode while executing the\nmacro.  On entry, the current compatibility mode is saved and\nrestored at exit.\n\n.nr xxx 12345\n.\n.de aa\nThe value of xxx is \\\\n[xxx].\n..\n.de1 bb\nThe value of xxx is \\\\n[xxx].\n..\n.\n.cp 1\n.\n.aa\n=> warning: number register `[' not defined\n=> The value of xxx is 0xxx].\n.bb\n=> The value of xxx is 12345.\n\nThe 'dei' request defines a macro indirectly.  That is, it expands\nstrings whose names are NAME or END before performing the append.\n\nThis:\n\n.ds xx aa\n.ds yy bb\n.dei xx yy\n\nis equivalent to:\n\n.de aa bb\n\nThe 'dei1' request is similar to 'dei' but with compatibility mode\nswitched off during execution of the defined macro.\n\nIf compatibility mode is on, 'de' (and 'dei') behave similar to\n'de1' (and 'dei1'): A 'compatibility save' token is inserted at the\nbeginning, and a 'compatibility restore' token at the end, with\ncompatibility mode switched on during execution.  *Note Gtroff\nInternals::, for more information on switching compatibility mode\non and off in a single document.\n\nUsing 'trace.tmac', you can trace calls to 'de' and 'de1'.\n\nNote that macro identifiers are shared with identifiers for strings\nand diversions.\n\n*Note the description of the 'als' request: als, for possible\npitfalls if redefining a macro that has been aliased.\n\n-- Request: .am name [end]\n-- Request: .am1 name [end]\n-- Request: .ami name [end]\n-- Request: .ami1 name [end]\nWorks similarly to 'de' except it appends onto the macro named\nNAME.  So, to make the previously defined 'P' macro actually do\nindented instead of block paragraphs, add the necessary code to the\nexisting macro like this:\n\n.am P\n.ti +5n\n..\n\nThe 'am1' request turns off compatibility mode while executing the\nappended macro piece.  To be more precise, a \"compatibility save\"\ninput token is inserted at the beginning of the appended code, and\na \"compatibility restore\" input token at the end.\n\nThe 'ami' request appends indirectly, meaning that 'gtroff' expands\nstrings whose names are NAME or END before performing the append.\n\nThe 'ami1' request is similar to 'ami' but compatibility mode is\nswitched off during execution of the defined macro.\n\nUsing 'trace.tmac', you can trace calls to 'am' and 'am1'.\n\n*Note Strings::, for the 'als' and 'rn' request to create an alias\nand rename a macro, respectively.\n\nThe 'de', 'am', 'di', 'da', 'ds', and 'as' requests (together with\ntheir variants) only create a new object if the name of the macro,\ndiversion or string is currently undefined or if it is defined to be a\nrequest; normally they modify the value of an existing object.\n\n-- Request: .return [anything]\nExit a macro, immediately returning to the caller.\n\nIf called with an argument, exit twice, namely the current macro\nand the macro one level higher.  This is used to define a wrapper\nmacro for 'return' in 'trace.tmac'.\n\n* Menu:\n\n* Copy-in Mode::\n* Parameters::\n\nFile: groff.info,  Node: Copy-in Mode,  Next: Parameters,  Prev: Writing Macros,  Up: Writing Macros\n\n\nWhen 'gtroff' reads in the text for a macro, string, or diversion, it\ncopies the text (including request lines, but excluding escapes) into an\ninternal buffer.  Escapes are converted into an internal form, except\nfor '\\n', '\\$', '\\*', '\\\\' and '\\<RET>', which are evaluated and\ninserted into the text where the escape was located.  This is known as\n\"copy-in\" mode or \"copy\" mode.\n\nWhat this means is that you can specify when these escapes are to be\nevaluated (either at copy-in time or at the time of use) by insulating\nthe escapes with an extra backslash.  Compare this to the '\\def' and\n'\\edef' commands in TeX.\n\nThe following example prints the numbers 20 and 10:\n\n.nr x 20\n.de y\n.nr x 10\n\\&\\nx\n\\&\\\\nx\n..\n.y\n\nFile: groff.info,  Node: Parameters,  Prev: Copy-in Mode,  Up: Writing Macros\n\n\nThe arguments to a macro or string can be examined using a variety of\nescapes.\n\n-- Register: \\n[.$]\nThe number of arguments passed to a macro or string.  This is a\nread-only number register.\n\nNote that the 'shift' request can change its value.\n\nAny individual argument can be retrieved with one of the following\nescapes:\n\n-- Escape: \\$n\n-- Escape: \\$(nn\n-- Escape: \\$[nnn]\nRetrieve the Nth, NNth or NNNth argument.  As usual, the first form\nonly accepts a single number (larger than zero), the second a\ntwo-digit number (larger or equal to 10), and the third any\npositive integer value (larger than zero).  Macros and strings can\nhave an unlimited number of arguments.  Note that due to copy-in\nmode, use two backslashes on these in actual use to prevent\ninterpolation until the macro is actually invoked.\n\n-- Request: .shift [n]\nShift the arguments 1 position, or as many positions as specified\nby its argument.  After executing this request, argument I becomes\nargument I-N; arguments 1 to N are no longer available.  Shifting\nby negative amounts is currently undefined.\n\nThe register '.$' is adjusted accordingly.\n\n-- Escape: \\$*\n-- Escape: \\$@\nIn some cases it is convenient to use all of the arguments at once\n(for example, to pass the arguments along to another macro).  The\n'\\$*' escape concatenates all the arguments separated by spaces.  A\nsimilar escape is '\\$@', which concatenates all the arguments with\neach surrounded by double quotes, and separated by spaces.  If not\nin compatibility mode, the input level of double quotes is\npreserved (see *note Request and Macro Arguments::).\n\n-- Escape: \\$^\nHandle the parameters of a macro as if they were an argument to the\n'ds' or similar requests.\n\n.de foo\n.  tm $1=`\\\\$1'\n.  tm $2=`\\\\$2'\n.  tm $*=`\\\\$*'\n.  tm $@=`\\\\$@'\n.  tm $^=`\\\\$^'\n..\n.foo \" This is a \"test\"\n=> $1=` This is a '\n=> $2=`test\"'\n=> $*=` This is a  test\"'\n=> $@=`\" This is a \" \"test\"\"'\n=> $^=`\" This is a \"test\"'\n\nThis escape is useful mainly for macro packages like 'trace.tmac',\nwhich redefines some requests and macros for debugging purposes.\n\n-- Escape: \\$0\nThe name used to invoke the current macro.  The 'als' request can\nmake a macro have more than one name.\n\nIf a macro is called as a string (within another macro), the value\nof '\\$0' isn't changed.\n\n.de foo\n.  tm \\\\$0\n..\n.als foo bar\n.\n.de aaa\n.  foo\n..\n.de bbb\n.  bar\n..\n.de ccc\n\\\\*[foo]\\\\\n..\n.de ddd\n\\\\*[bar]\\\\\n..\n.\n.aaa\n=> foo\n.bbb\n=> bar\n.ccc\n=> ccc\n.ddd\n=> ddd\n\n*Note Request and Macro Arguments::.\n\nFile: groff.info,  Node: Page Motions,  Next: Drawing Requests,  Prev: Writing Macros,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.22 Page Motions",
                    "content": "*Note Manipulating Spacing::, for a discussion of the main request for\nvertical motion, 'sp'.\n\n-- Request: .mk [reg]\n-- Request: .rt [dist]\nThe request 'mk' can be used to mark a location on a page, for\nmovement to later.  This request takes a register name as an\nargument in which to store the current page location.  With no\nargument it stores the location in an internal register.  The\nresults of this can be used later by the 'rt' or the 'sp' request\n(or the '\\v' escape).\n\nThe 'rt' request returns upwards to the location marked with the\nlast 'mk' request.  If used with an argument, return to a position\nwhich distance from the top of the page is DIST (no previous call\nto 'mk' is necessary in this case).  Default scaling indicator is\n'v'.\n\nIf a page break occurs between a 'mk' request and its matching 'rt'\nrequest, the 'rt' is silently ignored.\n\nHere a primitive solution for a two-column macro.\n\n.nr column-length 1.5i\n.nr column-gap 4m\n.nr bottom-margin 1m\n.\n.de 2c\n.  br\n.  mk\n.  ll \\\\n[column-length]u\n.  wh -\\\\n[bottom-margin]u 2c-trap\n.  nr right-side 0\n..\n.\n.de 2c-trap\n.  ie \\\\n[right-side] \\{\\\n.    nr right-side 0\n.    po -(\\\\n[column-length]u + \\\\n[column-gap]u)\n.    \\\" remove trap\n.    wh -\\\\n[bottom-margin]u\n.  \\}\n.  el \\{\\\n.    \\\" switch to right side\n.    nr right-side 1\n.    po +(\\\\n[column-length]u + \\\\n[column-gap]u)\n.    rt\n.  \\}\n..\n.\n.pl 1.5i\n.ll 4i\nThis is a small test that shows how the\nrt request works in combination with mk.\n\n.2c\nStarting here, text is typeset in two columns.\nNote that this implementation isn't robust\nand thus not suited for a real two-column\nmacro.\n\nResult:\n\nThis is a small test that shows how the\nrt request works in combination with mk.\n\nStarting  here,    isn't    robust\ntext is typeset    and   thus  not\nin two columns.    suited  for   a\nNote that  this    real two-column\nimplementation     macro.\n\nThe following escapes give fine control of movements about the page.\n\n-- Escape: \\v'e'\nMove vertically, usually from the current location on the page (if\nno absolute position operator '|' is used).  The argument E\nspecifies the distance to move; positive is downwards and negative\nupwards.  The default scaling indicator for this escape is 'v'.\nBeware, however, that 'gtroff' continues text processing at the\npoint where the motion ends, so you should always balance motions\nto avoid interference with text processing.\n\n'\\v' doesn't trigger a trap.  This can be quite useful; for\nexample, consider a page bottom trap macro that prints a marker in\nthe margin to indicate continuation of a footnote or something\nsimilar.\n\nThere are some special-case escapes for vertical motion.\n\n-- Escape: \\r\nMove upwards 1v.\n\n-- Escape: \\u\nMove upwards .5v.\n\n-- Escape: \\d\nMove down .5v.\n\n-- Escape: \\h'e'\nMove horizontally, usually from the current location (if no\nabsolute position operator '|' is used).  The expression E\nindicates how far to move: positive is rightwards and negative\nleftwards.  The default scaling indicator for this escape is 'm'.\n\nThis horizontal space is not discarded at the end of a line.  To\ninsert discardable space of a certain length use the 'ss' request.\n\nThere are a number of special-case escapes for horizontal motion.\n\n-- Escape: \\<SP>\nAn unbreakable and unpaddable (i.e. not expanded during filling)\nspace.  (Note: This is a backslash followed by a space.)\n\n-- Escape: \\~\nAn unbreakable space that stretches like a normal inter-word space\nwhen a line is adjusted.\n\n-- Escape: \\|\nA 1/6th em space.  Ignored for TTY output devices (rounded to\nzero).\n\nHowever, if there is a glyph defined in the current font file with\nname '\\|' (note the leading backslash), the width of this glyph is\nused instead (even for TTYs).\n\n-- Escape: \\^\nA 1/12th em space.  Ignored for TTY output devices (rounded to\nzero).\n\nHowever, if there is a glyph defined in the current font file with\nname '\\^' (note the leading backslash), the width of this glyph is\nused instead (even for TTYs).\n\n-- Escape: \\0\nA space the size of a digit.\n\nThe following string sets the TeX logo:\n\n.ds TeX T\\h'-.1667m'\\v'.224m'E\\v'-.224m'\\h'-.125m'X\n\n-- Escape: \\w'text'\n-- Register: \\n[st]\n-- Register: \\n[sb]\n-- Register: \\n[rst]\n-- Register: \\n[rsb]\n-- Register: \\n[ct]\n-- Register: \\n[ssc]\n-- Register: \\n[skw]\nReturn the width of the specified TEXT in basic units.  This allows\nhorizontal movement based on the width of some arbitrary text (e.g.\ngiven as an argument to a macro).\n\nThe length of the string `abc' is \\w'abc'u.\n=> The length of the string `abc' is 72u.\n\nFont changes may occur in TEXT, which don't affect current\nsettings.\n\nAfter use, '\\w' sets several registers:\n\n'st'\n'sb'\nThe highest and lowest point of the baseline, respectively, in\nTEXT.\n\n'rst'\n'rsb'\nLike the 'st' and 'sb' registers, but takes account of the\nheights and depths of glyphs.  In other words, this gives the\nhighest and lowest point of TEXT.  Values below the baseline\nare negative.\n\n'ct'\nDefines the kinds of glyphs occurring in TEXT:\n\n0\nonly short glyphs, no descenders or tall glyphs.\n\n1\nat least one descender.\n\n2\nat least one tall glyph.\n\n3\nat least one each of a descender and a tall glyph.\n\n'ssc'\nThe amount of horizontal space (possibly negative) that should\nbe added to the last glyph before a subscript.\n\n'skw'\nHow far to right of the center of the last glyph in the '\\w'\nargument, the center of an accent from a roman font should be\nplaced over that glyph.\n\n-- Escape: \\kp\n-- Escape: \\k(ps\n-- Escape: \\k[position]\nStore the current horizontal position in the input line in number\nregister with name POSITION (one-character name P, two-character\nname PS).  Use this, for example, to return to the beginning of a\nstring for highlighting or other decoration.\n\n-- Register: \\n[hp]\nThe current horizontal position at the input line.\n\n-- Register: \\n[.k]\nA read-only number register containing the current horizontal\noutput position (relative to the current indentation).\n\n-- Escape: \\o'abc'\nOverstrike glyphs A, B, C, ...; the glyphs are centered, and the\nresulting spacing is the largest width of the affected glyphs.\n\n-- Escape: \\zg\nPrint glyph G with zero width, i.e., without spacing.  Use this to\noverstrike glyphs left-aligned.\n\n-- Escape: \\Z'anything'\nPrint ANYTHING, then restore the horizontal and vertical position.\nThe argument may not contain tabs or leaders.\n\nThe following is an example of a strike-through macro:\n\n.de ST\n.nr ww \\w'\\\\$1'\n\\Z@\\v'-.25m'\\l'\\\\n[ww]u'@\\\\$1\n..\n.\nThis is\n.ST \"a test\"\nan actual emergency!\n\nFile: groff.info,  Node: Drawing Requests,  Next: Traps,  Prev: Page Motions,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.23 Drawing Requests",
                    "content": "'gtroff' provides a number of ways to draw lines and other figures on\nthe page.  Used in combination with the page motion commands (see *note\nPage Motions::, for more info), a wide variety of figures can be drawn.\nHowever, for complex drawings these operations can be quite cumbersome,\nand it may be wise to use graphic preprocessors like 'gpic' or 'ggrn'.\n*Note gpic::, and *note ggrn::, for more information.\n\nAll drawing is done via escapes.\n\n-- Escape: \\l'l'\n-- Escape: \\l'lg'\nDraw a line horizontally.  L is the length of the line to be drawn.\nIf it is positive, start the line at the current location and draw\nto the right; its end point is the new current location.  Negative\nvalues are handled differently: The line starts at the current\nlocation and draws to the left, but the current location doesn't\nmove.\n\nL can also be specified absolutely (i.e. with a leading '|'), which\ndraws back to the beginning of the input line.  Default scaling\nindicator is 'm'.\n\nThe optional second parameter G is a glyph to draw the line with.\nIf this second argument is not specified, 'gtroff' uses the\nunderscore glyph, '\\[ru]'.\n\nTo separate the two arguments (to prevent 'gtroff' from\ninterpreting a drawing glyph as a scaling indicator if the glyph is\nrepresented by a single character) use '\\&'.\n\nHere a small useful example:\n\n.de box\n\\[br]\\\\$*\\[br]\\l'|0\\[rn]'\\l'|0\\[ul]'\n..\n\nNote that this works by outputting a box rule (a vertical line),\nthen the text given as an argument and then another box rule.\nFinally, the line drawing escapes both draw from the current\nlocation to the beginning of the input line - this works because\nthe line length is negative, not moving the current point.\n\n-- Escape: \\L'l'\n-- Escape: \\L'lg'\nDraw vertical lines.  Its parameters are similar to the '\\l'\nescape, except that the default scaling indicator is 'v'.  The\nmovement is downwards for positive values, and upwards for negative\nvalues.  The default glyph is the box rule glyph, '\\[br]'.  As with\nthe vertical motion escapes, text processing blindly continues\nwhere the line ends.\n\nThis is a \\L'3v'test.\n\nHere is the result, produced with 'grotty'.\n\nThis is a\n|\n|\n|test.\n\n-- Escape: \\D'command arg ...'\nThe '\\D' escape provides a variety of drawing functions.  Note that\non character devices, only vertical and horizontal lines are\nsupported within 'grotty'; other devices may only support a subset\nof the available drawing functions.\n\nThe default scaling indicator for all subcommands of '\\D' is 'm'\nfor horizontal distances and 'v' for vertical ones.  Exceptions are\n'\\D'f ...'' and '\\D't ...'', which use 'u' as the default, and\n'\\D'FX ...'', which arguments are treated similar to the 'defcolor'\nrequest.\n\n'\\D'l DX DY''\nDraw a line from the current location to the relative point\nspecified by (DX,DY), where positive values mean right and\ndown, respectively.  The end point of the line is the new\ncurrent location.\n\nThe following example is a macro for creating a box around a\ntext string; for simplicity, the box margin is taken as a\nfixed value, 0.2m.\n\n.de BOX\n.  nr @wd \\w'\\\\$1'\n\\h'.2m'\\\n\\h'-.2m'\\v'(.2m - \\\\n[rsb]u)'\\\n\\D'l 0 -(\\\\n[rst]u - \\\\n[rsb]u + .4m)'\\\n\\D'l (\\\\n[@wd]u + .4m) 0'\\\n\\D'l 0 (\\\\n[rst]u - \\\\n[rsb]u + .4m)'\\\n\\D'l -(\\\\n[@wd]u + .4m) 0'\\\n\\h'.2m'\\v'-(.2m - \\\\n[rsb]u)'\\\n\\\\$1\\\n\\h'.2m'\n..\n\nFirst, the width of the string is stored in register '@wd'.\nThen, four lines are drawn to form a box, properly offset by\nthe box margin.  The registers 'rst' and 'rsb' are set by the\n'\\w' escape, containing the largest height and depth of the\nwhole string.\n\n'\\D'c D''\nDraw a circle with a diameter of D with the leftmost point at\nthe current position.  After drawing, the current location is\npositioned at the rightmost point of the circle.\n\n'\\D'C D''\nDraw a solid circle with the same parameters and behaviour as\nan outlined circle.  No outline is drawn.\n\n'\\D'e X Y''\nDraw an ellipse with a horizontal diameter of X and a vertical\ndiameter of Y with the leftmost point at the current position.\nAfter drawing, the current location is positioned at the\nrightmost point of the ellipse.\n\n'\\D'E X Y''\nDraw a solid ellipse with the same parameters and behaviour as\nan outlined ellipse.  No outline is drawn.\n\n'\\D'a DX1 DY1 DX2 DY2''\nDraw an arc clockwise from the current location through the\ntwo specified relative locations (DX1,DY1) and (DX2,DY2).  The\ncoordinates of the first point are relative to the current\nposition, and the coordinates of the second point are relative\nto the first point.  After drawing, the current position is\nmoved to the final point of the arc.\n\n'\\D'~ DX1 DY1 DX2 DY2 ...''\nDraw a spline from the current location to the relative point\n(DX1,DY1) and then to (DX2,DY2), and so on.  The current\nposition is moved to the terminal point of the drawn curve.\n\n'\\D'f N''\nSet the shade of gray to be used for filling solid objects\nto N; N must be an integer between 0 and 1000, where 0\ncorresponds solid white and 1000 to solid black, and values in\nbetween correspond to intermediate shades of gray.  This\napplies only to solid circles, solid ellipses, and solid\npolygons.  By default, a level of 1000 is used.\n\nDespite of being silly, the current point is moved\nhorizontally to the right by N.\n\nDon't use this command!  It has the serious drawback that it\nis always rounded to the next integer multiple of the\nhorizontal resolution (the value of the 'hor' keyword in the\n'DESC' file).  Use '\\M' (*note Colors::) or '\\D'Fg ...''\ninstead.\n\n'\\D'p DX1 DY1 DX2 DY2 ...''\nDraw a polygon from the current location to the relative\nposition (DX1,DY1) and then to (DX2,DY2) and so on.  When the\nspecified data points are exhausted, a line is drawn back to\nthe starting point.  The current position is changed by adding\nthe sum of all arguments with odd index to the actual\nhorizontal position and the even ones to the vertical\nposition.\n\n'\\D'P DX1 DY1 DX2 DY2 ...''\nDraw a solid polygon with the same parameters and behaviour as\nan outlined polygon.  No outline is drawn.\n\nHere a better variant of the box macro to fill the box with\nsome color.  Note that the box must be drawn before the text\nsince colors in 'gtroff' are not transparent; the filled\npolygon would hide the text completely.\n\n.de BOX\n.  nr @wd \\w'\\\\$1'\n\\h'.2m'\\\n\\h'-.2m'\\v'(.2m - \\\\n[rsb]u)'\\\n\\M[lightcyan]\\\n\\D'P 0 -(\\\\n[rst]u - \\\\n[rsb]u + .4m) \\\n(\\\\n[@wd]u + .4m) 0 \\\n0 (\\\\n[rst]u - \\\\n[rsb]u + .4m) \\\n-(\\\\n[@wd]u + .4m) 0'\\\n\\h'.2m'\\v'-(.2m - \\\\n[rsb]u)'\\\n\\M[]\\\n\\\\$1\\\n\\h'.2m'\n..\n\nIf you want a filled polygon that has exactly the same size as\nan unfilled one, you must draw both an unfilled and a filled\npolygon.  A filled polygon is always smaller than an unfilled\none because the latter uses straight lines with a given line\nthickness to connect the polygon's corners, while the former\nsimply fills the area defined by the coordinates.\n\n\\h'1i'\\v'1i'\\\n\\# increase line thickness\n\\Z'\\D't 5p''\\\n\\# draw unfilled polygon\n\\Z'\\D'p 3 3 -6 0''\\\n\\# draw filled polygon\n\\Z'\\D'P 3 3 -6 0''\n\n'\\D't N''\nSet the current line thickness to N machine units.  A value of\nzero selects the smallest available line thickness.  A\nnegative value makes the line thickness proportional to the\ncurrent point size (this is the default behaviour of AT&T\n'troff').\n\nDespite of being silly, the current point is moved\nhorizontally to the right by N.\n\n'\\D'FSCHEME COLORCOMPONENTS''\nChange current fill color.  SCHEME is a single letter denoting\nthe color scheme: 'r' (rgb), 'c' (cmy), 'k' (cmyk), 'g'\n(gray), or 'd' (default color).  The color components use\nexactly the same syntax as in the 'defcolor' request (*note\nColors::); the command '\\D'Fd'' doesn't take an argument.\n\nNo position changing!\n\nExamples:\n\n\\D'Fg .3'      \\\" same gray as \\D'f 700'\n\\D'Fr #0000ff' \\\" blue\n\n*Note Graphics Commands::.\n\n-- Escape: \\b'string'\n\"Pile\" a sequence of glyphs vertically, and center it vertically on\nthe current line.  Use it to build large brackets and braces.\n\nHere an example how to create a large opening brace:\n\n\\b'\\[lt]\\[bv]\\[lk]\\[bv]\\[lb]'\n\nThe first glyph is on the top, the last glyph in STRING is at the\nbottom.  Note that 'gtroff' separates the glyphs vertically by 1m,\nand the whole object is centered 0.5m above the current baseline;\nthe largest glyph width is used as the width for the whole object.\nThis rather unflexible positioning algorithm doesn't work with\n'-Tdvi' since the bracket pieces vary in height for this device.\nInstead, use the 'eqn' preprocessor.\n\n*Note Manipulating Spacing::, how to adjust the vertical spacing\nwith the '\\x' escape.\n\nFile: groff.info,  Node: Traps,  Next: Diversions,  Prev: Drawing Requests,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.24 Traps",
                    "content": "\"Traps\" are locations that, when reached, call a specified macro.  These\ntraps can occur at a given location on the page, at a given location in\nthe current diversion, at a blank line, after a certain number of input\nlines, or at the end of input.\n\nSetting a trap is also called \"planting\".  It is also said that a\ntrap is \"sprung\" if the associated macro is executed.\n\n* Menu:\n\n* Page Location Traps::\n* Diversion Traps::\n* Input Line Traps::\n* Blank Line Traps::\n* Leading Spaces Traps::\n* End-of-input Traps::\n\nFile: groff.info,  Node: Page Location Traps,  Next: Diversion Traps,  Prev: Traps,  Up: Traps\n\n\n\"Page location traps\" perform an action when 'gtroff' reaches or passes\na certain vertical location on the page.  Page location traps have a\nvariety of purposes, including:\n\n* setting headers and footers\n\n* setting body text in multiple columns\n\n* setting footnotes\n\n-- Request: .vpt flag\n-- Register: \\n[.vpt]\nEnable vertical position traps if FLAG is non-zero, or disables\nthem otherwise.  Vertical position traps are traps set by the 'wh'\nor 'dt' requests.  Traps set by the 'it' request are not vertical\nposition traps.  The parameter that controls whether vertical\nposition traps are enabled is global.  Initially vertical position\ntraps are enabled.  The current setting of this is available in the\n'.vpt' read-only number register.\n\nNote that a page can't be ejected if 'vpt' is set to zero.\n\n-- Request: .wh dist [macro]\nSet a page location trap.  Non-negative values for DIST set the\ntrap relative to the top of the page; negative values set the trap\nrelative to the bottom of the page.  Default scaling indicator is\n'v'; values of DIST are always rounded to be multiples of the\nvertical resolution (as given in register '.V').\n\nMACRO is the name of the macro to execute when the trap is sprung.\nIf MACRO is missing, remove the first trap (if any) at DIST.\n\nThe following is a simple example of how many macro packages set\nheaders and footers.\n\n.de hd                \\\" Page header\n'  sp .5i\n.  tl 'Title''date'\n'  sp .3i\n..\n.\n.de fo                \\\" Page footer\n'  sp 1v\n.  tl ''%''\n'  bp\n..\n.\n.wh 0   hd            \\\" trap at top of the page\n.wh -1i fo            \\\" trap one inch from bottom\n\nA trap at or below the bottom of the page is ignored; it can be\nmade active by either moving it up or increasing the page length so\nthat the trap is on the page.\n\nNegative trap values always use the current page length; they are\nnot converted to an absolute vertical position:\n\n.pl 5i\n.wh -1i xx\n.ptr\n=> xx      -240\n.pl 100i\n.ptr\n=> xx      -240\n\nIt is possible to have more than one trap at the same location; to\ndo so, the traps must be defined at different locations, then moved\ntogether with the 'ch' request; otherwise the second trap would\nreplace the first one.  Earlier defined traps hide later defined\ntraps if moved to the same position (the many empty lines caused by\nthe 'bp' request are omitted in the following example):\n\n.de a\n.  nop a\n..\n.de b\n.  nop b\n..\n.de c\n.  nop c\n..\n.\n.wh 1i a\n.wh 2i b\n.wh 3i c\n.bp\n=> a b c\n.ch b 1i\n.ch c 1i\n.bp\n=> a\n.ch a 0.5i\n.bp\n=> a b\n\n-- Register: \\n[.t]\nA read-only number register holding the distance to the next trap.\n\nIf there are no traps between the current position and the bottom\nof the page, it contains the distance to the page bottom.  In a\ndiversion, the distance to the page bottom is infinite (the\nreturned value is the biggest integer that can be represented in\n'groff') if there are no diversion traps.\n\n-- Request: .ch macro [dist]\nChange the location of a trap.  The first argument is the name of\nthe macro to be invoked at the trap, and the second argument is the\nnew location for the trap (note that the parameters are specified\nin opposite order as in the 'wh' request).  This is useful for\nbuilding up footnotes in a diversion to allow more space at the\nbottom of the page for them.\n\nDefault scaling indicator for DIST is 'v'.  If DIST is missing, the\ntrap is removed.\n\n-- Register: \\n[.ne]\nThe read-only number register '.ne' contains the amount of space\nthat was needed in the last 'ne' request that caused a trap to be\nsprung.  Useful in conjunction with the '.trunc' register.  *Note\nPage Control::, for more information.\n\nSince the '.ne' register is only set by traps it doesn't make much\nsense to use it outside of trap macros.\n\n-- Register: \\n[.trunc]\nA read-only register containing the amount of vertical space\ntruncated from an 'sp' request by the most recently sprung vertical\nposition trap, or, if the trap was sprung by an 'ne' request, minus\nthe amount of vertical motion produced by the 'ne' request.  In\nother words, at the point a trap is sprung, it represents the\ndifference of what the vertical position would have been but for\nthe trap, and what the vertical position actually is.\n\nSince the '.trunc' register is only set by traps it doesn't make\nmuch sense to use it outside of trap macros.\n\n-- Register: \\n[.pe]\nA read-only register that is set to 1 while a page is ejected with\nthe 'bp' request (or by the end of input).\n\nOutside of traps this register is always zero.  In the following\nexample, only the second call to 'x' is caused by 'bp'.\n\n.de x\n\\&.pe=\\\\n[.pe]\n.br\n..\n.wh 1v x\n.wh 4v x\nA line.\n.br\nAnother line.\n.br\n=> A line.\n.pe=0\nAnother line.\n\n.pe=1\n\nAn important fact to consider while designing macros is that\ndiversions and traps do not interact normally.  For example, if a trap\ninvokes a header macro (while outputting a diversion) that tries to\nchange the font on the current page, the effect is not visible before\nthe diversion has completely been printed (except for input protected\nwith '\\!' or '\\?') since the data in the diversion is already formatted.\nIn most cases, this is not the expected behaviour.\n\nFile: groff.info,  Node: Diversion Traps,  Next: Input Line Traps,  Prev: Page Location Traps,  Up: Traps\n\n\n-- Request: .dt [dist macro]\nSet a trap within a diversion.  DIST is the location of the trap\n(identical to the 'wh' request; default scaling indicator is 'v')\nand MACRO is the name of the macro to be invoked.  If called\nwithout arguments, the diversion trap is removed.\n\nNote that there exists only a single diversion trap.\n\nThe number register '.t' still works within diversions.  *Note\nDiversions::, for more information.\n\nFile: groff.info,  Node: Input Line Traps,  Next: Blank Line Traps,  Prev: Diversion Traps,  Up: Traps\n\n\n-- Request: .it n macro\n-- Request: .itc n macro\nSet an input line trap.  N is the number of lines of input that may\nbe read before springing the trap, MACRO is the macro to be\ninvoked.  Request lines are not counted as input lines.\n\nFor example, one possible use is to have a macro that prints the\nnext N lines in a bold font.\n\n.de B\n.  it \\\\$1 B-end\n.  ft B\n..\n.\n.de B-end\n.  ft R\n..\n\nThe 'itc' request is identical except that an interrupted text line\n(ending with '\\c') is not counted as a separate line.\n\nBoth requests are associated with the current environment (*note\nEnvironments::); switching to another environment disables the\ncurrent input trap, and going back reactivates it, restoring the\nnumber of already processed lines.\n\nFile: groff.info,  Node: Blank Line Traps,  Next: Leading Spaces Traps,  Prev: Input Line Traps,  Up: Traps\n\n\n-- Request: .blm macro\nSet a blank line trap.  'gtroff' executes MACRO when it encounters\na blank line in the input file.\n\nFile: groff.info,  Node: Leading Spaces Traps,  Next: End-of-input Traps,  Prev: Blank Line Traps,  Up: Traps\n\n\n-- Request: .lsm macro\n-- Register: \\n[lsn]\n-- Register: \\n[lss]\nSet a leading spaces trap.  'gtroff' executes MACRO when it\nencounters leading spaces in an input line; the implicit line break\nthat normally happens in this case is suppressed.  A line\nconsisting of spaces only, however, is treated as an empty line,\npossibly subject to an empty line macro set with the 'blm' request.\n\nLeading spaces are removed from the input line before calling the\nleading spaces macro.  The number of removed spaces is stored in\nregister 'lsn'; the horizontal space that would be emitted if there\nwas no leading space macro is stored in register 'lss'.  Note that\n'lsn' and 'lss' are available even if no leading space macro has\nbeen set.\n\nThe first thing a leading space macro sees is a token.  However,\nsome escapes like '\\f' or '\\m' are handled on the fly (see *note\nGtroff Internals::, for a complete list) without creating a token\nat all.  Consider that a line starts with two spaces followed by\n'\\fIfoo'.  While skipping the spaces '\\fI' is handled too so that\ngroff's current font is properly set to 'I', but the leading space\nmacro only sees 'foo', without the preceding '\\fI'.  If the macro\nshould see the font escape you have to 'protect' it with something\nthat creates a token, for example with '\\&\\fIfoo'.\n\nFile: groff.info,  Node: End-of-input Traps,  Prev: Leading Spaces Traps,  Up: Traps\n\n\n-- Request: .em macro\nSet a trap at the end of input.  MACRO is executed after the last\nline of the input file has been processed.\n\nFor example, if the document had to have a section at the bottom of\nthe last page for someone to approve it, the 'em' request could be\nused.\n\n.de approval\n\\c\n.  ne 3v\n.  sp (\\\\n[.t]u - 3v)\n.  in +4i\n.  lc\n.  br\nApproved:\\t\\a\n.  sp\nDate:\\t\\t\\a\n..\n.\n.em approval\n\nThe '\\c' in the above example needs explanation.  For historical\nreasons (and for compatibility with AT&T 'troff'), the end macro\nexits as soon as it causes a page break and no remaining data is in\nthe partially collected line.\n\nLet us assume that there is no '\\c' in the above 'approval' macro,\nand that the page is full and has been ended with, say, a 'br'\nrequest.  The 'ne' request now causes the start of a new page,\nwhich in turn makes 'troff' exit immediately for the reasons just\ndescribed.  In most situations this is not intended.\n\nTo always force processing the whole end macro independently of\nthis behaviour it is thus advisable to insert something that starts\nan empty partially filled line ('\\c') whenever there is a chance\nthat a page break can happen.  In the above example, the call of\nthe 'ne' request assures that the remaining code stays on the same\npage, so we have to insert '\\c' only once.\n\nThe next example shows how to append three lines, then starting a\nnew page unconditionally.  Since '.ne 1' doesn't give the desired\neffect - there is always one line available or we are already at\nthe beginning of the next page - we temporarily increase the page\nlength by one line so that we can use '.ne 2'.\n\n.de EM\n.pl +1v\n\\c\n.ne 2\nline one\n.br\n\\c\n.ne 2\nline two\n.br\n\\c\n.ne 2\nline three\n.br\n.pl -1v\n\\c\n'bp\n..\n.em EM\n\nNote that this specific feature affects only the first potential\npage break caused by the end macro; further page breaks emitted by\nthe end macro are handled normally.\n\nAnother possible use of the 'em' request is to make 'gtroff' emit a\nsingle large page instead of multiple pages.  For example, one may\nwant to produce a long plain-text file for reading on-screen.  The\nidea is to set the page length at the beginning of the document to\na very large value to hold all the text, and automatically adjust\nit to the exact height of the document after the text has been\noutput.\n\n.de adjust-page-length\n.  br\n.  pl \\\\n[nl]u \\\" \\n[nl] holds the current vert. position\n..\n.\n.de single-page-mode\n.  pl 99999\n.  em adjust-page-length\n..\n.\n.\\\" activate the above code\n.single-page-mode\n\nSince only one end-of-input trap does exist and other macro\npackages may already use it, care must be taken not to break the\nmechanism.  A simple solution would be to append the above macro to\nthe macro package's end-of-input macro using the '.am' request.\n\nFile: groff.info,  Node: Diversions,  Next: Environments,  Prev: Traps,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.25 Diversions",
                    "content": "In 'gtroff' it is possible to \"divert\" text into a named storage area.\nDue to the similarity to defining macros it is sometimes said to be\nstored in a macro.  This is used for saving text for output at a later\ntime, which is useful for keeping blocks of text on the same page,\nfootnotes, tables of contents, and indices.\n\nFor orthogonality it is said that 'gtroff' is in the \"top-level\ndiversion\" if no diversion is active (i.e., the data is diverted to the\noutput device).\n\nAlthough the following requests can be used to create diversions,\nsimply using an undefined diversion will cause it to be defined as\nempty.  *Note Identifiers::.\n\n-- Request: .di macro\n-- Request: .da macro\nBegin a diversion.  Like the 'de' request, it takes an argument of\na macro name to divert subsequent text into.  The 'da' macro\nappends to an existing diversion.\n\n'di' or 'da' without an argument ends the diversion.\n\nThe current partially filled line is included into the diversion.\nSee the 'box' request below for an example.  Note that switching to\nanother (empty) environment (with the 'ev' request) avoids the\ninclusion of the current partially filled line.\n\n-- Request: .box macro\n-- Request: .boxa macro\nBegin (or append to) a diversion like the 'di' and 'da' requests.\nThe difference is that 'box' and 'boxa' do not include a partially\nfilled line in the diversion.\n\nCompare this:\n\nBefore the box.\n.box xxx\nIn the box.\n.br\n.box\nAfter the box.\n.br\n=> Before the box.  After the box.\n.xxx\n=> In the box.\n\nwith this:\n\nBefore the diversion.\n.di yyy\nIn the diversion.\n.br\n.di\nAfter the diversion.\n.br\n=> After the diversion.\n.yyy\n=> Before the diversion.  In the diversion.\n\n'box' or 'boxa' without an argument ends the diversion.\n\n-- Register: \\n[.z]\n-- Register: \\n[.d]\nDiversions may be nested.  The read-only number register '.z'\ncontains the name of the current diversion (this is a string-valued\nregister).  The read-only number register '.d' contains the current\nvertical place in the diversion.  If not in a diversion it is the\nsame as register 'nl'.\n\n-- Register: \\n[.h]\nThe \"high-water mark\" on the current page or in the current\ndiversion.  It corresponds to the text baseline of the lowest line\non the page.  This is a read-only register.\n\n.tm .h==\\n[.h], nl==\\n[nl]\n=> .h==0, nl==-1\nThis is a test.\n.br\n.sp 2\n.tm .h==\\n[.h], nl==\\n[nl]\n=> .h==40, nl==120\n\nAs can be seen in the previous example, empty lines are not\nconsidered in the return value of the '.h' register.\n\n-- Register: \\n[dn]\n-- Register: \\n[dl]\nAfter completing a diversion, the read-write number registers 'dn'\nand 'dl' contain the vertical and horizontal size of the diversion.\nNote that only the just processed lines are counted: For the\ncomputation of 'dn' and 'dl', the requests 'da' and 'boxa' are\nhandled as if 'di' and 'box' had been used - lines that have been\nalready stored in a macro are not taken into account.\n\n.\\\" Center text both horizontally & vertically\n.\n.\\\" Enclose macro definitions in .eo and .ec\n.\\\" to avoid the doubling of the backslash\n.eo\n.\\\" macro .(c starts centering mode\n.de (c\n.  br\n.  ev (c\n.  evc 0\n.  in 0\n.  nf\n.  di @c\n..\n.\\\" macro .)c terminates centering mode\n.de )c\n.  br\n.  ev\n.  di\n.  nr @s (((\\n[.t]u - \\n[dn]u) / 2u) - 1v)\n.  sp \\n[@s]u\n.  ce 1000\n.  @c\n.  ce 0\n.  sp \\n[@s]u\n.  br\n.  fi\n.  rr @s\n.  rm @c\n..\n.\\\" End of macro definitions, restore escape mechanism\n.ec\n\n-- Escape: \\!\n-- Escape: \\?anything\\?\nPrevent requests, macros, and escapes from being interpreted when\nread into a diversion.  Both escapes take the given text and\n\"transparently\" embed it into the diversion.  This is useful for\nmacros that shouldn't be invoked until the diverted text is\nactually output.\n\nThe '\\!' escape transparently embeds text up to and including the\nend of the line.  The '\\?' escape transparently embeds text until\nthe next occurrence of the '\\?' escape.  Example:\n\n\\?ANYTHING\\?\n\nANYTHING may not contain newlines; use '\\!' to embed newlines in a\ndiversion.  The escape sequence '\\?' is also recognized in copy\nmode and turned into a single internal code; it is this code that\nterminates ANYTHING.  Thus the following example prints 4.\n\n.nr x 1\n.nf\n.di d\n\\?\\\\?\\\\\\\\?\\\\\\\\\\\\\\\\nx\\\\\\\\?\\\\?\\?\n.di\n.nr x 2\n.di e\n.d\n.di\n.nr x 3\n.di f\n.e\n.di\n.nr x 4\n.f\n\nBoth escapes read the data in copy mode.\n\nIf '\\!' is used in the top-level diversion, its argument is\ndirectly embedded into the 'gtroff' intermediate output.  This can\nbe used for example to control a postprocessor that processes the\ndata before it is sent to the device driver.\n\nThe '\\?' escape used in the top-level diversion produces no output\nat all; its argument is simply ignored.\n\n-- Request: .output string\nEmit STRING directly to the 'gtroff' intermediate output (subject\nto copy mode interpretation); this is similar to '\\!' used at the\ntop level.  An initial double quote in STRING is stripped off to\nallow initial blanks.\n\nThis request can't be used before the first page has started - if\nyou get an error, simply insert '.br' before the 'output' request.\n\nWithout argument, 'output' is ignored.\n\nUse with caution!  It is normally only needed for mark-up used by a\npostprocessor that does something with the output before sending it\nto the output device, filtering out STRING again.\n\n-- Request: .asciify div\n\"Unformat\" the diversion specified by DIV in such a way that ASCII\ncharacters, characters translated with the 'trin' request, space\ncharacters, and some escape sequences that were formatted and\ndiverted are treated like ordinary input characters when the\ndiversion is reread.  It can be also used for gross hacks; for\nexample, the following sets register 'n' to 1.\n\n.tr @.\n.di x\n@nr n 1\n.br\n.di\n.tr @@\n.asciify x\n.x\n\nNote that 'asciify' cannot return all items in a diversion back to\ntheir source equivalent, nodes such as '\\N[...]' will still remain\nas nodes, so the result cannot be guaranteed to be a pure string.\n\n*Note Copy-in Mode::.\n\n-- Request: .unformat div\nLike 'asciify', unformat the specified diversion.  However,\n'unformat' only unformats spaces and tabs between words.\nUnformatted tabs are treated as input tokens, and spaces are\nstretchable again.\n\nThe vertical size of lines is not preserved; glyph information\n(font, font size, space width, etc.) is retained.\n\nFile: groff.info,  Node: Environments,  Next: Suppressing output,  Prev: Diversions,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.26 Environments",
                    "content": "It happens frequently that some text should be printed in a certain\nformat regardless of what may be in effect at the time, for example, in\na trap invoked macro to print headers and footers.  To solve this\n'gtroff' processes text in \"environments\".  An environment contains most\nof the parameters that control text processing.  It is possible to\nswitch amongst these environments; by default 'gtroff' processes text in\nenvironment 0.  The following is the information kept in an environment.\n\n* font parameters (size, family, style, glyph height and slant, space\nand sentence space size)\n\n* page parameters (line length, title length, vertical spacing, line\nspacing, indentation, line numbering, centering, right-justifying,\nunderlining, hyphenation data)\n\n* fill and adjust mode\n\n* tab stops, tab and leader characters, escape character, no-break\nand hyphen indicators, margin character data\n\n* partially collected lines\n\n* input traps\n\n* drawing and fill colours\n\nThese environments may be given arbitrary names (see *note\nIdentifiers::, for more info).  Old versions of 'troff' only had\nenvironments named '0', '1', and '2'.\n\n-- Request: .ev [env]\n-- Register: \\n[.ev]\nSwitch to another environment.  The argument ENV is the name of the\nenvironment to switch to.  With no argument, 'gtroff' switches back\nto the previous environment.  There is no limit on the number of\nnamed environments; they are created the first time that they are\nreferenced.  The '.ev' read-only register contains the name or\nnumber of the current environment.  This is a string-valued\nregister.\n\nNote that a call to 'ev' (with argument) pushes the previously\nactive environment onto a stack.  If, say, environments 'foo',\n'bar', and 'zap' are called (in that order), the first 'ev' request\nwithout parameter switches back to environment 'bar' (which is\npopped off the stack), and a second call switches back to\nenvironment 'foo'.\n\nHere is an example:\n\n.ev footnote-env\n.fam N\n.ps 6\n.vs 8\n.ll -.5i\n.ev\n\n...\n\n.ev footnote-env\n\\(dg Note the large, friendly letters.\n.ev\n\n-- Request: .evc env\nCopy the environment ENV into the current environment.\n\nThe following environment data is not copied:\n\n* Partially filled lines.\n\n* The status whether the previous line was interrupted.\n\n* The number of lines still to center, or to right-justify, or\nto underline (with or without underlined spaces); they are set\nto zero.\n\n* The status whether a temporary indentation is active.\n\n* Input traps and its associated data.\n\n* Line numbering mode is disabled; it can be reactivated with\n'.nm +0'.\n\n* The number of consecutive hyphenated lines (set to zero).\n\n-- Register: \\n[.w]\n-- Register: \\n[.cht]\n-- Register: \\n[.cdp]\n-- Register: \\n[.csk]\nThe '\\n[.w]' register contains the width of the last glyph added to\nthe current environment.\n\nThe '\\n[.cht]' register contains the height of the last glyph added\nto the current environment.\n\nThe '\\n[.cdp]' register contains the depth of the last glyph added\nto the current environment.  It is positive for glyphs extending\nbelow the baseline.\n\nThe '\\n[.csk]' register contains the \"skew\" (how far to the right\nof the glyph's center that 'gtroff' should place an accent) of the\nlast glyph added to the current environment.\n\n-- Register: \\n[.n]\nThe '\\n[.n]' register contains the length of the previous output\nline in the current environment.\n\nFile: groff.info,  Node: Suppressing output,  Next: Colors,  Prev: Environments,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.27 Suppressing output",
                    "content": "-- Escape: \\Onum\nDisable or enable output depending on the value of NUM:\n\n'\\O0'\nDisable any glyphs from being emitted to the device driver,\nprovided that the escape occurs at the outer level (see\n'\\O[3]' and '\\O[4]').  Motion is not suppressed so effectively\n'\\O[0]' means pen up.\n\n'\\O1'\nEnable output of glyphs, provided that the escape occurs at\nthe outer level.\n\n'\\O0' and '\\O1' also reset the four registers 'opminx', 'opminy',\n'opmaxx', and 'opmaxy' to -1.  *Note Register Index::.  These four\nregisters mark the top left and bottom right hand corners of a box\nthat encompasses all written glyphs.\n\nFor example the input text:\n\nHello \\O[0]world \\O[1]this is a test.\n\nproduces the following output:\n\nHello       this is a test.\n\n'\\O2'\nProvided that the escape occurs at the outer level, enable\noutput of glyphs and also write out to 'stderr' the page\nnumber and four registers encompassing the glyphs previously\nwritten since the last call to '\\O'.\n\n'\\O3'\nBegin a nesting level.  At start-up, 'gtroff' is at outer\nlevel.  The current level is contained within the read-only\nregister '.O'.  *Note Built-in Registers::.\n\n'\\O4'\nEnd a nesting level.  The current level is contained within\nthe read-only register '.O'.  *Note Built-in Registers::.\n\n'\\O[5PFILENAME]'\nThis escape is 'grohtml' specific.  Provided that this escape\noccurs at the outer nesting level write the 'filename' to\n'stderr'.  The position of the image, P, must be specified and\nmust be one of 'l', 'r', 'c', or 'i' (left, right, centered,\ninline).  FILENAME is associated with the production of the\nnext inline image.\n\nFile: groff.info,  Node: Colors,  Next: I/O,  Prev: Suppressing output,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.28 Colors",
                    "content": "-- Request: .color [n]\n-- Register: \\n[.color]\nIf N is missing or non-zero, activate colors (this is the default);\notherwise, turn it off.\n\nThe read-only number register '.color' is 1 if colors are active,\n0 otherwise.\n\nInternally, 'color' sets a global flag; it does not produce a\ntoken.  Similar to the 'cp' request, you should use it at the\nbeginning of your document to control color output.\n\nColors can be also turned off with the '-c' command-line option.\n\n-- Request: .defcolor ident scheme colorcomponents\nDefine color with name IDENT.  SCHEME can be one of the following\nvalues: 'rgb' (three components), 'cmy' (three components), 'cmyk'\n(four components), and 'gray' or 'grey' (one component).\n\nColor components can be given either as a hexadecimal string or as\npositive decimal integers in the range 0-65535.  A hexadecimal\nstring contains all color components concatenated.  It must start\nwith either '#' or '##'; the former specifies hex values in the\nrange 0-255 (which are internally multiplied by 257), the latter in\nthe range 0-65535.  Examples: '#FFC0CB' (pink), '##ffff0000ffff'\n(magenta).  The default color name value is device-specific\n(usually black).  It is possible that the default color for '\\m'\nand '\\M' is not identical.\n\nA new scaling indicator 'f' has been introduced, which multiplies\nits value by 65536; this makes it convenient to specify color\ncomponents as fractions in the range 0 to 1 (1f equals 65536u).\nExample:\n\n.defcolor darkgreen rgb 0.1f 0.5f 0.2f\n\nNote that 'f' is the default scaling indicator for the 'defcolor'\nrequest, thus the above statement is equivalent to\n\n.defcolor darkgreen rgb 0.1 0.5 0.2\n\n-- Request: .gcolor [color]\n-- Escape: \\mc\n-- Escape: \\m(co\n-- Escape: \\m[color]\n-- Register: \\n[.m]\nSet (glyph) drawing color.  The following examples show how to turn\nthe next four words red.\n\n.gcolor red\nthese are in red\n.gcolor\nand these words are in black.\n\n\\m[red]these are in red\\m[] and these words are in black.\n\nThe escape '\\m[]' returns to the previous color, as does a call to\n'gcolor' without an argument.\n\nThe name of the current drawing color is available in the\nread-only, string-valued number register '.m'.\n\nThe drawing color is associated with the current environment (*note\nEnvironments::).\n\nNote that '\\m' doesn't produce an input token in 'gtroff'.  As a\nconsequence, it can be used in requests like 'mc' (which expects a\nsingle character as an argument) to change the color on the fly:\n\n.mc \\m[red]x\\m[]\n\n-- Request: .fcolor [color]\n-- Escape: \\Mc\n-- Escape: \\M(co\n-- Escape: \\M[color]\n-- Register: \\n[.M]\nSet fill (background) color for filled objects drawn with the\n'\\D'...'' commands.\n\nA red ellipse can be created with the following code:\n\n\\M[red]\\h'0.5i'\\D'E 2i 1i'\\M[]\n\nThe escape '\\M[]' returns to the previous fill color, as does a\ncall to 'fcolor' without an argument.\n\nThe name of the current fill (background) color is available in the\nread-only, string-valued number register '.M'.\n\nThe fill color is associated with the current environment (*note\nEnvironments::).\n\nNote that '\\M' doesn't produce an input token in 'gtroff'.\n\nFile: groff.info,  Node: I/O,  Next: Postprocessor Access,  Prev: Colors,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.29 I/O",
                    "content": "'gtroff' has several requests for including files:\n\n-- Request: .so file\nRead in the specified FILE and includes it in place of the 'so'\nrequest.  This is quite useful for large documents, e.g. keeping\neach chapter in a separate file.  *Note gsoelim::, for more\ninformation.\n\nSince 'gtroff' replaces the 'so' request with the contents of\n'file', it makes a difference whether the data is terminated with a\nnewline or not: Assuming that file 'xxx' contains the word 'foo'\nwithout a final newline, this\n\nThis is\n.so xxx\nbar\n\nyields 'This is foobar'.\n\nThe search path for FILE can be controlled with the '-I'\ncommand-line option.\n\n-- Request: .pso command\nRead the standard output from the specified COMMAND and includes it\nin place of the 'pso' request.\n\nThis request causes an error if used in safer mode (which is the\ndefault).  Use 'groff''s or 'troff''s '-U' option to activate\nunsafe mode.\n\nThe comment regarding a final newline for the 'so' request is valid\nfor 'pso' also.\n\n-- Request: .mso file\nIdentical to the 'so' request except that 'gtroff' searches for the\nspecified FILE in the same directories as macro files for the '-m'\ncommand-line option.  If the file name to be included has the form\n'NAME.tmac' and it isn't found, 'mso' tries to include 'tmac.NAME'\nand vice versa.  If the file does not exist, a warning of type\n'file' is emitted.  *Note Debugging::, for information about\nwarnings.\n\n-- Request: .trf file\n-- Request: .cf file\nTransparently output the contents of FILE.  Each line is output as\nif it were preceded by '\\!'; however, the lines are not subject\nto copy mode interpretation.  If the file does not end with a\nnewline, then a newline is added ('trf' only).  For example, to\ndefine a macro 'x' containing the contents of file 'f', use\n\n.ev 1\n.di x\n.trf f\n.di\n.ev\n\nThe calls to 'ev' prevent that the current partial input line\nbecomes part of the diversion.\n\nBoth 'trf' and 'cf', when used in a diversion, embeds an object in\nthe diversion which, when reread, causes the contents of FILE to be\ntransparently copied through to the output.  In Unix 'troff', the\ncontents of FILE is immediately copied through to the output\nregardless of whether there is a current diversion; this behaviour\nis so anomalous that it must be considered a bug.\n\nWhile 'cf' copies the contents of FILE completely unprocessed,\n'trf' disallows characters such as NUL that are not valid 'gtroff'\ninput characters (*note Identifiers::).\n\nFor 'cf', within a diversion, 'completely unprocessed' means that\neach line of a file to be inserted is handled as if it were\npreceded by '\\!\\\\!'.\n\nBoth requests cause a line break.\n\n-- Request: .nx [file]\nForce 'gtroff' to continue processing of the file specified as an\nargument.  If no argument is given, immediately jump to the end of\nfile.\n\n-- Request: .rd [prompt [arg1 arg2 ...]]\nRead from standard input, and include what is read as though it\nwere part of the input file.  Text is read until a blank line is\nencountered.\n\nIf standard input is a TTY input device (keyboard), write PROMPT to\nstandard error, followed by a colon (or send BEL for a beep if no\nargument is given).\n\nArguments after PROMPT are available for the input.  For example,\nthe line\n\n.rd data foo bar\n\nwith the input 'This is \\$2.' prints\n\nThis is bar.\n\nUsing the 'nx' and 'rd' requests, it is easy to set up form letters.\nThe form letter template is constructed like this, putting the following\nlines into a file called 'repeat.let':\n\n.ce\n\\*(td\n.sp 2\n.nf\n.rd\n.sp\n.rd\n.fi\nBody of letter.\n.bp\n.nx repeat.let\n\nWhen this is run, a file containing the following lines should be\nredirected in.  Note that requests included in this file are executed as\nthough they were part of the form letter.  The last block of input is\nthe 'ex' request, which tells 'groff' to stop processing.  If this was\nnot there, 'groff' would not know when to stop.\n\nTrent A. Fisher\n708 NW 19th Av., #202\nPortland, OR  97209\n\nDear Trent,\n\nLen Adollar\n4315 Sierra Vista\nSan Diego, CA  92103\n\nDear Mr. Adollar,\n\n.ex\n\n-- Request: .pi pipe\nPipe the output of 'gtroff' to the shell command(s) specified by\nPIPE.  This request must occur before 'gtroff' has a chance to\nprint anything.\n\n'pi' causes an error if used in safer mode (which is the default).\nUse 'groff''s or 'troff''s '-U' option to activate unsafe mode.\n\nMultiple calls to 'pi' are allowed, acting as a chain.  For\nexample,\n\n.pi foo\n.pi bar\n...\n\nis the same as '.pi foo | bar'.\n\nNote that the intermediate output format of 'gtroff' is piped to\nthe specified commands.  Consequently, calling 'groff' without the\n'-Z' option normally causes a fatal error.\n\n-- Request: .sy cmds\n-- Register: \\n[systat]\nExecute the shell command(s) specified by CMDS.  The output is not\nsaved anyplace, so it is up to the user to do so.\n\nThis request causes an error if used in safer mode (which is the\ndefault).  Use 'groff''s or 'troff''s '-U' option to activate\nunsafe mode.\n\nFor example, the following code fragment introduces the current\ntime into a document:\n\n.sy perl -e 'printf \".nr H %d\\\\n.nr M %d\\\\n.nr S %d\\\\n\",\\\n(localtime(time))[2,1,0]' > /tmp/x\\n[$$]\n.so /tmp/x\\n[$$]\n.sy rm /tmp/x\\n[$$]\n\\nH:\\nM:\\nS\n\nNote that this works by having the 'perl' script (run by 'sy')\nprint out the 'nr' requests that set the number registers 'H', 'M',\nand 'S', and then reads those commands in with the 'so' request.\n\nFor most practical purposes, the number registers 'seconds',\n'minutes', and 'hours', which are initialized at start-up of\n'gtroff', should be sufficient.  Use the 'af' request to get a\nformatted output:\n\n.af hours 00\n.af minutes 00\n.af seconds 00\n\\n[hours]:\\n[minutes]:\\n[seconds]\n\nThe 'systat' read-write number register contains the return value\nof the 'system()' function executed by the last 'sy' request.\n\n-- Request: .open stream file\n-- Request: .opena stream file\nOpen the specified FILE for writing and associates the specified\nSTREAM with it.\n\nThe 'opena' request is like 'open', but if the file exists, append\nto it instead of truncating it.\n\nBoth 'open' and 'opena' cause an error if used in safer mode (which\nis the default).  Use 'groff''s or 'troff''s '-U' option to\nactivate unsafe mode.\n\n-- Request: .write stream data\n-- Request: .writec stream data\nWrite to the file associated with the specified STREAM.  The stream\nmust previously have been the subject of an open request.  The\nremainder of the line is interpreted as the 'ds' request reads its\nsecond argument: A leading '\"' is stripped, and it is read in\ncopy-in mode.\n\nThe 'writec' request is like 'write', but only 'write' appends a\nnewline to the data.\n\n-- Request: .writem stream xx\nWrite the contents of the macro or string XX to the file associated\nwith the specified STREAM.\n\nXX is read in copy mode, i.e., already formatted elements are\nignored.  Consequently, diversions must be unformatted with the\n'asciify' request before calling 'writem'.  Usually, this means a\nloss of information.\n\n-- Request: .close stream\nClose the specified STREAM; the stream is no longer an acceptable\nargument to the 'write' request.\n\nHere a simple macro to write an index entry.\n\n.open idx test.idx\n.\n.de IX\n.  write idx \\\\n[%] \\\\$*\n..\n.\n.IX test entry\n.\n.close idx\n\n-- Escape: \\Ve\n-- Escape: \\V(ev\n-- Escape: \\V[env]\nInterpolate the contents of the specified environment variable ENV\n(one-character name E, two-character name EV) as returned by the\nfunction 'getenv'.  '\\V' is interpreted in copy-in mode.\n\nFile: groff.info,  Node: Postprocessor Access,  Next: Miscellaneous,  Prev: I/O,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.30 Postprocessor Access",
                    "content": "There are two escapes that give information directly to the\npostprocessor.  This is particularly useful for embedding POSTSCRIPT\ninto the final document.\n\n-- Request: .device xxx\n-- Escape: \\X'xxx'\nEmbeds its argument into the 'gtroff' output preceded with 'x X'.\n\nThe escapes '\\&', '\\)', '\\%', and '\\:' are ignored within '\\X',\n'\\ ' and '\\~' are converted to single space characters.  All other\nescapes (except '\\\\', which produces a backslash) cause an error.\n\nContrary to '\\X', the 'device' request simply processes its\nargument in copy mode (*note Copy-in Mode::).\n\nIf the 'usecharnamesinspecial' keyword is set in the 'DESC'\nfile, special characters no longer cause an error; they are simply\noutput verbatim.  Additionally, the backslash is represented as\n'\\\\'.\n\n'usecharnamesinspecial' is currently used by 'grohtml' only.\n\n-- Request: .devicem xx\n-- Escape: \\Yn\n-- Escape: \\Y(nm\n-- Escape: \\Y[name]\nThis is approximately equivalent to '\\X'\\*[NAME]'' (one-character\nname N, two-character name NM).  However, the contents of the\nstring or macro NAME are not interpreted; also it is permitted for\nNAME to have been defined as a macro and thus contain newlines (it\nis not permitted for the argument to '\\X' to contain newlines).\nThe inclusion of newlines requires an extension to the Unix 'troff'\noutput format, and confuses drivers that do not know about this\nextension (*note Device Control Commands::).\n\n*Note Output Devices::.\n\nFile: groff.info,  Node: Miscellaneous,  Next: Gtroff Internals,  Prev: Postprocessor Access,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.31 Miscellaneous",
                    "content": "This section documents parts of 'gtroff' that cannot (yet) be\ncategorized elsewhere in this manual.\n\n-- Request: .nm [start [inc [space [indent]]]]\nPrint line numbers.  START is the line number of the next output\nline.  INC indicates which line numbers are printed.  For example,\nthe value 5 means to emit only line numbers that are multiples\nof 5; this defaults to 1.  SPACE is the space to be left between\nthe number and the text; this defaults to one digit space.  The\nfourth argument is the indentation of the line numbers, defaulting\nto zero.  Both SPACE and INDENT are given as multiples of digit\nspaces; they can be negative also.  Without any arguments, line\nnumbers are turned off.\n\n'gtroff' reserves three digit spaces for the line number (which is\nprinted right-justified) plus the amount given by INDENT; the\noutput lines are concatenated to the line numbers, separated by\nSPACE, and without reducing the line length.  Depending on the\nvalue of the horizontal page offset (as set with the 'po' request),\nline numbers that are longer than the reserved space stick out to\nthe left, or the whole line is moved to the right.\n\nParameters corresponding to missing arguments are not changed; any\nnon-digit argument (to be more precise, any argument starting with\na character valid as a delimiter for identifiers) is also treated\nas missing.\n\nIf line numbering has been disabled with a call to 'nm' without an\nargument, it can be reactivated with '.nm +0', using the previously\nactive line numbering parameters.\n\nThe parameters of 'nm' are associated with the current environment\n(*note Environments::).  The current output line number is\navailable in the number register 'ln'.\n\n.po 1m\n.ll 2i\nThis test shows how line numbering works with groff.\n.nm 999\nThis test shows how line numbering works with groff.\n.br\n.nm xxx 3 2\n.ll -\\w'0'u\nThis test shows how line numbering works with groff.\n.nn 2\nThis test shows how line numbering works with groff.\n\nAnd here the result:\n\nThis  test shows how\nline numbering works\n999 with   groff.   This\n1000 test shows how  line\n1001 numbering works with\n1002 groff.\nThis test shows how\nline      numbering\nworks  with  groff.\nThis test shows how\n1005  line      numbering\nworks with groff.\n\n-- Request: .nn [skip]\nTemporarily turn off line numbering.  The argument is the number of\nlines not to be numbered; this defaults to 1.\n\n-- Request: .mc glyph [dist]\nPrint a \"margin character\" to the right of the text.(1)  (*note\nMiscellaneous-Footnote-1::) The first argument is the glyph to be\nprinted.  The second argument is the distance away from the right\nmargin.  If missing, the previously set value is used; default is\n10pt).  For text lines that are too long (that is, longer than the\ntext length plus DIST), the margin character is directly appended\nto the lines.\n\nWith no arguments the margin character is turned off.  If this\noccurs before a break, no margin character is printed.\n\nFor compatibility with AT&T 'troff', a call to 'mc' to set the\nmargin character can't be undone immediately; at least one line\ngets a margin character.  Thus\n\n.ll 1i\n.mc \\[br]\n.mc\nxxx\n.br\nxxx\n\nproduces\n\nxxx        |\nxxx\n\nFor empty lines and lines produced by the 'tl' request no margin\ncharacter is emitted.\n\nThe margin character is associated with the current environment\n(*note Environments::).\n\nThis is quite useful for indicating text that has changed, and, in\nfact, there are programs available for doing this (they are called\n'nrchbar' and 'changebar' and can be found in any\n'comp.sources.unix' archive).\n\n.ll 3i\n.mc |\nThis paragraph is highlighted with a margin\ncharacter.\n.sp\nNote that vertical space isn't marked.\n.br\n\\&\n.br\nBut we can fake it with `\\&'.\n\nResult:\n\nThis  paragraph is highlighted |\nwith a margin character.       |\n\nNote that vertical space isn't |\nmarked.                        |\n|\nBut we can fake it with `\\&'.  |\n\n-- Request: .psbb filename\n-- Register: \\n[llx]\n-- Register: \\n[lly]\n-- Register: \\n[urx]\n-- Register: \\n[ury]\nRetrieve the bounding box of the POSTSCRIPT image found in\nFILENAME.  The file must conform to Adobe's \"Document Structuring\nConventions\" (DSC); the command searches for a '%%BoundingBox'\ncomment and extracts the bounding box values into the number\nregisters 'llx', 'lly', 'urx', and 'ury'.  If an error occurs (for\nexample, 'psbb' cannot find the '%%BoundingBox' comment), it sets\nthe four number registers to zero.\n\nThe search path for FILENAME can be controlled with the '-I'\ncommand-line option.\n\nFile: groff.info,  Node: Gtroff Internals,  Next: Debugging,  Prev: Miscellaneous,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.32 'gtroff' Internals",
                    "content": "'gtroff' processes input in three steps.  One or more input characters\nare converted to an \"input token\".(1)  (*note Gtroff\nInternals-Footnote-1::) Then, one or more input tokens are converted to\nan \"output node\".  Finally, output nodes are converted to the\nintermediate output language understood by all output devices.\n\nActually, before step one happens, 'gtroff' converts certain escape\nsequences into reserved input characters (not accessible by the user);\nsuch reserved characters are used for other internal processing also -\nthis is the very reason why not all characters are valid input.  *Note\nIdentifiers::, for more on this topic.\n\nFor example, the input string 'fi\\[:u]' is converted into a character\ntoken 'f', a character token 'i', and a special token ':u' (representing\nu umlaut).  Later on, the character tokens 'f' and 'i' are merged to a\nsingle output node representing the ligature glyph 'fi' (provided the\ncurrent font has a glyph for this ligature); the same happens with ':u'.\nAll output glyph nodes are 'processed', which means that they are\ninvariably associated with a given font, font size, advance width, etc.\nDuring the formatting process, 'gtroff' itself adds various nodes to\ncontrol the data flow.\n\nMacros, diversions, and strings collect elements in two chained\nlists: a list of input tokens that have been passed unprocessed, and a\nlist of output nodes.  Consider the following the diversion.\n\n.di xxx\na\n\\!b\nc\n.br\n.di\n\nIt contains these elements.\n\nnode list            token list   element number\n\nline start node      --           1\nglyph node 'a'       --           2\nword space node      --           3\n--                   'b'          4\n--                   '\\n'         5\nglyph node 'c'       --           6\nvertical size node   --           7\nvertical size node   --           8\n--                   '\\n'         9\n\nElements 1, 7, and 8 are inserted by 'gtroff'; the latter two (which are\nalways present) specify the vertical extent of the last line, possibly\nmodified by '\\x'.  The 'br' request finishes the current partial line,\ninserting a newline input token, which is subsequently converted to a\nspace when the diversion is reread.  Note that the word space node has a\nfixed width that isn't stretchable anymore.  To convert horizontal space\nnodes back to input tokens, use the 'unformat' request.\n\nMacros only contain elements in the token list (and the node list is\nempty); diversions and strings can contain elements in both lists.\n\nNote that the 'chop' request simply reduces the number of elements in\na macro, string, or diversion by one.  Exceptions are \"compatibility\nsave\" and \"compatibility ignore\" input tokens, which are ignored.  The\n'substring' request also ignores those input tokens.\n\nSome requests like 'tr' or 'cflags' work on glyph identifiers only;\nthis means that the associated glyph can be changed without destroying\nthis association.  This can be very helpful for substituting glyphs.  In\nthe following example, we assume that glyph 'foo' isn't available by\ndefault, so we provide a substitution using the 'fchar' request and map\nit to input character 'x'.\n\n.fchar \\[foo] foo\n.tr x \\[foo]\n\nNow let us assume that we install an additional special font 'bar' that\nhas glyph 'foo'.\n\n.special bar\n.rchar \\[foo]\n\nSince glyphs defined with 'fchar' are searched before glyphs in special\nfonts, we must call 'rchar' to remove the definition of the fallback\nglyph.  Anyway, the translation is still active; 'x' now maps to the\nreal glyph 'foo'.\n\nMacro and request arguments preserve the compatibility mode:\n\n.cp 1     \\\" switch to compatibility mode\n.de xx\n\\\\$1\n..\n.cp 0     \\\" switch compatibility mode off\n.xx caf\\['e]\n=> cafe'\n\nSince compatibility mode is on while 'de' is called, the macro 'xx'\nactivates compatibility mode while executing.  Argument '$1' can still\nbe handled properly because it inherits the compatibility mode status\nwhich was active at the point where 'xx' is called.\n\nAfter expansion of the parameters, the compatibility save and restore\ntokens are removed.\n\nFile: groff.info,  Node: Debugging,  Next: Implementation Differences,  Prev: Gtroff Internals,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.33 Debugging",
                    "content": "'gtroff' is not easy to debug, but there are some useful features and\nstrategies for debugging.\n\n-- Request: .lf line [filename]\nChange the line number and optionally the file name 'gtroff' shall\nuse for error and warning messages.  LINE is the input line number\nof the next line.\n\nWithout argument, the request is ignored.\n\nThis is a debugging aid for documents that are split into many\nfiles, then put together with 'soelim' and other preprocessors.\nUsually, it isn't invoked manually.\n\nNote that other 'troff' implementations (including the original\nAT&T version) handle 'lf' differently.  For them, LINE changes the\nline number of the current line.\n\n-- Request: .tm string\n-- Request: .tm1 string\n-- Request: .tmc string\nSend STRING to the standard error output; this is very useful for\nprinting debugging messages among other things.\n\nSTRING is read in copy mode.\n\nThe 'tm' request ignores leading spaces of STRING; 'tm1' handles\nits argument similar to the 'ds' request: a leading double quote in\nSTRING is stripped to allow initial blanks.\n\nThe 'tmc' request is similar to 'tm1' but does not append a newline\n(as is done in 'tm' and 'tm1').\n\n-- Request: .ab [string]\nSimilar to the 'tm' request, except that it causes 'gtroff' to stop\nprocessing.  With no argument it prints 'User Abort.' to standard\nerror.\n\n-- Request: .ex\nThe 'ex' request also causes 'gtroff' to stop processing; see also\n*note I/O::.\n\nWhen doing something involved it is useful to leave the debugging\nstatements in the code and have them turned on by a command-line flag.\n\n.if \\n(DB .tm debugging output\n\nTo activate these statements say\n\ngroff -rDB=1 file\n\nIf it is known in advance that there are many errors and no useful\noutput, 'gtroff' can be forced to suppress formatted output with the\n'-z' flag.\n\n-- Request: .pev\nPrint the contents of the current environment and all the currently\ndefined environments (both named and numbered) on 'stderr'.\n\n-- Request: .pm\nPrint the entire symbol table on 'stderr'.  Names of all defined\nmacros, strings, and diversions are print together with their size\nin bytes.  Since 'gtroff' sometimes adds nodes by itself, the\nreturned size can be larger than expected.\n\nThis request differs from Unix 'troff': 'gtroff' reports the sizes\nof diversions, ignores an additional argument to print only the\ntotal of the sizes, and the size isn't returned in blocks of 128\ncharacters.\n\n-- Request: .pnr\nPrint the names and contents of all currently defined number\nregisters on 'stderr'.\n\n-- Request: .ptr\nPrint the names and positions of all traps (not including input\nline traps and diversion traps) on 'stderr'.  Empty slots in the\npage trap list are printed as well, because they can affect the\npriority of subsequently planted traps.\n\n-- Request: .fl\nInstruct 'gtroff' to flush its output immediately.  The intent is\nfor interactive use, but this behaviour is currently not\nimplemented in 'gtroff'.  Contrary to Unix 'troff', TTY output is\nsent to a device driver also ('grotty'), making it non-trivial to\ncommunicate interactively.\n\nThis request causes a line break.\n\n-- Request: .backtrace\nPrint a backtrace of the input stack to the standard error stream.\n\nConsider the following in file 'test':\n\n.de xxx\n.  backtrace\n..\n.de yyy\n.  xxx\n..\n.\n.yyy\n\nOn execution, 'gtroff' prints the following:\n\ntest:2: backtrace: macro `xxx'\ntest:5: backtrace: macro `yyy'\ntest:8: backtrace: file `test'\n\nThe option '-b' of 'gtroff' internally calls a variant of this\nrequest on each error and warning.\n\n-- Register: \\n[slimit]\nUse the 'slimit' number register to set the maximum number of\nobjects on the input stack.  If 'slimit' is less than or equal\nto 0, there is no limit set.  With no limit, a buggy recursive\nmacro can exhaust virtual memory.\n\nThe default value is 1000; this is a compile-time constant.\n\n-- Request: .warnscale si\nSet the scaling indicator used in warnings to SI.  Valid values for\nSI are 'u', 'i', 'c', 'p', and 'P'.  At startup, it is set to 'i'.\n\n-- Request: .spreadwarn [limit]\nMake 'gtroff' emit a warning if the additional space inserted for\neach space between words in an output line is larger or equal to\nLIMIT.  A negative value is changed to zero; no argument toggles\nthe warning on and off without changing LIMIT.  The default scaling\nindicator is 'm'.  At startup, 'spreadwarn' is deactivated, and\nLIMIT is set to 3m.\n\nFor example,\n\n.spreadwarn 0.2m\n\ncauses a warning if 'gtroff' must add 0.2m or more for each\ninterword space in a line.\n\nThis request is active only if text is justified to both margins\n(using '.ad b').\n\n'gtroff' has command-line options for printing out more warnings\n('-w') and for printing backtraces ('-b') when a warning or an error\noccurs.  The most verbose level of warnings is '-ww'.\n\n-- Request: .warn [flags]\n-- Register: \\n[.warn]\nControl the level of warnings checked for.  The FLAGS are the sum\nof the numbers associated with each warning that is to be enabled;\nall other warnings are disabled.  The number associated with each\nwarning is listed below.  For example, '.warn 0' disables all\nwarnings, and '.warn 1' disables all warnings except that about\nmissing glyphs.  If no argument is given, all warnings are enabled.\n\nThe read-only number register '.warn' contains the current warning\nlevel.\n\n* Menu:\n\n* Warnings::\n\nFile: groff.info,  Node: Warnings,  Prev: Debugging,  Up: Debugging\n\n\nThe warnings that can be given to 'gtroff' are divided into the\nfollowing categories.  The name associated with each warning is used by\nthe '-w' and '-W' options; the number is used by the 'warn' request and\nby the '.warn' register.\n\n'char'\n'1'\nNon-existent glyphs.(1)  (*note Warnings-Footnote-1::) This is\nenabled by default.\n\n'number'\n'2'\nInvalid numeric expressions.  This is enabled by default.  *Note\nExpressions::.\n\n'break'\n'4'\nIn fill mode, lines that could not be broken so that their length\nwas less than the line length.  This is enabled by default.\n\n'delim'\n'8'\nMissing or mismatched closing delimiters.\n\n'el'\n'16'\nUse of the 'el' request with no matching 'ie' request.  *Note\nif-else::.\n\n'scale'\n'32'\nMeaningless scaling indicators.\n\n'range'\n'64'\nOut of range arguments.\n\n'syntax'\n'128'\nDubious syntax in numeric expressions.\n\n'di'\n'256'\nUse of 'di' or 'da' without an argument when there is no current\ndiversion.\n\n'mac'\n'512'\nUse of undefined strings, macros and diversions.  When an undefined\nstring, macro, or diversion is used, that string is automatically\ndefined as empty.  So, in most cases, at most one warning is given\nfor each name.\n\n'reg'\n'1024'\nUse of undefined number registers.  When an undefined number\nregister is used, that register is automatically defined to have a\nvalue of 0.  So, in most cases, at most one warning is given for\nuse of a particular name.\n\n'tab'\n'2048'\nUse of a tab character where a number was expected.\n\n'right-brace'\n'4096'\nUse of '\\}' where a number was expected.\n\n'missing'\n'8192'\nRequests that are missing non-optional arguments.\n\n'input'\n'16384'\nInvalid input characters.\n\n'escape'\n'32768'\nUnrecognized escape sequences.  When an unrecognized escape\nsequence '\\X' is encountered, the escape character is ignored, and\nX is printed.\n\n'space'\n'65536'\nMissing space between a request or macro and its argument.  This\nwarning is given when an undefined name longer than two characters\nis encountered, and the first two characters of the name make a\ndefined name.  The request or macro is not invoked.  When this\nwarning is given, no macro is automatically defined.  This is\nenabled by default.  This warning never occurs in compatibility\nmode.\n\n'font'\n'131072'\nNon-existent fonts.  This is enabled by default.\n\n'ig'\n'262144'\nInvalid escapes in text ignored with the 'ig' request.  These are\nconditions that are errors when they do not occur in ignored text.\n\n'color'\n'524288'\nColor related warnings.\n\n'file'\n'1048576'\nMissing files.  The 'mso' request gives this warning when the\nrequested macro file does not exist.  This is enabled by default.\n\n'all'\nAll warnings except 'di', 'mac' and 'reg'.  It is intended that\nthis covers all warnings that are useful with traditional macro\npackages.\n\n'w'\nAll warnings.\n\nFile: groff.info,  Node: Implementation Differences,  Prev: Debugging,  Up: gtroff Reference\n"
                },
                {
                    "name": "5.34 Implementation Differences",
                    "content": "GNU 'troff' has a number of features that cause incompatibilities with\ndocuments written with old versions of 'troff'.\n\nLong names cause some incompatibilities.  Unix 'troff' interprets\n\n.dsabcd\n\nas defining a string 'ab' with contents 'cd'.  Normally, GNU 'troff'\ninterprets this as a call of a macro named 'dsabcd'.  Also Unix 'troff'\ninterprets '\\*[' or '\\n[' as references to a string or number register\ncalled '['.  In GNU 'troff', however, this is normally interpreted as\nthe start of a long name.  In compatibility mode GNU 'troff' interprets\nlong names in the traditional way (which means that they are not\nrecognized as names).\n\n-- Request: .cp [n]\n-- Request: .do cmd\n-- Register: \\n[.C]\nIf N is missing or non-zero, turn on compatibility mode; otherwise,\nturn it off.\n\nThe read-only number register '.C' is 1 if compatibility mode is\non, 0 otherwise.\n\nCompatibility mode can be also turned on with the '-C' command-line\noption.\n\nThe 'do' request turns off compatibility mode while executing its\narguments as a 'gtroff' command.  However, it does not turn off\ncompatibility mode while processing the macro itself.  To do that,\nuse the 'de1' request (or manipulate the '.C' register manually).\n*Note Writing Macros::.\n\n.do fam T\n\nexecutes the 'fam' request when compatibility mode is enabled.\n\n'gtroff' restores the previous compatibility setting before\ninterpreting any files sourced by the CMD.\n\nTwo other features are controlled by '-C'.  If not in compatibility\nmode, GNU 'troff' preserves the input level in delimited arguments:\n\n.ds xx '\n\\w'abc\\*(xxdef'\n\nIn compatibility mode, the string '72def'' is returned; without '-C' the\nresulting string is '168' (assuming a TTY output device).\n\nFinally, the escapes '\\f', '\\H', '\\m', '\\M', '\\R', '\\s', and '\\S' are\ntransparent for recognizing the beginning of a line only in\ncompatibility mode (this is a rather obscure feature).  For example, the\ncode\n\n.de xx\nHello!\n..\n\\fB.xx\\fP\n\nprints 'Hello!' in bold face if in compatibility mode, and '.xx' in bold\nface otherwise.\n\nGNU 'troff' does not allow the use of the escape sequences '\\|',\n'\\^', '\\&', '\\{', '\\}', '\\<SP>', '\\'', '\\`', '\\-', '\\', '\\!', '\\%', and\n'\\c' in names of strings, macros, diversions, number registers, fonts or\nenvironments; Unix 'troff' does.  The '\\A' escape sequence (*note\nIdentifiers::) may be helpful in avoiding use of these escape sequences\nin names.\n\nFractional point sizes cause one noteworthy incompatibility.  In Unix\n'troff' the 'ps' request ignores scale indicators and thus\n\n.ps 10u\n\nsets the point size to 10 points, whereas in GNU 'troff' it sets the\npoint size to 10 scaled points.  *Note Fractional Type Sizes::, for more\ninformation.\n\nIn GNU 'troff' there is a fundamental difference between\n(unformatted) input characters and (formatted) output glyphs.\nEverything that affects how a glyph is output is stored with the glyph\nnode; once a glyph node has been constructed it is unaffected by any\nsubsequent requests that are executed, including 'bd', 'cs', 'tkf',\n'tr', or 'fp' requests.  Normally glyphs are constructed from input\ncharacters at the moment immediately before the glyph is added to the\ncurrent output line.  Macros, diversions and strings are all, in fact,\nthe same type of object; they contain lists of input characters and\nglyph nodes in any combination.  A glyph node does not behave like an\ninput character for the purposes of macro processing; it does not\ninherit any of the special properties that the input character from\nwhich it was constructed might have had.  For example,\n\n.di x\n\\\\\\\\\n.br\n.di\n.x\n\nprints '\\\\' in GNU 'troff'; each pair of input backslashes is turned\ninto one output backslash and the resulting output backslashes are not\ninterpreted as escape characters when they are reread.  Unix 'troff'\nwould interpret them as escape characters when they were reread and\nwould end up printing one '\\'.  The correct way to obtain a printable\nbackslash is to use the '\\e' escape sequence: This always prints a\nsingle instance of the current escape character, regardless of whether\nor not it is used in a diversion; it also works in both GNU 'troff' and\nUnix 'troff'.(1)  (*note Implementation Differences-Footnote-1::) To\nstore, for some reason, an escape sequence in a diversion that is\ninterpreted when the diversion is reread, either use the traditional\n'\\!' transparent output facility, or, if this is unsuitable, the new\n'\\?' escape sequence.\n\n*Note Diversions::, and *note Gtroff Internals::, for more\ninformation.\n\nFile: groff.info,  Node: Preprocessors,  Next: Output Devices,  Prev: gtroff Reference,  Up: Top\n"
                }
            ]
        },
        "6 Preprocessors": {
            "content": "This chapter describes all preprocessors that come with 'groff' or which\nare freely available.\n\n* Menu:\n\n* geqn::\n* gtbl::\n* gpic::\n* ggrn::\n* grap::\n* gchem::\n* grefer::\n* gsoelim::\n* preconv::\n\nFile: groff.info,  Node: geqn,  Next: gtbl,  Prev: Preprocessors,  Up: Preprocessors\n",
            "subsections": [
                {
                    "name": "6.1 'geqn'",
                    "content": "* Menu:\n\n* Invoking geqn::\n\nFile: groff.info,  Node: Invoking geqn,  Prev: geqn,  Up: geqn\n\n\nFile: groff.info,  Node: gtbl,  Next: gpic,  Prev: geqn,  Up: Preprocessors\n"
                },
                {
                    "name": "6.2 'gtbl'",
                    "content": "* Menu:\n\n* Invoking gtbl::\n\nFile: groff.info,  Node: Invoking gtbl,  Prev: gtbl,  Up: gtbl\n\n\nFile: groff.info,  Node: gpic,  Next: ggrn,  Prev: gtbl,  Up: Preprocessors\n"
                },
                {
                    "name": "6.3 'gpic'",
                    "content": "* Menu:\n\n* Invoking gpic::\n\nFile: groff.info,  Node: Invoking gpic,  Prev: gpic,  Up: gpic\n\n\nFile: groff.info,  Node: ggrn,  Next: grap,  Prev: gpic,  Up: Preprocessors\n"
                },
                {
                    "name": "6.4 'ggrn'",
                    "content": "* Menu:\n\n* Invoking ggrn::\n\nFile: groff.info,  Node: Invoking ggrn,  Prev: ggrn,  Up: ggrn\n\n\nFile: groff.info,  Node: grap,  Next: gchem,  Prev: ggrn,  Up: Preprocessors\n"
                },
                {
                    "name": "6.5 'grap'",
                    "content": "A free implementation of 'grap', written by Ted Faber, is available as\nan extra package from the following address:\n\n<http://www.lunabase.org/~faber/Vault/software/grap/>\n\nFile: groff.info,  Node: gchem,  Next: grefer,  Prev: grap,  Up: Preprocessors\n"
                },
                {
                    "name": "6.6 'gchem'",
                    "content": "* Menu:\n\n* Invoking gchem::\n\nFile: groff.info,  Node: Invoking gchem,  Prev: gchem,  Up: gchem\n\n\nFile: groff.info,  Node: grefer,  Next: gsoelim,  Prev: gchem,  Up: Preprocessors\n"
                },
                {
                    "name": "6.7 'grefer'",
                    "content": "* Menu:\n\n* Invoking grefer::\n\nFile: groff.info,  Node: Invoking grefer,  Prev: grefer,  Up: grefer\n\n\nFile: groff.info,  Node: gsoelim,  Next: preconv,  Prev: grefer,  Up: Preprocessors\n"
                },
                {
                    "name": "6.8 'gsoelim'",
                    "content": "* Menu:\n\n* Invoking gsoelim::\n\nFile: groff.info,  Node: Invoking gsoelim,  Prev: gsoelim,  Up: gsoelim\n\n\nFile: groff.info,  Node: preconv,  Prev: gsoelim,  Up: Preprocessors\n"
                },
                {
                    "name": "6.9 'preconv'",
                    "content": "* Menu:\n\n* Invoking preconv::\n\nFile: groff.info,  Node: Invoking preconv,  Prev: preconv,  Up: preconv\n\n\nFile: groff.info,  Node: Output Devices,  Next: File formats,  Prev: Preprocessors,  Up: Top\n"
                }
            ]
        },
        "7 Output Devices": {
            "content": "* Menu:\n\n* Special Characters::\n* grotty::\n* grops::\n* gropdf::\n* grodvi::\n* grolj4::\n* grolbp::\n* grohtml::\n* gxditview::\n\nFile: groff.info,  Node: Special Characters,  Next: grotty,  Prev: Output Devices,  Up: Output Devices\n",
            "subsections": [
                {
                    "name": "7.1 Special Characters",
                    "content": "*Note Font Files::.\n\nFile: groff.info,  Node: grotty,  Next: grops,  Prev: Special Characters,  Up: Output Devices\n"
                },
                {
                    "name": "7.2 'grotty'",
                    "content": "The postprocessor 'grotty' translates the output from GNU 'troff' into a\nform suitable for typewriter-like devices.  It is fully documented on\nits manual page, 'grotty(1)'.\n\n* Menu:\n\n* Invoking grotty::\n\nFile: groff.info,  Node: Invoking grotty,  Prev: grotty,  Up: grotty\n\n\nThe postprocessor 'grotty' accepts the following command-line options:\n\n'-b'\nDo not overstrike bold glyphs.  Ignored if '-c' isn't used.\n\n'-B'\nDo not underline bold-italic glyphs.  Ignored if '-c' isn't used.\n\n'-c'\nUse overprint and disable colours for printing on legacy Teletype\nprinters (see below).\n\n'-d'\nDo not render lines (that is, ignore all '\\D' escapes).\n\n'-f'\nUse form feed control characters in the output.\n\n'-FDIR'\nPut the directory 'DIR/devNAME' in front of the search path for the\nfont and device description files, given the target device NAME.\n\n'-h'\nUse horizontal tabs for sequences of 8 space characters.\n\n'-i'\nRequest italic glyphs from the terminal.  Ignored if '-c' is\nactive.\n\n'-o'\nDo not overstrike.\n\n'-r'\nHighlight italic glyphs.  Ignored if '-c' is active.\n\n'-u'\nDo not underline italic glyphs.  Ignored if '-c' isn't used.\n\n'-U'\nDo not overstrike bold-italic glyphs.  Ignored if '-c' isn't used.\n\n'-v'\nPrint the version number.\n\nThe '-c' mode for TTY output devices means that underlining is done\nby emitting sequences of '' and '^H' (the backspace character) before\nthe actual character.  Literally, this is printing an underline\ncharacter, then moving the caret back one character position, and\nprinting the actual character at the same position as the underline\ncharacter (similar to a typewriter).  Usually, a modern terminal can't\ninterpret this (and the original Teletype machines for which this\nsequence was appropriate are no longer in use).  You need a pager\nprogram like 'less' that translates this into ISO 6429 SGR sequences to\ncontrol terminals.\n\nFile: groff.info,  Node: grops,  Next: gropdf,  Prev: grotty,  Up: Output Devices\n"
                },
                {
                    "name": "7.3 'grops'",
                    "content": "The postprocessor 'grops' translates the output from GNU 'troff' into a\nform suitable for Adobe POSTSCRIPT devices.  It is fully documented on\nits manual page, 'grops(1)'.\n\n* Menu:\n\n* Invoking grops::\n* Embedding PostScript::\n\nFile: groff.info,  Node: Invoking grops,  Next: Embedding PostScript,  Prev: grops,  Up: grops\n\n\nThe postprocessor 'grops' accepts the following command-line options:\n\n'-bFLAGS'\nUse backward compatibility settings given by FLAGS as documented in\nthe 'grops(1)' manual page.  Overrides the command 'broken' in the\n'DESC' file.\n\n'-cN'\nPrint N copies of each page.\n\n'-FDIR'\nPut the directory 'DIR/devNAME' in front of the search path for the\nfont, prologue and device description files, given the target\ndevice NAME, usually *ps*.\n\n'-g'\nTell the printer to guess the page length.  Useful for printing\nvertically centered pages when the paper dimensions are determined\nat print time.\n\n'-IPATH ...'\nConsider the directory 'PATH' for searching included files\nspecified with relative paths.  The current directory is searched\nas fallback.\n\n'-l'\nUse landscape orientation.\n\n'-m'\nUse manual feed.\n\n'-pPAPERSIZE'\nSet the page dimensions.  Overrides the commands 'papersize',\n'paperlength', and 'paperwidth' in the 'DESC' file.  See the\n'grofffont(5)' manual page for details.\n\n'-PPROLOGUE'\nUse the PROLOGUE in the font path as the prologue instead of the\ndefault 'prologue'.  Overrides the environment variable\n'GROPSPROLOGUE'.\n\n'-wN'\nSet the line thickness to N/1000em.  Overrides the default value N\n= 40.\n\n'-v'\nPrint the version number.\n\nFile: groff.info,  Node: Embedding PostScript,  Prev: Invoking grops,  Up: grops\n\n\nThe escape sequence\n\n'\\X'ps: import FILE LLX LLY URX URY WIDTH [HEIGHT]''\n\nplaces a rectangle of the specified WIDTH containing the POSTSCRIPT\ndrawing from file FILE bound by the box from LLX LLY to URX URY (in\nPOSTSCRIPT coordinates) at the insertion point.  If HEIGHT is not\nspecified, the embedded drawing is scaled proportionally.\n\n*Note Miscellaneous::, for the 'psbb' request, which automatically\ngenerates the bounding box.\n\nThis escape sequence is used internally by the macro 'PSPIC' (see the\n'grofftmac(5)' manual page).\n\nFile: groff.info,  Node: gropdf,  Next: grodvi,  Prev: grops,  Up: Output Devices\n"
                },
                {
                    "name": "7.4 'gropdf'",
                    "content": "The postprocessor 'gropdf' translates the output from GNU 'troff' into a\nform suitable for Adobe PDF devices.  It is fully documented on its\nmanual page, 'gropdf(1)'.\n\n* Menu:\n\n* Invoking gropdf::\n* Embedding PDF::\n\nFile: groff.info,  Node: Invoking gropdf,  Next: Embedding PDF,  Prev: gropdf,  Up: gropdf\n\n\nThe postprocessor 'gropdf' accepts the following command-line options:\n\n'-d'\nProduce uncompressed PDFs that include debugging comments.\n\n'-e'\nThis forces 'gropdf' to embed all used fonts in the PDF, even if\nthey are one of the 14 base Adobe fonts.\n\n'-FDIR'\nPut the directory 'DIR/devNAME' in front of the search path for the\nfont, prologue and device description files, given the target\ndevice NAME, usually *pdf*.\n\n'-yFOUNDRY'\nThis forces the use of a different font foundry.\n\n'-l'\nUse landscape orientation.\n\n'-pPAPERSIZE'\nSet the page dimensions.  Overrides the commands 'papersize',\n'paperlength', and 'paperwidth' in the 'DESC' file.  See the\n'grofffont(5)' manual page for details.\n\n'-v'\nPrint the version number.\n\n'-s'\nAppend a comment line to end of PDF showing statistics, i.e.\nnumber of pages in document.  Ghostscript's 'ps2pdf(1)' complains\nabout this line if it is included, but works anyway.\n\n'-uFILENAME'\n'gropdf' normally includes a ToUnicode CMap with any font created\nusing 'text.enc' as the encoding file, this makes it easier to\nsearch for words that contain ligatures.  You can include your own\nCMap by specifying a FILENAME or have no CMap at all by omitting\nthe FILENAME.\n\nFile: groff.info,  Node: Embedding PDF,  Prev: Invoking gropdf,  Up: gropdf\n\n\nThe escape sequence\n\n'\\X'pdf: pdfpic FILE ALIGNMENT WIDTH [HEIGHT] [LINELENGTH]''\n\nplaces a rectangle of the specified WIDTH containing the PDF drawing\nfrom file FILE of desired WIDTH and HEIGHT (if HEIGHT is missing or zero\nthen it is scaled proportionally).  If ALIGNMENT is '-L' the drawing is\nleft aligned.  If it is '-C' or '-R' a LINELENGTH greater than the width\nof the drawing is required as well.  If WIDTH is specified as zero then\nthe width is scaled in proportion to the height.\n\nFile: groff.info,  Node: grodvi,  Next: grolj4,  Prev: gropdf,  Up: Output Devices\n"
                },
                {
                    "name": "7.5 'grodvi'",
                    "content": "The postprocessor 'grodvi' translates the output from GNU 'troff' into\nthe *DVI* output format compatible with the *TeX* document preparation\nsystem.  It is fully documented on its manual page, 'grodvi(1)'.\n\n* Menu:\n\n* Invoking grodvi::\n\nFile: groff.info,  Node: Invoking grodvi,  Prev: grodvi,  Up: grodvi\n\n\nThe postprocessor 'grodvi' accepts the following command-line options:\n\n'-d'\nDo not use *tpic* specials to implement drawing commands.\n\n'-FDIR'\nPut the directory 'DIR/devNAME' in front of the search path for the\nfont and device description files, given the target device NAME,\nusually *dvi*.\n\n'-l'\nUse landscape orientation.\n\n'-pPAPERSIZE'\nSet the page dimensions.  Overrides the commands 'papersize',\n'paperlength', and 'paperwidth' in the 'DESC' file.  See\n'grofffont(5)' manual page for details.\n\n'-v'\nPrint the version number.\n\n'-wN'\nSet the line thickness to N/1000em.  Overrides the default value N\n= 40.\n\nFile: groff.info,  Node: grolj4,  Next: grolbp,  Prev: grodvi,  Up: Output Devices\n"
                },
                {
                    "name": "7.6 'grolj4'",
                    "content": "The postprocessor 'grolj4' translates the output from GNU 'troff' into\nthe *PCL5* output format suitable for printing on a *HP LaserJet 4*\nprinter.  It is fully documented on its manual page, 'grolj4(1)'.\n\n* Menu:\n\n* Invoking grolj4::\n\nFile: groff.info,  Node: Invoking grolj4,  Prev: grolj4,  Up: grolj4\n\n\nThe postprocessor 'grolj4' accepts the following command-line options:\n\n'-cN'\nPrint N copies of each page.\n\n'-FDIR'\nPut the directory 'DIR/devNAME' in front of the search path for the\nfont and device description files, given the target device NAME,\nusually *lj4*.\n\n'-l'\nUse landscape orientation.\n\n'-pSIZE'\nSet the page dimensions.  Valid values for SIZE are: 'letter',\n'legal', 'executive', 'a4', 'com10', 'monarch', 'c5', 'b5', 'd1'.\n\n'-v'\nPrint the version number.\n\n'-wN'\nSet the line thickness to N/1000em.  Overrides the default value N\n= 40.\n\nThe special drawing command '\\D'R DH DV'' draws a horizontal\nrectangle from the current position to the position at offset (DH,DV).\n\nFile: groff.info,  Node: grolbp,  Next: grohtml,  Prev: grolj4,  Up: Output Devices\n"
                },
                {
                    "name": "7.7 'grolbp'",
                    "content": "The postprocessor 'grolbp' translates the output from GNU 'troff' into\nthe *LBP* output format suitable for printing on *Canon CAPSL* printers.\nIt is fully documented on its manual page, 'grolbp(1)'.\n\n* Menu:\n\n* Invoking grolbp::\n\nFile: groff.info,  Node: Invoking grolbp,  Prev: grolbp,  Up: grolbp\n\n\nThe postprocessor 'grolbp' accepts the following command-line options:\n\n'-cN'\nPrint N copies of each page.\n\n'-FDIR'\nPut the directory 'DIR/devNAME' in front of the search path for the\nfont, prologue and device description files, given the target\ndevice NAME, usually *lbp*.\n\n'-l'\nUse landscape orientation.\n\n'-oORIENTATION'\nUse the ORIENTATION specified: 'portrait' or 'landscape'.\n\n'-pPAPERSIZE'\nSet the page dimensions.  See 'grofffont(5)' manual page for\ndetails.\n\n'-wN'\nSet the line thickness to N/1000em.  Overrides the default value N\n= 40.\n\n'-v'\nPrint the version number.\n\n'-h'\nPrint command-line help.\n\nFile: groff.info,  Node: grohtml,  Next: gxditview,  Prev: grolbp,  Up: Output Devices\n"
                },
                {
                    "name": "7.8 'grohtml'",
                    "content": "The 'grohtml' front end (which consists of a preprocessor,\n'pre-grohtml', and a device driver, 'post-grohtml') translates the\noutput of GNU 'troff' to HTML.  Users should always invoke 'grohtml' via\nthe 'groff' command with a '\\-Thtml' option.  If no files are given,\n'grohtml' will read the standard input.  A filename of '-' will also\ncause 'grohtml' to read the standard input.  HTML output is written to\nthe standard output.  When 'grohtml' is run by 'groff', options can be\npassed to 'grohtml' using 'groff''s '-P' option.\n\n'grohtml' invokes 'groff' twice.  In the first pass, pictures,\nequations, and tables are rendered using the 'ps' device, and in the\nsecond pass HTML output is generated by the 'html' device.\n\n'grohtml' always writes output in 'UTF-8' encoding and has built-in\nentities for all non-composite unicode characters.  In spite of this,\n'groff' may issue warnings about unknown special characters if they\ncan't be found during the first pass.  Such warnings can be safely\nignored unless the special characters appear inside a table or equation,\nin which case glyphs for these characters must be defined for the 'ps'\ndevice as well.\n\nThis output device is fully documented on its manual page,\n'grohtml(1)'.\n\n* Menu:\n\n* Invoking grohtml::\n* grohtml specific registers and strings::\n\nFile: groff.info,  Node: Invoking grohtml,  Next: grohtml specific registers and strings,  Prev: grohtml,  Up: grohtml\n\n\nThe postprocessor 'grohtml' accepts the following command-line options:\n\n'-aBITS'\nUse this number of BITS (= 1, 2 or 4) for text antialiasing.\nDefault: BITS = 4.\n\n'-a0'\nDo not use text antialiasing.\n\n'-b'\nUse white background.\n\n'-DDIR'\nStore rendered images in the directory 'DIR'.\n\n'-FDIR'\nPut the directory 'DIR/devNAME' in front of the search path for the\nfont, prologue and device description files, given the target\ndevice NAME, usually *html*.\n\n'-gBITS'\nUse this number of BITS (= 1, 2 or 4) for antialiasing of drawings.\nDefault: BITS = 4.\n\n'-g0'\nDo not use antialiasing for drawings.\n\n'-h'\nUse the 'B' element for section headings.\n\n'-iRESOLUTION'\nUse the RESOLUTION for rendered images.  Default: RESOLUTION =\n100dpi.\n\n'-ISTEM'\nSet the images' STEM NAME.  Default: STEM = 'grohtml-XXX' (XXX is\nthe process ID).\n\n'-jSTEM'\nPlace each section in a separate file called 'STEM-N.html' (where N\nis a generated section number).\n\n'-l'\nDo not generate the table of contents.\n\n'-n'\nGenerate simple fragment identifiers.\n\n'-oOFFSET'\nUse vertical padding OFFSET for images.\n\n'-p'\nDisplay the page rendering progress to 'stderr'.\n\n'-r'\nDo not use horizontal rules to separate headers and footers.\n\n'-sSIZE'\nSet the base font size, to be modified using the elements 'BIG' and\n'SMALL'.\n\n'-SLEVEL'\nGenerate separate files for sections at level LEVEL.\n\n'-v'\nPrint the version number.\n\n'-V'\nGenerate a validator button at the bottom.\n\n'-y'\nGenerate a signature of groff after the validator button, if any.\n\nFile: groff.info,  Node: grohtml specific registers and strings,  Prev: Invoking grohtml,  Up: grohtml\n\n\n-- Register: \\n[ps4html]\n-- String: \\*[www-image-template]\nThe registers 'ps4html' and 'www-image-template' are defined by the\n'pre-grohtml' preprocessor.  'pre-grohtml' reads in the 'troff'\ninput, marks up the inline equations and passes the result firstly\nto\n\ntroff -Tps -rps4html=1 -dwww-image-template=TEMPLATE\n\nand secondly to\n\ntroff -Thtml\n\nor\n\ntroff -Txhtml\n\nThe POSTSCRIPT device is used to create all the image files (for\n'-Thtml'; if '-Txhtml' is used, all equations are passed to 'geqn'\nto produce MathML, and the register 'ps4html' enables the macro\nsets to ignore floating keeps, footers, and headings.\n\nThe register 'www-image-template' is set to the user specified\ntemplate name or the default name.\n\nFile: groff.info,  Node: gxditview,  Prev: grohtml,  Up: Output Devices\n"
                },
                {
                    "name": "7.9 'gxditview'",
                    "content": "* Menu:\n\n* Invoking gxditview::\n\nFile: groff.info,  Node: Invoking gxditview,  Prev: gxditview,  Up: gxditview\n\n\nFile: groff.info,  Node: File formats,  Next: Installation,  Prev: Output Devices,  Up: Top\n"
                }
            ]
        },
        "8 File formats": {
            "content": "All files read and written by 'gtroff' are text files.  The following\ntwo sections describe their format.\n\n* Menu:\n\n* gtroff Output::\n* Font Files::\n\nFile: groff.info,  Node: gtroff Output,  Next: Font Files,  Prev: File formats,  Up: File formats\n",
            "subsections": [
                {
                    "name": "8.1 'gtroff' Output",
                    "content": "This section describes the intermediate output format of GNU 'troff'.\nThis output is produced by a run of 'gtroff' before it is fed into a\ndevice postprocessor program.\n\nAs 'groff' is a wrapper program around 'gtroff' that automatically\ncalls a postprocessor, this output does not show up normally.  This is\nwhy it is called \"intermediate\".  'groff' provides the option '-Z' to\ninhibit postprocessing, such that the produced intermediate output is\nsent to standard output just like calling 'gtroff' manually.\n\nHere, the term \"troff output\" describes what is output by 'gtroff',\nwhile \"intermediate output\" refers to the language that is accepted by\nthe parser that prepares this output for the postprocessors.  This\nparser is smarter on whitespace and implements obsolete elements for\ncompatibility, otherwise both formats are the same.(1)  (*note gtroff\nOutput-Footnote-1::)\n\nThe main purpose of the intermediate output concept is to facilitate\nthe development of postprocessors by providing a common programming\ninterface for all devices.  It has a language of its own that is\ncompletely different from the 'gtroff' language.  While the 'gtroff'\nlanguage is a high-level programming language for text processing, the\nintermediate output language is a kind of low-level assembler language\nby specifying all positions on the page for writing and drawing.\n\nThe intermediate output produced by 'gtroff' is fairly readable,\nwhile output from AT&T 'troff' is rather hard to understand because of\nstrange habits that are still supported, but not used any longer by\n'gtroff'.\n\n* Menu:\n\n* Language Concepts::\n* Command Reference::\n* Intermediate Output Examples::\n* Output Language Compatibility::\n\nFile: groff.info,  Node: Language Concepts,  Next: Command Reference,  Prev: gtroff Output,  Up: gtroff Output\n\n\nDuring the run of 'gtroff', the input data is cracked down to the\ninformation on what has to be printed at what position on the intended\ndevice.  So the language of the intermediate output format can be quite\nsmall.  Its only elements are commands with and without arguments.  In\nthis section, the term \"command\" always refers to the intermediate\noutput language, and never to the 'gtroff' language used for document\nformatting.  There are commands for positioning and text writing, for\ndrawing, and for device controlling.\n\n* Menu:\n\n* Separation::\n* Argument Units::\n* Document Parts::\n\nFile: groff.info,  Node: Separation,  Next: Argument Units,  Prev: Language Concepts,  Up: Language Concepts\n\n8.1.1.1 Separation\n..................\n\nAT&T 'troff' output has strange requirements on whitespace.  The\n'gtroff' output parser, however, is smart about whitespace by making it\nmaximally optional.  The whitespace characters, i.e., the tab, space,\nand newline characters, always have a syntactical meaning.  They are\nnever printable because spacing within the output is always done by\npositioning commands.\n\nAny sequence of space or tab characters is treated as a single\n\"syntactical space\".  It separates commands and arguments, but is only\nrequired when there would occur a clashing between the command code and\nthe arguments without the space.  Most often, this happens when\nvariable-length command names, arguments, argument lists, or command\nclusters meet.  Commands and arguments with a known, fixed length need\nnot be separated by syntactical space.\n\nA line break is a syntactical element, too.  Every command argument\ncan be followed by whitespace, a comment, or a newline character.  Thus\na \"syntactical line break\" is defined to consist of optional syntactical\nspace that is optionally followed by a comment, and a newline character.\n\nThe normal commands, those for positioning and text, consist of a\nsingle letter taking a fixed number of arguments.  For historical\nreasons, the parser allows stacking of such commands on the same line,\nbut fortunately, in 'gtroff''s intermediate output, every command with\nat least one argument is followed by a line break, thus providing\nexcellent readability.\n\nThe other commands - those for drawing and device controlling - have\na more complicated structure; some recognize long command names, and\nsome take a variable number of arguments.  So all 'D' and 'x' commands\nwere designed to request a syntactical line break after their last\nargument.  Only one command, 'x X', has an argument that can stretch\nover several lines; all other commands must have all of their arguments\non the same line as the command, i.e., the arguments may not be split by\na line break.\n\nEmpty lines (these are lines containing only space and/or a comment),\ncan occur everywhere.  They are just ignored.\n\nFile: groff.info,  Node: Argument Units,  Next: Document Parts,  Prev: Separation,  Up: Language Concepts\n\n8.1.1.2 Argument Units\n......................\n\nSome commands take integer arguments that are assumed to represent\nvalues in a measurement unit, but the letter for the corresponding scale\nindicator is not written with the output command arguments.  Most\ncommands assume the scale indicator 'u', the basic unit of the device,\nsome use 'z', the scaled point unit of the device, while others, such as\nthe color commands, expect plain integers.\n\nNote that single characters can have the eighth bit set, as can the\nnames of fonts and special characters.  The names of characters and\nfonts can be of arbitrary length.  A character that is to be printed is\nalways in the current font.\n\nA string argument is always terminated by the next whitespace\ncharacter (space, tab, or newline); an embedded '#' character is\nregarded as part of the argument, not as the beginning of a comment\ncommand.  An integer argument is already terminated by the next\nnon-digit character, which then is regarded as the first character of\nthe next argument or command.\n\nFile: groff.info,  Node: Document Parts,  Prev: Argument Units,  Up: Language Concepts\n\n8.1.1.3 Document Parts\n......................\n\nA correct intermediate output document consists of two parts, the\n\"prologue\" and the \"body\".\n\nThe task of the prologue is to set the general device parameters\nusing three exactly specified commands.  'gtroff''s prologue is\nguaranteed to consist of the following three lines (in that order):\n\nx T DEVICE\nx res N H V\nx init\n\nwith the arguments set as outlined in *note Device Control Commands::.\nNote that the parser for the intermediate output format is able to\nswallow additional whitespace and comments as well even in the prologue.\n\nThe body is the main section for processing the document data.\nSyntactically, it is a sequence of any commands different from the ones\nused in the prologue.  Processing is terminated as soon as the first\n'x stop' command is encountered; the last line of any 'gtroff'\nintermediate output always contains such a command.\n\nSemantically, the body is page oriented.  A new page is started by a\n'p' command.  Positioning, writing, and drawing commands are always done\nwithin the current page, so they cannot occur before the first 'p'\ncommand.  Absolute positioning (by the 'H' and 'V' commands) is done\nrelative to the current page; all other positioning is done relative to\nthe current location within this page.\n\nFile: groff.info,  Node: Command Reference,  Next: Intermediate Output Examples,  Prev: Language Concepts,  Up: gtroff Output\n\n\nThis section describes all intermediate output commands, both from AT&T\n'troff' as well as the 'gtroff' extensions.\n\n* Menu:\n\n* Comment Command::\n* Simple Commands::\n* Graphics Commands::\n* Device Control Commands::\n* Obsolete Command::\n\nFile: groff.info,  Node: Comment Command,  Next: Simple Commands,  Prev: Command Reference,  Up: Command Reference\n\n8.1.2.1 Comment Command\n.......................\n\n'#ANYTHING<end of line>'\nA comment.  Ignore any characters from the '#' character up to the\nnext newline character.\n\nThis command is the only possibility for commenting in the\nintermediate output.  Each comment can be preceded by arbitrary\nsyntactical space; every command can be terminated by a comment.\n\nFile: groff.info,  Node: Simple Commands,  Next: Graphics Commands,  Prev: Comment Command,  Up: Command Reference\n\n8.1.2.2 Simple Commands\n.......................\n\nThe commands in this subsection have a command code consisting of a\nsingle character, taking a fixed number of arguments.  Most of them are\ncommands for positioning and text writing.  These commands are smart\nabout whitespace.  Optionally, syntactical space can be inserted before,\nafter, and between the command letter and its arguments.  All of these\ncommands are stackable, i.e., they can be preceded by other simple\ncommands or followed by arbitrary other commands on the same line.  A\nseparating syntactical space is only necessary when two integer\narguments would clash or if the preceding argument ends with a string\nargument.\n\n'C XXX<whitespace>'\nPrint a special character named XXX.  The trailing syntactical\nspace or line break is necessary to allow glyph names of arbitrary\nlength.  The glyph is printed at the current print position; the\nglyph's size is read from the font file.  The print position is not\nchanged.\n\n'c G'\nPrint glyph G at the current print position;(1) (*note Simple\nCommands-Footnote-1::) the glyph's size is read from the font file.\nThe print position is not changed.\n\n'f N'\nSet font to font number N (a non-negative integer).\n\n'H N'\nMove right to the absolute vertical position N (a non-negative\ninteger in basic units 'u' relative to left edge of current page.\n\n'h N'\nMove N (a non-negative integer) basic units 'u' horizontally to the\nright.  The original Unix troff manual allows negative values for N\nalso, but 'gtroff' doesn't use this.\n\n'm COLOR-SCHEME [COMPONENT ...]'\nSet the color for text (glyphs), line drawing, and the outline of\ngraphic objects using different color schemes; the analogous\ncommand for the filling color of graphic objects is 'DF'.  The\ncolor components are specified as integer arguments between 0 and\n65536.  The number of color components and their meaning vary for\nthe different color schemes.  These commands are generated by\n'gtroff''s escape sequence '\\m'.  No position changing.  These\ncommands are a 'gtroff' extension.\n\n'mc CYAN MAGENTA YELLOW'\nSet color using the CMY color scheme, having the 3 color\ncomponents CYAN, MAGENTA, and YELLOW.\n\n'md'\nSet color to the default color value (black in most cases).\nNo component arguments.\n\n'mg GRAY'\nSet color to the shade of gray given by the argument, an\ninteger between 0 (black) and 65536 (white).\n\n'mk CYAN MAGENTA YELLOW BLACK'\nSet color using the CMYK color scheme, having the 4 color\ncomponents CYAN, MAGENTA, YELLOW, and BLACK.\n\n'mr RED GREEN BLUE'\nSet color using the RGB color scheme, having the 3 color\ncomponents RED, GREEN, and BLUE.\n\n'N N'\nPrint glyph with index N (a non-negative integer) of the current\nfont.  This command is a 'gtroff' extension.\n\n'n B A'\nInform the device about a line break, but no positioning is done by\nthis command.  In AT&T 'troff', the integer arguments B and A\ninformed about the space before and after the current line to make\nthe intermediate output more human readable without performing any\naction.  In 'groff', they are just ignored, but they must be\nprovided for compatibility reasons.\n\n'p N'\nBegin a new page in the outprint.  The page number is set to N.\nThis page is completely independent of pages formerly processed\neven if those have the same page number.  The vertical position on\nthe outprint is automatically set to 0.  All positioning, writing,\nand drawing is always done relative to a page, so a 'p' command\nmust be issued before any of these commands.\n\n's N'\nSet point size to N scaled points (this is unit 'z').  AT&T 'troff'\nused the unit points ('p') instead.  *Note Output Language\nCompatibility::.\n\n't XXX<whitespace>'\n't XXX DUMMY-ARG<whitespace>'\nPrint a word, i.e., a sequence of characters XXX representing\noutput glyphs which names are single characters, terminated by a\nspace character or a line break; an optional second integer\nargument is ignored (this allows the formatter to generate an even\nnumber of arguments).  The first glyph should be printed at the\ncurrent position, the current horizontal position should then be\nincreased by the width of the first glyph, and so on for each\nglyph.  The widths of the glyphs are read from the font file,\nscaled for the current point size, and rounded to a multiple of the\nhorizontal resolution.  Special characters cannot be printed using\nthis command (use the 'C' command for special characters).  This\ncommand is a 'gtroff' extension; it is only used for devices whose\n'DESC' file contains the 'tcommand' keyword (*note DESC File\nFormat::).\n\n'u N XXX<whitespace>'\nPrint word with track kerning.  This is the same as the 't' command\nexcept that after printing each glyph, the current horizontal\nposition is increased by the sum of the width of that glyph and N\n(an integer in basic units 'u').  This command is a 'gtroff'\nextension; it is only used for devices whose 'DESC' file contains\nthe 'tcommand' keyword (*note DESC File Format::).\n\n'V N'\nMove down to the absolute vertical position N (a non-negative\ninteger in basic units 'u') relative to upper edge of current page.\n\n'v N'\nMove N basic units 'u' down (N is a non-negative integer).  The\noriginal Unix troff manual allows negative values for N also, but\n'gtroff' doesn't use this.\n\n'w'\nInforms about a paddable white space to increase readability.  The\nspacing itself must be performed explicitly by a move command.\n\nFile: groff.info,  Node: Graphics Commands,  Next: Device Control Commands,  Prev: Simple Commands,  Up: Command Reference\n\n8.1.2.3 Graphics Commands\n.........................\n\nEach graphics or drawing command in the intermediate output starts with\nthe letter 'D', followed by one or two characters that specify a\nsubcommand; this is followed by a fixed or variable number of integer\narguments that are separated by a single space character.  A 'D' command\nmay not be followed by another command on the same line (apart from a\ncomment), so each 'D' command is terminated by a syntactical line break.\n\n'gtroff' output follows the classical spacing rules (no space between\ncommand and subcommand, all arguments are preceded by a single space\ncharacter), but the parser allows optional space between the command\nletters and makes the space before the first argument optional.  As\nusual, each space can be any sequence of tab and space characters.\n\nSome graphics commands can take a variable number of arguments.  In\nthis case, they are integers representing a size measured in basic units\n'u'.  The arguments called H1, H2, ..., HN stand for horizontal\ndistances where positive means right, negative left.  The arguments\ncalled V1, V2, ..., VN stand for vertical distances where positive means\ndown, negative up.  All these distances are offsets relative to the\ncurrent location.\n\nEach graphics command directly corresponds to a similar 'gtroff' '\\D'\nescape sequence.  *Note Drawing Requests::.\n\nUnknown 'D' commands are assumed to be device-specific.  Its\narguments are parsed as strings; the whole information is then sent to\nthe postprocessor.\n\nIn the following command reference, the syntax element <line break>\nmeans a syntactical line break as defined above.\n\n'D~ H1 V1 H2 V2 ... HN VN<line break>'\nDraw B-spline from current position to offset (H1,V1), then to\noffset (H2,V2), if given, etc. up to (HN,VN).  This command takes a\nvariable number of argument pairs; the current position is moved to\nthe terminal point of the drawn curve.\n\n'Da H1 V1 H2 V2<line break>'\nDraw arc from current position to (H1,V1)+(H2,V2) with center at\n(H1,V1); then move the current position to the final point of the\narc.\n\n'DC D<line break>'\n'DC D DUMMY-ARG<line break>'\nDraw a solid circle using the current fill color with diameter D\n(integer in basic units 'u') with leftmost point at the current\nposition; then move the current position to the rightmost point of\nthe circle.  An optional second integer argument is ignored (this\nallows the formatter to generate an even number of arguments).\nThis command is a 'gtroff' extension.\n\n'Dc D<line break>'\nDraw circle line with diameter D (integer in basic units 'u') with\nleftmost point at the current position; then move the current\nposition to the rightmost point of the circle.\n\n'DE H V<line break>'\nDraw a solid ellipse in the current fill color with a horizontal\ndiameter of H and a vertical diameter of V (both integers in basic\nunits 'u') with the leftmost point at the current position; then\nmove to the rightmost point of the ellipse.  This command is a\n'gtroff' extension.\n\n'De H V<line break>'\nDraw an outlined ellipse with a horizontal diameter of H and a\nvertical diameter of V (both integers in basic units 'u') with the\nleftmost point at current position; then move to the rightmost\npoint of the ellipse.\n\n'DF COLOR-SCHEME [COMPONENT ...]<line break>'\nSet fill color for solid drawing objects using different color\nschemes; the analogous command for setting the color of text, line\ngraphics, and the outline of graphic objects is 'm'.  The color\ncomponents are specified as integer arguments between 0 and 65536.\nThe number of color components and their meaning vary for the\ndifferent color schemes.  These commands are generated by\n'gtroff''s escape sequences '\\D'F ...'' and '\\M' (with no other\ncorresponding graphics commands).  No position changing.  This\ncommand is a 'gtroff' extension.\n\n'DFc CYAN MAGENTA YELLOW<line break>'\nSet fill color for solid drawing objects using the CMY color\nscheme, having the 3 color components CYAN, MAGENTA, and\nYELLOW.\n\n'DFd<line break>'\nSet fill color for solid drawing objects to the default fill\ncolor value (black in most cases).  No component arguments.\n\n'DFg GRAY<line break>'\nSet fill color for solid drawing objects to the shade of gray\ngiven by the argument, an integer between 0 (black) and 65536\n(white).\n\n'DFk CYAN MAGENTA YELLOW BLACK<line break>'\nSet fill color for solid drawing objects using the CMYK color\nscheme, having the 4 color components CYAN, MAGENTA, YELLOW,\nand BLACK.\n\n'DFr RED GREEN BLUE<line break>'\nSet fill color for solid drawing objects using the RGB color\nscheme, having the 3 color components RED, GREEN, and BLUE.\n\n'Df N<line break>'\nThe argument N must be an integer in the range -32767 to 32767.\n\n0 <= N <= 1000\nSet the color for filling solid drawing objects to a shade of\ngray, where 0 corresponds to solid white, 1000 (the default)\nto solid black, and values in between to intermediate shades\nof gray; this is obsoleted by command 'DFg'.\n\nN < 0 or N > 1000\nSet the filling color to the color that is currently being\nused for the text and the outline, see command 'm'.  For\nexample, the command sequence\n\nmg 0 0 65536\nDf -1\n\nsets all colors to blue.\n\nNo position changing.  This command is a 'gtroff' extension.\n\n'Dl H V<line break>'\nDraw line from current position to offset (H,V) (integers in basic\nunits 'u'); then set current position to the end of the drawn line.\n\n'Dp H1 V1 H2 V2 ... HN VN<line break>'\nDraw a polygon line from current position to offset (H1,V1), from\nthere to offset (H2,V2), etc. up to offset (HN,VN), and from there\nback to the starting position.  For historical reasons, the\nposition is changed by adding the sum of all arguments with odd\nindex to the actual horizontal position and the even ones to the\nvertical position.  Although this doesn't make sense it is kept for\ncompatibility.  This command is a 'gtroff' extension.\n\n'DP H1 V1 H2 V2 ... HN VN<line break>'\nDraw a solid polygon in the current fill color rather than an\noutlined polygon, using the same arguments and positioning as the\ncorresponding 'Dp' command.  This command is a 'gtroff' extension.\n\n'Dt N<line break>'\nSet the current line thickness to N (an integer in basic units 'u')\nif N>0; if N=0 select the smallest available line thickness; if N<0\nset the line thickness proportional to the point size (this is the\ndefault before the first 'Dt' command was specified).  For\nhistorical reasons, the horizontal position is changed by adding\nthe argument to the actual horizontal position, while the vertical\nposition is not changed.  Although this doesn't make sense it is\nkept for compatibility.  This command is a 'gtroff' extension.\n\nFile: groff.info,  Node: Device Control Commands,  Next: Obsolete Command,  Prev: Graphics Commands,  Up: Command Reference\n\n8.1.2.4 Device Control Commands\n...............................\n\nEach device control command starts with the letter 'x', followed by a\nspace character (optional or arbitrary space or tab in 'gtroff') and a\nsubcommand letter or word; each argument (if any) must be preceded by a\nsyntactical space.  All 'x' commands are terminated by a syntactical\nline break; no device control command can be followed by another command\non the same line (except a comment).\n\nThe subcommand is basically a single letter, but to increase\nreadability, it can be written as a word, i.e., an arbitrary sequence of\ncharacters terminated by the next tab, space, or newline character.  All\ncharacters of the subcommand word but the first are simply ignored.  For\nexample, 'gtroff' outputs the initialization command 'x i' as 'x init'\nand the resolution command 'x r' as 'x res'.\n\nIn the following, the syntax element <line break> means a syntactical\nline break (*note Separation::).\n\n'xF NAME<line break>'\nThe 'F' stands for FILENAME.\n\nUse NAME as the intended name for the current file in error\nreports.  This is useful for remembering the original file name\nwhen 'gtroff' uses an internal piping mechanism.  The input file is\nnot changed by this command.  This command is a 'gtroff' extension.\n\n'xf N S<line break>'\nThe 'f' stands for FONT.\n\nMount font position N (a non-negative integer) with font named S (a\ntext word).  *Note Font Positions::.\n\n'xH N<line break>'\nThe 'H' stands for HEIGHT.\n\nSet glyph height to N (a positive integer in scaled points 'z').\nAT&T 'troff' uses the unit points ('p') instead.  *Note Output\nLanguage Compatibility::.\n\n'xi<line break>'\nThe 'i' stands for INIT.\n\nInitialize device.  This is the third command of the prologue.\n\n'xp<line break>'\nThe 'p' stands for PAUSE.\n\nParsed but ignored.  The original Unix troff manual writes\n\npause device, can be restarted\n\n'xr N H V<line break>'\nThe 'r' stands for RESOLUTION.\n\nResolution is N, while H is the minimal horizontal motion, and V\nthe minimal vertical motion possible with this device; all\narguments are positive integers in basic units 'u' per inch.  This\nis the second command of the prologue.\n\n'xS N<line break>'\nThe 'S' stands for SLANT.\n\nSet slant to N (an integer in basic units 'u').\n\n'xs<line break>'\nThe 's' stands for STOP.\n\nTerminates the processing of the current file; issued as the last\ncommand of any intermediate troff output.\n\n'xt<line break>'\nThe 't' stands for TRAILER.\n\nGenerate trailer information, if any.  In GTROFF, this is actually\njust ignored.\n\n'xT XXX<line break>'\nThe 'T' stands for TYPESETTER.\n\nSet name of device to word XXX, a sequence of characters ended by\nthe next white space character.  The possible device names coincide\nwith those from the 'groff' '-T' option.  This is the first command\nof the prologue.\n\n'xu N<line break>'\nThe 'u' stands for UNDERLINE.\n\nConfigure underlining of spaces.  If N is 1, start underlining of\nspaces; if N is 0, stop underlining of spaces.  This is needed for\nthe 'cu' request in nroff mode and is ignored otherwise.  This\ncommand is a 'gtroff' extension.\n\n'xX ANYTHING<line break>'\nThe 'x' stands for X-ESCAPE.\n\nSend string ANYTHING uninterpreted to the device.  If the line\nfollowing this command starts with a '+' character this line is\ninterpreted as a continuation line in the following sense.  The '+'\nis ignored, but a newline character is sent instead to the device,\nthe rest of the line is sent uninterpreted.  The same applies to\nall following lines until the first character of a line is not a\n'+' character.  This command is generated by the 'gtroff' escape\nsequence '\\X'.  The line-continuing feature is a 'gtroff'\nextension.\n\nFile: groff.info,  Node: Obsolete Command,  Prev: Device Control Commands,  Up: Command Reference\n\n8.1.2.5 Obsolete Command\n........................\n\nIn AT&T 'troff' output, the writing of a single glyph is mostly done by\na very strange command that combines a horizontal move and a single\ncharacter giving the glyph name.  It doesn't have a command code, but is\nrepresented by a 3-character argument consisting of exactly 2 digits and\na character.\n\nDDG\nMove right DD (exactly two decimal digits) basic units 'u', then\nprint glyph G (represented as a single character).\n\nIn 'gtroff', arbitrary syntactical space around and within this\ncommand is allowed to be added.  Only when a preceding command on\nthe same line ends with an argument of variable length a separating\nspace is obligatory.  In AT&T 'troff', large clusters of these and\nother commands are used, mostly without spaces; this made such\noutput almost unreadable.\n\nFor modern high-resolution devices, this command does not make sense\nbecause the width of the glyphs can become much larger than two decimal\ndigits.  In 'gtroff', this is only used for the devices 'X75', 'X75-12',\n'X100', and 'X100-12'.  For other devices, the commands 't' and 'u'\nprovide a better functionality.\n\nFile: groff.info,  Node: Intermediate Output Examples,  Next: Output Language Compatibility,  Prev: Command Reference,  Up: gtroff Output\n\n\nThis section presents the intermediate output generated from the same\ninput for three different devices.  The input is the sentence 'hell\nworld' fed into 'gtroff' on the command line.\n\nHigh-resolution device 'ps'\n\nThis is the standard output of 'gtroff' if no '-T' option is given.\n\nshell> echo \"hell world\" | groff -Z -T ps\n\nx T ps\nx res 72000 1 1\nx init\np1\nx font 5 TR\nf5\ns10000\nV12000\nH72000\nthell\nwh2500\ntw\nH96620\ntorld\nn12000 0\nx trailer\nV792000\nx stop\n\nThis output can be fed into 'grops' to get its representation as a\nPOSTSCRIPT file.\n\nLow-resolution device 'latin1'\n\nThis is similar to the high-resolution device except that the\npositioning is done at a minor scale.  Some comments (lines\nstarting with '#') were added for clarification; they were not\ngenerated by the formatter.\n\nshell> echo \"hell world\" | groff -Z -T latin1\n\n# prologue\nx T latin1\nx res 240 24 40\nx init\n# begin a new page\np1\n# font setup\nx font 1 R\nf1\ns10\n# initial positioning on the page\nV40\nH0\n# write text `hell'\nthell\n# inform about space, and issue a horizontal jump\nwh24\n# write text `world'\ntworld\n# announce line break, but do nothing because ...\nn40 0\n# ... the end of the document has been reached\nx trailer\nV2640\nx stop\n\nThis output can be fed into 'grotty' to get a formatted text\ndocument.\n\nAT&T 'troff' output\nSince a computer monitor has a very low resolution compared to\nmodern printers the intermediate output for the X Window devices\ncan use the jump-and-write command with its 2-digit displacements.\n\nshell> echo \"hell world\" | groff -Z -T X100\n\nx T X100\nx res 100 1 1\nx init\np1\nx font 5 TR\nf5\ns10\nV16\nH100\n# write text with jump-and-write commands\nch07e07l03lw06w11o07r05l03dh7\nn16 0\nx trailer\nV1100\nx stop\n\nThis output can be fed into 'xditview' or 'gxditview' for\ndisplaying in X.\n\nDue to the obsolete jump-and-write command, the text clusters in\nthe AT&T 'troff' output are almost unreadable.\n\nFile: groff.info,  Node: Output Language Compatibility,  Prev: Intermediate Output Examples,  Up: gtroff Output\n\n\nThe intermediate output language of AT&T 'troff' was first documented in\nthe Unix troff manual, with later additions documented in 'A\nTypesetter-independent TROFF', written by Brian Kernighan.\n\nThe 'gtroff' intermediate output format is compatible with this\nspecification except for the following features.\n\n* The classical quasi device independence is not yet implemented.\n\n* The old hardware was very different from what we use today.  So the\n'groff' devices are also fundamentally different from the ones in\nAT&T 'troff'.  For example, the AT&T POSTSCRIPT device is called\n'post' and has a resolution of only 720 units per inch, suitable\nfor printers 20 years ago, while 'groff''s 'ps' device has a\nresolution of 72000 units per inch.  Maybe, by implementing some\nrescaling mechanism similar to the classical quasi device\nindependence, 'groff' could emulate AT&T's 'post' device.\n\n* The B-spline command 'D~' is correctly handled by the intermediate\noutput parser, but the drawing routines aren't implemented in some\nof the postprocessor programs.\n\n* The argument of the commands 's' and 'x H' has the implicit unit\nscaled point 'z' in 'gtroff', while AT&T 'troff' has point ('p').\nThis isn't an incompatibility but a compatible extension, for both\nunits coincide for all devices without a 'sizescale' parameter in\nthe 'DESC' file, including all postprocessors from AT&T and\n'groff''s text devices.  The few 'groff' devices with a 'sizescale'\nparameter either do not exist for AT&T 'troff', have a different\nname, or seem to have a different resolution.  So conflicts are\nvery unlikely.\n\n* The position changing after the commands 'Dp', 'DP', and 'Dt' is\nillogical, but as old versions of 'gtroff' used this feature it is\nkept for compatibility reasons.\n\nFile: groff.info,  Node: Font Files,  Prev: gtroff Output,  Up: File formats\n"
                },
                {
                    "name": "8.2 Font Files",
                    "content": "The 'gtroff' font format is roughly a superset of the 'ditroff' font\nformat (as used in later versions of AT&T 'troff' and its descendants).\nUnlike the 'ditroff' font format, there is no associated binary format;\nall files are text files.(1)  (*note Font Files-Footnote-1::) The font\nfiles for device NAME are stored in a directory 'devNAME'.  There are\ntwo types of file: a device description file called 'DESC' and for each\nfont F a font file called 'F'.\n\n* Menu:\n\n* DESC File Format::\n* Font File Format::\n\nFile: groff.info,  Node: DESC File Format,  Next: Font File Format,  Prev: Font Files,  Up: Font Files\n\n\nThe 'DESC' file can contain the following types of line.  Except for the\n'charset' keyword, which must come last (if at all), the order of the\nlines is not important.  Later entries in the file, however, override\nprevious values.\n\n'charset'\nThis line and everything following in the file are ignored.  It is\nallowed for the sake of backwards compatibility.\n\n'family FAM'\nThe default font family is FAM.\n\n'fonts N F1 F2 F3 ... FN'\nFonts F1 ... FN are mounted in the font positions M+1, ..., M+N\nwhere M is the number of styles.  This command may extend over more\nthan one line.  A font name of 0 means no font is mounted on the\ncorresponding font position.\n\n'hor N'\nThe horizontal resolution is N machine units.  All horizontal\nquantities are rounded to be multiples of this value.\n\n'imagegenerator STRING'\nNeeded for 'grohtml' only.  It specifies the program to generate\nPNG images from POSTSCRIPT input.  Under GNU/Linux this is usually\n'gs' but under other systems (notably cygwin) it might be set to\nanother name.\n\n'paperlength N'\nThe physical vertical dimension of the output medium in machine\nunits.  This isn't used by 'troff' itself but by output devices.\nDeprecated.  Use 'papersize' instead.\n\n'papersize STRING ...'\nSelect a paper size.  Valid values for STRING are the ISO paper\ntypes 'A0'-'A7', 'B0'-'B7', 'C0'-'C7', 'D0'-'D7', 'DL', and the US\npaper types 'letter', 'legal', 'tabloid', 'ledger', 'statement',\n'executive', 'com10', and 'monarch'.  Case is not significant for\nSTRING if it holds predefined paper types.  Alternatively, STRING\ncan be a file name (e.g. '/etc/papersize'); if the file can be\nopened, 'groff' reads the first line and tests for the above paper\nsizes.  Finally, STRING can be a custom paper size in the format\n'LENGTH,WIDTH' (no spaces before and after the comma).  Both LENGTH\nand WIDTH must have a unit appended; valid values are 'i' for\ninches, 'c' for centimeters, 'p' for points, and 'P' for picas.\nExample: '12c,235p'.  An argument that starts with a digit is\nalways treated as a custom paper format.  'papersize' sets both the\nvertical and horizontal dimension of the output medium.\n\nMore than one argument can be specified; 'groff' scans from left to\nright and uses the first valid paper specification.\n\n'paperwidth N'\nThe physical horizontal dimension of the output medium in machine\nunits.  This isn't used by 'troff' itself but by output devices.\nDeprecated.  Use 'papersize' instead.\n\n'passfilenames'\nTell 'gtroff' to emit the name of the source file currently being\nprocessed.  This is achieved by the intermediate output command\n'F'.  Currently, this is only used by the 'grohtml' output device.\n\n'postpro PROGRAM'\nCall PROGRAM as a postprocessor.  For example, the line\n\npostpro grodvi\n\nin the file 'devdvi/DESC' makes 'groff' call 'grodvi' if option\n'-Tdvi' is given (and '-Z' isn't used).\n\n'prepro PROGRAM'\nCall PROGRAM as a preprocessor.  Currently, this keyword is used by\n'groff' with option '-Thtml' or '-Txhtml' only.\n\n'print PROGRAM'\nUse PROGRAM as a spooler program for printing.  If omitted, the\n'-l' and '-L' options of 'groff' are ignored.\n\n'res N'\nThere are N machine units per inch.\n\n'sizes S1 S2 ... SN 0'\nThis means that the device has fonts at S1, S2, ... SN scaled\npoints.  The list of sizes must be terminated by 0 (this is digit\nzero).  Each SI can also be a range of sizes M-N.  The list can\nextend over more than one line.\n\n'sizescale N'\nThe scale factor for point sizes.  By default this has a value\nof 1.  One scaled point is equal to one point/N.  The arguments to\nthe 'unitwidth' and 'sizes' commands are given in scaled points.\n*Note Fractional Type Sizes::, for more information.\n\n'styles S1 S2 ... SM'\nThe first M font positions are associated with styles S1 ... SM.\n\n'tcommand'\nThis means that the postprocessor can handle the 't' and 'u'\nintermediate output commands.\n\n'unicode'\nIndicate that the output device supports the complete Unicode\nrepertoire.  Useful only for devices that produce character\nentities instead of glyphs.\n\nIf 'unicode' is present, no 'charset' section is required in the\nfont description files since the Unicode handling built into\n'groff' is used.  However, if there are entries in a 'charset'\nsection, they either override the default mappings for those\nparticular characters or add new mappings (normally for composite\ncharacters).\n\nThis is used for '-Tutf8', '-Thtml', and '-Txhtml'.\n\n'unitwidth N'\nQuantities in the font files are given in machine units for fonts\nwhose point size is N scaled points.\n\n'unscaledcharwidths'\nMake the font handling module always return unscaled character\nwidths.  Needed for the 'grohtml' device.\n\n'usecharnamesinspecial'\nThis command indicates that 'gtroff' should encode special\ncharacters inside special commands.  Currently, this is only used\nby the 'grohtml' output device.  *Note Postprocessor Access::.\n\n'vert N'\nThe vertical resolution is N machine units.  All vertical\nquantities are rounded to be multiples of this value.\n\nThe 'res', 'unitwidth', 'fonts', and 'sizes' lines are mandatory.\nOther commands are ignored by 'gtroff' but may be used by postprocessors\nto store arbitrary information about the device in the 'DESC' file.\n\nHere a list of obsolete keywords that are recognized by 'groff' but\ncompletely ignored: 'spare1', 'spare2', 'biggestfont'.\n\nFile: groff.info,  Node: Font File Format,  Prev: DESC File Format,  Up: Font Files\n\n\nA \"font file\", also (and probably better) called a \"font description\nfile\", has two sections.  The first section is a sequence of lines each\ncontaining a sequence of blank delimited words; the first word in the\nline is a key, and subsequent words give a value for that key.\n\n'name F'\nThe name of the font is F.\n\n'spacewidth N'\nThe normal width of a space is N.\n\n'slant N'\nThe glyphs of the font have a slant of N degrees.  (Positive means\nforward.)\n\n'ligatures LIG1 LIG2 ... LIGN [0]'\nGlyphs LIG1, LIG2, ..., LIGN are ligatures; possible ligatures are\n'ff', 'fi', 'fl', 'ffi' and 'ffl'.  For backwards compatibility,\nthe list of ligatures may be terminated with a 0.  The list of\nligatures may not extend over more than one line.\n\n'special'\nThe font is \"special\"; this means that when a glyph is requested\nthat is not present in the current font, it is searched for in any\nspecial fonts that are mounted.\n\nOther commands are ignored by 'gtroff' but may be used by\npostprocessors to store arbitrary information about the font in the font\nfile.\n\nThe first section can contain comments, which start with the '#'\ncharacter and extend to the end of a line.\n\nThe second section contains one or two subsections.  It must contain\na 'charset' subsection and it may also contain a 'kernpairs' subsection.\nThese subsections can appear in any order.  Each subsection starts with\na word on a line by itself.\n\nThe word 'charset' starts the character set subsection.(1)  (*note\nFont File Format-Footnote-1::) The 'charset' line is followed by a\nsequence of lines.  Each line gives information for one glyph.  A line\ncomprises a number of fields separated by blanks or tabs.  The format is\n\nNAME METRICS TYPE CODE [ENTITY-NAME] ['--' COMMENT]\n\nNAME identifies the glyph name(2) (*note Font File Format-Footnote-2::):\nIf NAME is a single character C then it corresponds to the 'gtroff'\ninput character C; if it is of the form '\\C' where C is a single\ncharacter, then it corresponds to the special character '\\[C]';\notherwise it corresponds to the special character '\\[NAME]'.  If it is\nexactly two characters XX it can be entered as '\\(XX'.  Note that\nsingle-letter special characters can't be accessed as '\\C'; the only\nexception is '\\-', which is identical to '\\[-]'.\n\n'gtroff' supports 8-bit input characters; however some utilities have\ndifficulties with eight-bit characters.  For this reason, there is a\nconvention that the entity name 'charN' is equivalent to the single\ninput character whose code is N.  For example, 'char163' would be\nequivalent to the character with code 163, which is the pounds sterling\nsign in the ISO Latin-1 character set.  You shouldn't use 'charN'\nentities in font description files since they are related to input, not\noutput.  Otherwise, you get hard-coded connections between input and\noutput encoding, which prevents use of different (input) character sets.\n\nThe name '---' is special and indicates that the glyph is unnamed;\nsuch glyphs can only be used by means of the '\\N' escape sequence in\n'gtroff'.\n\nThe TYPE field gives the glyph type:\n\n'1'\nthe glyph has a descender, for example, 'p';\n\n'2'\nthe glyph has an ascender, for example, 'b';\n\n'3'\nthe glyph has both an ascender and a descender, for example, '('.\n\nThe CODE field gives the code that the postprocessor uses to print\nthe glyph.  The glyph can also be input to 'gtroff' using this code by\nmeans of the '\\N' escape sequence.  CODE can be any integer.  If it\nstarts with '0' it is interpreted as octal; if it starts with '0x' or\n'0X' it is interpreted as hexadecimal.  Note, however, that the '\\N'\nescape sequence only accepts a decimal integer.\n\nThe ENTITY-NAME field gives an ASCII string identifying the glyph\nthat the postprocessor uses to print the 'gtroff' glyph NAME.  This\nfield is optional and has been introduced so that the 'grohtml' device\ndriver can encode its character set.  For example, the glyph '\\[Po]' is\nrepresented as '&pound;' in HTML 4.0.\n\nAnything on the line after the ENTITY-NAME field resp. after '--' is\nignored.\n\nThe METRICS field has the form:\n\nWIDTH[','HEIGHT[','DEPTH[','ITALIC-CORRECTION\n[','LEFT-ITALIC-CORRECTION[','SUBSCRIPT-CORRECTION]]]]]\n\nThere must not be any spaces between these subfields (it has been split\nhere into two lines for better legibility only).  Missing subfields are\nassumed to be 0.  The subfields are all decimal integers.  Since there\nis no associated binary format, these values are not required to fit\ninto a variable of type 'char' as they are in 'ditroff'.  The WIDTH\nsubfield gives the width of the glyph.  The HEIGHT subfield gives the\nheight of the glyph (upwards is positive); if a glyph does not extend\nabove the baseline, it should be given a zero height, rather than a\nnegative height.  The DEPTH subfield gives the depth of the glyph, that\nis, the distance from the baseline to the lowest point below the\nbaseline to which the glyph extends (downwards is positive); if a glyph\ndoes not extend below the baseline, it should be given a zero depth,\nrather than a negative depth.  The ITALIC-CORRECTION subfield gives the\namount of space that should be added after the glyph when it is\nimmediately to be followed by a glyph from a roman font.  The\nLEFT-ITALIC-CORRECTION subfield gives the amount of space that should be\nadded before the glyph when it is immediately to be preceded by a glyph\nfrom a roman font.  The SUBSCRIPT-CORRECTION gives the amount of space\nthat should be added after a glyph before adding a subscript.  This\nshould be less than the italic correction.\n\nA line in the 'charset' section can also have the format\n\nNAME \"\n\nThis indicates that NAME is just another name for the glyph mentioned in\nthe preceding line.\n\nThe word 'kernpairs' starts the kernpairs section.  This contains a\nsequence of lines of the form:\n\nC1 C2 N\n\nThis means that when glyph C1 appears next to glyph C2 the space between\nthem should be increased by N.  Most entries in the kernpairs section\nhave a negative value for N.\n\nFile: groff.info,  Node: Installation,  Next: Copying This Manual,  Prev: File formats,  Up: Top\n"
                }
            ]
        },
        "9 Installation": {
            "content": "File: groff.info,  Node: Copying This Manual,  Next: Request Index,  Prev: Installation,  Up: Top\n",
            "subsections": []
        },
        "Appendix A Copying This Manual": {
            "content": "Version 1.3, 3 November 2008\n\nCopyright (C) 2000-2018 Free Software Foundation, Inc.\n<http://fsf.org/>\n\nEveryone is permitted to copy and distribute verbatim copies\nof this license document, but changing it is not allowed.\n\n0. PREAMBLE\n\nThe purpose of this License is to make a manual, textbook, or other\nfunctional and useful document \"free\" in the sense of freedom: to\nassure everyone the effective freedom to copy and redistribute it,\nwith or without modifying it, either commercially or\nnoncommercially.  Secondarily, this License preserves for the\nauthor and publisher a way to get credit for their work, while not\nbeing considered responsible for modifications made by others.\n\nThis License is a kind of \"copyleft\", which means that derivative\nworks of the document must themselves be free in the same sense.\nIt complements the GNU General Public License, which is a copyleft\nlicense designed for free software.\n\nWe have designed this License in order to use it for manuals for\nfree software, because free software needs free documentation: a\nfree program should come with manuals providing the same freedoms\nthat the software does.  But this License is not limited to\nsoftware manuals; it can be used for any textual work, regardless\nof subject matter or whether it is published as a printed book.  We\nrecommend this License principally for works whose purpose is\ninstruction or reference.\n\n1. APPLICABILITY AND DEFINITIONS\n\nThis License applies to any manual or other work, in any medium,\nthat contains a notice placed by the copyright holder saying it can\nbe distributed under the terms of this License.  Such a notice\ngrants a world-wide, royalty-free license, unlimited in duration,\nto use that work under the conditions stated herein.  The\n\"Document\", below, refers to any such manual or work.  Any member\nof the public is a licensee, and is addressed as \"you\".  You accept\nthe license if you copy, modify or distribute the work in a way\nrequiring permission under copyright law.\n\nA \"Modified Version\" of the Document means any work containing the\nDocument or a portion of it, either copied verbatim, or with\nmodifications and/or translated into another language.\n\nA \"Secondary Section\" is a named appendix or a front-matter section\nof the Document that deals exclusively with the relationship of the\npublishers or authors of the Document to the Document's overall\nsubject (or to related matters) and contains nothing that could\nfall directly within that overall subject.  (Thus, if the Document\nis in part a textbook of mathematics, a Secondary Section may not\nexplain any mathematics.)  The relationship could be a matter of\nhistorical connection with the subject or with related matters, or\nof legal, commercial, philosophical, ethical or political position\nregarding them.\n\nThe \"Invariant Sections\" are certain Secondary Sections whose\ntitles are designated, as being those of Invariant Sections, in the\nnotice that says that the Document is released under this License.\nIf a section does not fit the above definition of Secondary then it\nis not allowed to be designated as Invariant.  The Document may\ncontain zero Invariant Sections.  If the Document does not identify\nany Invariant Sections then there are none.\n\nThe \"Cover Texts\" are certain short passages of text that are\nlisted, as Front-Cover Texts or Back-Cover Texts, in the notice\nthat says that the Document is released under this License.  A\nFront-Cover Text may be at most 5 words, and a Back-Cover Text may\nbe at most 25 words.\n\nA \"Transparent\" copy of the Document means a machine-readable copy,\nrepresented in a format whose specification is available to the\ngeneral public, that is suitable for revising the document\nstraightforwardly with generic text editors or (for images composed\nof pixels) generic paint programs or (for drawings) some widely\navailable drawing editor, and that is suitable for input to text\nformatters or for automatic translation to a variety of formats\nsuitable for input to text formatters.  A copy made in an otherwise\nTransparent file format whose markup, or absence of markup, has\nbeen arranged to thwart or discourage subsequent modification by\nreaders is not Transparent.  An image format is not Transparent if\nused for any substantial amount of text.  A copy that is not\n\"Transparent\" is called \"Opaque\".\n\nExamples of suitable formats for Transparent copies include plain\nASCII without markup, Texinfo input format, LaTeX input format,\nSGML or XML using a publicly available DTD, and standard-conforming\nsimple HTML, PostScript or PDF designed for human modification.\nExamples of transparent image formats include PNG, XCF and JPG.\nOpaque formats include proprietary formats that can be read and\nedited only by proprietary word processors, SGML or XML for which\nthe DTD and/or processing tools are not generally available, and\nthe machine-generated HTML, PostScript or PDF produced by some word\nprocessors for output purposes only.\n\nThe \"Title Page\" means, for a printed book, the title page itself,\nplus such following pages as are needed to hold, legibly, the\nmaterial this License requires to appear in the title page.  For\nworks in formats which do not have any title page as such, \"Title\nPage\" means the text near the most prominent appearance of the\nwork's title, preceding the beginning of the body of the text.\n\nThe \"publisher\" means any person or entity that distributes copies\nof the Document to the public.\n\nA section \"Entitled XYZ\" means a named subunit of the Document\nwhose title either is precisely XYZ or contains XYZ in parentheses\nfollowing text that translates XYZ in another language.  (Here XYZ\nstands for a specific section name mentioned below, such as\n\"Acknowledgements\", \"Dedications\", \"Endorsements\", or \"History\".)\nTo \"Preserve the Title\" of such a section when you modify the\nDocument means that it remains a section \"Entitled XYZ\" according\nto this definition.\n\nThe Document may include Warranty Disclaimers next to the notice\nwhich states that this License applies to the Document.  These\nWarranty Disclaimers are considered to be included by reference in\nthis License, but only as regards disclaiming warranties: any other\nimplication that these Warranty Disclaimers may have is void and\nhas no effect on the meaning of this License.\n\n2. VERBATIM COPYING\n\nYou may copy and distribute the Document in any medium, either\ncommercially or noncommercially, provided that this License, the\ncopyright notices, and the license notice saying this License\napplies to the Document are reproduced in all copies, and that you\nadd no other conditions whatsoever to those of this License.  You\nmay not use technical measures to obstruct or control the reading\nor further copying of the copies you make or distribute.  However,\nyou may accept compensation in exchange for copies.  If you\ndistribute a large enough number of copies you must also follow the\nconditions in section 3.\n\nYou may also lend copies, under the same conditions stated above,\nand you may publicly display copies.\n\n3. COPYING IN QUANTITY\n\nIf you publish printed copies (or copies in media that commonly\nhave printed covers) of the Document, numbering more than 100, and\nthe Document's license notice requires Cover Texts, you must\nenclose the copies in covers that carry, clearly and legibly, all\nthese Cover Texts: Front-Cover Texts on the front cover, and\nBack-Cover Texts on the back cover.  Both covers must also clearly\nand legibly identify you as the publisher of these copies.  The\nfront cover must present the full title with all words of the title\nequally prominent and visible.  You may add other material on the\ncovers in addition.  Copying with changes limited to the covers, as\nlong as they preserve the title of the Document and satisfy these\nconditions, can be treated as verbatim copying in other respects.\n\nIf the required texts for either cover are too voluminous to fit\nlegibly, you should put the first ones listed (as many as fit\nreasonably) on the actual cover, and continue the rest onto\nadjacent pages.\n\nIf you publish or distribute Opaque copies of the Document\nnumbering more than 100, you must either include a machine-readable\nTransparent copy along with each Opaque copy, or state in or with\neach Opaque copy a computer-network location from which the general\nnetwork-using public has access to download using public-standard\nnetwork protocols a complete Transparent copy of the Document, free\nof added material.  If you use the latter option, you must take\nreasonably prudent steps, when you begin distribution of Opaque\ncopies in quantity, to ensure that this Transparent copy will\nremain thus accessible at the stated location until at least one\nyear after the last time you distribute an Opaque copy (directly or\nthrough your agents or retailers) of that edition to the public.\n\nIt is requested, but not required, that you contact the authors of\nthe Document well before redistributing any large number of copies,\nto give them a chance to provide you with an updated version of the\nDocument.\n\n4. MODIFICATIONS\n\nYou may copy and distribute a Modified Version of the Document\nunder the conditions of sections 2 and 3 above, provided that you\nrelease the Modified Version under precisely this License, with the\nModified Version filling the role of the Document, thus licensing\ndistribution and modification of the Modified Version to whoever\npossesses a copy of it.  In addition, you must do these things in\nthe Modified Version:\n\nA. Use in the Title Page (and on the covers, if any) a title\ndistinct from that of the Document, and from those of previous\nversions (which should, if there were any, be listed in the\nHistory section of the Document).  You may use the same title\nas a previous version if the original publisher of that\nversion gives permission.\n\nB. List on the Title Page, as authors, one or more persons or\nentities responsible for authorship of the modifications in\nthe Modified Version, together with at least five of the\nprincipal authors of the Document (all of its principal\nauthors, if it has fewer than five), unless they release you\nfrom this requirement.\n\nC. State on the Title page the name of the publisher of the\nModified Version, as the publisher.\n\nD. Preserve all the copyright notices of the Document.\n\nE. Add an appropriate copyright notice for your modifications\nadjacent to the other copyright notices.\n\nF. Include, immediately after the copyright notices, a license\nnotice giving the public permission to use the Modified\nVersion under the terms of this License, in the form shown in\nthe Addendum below.\n\nG. Preserve in that license notice the full lists of Invariant\nSections and required Cover Texts given in the Document's\nlicense notice.\n\nH. Include an unaltered copy of this License.\n\nI. Preserve the section Entitled \"History\", Preserve its Title,\nand add to it an item stating at least the title, year, new\nauthors, and publisher of the Modified Version as given on the\nTitle Page.  If there is no section Entitled \"History\" in the\nDocument, create one stating the title, year, authors, and\npublisher of the Document as given on its Title Page, then add\nan item describing the Modified Version as stated in the\nprevious sentence.\n\nJ. Preserve the network location, if any, given in the Document\nfor public access to a Transparent copy of the Document, and\nlikewise the network locations given in the Document for\nprevious versions it was based on.  These may be placed in the\n\"History\" section.  You may omit a network location for a work\nthat was published at least four years before the Document\nitself, or if the original publisher of the version it refers\nto gives permission.\n\nK. For any section Entitled \"Acknowledgements\" or \"Dedications\",\nPreserve the Title of the section, and preserve in the section\nall the substance and tone of each of the contributor\nacknowledgements and/or dedications given therein.\n\nL. Preserve all the Invariant Sections of the Document, unaltered\nin their text and in their titles.  Section numbers or the\nequivalent are not considered part of the section titles.\n\nM. Delete any section Entitled \"Endorsements\".  Such a section\nmay not be included in the Modified Version.\n\nN. Do not retitle any existing section to be Entitled\n\"Endorsements\" or to conflict in title with any Invariant\nSection.\n\nO. Preserve any Warranty Disclaimers.\n\nIf the Modified Version includes new front-matter sections or\nappendices that qualify as Secondary Sections and contain no\nmaterial copied from the Document, you may at your option designate\nsome or all of these sections as invariant.  To do this, add their\ntitles to the list of Invariant Sections in the Modified Version's\nlicense notice.  These titles must be distinct from any other\nsection titles.\n\nYou may add a section Entitled \"Endorsements\", provided it contains\nnothing but endorsements of your Modified Version by various\nparties--for example, statements of peer review or that the text\nhas been approved by an organization as the authoritative\ndefinition of a standard.\n\nYou may add a passage of up to five words as a Front-Cover Text,\nand a passage of up to 25 words as a Back-Cover Text, to the end of\nthe list of Cover Texts in the Modified Version.  Only one passage\nof Front-Cover Text and one of Back-Cover Text may be added by (or\nthrough arrangements made by) any one entity.  If the Document\nalready includes a cover text for the same cover, previously added\nby you or by arrangement made by the same entity you are acting on\nbehalf of, you may not add another; but you may replace the old\none, on explicit permission from the previous publisher that added\nthe old one.\n\nThe author(s) and publisher(s) of the Document do not by this\nLicense give permission to use their names for publicity for or to\nassert or imply endorsement of any Modified Version.\n\n5. COMBINING DOCUMENTS\n\nYou may combine the Document with other documents released under\nthis License, under the terms defined in section 4 above for\nmodified versions, provided that you include in the combination all\nof the Invariant Sections of all of the original documents,\nunmodified, and list them all as Invariant Sections of your\ncombined work in its license notice, and that you preserve all\ntheir Warranty Disclaimers.\n\nThe combined work need only contain one copy of this License, and\nmultiple identical Invariant Sections may be replaced with a single\ncopy.  If there are multiple Invariant Sections with the same name\nbut different contents, make the title of each such section unique\nby adding at the end of it, in parentheses, the name of the\noriginal author or publisher of that section if known, or else a\nunique number.  Make the same adjustment to the section titles in\nthe list of Invariant Sections in the license notice of the\ncombined work.\n\nIn the combination, you must combine any sections Entitled\n\"History\" in the various original documents, forming one section\nEntitled \"History\"; likewise combine any sections Entitled\n\"Acknowledgements\", and any sections Entitled \"Dedications\".  You\nmust delete all sections Entitled \"Endorsements.\"\n\n6. COLLECTIONS OF DOCUMENTS\n\nYou may make a collection consisting of the Document and other\ndocuments released under this License, and replace the individual\ncopies of this License in the various documents with a single copy\nthat is included in the collection, provided that you follow the\nrules of this License for verbatim copying of each of the documents\nin all other respects.\n\nYou may extract a single document from such a collection, and\ndistribute it individually under this License, provided you insert\na copy of this License into the extracted document, and follow this\nLicense in all other respects regarding verbatim copying of that\ndocument.\n\n7. AGGREGATION WITH INDEPENDENT WORKS\n\nA compilation of the Document or its derivatives with other\nseparate and independent documents or works, in or on a volume of a\nstorage or distribution medium, is called an \"aggregate\" if the\ncopyright resulting from the compilation is not used to limit the\nlegal rights of the compilation's users beyond what the individual\nworks permit.  When the Document is included in an aggregate, this\nLicense does not apply to the other works in the aggregate which\nare not themselves derivative works of the Document.\n\nIf the Cover Text requirement of section 3 is applicable to these\ncopies of the Document, then if the Document is less than one half\nof the entire aggregate, the Document's Cover Texts may be placed\non covers that bracket the Document within the aggregate, or the\nelectronic equivalent of covers if the Document is in electronic\nform.  Otherwise they must appear on printed covers that bracket\nthe whole aggregate.\n\n8. TRANSLATION\n\nTranslation is considered a kind of modification, so you may\ndistribute translations of the Document under the terms of section\n4.  Replacing Invariant Sections with translations requires special\npermission from their copyright holders, but you may include\ntranslations of some or all Invariant Sections in addition to the\noriginal versions of these Invariant Sections.  You may include a\ntranslation of this License, and all the license notices in the\nDocument, and any Warranty Disclaimers, provided that you also\ninclude the original English version of this License and the\noriginal versions of those notices and disclaimers.  In case of a\ndisagreement between the translation and the original version of\nthis License or a notice or disclaimer, the original version will\nprevail.\n\nIf a section in the Document is Entitled \"Acknowledgements\",\n\"Dedications\", or \"History\", the requirement (section 4) to\nPreserve its Title (section 1) will typically require changing the\nactual title.\n\n9. TERMINATION\n\nYou may not copy, modify, sublicense, or distribute the Document\nexcept as expressly provided under this License.  Any attempt\notherwise to copy, modify, sublicense, or distribute it is void,\nand will automatically terminate your rights under this License.\n\nHowever, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the\ncopyright holder fails to notify you of the violation by some\nreasonable means prior to 60 days after the cessation.\n\nMoreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from\nthat copyright holder, and you cure the violation prior to 30 days\nafter your receipt of the notice.\n\nTermination of your rights under this section does not terminate\nthe licenses of parties who have received copies or rights from you\nunder this License.  If your rights have been terminated and not\npermanently reinstated, receipt of a copy of some or all of the\nsame material does not give you any rights to use it.\n\n10. FUTURE REVISIONS OF THIS LICENSE\n\nThe Free Software Foundation may publish new, revised versions of\nthe GNU Free Documentation License from time to time.  Such new\nversions will be similar in spirit to the present version, but may\ndiffer in detail to address new problems or concerns.  See\n<http://www.gnu.org/copyleft/>.\n\nEach version of the License is given a distinguishing version\nnumber.  If the Document specifies that a particular numbered\nversion of this License \"or any later version\" applies to it, you\nhave the option of following the terms and conditions either of\nthat specified version or of any later version that has been\npublished (not as a draft) by the Free Software Foundation.  If the\nDocument does not specify a version number of this License, you may\nchoose any version ever published (not as a draft) by the Free\nSoftware Foundation.  If the Document specifies that a proxy can\ndecide which future versions of this License can be used, that\nproxy's public statement of acceptance of a version permanently\nauthorizes you to choose that version for the Document.\n\n11. RELICENSING\n\n\"Massive Multiauthor Collaboration Site\" (or \"MMC Site\") means any\nWorld Wide Web server that publishes copyrightable works and also\nprovides prominent facilities for anybody to edit those works.  A\npublic wiki that anybody can edit is an example of such a server.\nA \"Massive Multiauthor Collaboration\" (or \"MMC\") contained in the\nsite means any set of copyrightable works thus published on the MMC\nsite.\n\n\"CC-BY-SA\" means the Creative Commons Attribution-Share Alike 3.0\nlicense published by Creative Commons Corporation, a not-for-profit\ncorporation with a principal place of business in San Francisco,\nCalifornia, as well as future copyleft versions of that license\npublished by that same organization.\n\n\"Incorporate\" means to publish or republish a Document, in whole or\nin part, as part of another Document.\n\nAn MMC is \"eligible for relicensing\" if it is licensed under this\nLicense, and if all works that were first published under this\nLicense somewhere other than this MMC, and subsequently\nincorporated in whole or in part into the MMC, (1) had no cover\ntexts or invariant sections, and (2) were thus incorporated prior\nto November 1, 2008.\n\nThe operator of an MMC Site may republish an MMC contained in the\nsite under CC-BY-SA on the same site at any time before August 1,\n2009, provided the MMC is eligible for relicensing.\n",
            "subsections": [
                {
                    "name": "ADDENDUM: How to use this License for your documents",
                    "content": "To use this License in a document you have written, include a copy of\nthe License in the document and put the following copyright and license\nnotices just after the title page:\n\nCopyright (C)  YEAR  YOUR NAME.\nPermission is granted to copy, distribute and/or modify this document\nunder the terms of the GNU Free Documentation License, Version 1.3\nor any later version published by the Free Software Foundation;\nwith no Invariant Sections, no Front-Cover Texts, and no Back-Cover\nTexts.  A copy of the license is included in the section entitled ``GNU\nFree Documentation License''.\n\nIf you have Invariant Sections, Front-Cover Texts and Back-Cover\nTexts, replace the \"with...Texts.\" line with this:\n\nwith the Invariant Sections being LIST THEIR TITLES, with\nthe Front-Cover Texts being LIST, and with the Back-Cover Texts\nbeing LIST.\n\nIf you have Invariant Sections without Cover Texts, or some other\ncombination of the three, merge those two alternatives to suit the\nsituation.\n\nIf your document contains nontrivial examples of program code, we\nrecommend releasing these examples in parallel under your choice of free\nsoftware license, such as the GNU General Public License, to permit\ntheir use in free software.\n\nFile: groff.info,  Node: Request Index,  Next: Escape Index,  Prev: Copying This Manual,  Up: Top\n"
                }
            ]
        },
        "Appendix B Request Index": {
            "content": "Requests appear without the leading control character (normally either\n'.' or ''').\n\n\n* Menu:\n\n* ab:                                    Debugging.           (line  40)\n* ad:                                    Manipulating Filling and Adjusting.\n(line  50)\n* af:                                    Assigning Formats.   (line  12)\n* aln:                                   Setting Registers.   (line 112)\n* als:                                   Strings.             (line 226)\n* am:                                    Writing Macros.      (line 113)\n* am1:                                   Writing Macros.      (line 114)\n* ami:                                   Writing Macros.      (line 115)\n* ami1:                                  Writing Macros.      (line 116)\n* as:                                    Strings.             (line 174)\n* as1:                                   Strings.             (line 175)\n* asciify:                               Diversions.          (line 194)\n* backtrace:                             Debugging.           (line  96)\n* bd:                                    Artificial Fonts.    (line  95)\n* blm:                                   Blank Line Traps.    (line   7)\n* box:                                   Diversions.          (line  34)\n* boxa:                                  Diversions.          (line  35)\n* bp:                                    Page Control.        (line   7)\n* br:                                    Manipulating Filling and Adjusting.\n(line  12)\n* break:                                 while.               (line  68)\n* brp:                                   Manipulating Filling and Adjusting.\n(line 130)\n* c2:                                    Character Translations.\n(line  16)\n* cc:                                    Character Translations.\n(line  10)\n* ce:                                    Manipulating Filling and Adjusting.\n(line 207)\n* cf:                                    I/O.                 (line  50)\n* cflags:                                Using Symbols.       (line 233)\n* ch:                                    Page Location Traps. (line 111)\n* char:                                  Using Symbols.       (line 319)\n* chop:                                  Strings.             (line 264)\n* class:                                 Character Classes.   (line  12)\n* close:                                 I/O.                 (line 230)\n* color:                                 Colors.              (line   7)\n* composite:                             Using Symbols.       (line 188)\n* continue:                              while.               (line  72)\n* cp:                                    Implementation Differences.\n(line  22)\n* cs:                                    Artificial Fonts.    (line 125)\n* cu:                                    Artificial Fonts.    (line  86)\n* da:                                    Diversions.          (line  22)\n* de:                                    Writing Macros.      (line  15)\n* de1:                                   Writing Macros.      (line  16)\n* defcolor:                              Colors.              (line  21)\n* dei:                                   Writing Macros.      (line  17)\n* dei1:                                  Writing Macros.      (line  18)\n* device:                                Postprocessor Access.\n(line  11)\n* devicem:                               Postprocessor Access.\n(line  29)\n* di:                                    Diversions.          (line  21)\n* do:                                    Implementation Differences.\n(line  23)\n* ds:                                    Strings.             (line  15)\n* ds1:                                   Strings.             (line  16)\n* dt:                                    Diversion Traps.     (line   7)\n* ec:                                    Character Translations.\n(line  47)\n* ecr:                                   Character Translations.\n(line  59)\n* ecs:                                   Character Translations.\n(line  58)\n* el:                                    if-else.             (line  27)\n* em:                                    End-of-input Traps.  (line   7)\n* eo:                                    Character Translations.\n(line  24)\n* ev:                                    Environments.        (line  37)\n* evc:                                   Environments.        (line  69)\n* ex:                                    Debugging.           (line  45)\n* fam:                                   Font Families.       (line  20)\n* fc:                                    Fields.              (line  18)\n* fchar:                                 Using Symbols.       (line 320)\n* fcolor:                                Colors.              (line  78)\n* fi:                                    Manipulating Filling and Adjusting.\n(line  28)\n* fl:                                    Debugging.           (line  87)\n* fp:                                    Font Positions.      (line  11)\n* fschar:                                Using Symbols.       (line 321)\n* fspecial:                              Special Fonts.       (line  18)\n* ft:                                    Changing Fonts.      (line   7)\n* ft <1>:                                Font Positions.      (line  56)\n* ftr:                                   Changing Fonts.      (line  55)\n* fzoom:                                 Changing Fonts.      (line  69)\n* gcolor:                                Colors.              (line  48)\n* hc:                                    Manipulating Hyphenation.\n(line 163)\n* hcode:                                 Manipulating Hyphenation.\n(line 232)\n* hla:                                   Manipulating Hyphenation.\n(line 308)\n* hlm:                                   Manipulating Hyphenation.\n(line 102)\n* hpf:                                   Manipulating Hyphenation.\n(line 172)\n* hpfa:                                  Manipulating Hyphenation.\n(line 173)\n* hpfcode:                               Manipulating Hyphenation.\n(line 174)\n* hw:                                    Manipulating Hyphenation.\n(line 118)\n* hy:                                    Manipulating Hyphenation.\n(line   9)\n* hym:                                   Manipulating Hyphenation.\n(line 265)\n* hys:                                   Manipulating Hyphenation.\n(line 280)\n* ie:                                    if-else.             (line  26)\n* if:                                    if-else.             (line  10)\n* ig:                                    Comments.            (line  63)\n* in:                                    Line Layout.         (line  86)\n* it:                                    Input Line Traps.    (line   7)\n* itc:                                   Input Line Traps.    (line   8)\n* kern:                                  Ligatures and Kerning.\n(line  41)\n* lc:                                    Leaders.             (line  23)\n* length:                                Strings.             (line 208)\n* lf:                                    Debugging.           (line  10)\n* lg:                                    Ligatures and Kerning.\n(line  23)\n* linetabs:                              Tabs and Fields.     (line 137)\n* ll:                                    Line Layout.         (line 140)\n* ls:                                    Manipulating Spacing.\n(line  63)\n* lsm:                                   Leading Spaces Traps.\n(line   7)\n* lt:                                    Page Layout.         (line  64)\n* mc:                                    Miscellaneous.       (line  73)\n* mk:                                    Page Motions.        (line  10)\n* mso:                                   I/O.                 (line  40)\n* na:                                    Manipulating Filling and Adjusting.\n(line 122)\n* ne:                                    Page Control.        (line  33)\n* nf:                                    Manipulating Filling and Adjusting.\n(line  39)\n* nh:                                    Manipulating Hyphenation.\n(line  94)\n* nm:                                    Miscellaneous.       (line  10)\n* nn:                                    Miscellaneous.       (line  69)\n* nop:                                   if-else.             (line  23)\n* nr:                                    Setting Registers.   (line  13)\n* nr <1>:                                Setting Registers.   (line  68)\n* nr <2>:                                Auto-increment.      (line  11)\n* nroff:                                 Troff and Nroff Mode.\n(line  32)\n* ns:                                    Manipulating Spacing.\n(line 121)\n* nx:                                    I/O.                 (line  83)\n* open:                                  I/O.                 (line 198)\n* opena:                                 I/O.                 (line 199)\n* os:                                    Page Control.        (line  53)\n* output:                                Diversions.          (line 179)\n* pc:                                    Page Layout.         (line  93)\n* pev:                                   Debugging.           (line  62)\n* pi:                                    I/O.                 (line 142)\n* pl:                                    Page Layout.         (line  10)\n* pm:                                    Debugging.           (line  66)\n* pn:                                    Page Layout.         (line  81)\n* pnr:                                   Debugging.           (line  77)\n* po:                                    Line Layout.         (line  58)\n* ps:                                    Changing Type Sizes. (line   7)\n* psbb:                                  Miscellaneous.       (line 133)\n* pso:                                   I/O.                 (line  29)\n* ptr:                                   Debugging.           (line  81)\n* pvs:                                   Changing Type Sizes. (line 132)\n* rchar:                                 Using Symbols.       (line 377)\n* rd:                                    I/O.                 (line  88)\n* return:                                Writing Macros.      (line 147)\n* rfschar:                               Using Symbols.       (line 378)\n* rj:                                    Manipulating Filling and Adjusting.\n(line 253)\n* rm:                                    Strings.             (line 221)\n* rn:                                    Strings.             (line 218)\n* rnn:                                   Setting Registers.   (line 108)\n* rr:                                    Setting Registers.   (line 104)\n* rs:                                    Manipulating Spacing.\n(line 122)\n* rt:                                    Page Motions.        (line  11)\n* schar:                                 Using Symbols.       (line 322)\n* shc:                                   Manipulating Hyphenation.\n(line 296)\n* shift:                                 Parameters.          (line  30)\n* sizes:                                 Changing Type Sizes. (line  68)\n* so:                                    I/O.                 (line   9)\n* sp:                                    Manipulating Spacing.\n(line   7)\n* special:                               Special Fonts.       (line  17)\n* spreadwarn:                            Debugging.           (line 131)\n* ss:                                    Manipulating Filling and Adjusting.\n(line 154)\n* sty:                                   Font Families.       (line  59)\n* substring:                             Strings.             (line 191)\n* sv:                                    Page Control.        (line  52)\n* sy:                                    I/O.                 (line 163)\n* ta:                                    Tabs and Fields.     (line  14)\n* tc:                                    Tabs and Fields.     (line 129)\n* ti:                                    Line Layout.         (line 112)\n* tkf:                                   Ligatures and Kerning.\n(line  60)\n* tl:                                    Page Layout.         (line  35)\n* tm:                                    Debugging.           (line  25)\n* tm1:                                   Debugging.           (line  26)\n* tmc:                                   Debugging.           (line  27)\n* tr:                                    Character Translations.\n(line 148)\n* trf:                                   I/O.                 (line  49)\n* trin:                                  Character Translations.\n(line 149)\n* trnt:                                  Character Translations.\n(line 236)\n* troff:                                 Troff and Nroff Mode.\n(line  24)\n* uf:                                    Artificial Fonts.    (line  90)\n* ul:                                    Artificial Fonts.    (line  64)\n* unformat:                              Diversions.          (line 217)\n* vpt:                                   Page Location Traps. (line  17)\n* vs:                                    Changing Type Sizes. (line  83)\n* warn:                                  Debugging.           (line 153)\n* warnscale:                             Debugging.           (line 127)\n* wh:                                    Page Location Traps. (line  29)\n* while:                                 while.               (line  10)\n* write:                                 I/O.                 (line 210)\n* writec:                                I/O.                 (line 211)\n* writem:                                I/O.                 (line 221)\n\nFile: groff.info,  Node: Escape Index,  Next: Operator Index,  Prev: Request Index,  Up: Top\n",
            "subsections": []
        },
        "Appendix C Escape Index": {
            "content": "Any escape sequence '\\X' with X not in the list below emits a warning,\nprinting glyph X.\n\n\n* Menu:\n\n* \\:                                     Using Symbols.       (line 130)\n* \\!:                                    Diversions.          (line 134)\n* \\\":                                    Comments.            (line  10)\n* \\#:                                    Comments.            (line  48)\n* \\$:                                    Parameters.          (line  19)\n* \\$*:                                   Parameters.          (line  38)\n* \\$0:                                   Parameters.          (line  69)\n* \\$@:                                   Parameters.          (line  39)\n* \\$^:                                   Parameters.          (line  48)\n* \\%:                                    Manipulating Hyphenation.\n(line 143)\n* \\&:                                    Ligatures and Kerning.\n(line 100)\n* \\':                                    Using Symbols.       (line 218)\n* \\):                                    Ligatures and Kerning.\n(line 127)\n* \\*:                                    Strings.             (line  17)\n* \\,:                                    Ligatures and Kerning.\n(line  91)\n* \\-:                                    Using Symbols.       (line 227)\n* \\.:                                    Character Translations.\n(line 122)\n* \\/:                                    Ligatures and Kerning.\n(line  80)\n* \\0:                                    Page Motions.        (line 141)\n* \\<colon>:                              Manipulating Hyphenation.\n(line 144)\n* \\?:                                    Diversions.          (line 135)\n* \\A:                                    Identifiers.         (line  53)\n* \\a:                                    Leaders.             (line  18)\n* \\B:                                    Expressions.         (line  82)\n* \\b:                                    Drawing Requests.    (line 231)\n* \\c:                                    Line Control.        (line  41)\n* \\C:                                    Using Symbols.       (line 182)\n* \\d:                                    Page Motions.        (line 103)\n* \\D:                                    Drawing Requests.    (line  67)\n* \\e:                                    Character Translations.\n(line  69)\n* \\E:                                    Character Translations.\n(line  70)\n* \\f:                                    Changing Fonts.      (line   8)\n* \\F:                                    Font Families.       (line  22)\n* \\f <1>:                                Font Positions.      (line  57)\n* \\g:                                    Assigning Formats.   (line  72)\n* \\H:                                    Artificial Fonts.    (line  13)\n* \\h:                                    Page Motions.        (line 106)\n* \\k:                                    Page Motions.        (line 204)\n* \\l:                                    Drawing Requests.    (line  16)\n* \\L:                                    Drawing Requests.    (line  49)\n* \\m:                                    Colors.              (line  49)\n* \\M:                                    Colors.              (line  79)\n* \\n:                                    Interpolating Registers.\n(line   9)\n* \\n <1>:                                Auto-increment.      (line  19)\n* \\N:                                    Using Symbols.       (line 198)\n* \\o:                                    Page Motions.        (line 219)\n* \\O:                                    Suppressing output.  (line   7)\n* \\p:                                    Manipulating Filling and Adjusting.\n(line 131)\n* \\R:                                    Setting Registers.   (line  14)\n* \\R <1>:                                Setting Registers.   (line  70)\n* \\r:                                    Page Motions.        (line  97)\n* \\<RET>:                                Line Control.        (line  40)\n* \\S:                                    Artificial Fonts.    (line  44)\n* \\s:                                    Changing Type Sizes. (line  10)\n* \\<SP>:                                 Page Motions.        (line 117)\n* \\t:                                    Tabs and Fields.     (line  10)\n* \\u:                                    Page Motions.        (line 100)\n* \\v:                                    Page Motions.        (line  81)\n* \\V:                                    I/O.                 (line 246)\n* \\w:                                    Page Motions.        (line 148)\n* \\x:                                    Manipulating Spacing.\n(line  82)\n* \\X:                                    Postprocessor Access.\n(line  12)\n* \\Y:                                    Postprocessor Access.\n(line  30)\n* \\z:                                    Page Motions.        (line 223)\n* \\Z:                                    Page Motions.        (line 227)\n* \\\\:                                    Character Translations.\n(line  68)\n* \\^:                                    Page Motions.        (line 133)\n* \\:                                    Using Symbols.       (line 230)\n* \\`:                                    Using Symbols.       (line 223)\n* \\{:                                    if-else.             (line  35)\n* \\|:                                    Page Motions.        (line 125)\n* \\}:                                    if-else.             (line  35)\n* \\~:                                    Page Motions.        (line 121)\n\nFile: groff.info,  Node: Operator Index,  Next: Register Index,  Prev: Escape Index,  Up: Top\n",
            "subsections": []
        },
        "Appendix D Operator Index": {
            "content": "* Menu:\n\n* !:                                     Expressions.          (line 21)\n* %:                                     Expressions.          (line  8)\n* &:                                     Expressions.          (line 19)\n* (:                                     Expressions.          (line 58)\n* ):                                     Expressions.          (line 58)\n* *:                                     Expressions.          (line  8)\n* +:                                     Expressions.          (line  8)\n* + <1>:                                 Expressions.          (line 21)\n* -:                                     Expressions.          (line  8)\n* - <1>:                                 Expressions.          (line 21)\n* /:                                     Expressions.          (line  8)\n* <:                                     Expressions.          (line 15)\n* <=:                                    Expressions.          (line 15)\n* <?:                                    Expressions.          (line 44)\n* <colon>:                               Expressions.          (line 19)\n* =:                                     Expressions.          (line 15)\n* ==:                                    Expressions.          (line 15)\n* >:                                     Expressions.          (line 15)\n* >=:                                    Expressions.          (line 15)\n* >?:                                    Expressions.          (line 44)\n\nFile: groff.info,  Node: Register Index,  Next: Macro Index,  Prev: Operator Index,  Up: Top\n",
            "subsections": []
        },
        "Appendix E Register Index": {
            "content": "The macro package or program a specific register belongs to is appended\nin brackets.\n\nA register name 'x' consisting of exactly one character can be\naccessed as '\\nx'.  A register name 'xx' consisting of exactly two\ncharacters can be accessed as '\\n(xx'.  Register names 'xxx' of any\nlength can be accessed as '\\n[xxx]'.\n\n\n* Menu:\n\n* $$:                                    Built-in Registers.  (line  99)\n* %:                                     Page Layout.         (line  93)\n* % <1>:                                 Page Control.        (line  10)\n* .$:                                    Parameters.          (line  10)\n* .A:                                    Built-in Registers.  (line 106)\n* .a:                                    Manipulating Spacing.\n(line  83)\n* .b:                                    Artificial Fonts.    (line  97)\n* .br:                                   Requests.            (line  56)\n* .c:                                    Built-in Registers.  (line  76)\n* .C:                                    Implementation Differences.\n(line  24)\n* .cdp:                                  Environments.        (line  93)\n* .ce:                                   Manipulating Filling and Adjusting.\n(line 208)\n* .cht:                                  Environments.        (line  92)\n* .color:                                Colors.              (line   8)\n* .csk:                                  Environments.        (line  94)\n* .d:                                    Diversions.          (line  69)\n* .ev:                                   Environments.        (line  38)\n* .F:                                    Built-in Registers.  (line  12)\n* .f:                                    Font Positions.      (line  12)\n* .fam:                                  Font Families.       (line  21)\n* .fn:                                   Font Families.       (line  25)\n* .fp:                                   Font Positions.      (line  13)\n* .g:                                    Built-in Registers.  (line 102)\n* .H:                                    Built-in Registers.  (line  15)\n* .h:                                    Diversions.          (line  76)\n* .height:                               Artificial Fonts.    (line  16)\n* .hla:                                  Manipulating Hyphenation.\n(line 309)\n* .hlc:                                  Manipulating Hyphenation.\n(line 104)\n* .hlm:                                  Manipulating Hyphenation.\n(line 103)\n* .hy:                                   Manipulating Hyphenation.\n(line  10)\n* .hym:                                  Manipulating Hyphenation.\n(line 266)\n* .hys:                                  Manipulating Hyphenation.\n(line 281)\n* .i:                                    Line Layout.         (line  89)\n* .in:                                   Line Layout.         (line 115)\n* .int:                                  Line Control.        (line  42)\n* .j:                                    Manipulating Filling and Adjusting.\n(line  51)\n* .k:                                    Page Motions.        (line 215)\n* .kern:                                 Ligatures and Kerning.\n(line  42)\n* .L:                                    Manipulating Spacing.\n(line  64)\n* .l:                                    Line Layout.         (line 143)\n* .lg:                                   Ligatures and Kerning.\n(line  24)\n* .linetabs:                             Tabs and Fields.     (line 138)\n* .ll:                                   Line Layout.         (line 144)\n* .lt:                                   Page Layout.         (line  67)\n* .m:                                    Colors.              (line  52)\n* .M:                                    Colors.              (line  82)\n* .n:                                    Environments.        (line 109)\n* .ne:                                   Page Location Traps. (line 122)\n* .ns:                                   Manipulating Spacing.\n(line 123)\n* .O:                                    Built-in Registers.  (line 111)\n* .o:                                    Line Layout.         (line  61)\n* .P:                                    Built-in Registers.  (line 115)\n* .p:                                    Page Layout.         (line  13)\n* .pe:                                   Page Location Traps. (line 143)\n* .pn:                                   Page Layout.         (line  84)\n* .ps:                                   Fractional Type Sizes.\n(line  35)\n* .psr:                                  Fractional Type Sizes.\n(line  42)\n* .pvs:                                  Changing Type Sizes. (line 135)\n* .R:                                    Built-in Registers.  (line  19)\n* .rj:                                   Manipulating Filling and Adjusting.\n(line 254)\n* .s:                                    Changing Type Sizes. (line  11)\n* .slant:                                Artificial Fonts.    (line  45)\n* .sr:                                   Fractional Type Sizes.\n(line  43)\n* .ss:                                   Manipulating Filling and Adjusting.\n(line 155)\n* .sss:                                  Manipulating Filling and Adjusting.\n(line 156)\n* .sty:                                  Changing Fonts.      (line  11)\n* .T:                                    Built-in Registers.  (line 121)\n* .t:                                    Page Location Traps. (line 102)\n* .tabs:                                 Tabs and Fields.     (line  15)\n* .trunc:                                Page Location Traps. (line 131)\n* .U:                                    Built-in Registers.  (line  23)\n* .u:                                    Manipulating Filling and Adjusting.\n(line  29)\n* .V:                                    Built-in Registers.  (line  28)\n* .v:                                    Changing Type Sizes. (line  86)\n* .vpt:                                  Page Location Traps. (line  18)\n* .w:                                    Environments.        (line  91)\n* .warn:                                 Debugging.           (line 154)\n* .x:                                    Built-in Registers.  (line  88)\n* .y:                                    Built-in Registers.  (line  92)\n* .Y:                                    Built-in Registers.  (line  96)\n* .z:                                    Diversions.          (line  68)\n* .zoom:                                 Changing Fonts.      (line  70)\n* c.:                                    Built-in Registers.  (line  77)\n* ct:                                    Page Motions.        (line 153)\n* DD [ms]:                               ms Document Control Registers.\n(line 238)\n* dl:                                    Diversions.          (line  93)\n* dn:                                    Diversions.          (line  92)\n* dw:                                    Built-in Registers.  (line  45)\n* dy:                                    Built-in Registers.  (line  48)\n* FAM [ms]:                              ms Document Control Registers.\n(line 110)\n* FF [ms]:                               ms Document Control Registers.\n(line 184)\n* FI [ms]:                               ms Document Control Registers.\n(line 177)\n* FL [ms]:                               ms Document Control Registers.\n(line 170)\n* FM [ms]:                               ms Document Control Registers.\n(line  47)\n* FPD [ms]:                              ms Document Control Registers.\n(line 220)\n* FPS [ms]:                              ms Document Control Registers.\n(line 204)\n* FVS [ms]:                              ms Document Control Registers.\n(line 212)\n* GROWPS [ms]:                           ms Document Control Registers.\n(line  88)\n* GS [ms]:                               Differences from AT&T ms.\n(line  45)\n* HM [ms]:                               ms Document Control Registers.\n(line  40)\n* HORPHANS [ms]:                         ms Document Control Registers.\n(line 154)\n* hours:                                 Built-in Registers.  (line  41)\n* hp:                                    Page Motions.        (line 212)\n* HY [ms]:                               ms Document Control Registers.\n(line 101)\n* LL [ms]:                               ms Document Control Registers.\n(line  25)\n* llx:                                   Miscellaneous.       (line 134)\n* lly:                                   Miscellaneous.       (line 135)\n* ln:                                    Built-in Registers.  (line  82)\n* lsn:                                   Leading Spaces Traps.\n(line   8)\n* lss:                                   Leading Spaces Traps.\n(line   9)\n* LT [ms]:                               ms Document Control Registers.\n(line  32)\n* MINGW [ms]:                            ms Document Control Registers.\n(line 230)\n* MINGW [ms] <1>:                        Additional ms Macros.\n(line  28)\n* minutes:                               Built-in Registers.  (line  37)\n* mo:                                    Built-in Registers.  (line  51)\n* nl:                                    Page Control.        (line  66)\n* opmaxx:                                Suppressing output.  (line  19)\n* opmaxy:                                Suppressing output.  (line  19)\n* opminx:                                Suppressing output.  (line  19)\n* opminy:                                Suppressing output.  (line  19)\n* PD [ms]:                               ms Document Control Registers.\n(line 127)\n* PI [ms]:                               ms Document Control Registers.\n(line 120)\n* PO [ms]:                               ms Document Control Registers.\n(line  16)\n* PORPHANS [ms]:                         ms Document Control Registers.\n(line 142)\n* PS [ms]:                               ms Document Control Registers.\n(line  57)\n* ps4html [grohtml]:                     grohtml specific registers and strings.\n(line   7)\n* PSINCR [ms]:                           ms Document Control Registers.\n(line  77)\n* QI [ms]:                               ms Document Control Registers.\n(line 134)\n* rsb:                                   Page Motions.        (line 152)\n* rst:                                   Page Motions.        (line 151)\n* sb:                                    Page Motions.        (line 150)\n* seconds:                               Built-in Registers.  (line  32)\n* skw:                                   Page Motions.        (line 155)\n* slimit:                                Debugging.           (line 119)\n* ssc:                                   Page Motions.        (line 154)\n* st:                                    Page Motions.        (line 149)\n* systat:                                I/O.                 (line 164)\n* urx:                                   Miscellaneous.       (line 136)\n* ury:                                   Miscellaneous.       (line 137)\n* VS [ms]:                               ms Document Control Registers.\n(line  67)\n* year:                                  Built-in Registers.  (line  54)\n* yr:                                    Built-in Registers.  (line  57)\n\nFile: groff.info,  Node: Macro Index,  Next: String Index,  Prev: Register Index,  Up: Top\n",
            "subsections": []
        },
        "Appendix F Macro Index": {
            "content": "The macro package a specific macro belongs to is appended in brackets.\nThey appear without the leading control character (normally '.').\n\n\n* Menu:\n\n* 1C [ms]:                               ms Multiple Columns. (line  13)\n* 2C [ms]:                               ms Multiple Columns. (line  16)\n* [ [ms]:                                ms Insertions.       (line  32)\n* ] [ms]:                                ms Insertions.       (line  33)\n* AB [ms]:                               ms Cover Page Macros.\n(line  58)\n* AE [ms]:                               ms Cover Page Macros.\n(line  63)\n* AI [ms]:                               ms Cover Page Macros.\n(line  54)\n* AM [ms]:                               ms Strings and Special Characters.\n(line  51)\n* AM [ms] <1>:                           Additional ms Macros.\n(line  10)\n* AT [man]:                              Miscellaneous man macros.\n(line  26)\n* AU [ms]:                               ms Cover Page Macros.\n(line  38)\n* B [man]:                               Man font macros.     (line  48)\n* B [ms]:                                Highlighting in ms.  (line  10)\n* B1 [ms]:                               ms Displays and Keeps.\n(line  94)\n* B2 [ms]:                               ms Displays and Keeps.\n(line  95)\n* BD [ms]:                               ms Displays and Keeps.\n(line  31)\n* BI [man]:                              Man font macros.     (line  19)\n* BI [ms]:                               Highlighting in ms.  (line  38)\n* BR [man]:                              Man font macros.     (line  40)\n* BT [man]:                              Optional man extensions.\n(line  21)\n* BT [ms]:                               ms Headers and Footers.\n(line  39)\n* BX [ms]:                               Highlighting in ms.  (line  42)\n* CD [ms]:                               ms Displays and Keeps.\n(line  41)\n* CT [man]:                              Optional man extensions.\n(line  36)\n* CW [man]:                              Optional man extensions.\n(line  39)\n* CW [ms]:                               Highlighting in ms.  (line  34)\n* CW [ms] <1>:                           Additional ms Macros.\n(line  19)\n* DA [ms]:                               ms Cover Page Macros.\n(line  23)\n* De [man]:                              Optional man extensions.\n(line  45)\n* DE [ms]:                               ms Displays and Keeps.\n(line  16)\n* DE [ms] <1>:                           ms Displays and Keeps.\n(line  24)\n* DE [ms] <2>:                           ms Displays and Keeps.\n(line  32)\n* DE [ms] <3>:                           ms Displays and Keeps.\n(line  42)\n* DE [ms] <4>:                           ms Displays and Keeps.\n(line  50)\n* De [ms]:                               ms Displays and Keeps.\n(line  57)\n* Ds [man]:                              Optional man extensions.\n(line  42)\n* DS [ms]:                               ms Displays and Keeps.\n(line  14)\n* DS [ms] <1>:                           ms Displays and Keeps.\n(line  22)\n* DS [ms] <2>:                           ms Displays and Keeps.\n(line  30)\n* DS [ms] <3>:                           ms Displays and Keeps.\n(line  40)\n* DS [ms] <4>:                           ms Displays and Keeps.\n(line  48)\n* Ds [ms]:                               ms Displays and Keeps.\n(line  56)\n* DS [ms] <5>:                           Additional ms Macros.\n(line  14)\n* DT [man]:                              Miscellaneous man macros.\n(line  10)\n* EE [man]:                              Optional man extensions.\n(line  52)\n* EF [ms]:                               ms Headers and Footers.\n(line  26)\n* EH [ms]:                               ms Headers and Footers.\n(line  24)\n* EN [ms]:                               ms Insertions.       (line  27)\n* EQ [ms]:                               ms Insertions.       (line  26)\n* EX [man]:                              Optional man extensions.\n(line  48)\n* FE [ms]:                               ms Footnotes.        (line  15)\n* FS [ms]:                               ms Footnotes.        (line  14)\n* G [man]:                               Optional man extensions.\n(line  55)\n* GL [man]:                              Optional man extensions.\n(line  60)\n* HB [man]:                              Optional man extensions.\n(line  65)\n* HD [ms]:                               ms Headers and Footers.\n(line  38)\n* HP [man]:                              Man usage.           (line  97)\n* I [man]:                               Man font macros.     (line  53)\n* I [ms]:                                Highlighting in ms.  (line  30)\n* IB [man]:                              Man font macros.     (line  28)\n* ID [ms]:                               ms Displays and Keeps.\n(line  23)\n* IP [man]:                              Man usage.           (line  79)\n* IP [ms]:                               Lists in ms.         (line   9)\n* IR [man]:                              Man font macros.     (line  36)\n* IX [ms]:                               Additional ms Macros.\n(line  22)\n* KE [ms]:                               ms Displays and Keeps.\n(line  73)\n* KE [ms] <1>:                           ms Displays and Keeps.\n(line  78)\n* KF [ms]:                               ms Displays and Keeps.\n(line  77)\n* KS [ms]:                               ms Displays and Keeps.\n(line  72)\n* LD [ms]:                               ms Displays and Keeps.\n(line  15)\n* LG [ms]:                               Highlighting in ms.  (line  51)\n* LP [man]:                              Man usage.           (line  69)\n* LP [ms]:                               Paragraphs in ms.    (line  12)\n* MC [ms]:                               ms Multiple Columns. (line  19)\n* MS [man]:                              Optional man extensions.\n(line  73)\n* ND [ms]:                               ms Cover Page Macros.\n(line  28)\n* NE [man]:                              Optional man extensions.\n(line  85)\n* NH [ms]:                               Headings in ms.      (line  13)\n* NL [ms]:                               Highlighting in ms.  (line  63)\n* NT [man]:                              Optional man extensions.\n(line  78)\n* OF [ms]:                               ms Headers and Footers.\n(line  25)\n* OH [ms]:                               ms Headers and Footers.\n(line  23)\n* P [man]:                               Man usage.           (line  71)\n* P1 [ms]:                               ms Cover Page Macros.\n(line  19)\n* PD [man]:                              Miscellaneous man macros.\n(line  15)\n* PE [ms]:                               ms Insertions.       (line  20)\n* PN [man]:                              Optional man extensions.\n(line  88)\n* Pn [man]:                              Optional man extensions.\n(line  92)\n* PP [man]:                              Man usage.           (line  70)\n* PP [ms]:                               Paragraphs in ms.    (line   9)\n* PS [ms]:                               ms Insertions.       (line  19)\n* PT [man]:                              Optional man extensions.\n(line  16)\n* PT [ms]:                               ms Headers and Footers.\n(line  37)\n* PX [ms]:                               ms TOC.              (line  62)\n* QE [ms]:                               Paragraphs in ms.    (line  23)\n* QP [ms]:                               Paragraphs in ms.    (line  15)\n* QS [ms]:                               Paragraphs in ms.    (line  22)\n* R [man]:                               Optional man extensions.\n(line  98)\n* R [ms]:                                Highlighting in ms.  (line  26)\n* RB [man]:                              Man font macros.     (line  44)\n* RD [ms]:                               ms Displays and Keeps.\n(line  49)\n* RE [man]:                              Man usage.           (line 114)\n* RE [ms]:                               Indentation values in ms.\n(line  12)\n* RI [man]:                              Man font macros.     (line  32)\n* RN [man]:                              Optional man extensions.\n(line 101)\n* RP [ms]:                               ms Cover Page Macros.\n(line  10)\n* RS [man]:                              Man usage.           (line 105)\n* RS [ms]:                               Indentation values in ms.\n(line  11)\n* SB [man]:                              Man font macros.     (line  15)\n* SH [man]:                              Man usage.           (line  33)\n* SH [ms]:                               Headings in ms.      (line  54)\n* SM [man]:                              Man font macros.     (line  11)\n* SM [ms]:                               Highlighting in ms.  (line  57)\n* SS [man]:                              Man usage.           (line  42)\n* TA [ms]:                               Tabstops in ms.      (line  10)\n* TB [man]:                              Optional man extensions.\n(line  70)\n* TC [ms]:                               ms TOC.              (line  52)\n* TE [ms]:                               ms Insertions.       (line  12)\n* TH [man]:                              Man usage.           (line  11)\n* TL [ms]:                               ms Cover Page Macros.\n(line  33)\n* TP [man]:                              Man usage.           (line  50)\n* TS [ms]:                               ms Insertions.       (line  11)\n* UC [man]:                              Miscellaneous man macros.\n(line  43)\n* UL [ms]:                               Highlighting in ms.  (line  46)\n* VE [man]:                              Optional man extensions.\n(line 108)\n* VS [man]:                              Optional man extensions.\n(line 104)\n* XA [ms]:                               ms TOC.              (line  13)\n* XE [ms]:                               ms TOC.              (line  14)\n* XP [ms]:                               Paragraphs in ms.    (line  30)\n* XS [ms]:                               ms TOC.              (line  12)\n\nFile: groff.info,  Node: String Index,  Next: Glyph Name Index,  Prev: Macro Index,  Up: Top\n",
            "subsections": []
        },
        "Appendix G String Index": {
            "content": "The macro package or program a specific string belongs to is appended in\nbrackets.\n\nA string name 'x' consisting of exactly one character can be accessed\nas '\\*x'.  A string name 'xx' consisting of exactly two characters can\nbe accessed as '\\*(xx'.  String names 'xxx' of any length can be\naccessed as '\\*[xxx]'.\n\n\n* Menu:\n\n* ! [ms]:                                ms Strings and Special Characters.\n(line 101)\n* ' [ms]:                                ms Strings and Special Characters.\n(line  65)\n* * [ms]:                                ms Footnotes.        (line  11)\n* , [ms]:                                ms Strings and Special Characters.\n(line  74)\n* - [ms]:                                ms Strings and Special Characters.\n(line  41)\n* . [ms]:                                ms Strings and Special Characters.\n(line  89)\n* .T:                                    Built-in Registers.  (line 126)\n* 3 [ms]:                                ms Strings and Special Characters.\n(line 107)\n* 8 [ms]:                                ms Strings and Special Characters.\n(line 104)\n* ? [ms]:                                ms Strings and Special Characters.\n(line  98)\n* \\*[<colon>] [ms]:                      ms Strings and Special Characters.\n(line  80)\n* ^ [ms]:                                ms Strings and Special Characters.\n(line  71)\n*  [ms]:                                ms Strings and Special Characters.\n(line  86)\n* ` [ms]:                                ms Strings and Special Characters.\n(line  68)\n* { [ms]:                                Highlighting in ms.  (line  67)\n* } [ms]:                                Highlighting in ms.  (line  68)\n* ~ [ms]:                                ms Strings and Special Characters.\n(line  77)\n* ABSTRACT [ms]:                         ms Strings and Special Characters.\n(line  15)\n* ae [ms]:                               ms Strings and Special Characters.\n(line 125)\n* Ae [ms]:                               ms Strings and Special Characters.\n(line 128)\n* CF [ms]:                               ms Headers and Footers.\n(line  16)\n* CH [ms]:                               ms Headers and Footers.\n(line  11)\n* D- [ms]:                               ms Strings and Special Characters.\n(line 116)\n* d- [ms]:                               ms Strings and Special Characters.\n(line 119)\n* HF [man]:                              Predefined man strings.\n(line  12)\n* LF [ms]:                               ms Headers and Footers.\n(line  15)\n* LH [ms]:                               ms Headers and Footers.\n(line  10)\n* lq [man]:                              Predefined man strings.\n(line  21)\n* MONTH1 [ms]:                           ms Strings and Special Characters.\n(line  23)\n* MONTH10 [ms]:                          ms Strings and Special Characters.\n(line  32)\n* MONTH11 [ms]:                          ms Strings and Special Characters.\n(line  33)\n* MONTH12 [ms]:                          ms Strings and Special Characters.\n(line  34)\n* MONTH2 [ms]:                           ms Strings and Special Characters.\n(line  24)\n* MONTH3 [ms]:                           ms Strings and Special Characters.\n(line  25)\n* MONTH4 [ms]:                           ms Strings and Special Characters.\n(line  26)\n* MONTH5 [ms]:                           ms Strings and Special Characters.\n(line  27)\n* MONTH6 [ms]:                           ms Strings and Special Characters.\n(line  28)\n* MONTH7 [ms]:                           ms Strings and Special Characters.\n(line  29)\n* MONTH8 [ms]:                           ms Strings and Special Characters.\n(line  30)\n* MONTH9 [ms]:                           ms Strings and Special Characters.\n(line  31)\n* o [ms]:                                ms Strings and Special Characters.\n(line  92)\n* Q [ms]:                                ms Strings and Special Characters.\n(line  44)\n* q [ms]:                                ms Strings and Special Characters.\n(line 122)\n* R [man]:                               Predefined man strings.\n(line  15)\n* REFERENCES [ms]:                       ms Strings and Special Characters.\n(line  11)\n* RF [ms]:                               ms Headers and Footers.\n(line  17)\n* RH [ms]:                               ms Headers and Footers.\n(line  12)\n* rq [man]:                              Predefined man strings.\n(line  22)\n* S [man]:                               Predefined man strings.\n(line   9)\n* SN [ms]:                               Headings in ms.      (line  22)\n* SN-DOT [ms]:                           Headings in ms.      (line  23)\n* SN-NO-DOT [ms]:                        Headings in ms.      (line  24)\n* SN-STYLE [ms]:                         Headings in ms.      (line  36)\n* Th [ms]:                               ms Strings and Special Characters.\n(line 110)\n* th [ms]:                               ms Strings and Special Characters.\n(line 113)\n* Tm [man]:                              Predefined man strings.\n(line  18)\n* TOC [ms]:                              ms Strings and Special Characters.\n(line  19)\n* U [ms]:                                ms Strings and Special Characters.\n(line  45)\n* v [ms]:                                ms Strings and Special Characters.\n(line  83)\n* www-image-template [grohtml]:          grohtml specific registers and strings.\n(line   8)\n\nFile: groff.info,  Node: Glyph Name Index,  Next: Font File Keyword Index,  Prev: String Index,  Up: Top\n",
            "subsections": []
        },
        "Appendix H Glyph Name Index": {
            "content": "A glyph name 'xx' consisting of exactly two characters can be accessed\nas '\\(xx'.  Glyph names 'xxx' of any length can be accessed as '\\[xxx]'.\n\nFile: groff.info,  Node: Font File Keyword Index,  Next: Program and File Index,  Prev: Glyph Name Index,  Up: Top\n",
            "subsections": []
        },
        "Appendix I Font File Keyword Index": {
            "content": "* Menu:\n\n* #:                                     Font File Format.    (line  36)\n* ---:                                   Font File Format.    (line  51)\n* biggestfont:                           DESC File Format.    (line 141)\n* charset:                               DESC File Format.    (line  12)\n* charset <1>:                           Font File Format.    (line  44)\n* family:                                Changing Fonts.      (line  11)\n* family <1>:                            Font Positions.      (line  59)\n* family <2>:                            DESC File Format.    (line  16)\n* fonts:                                 Using Symbols.       (line  14)\n* fonts <1>:                             Special Fonts.       (line  18)\n* fonts <2>:                             DESC File Format.    (line  19)\n* hor:                                   DESC File Format.    (line  25)\n* imagegenerator:                       DESC File Format.    (line  29)\n* kernpairs:                             Font File Format.    (line 134)\n* ligatures:                             Font File Format.    (line  22)\n* name:                                  Font File Format.    (line  12)\n* paperlength:                           DESC File Format.    (line  35)\n* papersize:                             DESC File Format.    (line  40)\n* paperwidth:                            DESC File Format.    (line  59)\n* passfilenames:                        DESC File Format.    (line  64)\n* postpro:                               DESC File Format.    (line  69)\n* prepro:                                DESC File Format.    (line  77)\n* print:                                 DESC File Format.    (line  81)\n* res:                                   DESC File Format.    (line  85)\n* sizes:                                 DESC File Format.    (line  88)\n* sizescale:                             DESC File Format.    (line  94)\n* slant:                                 Font File Format.    (line  18)\n* spacewidth:                            Font File Format.    (line  15)\n* spare1:                                DESC File Format.    (line 141)\n* spare2:                                DESC File Format.    (line 141)\n* special:                               Artificial Fonts.    (line 114)\n* special <1>:                           Font File Format.    (line  28)\n* styles:                                Changing Fonts.      (line  11)\n* styles <1>:                            Font Families.       (line  74)\n* styles <2>:                            Font Positions.      (line  59)\n* styles <3>:                            DESC File Format.    (line 100)\n* tcommand:                              DESC File Format.    (line 103)\n* unicode:                               DESC File Format.    (line 107)\n* unitwidth:                             DESC File Format.    (line 121)\n* unscaledcharwidths:                   DESC File Format.    (line 125)\n* usecharnamesinspecial:              Postprocessor Access.\n(line  21)\n* usecharnamesinspecial <1>:          DESC File Format.    (line 129)\n* vert:                                  DESC File Format.    (line 134)\n\nFile: groff.info,  Node: Program and File Index,  Next: Concept Index,  Prev: Font File Keyword Index,  Up: Top\n",
            "subsections": []
        },
        "Appendix J Program and File Index": {
            "content": "* Menu:\n\n* an.tmac:                               man.                 (line   6)\n* changebar:                             Miscellaneous.       (line 106)\n* composite.tmac:                        Using Symbols.       (line 188)\n* cp1047.tmac:                           Input Encodings.     (line   9)\n* DESC:                                  Changing Fonts.      (line  11)\n* DESC <1>:                              Font Families.       (line  74)\n* DESC <2>:                              Font Positions.      (line  59)\n* DESC <3>:                              Using Symbols.       (line  14)\n* DESC <4>:                              Using Symbols.       (line 208)\n* DESC <5>:                              Special Fonts.       (line  18)\n* DESC file format:                      DESC File Format.    (line   6)\n* DESC, and font mounting:               Font Positions.      (line  35)\n* DESC, and usecharnamesinspecial:    Postprocessor Access.\n(line  21)\n* ditroff:                               History.             (line  57)\n* ec.tmac:                               Input Encodings.     (line  44)\n* eqn:                                   ms Insertions.       (line   7)\n* freeeuro.pfa:                          Input Encodings.     (line  44)\n* gchem:                                 Groff Options.       (line   6)\n* geqn:                                  Groff Options.       (line   6)\n* geqn, invocation in manual pages:      Preprocessors in man pages.\n(line  11)\n* ggrn:                                  Groff Options.       (line   6)\n* gpic:                                  Groff Options.       (line   6)\n* grap:                                  Groff Options.       (line   6)\n* grefer:                                Groff Options.       (line   6)\n* grefer, invocation in manual pages:    Preprocessors in man pages.\n(line  11)\n* groff:                                 Groff Options.       (line   6)\n* grog:                                  grog.                (line   6)\n* grohtml:                               Miscellaneous man macros.\n(line   6)\n* gsoelim:                               Groff Options.       (line   6)\n* gtbl:                                  Groff Options.       (line   6)\n* gtbl, invocation in manual pages:      Preprocessors in man pages.\n(line  11)\n* gtroff:                                Groff Options.       (line   6)\n* hyphen.us:                             Manipulating Hyphenation.\n(line 219)\n* hyphenex.us:                           Manipulating Hyphenation.\n(line 219)\n* latin1.tmac:                           Input Encodings.     (line  14)\n* latin2.tmac:                           Input Encodings.     (line  18)\n* latin5.tmac:                           Input Encodings.     (line  23)\n* latin9.tmac:                           Input Encodings.     (line  28)\n* less:                                  Invoking grotty.     (line  50)\n* makeindex:                             Indices.             (line  10)\n* man, invocation of preprocessors:      Preprocessors in man pages.\n(line  11)\n* man-old.tmac:                          man.                 (line   6)\n* man.local:                             Man usage.           (line   6)\n* man.local <1>:                         Optional man extensions.\n(line   6)\n* man.tmac:                              man.                 (line   6)\n* man.ultrix:                            Optional man extensions.\n(line  30)\n* nrchbar:                               Miscellaneous.       (line 106)\n* papersize.tmac:                        Paper Size.          (line  16)\n* perl:                                  I/O.                 (line 174)\n* pic:                                   ms Insertions.       (line   7)\n* post-grohtml:                          Groff Options.       (line 272)\n* pre-grohtml:                           Groff Options.       (line 272)\n* preconv:                               Groff Options.       (line   6)\n* refer:                                 ms Insertions.       (line   7)\n* soelim:                                Debugging.           (line  10)\n* tbl:                                   ms Insertions.       (line   7)\n* trace.tmac:                            Writing Macros.      (line 104)\n* trace.tmac <1>:                        Writing Macros.      (line 136)\n* troffrc:                               Groff Options.       (line 205)\n* troffrc <1>:                           Paper Size.          (line  16)\n* troffrc <2>:                           Manipulating Hyphenation.\n(line 219)\n* troffrc <3>:                           Manipulating Hyphenation.\n(line 309)\n* troffrc <4>:                           Troff and Nroff Mode.\n(line  24)\n* troffrc <5>:                           Line Layout.         (line  61)\n* troffrc-end:                           Groff Options.       (line 205)\n* troffrc-end <1>:                       Manipulating Hyphenation.\n(line 219)\n* troffrc-end <2>:                       Manipulating Hyphenation.\n(line 309)\n* troffrc-end <3>:                       Troff and Nroff Mode.\n(line  24)\n* tty.tmac:                              Troff and Nroff Mode.\n(line  32)\n\nFile: groff.info,  Node: Concept Index,  Prev: Program and File Index,  Up: Top\n",
            "subsections": []
        },
        "Appendix K Concept Index": {
            "content": "* Menu:\n\n* \", at end of sentence:                 Sentences.           (line  18)\n* \", at end of sentence <1>:             Using Symbols.       (line 271)\n* \", in a macro argument:                Request and Macro Arguments.\n(line  25)\n* %, as delimiter:                       Escapes.             (line  67)\n* &, as delimiter:                       Escapes.             (line  67)\n* ', as a comment:                       Comments.            (line  42)\n* ', at end of sentence:                 Sentences.           (line  18)\n* ', at end of sentence <1>:             Using Symbols.       (line 271)\n* ', delimiting arguments:               Escapes.             (line  29)\n* (, as delimiter:                       Escapes.             (line  67)\n* (, starting a two-character identifier: Identifiers.        (line  71)\n* (, starting a two-character identifier <1>: Escapes.        (line  16)\n* ), as delimiter:                       Escapes.             (line  67)\n* ), at end of sentence:                 Sentences.           (line  18)\n* ), at end of sentence <1>:             Using Symbols.       (line 271)\n* *, as delimiter:                       Escapes.             (line  67)\n* *, at end of sentence:                 Sentences.           (line  18)\n* *, at end of sentence <1>:             Using Symbols.       (line 271)\n* +, and page motion:                    Expressions.         (line  64)\n* +, as delimiter:                       Escapes.             (line  67)\n* -, and page motion:                    Expressions.         (line  64)\n* -, as delimiter:                       Escapes.             (line  67)\n* ., as delimiter:                       Escapes.             (line  67)\n* .h register, difference to nl:         Diversions.          (line  88)\n* .ps register, in comparison with .psr: Fractional Type Sizes.\n(line  43)\n* .s register, in comparison with .sr:   Fractional Type Sizes.\n(line  43)\n* .S register, Plan 9 alias for .tabs:   Tabs and Fields.     (line 125)\n* .t register, and diversions:           Diversion Traps.     (line   7)\n* .tabs register, Plan 9 alias (.S):     Tabs and Fields.     (line 125)\n* .V register, and vs:                   Changing Type Sizes. (line  92)\n* /, as delimiter:                       Escapes.             (line  67)\n* 8-bit input:                           Font File Format.    (line  51)\n* <, as delimiter:                       Escapes.             (line  67)\n* <colon>, as delimiter:                 Escapes.             (line  67)\n* =, as delimiter:                       Escapes.             (line  67)\n* >, as delimiter:                       Escapes.             (line  67)\n* [, macro names starting with, and refer: Identifiers.       (line  46)\n* [, starting an identifier:             Identifiers.         (line  73)\n* [, starting an identifier <1>:         Escapes.             (line  20)\n* \\!, and copy-in mode:                  Diversions.          (line 147)\n* \\!, and output request:                Diversions.          (line 178)\n* \\!, and trnt:                          Character Translations.\n(line 236)\n* \\!, in top-level diversion:            Diversions.          (line 170)\n* \\!, incompatibilities with AT&T troff: Implementation Differences.\n(line  68)\n* \\!, incompatibilities with AT&T troff <1>: Implementation Differences.\n(line 104)\n* \\!, used as delimiter:                 Escapes.             (line  52)\n* \\!, used as delimiter <1>:             Escapes.             (line  71)\n* \\$, when reading text for a macro:     Copy-in Mode.        (line   6)\n* \\%, and translations:                  Character Translations.\n(line 165)\n* \\%, following \\X or \\Y:                Manipulating Hyphenation.\n(line 157)\n* \\%, in \\X:                             Postprocessor Access.\n(line  14)\n* \\%, incompatibilities with AT&T troff: Implementation Differences.\n(line  68)\n* \\%, used as delimiter:                 Escapes.             (line  52)\n* \\%, used as delimiter <1>:             Escapes.             (line  71)\n* \\&, and glyph definitions:             Using Symbols.       (line 322)\n* \\&, and translations:                  Character Translations.\n(line 175)\n* \\&, at end of sentence:                Sentences.           (line  24)\n* \\&, escaping control characters:       Requests.            (line  47)\n* \\&, in \\X:                             Postprocessor Access.\n(line  14)\n* \\&, incompatibilities with AT&T troff: Implementation Differences.\n(line  68)\n* \\&, used as delimiter:                 Escapes.             (line  52)\n* \\', and translations:                  Character Translations.\n(line 159)\n* \\', incompatibilities with AT&T troff: Implementation Differences.\n(line  68)\n* \\', used as delimiter:                 Escapes.             (line  52)\n* \\', used as delimiter <1>:             Escapes.             (line  71)\n* \\(, and translations:                  Character Translations.\n(line 159)\n* \\), in \\X:                             Postprocessor Access.\n(line  14)\n* \\), used as delimiter:                 Escapes.             (line  52)\n* \\*, and warnings:                      Warnings.            (line  54)\n* \\*, incompatibilities with AT&T troff: Implementation Differences.\n(line  13)\n* \\*, when reading text for a macro:     Copy-in Mode.        (line   6)\n* \\, disabling (eo):                     Character Translations.\n(line  24)\n* \\,, used as delimiter:                 Escapes.             (line  52)\n* \\-, and translations:                  Character Translations.\n(line 159)\n* \\-, incompatibilities with AT&T troff: Implementation Differences.\n(line  68)\n* \\-, used as delimiter:                 Escapes.             (line  52)\n* \\-, used as delimiter <1>:             Escapes.             (line  71)\n* \\/, used as delimiter:                 Escapes.             (line  52)\n* \\/, used as delimiter <1>:             Escapes.             (line  71)\n* \\0, used as delimiter:                 Escapes.             (line  52)\n* \\<colon>, in \\X:                       Postprocessor Access.\n(line  14)\n* \\<colon>, used as delimiter:           Escapes.             (line  52)\n* \\<colon>, used as delimiter <1>:       Escapes.             (line  71)\n* \\?, and copy-in mode:                  Operators in Conditionals.\n(line  55)\n* \\?, and copy-in mode <1>:              Diversions.          (line 147)\n* \\?, in top-level diversion:            Diversions.          (line 175)\n* \\?, incompatibilities with AT&T troff: Implementation Differences.\n(line 104)\n* \\?, used as delimiter:                 Escapes.             (line  52)\n* \\A, allowed delimiters:                Escapes.             (line  59)\n* \\a, and copy-in mode:                  Leaders.             (line  18)\n* \\a, and translations:                  Character Translations.\n(line 168)\n* \\A, incompatibilities with AT&T troff: Implementation Differences.\n(line  68)\n* \\a, used as delimiter:                 Escapes.             (line  52)\n* \\B, allowed delimiters:                Escapes.             (line  59)\n* \\b, limitations:                       Drawing Requests.    (line 238)\n* \\b, possible quote characters:         Escapes.             (line  37)\n* \\C, allowed delimiters:                Escapes.             (line  59)\n* \\c, and fill mode:                     Line Control.        (line  69)\n* \\c, and no-fill mode:                  Line Control.        (line  60)\n* \\C, and translations:                  Character Translations.\n(line 159)\n* \\c, incompatibilities with AT&T troff: Implementation Differences.\n(line  68)\n* \\c, used as delimiter:                 Escapes.             (line  52)\n* \\c, used as delimiter <1>:             Escapes.             (line  71)\n* \\D'f ...' and horizontal resolution:   Drawing Requests.    (line 150)\n* \\D, allowed delimiters:                Escapes.             (line  62)\n* \\d, used as delimiter:                 Escapes.             (line  52)\n* \\E, and copy-in mode:                  Character Translations.\n(line  81)\n* \\e, and glyph definitions:             Using Symbols.       (line 322)\n* \\e, and translations:                  Character Translations.\n(line 163)\n* \\e, incompatibilities with AT&T troff: Implementation Differences.\n(line 104)\n* \\e, used as delimiter:                 Escapes.             (line  52)\n* \\E, used as delimiter:                 Escapes.             (line  52)\n* \\e, used as delimiter <1>:             Escapes.             (line  71)\n* \\F, and changing fonts:                Changing Fonts.      (line  11)\n* \\F, and font positions:                Font Positions.      (line  59)\n* \\f, and font translations:             Changing Fonts.      (line  55)\n* \\f, incompatibilities with AT&T troff: Implementation Differences.\n(line  55)\n* \\h, allowed delimiters:                Escapes.             (line  62)\n* \\H, allowed delimiters:                Escapes.             (line  62)\n* \\H, incompatibilities with AT&T troff: Implementation Differences.\n(line  55)\n* \\H, using + and -:                     Expressions.         (line  74)\n* \\H, with fractional type sizes:        Fractional Type Sizes.\n(line   6)\n* \\l, allowed delimiters:                Escapes.             (line  62)\n* \\L, allowed delimiters:                Escapes.             (line  62)\n* \\l, and glyph definitions:             Using Symbols.       (line 322)\n* \\L, and glyph definitions:             Using Symbols.       (line 322)\n* \\N, allowed delimiters:                Escapes.             (line  62)\n* \\N, and translations:                  Character Translations.\n(line 159)\n* \\n, and warnings:                      Warnings.            (line  61)\n* \\n, incompatibilities with AT&T troff: Implementation Differences.\n(line  13)\n* \\n, when reading text for a macro:     Copy-in Mode.        (line   6)\n* \\o, possible quote characters:         Escapes.             (line  37)\n* \\p, used as delimiter:                 Escapes.             (line  52)\n* \\p, used as delimiter <1>:             Escapes.             (line  71)\n* \\R, after \\c:                          Line Control.        (line  52)\n* \\R, allowed delimiters:                Escapes.             (line  62)\n* \\R, and warnings:                      Warnings.            (line  61)\n* \\R, difference to nr:                  Auto-increment.      (line  11)\n* \\r, used as delimiter:                 Escapes.             (line  52)\n* \\R, using + and -:                     Expressions.         (line  74)\n* \\<RET>, when reading text for a macro: Copy-in Mode.        (line   6)\n* \\s, allowed delimiters:                Escapes.             (line  62)\n* \\S, allowed delimiters:                Escapes.             (line  62)\n* \\s, incompatibilities with AT&T troff: Implementation Differences.\n(line  55)\n* \\S, incompatibilities with AT&T troff: Implementation Differences.\n(line  55)\n* \\s, using + and -:                     Expressions.         (line  74)\n* \\s, with fractional type sizes:        Fractional Type Sizes.\n(line   6)\n* \\<SP>, difference to \\~:               Request and Macro Arguments.\n(line  20)\n* \\<SP>, incompatibilities with AT&T troff: Implementation Differences.\n(line  68)\n* \\<SP>, used as delimiter:              Escapes.             (line  52)\n* \\t, and copy-in mode:                  Tabs and Fields.     (line  10)\n* \\t, and translations:                  Character Translations.\n(line 168)\n* \\t, and warnings:                      Warnings.            (line  68)\n* \\t, used as delimiter:                 Escapes.             (line  52)\n* \\u, used as delimiter:                 Escapes.             (line  52)\n* \\v, allowed delimiters:                Escapes.             (line  62)\n* \\V, and copy-in mode:                  I/O.                 (line 248)\n* \\v, internal representation:           Gtroff Internals.    (line  53)\n* \\w, allowed delimiters:                Escapes.             (line  59)\n* \\x, allowed delimiters:                Escapes.             (line  62)\n* \\X, and special characters:            Postprocessor Access.\n(line  21)\n* \\X, followed by \\%:                    Manipulating Hyphenation.\n(line 157)\n* \\X, possible quote characters:         Escapes.             (line  37)\n* \\Y, followed by \\%:                    Manipulating Hyphenation.\n(line 157)\n* \\Z, allowed delimiters:                Escapes.             (line  59)\n* \\[, and translations:                  Character Translations.\n(line 159)\n* \\\\, when reading text for a macro:     Copy-in Mode.        (line   6)\n* \\^, incompatibilities with AT&T troff: Implementation Differences.\n(line  68)\n* \\^, used as delimiter:                 Escapes.             (line  52)\n* \\, and translations:                  Character Translations.\n(line 159)\n* \\, incompatibilities with AT&T troff: Implementation Differences.\n(line  68)\n* \\, used as delimiter:                 Escapes.             (line  52)\n* \\, used as delimiter <1>:             Escapes.             (line  71)\n* \\`, and translations:                  Character Translations.\n(line 159)\n* \\`, incompatibilities with AT&T troff: Implementation Differences.\n(line  68)\n* \\`, used as delimiter:                 Escapes.             (line  52)\n* \\`, used as delimiter <1>:             Escapes.             (line  71)\n* \\{, incompatibilities with AT&T troff: Implementation Differences.\n(line  68)\n* \\{, used as delimiter:                 Escapes.             (line  52)\n* \\{, used as delimiter <1>:             Escapes.             (line  71)\n* \\|, incompatibilities with AT&T troff: Implementation Differences.\n(line  68)\n* \\|, used as delimiter:                 Escapes.             (line  52)\n* \\}, and warnings:                      Warnings.            (line  72)\n* \\}, incompatibilities with AT&T troff: Implementation Differences.\n(line  68)\n* \\}, used as delimiter:                 Escapes.             (line  52)\n* \\}, used as delimiter <1>:             Escapes.             (line  71)\n* \\~, and translations:                  Character Translations.\n(line 165)\n* \\~, difference to \\<SP>:               Request and Macro Arguments.\n(line  20)\n* \\~, used as delimiter:                 Escapes.             (line  52)\n* ], as part of an identifier:           Identifiers.         (line  41)\n* ], at end of sentence:                 Sentences.           (line  18)\n* ], at end of sentence <1>:             Using Symbols.       (line 271)\n* ], ending an identifier:               Identifiers.         (line  73)\n* ], ending an identifier <1>:           Escapes.             (line  20)\n* ], macro names starting with, and refer: Identifiers.       (line  46)\n* |, and page motion:                    Expressions.         (line  69)\n* aborting (ab):                         Debugging.           (line  40)\n* absolute position operator (|):        Expressions.         (line  69)\n* accent marks [ms]:                     ms Strings and Special Characters.\n(line   6)\n* access of postprocessor:               Postprocessor Access.\n(line   6)\n* accessing unnamed glyphs with \\N:      Font File Format.    (line  51)\n* activating kerning (kern):             Ligatures and Kerning.\n(line  42)\n* activating ligatures (lg):             Ligatures and Kerning.\n(line  24)\n* activating track kerning (tkf):        Ligatures and Kerning.\n(line  60)\n* ad request, and hyphenation margin:    Manipulating Hyphenation.\n(line 266)\n* ad request, and hyphenation space:     Manipulating Hyphenation.\n(line 281)\n* adjusting:                             Filling and Adjusting.\n(line   6)\n* adjusting and filling, manipulating:   Manipulating Filling and Adjusting.\n(line   6)\n* adjustment mode register (.j):         Manipulating Filling and Adjusting.\n(line 114)\n* adobe glyph list (AGL):                Using Symbols.       (line  88)\n* AGL (adobe glyph list):                Using Symbols.       (line  88)\n* alias, diversion, creating (als):      Strings.             (line 226)\n* alias, diversion, removing (rm):       Strings.             (line 260)\n* alias, macro, creating (als):          Strings.             (line 226)\n* alias, macro, removing (rm):           Strings.             (line 260)\n* alias, number register, creating (aln): Setting Registers.  (line 112)\n* alias, string, creating (als):         Strings.             (line 226)\n* alias, string, removing (rm):          Strings.             (line 260)\n* als request, and \\$0:                  Parameters.          (line  69)\n* am, am1, ami requests, and warnings:   Warnings.            (line  54)\n* annotations:                           Footnotes and Annotations.\n(line   6)\n* appending to a diversion (da):         Diversions.          (line  22)\n* appending to a file (opena):           I/O.                 (line 199)\n* appending to a macro (am):             Writing Macros.      (line 116)\n* appending to a string (as):            Strings.             (line 175)\n* arc, drawing (\\D'a ...'):              Drawing Requests.    (line 127)\n* argument delimiting characters:        Escapes.             (line  29)\n* arguments to macros, and tabs:         Request and Macro Arguments.\n(line   6)\n* arguments to requests and macros:      Request and Macro Arguments.\n(line   6)\n* arguments, and compatibility mode:     Gtroff Internals.    (line  90)\n* arguments, macro (\\$):                 Parameters.          (line  21)\n* arguments, of strings:                 Strings.             (line  19)\n* arithmetic operators:                  Expressions.         (line   8)\n* artificial fonts:                      Artificial Fonts.    (line   6)\n* as, as1 requests, and comments:        Comments.            (line  16)\n* as, as1 requests, and warnings:        Warnings.            (line  54)\n* ASCII approximation output register (.A): Groff Options.    (line  50)\n* ASCII approximation output register (.A) <1>: Built-in Registers.\n(line 106)\n* ASCII, output encoding:                Groff Options.       (line 249)\n* asciify request, and writem:           I/O.                 (line 221)\n* assigning formats (af):                Assigning Formats.   (line   6)\n* assignments, indirect:                 Interpolating Registers.\n(line  11)\n* assignments, nested:                   Interpolating Registers.\n(line  11)\n* AT&T troff, ms macro package differences: Differences from AT&T ms.\n(line   6)\n* auto-increment:                        Auto-increment.      (line   6)\n* auto-increment, and ig request:        Comments.            (line  85)\n* available glyphs, list (groffchar(7) man page): Using Symbols.\n(line  76)\n* background color name register (.M):   Colors.              (line  92)\n* backslash, printing (\\\\, \\e, \\E, \\[rs]): Escapes.           (line  74)\n* backslash, printing (\\\\, \\e, \\E, \\[rs]) <1>: Implementation Differences.\n(line 104)\n* backspace character:                   Identifiers.         (line  12)\n* backspace character, and translations: Character Translations.\n(line 168)\n* backtrace of input stack (backtrace):  Debugging.           (line  96)\n* baseline:                              Sizes.               (line   6)\n* basic unit (u):                        Measurements.        (line   6)\n* basics of macros:                      Basics.              (line   6)\n* bd request, and font styles:           Font Families.       (line  59)\n* bd request, and font translations:     Changing Fonts.      (line  55)\n* bd request, incompatibilities with AT&T troff: Implementation Differences.\n(line  84)\n* begin of conditional block (\\{):       if-else.             (line  35)\n* beginning diversion (di):              Diversions.          (line  22)\n* blank line:                            Implicit Line Breaks.\n(line  10)\n* blank line <1>:                        Requests.            (line  27)\n* blank line (sp):                       Basics.              (line  92)\n* blank line macro (blm):                Implicit Line Breaks.\n(line  10)\n* blank line macro (blm) <1>:            Requests.            (line  27)\n* blank line macro (blm) <2>:            Blank Line Traps.    (line   7)\n* blank line traps:                      Blank Line Traps.    (line   6)\n* blank lines, disabling:                Manipulating Spacing.\n(line 123)\n* block, conditional, begin (\\{):        if-else.             (line  35)\n* block, conditional, end (\\}):          if-else.             (line  35)\n* bold face [man]:                       Man font macros.     (line  15)\n* bold face, imitating (bd):             Artificial Fonts.    (line  97)\n* bottom margin:                         Page Layout.         (line  20)\n* bounding box:                          Miscellaneous.       (line 137)\n* box rule glyph (\\[br]):                Drawing Requests.    (line  50)\n* box, boxa requests, and warnings:      Warnings.            (line  54)\n* boxa request, and dn (dl):             Diversions.          (line  93)\n* bp request, and top-level diversion:   Page Control.        (line  24)\n* bp request, and traps (.pe):           Page Location Traps. (line 143)\n* bp request, causing implicit linebreak: Manipulating Filling and Adjusting.\n(line   6)\n* bp request, using + and -:             Expressions.         (line  74)\n* br glyph, and cflags:                  Using Symbols.       (line 267)\n* break:                                 Basics.              (line  48)\n* break <1>:                             Manipulating Filling and Adjusting.\n(line   6)\n* break (br):                            Basics.              (line 116)\n* break request, in a while loop:        while.               (line  68)\n* break, implicit:                       Implicit Line Breaks.\n(line   6)\n* built-in registers:                    Built-in Registers.  (line   6)\n* bulleted list, example markup [ms]:    Lists in ms.         (line  21)\n* c unit:                                Measurements.        (line  33)\n* calling convention of preprocessors:   Preprocessors in man pages.\n(line   6)\n* capabilities of groff:                 groff Capabilities.  (line   6)\n* ce request, causing implicit linebreak: Manipulating Filling and Adjusting.\n(line   6)\n* ce request, difference to .ad c:       Manipulating Filling and Adjusting.\n(line  66)\n* centered text:                         Manipulating Filling and Adjusting.\n(line  66)\n* centering lines (ce):                  Basics.              (line 104)\n* centering lines (ce) <1>:              Manipulating Filling and Adjusting.\n(line 208)\n* centimeter unit (c):                   Measurements.        (line  33)\n* cf request, and copy-in mode:          I/O.                 (line  50)\n* cf request, causing implicit linebreak: Manipulating Filling and Adjusting.\n(line   6)\n* changing font family (fam, \\F):        Font Families.       (line  25)\n* changing font position (\\f):           Font Positions.      (line  59)\n* changing font style (sty):             Font Families.       (line  59)\n* changing fonts (ft, \\f):               Changing Fonts.      (line  11)\n* changing format, and read-only registers: Assigning Formats.\n(line  67)\n* changing the font height (\\H):         Artificial Fonts.    (line  16)\n* changing the font slant (\\S):          Artificial Fonts.    (line  45)\n* changing the page number character (pc): Page Layout.       (line  93)\n* changing trap location (ch):           Page Location Traps. (line 111)\n* changing type sizes (ps, \\s):          Changing Type Sizes. (line  11)\n* changing vertical line spacing (vs):   Changing Type Sizes. (line  86)\n* char request, and soft hyphen character: Manipulating Hyphenation.\n(line 296)\n* char request, and translations:        Character Translations.\n(line 159)\n* char request, used with \\N:            Using Symbols.       (line 198)\n* character:                             Using Symbols.       (line   6)\n* character class (class):               Character Classes.   (line  12)\n* character classes:                     Character Classes.   (line   6)\n* character properties (cflags):         Using Symbols.       (line 233)\n* character translations:                Character Translations.\n(line   6)\n* character, backspace:                  Identifiers.         (line  12)\n* character, backspace, and translations: Character Translations.\n(line 168)\n* character, control (.):                Requests.            (line   6)\n* character, control, changing (cc):     Character Translations.\n(line   6)\n* character, defining (char):            Using Symbols.       (line 322)\n* character, defining fallback (fchar, fschar, schar): Using Symbols.\n(line 322)\n* character, escape, changing (ec):      Character Translations.\n(line  47)\n* character, escape, while defining glyph: Using Symbols.     (line 322)\n* character, field delimiting (fc):      Fields.              (line   6)\n* character, field padding (fc):         Fields.              (line   6)\n* character, hyphenation (\\%):           Manipulating Hyphenation.\n(line 144)\n* character, leader repetition (lc):     Leaders.             (line  23)\n* character, leader, and translations:   Character Translations.\n(line 168)\n* character, leader, non-interpreted (\\a): Leaders.           (line  18)\n* character, named (\\C):                 Using Symbols.       (line 182)\n* character, newline:                    Escapes.             (line  69)\n* character, newline, and translations:  Character Translations.\n(line 168)\n* character, no-break control ('):       Requests.            (line   6)\n* character, no-break control, changing (c2): Character Translations.\n(line   6)\n* character, soft hyphen, setting (shc): Manipulating Hyphenation.\n(line 296)\n* character, space:                      Escapes.             (line  69)\n* character, special:                    Character Translations.\n(line 159)\n* character, tab:                        Escapes.             (line  69)\n* character, tab repetition (tc):        Tabs and Fields.     (line 129)\n* character, tab, and translations:      Character Translations.\n(line 168)\n* character, tab, non-interpreted (\\t):  Tabs and Fields.     (line  10)\n* character, tabulator:                  Tab Stops.           (line   6)\n* character, transparent:                Sentences.           (line  18)\n* character, transparent <1>:            Using Symbols.       (line 271)\n* character, whitespace:                 Identifiers.         (line  10)\n* character, zero width space (\\&):      Requests.            (line  47)\n* character, zero width space (\\&) <1>:  Ligatures and Kerning.\n(line  47)\n* character, zero width space (\\&) <2>:  Drawing Requests.    (line  32)\n* characters, argument delimiting:       Escapes.             (line  29)\n* characters, end-of-sentence:           Using Symbols.       (line 243)\n* characters, hyphenation:               Using Symbols.       (line 247)\n* characters, input, and output glyphs, compatibility with AT&T troff: Implementation Differences.\n(line  84)\n* characters, invalid for trf request:   I/O.                 (line  72)\n* characters, invalid input:             Identifiers.         (line  15)\n* characters, overlapping:               Using Symbols.       (line 261)\n* characters, special:                   Special Characters.  (line   6)\n* characters, unnamed, accessing with \\N: Font File Format.   (line  51)\n* chem, the program:                     gchem.               (line   6)\n* circle, drawing (\\D'c ...'):           Drawing Requests.    (line 108)\n* circle, solid, drawing (\\D'C ...'):    Drawing Requests.    (line 113)\n* class of characters (class):           Character Classes.   (line  12)\n* classes, character:                    Character Classes.   (line   6)\n* closing file (close):                  I/O.                 (line 230)\n* code, hyphenation (hcode):             Manipulating Hyphenation.\n(line 232)\n* color name, background, register (.M): Colors.              (line  92)\n* color name, drawing, register (.m):    Colors.              (line  65)\n* color name, fill, register (.M):       Colors.              (line  92)\n* color, default:                        Colors.              (line  25)\n* colors:                                Colors.              (line   6)\n* colors, fill, unnamed (\\D'F...'):      Drawing Requests.    (line 215)\n* command prefix:                        Environment.         (line  14)\n* command-line options:                  Groff Options.       (line  49)\n* commands, embedded:                    Embedded Commands.   (line   6)\n* comments:                              Comments.            (line   6)\n* comments in font files:                Font File Format.    (line  36)\n* comments, lining up with tabs:         Comments.            (line  21)\n* comments, with ds:                     Strings.             (line  44)\n* common features:                       Common Features.     (line   6)\n* common name space of macros, diversions, and strings: Strings.\n(line  91)\n* comparison of strings:                 Operators in Conditionals.\n(line  47)\n* comparison operators:                  Expressions.         (line  15)\n* compatibility mode:                    Warnings.            (line  90)\n* compatibility mode <1>:                Implementation Differences.\n(line   6)\n* compatibility mode, and parameters:    Gtroff Internals.    (line  90)\n* composite glyph names:                 Using Symbols.       (line  88)\n* conditional block, begin (\\{):         if-else.             (line  35)\n* conditional block, end (\\}):           if-else.             (line  35)\n* conditional output for terminal (TTY): Operators in Conditionals.\n(line  14)\n* conditional page break (ne):           Page Control.        (line  33)\n* conditionals and loops:                Conditionals and Loops.\n(line   6)\n* consecutive hyphenated lines (hlm):    Manipulating Hyphenation.\n(line 104)\n* constant glyph space mode (cs):        Artificial Fonts.    (line 125)\n* contents, table of:                    Table of Contents.   (line   6)\n* contents, table of <1>:                Leaders.             (line  29)\n* continuation, input line (\\):          Line Control.        (line  36)\n* continuation, output line (\\c):        Line Control.        (line  36)\n* continue request, in a while loop:     while.               (line  68)\n* continuous underlining (cu):           Artificial Fonts.    (line  86)\n* control character (.):                 Requests.            (line   6)\n* control character, changing (cc):      Character Translations.\n(line   6)\n* control character, no-break ('):       Requests.            (line   6)\n* control character, no-break, changing (c2): Character Translations.\n(line   6)\n* control sequences, for terminals:      Invoking grotty.     (line  50)\n* control, line:                         Line Control.        (line   6)\n* control, page:                         Page Control.        (line   6)\n* conventions for input:                 Input Conventions.   (line   6)\n* copy mode:                             Copy-in Mode.        (line   6)\n* copy-in mode:                          Copy-in Mode.        (line   6)\n* copy-in mode, and cf request:          I/O.                 (line  50)\n* copy-in mode, and device request:      Postprocessor Access.\n(line  18)\n* copy-in mode, and ig request:          Comments.            (line  85)\n* copy-in mode, and length request:      Strings.             (line 208)\n* copy-in mode, and macro arguments:     Parameters.          (line  21)\n* copy-in mode, and output request:      Diversions.          (line 178)\n* copy-in mode, and tm request:          Debugging.           (line  30)\n* copy-in mode, and tm1 request:         Debugging.           (line  30)\n* copy-in mode, and tmc request:         Debugging.           (line  30)\n* copy-in mode, and trf request:         I/O.                 (line  50)\n* copy-in mode, and write request:       I/O.                 (line 211)\n* copy-in mode, and writec request:      I/O.                 (line 211)\n* copy-in mode, and writem request:      I/O.                 (line 224)\n* copy-in mode, and \\!:                  Diversions.          (line 147)\n* copy-in mode, and \\?:                  Operators in Conditionals.\n(line  55)\n* copy-in mode, and \\? <1>:              Diversions.          (line 147)\n* copy-in mode, and \\a:                  Leaders.             (line  18)\n* copy-in mode, and \\E:                  Character Translations.\n(line  81)\n* copy-in mode, and \\t:                  Tabs and Fields.     (line  10)\n* copy-in mode, and \\V:                  I/O.                 (line 248)\n* copying environment (evc):             Environments.        (line  69)\n* correction between italic and roman glyph (\\/, \\,): Ligatures and Kerning.\n(line  80)\n* correction, italic (\\/):               Ligatures and Kerning.\n(line  80)\n* correction, left italic (\\,):          Ligatures and Kerning.\n(line  91)\n* cover page macros, [ms]:               ms Cover Page Macros.\n(line   6)\n* cp request, and glyph definitions:     Using Symbols.       (line 322)\n* cp1047, input encoding:                Input Encodings.     (line   9)\n* cp1047, output encoding:               Groff Options.       (line 261)\n* cq glyph, at end of sentence:          Sentences.           (line  18)\n* cq glyph, at end of sentence <1>:      Using Symbols.       (line 271)\n* creating alias, for diversion (als):   Strings.             (line 226)\n* creating alias, for macro (als):       Strings.             (line 226)\n* creating alias, for number register (aln): Setting Registers.\n(line 112)\n* creating alias, for string (als):      Strings.             (line 226)\n* creating new characters (char):        Using Symbols.       (line 322)\n* credits:                               Credits.             (line   6)\n* cs request, and font styles:           Font Families.       (line  59)\n* cs request, and font translations:     Changing Fonts.      (line  55)\n* cs request, incompatibilities with AT&T troff: Implementation Differences.\n(line  84)\n* cs request, with fractional type sizes: Fractional Type Sizes.\n(line   6)\n* current directory:                     Macro Directories.   (line  21)\n* current input file name register (.F): Built-in Registers.  (line  12)\n* current page number (%):               Page Control.        (line  27)\n* current time:                          I/O.                 (line 174)\n* current time, hours (hours):           Built-in Registers.  (line  41)\n* current time, minutes (minutes):       Built-in Registers.  (line  37)\n* current time, seconds (seconds):       Built-in Registers.  (line  32)\n* current vertical position (nl):        Page Control.        (line  66)\n* da request, and dn (dl):               Diversions.          (line  93)\n* da request, and warnings:              Warnings.            (line  49)\n* da request, and warnings <1>:          Warnings.            (line  54)\n* date, day of the month register (dy):  Built-in Registers.  (line  48)\n* date, day of the week register (dw):   Built-in Registers.  (line  45)\n* date, month of the year register (mo): Built-in Registers.  (line  51)\n* date, year register (year, yr):        Built-in Registers.  (line  54)\n* day of the month register (dy):        Built-in Registers.  (line  48)\n* day of the week register (dw):         Built-in Registers.  (line  45)\n* de request, and while:                 while.               (line  22)\n* de, de1, dei requests, and warnings:   Warnings.            (line  54)\n* debugging:                             Debugging.           (line   6)\n* default color:                         Colors.              (line  25)\n* default indentation [man]:             Miscellaneous man macros.\n(line   6)\n* default indentation, resetting [man]:  Man usage.           (line 126)\n* default units:                         Default Units.       (line   6)\n* defining character (char):             Using Symbols.       (line 322)\n* defining character class (class):      Character Classes.   (line  12)\n* defining fallback character (fchar, fschar, schar): Using Symbols.\n(line 322)\n* defining glyph (char):                 Using Symbols.       (line 322)\n* defining symbol (char):                Using Symbols.       (line 322)\n* delayed text:                          Footnotes and Annotations.\n(line  10)\n* delimited arguments, incompatibilities with AT&T troff: Implementation Differences.\n(line  46)\n* delimiting character, for fields (fc): Fields.              (line   6)\n* delimiting characters for arguments:   Escapes.             (line  29)\n* depth, of last glyph (.cdp):           Environments.        (line  94)\n* DESC file, format:                     DESC File Format.    (line   6)\n* device request, and copy-in mode:      Postprocessor Access.\n(line  18)\n* device resolution:                     DESC File Format.    (line  85)\n* devices for output:                    Output device intro. (line   6)\n* devices for output <1>:                Output Devices.      (line   6)\n* dg glyph, at end of sentence:          Sentences.           (line  18)\n* dg glyph, at end of sentence <1>:      Using Symbols.       (line 271)\n* di request, and warnings:              Warnings.            (line  49)\n* di request, and warnings <1>:          Warnings.            (line  54)\n* differences in implementation:         Implementation Differences.\n(line   6)\n* digit width space (\\0):                Page Motions.        (line 141)\n* digits, and delimiters:                Escapes.             (line  65)\n* dimensions, line:                      Line Layout.         (line   6)\n* directories for fonts:                 Font Directories.    (line   6)\n* directories for macros:                Macro Directories.   (line   6)\n* directory, current:                    Macro Directories.   (line  21)\n* directory, for tmac files:             Macro Directories.   (line  11)\n* directory, home:                       Macro Directories.   (line  24)\n* directory, platform-specific:          Macro Directories.   (line  26)\n* directory, site-specific:              Macro Directories.   (line  26)\n* directory, site-specific <1>:          Font Directories.    (line  29)\n* disabling hyphenation (\\%):            Manipulating Hyphenation.\n(line 144)\n* disabling \\ (eo):                      Character Translations.\n(line  24)\n* discardable horizontal space:          Manipulating Filling and Adjusting.\n(line 187)\n* discarded space in traps:              Manipulating Spacing.\n(line  53)\n* displays:                              Displays.            (line   6)\n* displays [ms]:                         ms Displays and Keeps.\n(line   6)\n* displays, and footnotes [ms]:          ms Footnotes.        (line  24)\n* distance to next trap register (.t):   Page Location Traps. (line 102)\n* ditroff, the program:                  History.             (line  57)\n* diversion name register (.z):          Diversions.          (line  69)\n* diversion trap, setting (dt):          Diversion Traps.     (line   7)\n* diversion traps:                       Diversion Traps.     (line   6)\n* diversion, appending (da):             Diversions.          (line  22)\n* diversion, beginning (di):             Diversions.          (line  22)\n* diversion, creating alias (als):       Strings.             (line 226)\n* diversion, ending (di):                Diversions.          (line  22)\n* diversion, nested:                     Diversions.          (line  69)\n* diversion, removing (rm):              Strings.             (line 221)\n* diversion, removing alias (rm):        Strings.             (line 260)\n* diversion, renaming (rn):              Strings.             (line 218)\n* diversion, stripping final newline:    Strings.             (line 156)\n* diversion, top-level:                  Diversions.          (line  12)\n* diversion, top-level, and bp:          Page Control.        (line  24)\n* diversion, top-level, and \\!:          Diversions.          (line 170)\n* diversion, top-level, and \\?:          Diversions.          (line 175)\n* diversion, unformatting (asciify):     Diversions.          (line 194)\n* diversion, vertical position in, register (.d): Diversions. (line  69)\n* diversions:                            Diversions.          (line   6)\n* diversions, and traps:                 Page Location Traps. (line 165)\n* diversions, shared name space with macros and strings: Strings.\n(line  91)\n* dl register, and da (boxa):            Diversions.          (line  93)\n* dn register, and da (boxa):            Diversions.          (line  93)\n* documents, multi-file:                 Debugging.           (line  10)\n* documents, structuring the source code: Requests.           (line  14)\n* double quote, in a macro argument:     Request and Macro Arguments.\n(line  25)\n* double-spacing (ls):                   Basics.              (line  82)\n* double-spacing (ls) <1>:               Manipulating Spacing.\n(line  64)\n* double-spacing (vs, pvs):              Changing Type Sizes. (line 123)\n* drawing a circle (\\D'c ...'):          Drawing Requests.    (line 108)\n* drawing a line (\\D'l ...'):            Drawing Requests.    (line  79)\n* drawing a polygon (\\D'p ...'):         Drawing Requests.    (line 157)\n* drawing a solid circle (\\D'C ...'):    Drawing Requests.    (line 113)\n* drawing a solid ellipse (\\D'E ...'):   Drawing Requests.    (line 123)\n* drawing a solid polygon (\\D'P ...'):   Drawing Requests.    (line 166)\n* drawing a spline (\\D'~ ...'):          Drawing Requests.    (line 135)\n* drawing an arc (\\D'a ...'):            Drawing Requests.    (line 127)\n* drawing an ellipse (\\D'e ...'):        Drawing Requests.    (line 117)\n* drawing color name register (.m):      Colors.              (line  65)\n* drawing horizontal lines (\\l):         Drawing Requests.    (line  17)\n* drawing requests:                      Drawing Requests.    (line   6)\n* drawing vertical lines (\\L):           Drawing Requests.    (line  50)\n* ds request, and comments:              Strings.             (line  44)\n* ds request, and double quotes:         Request and Macro Arguments.\n(line  69)\n* ds request, and leading spaces:        Strings.             (line  56)\n* ds, ds1 requests, and comments:        Comments.            (line  16)\n* ds, ds1 requests, and warnings:        Warnings.            (line  54)\n* dumping environments (pev):            Debugging.           (line  62)\n* dumping number registers (pnr):        Debugging.           (line  77)\n* dumping symbol table (pm):             Debugging.           (line  66)\n* dumping traps (ptr):                   Debugging.           (line  81)\n* EBCDIC encoding:                       Tab Stops.           (line   6)\n* EBCDIC encoding of a tab:              Tabs and Fields.     (line   6)\n* EBCDIC encoding of backspace:          Identifiers.         (line  12)\n* EBCDIC, input encoding:                Input Encodings.     (line   9)\n* EBCDIC, output encoding:               Groff Options.       (line 261)\n* el request, and warnings:              Warnings.            (line  32)\n* ellipse, drawing (\\D'e ...'):          Drawing Requests.    (line 117)\n* ellipse, solid, drawing (\\D'E ...'):   Drawing Requests.    (line 123)\n* em glyph, and cflags:                  Using Symbols.       (line 254)\n* em unit (m):                           Measurements.        (line  55)\n* embedded commands:                     Embedded Commands.   (line   6)\n* embedding PDF:                         Embedding PDF.       (line   6)\n* embedding PostScript:                  Embedding PostScript.\n(line   6)\n* embolding of special fonts:            Artificial Fonts.    (line 114)\n* empty line:                            Implicit Line Breaks.\n(line  10)\n* empty line (sp):                       Basics.              (line  92)\n* empty space before a paragraph [man]:  Miscellaneous man macros.\n(line  15)\n* en unit (n):                           Measurements.        (line  60)\n* enabling vertical position traps (vpt): Page Location Traps.\n(line  18)\n* encoding, EBCDIC:                      Tab Stops.           (line   6)\n* encoding, input, cp1047:               Input Encodings.     (line   9)\n* encoding, input, EBCDIC:               Input Encodings.     (line   9)\n* encoding, input, latin-1 (ISO 8859-1): Input Encodings.     (line  14)\n* encoding, input, latin-2 (ISO 8859-2): Input Encodings.     (line  18)\n* encoding, input, latin-5 (ISO 8859-9): Input Encodings.     (line  23)\n* encoding, input, latin-9 (latin-0, ISO 8859-15): Input Encodings.\n(line  28)\n* encoding, output, ASCII:               Groff Options.       (line 249)\n* encoding, output, cp1047:              Groff Options.       (line 261)\n* encoding, output, EBCDIC:              Groff Options.       (line 261)\n* encoding, output, latin-1 (ISO 8859-1): Groff Options.      (line 253)\n* encoding, output, utf-8:               Groff Options.       (line 257)\n* end of conditional block (\\}):         if-else.             (line  35)\n* end-of-input macro (em):               End-of-input Traps.  (line   7)\n* end-of-input trap, setting (em):       End-of-input Traps.  (line   7)\n* end-of-input traps:                    End-of-input Traps.  (line   6)\n* end-of-sentence characters:            Using Symbols.       (line 243)\n* ending diversion (di):                 Diversions.          (line  22)\n* environment number/name register (.ev): Environments.       (line  38)\n* environment variables:                 Environment.         (line   6)\n* environment, copying (evc):            Environments.        (line  69)\n* environment, dimensions of last glyph (.w, .cht, .cdp, .csk): Environments.\n(line  94)\n* environment, previous line length (.n): Environments.       (line 109)\n* environment, switching (ev):           Environments.        (line  38)\n* environments:                          Environments.        (line   6)\n* environments, dumping (pev):           Debugging.           (line  62)\n* eqn, the program:                      geqn.                (line   6)\n* equations [ms]:                        ms Insertions.       (line   6)\n* escape character, changing (ec):       Character Translations.\n(line  47)\n* escape character, while defining glyph: Using Symbols.      (line 322)\n* escapes:                               Escapes.             (line   6)\n* escaping newline characters, in strings: Strings.           (line  62)\n* ex request, use in debugging:          Debugging.           (line  45)\n* ex request, used with nx and rd:       I/O.                 (line 121)\n* example markup, bulleted list [ms]:    Lists in ms.         (line  21)\n* example markup, glossary-style list [ms]: Lists in ms.      (line  65)\n* example markup, multi-page table [ms]: Example multi-page table.\n(line   6)\n* example markup, numbered list [ms]:    Lists in ms.         (line  41)\n* example markup, title page:            ms Cover Page Macros.\n(line  65)\n* examples of invocation:                Invocation Examples. (line   6)\n* exiting (ex):                          Debugging.           (line  45)\n* expansion of strings (\\*):             Strings.             (line  19)\n* explicit hyphen (\\%):                  Manipulating Hyphenation.\n(line 104)\n* expression, limitation of logical not in: Expressions.      (line  27)\n* expression, order of evaluation:       Expressions.         (line  58)\n* expressions:                           Expressions.         (line   6)\n* expressions, and space characters:     Expressions.         (line  85)\n* extra post-vertical line space (\\x):   Changing Type Sizes. (line 116)\n* extra post-vertical line space register (.a): Manipulating Spacing.\n(line  94)\n* extra pre-vertical line space (\\x):    Changing Type Sizes. (line 107)\n* extra spaces:                          Filling and Adjusting.\n(line  10)\n* extremum operators (>?, <?):           Expressions.         (line  44)\n* f unit:                                Measurements.        (line  48)\n* f unit, and colors:                    Colors.              (line  35)\n* factor, zoom, of a font (fzoom):       Changing Fonts.      (line  70)\n* fallback character, defining (fchar, fschar, schar): Using Symbols.\n(line 322)\n* fallback glyph, removing definition (rchar, rfschar): Using Symbols.\n(line 378)\n* fam request, and changing fonts:       Changing Fonts.      (line  11)\n* fam request, and font positions:       Font Positions.      (line  59)\n* families, font:                        Font Families.       (line   6)\n* features, common:                      Common Features.     (line   6)\n* fi request, causing implicit linebreak: Manipulating Filling and Adjusting.\n(line   6)\n* field delimiting character (fc):       Fields.              (line   6)\n* field padding character (fc):          Fields.              (line   6)\n* fields:                                Fields.              (line   6)\n* fields, and tabs:                      Tabs and Fields.     (line   6)\n* figures [ms]:                          ms Insertions.       (line   6)\n* file formats:                          File formats.        (line   6)\n* file, appending to (opena):            I/O.                 (line 199)\n* file, closing (close):                 I/O.                 (line 230)\n* file, inclusion (so):                  I/O.                 (line   9)\n* file, opening (open):                  I/O.                 (line 199)\n* file, processing next (nx):            I/O.                 (line  83)\n* file, writing to (write, writec):      I/O.                 (line 211)\n* files, font:                           Font Files.          (line   6)\n* files, macro, searching:               Macro Directories.   (line  11)\n* fill color name register (.M):         Colors.              (line  92)\n* fill colors, unnamed (\\D'F...'):       Drawing Requests.    (line 215)\n* fill mode:                             Implicit Line Breaks.\n(line  15)\n* fill mode <1>:                         Manipulating Filling and Adjusting.\n(line 161)\n* fill mode <2>:                         Warnings.            (line  23)\n* fill mode (fi):                        Manipulating Filling and Adjusting.\n(line  29)\n* fill mode, and \\c:                     Line Control.        (line  69)\n* filling:                               Filling and Adjusting.\n(line   6)\n* filling and adjusting, manipulating:   Manipulating Filling and Adjusting.\n(line   6)\n* final newline, stripping in diversions: Strings.            (line 156)\n* fl request, causing implicit linebreak: Manipulating Filling and Adjusting.\n(line   6)\n* floating keep:                         Displays.            (line  23)\n* flush output (fl):                     Debugging.           (line  87)\n* font description file, format:         DESC File Format.    (line   6)\n* font description file, format <1>:     Font File Format.    (line   6)\n* font directories:                      Font Directories.    (line   6)\n* font families:                         Font Families.       (line   6)\n* font family, changing (fam, \\F):       Font Families.       (line  25)\n* font file, format:                     Font File Format.    (line   6)\n* font files:                            Font Files.          (line   6)\n* font files, comments:                  Font File Format.    (line  36)\n* font for underlining (uf):             Artificial Fonts.    (line  90)\n* font height, changing (\\H):            Artificial Fonts.    (line  16)\n* font path:                             Font Directories.    (line  14)\n* font position register (.f):           Font Positions.      (line  19)\n* font position, changing (\\f):          Font Positions.      (line  59)\n* font positions:                        Font Positions.      (line   6)\n* font selection [man]:                  Man font macros.     (line   6)\n* font slant, changing (\\S):             Artificial Fonts.    (line  45)\n* font style, changing (sty):            Font Families.       (line  59)\n* font styles:                           Font Families.       (line   6)\n* font translation (ftr):                Changing Fonts.      (line  55)\n* font, magnification (fzoom):           Changing Fonts.      (line  70)\n* font, mounting (fp):                   Font Positions.      (line  13)\n* font, optical size:                    Changing Fonts.      (line  70)\n* font, previous (ft, \\f[], \\fP):        Changing Fonts.      (line  23)\n* font, zoom factor (fzoom):             Changing Fonts.      (line  70)\n* fonts:                                 Fonts and Symbols.   (line   6)\n* fonts <1>:                             Changing Fonts.      (line   6)\n* fonts, artificial:                     Artificial Fonts.    (line   6)\n* fonts, changing (ft, \\f):              Changing Fonts.      (line  11)\n* fonts, PostScript:                     Font Families.       (line  11)\n* fonts, searching:                      Font Directories.    (line   6)\n* fonts, special:                        Special Fonts.       (line   6)\n* footers:                               Page Layout.         (line  31)\n* footers <1>:                           Page Location Traps. (line  38)\n* footers [ms]:                          ms Headers and Footers.\n(line   6)\n* footnotes:                             Footnotes and Annotations.\n(line   6)\n* footnotes [ms]:                        ms Footnotes.        (line   6)\n* footnotes, and displays [ms]:          ms Footnotes.        (line  24)\n* footnotes, and keeps [ms]:             ms Footnotes.        (line  24)\n* form letters:                          I/O.                 (line 105)\n* format of font description file:       DESC File Format.    (line   6)\n* format of font description files:      Font File Format.    (line   6)\n* format of font files:                  Font File Format.    (line   6)\n* format of register (\\g):               Assigning Formats.   (line  74)\n* formats, assigning (af):               Assigning Formats.   (line   6)\n* formats, file:                         File formats.        (line   6)\n* fp request, and font translations:     Changing Fonts.      (line  55)\n* fp request, incompatibilities with AT&T troff: Implementation Differences.\n(line  84)\n* fractional point sizes:                Fractional Type Sizes.\n(line   6)\n* fractional point sizes <1>:            Implementation Differences.\n(line  75)\n* fractional type sizes:                 Fractional Type Sizes.\n(line   6)\n* fractional type sizes <1>:             Implementation Differences.\n(line  75)\n* french-spacing:                        Sentences.           (line  12)\n* fspecial request, and font styles:     Font Families.       (line  59)\n* fspecial request, and font translations: Changing Fonts.    (line  55)\n* fspecial request, and glyph search order: Using Symbols.    (line  14)\n* fspecial request, and imitating bold:  Artificial Fonts.    (line 114)\n* ft request, and font translations:     Changing Fonts.      (line  55)\n* gchem, invoking:                       Invoking gchem.      (line   5)\n* gchem, the program:                    gchem.               (line   6)\n* geqn, invoking:                        Invoking geqn.       (line   5)\n* geqn, the program:                     geqn.                (line   6)\n* GGL (groff glyph list):                Using Symbols.       (line  88)\n* GGL (groff glyph list) <1>:            Character Classes.   (line  32)\n* ggrn, invoking:                        Invoking ggrn.       (line   5)\n* ggrn, the program:                     ggrn.                (line   6)\n* glossary-style list, example markup [ms]: Lists in ms.      (line  65)\n* glyph:                                 Using Symbols.       (line   6)\n* glyph for line drawing:                Drawing Requests.    (line  50)\n* glyph names, composite:                Using Symbols.       (line  88)\n* glyph pile (\\b):                       Drawing Requests.    (line 231)\n* glyph properties (cflags):             Using Symbols.       (line 233)\n* glyph, box rule (\\[br]):               Drawing Requests.    (line  50)\n* glyph, constant space:                 Artificial Fonts.    (line 125)\n* glyph, defining (char):                Using Symbols.       (line 322)\n* glyph, for line drawing:               Drawing Requests.    (line  28)\n* glyph, for margins (mc):               Miscellaneous.       (line  73)\n* glyph, italic correction (\\/):         Ligatures and Kerning.\n(line  80)\n* glyph, last, dimensions (.w, .cht, .cdp, .csk): Environments.\n(line  94)\n* glyph, leader repetition (lc):         Leaders.             (line  23)\n* glyph, left italic correction (\\,):    Ligatures and Kerning.\n(line  91)\n* glyph, numbered (\\N):                  Character Translations.\n(line 159)\n* glyph, numbered (\\N) <1>:              Using Symbols.       (line 198)\n* glyph, removing definition (rchar, rfschar): Using Symbols. (line 378)\n* glyph, soft hyphen (hy):               Manipulating Hyphenation.\n(line 296)\n* glyph, tab repetition (tc):            Tabs and Fields.     (line 129)\n* glyph, underscore (\\[ru]):             Drawing Requests.    (line  28)\n* glyphs, available, list (groffchar(7) man page): Using Symbols.\n(line  76)\n* glyphs, output, and input characters, compatibility with AT&T troff: Implementation Differences.\n(line  84)\n* glyphs, overstriking (\\o):             Page Motions.        (line 219)\n* glyphs, unnamed:                       Using Symbols.       (line 208)\n* glyphs, unnamed, accessing with \\N:    Font File Format.    (line  51)\n* GNU-specific register (.g):            Built-in Registers.  (line 102)\n* gpic, invoking:                        Invoking gpic.       (line   5)\n* gpic, the program:                     gpic.                (line   6)\n* grap, the program:                     grap.                (line   6)\n* gray shading (\\D'f ...'):              Drawing Requests.    (line 140)\n* grefer, invoking:                      Invoking grefer.     (line   5)\n* grefer, the program:                   grefer.              (line   6)\n* grn, the program:                      ggrn.                (line   6)\n* grodvi, invoking:                      Invoking grodvi.     (line   6)\n* grodvi, the program:                   grodvi.              (line   6)\n* groff - what is it?:                   What Is groff?.      (line   6)\n* groff capabilities:                    groff Capabilities.  (line   6)\n* groff glyph list (GGL):                Using Symbols.       (line  88)\n* groff glyph list (GGL) <1>:            Character Classes.   (line  32)\n* groff invocation:                      Invoking groff.      (line   6)\n* groff, and pi request:                 I/O.                 (line 158)\n* GROFFBINPATH, environment variable:  Environment.         (line  10)\n* GROFFCOMMANDPREFIX, environment variable: Environment.    (line  14)\n* GROFFENCODING, environment variable:  Environment.         (line  25)\n* GROFFFONTPATH, environment variable: Environment.         (line  34)\n* GROFFFONTPATH, environment variable <1>: Font Directories.\n(line  26)\n* GROFFTMACPATH, environment variable: Environment.         (line  39)\n* GROFFTMACPATH, environment variable <1>: Macro Directories.\n(line  18)\n* GROFFTMPDIR, environment variable:    Environment.         (line  44)\n* GROFFTYPESETTER, environment variable: Environment.        (line  52)\n* grohtml, invoking:                     Invoking grohtml.    (line   6)\n* grohtml, registers and strings:        grohtml specific registers and strings.\n(line   6)\n* grohtml, the program:                  Groff Options.       (line 272)\n* grohtml, the program <1>:              grohtml.             (line   6)\n* grolbp, invoking:                      Invoking grolbp.     (line   6)\n* grolbp, the program:                   grolbp.              (line   6)\n* grolj4, invoking:                      Invoking grolj4.     (line   6)\n* grolj4, the program:                   grolj4.              (line   6)\n* gropdf, invoking:                      Invoking gropdf.     (line   6)\n* gropdf, the program:                   gropdf.              (line   6)\n* grops, invoking:                       Invoking grops.      (line   6)\n* grops, the program:                    grops.               (line   6)\n* grotty, invoking:                      Invoking grotty.     (line   6)\n* grotty, the program:                   grotty.              (line   6)\n* gsoelim, invoking:                     Invoking gsoelim.    (line   5)\n* gsoelim, the program:                  gsoelim.             (line   6)\n* gtbl, invoking:                        Invoking gtbl.       (line   5)\n* gtbl, the program:                     gtbl.                (line   6)\n* gtroff, identification register (.g):  Built-in Registers.  (line 102)\n* gtroff, interactive use:               Debugging.           (line  87)\n* gtroff, output:                        gtroff Output.       (line   6)\n* gtroff, process ID register ($$):      Built-in Registers.  (line  99)\n* gtroff, reference:                     gtroff Reference.    (line   6)\n* gxditview, invoking:                   Invoking gxditview.  (line   5)\n* gxditview, the program:                gxditview.           (line   6)\n* hanging indentation [man]:             Man usage.           (line  97)\n* hcode request, and glyph definitions:  Using Symbols.       (line 322)\n* headers:                               Page Layout.         (line  31)\n* headers <1>:                           Page Location Traps. (line  38)\n* headers [ms]:                          ms Headers and Footers.\n(line   6)\n* height, font, changing (\\H):           Artificial Fonts.    (line  16)\n* height, of last glyph (.cht):          Environments.        (line  94)\n* high-water mark register (.h):         Diversions.          (line  76)\n* history:                               History.             (line   6)\n* home directory:                        Macro Directories.   (line  24)\n* horizontal discardable space:          Manipulating Filling and Adjusting.\n(line 187)\n* horizontal input line position register (hp): Page Motions. (line 212)\n* horizontal input line position, saving (\\k): Page Motions.  (line 206)\n* horizontal line, drawing (\\l):         Drawing Requests.    (line  17)\n* horizontal motion (\\h):                Page Motions.        (line 106)\n* horizontal output line position register (.k): Page Motions.\n(line 215)\n* horizontal resolution:                 DESC File Format.    (line  25)\n* horizontal resolution register (.H):   Built-in Registers.  (line  15)\n* horizontal space (\\h):                 Page Motions.        (line 106)\n* horizontal space, unformatting:        Strings.             (line 156)\n* hours, current time (hours):           Built-in Registers.  (line  41)\n* hpf request, and hyphenation language: Manipulating Hyphenation.\n(line 309)\n* hw request, and hy restrictions:       Manipulating Hyphenation.\n(line 129)\n* hw request, and hyphenation language:  Manipulating Hyphenation.\n(line 309)\n* hy glyph, and cflags:                  Using Symbols.       (line 254)\n* hyphen, explicit (\\%):                 Manipulating Hyphenation.\n(line 104)\n* hyphenated lines, consecutive (hlm):   Manipulating Hyphenation.\n(line 104)\n* hyphenating characters:                Using Symbols.       (line 247)\n* hyphenation:                           Hyphenation.         (line   6)\n* hyphenation character (\\%):            Manipulating Hyphenation.\n(line 144)\n* hyphenation code (hcode):              Manipulating Hyphenation.\n(line 232)\n* hyphenation language register (.hla):  Manipulating Hyphenation.\n(line 316)\n* hyphenation margin (hym):              Manipulating Hyphenation.\n(line 266)\n* hyphenation margin register (.hym):    Manipulating Hyphenation.\n(line 276)\n* hyphenation patterns (hpf):            Manipulating Hyphenation.\n(line 174)\n* hyphenation restrictions register (.hy): Manipulating Hyphenation.\n(line  87)\n* hyphenation space (hys):               Manipulating Hyphenation.\n(line 281)\n* hyphenation space register (.hys):     Manipulating Hyphenation.\n(line 292)\n* hyphenation, disabling (\\%):           Manipulating Hyphenation.\n(line 144)\n* hyphenation, manipulating:             Manipulating Hyphenation.\n(line   6)\n* i unit:                                Measurements.        (line  28)\n* i/o:                                   I/O.                 (line   6)\n* IBM cp1047 input encoding:             Input Encodings.     (line   9)\n* IBM cp1047 output encoding:            Groff Options.       (line 261)\n* identifiers:                           Identifiers.         (line   6)\n* identifiers, undefined:                Identifiers.         (line  77)\n* ie request, and font translations:     Changing Fonts.      (line  55)\n* ie request, and warnings:              Warnings.            (line  32)\n* ie request, operators to use with:     Operators in Conditionals.\n(line   6)\n* if request, and font translations:     Changing Fonts.      (line  55)\n* if request, and the ! operator:        Expressions.         (line  21)\n* if request, operators to use with:     Operators in Conditionals.\n(line   6)\n* if-else:                               if-else.             (line   6)\n* ig request, and auto-increment:        Comments.            (line  85)\n* ig request, and copy-in mode:          Comments.            (line  85)\n* imitating bold face (bd):              Artificial Fonts.    (line  97)\n* implementation differences:            Implementation Differences.\n(line   6)\n* implicit breaks of lines:              Implicit Line Breaks.\n(line   6)\n* implicit line breaks:                  Implicit Line Breaks.\n(line   6)\n* in request, causing implicit linebreak: Manipulating Filling and Adjusting.\n(line   6)\n* in request, using + and -:             Expressions.         (line  74)\n* inch unit (i):                         Measurements.        (line  28)\n* including a file (so):                 I/O.                 (line   9)\n* incompatibilities with AT&T troff:     Implementation Differences.\n(line   6)\n* increment value without changing the register: Auto-increment.\n(line  47)\n* increment, automatic:                  Auto-increment.      (line   6)\n* indentation (in):                      Line Layout.         (line  25)\n* indentation, resetting to default [man]: Man usage.         (line 126)\n* index, in macro package:               Indices.             (line   6)\n* indicator, scaling:                    Measurements.        (line   6)\n* indirect assignments:                  Interpolating Registers.\n(line  11)\n* input and output requests:             I/O.                 (line   6)\n* input characters and output glyphs, compatibility with AT&T troff: Implementation Differences.\n(line  84)\n* input characters, invalid:             Identifiers.         (line  15)\n* input conventions:                     Input Conventions.   (line   6)\n* input encoding, cp1047:                Input Encodings.     (line   9)\n* input encoding, EBCDIC:                Input Encodings.     (line   9)\n* input encoding, latin-1 (ISO 8859-1):  Input Encodings.     (line  14)\n* input encoding, latin-2 (ISO 8859-2):  Input Encodings.     (line  18)\n* input encoding, latin-5 (ISO 8859-9):  Input Encodings.     (line  23)\n* input encoding, latin-9 (latin-9, ISO 8859-15): Input Encodings.\n(line  28)\n* input file name, current, register (.F): Built-in Registers.\n(line  12)\n* input level in delimited arguments:    Implementation Differences.\n(line  46)\n* input line continuation (\\):           Line Control.        (line  36)\n* input line number register (.c, c.):   Built-in Registers.  (line  77)\n* input line number, setting (lf):       Debugging.           (line  10)\n* input line position, horizontal, saving (\\k): Page Motions. (line 206)\n* input line trap, setting (it):         Input Line Traps.    (line   8)\n* input line traps:                      Input Line Traps.    (line   6)\n* input line traps and interrupted lines (itc): Input Line Traps.\n(line  24)\n* input line, horizontal position, register (hp): Page Motions.\n(line 212)\n* input stack, backtrace (backtrace):    Debugging.           (line  96)\n* input stack, setting limit:            Debugging.           (line 119)\n* input token:                           Gtroff Internals.    (line   6)\n* input, 8-bit:                          Font File Format.    (line  51)\n* input, standard, reading from (rd):    I/O.                 (line  88)\n* inserting horizontal space (\\h):       Page Motions.        (line 106)\n* installation:                          Installation.        (line   5)\n* interactive use of gtroff:             Debugging.           (line  87)\n* intermediate output:                   gtroff Output.       (line  16)\n* interpolating registers (\\n):          Interpolating Registers.\n(line   6)\n* interpolation of strings (\\*):         Strings.             (line  19)\n* interrupted line:                      Line Control.        (line  36)\n* interrupted line register (.int):      Line Control.        (line  81)\n* interrupted lines and input line traps (itc): Input Line Traps.\n(line  24)\n* introduction:                          Introduction.        (line   6)\n* invalid characters for trf request:    I/O.                 (line  72)\n* invalid input characters:              Identifiers.         (line  15)\n* invocation examples:                   Invocation Examples. (line   6)\n* invoking gchem:                        Invoking gchem.      (line   6)\n* invoking geqn:                         Invoking geqn.       (line   6)\n* invoking ggrn:                         Invoking ggrn.       (line   6)\n* invoking gpic:                         Invoking gpic.       (line   6)\n* invoking grefer:                       Invoking grefer.     (line   6)\n* invoking grodvi:                       Invoking grodvi.     (line   6)\n* invoking groff:                        Invoking groff.      (line   6)\n* invoking grohtml:                      Invoking grohtml.    (line   6)\n* invoking grolbp:                       Invoking grolbp.     (line   6)\n* invoking grolj4:                       Invoking grolj4.     (line   6)\n* invoking gropdf:                       Invoking gropdf.     (line   6)\n* invoking grops:                        Invoking grops.      (line   6)\n* invoking grotty:                       Invoking grotty.     (line   6)\n* invoking gsoelim:                      Invoking gsoelim.    (line   6)\n* invoking gtbl:                         Invoking gtbl.       (line   6)\n* invoking gxditview:                    Invoking gxditview.  (line   6)\n* invoking preconv:                      Invoking preconv.    (line   6)\n* ISO 6249 SGR:                          Invoking grotty.     (line  50)\n* ISO 8859-1 (latin-1), input encoding:  Input Encodings.     (line  14)\n* ISO 8859-1 (latin-1), output encoding: Groff Options.       (line 253)\n* ISO 8859-15 (latin-9, latin-0), input encoding: Input Encodings.\n(line  28)\n* ISO 8859-2 (latin-2), input encoding:  Input Encodings.     (line  18)\n* ISO 8859-9 (latin-5), input encoding:  Input Encodings.     (line  23)\n* italic correction (\\/):                Ligatures and Kerning.\n(line  80)\n* italic fonts [man]:                    Man font macros.     (line  53)\n* italic glyph, correction after roman glyph (\\,): Ligatures and Kerning.\n(line  91)\n* italic glyph, correction before roman glyph (\\/): Ligatures and Kerning.\n(line  80)\n* justifying text:                       Manipulating Filling and Adjusting.\n(line   6)\n* justifying text (rj):                  Manipulating Filling and Adjusting.\n(line 254)\n* keep:                                  Displays.            (line  18)\n* keep, floating:                        Displays.            (line  23)\n* keeps [ms]:                            ms Displays and Keeps.\n(line   6)\n* keeps, and footnotes [ms]:             ms Footnotes.        (line  24)\n* kerning and ligatures:                 Ligatures and Kerning.\n(line   6)\n* kerning enabled register (.kern):      Ligatures and Kerning.\n(line  42)\n* kerning, activating (kern):            Ligatures and Kerning.\n(line  42)\n* kerning, track:                        Ligatures and Kerning.\n(line  53)\n* landscape page orientation:            Paper Size.          (line   6)\n* last glyph, dimensions (.w, .cht, .cdp, .csk): Environments.\n(line  94)\n* last-requested point size registers (.psr, .sr): Fractional Type Sizes.\n(line  43)\n* latin-1 (ISO 8859-1), input encoding:  Input Encodings.     (line  14)\n* latin-1 (ISO 8859-1), output encoding: Groff Options.       (line 253)\n* latin-2 (ISO 8859-2), input encoding:  Input Encodings.     (line  18)\n* latin-5 (ISO 8859-9), input encoding:  Input Encodings.     (line  23)\n* latin-9 (latin-0, ISO 8859-15), input encoding: Input Encodings.\n(line  28)\n* layout, line:                          Line Layout.         (line   6)\n* layout, page:                          Page Layout.         (line   6)\n* lc request, and glyph definitions:     Using Symbols.       (line 322)\n* leader character:                      Leaders.             (line  12)\n* leader character, and translations:    Character Translations.\n(line 168)\n* leader character, non-interpreted (\\a): Leaders.            (line  18)\n* leader repetition character (lc):      Leaders.             (line  23)\n* leaders:                               Leaders.             (line   6)\n* leading:                               Sizes.               (line  15)\n* leading spaces:                        Filling and Adjusting.\n(line  10)\n* leading spaces macro (lsm):            Implicit Line Breaks.\n(line  15)\n* leading spaces macro (lsm) <1>:        Leading Spaces Traps.\n(line   9)\n* leading spaces traps:                  Leading Spaces Traps.\n(line   6)\n* leading spaces with ds:                Strings.             (line  56)\n* left italic correction (\\,):           Ligatures and Kerning.\n(line  91)\n* left margin (po):                      Line Layout.         (line  21)\n* left margin, how to move [man]:        Man usage.           (line 105)\n* length of a string (length):           Strings.             (line 208)\n* length of line (ll):                   Line Layout.         (line  29)\n* length of page (pl):                   Page Layout.         (line  13)\n* length of previous line (.n):          Environments.        (line 109)\n* length of title line (lt):             Page Layout.         (line  67)\n* length request, and copy-in mode:      Strings.             (line 208)\n* letters, form:                         I/O.                 (line 105)\n* level of warnings (warn):              Debugging.           (line 154)\n* ligature:                              Using Symbols.       (line   6)\n* ligatures and kerning:                 Ligatures and Kerning.\n(line   6)\n* ligatures enabled register (.lg):      Ligatures and Kerning.\n(line  24)\n* ligatures, activating (lg):            Ligatures and Kerning.\n(line  24)\n* limitations of \\b escape:              Drawing Requests.    (line 238)\n* line break:                            Basics.              (line  48)\n* line break <1>:                        Implicit Line Breaks.\n(line   6)\n* line break <2>:                        Manipulating Filling and Adjusting.\n(line   6)\n* line break (br):                       Basics.              (line 116)\n* line breaks, with vertical space [man]: Man usage.          (line 119)\n* line breaks, without vertical space [man]: Man usage.       (line 123)\n* line control:                          Line Control.        (line   6)\n* line dimensions:                       Line Layout.         (line   6)\n* line drawing glyph:                    Drawing Requests.    (line  28)\n* line drawing glyph <1>:                Drawing Requests.    (line  50)\n* line indentation (in):                 Line Layout.         (line  25)\n* line layout:                           Line Layout.         (line   6)\n* line length (ll):                      Line Layout.         (line  29)\n* line length register (.l):             Line Layout.         (line 158)\n* line length, previous (.n):            Environments.        (line 109)\n* line number, input, register (.c, c.): Built-in Registers.  (line  77)\n* line number, output, register (ln):    Built-in Registers.  (line  82)\n* line numbers, printing (nm):           Miscellaneous.       (line  10)\n* line space, extra post-vertical (\\x):  Changing Type Sizes. (line 116)\n* line space, extra pre-vertical (\\x):   Changing Type Sizes. (line 107)\n* line spacing register (.L):            Manipulating Spacing.\n(line  75)\n* line spacing, post-vertical (pvs):     Changing Type Sizes. (line 120)\n* line thickness (\\D't ...'):            Drawing Requests.    (line 205)\n* line, blank:                           Implicit Line Breaks.\n(line  10)\n* line, drawing (\\D'l ...'):             Drawing Requests.    (line  79)\n* line, empty (sp):                      Basics.              (line  92)\n* line, horizontal, drawing (\\l):        Drawing Requests.    (line  17)\n* line, implicit breaks:                 Implicit Line Breaks.\n(line   6)\n* line, input, continuation (\\):         Line Control.        (line  36)\n* line, input, horizontal position, register (hp): Page Motions.\n(line 212)\n* line, input, horizontal position, saving (\\k): Page Motions.\n(line 206)\n* line, interrupted:                     Line Control.        (line  36)\n* line, output, continuation (\\c):       Line Control.        (line  36)\n* line, output, horizontal position, register (.k): Page Motions.\n(line 215)\n* line, vertical, drawing (\\L):          Drawing Requests.    (line  50)\n* line-tabs mode:                        Tabs and Fields.     (line 138)\n* lines, blank, disabling:               Manipulating Spacing.\n(line 123)\n* lines, centering (ce):                 Basics.              (line 104)\n* lines, centering (ce) <1>:             Manipulating Filling and Adjusting.\n(line 208)\n* lines, consecutive hyphenated (hlm):   Manipulating Hyphenation.\n(line 104)\n* lines, interrupted, and input line traps (itc): Input Line Traps.\n(line  24)\n* list:                                  Displays.            (line  13)\n* list of available glyphs (groffchar(7) man page): Using Symbols.\n(line  76)\n* ll request, using + and -:             Expressions.         (line  74)\n* location, vertical, page, marking (mk): Page Motions.       (line  11)\n* location, vertical, page, returning to marked (rt): Page Motions.\n(line  11)\n* logical not, limitation in expression: Expressions.         (line  27)\n* logical operators:                     Expressions.         (line  19)\n* long names:                            Implementation Differences.\n(line   9)\n* loops and conditionals:                Conditionals and Loops.\n(line   6)\n* lq glyph, and lq string [man]:         Predefined man strings.\n(line  22)\n* ls request, alternative to (pvs):      Changing Type Sizes. (line 135)\n* lt request, using + and -:             Expressions.         (line  74)\n* m unit:                                Measurements.        (line  55)\n* M unit:                                Measurements.        (line  67)\n* machine unit (u):                      Measurements.        (line   6)\n* macro arguments:                       Request and Macro Arguments.\n(line   6)\n* macro arguments, and compatibility mode: Gtroff Internals.  (line  90)\n* macro arguments, and tabs:             Request and Macro Arguments.\n(line   6)\n* macro basics:                          Basics.              (line   6)\n* macro directories:                     Macro Directories.   (line   6)\n* macro files, searching:                Macro Directories.   (line  11)\n* macro name register (\\$0):             Parameters.          (line  69)\n* macro names, starting with [ or ], and refer: Identifiers.  (line  46)\n* macro packages:                        Macro Package Intro. (line   6)\n* macro packages <1>:                    Macro Packages.      (line   6)\n* macro packages, structuring the source code: Requests.      (line  14)\n* macro, appending (am):                 Writing Macros.      (line 116)\n* macro, arguments (\\$):                 Parameters.          (line  21)\n* macro, creating alias (als):           Strings.             (line 226)\n* macro, end-of-input (em):              End-of-input Traps.  (line   7)\n* macro, removing (rm):                  Strings.             (line 221)\n* macro, removing alias (rm):            Strings.             (line 260)\n* macro, renaming (rn):                  Strings.             (line 218)\n* macros:                                Macros.              (line   6)\n* macros for manual pages [man]:         Man usage.           (line   6)\n* macros, recursive:                     while.               (line  38)\n* macros, searching:                     Macro Directories.   (line   6)\n* macros, shared name space with strings and diversions: Strings.\n(line  91)\n* macros, tutorial for users:            Tutorial for Macro Users.\n(line   6)\n* macros, writing:                       Writing Macros.      (line   6)\n* magnification of a font (fzoom):       Changing Fonts.      (line  70)\n* major quotes:                          Displays.            (line  10)\n* major version number register (.x):    Built-in Registers.  (line  88)\n* man macros:                            Man usage.           (line   6)\n* man macros, bold face:                 Man font macros.     (line  15)\n* man macros, custom headers and footers: Optional man extensions.\n(line  12)\n* man macros, default indentation:       Miscellaneous man macros.\n(line   6)\n* man macros, empty space before a paragraph: Miscellaneous man macros.\n(line  15)\n* man macros, hanging indentation:       Man usage.           (line  97)\n* man macros, how to set fonts:          Man font macros.     (line   6)\n* man macros, italic fonts:              Man font macros.     (line  53)\n* man macros, line breaks with vertical space: Man usage.     (line 119)\n* man macros, line breaks without vertical space: Man usage.  (line 123)\n* man macros, moving left margin:        Man usage.           (line 105)\n* man macros, resetting default indentation: Man usage.       (line 126)\n* man macros, tab stops:                 Miscellaneous man macros.\n(line  10)\n* man macros, Ultrix-specific:           Optional man extensions.\n(line  30)\n* man pages:                             man.                 (line   6)\n* manipulating filling and adjusting:    Manipulating Filling and Adjusting.\n(line   6)\n* manipulating hyphenation:              Manipulating Hyphenation.\n(line   6)\n* manipulating spacing:                  Manipulating Spacing.\n(line   6)\n* manmacros, BSD compatibility:          Miscellaneous man macros.\n(line  26)\n* manmacros, BSD compatibility <1>:      Miscellaneous man macros.\n(line  43)\n* manual pages:                          man.                 (line   6)\n* margin for hyphenation (hym):          Manipulating Hyphenation.\n(line 266)\n* margin glyph (mc):                     Miscellaneous.       (line  73)\n* margin, bottom:                        Page Layout.         (line  20)\n* margin, left (po):                     Line Layout.         (line  21)\n* margin, top:                           Page Layout.         (line  20)\n* mark, high-water, register (.h):       Diversions.          (line  76)\n* marking vertical page location (mk):   Page Motions.        (line  11)\n* MathML:                                grohtml specific registers and strings.\n(line  23)\n* maximum values of Roman numerals:      Assigning Formats.   (line  58)\n* mdoc macros:                           mdoc.                (line   6)\n* me macro package:                      me.                  (line   6)\n* measurement unit:                      Measurements.        (line   6)\n* measurements:                          Measurements.        (line   6)\n* measurements, specifying safely:       Default Units.       (line  24)\n* minimum values of Roman numerals:      Assigning Formats.   (line  58)\n* minor version number register (.y):    Built-in Registers.  (line  92)\n* minutes, current time (minutes):       Built-in Registers.  (line  37)\n* mm macro package:                      mm.                  (line   6)\n* mode for constant glyph space (cs):    Artificial Fonts.    (line 125)\n* mode, compatibility:                   Implementation Differences.\n(line   6)\n* mode, compatibility, and parameters:   Gtroff Internals.    (line  90)\n* mode, copy:                            Copy-in Mode.        (line   6)\n* mode, copy-in:                         Copy-in Mode.        (line   6)\n* mode, copy-in, and cf request:         I/O.                 (line  50)\n* mode, copy-in, and device request:     Postprocessor Access.\n(line  18)\n* mode, copy-in, and ig request:         Comments.            (line  85)\n* mode, copy-in, and length request:     Strings.             (line 208)\n* mode, copy-in, and macro arguments:    Parameters.          (line  21)\n* mode, copy-in, and output request:     Diversions.          (line 178)\n* mode, copy-in, and tm request:         Debugging.           (line  30)\n* mode, copy-in, and tm1 request:        Debugging.           (line  30)\n* mode, copy-in, and tmc request:        Debugging.           (line  30)\n* mode, copy-in, and trf request:        I/O.                 (line  50)\n* mode, copy-in, and write request:      I/O.                 (line 211)\n* mode, copy-in, and writec request:     I/O.                 (line 211)\n* mode, copy-in, and writem request:     I/O.                 (line 224)\n* mode, copy-in, and \\!:                 Diversions.          (line 147)\n* mode, copy-in, and \\?:                 Operators in Conditionals.\n(line  55)\n* mode, copy-in, and \\? <1>:             Diversions.          (line 147)\n* mode, copy-in, and \\a:                 Leaders.             (line  18)\n* mode, copy-in, and \\E:                 Character Translations.\n(line  81)\n* mode, copy-in, and \\t:                 Tabs and Fields.     (line  10)\n* mode, copy-in, and \\V:                 I/O.                 (line 248)\n* mode, fill:                            Implicit Line Breaks.\n(line  15)\n* mode, fill <1>:                        Manipulating Filling and Adjusting.\n(line 161)\n* mode, fill <2>:                        Warnings.            (line  23)\n* mode, fill (fi):                       Manipulating Filling and Adjusting.\n(line  29)\n* mode, fill, and \\c:                    Line Control.        (line  69)\n* mode, line-tabs:                       Tabs and Fields.     (line 138)\n* mode, no-fill (nf):                    Manipulating Filling and Adjusting.\n(line  39)\n* mode, no-fill, and \\c:                 Line Control.        (line  60)\n* mode, no-space (ns):                   Manipulating Spacing.\n(line 123)\n* mode, nroff:                           Troff and Nroff Mode.\n(line   6)\n* mode, safer:                           Groff Options.       (line 213)\n* mode, safer <1>:                       Macro Directories.   (line  21)\n* mode, safer <2>:                       Built-in Registers.  (line  23)\n* mode, safer <3>:                       I/O.                 (line  32)\n* mode, safer <4>:                       I/O.                 (line 146)\n* mode, safer <5>:                       I/O.                 (line 167)\n* mode, safer <6>:                       I/O.                 (line 205)\n* mode, troff:                           Troff and Nroff Mode.\n(line   6)\n* mode, unsafe:                          Groff Options.       (line 289)\n* mode, unsafe <1>:                      Macro Directories.   (line  21)\n* mode, unsafe <2>:                      Built-in Registers.  (line  23)\n* mode, unsafe <3>:                      I/O.                 (line  32)\n* mode, unsafe <4>:                      I/O.                 (line 146)\n* mode, unsafe <5>:                      I/O.                 (line 167)\n* mode, unsafe <6>:                      I/O.                 (line 205)\n* modifying requests:                    Requests.            (line  60)\n* mom macro package:                     mom.                 (line   6)\n* month of the year register (mo):       Built-in Registers.  (line  51)\n* motion operators:                      Expressions.         (line  64)\n* motion, horizontal (\\h):               Page Motions.        (line 106)\n* motion, vertical (\\v):                 Page Motions.        (line  81)\n* motions, page:                         Page Motions.        (line   6)\n* mounting font (fp):                    Font Positions.      (line  13)\n* ms macros:                             ms.                  (line   6)\n* ms macros, accent marks:               ms Strings and Special Characters.\n(line   6)\n* ms macros, body text:                  ms Body Text.        (line   6)\n* ms macros, cover page:                 ms Cover Page Macros.\n(line   6)\n* ms macros, creating table of contents: ms TOC.              (line   6)\n* ms macros, differences from AT&T:      Differences from AT&T ms.\n(line   6)\n* ms macros, displays:                   ms Displays and Keeps.\n(line   6)\n* ms macros, document control registers: ms Document Control Registers.\n(line   6)\n* ms macros, equations:                  ms Insertions.       (line   6)\n* ms macros, figures:                    ms Insertions.       (line   6)\n* ms macros, footers:                    ms Headers and Footers.\n(line   6)\n* ms macros, footnotes:                  ms Footnotes.        (line   6)\n* ms macros, general structure:          General ms Structure.\n(line   6)\n* ms macros, headers:                    ms Headers and Footers.\n(line   6)\n* ms macros, headings:                   Headings in ms.      (line   6)\n* ms macros, highlighting:               Highlighting in ms.  (line   6)\n* ms macros, keeps:                      ms Displays and Keeps.\n(line   6)\n* ms macros, lists:                      Lists in ms.         (line   6)\n* ms macros, margins:                    ms Margins.          (line   6)\n* ms macros, multiple columns:           ms Multiple Columns. (line   6)\n* ms macros, naming conventions:         Naming Conventions.  (line   6)\n* ms macros, nested lists:               Lists in ms.         (line 122)\n* ms macros, page layout:                ms Page Layout.      (line   6)\n* ms macros, paragraph handling:         Paragraphs in ms.    (line   6)\n* ms macros, references:                 ms Insertions.       (line   6)\n* ms macros, special characters:         ms Strings and Special Characters.\n(line   6)\n* ms macros, strings:                    ms Strings and Special Characters.\n(line   6)\n* ms macros, tables:                     ms Insertions.       (line   6)\n* multi-file documents:                  Debugging.           (line  10)\n* multi-line strings:                    Strings.             (line  62)\n* multi-page table, example markup [ms]: Example multi-page table.\n(line   6)\n* multiple columns [ms]:                 ms Multiple Columns. (line   6)\n* n unit:                                Measurements.        (line  60)\n* name space, common, of macros, diversions, and strings: Strings.\n(line  91)\n* name, background color, register (.M): Colors.              (line  92)\n* name, drawing color, register (.m):    Colors.              (line  65)\n* name, fill color, register (.M):       Colors.              (line  92)\n* named character (\\C):                  Using Symbols.       (line 182)\n* names, long:                           Implementation Differences.\n(line   9)\n* naming conventions, ms macros:         Naming Conventions.  (line   6)\n* ne request, and the .trunc register:   Page Location Traps. (line 131)\n* ne request, comparison with sv:        Page Control.        (line  53)\n* negating register values:              Setting Registers.   (line  78)\n* nested assignments:                    Interpolating Registers.\n(line  11)\n* nested diversions:                     Diversions.          (line  69)\n* nested lists [ms]:                     Lists in ms.         (line 122)\n* new page (bp):                         Basics.              (line  90)\n* new page (bp) <1>:                     Page Control.        (line  10)\n* newline character:                     Identifiers.         (line  10)\n* newline character <1>:                 Escapes.             (line  69)\n* newline character, and translations:   Character Translations.\n(line 168)\n* newline character, in strings, escaping: Strings.           (line  62)\n* newline, final, stripping in diversions: Strings.           (line 156)\n* next file, processing (nx):            I/O.                 (line  83)\n* next free font position register (.fp): Font Positions.     (line  29)\n* nf request, causing implicit linebreak: Manipulating Filling and Adjusting.\n(line   6)\n* nl register, and .d:                   Diversions.          (line  69)\n* nl register, difference to .h:         Diversions.          (line  88)\n* nm request, using + and -:             Expressions.         (line  74)\n* no-break control character ('):        Requests.            (line   6)\n* no-break control character, changing (c2): Character Translations.\n(line   6)\n* no-fill mode (nf):                     Manipulating Filling and Adjusting.\n(line  39)\n* no-fill mode, and \\c:                  Line Control.        (line  60)\n* no-space mode (ns):                    Manipulating Spacing.\n(line 123)\n* node, output:                          Gtroff Internals.    (line   6)\n* nr request, and warnings:              Warnings.            (line  61)\n* nr request, using + and -:             Expressions.         (line  74)\n* nroff mode:                            Troff and Nroff Mode.\n(line   6)\n* nroff, the program:                    History.             (line  22)\n* number of arguments register (.$):     Parameters.          (line  10)\n* number of registers register (.R):     Built-in Registers.  (line  19)\n* number register, creating alias (aln): Setting Registers.   (line 112)\n* number register, removing (rr):        Setting Registers.   (line 104)\n* number register, renaming (rnn):       Setting Registers.   (line 108)\n* number registers, dumping (pnr):       Debugging.           (line  77)\n* number, input line, setting (lf):      Debugging.           (line  10)\n* number, page (pn):                     Page Layout.         (line  84)\n* numbered glyph (\\N):                   Character Translations.\n(line 159)\n* numbered glyph (\\N) <1>:               Using Symbols.       (line 198)\n* numbered list, example markup [ms]:    Lists in ms.         (line  41)\n* numbers, and delimiters:               Escapes.             (line  65)\n* numbers, line, printing (nm):          Miscellaneous.       (line  10)\n* numerals, Roman:                       Assigning Formats.   (line  31)\n* numeric expression, valid:             Expressions.         (line  82)\n* offset, page (po):                     Line Layout.         (line  21)\n* open request, and safer mode:          Groff Options.       (line 213)\n* opena request, and safer mode:         Groff Options.       (line 213)\n* opening file (open):                   I/O.                 (line 199)\n* operator, scaling:                     Expressions.         (line  54)\n* operators, arithmetic:                 Expressions.         (line   8)\n* operators, as delimiters:              Escapes.             (line  67)\n* operators, comparison:                 Expressions.         (line  15)\n* operators, extremum (>?, <?):          Expressions.         (line  44)\n* operators, logical:                    Expressions.         (line  19)\n* operators, motion:                     Expressions.         (line  64)\n* operators, unary:                      Expressions.         (line  21)\n* optical size of a font:                Changing Fonts.      (line  70)\n* options:                               Groff Options.       (line   6)\n* order of evaluation in expressions:    Expressions.         (line  58)\n* orientation, landscape:                Paper Size.          (line   6)\n* orphan lines, preventing with ne:      Page Control.        (line  33)\n* os request, and no-space mode:         Page Control.        (line  62)\n* output and input requests:             I/O.                 (line   6)\n* output device name string register (.T): Groff Options.     (line 278)\n* output device name string register (.T) <1>: Built-in Registers.\n(line 126)\n* output device usage number register (.T): Groff Options.    (line 278)\n* output devices:                        Output device intro. (line   6)\n* output devices <1>:                    Output Devices.      (line   6)\n* output encoding, ASCII:                Groff Options.       (line 249)\n* output encoding, cp1047:               Groff Options.       (line 261)\n* output encoding, EBCDIC:               Groff Options.       (line 261)\n* output encoding, latin-1 (ISO 8859-1): Groff Options.       (line 253)\n* output encoding, utf-8:                Groff Options.       (line 257)\n* output glyphs, and input characters,compatibility with AT&T troff: Implementation Differences.\n(line  84)\n* output line number register (ln):      Built-in Registers.  (line  82)\n* output line, continuation (\\c):        Line Control.        (line  36)\n* output line, horizontal position, register (.k): Page Motions.\n(line 215)\n* output node:                           Gtroff Internals.    (line   6)\n* output request, and copy-in mode:      Diversions.          (line 178)\n* output request, and \\!:                Diversions.          (line 178)\n* output, flush (fl):                    Debugging.           (line  87)\n* output, gtroff:                        gtroff Output.       (line   6)\n* output, intermediate:                  gtroff Output.       (line  16)\n* output, suppressing (\\O):              Suppressing output.  (line   7)\n* output, transparent (cf, trf):         I/O.                 (line  50)\n* output, transparent (\\!, \\?):          Diversions.          (line 135)\n* output, transparent, incompatibilities with AT&T troff: Implementation Differences.\n(line 104)\n* output, troff:                         gtroff Output.       (line  16)\n* overlapping characters:                Using Symbols.       (line 261)\n* overstriking glyphs (\\o):              Page Motions.        (line 219)\n* p unit:                                Measurements.        (line  36)\n* P unit:                                Measurements.        (line  40)\n* packages, macros:                      Macro Packages.      (line   6)\n* padding character, for fields (fc):    Fields.              (line   6)\n* page break, conditional (ne):          Page Control.        (line  33)\n* page control:                          Page Control.        (line   6)\n* page ejecting register (.pe):          Page Location Traps. (line 143)\n* page footers:                          Page Location Traps. (line  38)\n* page headers:                          Page Location Traps. (line  38)\n* page layout:                           Page Layout.         (line   6)\n* page layout [ms]:                      ms Page Layout.      (line   6)\n* page length (pl):                      Page Layout.         (line  13)\n* page length register (.p):             Page Layout.         (line  17)\n* page location traps:                   Page Location Traps. (line   6)\n* page location, vertical, marking (mk): Page Motions.        (line  11)\n* page location, vertical, returning to marked (rt): Page Motions.\n(line  11)\n* page motions:                          Page Motions.        (line   6)\n* page number (pn):                      Page Layout.         (line  84)\n* page number character (%):             Page Layout.         (line  35)\n* page number character, changing (pc):  Page Layout.         (line  93)\n* page number register (%):              Page Control.        (line  27)\n* page offset (po):                      Line Layout.         (line  21)\n* page orientation, landscape:           Paper Size.          (line   6)\n* page, new (bp):                        Page Control.        (line  10)\n* paper formats:                         Paper Formats.       (line   6)\n* paper size:                            Paper Size.          (line   6)\n* paragraphs:                            Paragraphs.          (line   6)\n* parameters:                            Parameters.          (line   6)\n* parameters, and compatibility mode:    Gtroff Internals.    (line  90)\n* parentheses:                           Expressions.         (line  58)\n* path, for font files:                  Font Directories.    (line  14)\n* path, for tmac files:                  Macro Directories.   (line  11)\n* patterns for hyphenation (hpf):        Manipulating Hyphenation.\n(line 174)\n* PDF, embedding:                        Embedding PDF.       (line   6)\n* pi request, and groff:                 I/O.                 (line 158)\n* pi request, and safer mode:            Groff Options.       (line 213)\n* pic, the program:                      gpic.                (line   6)\n* pica unit (P):                         Measurements.        (line  40)\n* pile, glyph (\\b):                      Drawing Requests.    (line 231)\n* pl request, using + and -:             Expressions.         (line  74)\n* planting a trap:                       Traps.               (line  11)\n* platform-specific directory:           Macro Directories.   (line  26)\n* pn request, using + and -:             Expressions.         (line  74)\n* PNG image generation from PostScript:  DESC File Format.    (line  29)\n* po request, using + and -:             Expressions.         (line  74)\n* point size registers (.s, .ps):        Changing Type Sizes. (line  20)\n* point size registers, last-requested (.psr, .sr): Fractional Type Sizes.\n(line  43)\n* point sizes, changing (ps, \\s):        Changing Type Sizes. (line  11)\n* point sizes, fractional:               Fractional Type Sizes.\n(line   6)\n* point sizes, fractional <1>:           Implementation Differences.\n(line  75)\n* point unit (p):                        Measurements.        (line  36)\n* polygon, drawing (\\D'p ...'):          Drawing Requests.    (line 157)\n* polygon, solid, drawing (\\D'P ...'):   Drawing Requests.    (line 166)\n* position of lowest text line (.h):     Diversions.          (line  76)\n* position, absolute, operator (|):      Expressions.         (line  69)\n* position, horizontal input line, saving (\\k): Page Motions. (line 206)\n* position, horizontal, in input line, register (hp): Page Motions.\n(line 212)\n* position, horizontal, in output line, register (.k): Page Motions.\n(line 215)\n* position, vertical, current (nl):      Page Control.        (line  66)\n* position, vertical, in diversion, register (.d): Diversions.\n(line  69)\n* positions, font:                       Font Positions.      (line   6)\n* post-vertical line spacing:            Changing Type Sizes. (line 120)\n* post-vertical line spacing register (.pvs): Changing Type Sizes.\n(line 135)\n* post-vertical line spacing, changing (pvs): Changing Type Sizes.\n(line 135)\n* postprocessor access:                  Postprocessor Access.\n(line   6)\n* postprocessors:                        Output device intro. (line   6)\n* PostScript fonts:                      Font Families.       (line  11)\n* PostScript, bounding box:              Miscellaneous.       (line 137)\n* PostScript, embedding:                 Embedding PostScript.\n(line   6)\n* PostScript, PNG image generation:      DESC File Format.    (line  29)\n* preconv, invoking:                     Invoking preconv.    (line   5)\n* preconv, the program:                  preconv.             (line   6)\n* prefix, for commands:                  Environment.         (line  14)\n* preprocessor, calling convention:      Preprocessors in man pages.\n(line   6)\n* preprocessors:                         Preprocessor Intro.  (line   6)\n* preprocessors <1>:                     Preprocessors.       (line   6)\n* previous font (ft, \\f[], \\fP):         Changing Fonts.      (line  23)\n* previous line length (.n):             Environments.        (line 109)\n* print current page register (.P):      Groff Options.       (line 170)\n* printing backslash (\\\\, \\e, \\E, \\[rs]): Escapes.            (line  74)\n* printing backslash (\\\\, \\e, \\E, \\[rs]) <1>: Implementation Differences.\n(line 104)\n* printing line numbers (nm):            Miscellaneous.       (line  10)\n* printing to stderr (tm, tm1, tmc):     Debugging.           (line  27)\n* printing, zero-width (\\z, \\Z):         Page Motions.        (line 223)\n* printing, zero-width (\\z, \\Z) <1>:     Page Motions.        (line 227)\n* process ID of gtroff register ($$):    Built-in Registers.  (line  99)\n* processing next file (nx):             I/O.                 (line  83)\n* properties of characters (cflags):     Using Symbols.       (line 233)\n* properties of glyphs (cflags):         Using Symbols.       (line 233)\n* ps request, and constant glyph space mode: Artificial Fonts.\n(line 125)\n* ps request, incompatibilities with AT&T troff: Implementation Differences.\n(line  75)\n* ps request, using + and -:             Expressions.         (line  74)\n* ps request, with fractional type sizes: Fractional Type Sizes.\n(line   6)\n* pso request, and safer mode:           Groff Options.       (line 213)\n* pvs request, using + and -:            Expressions.         (line  74)\n* quotes, major:                         Displays.            (line  10)\n* quotes, trailing:                      Strings.             (line  56)\n* radicalex glyph, and cflags:           Using Symbols.       (line 261)\n* ragged-left:                           Manipulating Filling and Adjusting.\n(line  63)\n* ragged-right:                          Manipulating Filling and Adjusting.\n(line  59)\n* rc request, and glyph definitions:     Using Symbols.       (line 322)\n* read-only register, changing format:   Assigning Formats.   (line  67)\n* reading from standard input (rd):      I/O.                 (line  88)\n* recursive macros:                      while.               (line  38)\n* refer, and macro names starting with [ or ]: Identifiers.   (line  46)\n* refer, the program:                    grefer.              (line   6)\n* reference, gtroff:                     gtroff Reference.    (line   6)\n* references [ms]:                       ms Insertions.       (line   6)\n* register, creating alias (aln):        Setting Registers.   (line 112)\n* register, format (\\g):                 Assigning Formats.   (line  74)\n* register, removing (rr):               Setting Registers.   (line 104)\n* register, renaming (rnn):              Setting Registers.   (line 108)\n* registers:                             Registers.           (line   6)\n* registers specific to grohtml:         grohtml specific registers and strings.\n(line   6)\n* registers, built-in:                   Built-in Registers.  (line   6)\n* registers, interpolating (\\n):         Interpolating Registers.\n(line   6)\n* registers, number of, register (.R):   Built-in Registers.  (line  19)\n* registers, setting (nr, \\R):           Setting Registers.   (line   6)\n* removing alias, for diversion (rm):    Strings.             (line 260)\n* removing alias, for macro (rm):        Strings.             (line 260)\n* removing alias, for string (rm):       Strings.             (line 260)\n* removing diversion (rm):               Strings.             (line 221)\n* removing glyph definition (rchar, rfschar): Using Symbols.  (line 378)\n* removing macro (rm):                   Strings.             (line 221)\n* removing number register (rr):         Setting Registers.   (line 104)\n* removing request (rm):                 Strings.             (line 221)\n* removing string (rm):                  Strings.             (line 221)\n* renaming diversion (rn):               Strings.             (line 218)\n* renaming macro (rn):                   Strings.             (line 218)\n* renaming number register (rnn):        Setting Registers.   (line 108)\n* renaming request (rn):                 Strings.             (line 218)\n* renaming string (rn):                  Strings.             (line 218)\n* request arguments:                     Request and Macro Arguments.\n(line   6)\n* request arguments, and compatibility mode: Gtroff Internals.\n(line  90)\n* request, removing (rm):                Strings.             (line 221)\n* request, renaming (rn):                Strings.             (line 218)\n* request, undefined:                    Comments.            (line  25)\n* requests:                              Requests.            (line   6)\n* requests for drawing:                  Drawing Requests.    (line   6)\n* requests for input and output:         I/O.                 (line   6)\n* requests, modifying:                   Requests.            (line  60)\n* resolution, device:                    DESC File Format.    (line  85)\n* resolution, horizontal:                DESC File Format.    (line  25)\n* resolution, horizontal, register (.H): Built-in Registers.  (line  15)\n* resolution, vertical:                  DESC File Format.    (line 134)\n* resolution, vertical, register (.V):   Built-in Registers.  (line  28)\n* returning to marked vertical page location (rt): Page Motions.\n(line  11)\n* revision number register (.Y):         Built-in Registers.  (line  96)\n* rf, the program:                       History.             (line   6)\n* right-justifying (rj):                 Manipulating Filling and Adjusting.\n(line 254)\n* rj request, causing implicit linebreak: Manipulating Filling and Adjusting.\n(line   6)\n* rn glyph, and cflags:                  Using Symbols.       (line 261)\n* roff, the program:                     History.             (line  17)\n* roman glyph, correction after italic glyph (\\/): Ligatures and Kerning.\n(line  80)\n* roman glyph, correction before italic glyph (\\,): Ligatures and Kerning.\n(line  91)\n* Roman numerals:                        Assigning Formats.   (line  31)\n* Roman numerals, maximum and minimum:   Assigning Formats.   (line  58)\n* rq glyph, and rq string [man]:         Predefined man strings.\n(line  22)\n* rq glyph, at end of sentence:          Sentences.           (line  18)\n* rq glyph, at end of sentence <1>:      Using Symbols.       (line 271)\n* rt request, using + and -:             Expressions.         (line  74)\n* ru glyph, and cflags:                  Using Symbols.       (line 261)\n* RUNOFF, the program:                   History.             (line   6)\n* s unit:                                Measurements.        (line  45)\n* s unit <1>:                            Fractional Type Sizes.\n(line   6)\n* safer mode:                            Groff Options.       (line 213)\n* safer mode <1>:                        Macro Directories.   (line  21)\n* safer mode <2>:                        Built-in Registers.  (line  23)\n* safer mode <3>:                        I/O.                 (line  32)\n* safer mode <4>:                        I/O.                 (line 146)\n* safer mode <5>:                        I/O.                 (line 167)\n* safer mode <6>:                        I/O.                 (line 205)\n* saving horizontal input line position (\\k): Page Motions.   (line 206)\n* scaling indicator:                     Measurements.        (line   6)\n* scaling operator:                      Expressions.         (line  54)\n* searching fonts:                       Font Directories.    (line   6)\n* searching macro files:                 Macro Directories.   (line  11)\n* searching macros:                      Macro Directories.   (line   6)\n* seconds, current time (seconds):       Built-in Registers.  (line  32)\n* sentence space:                        Sentences.           (line  12)\n* sentence space size register (.sss):   Manipulating Filling and Adjusting.\n(line 156)\n* sentences:                             Sentences.           (line   6)\n* setting diversion trap (dt):           Diversion Traps.     (line   7)\n* setting end-of-input trap (em):        End-of-input Traps.  (line   7)\n* setting input line number (lf):        Debugging.           (line  10)\n* setting input line trap (it):          Input Line Traps.    (line   8)\n* setting registers (nr, \\R):            Setting Registers.   (line   6)\n* shading filled objects (\\D'f ...'):    Drawing Requests.    (line 140)\n* shc request, and translations:         Character Translations.\n(line 172)\n* site-specific directory:               Macro Directories.   (line  26)\n* site-specific directory <1>:           Font Directories.    (line  29)\n* size of sentence space register (.sss): Manipulating Filling and Adjusting.\n(line 156)\n* size of type:                          Sizes.               (line   6)\n* size of word space register (.ss):     Manipulating Filling and Adjusting.\n(line 156)\n* size, optical, of a font:              Changing Fonts.      (line  70)\n* size, paper:                           Paper Size.          (line   6)\n* sizes:                                 Sizes.               (line   6)\n* sizes, fractional:                     Fractional Type Sizes.\n(line   6)\n* sizes, fractional <1>:                 Implementation Differences.\n(line  75)\n* skew, of last glyph (.csk):            Environments.        (line  94)\n* slant, font, changing (\\S):            Artificial Fonts.    (line  45)\n* soelim, the program:                   gsoelim.             (line   6)\n* soft hyphen character, setting (shc):  Manipulating Hyphenation.\n(line 296)\n* soft hyphen glyph (hy):                Manipulating Hyphenation.\n(line 296)\n* solid circle, drawing (\\D'C ...'):     Drawing Requests.    (line 113)\n* solid ellipse, drawing (\\D'E ...'):    Drawing Requests.    (line 123)\n* solid polygon, drawing (\\D'P ...'):    Drawing Requests.    (line 166)\n* SOURCEDATEEPOCH, environment variable: Environment.       (line  55)\n* sp request, and no-space mode:         Manipulating Spacing.\n(line 123)\n* sp request, and traps:                 Manipulating Spacing.\n(line  53)\n* sp request, causing implicit linebreak: Manipulating Filling and Adjusting.\n(line   6)\n* space between sentences:               Sentences.           (line  12)\n* space between sentences register (.sss): Manipulating Filling and Adjusting.\n(line 156)\n* space between words register (.ss):    Manipulating Filling and Adjusting.\n(line 156)\n* space character:                       Escapes.             (line  69)\n* space character, zero width (\\&):      Requests.            (line  47)\n* space character, zero width (\\&) <1>:  Ligatures and Kerning.\n(line  47)\n* space character, zero width (\\&) <2>:  Drawing Requests.    (line  32)\n* space characters, in expressions:      Expressions.         (line  85)\n* space, discardable, horizontal:        Manipulating Filling and Adjusting.\n(line 187)\n* space, discarded, in traps:            Manipulating Spacing.\n(line  53)\n* space, horizontal (\\h):                Page Motions.        (line 106)\n* space, horizontal, unformatting:       Strings.             (line 156)\n* space, unbreakable:                    Page Motions.        (line 117)\n* space, vertical, unit (v):             Measurements.        (line  63)\n* space, width of a digit (\\0):          Page Motions.        (line 141)\n* spaces with ds:                        Strings.             (line  56)\n* spaces, in a macro argument:           Request and Macro Arguments.\n(line  10)\n* spaces, leading and trailing:          Filling and Adjusting.\n(line  10)\n* spacing:                               Basics.              (line  82)\n* spacing, manipulating:                 Manipulating Spacing.\n(line   6)\n* spacing, vertical:                     Sizes.               (line   6)\n* special characters:                    Character Translations.\n(line 159)\n* special characters <1>:                Special Characters.  (line   6)\n* special characters [ms]:               ms Strings and Special Characters.\n(line   6)\n* special fonts:                         Using Symbols.       (line  14)\n* special fonts <1>:                     Special Fonts.       (line   6)\n* special fonts <2>:                     Font File Format.    (line  28)\n* special fonts, emboldening:            Artificial Fonts.    (line 114)\n* special request, and font translations: Changing Fonts.     (line  55)\n* special request, and glyph search order: Using Symbols.     (line  14)\n* spline, drawing (\\D'~ ...'):           Drawing Requests.    (line 135)\n* springing a trap:                      Traps.               (line  11)\n* sqrtex glyph, and cflags:              Using Symbols.       (line 261)\n* stacking glyphs (\\b):                  Drawing Requests.    (line 231)\n* standard input, reading from (rd):     I/O.                 (line  88)\n* stderr, printing to (tm, tm1, tmc):    Debugging.           (line  27)\n* stops, tabulator:                      Tab Stops.           (line   6)\n* string arguments:                      Strings.             (line  19)\n* string comparison:                     Operators in Conditionals.\n(line  47)\n* string expansion (\\*):                 Strings.             (line  19)\n* string interpolation (\\*):             Strings.             (line  19)\n* string, appending (as):                Strings.             (line 175)\n* string, creating alias (als):          Strings.             (line 226)\n* string, length of (length):            Strings.             (line 208)\n* string, removing (rm):                 Strings.             (line 221)\n* string, removing alias (rm):           Strings.             (line 260)\n* string, renaming (rn):                 Strings.             (line 218)\n* strings:                               Strings.             (line   6)\n* strings specific to grohtml:           grohtml specific registers and strings.\n(line   6)\n* strings [ms]:                          ms Strings and Special Characters.\n(line   6)\n* strings, multi-line:                   Strings.             (line  62)\n* strings, shared name space with macros and diversions: Strings.\n(line  91)\n* stripping final newline in diversions: Strings.             (line 156)\n* structuring source code of documents or macro packages: Requests.\n(line  14)\n* sty request, and changing fonts:       Changing Fonts.      (line  11)\n* sty request, and font positions:       Font Positions.      (line  59)\n* sty request, and font translations:    Changing Fonts.      (line  55)\n* styles, font:                          Font Families.       (line   6)\n* substring (substring):                 Strings.             (line 191)\n* suppressing output (\\O):               Suppressing output.  (line   7)\n* sv request, and no-space mode:         Page Control.        (line  62)\n* switching environments (ev):           Environments.        (line  38)\n* sy request, and safer mode:            Groff Options.       (line 213)\n* symbol:                                Using Symbols.       (line  14)\n* symbol table, dumping (pm):            Debugging.           (line  66)\n* symbol, defining (char):               Using Symbols.       (line 322)\n* symbols, using:                        Using Symbols.       (line   6)\n* system() return value register (systat): I/O.               (line 194)\n* tab character:                         Tab Stops.           (line   6)\n* tab character <1>:                     Escapes.             (line  69)\n* tab character, and translations:       Character Translations.\n(line 168)\n* tab character, non-interpreted (\\t):   Tabs and Fields.     (line  10)\n* tab repetition character (tc):         Tabs and Fields.     (line 129)\n* tab settings register (.tabs):         Tabs and Fields.     (line 117)\n* tab stops:                             Tab Stops.           (line   6)\n* tab stops [man]:                       Miscellaneous man macros.\n(line  10)\n* tab stops, for TTY output devices:     Tabs and Fields.     (line 115)\n* tab, line-tabs mode:                   Tabs and Fields.     (line 138)\n* table of contents:                     Table of Contents.   (line   6)\n* table of contents <1>:                 Leaders.             (line  29)\n* table of contents, creating [ms]:      ms TOC.              (line   6)\n* tables [ms]:                           ms Insertions.       (line   6)\n* tabs, and fields:                      Tabs and Fields.     (line   6)\n* tabs, and macro arguments:             Request and Macro Arguments.\n(line   6)\n* tabs, before comments:                 Comments.            (line  21)\n* tbl, the program:                      gtbl.                (line   6)\n* Teletype:                              Invoking grotty.     (line  50)\n* terminal control sequences:            Invoking grotty.     (line  50)\n* terminal, conditional output for:      Operators in Conditionals.\n(line  14)\n* text line, position of lowest (.h):    Diversions.          (line  76)\n* text, gtroff processing:               Text.                (line   6)\n* text, justifying:                      Manipulating Filling and Adjusting.\n(line   6)\n* text, justifying (rj):                 Manipulating Filling and Adjusting.\n(line 254)\n* thickness of lines (\\D't ...'):        Drawing Requests.    (line 205)\n* three-part title (tl):                 Page Layout.         (line  35)\n* ti request, causing implicit linebreak: Manipulating Filling and Adjusting.\n(line   6)\n* ti request, using + and -:             Expressions.         (line  74)\n* time, current:                         I/O.                 (line 174)\n* time, current, hours (hours):          Built-in Registers.  (line  41)\n* time, current, minutes (minutes):      Built-in Registers.  (line  37)\n* time, current, seconds (seconds):      Built-in Registers.  (line  32)\n* title line (tl):                       Page Layout.         (line  35)\n* title line length register (.lt):      Page Layout.         (line  67)\n* title line, length (lt):               Page Layout.         (line  67)\n* title page, example markup:            ms Cover Page Macros.\n(line  65)\n* titles:                                Page Layout.         (line  31)\n* tkf request, and font styles:          Font Families.       (line  59)\n* tkf request, and font translations:    Changing Fonts.      (line  55)\n* tkf request, with fractional type sizes: Fractional Type Sizes.\n(line   6)\n* tl request, and mc:                    Miscellaneous.       (line 100)\n* tm request, and copy-in mode:          Debugging.           (line  30)\n* tm1 request, and copy-in mode:         Debugging.           (line  30)\n* tmac, directory:                       Macro Directories.   (line  11)\n* tmac, path:                            Macro Directories.   (line  11)\n* tmc request, and copy-in mode:         Debugging.           (line  30)\n* TMPDIR, environment variable:          Environment.         (line  44)\n* token, input:                          Gtroff Internals.    (line   6)\n* top margin:                            Page Layout.         (line  20)\n* top-level diversion:                   Diversions.          (line  12)\n* top-level diversion, and bp:           Page Control.        (line  24)\n* top-level diversion, and \\!:           Diversions.          (line 170)\n* top-level diversion, and \\?:           Diversions.          (line 175)\n* tr request, and glyph definitions:     Using Symbols.       (line 322)\n* tr request, and soft hyphen character: Manipulating Hyphenation.\n(line 296)\n* tr request, incompatibilities with AT&T troff: Implementation Differences.\n(line  84)\n* track kerning:                         Ligatures and Kerning.\n(line  53)\n* track kerning, activating (tkf):       Ligatures and Kerning.\n(line  60)\n* trailing quotes:                       Strings.             (line  56)\n* trailing spaces:                       Filling and Adjusting.\n(line  10)\n* translations of characters:            Character Translations.\n(line   6)\n* transparent characters:                Sentences.           (line  18)\n* transparent characters <1>:            Using Symbols.       (line 271)\n* transparent output (cf, trf):          I/O.                 (line  50)\n* transparent output (\\!, \\?):           Diversions.          (line 135)\n* transparent output, incompatibilities with AT&T troff: Implementation Differences.\n(line 104)\n* trap, changing location (ch):          Page Location Traps. (line 111)\n* trap, distance, register (.t):         Page Location Traps. (line 102)\n* trap, diversion, setting (dt):         Diversion Traps.     (line   7)\n* trap, end-of-input, setting (em):      End-of-input Traps.  (line   7)\n* trap, input line, setting (it):        Input Line Traps.    (line   8)\n* trap, planting:                        Traps.               (line  11)\n* trap, springing:                       Traps.               (line  11)\n* traps:                                 Traps.               (line   6)\n* traps, and discarded space:            Manipulating Spacing.\n(line  53)\n* traps, and diversions:                 Page Location Traps. (line 165)\n* traps, blank line:                     Blank Line Traps.    (line   6)\n* traps, diversion:                      Diversion Traps.     (line   6)\n* traps, dumping (ptr):                  Debugging.           (line  81)\n* traps, end-of-input:                   End-of-input Traps.  (line   6)\n* traps, input line:                     Input Line Traps.    (line   6)\n* traps, input line, and interrupted lines (itc): Input Line Traps.\n(line  24)\n* traps, leading spaces:                 Leading Spaces Traps.\n(line   6)\n* traps, page location:                  Page Location Traps. (line   6)\n* traps, sprung by bp request (.pe):     Page Location Traps. (line 143)\n* trf request, and copy-in mode:         I/O.                 (line  50)\n* trf request, and invalid characters:   I/O.                 (line  72)\n* trf request, causing implicit linebreak: Manipulating Filling and Adjusting.\n(line   6)\n* trin request, and asciify:             Diversions.          (line 194)\n* troff mode:                            Troff and Nroff Mode.\n(line   6)\n* troff output:                          gtroff Output.       (line  16)\n* truncated vertical space register (.trunc): Page Location Traps.\n(line 131)\n* TTY, conditional output for:           Operators in Conditionals.\n(line  14)\n* tutorial for macro users:              Tutorial for Macro Users.\n(line   6)\n* type size:                             Sizes.               (line   6)\n* type size registers (.s, .ps):         Changing Type Sizes. (line  20)\n* type sizes, changing (ps, \\s):         Changing Type Sizes. (line  11)\n* type sizes, fractional:                Fractional Type Sizes.\n(line   6)\n* type sizes, fractional <1>:            Implementation Differences.\n(line  75)\n* u unit:                                Measurements.        (line   6)\n* uf request, and font styles:           Font Families.       (line  59)\n* ul glyph, and cflags:                  Using Symbols.       (line 261)\n* ul request, and font translations:     Changing Fonts.      (line  55)\n* Ultrix-specific man macros:            Optional man extensions.\n(line  30)\n* unary operators:                       Expressions.         (line  21)\n* unbreakable space:                     Page Motions.        (line 117)\n* undefined identifiers:                 Identifiers.         (line  77)\n* undefined request:                     Comments.            (line  25)\n* underline font (uf):                   Artificial Fonts.    (line  90)\n* underlining (ul):                      Artificial Fonts.    (line  64)\n* underlining, continuous (cu):          Artificial Fonts.    (line  86)\n* underscore glyph (\\[ru]):              Drawing Requests.    (line  28)\n* unformatting diversions (asciify):     Diversions.          (line 194)\n* unformatting horizontal space:         Strings.             (line 156)\n* Unicode:                               Identifiers.         (line  15)\n* Unicode <1>:                           Using Symbols.       (line 198)\n* unit, c:                               Measurements.        (line  33)\n* unit, f:                               Measurements.        (line  48)\n* unit, f, and colors:                   Colors.              (line  35)\n* unit, i:                               Measurements.        (line  28)\n* unit, m:                               Measurements.        (line  55)\n* unit, M:                               Measurements.        (line  67)\n* unit, n:                               Measurements.        (line  60)\n* unit, p:                               Measurements.        (line  36)\n* unit, P:                               Measurements.        (line  40)\n* unit, s:                               Measurements.        (line  45)\n* unit, s <1>:                           Fractional Type Sizes.\n(line   6)\n* unit, u:                               Measurements.        (line   6)\n* unit, v:                               Measurements.        (line  63)\n* unit, z:                               Measurements.        (line  45)\n* unit, z <1>:                           Fractional Type Sizes.\n(line   6)\n* units of measurement:                  Measurements.        (line   6)\n* units, default:                        Default Units.       (line   6)\n* unnamed fill colors (\\D'F...'):        Drawing Requests.    (line 215)\n* unnamed glyphs:                        Using Symbols.       (line 208)\n* unnamed glyphs, accessing with \\N:     Font File Format.    (line  51)\n* unsafe mode:                           Groff Options.       (line 289)\n* unsafe mode <1>:                       Macro Directories.   (line  21)\n* unsafe mode <2>:                       Built-in Registers.  (line  23)\n* unsafe mode <3>:                       I/O.                 (line  32)\n* unsafe mode <4>:                       I/O.                 (line 146)\n* unsafe mode <5>:                       I/O.                 (line 167)\n* unsafe mode <6>:                       I/O.                 (line 205)\n* user's macro tutorial:                 Tutorial for Macro Users.\n(line   6)\n* user's tutorial for macros:            Tutorial for Macro Users.\n(line   6)\n* using symbols:                         Using Symbols.       (line   6)\n* utf-8, output encoding:                Groff Options.       (line 257)\n* v unit:                                Measurements.        (line  63)\n* valid numeric expression:              Expressions.         (line  82)\n* value, incrementing without changing the register: Auto-increment.\n(line  47)\n* variables in environment:              Environment.         (line   6)\n* version number, major, register (.x):  Built-in Registers.  (line  88)\n* version number, minor, register (.y):  Built-in Registers.  (line  92)\n* vertical line drawing (\\L):            Drawing Requests.    (line  50)\n* vertical line spacing register (.v):   Changing Type Sizes. (line  86)\n* vertical line spacing, changing (vs):  Changing Type Sizes. (line  86)\n* vertical line spacing, effective value: Changing Type Sizes.\n(line 104)\n* vertical motion (\\v):                  Page Motions.        (line  81)\n* vertical page location, marking (mk):  Page Motions.        (line  11)\n* vertical page location, returning to marked (rt): Page Motions.\n(line  11)\n* vertical position in diversion register (.d): Diversions.   (line  69)\n* vertical position trap enable register (.vpt): Page Location Traps.\n(line  18)\n* vertical position traps, enabling (vpt): Page Location Traps.\n(line  18)\n* vertical position, current (nl):       Page Control.        (line  66)\n* vertical resolution:                   DESC File Format.    (line 134)\n* vertical resolution register (.V):     Built-in Registers.  (line  28)\n* vertical space unit (v):               Measurements.        (line  63)\n* vertical spacing:                      Sizes.               (line   6)\n* warnings:                              Debugging.           (line 148)\n* warnings <1>:                          Warnings.            (line   6)\n* warnings, level (warn):                Debugging.           (line 154)\n* what is groff?:                        What Is groff?.      (line   6)\n* while:                                 while.               (line   6)\n* while request, and font translations:  Changing Fonts.      (line  55)\n* while request, and the ! operator:     Expressions.         (line  21)\n* while request, confusing with br:      while.               (line  68)\n* while request, operators to use with:  Operators in Conditionals.\n(line   6)\n* whitespace characters:                 Identifiers.         (line  10)\n* width escape (\\w):                     Page Motions.        (line 155)\n* width, of last glyph (.w):             Environments.        (line  94)\n* word space size register (.ss):        Manipulating Filling and Adjusting.\n(line 156)\n* write request, and copy-in mode:       I/O.                 (line 211)\n* writec request, and copy-in mode:      I/O.                 (line 211)\n* writem request, and copy-in mode:      I/O.                 (line 224)\n* writing macros:                        Writing Macros.      (line   6)\n* writing to file (write, writec):       I/O.                 (line 211)\n* year, current, register (year, yr):    Built-in Registers.  (line  54)\n* z unit:                                Measurements.        (line  45)\n* z unit <1>:                            Fractional Type Sizes.\n(line   6)\n* zero width space character (\\&):       Requests.            (line  47)\n* zero width space character (\\&) <1>:   Ligatures and Kerning.\n(line  47)\n* zero width space character (\\&) <2>:   Drawing Requests.    (line  32)\n* zero-width printing (\\z, \\Z):          Page Motions.        (line 223)\n* zero-width printing (\\z, \\Z) <1>:      Page Motions.        (line 227)\n* zoom factor of a font (fzoom):         Changing Fonts.      (line  70)\n",
            "subsections": []
        }
    },
    "flags": [],
    "examples": [],
    "see_also": []
}