diff options
Diffstat (limited to 'upstream/opensuse-leap-15-6/man7/groff_diff.7')
-rw-r--r-- | upstream/opensuse-leap-15-6/man7/groff_diff.7 | 3984 |
1 files changed, 3984 insertions, 0 deletions
diff --git a/upstream/opensuse-leap-15-6/man7/groff_diff.7 b/upstream/opensuse-leap-15-6/man7/groff_diff.7 new file mode 100644 index 00000000..daa62043 --- /dev/null +++ b/upstream/opensuse-leap-15-6/man7/groff_diff.7 @@ -0,0 +1,3984 @@ +'\" e +.TH GROFF_DIFF 7 "7 February 2022" "groff 1.22.4" +.SH NAME +groff_diff \- differences between GNU troff and classical troff +. +.\" groff_diff.man: +.\" Source file position: <groff_source>/man/groff_diff.man +.\" Installed position: <prefix>/share/man/man7/groff_diff.7 +. +. +.\" Save and disable compatibility mode (for, e.g., Solaris 10/11). +.do nr groff_diff_C \n[.C] +.cp 0 +. +. +.\" ==================================================================== +.\" Legal Terms +.\" ==================================================================== +.\" +.\" Copyright (C) 1989-2018 Free Software Foundation, Inc. +.\" +.\" This file is part of groff, the GNU roff type-setting system. +.\" +.\" Permission is granted to copy, distribute and/or modify this +.\" document under the terms of the GNU Free Documentation License, +.\" Version 1.3 or any later version published by the Free Software +.\" Foundation; with no Invariant Sections, with no Front-Cover Texts, +.\" and with no Back-Cover Texts. +.\" +.\" A copy of the Free Documentation License is included as a file +.\" called FDL in the main directory of the groff source package. +. +. +.\" ==================================================================== +.\" Local definitions +.\" ==================================================================== +. +.\" define a string tx for the TeX logo +.ie t .ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X +.el .ds tx TeX +. +. +.\" from old groff_out.man +.ie \n(.g \ +. ds ic \/ +.el \ +. ds ic \^ +. +.\" ellipsis +.ds ellipsis \&.\|.\|.\& +. +. +.\" ==================================================================== +.SH DESCRIPTION +.\" ==================================================================== +. +This manual page describes the language differences between +.IR groff , +the GNU +.I roff +text processing system, and the classical +.I roff +formatter of the freely available Unix\~7 of the 1970s, documented in +the +.I Troff User's Manual +by +.I Ossanna +and +.IR Kernighan . +. +This includes the roff language as well as the intermediate output +format (troff output). +. +. +.P +Section \[lq]See Also\[rq] below gives pointers to both the classical +.I roff +and the modern +.I groff +documentation. +. +. +.\" ==================================================================== +.SH "GROFF LANGUAGE" +.\" ==================================================================== +. +In this section, all additional features of +.I groff +compared to the classical Unix\~7 +.I troff +are described in detail. +. +. +.\" ==================================================================== +.SS "Long names" +.\" ==================================================================== +. +The names of number registers, fonts, strings/\:macros/\:diversions, +special characters (glyphs), and colors can be of any length. +. +In escape sequences, additionally to the classical +\[oq]\fB(\fP\,\fIxx\/\fP\[cq] +construction for a two-character glyph name, +you can use +\[oq]\fB[\fP\,\fIxxx\/\fP\fB]\fP\[cq] +for a name of arbitrary length. +. +.TP +.BI \[rs][ xxx ] +Print the special character (glyph) called +.IR xxx . +. +.TP +.BI \[rs][ "comp1 comp2 \*[ellipsis]" ] +Print composite glyph consisting of multiple components. +. +Example: \[oq]\[rs][A\~ho]\[cq] is capital letter A with ogonek which +finally maps to glyph name \[oq]u0041_0328\[cq]. +. +See +.IR "Groff: The GNU Implementation of troff" , +the +.I groff +Texinfo manual, +for details of how a glyph name for a composite glyph is constructed, +and +.BR groff_char (7) +for a list of glyph name components used in composite glyph names. +. +.TP +.BI \[rs]f[ xxx ] +Set font +.IR xxx . +. +Additionally, +.B \[rs]f[] +is a new syntax form equal to +.BR \[rs]fP , +i.e., to return to the previous font. +. +.TP +.BI \[rs]*[ "xxx arg1 arg2 \*[ellipsis]" ] +Interpolate string +.IR xxx , +taking +.IR arg1 , +.IR arg2 , +.IR \*[ellipsis] , +as arguments. +. +.TP +.BI \[rs]n[ xxx ] +Interpolate number register +.IR xxx . +. +. +.\" ==================================================================== +.SS "Fractional point sizes" +.\" ==================================================================== +. +A +.I scaled point +is equal to +.B 1/sizescale +points, where +.B sizescale +is specified in the +.I DESC +file (1 by default). +. +There is a new scale indicator\~\c +.B z +that has the effect of multiplying by sizescale. +. +Requests and escape sequences in troff interpret arguments that +represent a point size as being in units of scaled points, but they +evaluate each such argument using a default scale indicator of\~\c +.BR z . +Arguments treated in this way are the argument to the +.B ps +request, the third argument to the +.B cs +request, the second and fourth arguments to the +.B tkf +request, the argument to the +.B \[rs]H +escape sequence, and those variants of the +.B \[rs]s +escape sequence that take a numeric expression as their argument. +. +. +.P +For example, suppose sizescale is 1000; then a scaled point is +equivalent to a millipoint; the call +.B .ps\ 10.25 +is equivalent to +.B .ps\ 10.25z +and so sets the point size to 10250 scaled points, which is equal to +10.25 points. +. +. +.P +The number register +.B \[rs]n[.s] +returns the point size in points as decimal fraction. +. +There is also a new number register +.B \[rs]n[.ps] +that returns the point size in scaled points. +. +. +.P +It would make no sense to use the +.BR z \~\c +scale indicator in a numeric expression whose default scale indicator +was neither +.B u +nor\~\c +.BR z , +and so +.B troff +disallows this. +. +Similarly it would make no sense to use a scaling indicator other than +.B z +or\~\c +.B u +in a numeric expression whose default scale indicator was\~\c +.BR z , +and so +.B troff +disallows this as well. +. +.P +There is also new scale indicator\~\c +.B s +which multiplies by the number of units in a scaled point. +. +So, for example, +.B \[rs]n[.ps]s +is equal to +.BR 1m . +Be sure not to confuse the +.B s +and +.BR z \~\c +scale indicators. +. +. +.\" ==================================================================== +.SS "Numeric expressions" +.\" ==================================================================== +. +Spaces are permitted in a number expression within parentheses. +. +. +.P +.B M +indicates a scale of 100ths of an em. +.B f +indicates a scale of 65536 units, providing fractions for color +definitions with the +.B defcolor +request. +. +For example, 0.5f = 32768u. +. +.TP +.IB e1 >? e2 +The maximum of +.I e1 +and +.IR e2 . +. +.TP +.IB e1 <? e2 +The minimum of +.I e1 +and +.IR e2 . +. +.TP +.BI ( c ; e ) +Evaluate +.I e +using +.I c +as the default scaling indicator. +. +If +.I c +is missing, ignore scaling indicators in the evaluation of\~\c +.IR e . +. +. +.\" ==================================================================== +.SS "New escape sequences" +.\" ==================================================================== +. +.TP +.BI \[rs]A' anything ' +This expands to +.B 1 +or\~\c +.BR 0 , +depending on whether +.I anything +is or is not acceptable as the name of a string, macro, diversion, +number register, environment, font, or color. +. +It returns\~\c +.B 0 +if +.I anything +is empty. +. +This is useful if you want to look up user input in some sort of +associative table. +. +.TP +.BI \[rs]B' anything ' +This expands to +.B 1 +or\~\c +.BR 0 , +depending on whether +.I anything +is or is not a valid numeric expression. +. +It returns\~\c +.B 0 +if +.I anything +is empty. +. +.TP +.BI \[rs]C' xxx ' +Typeset glyph named +.IR xxx . +Normally it is more convenient to use +.BI \[rs][ xxx ]\f[R]. +But +.B \[rs]C +has the advantage that it is compatible with recent versions of Unix and +is available in compatibility mode. +. +.TP +.B \[rs]E +This is equivalent to an escape character, but it is not interpreted in +copy mode. +. +For example, strings to start and end superscripting could be defined +like this +. +.RS +.IP +.EX +\&.ds { \[rs]v'\-.3m'\[rs]s'\[rs]En[.s]*6u/10u' +\&.ds } \[rs]s0\[rs]v'.3m' +.EE +.RE +. +.IP +The use of +.B \[rs]E +ensures that these definitions work even if +.B \[rs]*{ +gets interpreted in copy mode (for example, by being used in a macro +argument). +.RE +. +.TP +.BI \[rs]F f +.TQ +.BI \[rs]F( fm +.TQ +.BI \[rs]F[ fam ] +Change font family. +. +This is the same as the +.B fam +request. +. +.B \[rs]F[] +switches back to the previous font family (note that +.B \[rs]FP +won't work; it selects font family \[oq]P\[cq] instead). +. +.TP +.BI \[rs]m x +.TQ +.BI \[rs]m( xx +.TQ +.BI \[rs]m[ xxx ] +Set drawing color. +.B \[rs]m[] +switches back to the previous color. +. +.TP +.BI \[rs]M x +.TQ +.BI \[rs]M( xx +.TQ +.BI \[rs]M[ xxx ] +Set background color for filled objects drawn with the +.BI \[rs]D' \*[ellipsis] ' +commands. +.B \[rs]M[] +switches back to the previous color. +. +.TP +.BI \[rs]N' n ' +Typeset the glyph with index\~\c +.I n +in the current font. +.IR n \~\c +can be any integer. +. +Most devices only have glyphs with indices between 0 and 255. +. +If the current font does not contain a glyph with that code, +special fonts are +.I not +searched. +. +The +.B \[rs]N +escape sequence can be conveniently used in conjunction with the +.B char +request, for example +. +.RS +.IP +.EX +\&.char \[rs][phone] \[rs]f(ZD\[rs]N'37' +.EE +.RE +. +.IP +The index of each glyph is given in the fourth column in the font +description file after the +.B charset +command. +. +It is possible to include unnamed glyphs in the font description +file by using a name of +.BR \-\-\- ; +the +.B \[rs]N +escape sequence is the only way to use these. +. +.TP +.BI \[rs]O n +.TQ +.BI \[rs]O[ n ] +Suppress troff output. +. +The escapes +.BR \[rs]O2 , +.BR \[rs]O3 , +.BR \[rs]O4 , +and +.B \[rs]O5 +are intended for internal use by +.BR \%grohtml . +. +.RS +.TP +.B \[rs]O0 +Disable any ditroff glyphs from being emitted to the device driver, +provided that the escape occurs at the outer level (see +.B \[rs]O3 +and +.BR \[rs]O4 ). +. +.TP +.B \[rs]O1 +Enable output of glyphs, provided that the escape occurs at the outer +level. +.IP +.B \[rs]O0 +and +.B \[rs]O1 +also reset the registers +.BR \[rs]n[opminx] , +.BR \[rs]n[opminy] , +.BR \[rs]n[opmaxx] , +and +.B \[rs]n[opmaxy] +to\~\-1. +. +These four registers mark the top left and bottom right hand corners +of a box which encompasses all written glyphs. +. +.TP +.B \[rs]O2 +Provided that the escape occurs at the outer level, enable output of +glyphs and also write out to stderr the page number and four registers +encompassing the glyphs previously written since the last call to +.BR \[rs]O . +. +.TP +.B \[rs]O3 +Begin a nesting level. +. +At start-up, +.B troff +is at outer level. +. +This is really an internal mechanism for +.B \%grohtml +while producing images. +. +They are generated by running the troff source through +.B troff +to the PostScript device and +.B ghostscript +to produce images in PNG format. +. +The +.B \[rs]O3 +escape starts a new page if the device is not html (to reduce the +possibility of images crossing a page boundary). +. +.TP +.B \[rs]O4 +End a nesting level. +. +.TP +.BI \[rs]O5[ Pfilename ] +This escape is +.B \%grohtml +specific. +. +Provided that this escape occurs at the outer nesting level, write +.I filename +to stderr. +. +The position of the image, +.IR P , +must be specified and must be one of +.BR l , +.BR r , +.BR c , +or +.B i +(left, right, centered, inline). +. +.I filename +is associated with the production of the next inline image. +.RE +. +.TP +.BI \[rs]R' name\ \[+-]n ' +This has the same effect as +. +.RS +.IP +.BI .nr\ name\ \[+-]n +.RE +. +.TP +.BI \[rs]s( nn +.TQ +.BI \[rs]s\[+-]( nn +Set the point size to +.I nn +points; +.I nn +must be exactly two digits. +. +.TP +.BI \[rs]s[\[+-] n ] +.TQ +.BI \[rs]s\[+-][ n ] +.TQ +.BI \[rs]s'\[+-] n ' +.TQ +.BI \[rs]s\[+-]' n ' +Set the point size to +.I n +scaled points; +.I n +is a numeric expression with a default scale indicator of\~\c +.BR z . +. +.TP +.BI \[rs]V x +.TQ +.BI \[rs]V( xx +.TQ +.BI \[rs]V[ xxx ] +Interpolate the contents of the environment variable +.IR xxx , +as returned by +.BR getenv (3). +.B \[rs]V +is interpreted in copy mode. +. +.TP +.BI \[rs]Y x +.TQ +.BI \[rs]Y( xx +.TQ +.BI \[rs]Y[ xxx ] +This is approximately equivalent to +.BI \[rs]X'\[rs]*[ xxx ]'\f[R]. +However the contents of the string or macro +.I xxx +are not interpreted; also it is permitted for +.I xxx +to have been defined as a macro and thus contain newlines (it is not +permitted for the argument to +.B \[rs]X +to contain newlines). +. +The inclusion of newlines requires an extension to the Unix troff output +format, and confuses drivers that do not know about this extension. +. +.TP +.BI \[rs]Z' anything ' +Print anything and then restore the horizontal and vertical position; +.I anything +may not contain tabs or leaders. +. +.TP +.B \[rs]$0 +The name by which the current macro was invoked. +. +The +.B als +request can make a macro have more than one name. +. +.TP +.B \[rs]$* +In a macro or string, the concatenation of all the arguments separated +by spaces. +. +.TP +.B \[rs]$@ +In a macro or string, the concatenation of all the arguments with each +surrounded by double quotes, and separated by spaces. +. +.TP +.B \[rs]$^ +In a macro, the representation of all parameters as if they were an +argument to the +.B ds +request. +. +.TP +.BI \[rs]$( nn +.TQ +.BI \[rs]$[ nnn ] +In a macro or string, this gives the +.IR nn -th +or +.IR nnn -th +argument. +. +Macros and strings can have an unlimited number of arguments. +. +.TP +.BI \[rs]? anything \[rs]? +When used in a diversion, this transparently embeds +.I anything +in the diversion. +.I anything +is read in copy mode. +. +When the diversion is reread, +.I anything +is interpreted. +.I anything +may not contain newlines; use +.B \[rs]!\& +if you want to embed newlines in a diversion. +. +The escape sequence +.B \[rs]?\& +is also recognized in copy mode and turned into a single internal +code; it is this code that terminates +.IR anything . +Thus +. +.RS +.IP +.EX +.ne 14v+\n(.Vu +\&.nr x 1 +\&.nf +\&.di d +\&\[rs]?\[rs]\[rs]?\[rs]\[rs]\[rs]\[rs]?\[rs]\[rs]\[rs]\[rs]\[rs]\[rs]\ +\[rs]\c +\&\[rs]nx\[rs]\[rs]\[rs]\[rs]?\[rs]\[rs]?\[rs]? +\&.di +\&.nr x 2 +\&.di e +\&.d +\&.di +\&.nr x 3 +\&.di f +\&.e +\&.di +\&.nr x 4 +\&.f +.EE +.RE +. +.IP +prints\~\c +.BR 4 . +. +.TP +.B \[rs]/ +This increases the width of the preceding glyph so that the +spacing between that glyph and the following glyph is +correct if the following glyph is a roman glyph. +. +.if t \{\ +. nop For example, if an italic\~f is immediately followed by a roman +. nop right parenthesis, then in many fonts the top right portion of +. nop the\~f overlaps the top left of the right parenthesis +. nop producing \f[I]f\f[R]), which is ugly. +. nop Inserting +. B \[rs]/ +. nop produces +. ie \n(.g \f[I]f\/\f[R]) +. el \f[I]f\|\f[R]) +. nop and avoids this problem. +.\} +It is a good idea to use this escape sequence whenever an italic +glyph is immediately followed by a roman glyph without any +intervening space. +. +.TP +.B \[rs], +This modifies the spacing of the following glyph so that the +spacing between that glyph and the preceding glyph is +correct if the preceding glyph is a roman glyph. +. +.if t \{\ +. nop For example, inserting +. B \[rs], +. nop between the parenthesis and the\~f changes +. nop \f[R](\f[I]f\f[R] to +. ie \n(.g \f[R](\,\f[I]f\f[R]. +. el \f[R](\^\f[I]f\f[R]. +.\} +It is a good idea to use this escape sequence whenever a roman +glyph is immediately followed by an italic glyph without any +intervening space. +. +.TP +.B \[rs]) +Like +.B \[rs]& +except that it behaves like a character declared with the +.B cflags +request to be transparent for the purposes of end-of-sentence +recognition. +. +.TP +.B \[rs]\[ti] +This produces an unbreakable space that stretches like a normal +inter-word space when a line is adjusted. +. +.TP +.B \[rs]: +This causes the insertion of a zero-width break point. +. +It is equal to +.B \[rs]% +within a word but without insertion of a soft hyphen glyph. +. +.TP +.B \[rs]# +Everything up to and including the next newline is ignored. +. +This is interpreted in copy mode. +. +It is like +.B \[rs]" +except that +.B \[rs]" +does not ignore the terminating newline. +. +. +.\" ==================================================================== +.SS "New requests" +.\" ==================================================================== +. +.TP +.BI .aln\ xx\ yy +Create an alias +.I xx +for number register object named +.IR yy . +The new name and the old name are exactly equivalent. +. +If +.I yy +is undefined, a warning of type +.B reg +is generated, and the request is ignored. +. +.TP +.BI .als\ xx\ yy +Create an alias +.I xx +for request, string, macro, or diversion object named +.IR yy . +. +The new name and the old name are exactly equivalent (it is +similar to a hard rather than a soft link). +. +If +.I yy +is undefined, a warning of type +.B mac +is generated, and the request is ignored. +. +The +.BR de , +.BR am , +.BR di , +.BR da , +.BR ds , +and +.B as +requests only create a new object if the name of the macro, diversion +or string is currently undefined or if it is defined to be a +request; normally they modify the value of an existing object. +. +.TP +.BI .am1\ xx\ yy +Similar to +.BR .am , +but compatibility mode is switched off during execution. +. +To be more precise, a \[oq]compatibility save\[cq] token is inserted +at the beginning of the macro addition, and a \[oq]compatibility +restore\[cq] token at the end. +. +As a consequence, the requests +.BR am , +.BR am1 , +.BR de , +and +.B de1 +can be intermixed freely since the compatibility save/\:restore tokens +only affect the macro parts defined by +.B .am1 +and +.BR .ds1 . +. +.TP +.BI .ami\ xx\ yy +Append to macro indirectly. +. +See the +.B dei +request below for more information. +. +.TP +.BI .ami1\ xx\ yy +Same as the +.B ami +request but compatibility mode is switched off during execution. +. +.TP +.BI .as1\ xx\ yy +Similar to +.BR .as , +but compatibility mode is switched off during expansion. +. +To be more precise, a \[oq]compatibility save\[cq] token is inserted +at the beginning of the string, and a \[oq]compatibility restore\[cq] +token at the end. +. +As a consequence, the requests +.BR as , +.BR as1 , +.BR ds , +and +.B ds1 +can be intermixed freely since the compatibility save/\:restore tokens +only affect the (sub)strings defined by +.B as1 +and +.BR ds1 . +. +.TP +.BI .asciify\ xx +This request \[oq]unformats\[cq] the diversion +.I xx +in such a way that ASCII and space characters (and some escape +sequences) that were formatted +and diverted into +.I xx +are treated like ordinary input characters when +.I xx +is reread. +Useful for diversions in conjunction with the +.B writem +request. +. +It can be also used for gross hacks; for example, this +. +.RS +.IP +.EX +.ne 7v+\n(.Vu +\&.tr @. +\&.di x +\&@nr n 1 +\&.br +\&.di +\&.tr @@ +\&.asciify x +\&.x +.EE +.RE +. +.IP +sets register\~\c +.B n +to\~1. +. +Note that glyph information (font, font size, etc.) is not preserved; +use +.B .unformat +instead. +. +.TP +.B .backtrace +Print a backtrace of the input stack on stderr. +. +.TP +.BI .blm\ xx +Set the blank line macro to +.IR xx . +If there is a blank line macro, it is invoked when a blank line +is encountered instead of the usual troff behaviour. +. +.TP +.BI .box\ xx +.TQ +.BI .boxa\ xx +These requests are similar to the +.B di +and +.B da +requests with the exception that a partially filled line does not +become part of the diversion (i.e., the diversion always starts with a +new line) but is restored after ending the diversion, discarding the +partially filled line which possibly comes from the diversion. +. +.TP +.B .break +Break out of a while loop. +. +See also the +.B while +and +.B continue +requests. +. +Be sure not to confuse this with the +.B br +request. +. +.TP +.B .brp +This is the same as +.BR \[rs]p . +. +.TP +.BI .cflags\ "n c1 c2 \*[ellipsis]" +Characters +.IR c1 , +.IR c2 , +.IR \*[ellipsis] , +have properties determined by +.IR n , +which is ORed from the following: +. +.RS +.IP 1 +The character ends sentences (initially characters +.B .?!\& +have this property). +. +.IP 2 +Lines can be broken before the character (initially no characters have +this property); a line is not broken at a character with this property +unless the characters on each side both have non-zero hyphenation +codes. +This can be overridden with value 64. +. +.IP 4 +Lines can be broken after the character (initially characters +.B \-\[rs][hy]\[rs][em] +have this property); a line is not broken at a character with this +property unless the characters on each side both have non-zero +hyphenation codes. +This can be overridden with value 64. +. +.IP 8 +The glyph associated with this character overlaps horizontally +(initially characters +.B \[rs][ul]\[rs][rn]\[rs][ru]\[rs][radicalex]\[rs][sqrtex] +have this property). +. +.IP 16 +The glyph associated with this character overlaps vertically +(initially glyph +.B \[rs][br] +has this property). +. +.IP 32 +An end-of-sentence character followed by any number of characters with +this property is treated as the end of a sentence if followed by a +newline or two spaces; in other words the character is transparent for +the purposes of end-of-sentence recognition; this is the same as having +a zero space factor in \*[tx] (initially characters +.B \[dq]')]*\[rs][dg]\[rs][rq]\[rs][cq] +have this property). +. +.IP 64 +Ignore hyphenation code values of the surrounding characters. +Use this in combination with values 2 and\~4 (initially no characters +have this property). +. +.IP 128 +Prohibit a line break before the character, but allow a line break after +the character. +This works only in combination with flags 256 and 512 and has no effect +otherwise. +. +.IP 256 +Prohibit a line break after the character, but allow a line break before +the character. +This works only in combination with flags 128 and 512 and has no effect +otherwise. +. +.IP 512 +Allow line break before or after the character. +This works only in combination with flags 128 and 256 and has no effect +otherwise. +.RE +. +.IP +Contrary to flag values 2 and\~4, the flags 128, 256, and 512 work +pairwise. +. +If, for example, the left character has value 512, and the right +character 128, no line break gets inserted. +. +If we use value\~6 instead for the left character, a line break after +the character can't be suppressed since the right neighbour character +doesn't get examined. +. +.TP +.BI .char\ c\ string +[This request can both define characters and glyphs.] +. +.IP +Define entity\~\c +.I c +to be +.IR string . +. +To be more precise, define (or even override) a groff entity which +can be accessed with name\~\c +.I c +on the input side, and which uses +.I string +on the output side. +. +Every time glyph\~\c +.I c +needs to be printed, +.I string +is processed in a temporary environment and the result is +wrapped up into a single object. +. +Compatibility mode is turned off and the escape character is +set to\~\c +.B \[rs] +while +.I string +is being processed. +. +Any emboldening, constant spacing or track kerning is applied to +this object rather than to individual glyphs in +.IR string . +. +.IP +A groff object defined by this request can be used just like a +normal glyph provided by the output device. +. +In particular other characters can be translated to it with the +.B tr +request; it can be made the leader glyph by the +.B lc +request; repeated patterns can be drawn with the glyph using the +.B \[rs]l +and +.B \[rs]L +escape sequences; words containing\~\c +.I c +can be hyphenated correctly, if the +.B hcode +request is used to give the object a hyphenation code. +. +.IP +There is a special anti-recursion feature: Use of glyph within the +glyph's definition is handled like normal glyphs not defined with +.BR char . +.IP +A glyph definition can be removed with the +.B rchar +request. +. +.TP +.BI .chop\ xx +Chop the last element off macro, string, or diversion +.IR xx . +This is useful for removing the newline from the end of diversions +that are to be interpolated as strings. +. +.TP +.BI .class\ "name c1 c2 \*[ellipsis]" +Assign +.I name +to a set of characters +.IR c1 , +.IR c2 , +.IR \*[ellipsis] , +so that they can be referred to from other requests easily (currently +.B .cflags +only). +. +Character ranges (indicated by an intermediate \[oq]\-\[cq]) and +nested classes are possible also. +. +This is useful to assign properties to a large set of characters. +. +.TP +.BI .close\ stream +Close the stream named +.IR stream ; +.I stream +will no longer be an acceptable argument to the +.B write +request. +. +See the +.B open +request. +. +.TP +.BI .composite\ glyph1\ glyph2 +Map glyph name +.I glyph1 +to glyph name +.I glyph2 +if it is used in +.BI \[rs][ \*[ellipsis] ] +with more than one component. +. +.TP +.B .continue +Finish the current iteration of a while loop. +. +See also the +.B while +and +.B break +requests. +. +.TP +.BI .color\ n +If +.I n +is non-zero or missing, enable colors (this is the default), otherwise +disable them. +. +.TP +.BI .cp\ n +If +.I n +is non-zero or missing, enable compatibility mode, otherwise disable +it. +. +In compatibility mode, long names are not recognized, and the +incompatibilities caused by long names do not arise. +. +.TP +.BI .defcolor\ xxx\ scheme\ color_components +Define color +.IR xxx . +.I scheme +can be one of the following values: +.B rgb +(three components), +.B cmy +(three components), +.B cmyk +(four components), and +.B gray +or +.B grey +(one component). +. +Color components can be given either as a hexadecimal string or as +positive decimal integers in the range 0\[en]65535. +. +A hexadecimal string contains all color components concatenated; it +must start with either +.B # +or +.BR ## . +The former specifies hex values in the range 0\[en]255 (which are +internally multiplied by\~257), the latter in the range 0\[en]65535. +. +Examples: #FFC0CB (pink), ##ffff0000ffff (magenta). +. +A new scaling indicator\~\c +.B f +has been introduced which multiplies its value by\~65536; this makes +it convenient to specify color components as fractions in the range 0 +to\~1. +. +Example: +. +.RS +.IP +.EX +\&.defcolor darkgreen rgb 0.1f 0.5f 0.2f +.EE +.RE +. +.IP +Note that +.B f +is the default scaling indicator for the +.B defcolor +request, thus the above statement is equivalent to +. +.RS +.IP +.EX +\&.defcolor darkgreen rgb 0.1 0.5 0.2 +.EE +.RE +. +.IP +The color named +.B default +(which is device-specific) can't be redefined. +. +It is possible that the default color for +.B \[rs]M +and +.B \[rs]m +is not the same. +. +.TP +.BI .de1\ xx\ yy +Similar to +.BR .de , +but compatibility mode is switched off during execution. +. +On entry, the current compatibility mode is saved and restored at exit. +. +.TP +.BI .dei\ xx\ yy +Define macro indirectly. +. +The following example +. +.RS +.IP +.ne 2v+\n(.Vu +.EX +\&.ds xx aa +\&.ds yy bb +\&.dei xx yy +.EE +.RE +. +.IP +is equivalent to +. +.RS +.IP +.EX +\&.de aa bb +.EE +.RE +. +.TP +.BI .dei1\ xx\ yy +Similar to the +.B dei +request but compatibility mode is switched off during execution. +. +.TP +.BI .device\ anything +This is (almost) the same as the +.B \[rs]X +escape. +.I anything +is read in copy mode; a leading\~\c +.B \[dq] +is stripped. +. +.TP +.BI .devicem\ xx +This is the same as the +.B \[rs]Y +escape (to embed the contents of a macro into the intermediate +output preceded with \[oq]x\~X\[cq]). +. +.TP +.BI .do\ xxx +Interpret +.I .xxx +with compatibility mode disabled. +. +For example, +. +.RS +. +.IP +.EX +\&.do fam T +.EE +. +.P +would have the same effect as +. +.IP +.EX +\&.fam T +.EE +. +.P +except that it would work even if compatibility mode had been enabled. +. +Note that the previous compatibility mode is restored before any files +sourced by +.I xxx +are interpreted. +. +.RE +. +.TP +.BI .ds1\ xx\ yy +Similar to +.BR .ds , +but compatibility mode is switched off during expansion. +. +To be more precise, a \[oq]compatibility save\[cq] token is inserted +at the beginning of the string, and a \[oq]compatibility restore\[cq] +token at the end. +. +.TP +.B .ecs +Save current escape character. +. +.TP +.B .ecr +Restore escape character saved with +.BR ecs . +Without a previous call to +.BR ecs , +.RB \[oq] \[rs] \[cq] +will be the new escape character. +. +.TP +.BI .evc\ xx +Copy the contents of environment +.I xx +to the current environment. +. +No pushing or popping of environments is done. +. +.TP +.BI .fam\ xx +Set the current font family to +.IR xx . +The current font family is part of the current environment. +If +.I xx +is missing, switch back to previous font family. +. +The value at start-up is \[oq]T\[cq]. +. +See the description of the +.B sty +request for more information on font families. +. +.TP +.BI .fchar\ c\ string +Define fallback character (or glyph)\~\c +.I c +to be +.IR string . +. +The syntax of this request is the same as the +.B char +request; the only difference is that a glyph defined with +.B char +hides the glyph with the same name in the current font, whereas a +glyph defined with +.B fchar +is checked only if the particular glyph isn't found in the current +font. +. +This test happens before checking special fonts. +. +.TP +.BI .fcolor\ c +Set the fill color to\~\c +.IR c . +If +.I c +is missing, +switch to the previous fill color. +. +.TP +.BI .fschar\ f\ c\ string +Define fallback character (or glyph)\~\c +.I c +for font\~\c +.I f +to be +.IR string . +. +The syntax of this request is the same as the +.B char +request (with an additional argument to specify the font); a glyph +defined with +.B fschar +is searched after the list of fonts declared with the +.B fspecial +request but before the list of fonts declared with +.BR .special . +. +.TP +.BI .fspecial\ "f s1 s2 \*[ellipsis]" +When the current font is\~\c +.IR f , +fonts +.IR s1 , +.IR s2 , +.IR \*[ellipsis] , +are special, that is, they are searched for glyphs not in +the current font. +. +Any fonts specified in the +.B special +request are searched after fonts specified in the +.B fspecial +request. +. +Without argument, reset the list of global special fonts to be empty. +. +.TP +.BI .ftr\ f\ g +Translate font\~\c +.I f +to\~\c +.IR g . +Whenever a font named\~\c +.I f +is referred to in an +.B \[rs]f +escape sequence, in the +.B F +and +.B S +conditional operators, or in the +.BR ft , +.BR ul , +.BR bd , +.BR cs , +.BR tkf , +.BR special , +.BR fspecial , +.BR fp , +or +.B sty +requests, font\~\c +.I g +is used. +If +.I g +is missing, or equal to\~\c +.I f +then font\~\c +.I f +is not translated. +. +.TP +.BI .fzoom\ f\ zoom +Set zoom factor +.I zoom +for font\~\c +.IR f . +.I zoom +must a non-negative integer multiple of 1/1000th. +If it is missing or is equal to zero, it means the same as 1000, namely +no magnification. +.IR f \~\c +must be a real font name, not a style. +. +.TP +.BI .gcolor\ c +Set the glyph color to\~\c +.IR c . +If +.I c +is missing, +switch to the previous glyph color. +. +.TP +.BI .hcode\ "c1 code1 c2 code2 \*[ellipsis]" +Set the hyphenation code of character +.I c1 +to +.I code1 +and that of +.I c2 +to +.IR code2 , +and so on. +A hyphenation code must be a single input character (not a special +character) other than a digit or a space. +. +Initially each lower-case letter \%a\[en]z has a hyphenation code, which +is itself, and each upper-case letter \%A\[en]Z has a hyphenation code +which is the lower-case version of itself. +. +See also the +.B hpf +request. +. +.TP +.BI .hla\ lang +Set the current hyphenation language to +.IR lang . +Hyphenation exceptions specified with the +.B hw +request and hyphenation patterns specified with the +.B hpf +request are both associated with the current hyphenation language. +. +The +.B hla +request is usually invoked by the +.B troffrc +file to set up a default language. +. +.TP +.BI .hlm\ n +Set the maximum number of consecutive hyphenated lines to\~\c +.IR n . +If +.I n +is negative, there is no maximum. +. +The default value is\~\-1. +. +This value is associated with the current environment. +. +Only lines output from an environment count towards the maximum +associated with that environment. +. +Hyphens resulting from +.B \[rs]% +are counted; explicit hyphens are not. +. +.TP +.BI .hpf\ file +Read hyphenation patterns from +.IR file ; +this is searched for in the same way that +.IB name .tmac +is searched for when the +.BI \-m name +option is specified. +. +It should have the same format as (simple) \*[tx] patterns files. +. +More specifically, the following scanning rules are implemented. +. +.RS +.IP \[bu] +A percent sign starts a comment (up to the end of the line) even if +preceded by a backslash. +. +.IP \[bu] +No support for \[oq]digraphs\[cq] like +.BR \[rs]$ . +. +.IP \[bu] +.BI ^^ xx +.RI ( x +is 0\[en]9 or a\[en]f) and +.BI ^^ x +(character code of\~\c +.I x +in the range 0\[en]127) are recognized; other use of\~\c +.B ^ +causes an error. +. +.IP \[bu] +No macro expansion. +. +.IP \[bu] +.B hpf +checks for the expression +.BR \[rs]patterns{ \*[ellipsis] } +(possibly with whitespace before and after the braces). +. +Everything between the braces is taken as hyphenation patterns. +. +Consequently, +.BR { \~\c +and\~\c +.B } +are not allowed in patterns. +. +.IP \[bu] +Similarly, +.BR \[rs]hyphenation{ \*[ellipsis] } +gives a list of hyphenation exceptions. +. +.IP \[bu] +.B \[rs]endinput +is recognized also. +. +.IP \[bu] +For backwards compatibility, if +.B \[rs]patterns +is missing, the whole file is treated as a list of hyphenation patterns +(only recognizing the +.BR % \~\c +character as the start of a comment). +.RE +. +.IP +Use the +.B hpfcode +request to map the encoding used in hyphenation patterns files to +.BR groff 's +input encoding. +. +By default, everything maps to itself except letters \[oq]A\[cq] to +\[oq]Z\[cq] which map to \[oq]a\[cq] to \[oq]z\[cq]. +. +.IP +The set of hyphenation patterns is associated with the current language +set by the +.B hla +request. +. +The +.B hpf +request is usually invoked by the +.B troffrc +file; a second call replaces the old patterns with the new ones. +. +.TP +.BI .hpfa\ file +The same as +.B hpf +except that the hyphenation patterns from +.I file +are appended to the patterns already loaded in the current language. +. +.TP +.BI .hpfcode\ "a b c d \*[ellipsis]" +After reading a hyphenation patterns file with the +.B hpf +or +.B hpfa +request, convert all characters with character code\~\c +.I a +in the recently read patterns to character code\~\c +.IR b , +character code\~\c +.I c +to\~\c +.IR d , +etc. +. +Initially, all character codes map to themselves. +. +The arguments of +.B hpfcode +must be integers in the range 0 to\~255. +. +Note that it is even possible to use character codes which are invalid +in +.B groff +otherwise. +. +.TP +.BI .hym\ n +Set the +.I hyphenation margin +to\~\c +.IR n : +when the current adjustment mode is not\~\c +.BR b , +the line is not hyphenated if the line is no more than +.I n +short. +. +The default hyphenation margin is\~0. +. +The default scaling indicator for this request is\~\c +.BR m . +The hyphenation margin is associated with the current environment. +. +The current hyphenation margin is available in the +.B \[rs]n[.hym] +register. +. +.TP +.BI .hys\ n +Set the +.I hyphenation space +to\~\c +.IR n : +When the current adjustment mode is\~\c +.B b +don't hyphenate the line if the line can be justified by adding no +more than +.I n +extra space to each word space. +. +The default hyphenation space is\~0. +. +The default scaling indicator for this request is\~\c +.BR m . +The hyphenation space is associated with the current environment. +. +The current hyphenation space is available in the +.B \[rs]n[.hys] +register. +. +.TP +.BI .itc\ n\ macro +Variant of +.B .it +for which a line interrupted with +.B \[rs]c +is not counted as an input line. +. +.TP +.BI .kern\ n +If +.I n +is non-zero or missing, enable pairwise kerning, otherwise disable it. +. +.TP +.BI .length\ xx\ string +Compute the length of +.I string +and return it in the number register +.I xx +(which is not necessarily defined before). +. +.TP +.BI .linetabs\ n +If +.I n +is non-zero or missing, enable line-tabs mode, otherwise disable it +(which is the default). +. +In line-tabs mode, tab distances are computed relative to the +(current) output line. +. +Otherwise they are taken relative to the input line. +. +For example, the following +. +.RS +.IP +.ne 6v+\n(.Vu +.EX +\&.ds x a\[rs]t\[rs]c +\&.ds y b\[rs]t\[rs]c +\&.ds z c +\&.ta 1i 3i +\&\[rs]*x +\&\[rs]*y +\&\[rs]*z +.EE +.RE +. +.IP +yields +. +.RS +.IP +.EX +a b c +.EE +.RE +. +.IP +In line-tabs mode, the same code gives +. +.RS +.IP +.EX +a b c +.EE +.RE +. +.IP +Line-tabs mode is associated with the current environment; the +read-only number register +.B \[rs]n[.linetabs] +is set to\~1 if in line-tabs mode, and 0 otherwise. +. +.TP +.BI .lsm\ xx +Set the leading spaces macro to +.IR xx . +If there are leading spaces in an input line, it is invoked instead of +the usual troff behaviour; the leading spaces are removed. +Registers +.B \[rs]n[lsn] +and +.B \[rs]n[lss] +hold the number of removed leading spaces and the corresponding +horizontal space, respectively. +. +.TP +.BI .mso\ file +The same as the +.B so +request except that +.I file +is searched for in the same directories as macro files for the +.B \-m +command-line option. +. +If the file name to be included has the form +.IB name .tmac +and it isn't found, +.B mso +tries to include +.BI tmac. name +instead and vice versa. +. +A warning of type +.B file +is generated if +.I file +can't be loaded, and the request is ignored. +. +.TP +.BI .nop \ anything +Execute +.IR anything . +This is similar to \[oq].if\ 1\[cq]. +. +.TP +.B .nroff +Make the +.B n +built-in condition true and the +.B t +built-in condition false. +. +This can be reversed using the +.B troff +request. +. +.TP +.BI .open\ stream\ filename +Open +.I filename +for writing and associate the stream named +.I stream +with it. +. +See also the +.B close +and +.B write +requests. +. +.TP +.BI .opena\ stream\ filename +Like +.BR open , +but if +.I filename +exists, append to it instead of truncating it. +. +.TP +.BI .output\ string +Emit +.I string +directly to the intermediate output (subject to copy-mode +interpretation); +this is similar to +.B \[rs]!\& +used at the top level. +. +An initial double quote in +.I string +is stripped off to allow initial blanks. +. +.TP +.B .pev +Print the current environment and each defined environment state on +stderr. +. +.TP +.B .pnr +Print the names and contents of all currently defined number registers +on stderr. +. +.TP +.BI .psbb \ filename +Get the bounding box of a PostScript image +.IR filename . +. +This file must conform to Adobe's Document Structuring +Conventions; the command looks for a +.B \%%%BoundingBox +comment to extract the bounding box values. +. +After a successful call, the coordinates (in PostScript units) of the +lower left and upper right corner can be found in the registers +.BR \[rs]n[llx] , +.BR \[rs]n[lly] , +.BR \[rs]n[urx] , +and +.BR \[rs]n[ury] , +respectively. +. +If some error has occurred, the four registers are set to zero. +. +.TP +.BI .pso \ command +This behaves like the +.B so +request except that input comes from the standard output of +.IR command . +. +.TP +.B .ptr +Print the names and positions of all traps (not including input line +traps and diversion traps) on stderr. +. +Empty slots in the page trap list are printed as well, because they +can affect the priority of subsequently planted traps. +. +.TP +.BI .pvs \ \[+-]n +Set the post-vertical line space to\~\c +.IR n ; +default scale indicator is\~\c +.BR p . +. +This value is added to each line after it has been output. +. +With no argument, the post-vertical line space is set to its previous +value. +. +.IP +The total vertical line spacing consists of four components: +.B .vs +and +.B \[rs]x +with a negative value which are applied before the line is output, and +.B .pvs +and +.B \[rs]x +with a positive value which are applied after the line is output. +. +.TP +.BI .rchar\ "c1 c2 \*[ellipsis]" +Remove the definitions of glyphs +.IR c1 , +.IR c2 , +.I \*[ellipsis]\ \"Add a sentence space +This undoes the effect of a +.B char +request. +. +.TP +.B .return +Within a macro, return immediately. +. +If called with an argument, return twice, namely from the current macro +and from the macro one level higher. +. +No effect otherwise. +. +.TP +.BI .rfschar\ "c1 c2 \*[ellipsis]" +Remove the font-specific definitions of glyphs +.IR c1 , +.IR c2 , +.I \*[ellipsis]\ \"Add a sentence space +This undoes the effect of an +.B fschar +request. +. +.TP +.B .rj +.TQ +.BI .rj \~n +Right justify the next +.IR n \~\c +input lines. +. +Without an argument right justify the next input line. +. +The number of lines to be right justified is available in the +.B \[rs]n[.rj] +register. +. +This implicitly does +.BR .ce\~0 . +The +.B ce +request implicitly does +.BR .rj\~0 . +. +.TP +.BI .rnn \ xx\ yy +Rename number register +.I xx +to +.IR yy . +. +.TP +.BI .schar\ c\ string +Define global fallback character (or glyph)\~\c +.I c +to be +.IR string . +. +The syntax of this request is the same as the +.B char +request; a glyph defined with +.B schar +is searched after the list of fonts declared with the +.B special +request but before the mounted special fonts. +. +.TP +.BI .shc\ c +Set the soft hyphen character to\~\c +.IR c . +If +.I c +is omitted, the soft hyphen character is set to the default +.BR \[rs][hy] . +The soft hyphen character is the glyph which is inserted when +a word is hyphenated at a line break. +. +If the soft hyphen character does not exist in the font of the +glyph immediately preceding a potential break point, then the line +is not broken at that point. +. +Neither definitions (specified with the +.B char +request) nor translations (specified with the +.B tr +request) are considered when finding the soft hyphen character. +. +.TP +.BI .shift\ n +In a macro, shift the arguments by +.I n +positions: argument\~\c +.I i +becomes argument +.IR i \|\-\| n ; +arguments 1 to\~\c +.I n +are no longer available. +. +If +.I n +is missing, arguments are shifted by\~1. +. +Shifting by negative amounts is currently undefined. +. +.TP +.BI .sizes\ s1\ s2\ \*[ellipsis]\ sn\ [0] +This command is similar to the +.B sizes +command of a +.I DESC +file. +. +It sets the available font sizes for the current font to +.IR s1 , +.IR s2 , +.IR \*[ellipsis]\| ,\~ sn +scaled points. +. +The list of sizes can be terminated by an optional\~\c +.BR 0 . +. +Each +.I si +can also be a range of sizes +.IR m \(en n . +. +Contrary to the font file command, the list can't extend over more +than a single line. +. +.TP +.BI .special\ "s1 s2 \*[ellipsis]" +Fonts +.IR s1 , +.IR s2 , +.IR \*[ellipsis] , +are special and are searched for glyphs not in the current +font. +. +Without arguments, reset the list of special fonts to be empty. +. +.TP +.BI .spreadwarn\ limit +Make +.B troff +emit a warning if the additional space inserted for each space between +words in an output line is larger or equal to +.IR limit . +. +A negative value is changed to zero; no argument toggles the warning on +and off without changing +.IR limit . +. +The default scaling indicator is\~\c +.BR m . +. +At startup, +.B spreadwarn +is deactivated, and +.I limit +is set to 3m. +. +For example, +.B .spreadwarn\ 0.2m +causes a warning if +.B troff +must add 0.2m or more for each interword space in a line. +. +This request is active only if text is justified to both margins (using +.BR .ad\ b ). +. +.TP +.BI .sty\ n\ f +Associate style\~\c +.I f +with font position\~\c +.IR n . +A font position can be associated either with a font or with a style. +. +The current font is the index of a font position and so is also either +a font or a style. +. +When it is a style, the font that is actually used is the font the +name of which is the concatenation of the name of the current family +and the name of the current style. +. +For example, if the current font is\~1 and font position\~1 is +associated with style\~\c +.B R +and the current font family is\~\c +.BR T , +then font +.B TR +is used. +. +If the current font is not a style, then the current family is ignored. +. +When the requests +.BR cs , +.BR bd , +.BR tkf , +.BR uf , +or +.B fspecial +are applied to a style, then they are applied instead to the +member of the current family corresponding to that style. +. +The default family can be set with the +.B \-f +command-line option. +. +The +.B styles +command in the +DESC +file controls which font positions (if any) are initially associated +with styles rather than fonts. +. +.TP +.BI .substring\ xx\ n1\ [ n2 ] +Replace the string named +.I xx +with the substring defined by the indices +.I n1 +and +.IR n2 . +The first character in the string has index\~0. +. +If +.I n2 +is omitted, it is taken to be equal to the string's length. +. +If the index value +.I n1 +or +.I n2 +is negative, it is counted from the end of the string, +going backwards: +. +The last character has index\~\-1, the character before the last +character has index\~\-2, etc. +. +.TP +.BI .tkf\ f\ s1\ n1\ s2\ n2 +Enable track kerning for font\~\c +.IR f . +When the current font is\~\c +.I f +the width of every glyph is increased by an amount between +.I n1 +and +.IR n2 ; +when the current point size is less than or equal to +.I s1 +the width is increased by +.IR n1 ; +when it is greater than or equal to +.I s2 +the width is increased by +.IR n2 ; +when the point size is greater than or equal to +.I s1 +and less than or equal to +.I s2 +the increase in width is a linear function of the point size. +. +.TP +.BI .tm1\ string +Similar to the +.B tm +request, +.I string +is read in copy mode and written on the standard error, but an initial +double quote in +.I string +is stripped off to allow initial blanks. +. +.TP +.BI .tmc\ string +Similar to +.B tm1 +but without writing a final newline. +. +.TP +.BI .trf\ filename +Transparently output the contents of file +.IR filename . +Each line is output as if preceded by +.BR \[rs]! ; +however, the lines are not subject to copy-mode interpretation. +. +If the file does not end with a newline, then a newline is added. +. +For example, you can define a macro\~\c +.I x +containing the contents of file\~\c +.IR f , +using +. +.RS +.IP +.ne 2v+\n(.Vu +.EX +\&.di x +\&.trf f +\&.di +.EE +.RE +. +.IP +Unlike with the +.B cf +request, the file cannot contain characters, such as NUL, +that are not valid troff input characters. +. +.TP +.BI .trin\ abcd +This is the same as the +.B tr +request except that the +.B asciify +request uses the character code (if any) before the character +translation. +. +Example: +. +.RS +.IP +.EX +\&.trin ax +\&.di xxx +\&a +\&.br +\&.di +\&.xxx +\&.trin aa +\&.asciify xxx +\&.xxx +.EE +.RE +. +.IP +The result is +.BR x\ a . +. +Using +.BR tr , +the result would be +.BR x\ x . +. +.TP +.BI .trnt\ abcd +This is the same as the +.B tr +request except that the translations do not apply to text that is +transparently throughput into a diversion with +.BR \[rs]! . +For example, +. +.RS +.IP +.EX +\&.tr ab +\&.di x +\&\[rs]!.tm a +\&.di +\&.x +.EE +.RE +. +.IP +prints\~\c +.BR b ; +if +.B trnt +is used instead of +.B tr +it prints\~\c +.BR a . +.RE +. +.TP +.B .troff +Make the +.B n +built-in condition false, and the +.B t +built-in condition true. +. +This undoes the effect of the +.B nroff +request. +. +.TP +.BI .unformat\ xx +This request \[oq]unformats\[cq] the diversion +.IR xx . +. +Contrary to the +.B asciify +request, which tries to convert formatted elements of the diversion +back to input tokens as much as possible, +.B .unformat +only handles tabs and spaces between words (usually caused by spaces +or newlines in the input) specially. +. +The former are treated as if they were input tokens, and the latter +are stretchable again. +. +Note that the vertical size of lines is not preserved. +. +Glyph information (font, font size, space width, etc.) is retained. +. +Useful in conjunction with the +.B box +and +.B boxa +requests. +. +.TP +.BI .vpt\ n +Enable vertical position traps if +.I n +is non-zero, disable them otherwise. +. +Vertical position traps are traps set by the +.B wh +or +.B dt +requests. +. +Traps set by the +.B it +request are not vertical position traps. +. +The parameter that controls whether vertical position traps are +enabled is global. +. +Initially vertical position traps are enabled. +. +.TP +.BI .warn\ n +Control warnings. +.IR n \~\c +is the sum of the numbers associated with each warning that is to be +enabled; all other warnings are disabled. +. +The number associated with each warning is listed in +.BR troff (1). +. +For example, +.B .warn\~0 +disables all warnings, and +.B .warn\~1 +disables all warnings except that about missing glyphs. +. +If +.I n +is not given, all warnings are enabled. +. +.TP +.BI .warnscale\ si +Set the scaling indicator used in warnings to +.IR si . +. +Valid values for +.I si +are +.BR u , +.BR i , +.BR c , +.BR p , +and\~\c +.BR P . +. +At startup, it is set to\~\c +.BR i . +. +.TP +.BI .while \ c\ anything +While condition\~\c +.I c +is true, accept +.I anything +as input; +.IR c \~\c +can be any condition acceptable to an +.B if +request; +.I anything +can comprise multiple lines if the first line starts with +.B \[rs]{ +and the last line ends with +.BR \[rs]} . +See also the +.B break +and +.B continue +requests. +. +.TP +.BI .write\ stream\ anything +Write +.I anything +to the stream named +.IR stream . +.I stream +must previously have been the subject of an +.B open +request. +.I anything +is read in copy mode; +a leading\~\c +.B \[dq] +is stripped. +. +.TP +.BI .writec\ stream\ anything +Similar to +.B write +but without writing a final newline. +. +.TP +.BI .writem\ stream\ xx +Write the contents of the macro or string +.I xx +to the stream named +.IR stream . +.I stream +must previously have been the subject of an +.B open +request. +.I xx +is read in copy mode. +. +. +.\" ==================================================================== +.SS "Extended escape sequences" +.\" ==================================================================== +. +.TP +.BR \[rs]D' \*[ellipsis] ' +All drawing commands of groff's intermediate output are accepted. +. +See subsection \[lq]Drawing Commands\[rq] below. +. +. +.\" ==================================================================== +.SS "Extended requests" +.\" ==================================================================== +. +.TP +.BI .cf\ filename +When used in a diversion, this embeds in the diversion an object +which, when reread, will cause the contents of +.I filename +to be transparently copied through to the output. +. +In Unix troff, the contents of +.I filename +is immediately copied through to the output regardless of whether +there is a current diversion; this behaviour is so anomalous that it +must be considered a bug. +. +.TP +.BI .de\ xx\ yy +.TQ +.BI .am\ xx\ yy +.TQ +.BI .ds\ xx\ yy +.TQ +.BI .as\ xx\ yy +In compatibility mode, these requests behaves similar to +.BR .de1 , +.BR .am1 , +.BR .ds1 , +and +.BR .as1 , +respectively: A \[oq]compatibility save\[cq] token is inserted at the +beginning, and a \[oq]compatibility restore\[cq] token at the end, +with compatibility mode switched on during execution. +. +.TP +.BI .ev\ xx +If +.I xx +is not a number, this switches to a named environment called +.IR xx . +The environment should be popped with a matching +.B ev +request without any arguments, just as for numbered environments. +. +There is no limit on the number of named environments; they are +created the first time that they are referenced. +. +.TP +.BI .hy\ n +New additive values 16 and\~32 are available; the former enables +hyphenation before the last character, the latter enables hyphenation +after the first character. +. +.TP +.BI .ss\ m\ n +When two arguments are given to the +.B ss +request, the second argument gives the +.IR "sentence space size" . +If the second argument is not given, the sentence space size +is the same as the word space size. +. +Like the word space size, the sentence space is in units of +one twelfth of the spacewidth parameter for the current font. +. +Initially both the word space size and the sentence +space size are\~12. +. +Contrary to Unix troff, GNU troff handles this request in nroff mode +also; a given value is then rounded down to the nearest multiple +of\~12. +. +The sentence space size is used in two circumstances. +. +If the end of a sentence occurs at the end of a line in fill mode, +then both an inter-word space and a sentence space are added; if +two spaces follow the end of a sentence in the middle of a line, then +the second space is a sentence space. +. +Note that the behaviour of Unix troff is exactly that exhibited +by GNU troff if a second argument is never given to the +.B ss +request. +. +In GNU troff, as in Unix troff, you should always follow a sentence +with either a newline or two spaces. +. +.TP +.BI .ta\ "n1 n2 \*[ellipsis] nn " "T " "r1 r2 \*[ellipsis] rn" +Set tabs at positions +.IR n1 , +.IR n2 , +.IR \*[ellipsis] , +.I nn +and then set tabs at +.IR nn \|+\| r1 , +.IR nn \|+\| r2 , +.IR \*[ellipsis] , +.IR nn \|+\| rn +and then at +.IR nn \|+\| rn \|+\| r1 , +.IR nn \|+\| rn \|+\| r2 , +.IR \*[ellipsis] , +.IR nn \|+\| rn \|+\| rn , +and so on. +For example, +. +.RS +.IP +.EX +\&.ta T .5i +.EE +. +.P +sets tabs every half an inch. +.RE +. +. +.\" ==================================================================== +.SS "New number registers" +.\" ==================================================================== +. +The following read-only registers are available: +. +.TP +.B \[rs]n[.br] +Within a macro call, it is set to\~1 if the macro is called with the +\[oq]normal\[cq] control character (\[oq].\[cq] by default), and set +to\~0 otherwise. +. +This allows the reliable modification of requests. +. +.RS +.IP +.ne 6v+\n(.Vu +.EX +\&.als bp*orig bp +\&.de bp +\&.tm before bp +\&.ie \[rs]\[rs]n[.br] .bp*orig +\&.el 'bp*orig +\&.tm after bp +\&.. +.EE +.RE +. +.IP +Using this register outside of a macro makes no sense (it always returns +zero in such cases). +. +.TP +.B \[rs]n[.C] +1\~if compatibility mode is in effect, 0\~otherwise. +. +.TP +.B \[rs]n[.cdp] +The depth of the last glyph added to the current environment. +. +It is positive if the glyph extends below the baseline. +. +.TP +.B \[rs]n[.ce] +The number of lines remaining to be centered, as set by the +.B ce +request. +. +.TP +.B \[rs]n[.cht] +The height of the last glyph added to the current environment. +. +It is positive if the glyph extends above the baseline. +. +.TP +.B \[rs]n[.color] +1\~if colors are enabled, 0\~otherwise. +. +.TP +.B \[rs]n[.csk] +The skew of the last glyph added to the current environment. +. +The +.I skew +of a glyph is how far to the right of the center of a glyph +the center of an accent over that glyph should be placed. +. +.TP +.B \[rs]n[.ev] +The name or number of the current environment. +. +This is a string-valued register. +. +.TP +.B \[rs]n[.fam] +The current font family. +. +This is a string-valued register. +. +.TP +.B \[rs]n[.fn] +The current (internal) real font name. +. +This is a string-valued register. +. +If the current font is a style, the value of +.B \[rs]n[.fn] +is the proper concatenation of family and style name. +. +.TP +.B \[rs]n[.fp] +The number of the next free font position. +. +.TP +.B \[rs]n[.g] +Always\~1. +. +Macros should use this to determine whether they are running under GNU +troff. +. +.TP +.B \[rs]n[.height] +The current height of the font as set with +.BR \[rs]H . +. +.TP +.B \[rs]n[.hla] +The current hyphenation language as set by the +.B hla +request. +. +.TP +.B \[rs]n[.hlc] +The number of immediately preceding consecutive hyphenated lines. +. +.TP +.B \[rs]n[.hlm] +The maximum allowed number of consecutive hyphenated lines, as set by +the +.B hlm +request. +. +.TP +.B \[rs]n[.hy] +The current hyphenation flags (as set by the +.B hy +request). +. +.TP +.B \[rs]n[.hym] +The current hyphenation margin (as set by the +.B hym +request). +. +.TP +.B \[rs]n[.hys] +The current hyphenation space (as set by the +.B hys +request). +. +.TP +.B \[rs]n[.in] +The indentation that applies to the current output line. +. +.TP +.B \[rs]n[.int] +Set to a positive value if last output line is interrupted (i.e., if +it contains +.BR \[rs]c ). +. +.TP +.B \[rs]n[.kern] +1\~if pairwise kerning is enabled, 0\~otherwise. +. +.TP +.B \[rs]n[.lg] +The current ligature mode (as set by the +.B lg +request). +. +.TP +.B \[rs]n[.linetabs] +The current line-tabs mode (as set by the +.B linetabs +request). +. +.TP +.B \[rs]n[.ll] +The line length that applies to the current output line. +. +.TP +.B \[rs]n[.lt] +The title length as set by the +.B lt +request. +. +.TP +.B \[rs]n[.m] +The name of the current drawing color. +. +This is a string-valued register. +. +.TP +.B \[rs]n[.M] +The name of the current background color. +. +This is a string-valued register. +. +.TP +.B \[rs]n[.ne] +The amount of space that was needed in the last +.B ne +request that caused a trap to be sprung. +. +Useful in conjunction with the +.B \[rs]n[.trunc] +register. +. +.TP +.B \[rs]n[.ns] +1\~if no-space mode is active, 0\~otherwise. +. +.TP +.B \[rs]n[.O] +The current output level as set with +.BR \[rs]O . +. +.TP +.B \[rs]n[.P] +1\~if the current page is in the output list set with +.BR \-o . +. +.TP +.B \[rs]n[.pe] +1\~during a page ejection caused by the +.B bp +request, 0\~otherwise. +. +.TP +.B \[rs]n[.pn] +The number of the next page, either the value set by a +.B pn +request, or the number of the current page plus\~1. +. +.TP +.B \[rs]n[.ps] +The current point size in scaled points. +. +.TP +.B \[rs]n[.psr] +The last-requested point size in scaled points. +. +.TP +.B \[rs]n[.pvs] +The current post-vertical line space as set with the +.B pvs +request. +. +.TP +.B \[rs]n[.rj] +The number of lines to be right-justified as set by the +.B rj +request. +. +.TP +.B \[rs]n[.slant] +The slant of the current font as set with +.BR \[rs]S . +. +.TP +.B \[rs]n[.sr] +The last requested point size in points as a decimal fraction. +. +This is a string-valued register. +. +.TP +.B \[rs]n[.ss] +.TQ +.B \[rs]n[.sss] +These give the values of the parameters set by the first and second +arguments of the +.B ss +request. +. +.TP +.B \[rs]n[.sty] +The current font style. +. +This is a string-valued register. +. +.TP +.B \[rs]n[.tabs] +A string representation of the current tab settings suitable for use +as an argument to the +.B ta +request. +. +.TP +.B \[rs]n[.trunc] +The amount of vertical space truncated by the most recently sprung +vertical position trap, or, if the trap was sprung by an +.B ne +request, minus the amount of vertical motion produced by the +.B ne +request. +. +In other words, at the point a trap is sprung, it represents the +difference of what the vertical position would have been but for the +trap, and what the vertical position actually is. +. +Useful in conjunction with the +.B \[rs]n[.ne] +register. +. +.TP +.B \[rs]n[.U] +Set to\~1 if in safer mode and to\~0 if in unsafe mode (as given with +the +.B \-U +command-line option). +. +.TP +.B \[rs]n[.vpt] +1\~if vertical position traps are enabled, 0\~otherwise. +. +.TP +.B \[rs]n[.warn] +The sum of the numbers associated with each of the currently enabled +warnings. +. +The number associated with each warning is listed in +.BR troff (1). +. +.TP +.B \[rs]n[.x] +The major version number. +. +For example, if the version number is 1.03, then +.B \[rs]n[.x] +contains\~1. +. +.TP +.B \[rs]n[.y] +The minor version number. +. +For example, if the version number is 1.03, then +.B \[rs]n[.y] +contains\~03. +. +.TP +.B \[rs]n[.Y] +The revision number of groff. +. +.TP +.B \[rs]n[.zoom] +The zoom value of the current font, in multiples of 1/1000th. +Zero if no magnification. +. +.TP +.B \[rs]n[llx] +.TQ +.B \[rs]n[lly] +.TQ +.B \[rs]n[urx] +.TQ +.B \[rs]n[ury] +These four read/\:write registers are set by the +.B psbb +request and contain the bounding box values (in PostScript units) of a +given PostScript image. +. +.P +The following read/\:write registers are set by the +.B \[rs]w +escape sequence: +. +.TP +.B \[rs]n[rst] +.TQ +.B \[rs]n[rsb] +Like the +.B st +and +.B sb +registers, but take account of the heights and depths of glyphs. +. +.TP +.B \[rs]n[ssc] +The amount of horizontal space (possibly negative) that should be +added to the last glyph before a subscript. +. +.TP +.B \[rs]n[skw] +How far to right of the center of the last glyph in the +.B \[rs]w +argument, the center of an accent from a roman font should be placed +over that glyph. +. +.P +Other available read/write number registers are: +. +.TP +.B \[rs]n[c.] +The current input line number. +.B \[rs]n[.c] +is a read-only alias to this register. +. +.TP +.B \[rs]n[hours] +The number of hours past midnight. +. +Initialized at start-up. +. +.TP +.B \[rs]n[hp] +The current horizontal position at input line. +. +.TP +.B \[rs]n[lsn] +.TQ +.B \[rs]n[lss] +If there are leading spaces in an input line, these registers +hold the number of leading spaces and the corresponding +horizontal space, respectively. +. +.TP +.B \[rs]n[minutes] +The number of minutes after the hour. +. +Initialized at start-up. +. +.TP +.B \[rs]n[seconds] +The number of seconds after the minute. +. +Initialized at start-up. +. +.TP +.B \[rs]n[systat] +The return value of the system() function executed by the last +.B sy +request. +. +.TP +.B \[rs]n[slimit] +If greater than\~0, the maximum number of objects on the input stack. +. +If less than or equal to\~0, there is no limit on the number of +objects on the input stack. +. +With no limit, recursion can continue until virtual memory is +exhausted. +. +.TP +.B \[rs]n[year] +The current year. +. +Note that the traditional +.B troff +number register +.B \[rs]n[yr] +is the current year minus 1900. +. +. +.\" ==================================================================== +.SS Miscellaneous +.\" ==================================================================== +. +.B troff +predefines a single (read/write) string-based register, +.BR \[rs]*[.T] , +which contains the argument given to the +.B \-T +command-line option, namely the current output device (for example, +.I latin1 +or +.IR ascii ). +Note that this is not the same as the (read-only) number register +.B \[rs]n[.T] +which is defined to be\~1 if +.B troff +is called with the +.B \-T +command-line option, and zero otherwise. +. +This behaviour is different from Unix troff. +. +.P +Fonts not listed in the +DESC +file are automatically mounted on the next available font position +when they are referenced. +. +If a font is to be mounted explicitly with the +.B fp +request on an unused font position, it should be mounted on the first +unused font position, which can be found in the +.B \[rs]n[.fp] +register; although +.B troff +does not enforce this strictly, it does not allow a font to be mounted +at a position whose number is much greater than that of any currently +used position. +. +.P +Interpolating a string does not hide existing macro arguments. +. +Thus in a macro, a more efficient way of doing +. +.IP +.BI . xx\ \[rs]\[rs]$@ +.P +is +. +.IP +.BI \[rs]\[rs]*[ xx ]\[rs]\[rs] +. +.P +If the font description file contains pairwise kerning information, +glyphs from that font are kerned. +. +Kerning between two glyphs can be inhibited by placing a +.B \[rs]& +between them. +. +.P +In a string comparison in a condition, characters that appear at +different input levels to the first delimiter character are not +recognized as the second or third delimiters. +. +This applies also to the +.B tl +request. +. +In a +.B \[rs]w +escape sequence, a character that appears at a different input level +to the starting delimiter character is not recognized as the +closing delimiter character. +. +The same is true for +.BR \[rs]A , +.BR \[rs]b , +.BR \[rs]B , +.BR \[rs]C , +.BR \[rs]l , +.BR \[rs]L , +.BR \[rs]o , +.BR \[rs]X , +and +.BR \[rs]Z . +. +When decoding a macro or string argument that is delimited by double +quotes, a character that appears at a different input level to the +starting delimiter character is not recognized as the closing delimiter +character. +. +The implementation of +.B \[rs]$@ +ensures that the double quotes surrounding an argument appear at the +same input level, which is different to the input level of the +argument itself. +. +In a long escape name +.B ] +is not recognized as a closing delimiter except when it occurs at +the same input level as the opening\~\c +.BR [ . +. +In compatibility mode, no attention is paid to the input-level. +. +.P +There are some new types of condition: +. +.TP +.BI .if\ r xxx +True if there is a number register named +.IR xxx . +. +.TP +.BI .if\ d xxx +True if there is a string, macro, diversion, or request named +.IR xxx . +. +.TP +.BI .if\ m xxx +True if there is a color named +.IR xxx . +. +.TP +.BI .if\ c ch +True if there is a character (or glyph) +.I ch +available; +.I ch +is either an ASCII character or a glyph (special character) +.BI \[rs]N' xxx '\f[R], +.BI \[rs]( xx +or +.BI \[rs][ xxx ]\f[R]; +the condition is also true if +.I ch +has been defined by the +.B char +request. +. +.TP +.BI .if\ F f +True if font\~\c +.I f +exists. +. +.BR f \~\c +is handled as if it was opened with the +.B ft +request (this is, font translation and styles are applied), without +actually mounting it. +. +.TP +.BI .if\ S s +True if style\~\c +.I s +has been registered. +. +Font translation is applied. +. +.P +The +.B tr +request can now map characters onto +.BR \[rs]\[ti] . +. +.P +The space width emitted by the +.B \[rs]| +and +.B \[rs]^ +escape sequences can be controlled on a per-font basis. +If there is a glyph named +.B \[rs]| +or +.BR \[rs]^ , +respectively (note the leading backslash), defined in the current font +file, use this glyph's width instead of the default value. +. +.P +It is now possible to have whitespace between the first and second dot +(or the name of the ending macro) to end a macro definition. +. +Example: +. +.IP +.ne 6v+\n(.Vu +.EX +\&.if t \[rs]{\[rs] +\&. de bar +\&. nop Hello, I'm \[oq]bar\[cq]. +\&. . +\&.\[rs]} +.EE +. +. +.\" ==================================================================== +.SH "INTERMEDIATE OUTPUT FORMAT" +.\" ==================================================================== +. +This section describes the format output by GNU troff. +. +The output format used by GNU troff is very similar to that used +by Unix device-independent troff. +. +Only the differences are documented here. +. +. +.\" ==================================================================== +.SS "Units" +.\" ==================================================================== +. +The argument to the +.BR s \~\c +command is in scaled points (units of +.RI points/ n , +where +.I n +is the argument to the +.B sizescale +command in the DESC file). +. +The argument to the +.B x\ Height +command is also in scaled points. +. +. +.\" ==================================================================== +.SS "Text Commands" +.\" ==================================================================== +. +.TP +.BI N n +Print glyph with index\~\c +.I n +(a non-negative integer) of the current font. +. +.P +If the +.B tcommand +line is present in the DESC file, troff uses the following two +commands. +. +.TP +.BI t xxx +.I xxx +is any sequence of characters terminated by a space or a newline (to +be more precise, it is a sequence of glyphs which are accessed with +the corresponding characters); the first character should be printed at +the current position, the current horizontal position should be +increased by the width of the first character, and so on for each +character. +. +The width of the glyph is that given in the font file, +appropriately scaled for the current point size, and rounded so that +it is a multiple of the horizontal resolution. +. +Special characters cannot be printed using this command. +. +.TP +.BI u n\ xxx +This is same as the +.BR t \~\c +command except that after printing each character, the current +horizontal position is increased by the sum of the width of that +character and\~\c +.IR n . +. +.P +Note that single characters can have the eighth bit set, as can the +names of fonts and special characters. +. +.P +The names of glyphs and fonts can be of arbitrary length; drivers +should not assume that they are only two characters long. +. +.P +When a glyph is to be printed, that glyph is always +in the current font. +. +Unlike device-independent troff, it is not necessary for drivers to +search special fonts to find a glyph. +. +.P +For color support, some new commands have been added: +. +.TP +\f[B]mc \f[I]cyan magenta yellow\f[R] +.TQ +\f[B]md\f[R] +.TQ +\f[B]mg \f[I]gray\f[R] +.TQ +\f[B]mk \f[I]cyan magenta yellow black\f[R] +.TQ +\f[B]mr \f[I]red green blue\f[R] +Set the color components of the current drawing color, using various +color schemes. +. +.B md +resets the drawing color to the default value. +. +The arguments are integers in the range 0 to 65536. +. +.P +The +.BR x \~\c +device control command has been extended. +. +.TP +\f[B]x u \f[I]n\f[R] +If +.I n +is\~1, start underlining of spaces. +. +If +.I n +is\~0, stop underlining of spaces. +. +This is needed for the +.B cu +request in nroff mode and is ignored otherwise. +. +. +.\" ==================================================================== +.SS "Drawing Commands" +.\" ==================================================================== +. +The +.B D +drawing command has been extended. +. +These extensions are not used by GNU pic if the +.B \-n +option is given. +. +.TP +\f[B]Df \f[I]n\/\f[R]\*[ic]\[rs]n +Set the shade of gray to be used for filling solid objects to +.IR n ; +.I n +must be an integer between 0 and 1000, where 0 corresponds solid white +and 1000 to solid black, and values in between correspond to +intermediate shades of gray. +. +This applies only to solid circles, solid ellipses and solid +polygons. +. +By default, a level of 1000 is used. +. +Whatever color a solid object has, it should completely obscure +everything beneath it. +. +A value greater than 1000 or less than\~0 can also be used: this means +fill with the shade of gray that is currently being used for lines and +text. +. +Normally this is black, but some drivers may provide a way of +changing this. +. +.IP +The corresponding +.BI \[rs]D'f \*[ellipsis] ' +command shouldn't be used since its argument is always rounded to an +integer multiple of the horizontal resolution which can lead to +surprising results. +. +.TP +\f[B]DC \f[I]\/d\f[R]\*[ic]\[rs]n +Draw a solid circle with a diameter of +.I d +with the leftmost point at the current position. +. +.TP +\f[B]DE \f[I]dx dy\/\f[R]\*[ic]\[rs]n +Draw a solid ellipse with a horizontal diameter of +.I dx +and a vertical diameter of +.I dy +with the leftmost point at the current position. +.EQ +delim $$ +.EN +. +.TP +\f[B]Dp\f[R] $dx sub 1$ $dy sub 1$ $dx sub 2$ $dy sub 2$ $...$ \ +$dx sub n$ $dy sub n$\[rs]n +Draw a polygon with, for $i = 1 ,..., n+1$, the +.IR i -th +vertex at the current position +. +$+ sum from j=1 to i-1 ( dx sub j , dy sub j )$. +. +At the moment, GNU pic only uses this command to generate triangles +and rectangles. +. +.TP +\f[B]DP\f[R] $dx sub 1$ $dy sub 1$ $dx sub 2$ $dy sub 2$ $...$ \ +$dx sub n$ $dy sub n$\[rs]n +. +Like +.B Dp +but draw a solid rather than outlined polygon. +. +.TP +\f[B]Dt \f[I]n\/\f[R]\*[ic]\[rs]n +Set the current line thickness to +.IR n \~\c +machine units. +. +Traditionally Unix troff drivers use a line thickness proportional to +the current point size; drivers should continue to do this if no +.B Dt +command has been given, or if a +.B Dt +command has been given with a negative value of\~\c +.IR n . +A zero value of\~\c +.I n +selects the smallest available line thickness. +. +.P +A difficulty arises in how the current position should be changed after +the execution of these commands. +. +This is not of great importance since the code generated by GNU pic +does not depend on this. +. +Given a drawing command of the form +.IP +\f[B]\[rs]D'\f[I]c\f[R] $x sub 1$ $y sub 1$ $x sub 2$ $y sub 2$ $...$ \ +$x sub n$ $y sub n$\f[B]'\f[R] +. +.P +where +.I c +is not one of +.BR c , +.BR e , +.BR l , +.BR a , +or\~\c +.BR \[ti] , +Unix troff treats each of the $x sub i$ as a horizontal quantity, +and each of the $y sub i$ as a vertical quantity and assumes that +the width of the drawn object is $sum from i=1 to n x sub i$, +and that the height is $sum from i=1 to n y sub i$. +. +(The assumption about the height can be seen by examining the +.B st +and +.B sb +registers after using such a +.BR D \~\c +command in a +.B \[rs]w +escape sequence). +. +This rule also holds for all the original drawing commands with the +exception of +.BR De . +For the sake of compatibility GNU troff also follows this rule, even +though it produces an ugly result in the case of the +.B Dt +and +.BR Df , +and, to a lesser extent, +.B DE +commands. +. +Thus after executing a +.BR D \~\c +command of the form +.IP +\f[B]D\f[I]c\f[R] $x sub 1$ $y sub 1$ $x sub 2$ $y sub 2$ $...$ \ +$x sub n$ $y sub n$\[rs]n +. +.P +the current position should be increased by +. +$( sum from i=1 to n x sub i , sum from i=1 to n y sub i )$. +. +.P +Another set of extensions is +. +.TP +\f[B]DFc \f[I]cyan magenta yellow\f[R]\*[ic]\[rs]n +.TQ +\f[B]DFd\f[R]\*[ic]\[rs]n +.TQ +\f[B]DFg \f[I]gray\/\f[R]\*[ic]\[rs]n +.TQ +\f[B]DFk \f[I]cyan magenta yellow black\f[R]\*[ic]\[rs]n +.TQ +\f[B]DFr \f[I]red green blue\f[R]\*[ic]\[rs]n +Set the color components of the filling color similar to the +.BR m \~\c +commands above. +. +.P +The current position isn't changed by those colour commands +(contrary to +.BR Df ). +. +. +.\" ==================================================================== +.SS "Device Control Commands" +.\" ==================================================================== +. +There is a continuation convention which permits the argument to the +.B x\ X +command to contain newlines: when outputting the argument to the +.B x\ X +command, GNU troff follows each newline in the argument with a +.B + +character (as usual, it terminates the entire argument with a +newline); thus if the line after the line containing the +.B x\ X +command starts with +.BR + , +then the newline ending the line containing the +.B x\ X +command should be treated as part of the argument to the +.B x\ X +command, the +.B + +should be ignored, and the part of the line following the +.B + +should be treated like the part of the line following the +.B x\ X +command. +. +.P +The first three output commands are guaranteed to be: +.IP +.BI x\ T\ device +.br +.BI x\ res\ n\ h\ v +.br +.B x init +. +. +.\" ==================================================================== +.SH INCOMPATIBILITIES +.\" ==================================================================== +. +In spite of the many extensions, groff has retained compatibility to +classical troff to a large degree. +. +For the cases where the extensions lead to collisions, a special +compatibility mode with the restricted, old functionality was created +for groff. +. +. +.\" ==================================================================== +.SS "Groff Language" +.\" ==================================================================== +. +.I groff +provides a +.B compatibility mode +that allows the processing of roff code written for classical +.B troff +or for other implementations of roff in a consistent way. +. +.P +Compatibility mode can be turned on with the +.B \-C +command-line option, and turned on or off with the +.B .cp +request. +. +The number register +.B \[rs]n(.C +is\~1 if compatibility mode is on, 0\~otherwise. +. +.P +This became necessary because the GNU concept for long names causes +some incompatibilities. +.I Classical troff +interprets +.IP +.B .dsabcd +. +.P +as defining a string +.B ab +with contents +.BR cd . +In +.I groff +mode, this is considered as a call of a macro named +.BR dsabcd . +. +.P +Also +.I classical troff +interprets +.B \[rs]*[ +or +.B \[rs]n[ +as references to a string or number register called\~\c +.B [ +while +.I groff +takes this as the start of a long name. +. +.P +In +.IR "compatibility mode" , +groff interprets these things in the traditional way; so long +names are not recognized. +. +.P +On the other hand, groff in +.I GNU native mode +does not allow to use the single-character escapes +.B \[rs]\[rs] +(backslash), +.B \[rs]| +(vertical bar), +.B \[rs]\[ha] +(caret), +.B \[rs]& +(ampersand), +.B \[rs]{ +(opening brace), +.B \[rs]} +(closing brace), +.RB \[oq] \[rs]\ \[cq] +(space), +.B \[rs]\[aq] +(single quote), +.B \[rs]\[ga] +(backquote), +.B \[rs]\- +(minus), +.B \[rs]_ +(underline), +.B \[rs]!\& +(bang), +.B \[rs]% +(percent), +and +.B \[rs]c +(character\~c) in names of strings, macros, diversions, number +registers, fonts or environments, whereas +.I classical troff +does. +. +.P +The +.B \[rs]A +escape sequence can be helpful in avoiding these escape sequences in +names. +. +.P +Fractional point sizes cause one noteworthy incompatibility. +. +In +.I classical +.IR troff , +the +.B ps +request ignores scale indicators and so +.RS +.P +.B .ps\~10u +.RE +. +.P +sets the point size to 10\~points, whereas in groff native mode the +point size is set to 10\~scaled points. +. +.P +In +.IR groff , +there is a fundamental difference between unformatted input +characters, and formatted output characters (glyphs). +. +Everything that affects how a glyph is output is +stored with the glyph; once a glyph has been +constructed it is unaffected by any subsequent requests that are +executed, including the +.BR bd , +.BR cs , +.BR tkf , +.BR tr , +or +.B fp +requests. +. +.P +Normally glyphs are constructed from input characters at +the moment immediately before the glyph is added to the current +output line. +. +Macros, diversions and strings are all, in fact, the same type of +object; they contain lists of input characters and glyphs +in any combination. +. +.P +Special characters can be both; before being added to the output, they +act as input entities, afterwards they denote glyphs. +. +.P +A glyph does not behave like an input character for the +purposes of macro processing; it does not inherit any of the special +properties that the input character from which it was constructed +might have had. +. +The following example makes things clearer. +. +.P +.RS +.EX +\&.di x +\[rs]\[rs]\[rs]\[rs] +\&.br +\&.di +\&.x +.EE +.RE +. +.P +With +.I GNU troff +this is printed as +.BR \[rs]\[rs] . +So each pair of input backslashes \[oq]\[rs]\[rs]\[cq] is turned +into a single output backslash glyph \[oq]\[rs]\[cq] and the +resulting output backslashes are not interpreted as escape characters +when they are reread. +. +.P +.I Classical troff +would interpret them as escape characters when they were reread and +would end up printing a single backslash \[oq]\[rs]\[cq]. +. +.P +In GNU, the correct way to get a printable version of the backslash +character \[cq]\[rs]\[cq] +is the +.B \[rs](rs +escape sequence, but classical troff does not provide a clean feature +for getting a non-syntactical backslash. +. +A close method is the printable version of the current escape +character using the +.B \[rs]e +escape sequence; this works if the current escape character is not +redefined. +. +It works in both GNU mode and compatibility mode, while dirty tricks +like specifying a sequence of multiple backslashes do not work +reliably; for the different handling in diversions, macro definitions, +or text mode quickly leads to a confusion about the necessary number of +backslashes. +. +.P +To store an escape sequence in a diversion that is interpreted +when the diversion is reread, either the traditional +.B \[rs]!\& +transparent output facility or the +new +.B \[rs]?\& +escape sequence can be used. +. +. +.\" ==================================================================== +.SS "Intermediate Output" +.\" ==================================================================== +. +The groff intermediate output format is in a state of evolution. +. +So far it has some incompatibilities, but it is intended to establish +a full compatibility to the classical troff output format. +. +Actually the following incompatibilities exist: +. +.IP \[bu] 2m +The positioning after the drawing of the polygons conflicts with the +classical definition. +. +.IP \[bu] 2m +The intermediate output cannot be rescaled to other devices as +classical \[oq]device-independent\[cq] troff did. +. +. +.\" ==================================================================== +.SH AUTHORS +.\" ==================================================================== +This document was written by +.MT jjc@\:jclark.com +James Clark +.ME +and modified by +.MT wl@\:gnu.org +Werner Lemberg +.ME +and +.MT groff\-bernd.warken\-72@\:web.de +Bernd Warken +.ME . +. +. +.\" ==================================================================== +.SH "SEE ALSO" +.\" ==================================================================== +. +.IR "Groff: The GNU Implementation of troff" , +by Trent A.\& Fisher and Werner Lemberg, +is the primary +.I groff +manual. +. +You can browse it interactively with \[lq]info groff\[rq]. +. +. +.TP +.BR groff (1) +A list of all documentation around +.IR groff . +. +.TP +.BR groff (7) +A description of the +.I groff +language, including a short, but complete reference of all predefined +requests, registers, and escapes of plain +.IR groff . +From the command line, this is called using +. +.RS +.IP +.EX +man 7 groff +.EE +.RE +. +.TP +.BR roff (7) +A survey of +.I roff +systems, including pointers to further historical documentation. +. +.TP +.RI [ CSTR\~#54\/ ] +The +.I Nroff/\:Troff User's Manual +by +.I J.\& F.\& Ossanna +of 1976 in the revision of +.I Brian Kernighan +of 1992, being the +.UR http://\:cm.bell\-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz +classical troff documentation +.UE . +. +. +.\" Restore compatibility mode (for, e.g., Solaris 10/11). +.cp \n[groff_diff_C] +. +. +.\" ==================================================================== +.\" Emacs variables +.\" ==================================================================== +. +.\" Local Variables: +.\" mode: nroff +.\" fill-column: 72 +.\" End: +.\" vim: set filetype=groff textwidth=72: |