Get rid of the old texinfo.
[dragonfly.git] / contrib / groff / man / groff_out.man
1 '\" e
2 .\" The above line should force the use of eqn as a preprocessor
3 .ig
4 groff_out.5
5
6 Last update: 12 Sep 2002
7
8 This file is part of groff, the GNU roff type-setting system.
9
10 Copyright (C) 1989, 2001, 2002 Free Software Foundation, Inc.
11 rewritten from scrach 2001 by Bernd Warken <bwarken@mayn.de>
12
13 Permission is granted to copy, distribute and/or modify this document
14 under the terms of the GNU Free Documentation License, Version 1.1 or
15 any later version published by the Free Software Foundation; with the
16 Invariant Sections being this .ig-section and AUTHORS, with no
17 Front-Cover Texts, and with no Back-Cover Texts.
18
19 A copy of the Free Documentation License is included as a file called
20 FDL in the main directory of the groff source package.
21 ..
22 .
23 .\" --------------------------------------------------------------------
24 .\" Setup
25 .\" --------------------------------------------------------------------
26 .
27 .mso www.tmac
28 .
29 .if n \{\
30 .  mso tty-char.tmac
31 .  ftr CR R
32 .  ftr CI I
33 .  ftr CB B
34 .\}
35 .
36 .if '\*[.T]'dvi' \
37 .  ftr CB CW
38 .
39 .if t \{\
40 .EQ
41 delim $$
42 .EN
43 .\}
44 .
45 .\" ----------------- Document configuration
46 .
47 .\" Number register to decide whether the commands `{' and `}' are used
48 .\" 0: disable (actual default); 1: enable
49 .nr @USE_ENV_STACK 0
50 .
51 .ig
52 Unfortunately, old versions of groff used an illogical position change
53 after some D\~commands (Dp, DP, Dt).  If the number register
54 @STUPID_DRAWING_POSITIONING is 1 (actual default) then change position
55 after these commands, otherwise the position is not changed.
56 ..
57 .nr @STUPID_DRAWING_POSITIONING 1
58 .
59 .\" ----------------- Syntactical definitions
60 .
61 .\" comments when escapes are switched off
62 .de c
63 ..
64 .\" Begin of macro definitions
65 .eo
66 .
67 .de Text
68 .  nop \)\$*
69 ..
70 .c follow-up line for a .TP header
71 .de TP+
72 .  br
73 .  ns
74 .  TP \$1
75 ..
76 .c a bulleted paragraph
77 .de Topic
78 .  TP 2m
79 .  nop \[bu]
80 ..
81 .de ShellCommand
82 .  br
83 .  IR "shell>" "\h'1m'\f[CB]\$*\f[]\/"
84 ..
85 .ec
86 .\" End of macro definitions
87 .
88 .c ----------------- Semantical definitions
89 .
90 .nr @maxcolor 65536
91 .ds @backslash \[rs]\"
92 .ds @linebreak \f[R]\[la]line_break\[ra]\f[]\"
93 .
94 .\" Begin of macro definitions
95 .eo
96 .
97 .c format: .unit <letter> <punctuation>
98 .de unit
99 .  BR \$@
100 ..
101 .c argument in italic with punctuation
102 .de argument
103 .  if (\n[.$] == 0) \
104 .    return
105 .  IR \$@
106 ..
107 .c comma separated list of indexed variables
108 .de list1..n
109 .  ds @arg1 \$1\"
110 .  nop \c
111 .  ie t \
112 .    nop $\*[@arg1] sub 1$, $\*[@arg1] sub 2$, .\|.\|., $\*[@arg1] sub n$ \c
113 .  el \{\
114 .    IR \*[@arg1]1 ,
115 .    IR \*[@arg1]2 ,
116 .    nop \&...,
117 .    I \*[@arg1]n
118 .  \}
119 .  rm @arg1
120 ..
121 .de offset
122 .  if (\n[.$] < 2) \
123 .    ab `.offset' needs at least 2 arguments
124 .  ds @arg1 \$1\"
125 .  ds @arg2 \$2\"
126 .  shift 2
127 .  nop (\f[I]\,\*[@arg1]\/\f[],\ \f[I]\,\*[@arg2]\/\f[])\$*
128 .  rm @arg1
129 .  rm @arg2
130 ..
131 .de indexed_offset
132 .  if (\n[.$] < 4) \
133 .    ab `.indexed_offset' needs at least 4 arguments
134 .  ds @arg1 \$1\"
135 .  ds @index1 \$2\"
136 .  ds @arg2 \$3\"
137 .  ds @index2 \$4\"
138 .  shift 4
139 .  ie t \{\
140 .    ie \B'\*[@index1]' \{\
141 .      nop ($\*[@arg1] sub roman \*[@index1]$,\ \c
142 .    \}
143 .    el \{\
144 .      nop ($\*[@arg1] sub \*[@index1]$,\ \c
145 .    \}
146 .    ie \B'\*[@index2]' \{\
147 .      nop $\*[@arg2] sub roman \*[@index2]$)\$* \c
148 .    \}
149 .    el \{\
150 .      nop $\*[@arg2] sub \*[@index2]$)\$* \c
151 .    \}
152 .  \}
153 .  el \{\
154 .    nop (\f[I]\*[@arg1]\*[@index1]\f[],\ \c
155 .    nop \f[I]\*[@arg2]\*[@index2]\f[])\$* \c
156 .  \}
157 .  rm @arg1
158 .  rm @arg2
159 .  rm @index1
160 .  rm @index2
161 ..
162 .c format: .command <name> "<arguments>" <punctuation>
163 .de command
164 .  ds @arg1 \$1\"
165 .  ds @arg2 \$2\"
166 .  shift 2
167 .  IP "\f[B]\*[@arg1]\f[]\ \f[I]\,\*[@arg2]\/\f[]\$*"
168 .  rm @arg1
169 .  rm @arg2
170 ..
171 .c format: .command+ <name> "<arguments>" <punctuation>
172 .c continue previous .command heading
173 .de command+
174 .  ds @arg1 \$1\"
175 .  ds @arg2 \$2\"
176 .  shift 2
177 .  TP+
178 .  Text "\f[B]\*[@arg1]\f[]\ \f[I]\,\*[@arg2]\/\f[]\$*"
179 .  rm @arg1
180 .  rm @arg2
181 ..
182 .c format: .D-command <subcommand> "<arguments>"
183 .de D-command
184 .  ds @sub \$1\"
185 .  shift 1
186 .  IP "\f[B]D\*[@sub]\f[]\ \f[I]\,\$*\/\f[]\|\*[@linebreak]"
187 .  rm @sub
188 ..
189 .c format: .D-command+ <subcommand> "<arguments>"
190 .c continue previous .D-command heading
191 .de D-command+
192 .  ds @sub \$1\"
193 .  shift 1
194 .  TP+
195 .  Text "\f[B]D\*[@sub]\f[]\ \f[I]\,\$*\/\f[]\*[@linebreak]"
196 .  rm @sub
197 ..
198 .de Da-command
199 .  shift 1
200 .  ie t \
201 .    ds @args $h sub 1$\~$v sub 1$ $h sub 2$\~$v sub 2$\"
202 .  el \
203 .    ds @args \f[I]h1\~v1 h2\~v2\f[]\"
204 .  IP "\f[B]Da\f[]\ \*[@args]\|\*[@linebreak]"
205 .  rm @args
206 ..
207 .c graphics command .D with a variable number of arguments
208 .c format: .D-multiarg <subcommand>
209 .de D-multiarg
210 .  ds @sub \$1\"
211 .  shift 1
212 .  ie t \{\
213 .    ds @args "$h sub 1$\~$v sub 1$ $h sub 2$\~$v sub 2$ .\|.\|. \"
214 .    as @args "$h sub n$\~$v sub n$\"
215 .  \}
216 .  el \
217 .    ds @args \f[I]h1\~v1 h2\~v2\f[] ... \f[I]\,hn\~vn\f[]\"
218 .  IP "\f[B]D\*[@sub]\f[]\ \*[@args]\|\*[@linebreak]"
219 .  rm @args
220 .  rm @sub
221 ..
222 .c format: .x-command <subname> "<arguments>"
223 .de x-command
224 .  ds @sub \$1\"
225 .  shift 1
226 .  ds @args
227 .  if (\n[.$] > 0) \
228 .    ds @args \ \f[I]\,\$*\/\f[]\"
229 .  IP "\f[B]x\*[@sub]\f[]\*[@args]\f[]\|\*[@linebreak]"
230 .  rm @sub
231 .  rm @args
232 ..
233 .de xsub
234 .  RI "(" "\$1" " control command)"
235 .  br
236 ..
237 .ec
238 .\" End of macro definitions 
239 .
240 .
241 .\" --------------------------------------------------------------------
242 .\" Title
243 .\" --------------------------------------------------------------------
244 .
245 .TH GROFF_OUT @MAN5EXT@ "@MDATE@" "Groff Version @VERSION@"
246 .
247 .SH NAME
248 groff_out \- groff intermediate output format
249 .
250 .
251 .\" --------------------------------------------------------------------
252 .SH DESCRIPTION
253 .\" --------------------------------------------------------------------
254 .
255 This manual page describes the intermediate output format of the GNU
256 .BR roff (@MAN7EXT@)
257 text processing system.
258 .
259 This output is produced by a run of the GNU
260 .BR troff (@MAN1EXT@)
261 program before it is fed into a device postprocessor program.
262 .
263 .P
264 As the GNU roff processor
265 .BR groff (@MAN1EXT@)
266 is a wrapper program around troff that automatically calls a
267 postprocessor, this output does not show up normally.
268 .
269 This is why it is called
270 .I intermediate
271 within the
272 .I groff
273 .IR system .
274 .
275 The
276 .B groff
277 program provides the option
278 .B -Z
279 to inhibit postprocessing, such that the produced intermediate output
280 is sent to standard output just like calling
281 .B troff
282 manually.
283 .
284 .P
285 In this document, the term
286 .I troff output
287 describes what is output by the GNU troff program, while
288 .I intermediate output
289 refers to the language that is accepted by the parser that prepares
290 this output for the postprocessors.
291 .
292 This parser is smarter on whitespace and implements obsolete elements
293 for compatibility, otherwise both formats are the same.
294 .
295 The pre-groff roff versions are denoted as
296 .I classical
297 .IR troff .
298 .
299 .P
300 The main purpose of the intermediate output concept is to facilitate
301 the development of postprocessors by providing a common programming
302 interface for all devices.
303 .
304 It has a language of its own that is completely different from the
305 .BR groff (@MAN7EXT@)
306 language.
307 .
308 While the
309 .I groff
310 language is a high-level programming language for text processing, the
311 intermediate output language is a kind of low-level assembler language
312 by specifying all positions on the page for writing and drawing.
313 .
314 .P
315 The intermediate output produced by
316 .I groff
317 is fairly readable, while
318 .I classical troff
319 output was hard to understand because of strange habits that are
320 still supported, but not used any longer by
321 .I GNU
322 .IR troff .
323 .
324 .
325 .\" --------------------------------------------------------------------
326 .SH "LANGUAGE CONCEPTS"
327 .\" --------------------------------------------------------------------
328 .
329 During the run of
330 .BR troff , 
331 the roff input is cracked down to the information on what has to be
332 printed at what position on the intended device.
333 .
334 So the language of the intermediate output format can be quite small.
335 .
336 Its only elements are commands with or without arguments.
337 .
338 In this document, the term "command" always refers to the intermediate
339 output language, never to the roff language used for document
340 formatting.
341 .
342 There are commands for positioning and text writing, for drawing, and
343 for device controlling.
344 .
345 .
346 .\" --------------------------------------------------------------------
347 .SS "Separation"
348 .\" --------------------------------------------------------------------
349 .
350 .I Classical troff output
351 had strange requirements on whitespace.
352 .
353 The
354 .I groff
355 output parser, however, is smart about whitespace by making it
356 maximally optional.
357 .
358 The whitespace characters, i.e.\& the
359 .IR tab ,
360 .IR space ,
361 and
362 .I newline
363 characters, always have a syntactical meaning.
364 .
365 They are never printable because spacing within the output is always
366 done by positioning commands.
367 .
368 .P
369 Any sequence of
370 .I space
371 or
372 .I tab
373 characters is treated as a single
374 .B syntactical
375 .BR space .
376 .
377 It separates commands and arguments, but is only required when there
378 would occur a clashing between the command code and the arguments
379 without the space.
380 .
381 Most often, this happens when variable length command names,
382 arguments, argument lists, or command clusters meet.
383 .
384 Commands and arguments with a known, fixed length need not be
385 separated by syntactical space.
386 .
387 .P
388 A line break is a syntactical element, too.
389 .
390 Every command argument can be followed by whitespace, a comment, or a
391 newline character.
392 .
393 Thus a
394 .B syntactical line break
395 is defined to consist of optional syntactical space that is optionally
396 followed by a comment, and a newline character.
397 .
398 .P
399 The normal commands, those for positioning and text, consist of a
400 single letter taking a fixed number of arguments.
401 .
402 For historical reasons, the parser allows to stack such commands on
403 the same line, but fortunately, in groff intermediate output, every
404 command with at least one argument is followed by a line break, thus
405 providing excellent readability.
406 .
407 .P
408 The other commands \[em] those for drawing and device controlling \[em]
409 have a more complicated structure; some recognize long command names,
410 and some take a variable number of arguments.
411 .
412 So all
413 .B D
414 and
415 .B x
416 commands were designed to request a
417 .I syntactical line break
418 after their last argument.
419 .
420 Only one command,
421 .RB ` x\ X '
422 has an argument that can stretch over several lines, all other
423 commands must have all of their arguments on the same line as the
424 command, i.e.\& the arguments may not be splitted by a line break.
425 .
426 .P
427 Empty lines, i.e.\& lines containing only space and/or a comment, can
428 occur everywhere.
429 .
430 They are just ignored.
431 .
432 .
433 .\" --------------------------------------------------------------------
434 .SS "Argument Units"
435 .\" --------------------------------------------------------------------
436 .
437 Some commands take integer arguments that are assumed to represent
438 values in a measurement unit, but the letter for the corresponding
439 .I scale indicator
440 is not written with the output command arguments; see
441 .BR groff (@MAN7EXT@)
442 and the groff info file for more on this topic.
443 .
444 Most commands assume the scale indicator\~\c
445 .unit u ,
446 the basic unit of the device, some use\~\c
447 .unit z , 
448 the
449 .I scaled point unit
450 of the device, while others, such as the color commands expect plain
451 integers.
452 .
453 Note that these scale indicators are relative to the chosen device.
454 .
455 They are defined by the parameters specified in the device's
456 .I DESC
457 file; see
458 .BR groff_font (@MAN5EXT@).
459 .
460 .P
461 Note that single characters can have the eighth bit set, as can the
462 names of fonts and special characters.
463 .
464 The names of characters and fonts can be of arbitrary length.
465 .
466 A character that is to be printed will always be in the current font.
467 .
468 .P
469 A string argument is always terminated by the next whitespace
470 character (space, tab, or newline); an embedded
471 .B #
472 character is regarded as part of the argument, not as the beginning of
473 a comment command.
474 .
475 An integer argument is already terminated by the next non-digit
476 character, which then is regarded as the first character of the next
477 argument or command.
478 .
479 .
480 .\" --------------------------------------------------------------------
481 .SS "Document Parts"
482 .\" --------------------------------------------------------------------
483 A correct intermediate output document consists of two parts, the
484 prologue and the body.
485 .
486 .P
487 The task of the
488 .I prologue
489 is to set the general device parameters using three exactly specified
490 commands.
491 .
492 The
493 .I groff prologue
494 is guaranteed to consist of the following three lines (in that order):
495 .RS
496 .P
497 .B x\ T
498 .I device
499 .br
500 .B x\ res
501 .I n\ h\ v
502 .br
503 .B x init
504 .RE
505 .P
506 with the arguments set as outlined in the section
507 .BR "Device Control Commands" .
508 .
509 But the parser for the intermediate output format is able to swallow
510 additional whitespace and comments as well.
511 .
512 .P
513 The
514 .I body
515 is the main section for processing the document data.
516 .
517 Syntactically, it is a sequence of any commands different from the
518 ones used in the prologue.
519 .
520 Processing is terminated as soon as the first
521 .B x\ stop
522 command is encountered; the last line of any groff intermediate output
523 always contains such a command.
524 .
525 .P
526 Semantically, the body is page oriented.
527 .
528 A new page is started by a
529 .BR p \~command.
530 .
531 Positioning, writing, and drawing commands are always done within the
532 current page, so they cannot occur before the first
533 .BR p \~command.
534 .
535 Absolute positioning (by the
536 .B H
537 and
538 .BR V \~commands)
539 is done relative to the current page, all other positioning
540 is done relative to the current location within this page.
541 .
542 .
543 .\" --------------------------------------------------------------------
544 .SH "COMMAND REFERENCE"
545 .\" --------------------------------------------------------------------
546 .
547 This section describes all intermediate output commands, the classical
548 commands as well as the
549 .I groff
550 extensions.
551 .
552 .
553 .\" --------------------------------------------------------------------
554 .SS "Comment Command"
555 .\" --------------------------------------------------------------------
556 .
557 .TP
558 .BI # anything \[la]end_of_line\[ra]
559 A comment.
560 .
561 Ignore any characters from the
562 .BR # \~\c
563 character up to the next newline character.
564 .
565 .P
566 This command is the only possibility for commenting in the intermediate
567 output.
568 .
569 Each comment can be preceded by arbitrary
570 .I syntactical
571 .IR space ;
572 every command can be terminated by a comment.
573 .
574 .
575 .\" --------------------------------------------------------------------
576 .SS "Simple Commands"
577 .\" --------------------------------------------------------------------
578 .
579 The commands in this subsection have a command code consisting of a
580 single character, taking a fixed number of arguments.
581 .
582 Most of them are commands for positioning and text writing.
583 .
584 These commands are smart about whitespace.
585 .
586 Optionally,
587 .I syntactical space
588 can be inserted before, after, and between the command letter and its
589 arguments.
590 .
591 All of these commands are stackable, i.e., they can be preceded by
592 other simple commands or followed by arbitrary other commands on the
593 same line.
594 .
595 A separating syntactical space is only necessary when two integer
596 arguments would clash or if the preceding argument ends with a string
597 argument.
598 .
599 .
600 .if (\n[@USE_ENV_STACK] == 1) \{\
601 .command {
602 Open a new environment by copying the actual device configuration data
603 to the environment stack.
604 .
605 The current environment is setup by the device specification and
606 manipulated by the setting commands.
607 .
608 .
609 .command }
610 Close the actual environment (opened by a preceding
611 .BR { \~command)
612 and restore the previous environment from the environment
613 stack as the actual device configuration data.
614 .
615 \}              \" endif @USE_ENV_STACK
616 .
617 .
618 .command C xxx \[la]white_space\[ra]
619 Print a special groff character named
620 .argument xxx .
621 .
622 The trailing syntactical space or line break is necessary to allow
623 character names of arbitrary length.
624 .
625 The character is printed at the current print position;
626 the character's size is read from the font file.
627 .
628 The print position is not changed.
629 .
630 .
631 .command c c
632 Print character\~\c
633 .argument c
634 at the current print position;
635 the character's size is read from the font file.
636 .
637 The print position is not changed.
638 .
639 .
640 .command f n
641 Set font to font number\~\c
642 .argument n
643 (a non-negative integer).
644 .
645 .
646 .command H n
647 Move right to the absolute vertical position\~\c
648 .argument n
649 (a non-negative integer in basic units\~\c
650 .unit u )
651 relative to left edge of current page.
652 .
653 .
654 .command h n
655 Move
656 .argument n
657 (a non-negative integer) basic units\~\c
658 .unit u
659 horizontally to the right.
660 .
661 .I [54]
662 allows negative values for
663 .I n
664 also, but
665 .I groff
666 doesn't use this.
667 .
668 .
669 .command m "color_scheme \f[R][\f[]component .\|.\|.\f[R]]\f[]"
670 Set the color for text (glyphs), line drawing, and the outline of
671 graphic objects using different color schemes; the analoguous command
672 for the filling color of graphic objects is
673 .BR DF .
674 .
675 The color components are specified as integer arguments between 0 and
676 \n[@maxcolor].
677 .
678 The number of color components and their meaning vary for the
679 different color schemes.
680 .
681 These commands are generated by the groff escape sequence
682 .BR \*[@backslash]m .
683 .
684 No position changing.
685 .
686 These commands are a groff extension.
687 .
688 .
689 .RS
690 .
691 .command mc "cyan magenta yellow"
692 Set color using the CMY color scheme, having the 3\~color components
693 cyan, magenta, and yellow.
694 .
695 .
696 .command md
697 Set color to the default color value
698 (black in most cases).
699 .
700 No component arguments.
701 .
702 .
703 .command mg "gray"
704 Set color to the shade of gray given by the argument, an integer
705 between 0 (black) and \n[@maxcolor] (white).
706 .
707 .
708 .command mk "cyan magenta yellow black"
709 Set color using the CMYK color scheme, having the 4\~color components
710 cyan, magenta, yellow, and black.
711 .
712 .command mr "red green blue"
713 Set color using the RGB color scheme, having the 3\~color components
714 red, green, and blue.
715 .
716 .RE
717 .
718 .
719 .command N n
720 Print character with index\~\c
721 .argument n
722 (a non-negative integer) of the current font.
723 .
724 The print position is not changed.
725 .
726 This command is a groff extension.
727 .
728 .
729 .command n b\ a
730 Inform the device about a line break, but no positioning is done by
731 this command.
732 .
733 In classical troff, the integer arguments
734 .argument b
735 and\~\c
736 .argument a
737 informed about the space before and after the current line to
738 make the intermediate output more human readable without performing
739 any action.
740 .
741 In groff, they are just ignored, but they must be provided for
742 compatibility reasons.
743 .
744 .
745 .command p n
746 Begin a new page in the outprint.
747 .
748 The page number is set to\~\c
749 .argument n .
750 .
751 This page is completely independent of pages formerly processed even
752 if those have the same page number.
753 .
754 The vertical position on the outprint is automatically set to\~0.
755 .
756 All positioning, writing, and drawing is always done relative to a
757 page, so a
758 .BR p \~command
759 must be issued before any of these commands.
760 .
761 .
762 .command s n
763 Set point size to
764 .argument n
765 scaled points
766 (this is unit\~\c
767 .unit z
768 in GNU
769 .BR troff ).
770 .
771 Classical troff used the unit
772 .I points
773 (\c
774 .unit p )
775 instead; see section
776 .BR COMPATIBILITY .
777 .
778 .
779 .command t xxx \[la]white_space\[ra]
780 .command+ t "xxx dummy_arg" \[la]white_space\[ra]
781 Print a word, i.e.\& a sequence of characters
782 .argument xxx
783 terminated by a space character or a line break; an optional second
784 integer argument is ignored (this allows the formatter to generate
785 an even number of arguments).
786 .
787 The first character should be printed at the current position, the
788 current horizontal position should then be increased by the width of
789 the first character, and so on for each character.
790 .
791 The widths of the characters are read from the font file, scaled for the
792 current point size, and rounded to a multiple of the horizontal
793 resolution.
794 .
795 Special characters cannot be printed using this command (use the
796 .B C
797 command for named characters).
798 .
799 This command is a groff extension; it is only used for devices whose
800 .I DESC
801 file contains the
802 .B tcommand
803 keyword; see
804 .BR groff_font (@MAN5EXT@).
805 .
806 .
807 .command u "n xxx" \[la]white_space\[ra]
808 Print word with track kerning.
809 .
810 This is the same as the
811 .B t
812 command except that after printing each character, the current
813 horizontal position is increased by the sum of the width of that
814 character and\~\c
815 .argument n
816 (an integer in
817 basic units\~\c
818 .unit u ).
819 This command is a groff extension; it is only used for devices whose
820 .I DESC
821 file contains the
822 .B tcommand
823 keyword; see
824 .BR groff_font (@MAN5EXT@).
825 .
826 .
827 .command V n
828 Move down to the absolute vertical position\~\c
829 .argument n
830 (a non-negative integer in basic units\~\c
831 .unit u )
832 relative to upper edge of current page.
833 .
834 .
835 .command v n
836 Move
837 .argument n
838 basic units\~\c
839 .unit u
840 down
841 .RI ( n
842 is a non-negative integer).
843 .
844 .I [54]
845 allows negative values for
846 .I n
847 also, but
848 .I groff
849 doesn't use this.
850 .
851 .
852 .command w
853 Informs about a paddable whitespace to increase readability.
854 .
855 The spacing itself must be performed explicitly by a move command.
856 .
857 .
858 .\" --------------------------------------------------------------------
859 .SS "Graphics Commands"
860 .\" --------------------------------------------------------------------
861 .
862 Each graphics or drawing command in the intermediate output starts
863 with the letter\~\c
864 .B D
865 followed by one or two characters that specify a subcommand; this
866 is followed by a fixed or variable number of integer arguments that
867 are separated by a single space character.
868 .
869 A
870 .BR D \ command
871 may not be followed by another command on the same line
872 (apart from a comment), so each
873 .BR D \ command
874 is terminated by a syntactical line break.
875 .
876 .P
877 .I troff
878 output follows the classical spacing rules (no space between command
879 and subcommand, all arguments are preceded by a single space
880 character), but the parser allows optional space between the command
881 letters and makes the space before the first argument optional.
882 .
883 As usual, each space can be any sequence of tab and space characters.
884 .
885 .P
886 Some graphics commands can take a variable number of arguments.
887 .
888 In this case, they are integers representing a size measured in basic
889 units\~\c
890 .unit u .
891 .
892 The arguments called
893 .list1..n h
894 stand for horizontal distances where positive means right, negative
895 left.
896 .
897 The arguments called
898 .list1..n v
899 stand for vertical distances where positive means down, negative up.
900 .
901 All these distances are offsets relative to the current location.
902 .
903 .P
904 Unless indicated otherwise, each graphics command directly corresponds
905 to a similar
906 .I groff
907 .B \*[@backslash]D
908 escape sequence; see
909 .BR groff (@MAN7EXT@).
910 .
911 .P
912 Unknown D\~commands are assumed to be device-specific.
913 .
914 Its arguments are parsed as strings; the whole information is then
915 sent to the postprocessor.
916 .
917 .P
918 In the following command reference, the syntax element
919 .I \[la]line_break\[ra]
920 means a
921 .I syntactical line break
922 as defined in section
923 .BR Separation .
924 .
925 .
926 .D-multiarg ~
927 Draw B-spline from current position to offset
928 .indexed_offset h 1 v 1 ,
929 then to offset
930 .indexed_offset h 2 v 2
931 if given, etc.\& up to
932 .indexed_offset h n v n .
933 This command takes a variable number of argument pairs;
934 the current position is moved to the terminal point of the drawn curve.
935 .
936 .
937 .Da-command
938 Draw arc from current position to
939 .indexed_offset h 1 v 1 \|+\|\c
940 .indexed_offset h 2 v 2
941 with center at
942 .indexed_offset h 1 v 1 ;
943 then move the current position to the final point of the arc.
944 .
945 .
946 .D-command C d
947 .D-command+ C d dummy_arg
948 Draw a solid circle using the current fill color with diameter\~\c
949 .argument d
950 (integer in basic units\~\c
951 .unit u )
952 with leftmost point at the current position; then move the current
953 position to the rightmost point of the circle.
954 .
955 An optional second integer argument is ignored (this allows to the
956 formatter to generate an even number of arguments).
957 .
958 This command is a groff extension.
959 .
960 .
961 .D-command c d
962 Draw circle line with diameter\~\c
963 .argument d
964 (integer in basic units\~\c
965 .unit u )
966 with leftmost point at the current position; then move the current
967 position to the rightmost point of the circle.
968 .
969 .
970 .D-command E "h v"
971 Draw a solid ellipse in the current fill color with a horizontal
972 diameter of\~\c
973 .argument h
974 and a vertical diameter of\~\c
975 .argument v
976 (both integers in basic units\~\c
977 .unit u )
978 with the leftmost point at the current position; then move to the
979 rightmost point of the ellipse.
980 .
981 This command is a groff extension.
982 .
983 .
984 .D-command e "h v"
985 Draw an outlined ellipse with a horizontal diameter of\~\c
986 .argument h
987 and a vertical diameter of\~\c
988 .argument v
989 (both integers in basic units\~\c
990 .unit u )
991 with the leftmost point at current position; then move to the
992 rightmost point of the ellipse.
993 .
994 .
995 .D-command F "color_scheme \f[R][\f[]component .\|.\|.\f[R]]\f[]"
996 Set fill color for solid drawing objects using different color
997 schemes; the analoguous command for setting the color of text, line
998 graphics, and the outline of graphic objects is
999 .BR m .
1000 .
1001 The color components are specified as integer arguments between 0 and
1002 \n[@maxcolor].
1003 .
1004 The number of color components and their meaning vary for the
1005 different color schemes.
1006 .
1007 These commands are generated by the groff escape sequences
1008 .B \*[@backslash]D'F\ .\|.\|.'
1009 and
1010 .B \*[@backslash]M
1011 (with no other corresponding graphics commands).
1012 .
1013 No position changing.
1014 .
1015 This command is a groff extension.
1016 .
1017 .
1018 .RS
1019 .
1020 .D-command Fc "cyan magenta yellow"
1021 Set fill color for solid drawing objects using the CMY color scheme,
1022 having the 3\~color components cyan, magenta, and yellow.
1023 .
1024 .
1025 .D-command Fd
1026 Set fill color for solid drawing objects to the default fill color value
1027 (black in most cases).
1028 .
1029 No component arguments.
1030 .
1031 .
1032 .D-command Fg "gray"
1033 Set fill color for solid drawing objects to the shade of gray given by
1034 the argument, an integer between 0 (black) and \n[@maxcolor] (white).
1035 .
1036 .
1037 .D-command Fk "cyan magenta yellow black"
1038 Set fill color for solid drawing objects using the CMYK color scheme,
1039 having the 4\~color components cyan, magenta, yellow, and black.
1040 .
1041 .D-command Fr "red green blue"
1042 Set fill color for solid drawing objects using the RGB color scheme,
1043 having the 3\~color components red, green, and blue.
1044 .
1045 .RE
1046 .
1047 .
1048 .D-command f n
1049 The argument
1050 .argument n
1051 must be an integer in the range -32767 to 32767.
1052 .
1053 .RS
1054 .TP
1055 .RI "0 \[<=] " n " \[<=] 1000"
1056 Set the color for filling solid drawing objects to a shade of gray,
1057 where 0 corresponds to solid white, 1000 (the default) to solid black,
1058 and values in between to intermediate shades of gray; this is
1059 obsoleted by command
1060 .BR DFg .
1061 .
1062 .TP
1063 .IR n " < 0 or " n " > 1000"
1064 Set the filling color to the color that is currently being used for
1065 the text and the outline, see command
1066 .BR m .
1067 For example, the command sequence
1068 .
1069 .nf
1070 .ft CB
1071 .RS
1072 .RS
1073 mg 0 0 \n[@maxcolor]
1074 Df -1
1075 .RE
1076 .ft
1077 .fi
1078 .
1079 sets all colors to blue.
1080 .RE
1081 .
1082 .P
1083 No position changing.
1084 .
1085 This command is a groff extension.
1086 .
1087 .RE
1088 .
1089 .
1090 .D-command l "h v"
1091 Draw line from current position to offset
1092 .offset h v
1093 (integers in basic units\~\c
1094 .unit u );
1095 then set current position to the end of the drawn line.
1096 .
1097 .
1098 .D-multiarg p
1099 Draw a polygon line from current position to offset
1100 .offset h1 v1 ,
1101 from there to offset
1102 .offset h2 v2 ,
1103 etc.\& up to offset
1104 .offset hn vn ,
1105 and from there back to the starting position.
1106 .
1107 .ie (\n[@STUPID_DRAWING_POSITIONING] == 1) \{\
1108 For historical reasons, the position is changed by adding the sum of
1109 all arguments with odd index to the actual horizontal position and the
1110 even ones to the vertical position.
1111 .
1112 Although this doesn't make sense it is kept for compatibility.
1113 .
1114 \}
1115 .el \{\
1116 As the polygon is closed, the end of drawing is the starting point, so
1117 the position doesn't change.
1118 \}
1119 .
1120 This command is a groff extension.
1121 .
1122 .
1123 .D-multiarg P
1124 The same macro as the corresponding
1125 .B Dp
1126 command with the same arguments, but draws a solid polygon in the
1127 current fill color rather than an outlined polygon.
1128 .
1129 .ie (\n[@STUPID_DRAWING_POSITIONING] == 1) \{\
1130 The position is changed in the same way as with
1131 .BR Dp .
1132 \}
1133 .el \
1134 No position changing.
1135 .
1136 This command is a groff extension.
1137 .
1138 .
1139 .D-command t n
1140 Set the current line thickness to\~\c
1141 .argument n
1142 (an integer in basic units\~\c
1143 .unit u )
1144 if
1145 .argument n >0;
1146 if
1147 .argument n =0
1148 select the smallest available line thickness; if
1149 .argument n <0
1150 set the line thickness proportional to the point size (this is the
1151 default before the first
1152 .B Dt
1153 command was specified).
1154 .
1155 .ie (\n[@STUPID_DRAWING_POSITIONING] == 1) \{\
1156 For historical reasons, the horizontal position is changed by adding
1157 the argument to the actual horizontal position, while the vertical
1158 position is not changed.
1159 .
1160 Although this doesn't make sense it is kept for compatibility.
1161 .
1162 \}
1163 .el \
1164 No position changing.
1165 .
1166 This command is a groff extension.
1167 .
1168 .
1169 .\" --------------------------------------------------------------------
1170 .SS "Device Control Commands"
1171 .\" --------------------------------------------------------------------
1172 .
1173 Each device control command starts with the letter
1174 .B x
1175 followed by a space character (optional or arbitrary space/\:tab in
1176 groff) and a subcommand letter or word; each argument (if any) must be
1177 preceded by a syntactical space.
1178 .
1179 All
1180 .B x
1181 commands are terminated by a
1182 .IR "syntactical line break" ;
1183 no device control command can be followed by another command on the same
1184 line (except a comment).
1185 .
1186 .P
1187 The subcommand is basically a single letter, but to increase
1188 readability, it can be written as a word, i.e.\& an arbitrary sequence
1189 of characters terminated by the next tab, space, or newline character.
1190 .
1191 All characters of the subcommand word but the first are simply ignored.
1192 .
1193 For example,
1194 .I troff
1195 outputs the initialization command
1196 .B x\ i
1197 as
1198 .B x\ init
1199 and the resolution command
1200 .B x\ r
1201 as
1202 .BR "x\ res" .
1203 .
1204 But writings like
1205 .B x\ i_like_groff
1206 and
1207 .B x\ roff_is_groff
1208 resp.\& are accepted as well to mean the same commands.
1209 .
1210 .P
1211 In the following, the syntax element
1212 .I \[la]line_break\[ra]
1213 means a
1214 .I syntactical line break
1215 as defined in section
1216 .BR Separation .
1217 .
1218 .x-command F name
1219 .xsub Filename
1220 Use
1221 .argument name
1222 as the intended name for the current file in error reports.
1223 .
1224 This is useful for remembering the original file name when groff uses
1225 an internal piping mechanism.
1226 .
1227 The input file is not changed by this command.
1228 .
1229 This command is a groff extension.
1230 .
1231 .
1232 .x-command f "n\ s"
1233 .xsub font
1234 Mount font position\~\c
1235 .argument n
1236 (a non-negative integer) with font named\~\c
1237 .argument s
1238 (a text word),
1239 cf.
1240 .BR groff_font (@MAN5EXT@).
1241 .
1242 .
1243 .x-command H n
1244 .xsub Height
1245 Set character height to\~\c
1246 .argument n
1247 (a positive integer in scaled points\~\c
1248 .unit z ).
1249 .
1250 Classical troff used the unit
1251 points (\c
1252 .unit p )
1253 instead; see section
1254 .BR COMPATIBILITY .
1255 .
1256 .
1257 .x-command i
1258 .xsub init
1259 Initialize device.
1260 .
1261 This is the third command of the prologue.
1262 .
1263 .
1264 .x-command p
1265 .xsub pause
1266 Parsed but ignored.
1267 .
1268 The classical documentation reads
1269 .I pause device, can be
1270 .IR restarted .
1271 .
1272 .
1273 .x-command r "n\ h\ v"
1274 .xsub resolution
1275 Resolution is\~\c
1276 .argument n ,
1277 while
1278 .argument h
1279 is the minimal horizontal motion, and
1280 .argument v
1281 the minimal vertical motion possible with this device; all arguments
1282 are positive integers in basic units\~\c
1283 .unit u
1284 per inch.
1285 .
1286 This is the second command of the prologue.
1287 .
1288 .
1289 .x-command S n
1290 .xsub Slant
1291 Set slant to\~\c
1292 .argument n
1293 (an integer in basic units\~\c
1294 .unit u ).
1295 .
1296 .
1297 .x-command s
1298 .xsub stop
1299 Terminates the processing of the current file; issued as the last
1300 command of any intermediate troff output.
1301 .
1302 .
1303 .x-command t
1304 .xsub trailer
1305 Generate trailer information, if any.
1306 .
1307 In
1308 .IR groff ,
1309 this is actually just ignored.
1310 .
1311 .
1312 .x-command T xxx
1313 .xsub Typesetter
1314 Set name of device to word
1315 .argument xxx ,
1316 a sequence of characters ended by the next whitespace character.
1317 .
1318 The possible device names coincide with those from the groff
1319 .B -T
1320 option.
1321 .
1322 This is the first command of the prologue.
1323 .
1324 .
1325 .x-command u n
1326 .xsub underline
1327 Configure underlining of spaces.
1328 .
1329 If
1330 .argument n
1331 is\~1, start underlining of spaces;
1332 if
1333 .argument n
1334 is\~0, stop underlining of spaces.
1335 .
1336 This is needed for the
1337 .B cu
1338 request in
1339 .I nroff
1340 mode and is ignored otherwise.
1341 .
1342 This command is a groff extension.
1343 .
1344 .
1345 .x-command X anything
1346 .xsub X-escape
1347 Send string
1348 .argument anything
1349 uninterpreted to the device.
1350 .
1351 If the line following this command starts with a
1352 .B +
1353 character this line is interpreted as a continuation line in the
1354 following sense.
1355 .
1356 The
1357 .B +
1358 is ignored, but a newline character is sent instead to the device, the
1359 rest of the line is sent uninterpreted.
1360 .
1361 The same applies to all following lines until the first character of a
1362 line is not a
1363 .B +
1364 character.
1365 .
1366 This command is generated by the
1367 .I groff
1368 escape sequence
1369 .BR \*[@backslash]X .
1370 .
1371 The line-continuing feature is a groff extension.
1372 .
1373 .
1374 .\" --------------------------------------------------------------------
1375 .SS "Obsolete Command"
1376 .\" --------------------------------------------------------------------
1377 .
1378 In
1379 .I classical troff
1380 output, the writing of a single character was mostly done by a very
1381 strange command that combined a horizontal move and the printing of a
1382 character.
1383 .
1384 It didn't have a command code, but is represented by a 3-character
1385 argument consisting of exactly 2\~digits and a character.
1386 .
1387 .TP
1388 .argument ddc
1389 Move right
1390 .argument dd
1391 (exactly two decimal digits) basic units\~\c
1392 .unit u ,
1393 then print character\~\c
1394 .argument c .
1395 .
1396 .RS
1397 .P
1398 In groff, arbitrary syntactical space around and within this command
1399 is allowed to be added.
1400 .
1401 Only when a preceding command on the same line ends with an argument
1402 of variable length a separating space is obligatory.
1403 .
1404 In
1405 .I classical
1406 .IR troff ,
1407 large clusters of these and other commands were used, mostly without
1408 spaces; this made such output almost unreadable.
1409 .
1410 .RE
1411 .
1412 .P
1413 For modern high-resolution devices, this command does not make sense
1414 because the width of the characters can become much larger than two
1415 decimal digits.
1416 .
1417 In groff, this is only used for the devices
1418 .BR X75 ,
1419 .BR X75-12 ,
1420 .BR X100 ,
1421 and
1422 .BR X100-12 .
1423 .
1424 For other devices,
1425 the commands
1426 .B t
1427 and\~\c
1428 .B u
1429 provide a better functionality.
1430 .
1431 .
1432 .\" --------------------------------------------------------------------
1433 .SH "POSTPROCESSING"
1434 .\" --------------------------------------------------------------------
1435 .
1436 The
1437 .I roff
1438 postprocessors are programs that have the task to translate the
1439 intermediate output into actions that are sent to a device.
1440 .
1441 A device can be some piece of hardware such as a printer, or a software
1442 file format suitable for graphical or text processing.
1443 .
1444 The
1445 .I groff
1446 system provides powerful means that make the programming of such
1447 postprocessors an easy task.
1448 .P
1449 There is a library function that parses the intermediate output and
1450 sends the information obtained to the device via methods of a class
1451 with a common interface for each device.
1452 .
1453 So a
1454 .I groff
1455 postprocessor must only redefine the methods of this class.
1456 .
1457 For details, see the reference in section
1458 .BR FILES .
1459 .
1460 .
1461 .\" --------------------------------------------------------------------
1462 .SH "EXAMPLES"
1463 .\" --------------------------------------------------------------------
1464 .
1465 This section presents the intermediate output generated from the same
1466 input for three different devices.
1467 .
1468 The input is the sentence
1469 .I hell world
1470 fed into groff on the command line.
1471 .
1472 .Topic
1473 High-resolution device
1474 .I ps
1475 .
1476 .RS
1477 .
1478 .P
1479 .ShellCommand echo "hell world" | groff -Z -T ps
1480 .
1481 .P
1482 .nf
1483 .ft CB
1484 x T ps
1485 x res 72000 1 1
1486 x init
1487 p1
1488 x font 5 TR
1489 f5
1490 s10000
1491 V12000
1492 H72000
1493 thell
1494 wh2500
1495 tw
1496 H96620
1497 torld
1498 n12000 0
1499 x trailer
1500 V792000
1501 x stop
1502 .ft P
1503 .fi
1504 .RE
1505 .
1506 .P
1507 This output can be fed into the postprocessor
1508 .BR grops (@MAN1EXT@)
1509 to get its representation as a PostScript file.
1510 .
1511 .
1512 .Topic
1513 Low-resolution device
1514 .I latin1
1515 .
1516 .RS
1517 .
1518 .P
1519 This is similar to the high-resolution device except that the
1520 positioning is done at a minor scale.
1521 .
1522 Some comments (lines starting with
1523 .IR # )
1524 were added for clarification; they were not generated by the
1525 formatter.
1526 .
1527 .P
1528 .ShellCommand echo "hell world" | groff -Z -T latin1
1529 .
1530 .P
1531 .nf
1532 .I # prologue
1533 .ft CB
1534 x T latin1
1535 x res 240 24 40
1536 x init
1537 .I # begin a new page
1538 .ft CB
1539 p1
1540 .I # font setup
1541 .ft CB
1542 x font 1 R
1543 f1
1544 s10
1545 .I # initial positioning on the page
1546 .ft CB
1547 V40
1548 H0
1549 .I # write text `hell'
1550 .ft CB
1551 thell
1552 .I # inform about a space, and do it by a horizontal jump
1553 .ft CB
1554 wh24
1555 .I # write text `world'
1556 .ft CB
1557 tworld
1558 .I # announce line break, but do nothing because ...
1559 .ft CB
1560 n40 0
1561 .I # ... the end of the document has been reached
1562 .ft CB
1563 x trailer
1564 V2640
1565 x stop
1566 .ft P
1567 .fi
1568 .RE
1569 .
1570 .P
1571 This output can be fed into the postprocessor
1572 .BR grotty (@MAN1EXT@)
1573 to get a formatted text document.
1574 .
1575 .
1576 .Topic
1577 Classical style output
1578 .
1579 .RS
1580 .
1581 .P
1582 As a computer monitor has a very low resolution compared to modern
1583 printers the intermediate output for the X\~devices can use the
1584 jump-and-write command with its 2-digit displacements.
1585 .
1586 .P
1587 .ShellCommand echo "hell world" | groff -Z -T X100
1588 .
1589 .P
1590 .nf
1591 .ft CB
1592 x T X100
1593 x res 100 1 1
1594 x init
1595 p1
1596 x font 5 TR
1597 f5
1598 s10
1599 V16
1600 H100
1601 .I # write text with old-style jump-and-write command
1602 .ft CB
1603 ch07e07l03lw06w11o07r05l03dh7
1604 n16 0
1605 x trailer
1606 V1100
1607 x stop
1608 .ft P
1609 .fi
1610 .RE
1611 .
1612 .P
1613 This output can be fed into the postprocessor
1614 .BR xditview (1x)
1615 or
1616 .BR gxditview (@MAN1EXT@)
1617 for displaying in\~X.
1618 .
1619 .P
1620 Due to the obsolete jump-and-write command, the text clusters in the
1621 classical output are almost unreadable.
1622 .
1623 .
1624 .\" --------------------------------------------------------------------
1625 .SH "COMPATIBILITY"
1626 .\" --------------------------------------------------------------------
1627 .
1628 The intermediate output language of the 
1629 .I classical troff
1630 was first documented in
1631 .IR [97] .
1632 .
1633 The
1634 .I groff
1635 intermediate output format is compatible with this specification
1636 except for the following features.
1637 .Topic
1638 The classical quasi device independence is not yet implemented.
1639 .
1640 .Topic
1641 The old hardware was very different from what we use today.
1642 .
1643 So the groff devices are also fundamentally different from the ones in
1644 classical troff.
1645 .
1646 For example, the classical PostScript device was called
1647 .I post
1648 and had a resolution of 720 units per inch,
1649 while groff's
1650 .I ps
1651 device has a resolution of 72000 units per inch.
1652 .
1653 Maybe, by implementing some rescaling mechanism similar to the
1654 classical quasi device independence, these could be integrated into
1655 modern groff.
1656 .
1657 .Topic
1658 The B-spline command
1659 .B D~
1660 is correctly handled by the intermediate output parser, but the
1661 drawing routines aren't implemented in some of the postprocessor
1662 programs.
1663 .Topic
1664 The argument of the commands
1665 .B s
1666 and
1667 .B x H
1668 has the implicit unit scaled point\~\c
1669 .unit z
1670 in groff, while classical troff had point (\c
1671 .unit p ).
1672 .
1673 This isn't an incompatibility, but a compatible extension,
1674 for both units coincide for all devices without a
1675 .I sizescale
1676 parameter, including all classical and the groff text devices.
1677 .
1678 The few groff devices with a sizescale parameter either did
1679 not exist, had a different name, or seem to have had a different
1680 resolution.
1681 .
1682 So conflicts with classical devices are very unlikely.
1683 .
1684 .ie (\n[@STUPID_DRAWING_POSITIONING] == 1) \{\
1685 .Topic
1686 The position changing after the commands
1687 .BR Dp ,
1688 .BR DP ,
1689 and
1690 .B Dt
1691 is illogical, but as old versions of groff used this feature it is
1692 kept for compatibility reasons.
1693 .\}             \" @STUPID_DRAWING_POSITIONING
1694 .el \{\
1695 .Topic
1696 Temporarily, there existed some confusion on the positioning after the
1697 .B D
1698 commands that are groff extensions.
1699 .
1700 This has been clarified by establishing the classical rule for all
1701 groff drawing commands:
1702 .
1703 .RS
1704 .P
1705 .I The position after a graphic object has been drawn is at its end;
1706 .I for circles and ellipses, the "end" is at the right side.
1707 .RE
1708 .
1709 .P
1710 From this, the positionings specified for the drawing commands above
1711 follow quite naturally.
1712 .\}             \" @STUPID_DRAWING_POSITIONING
1713 .
1714 .P
1715 The differences between groff and classical troff are documented in
1716 .BR groff_diff (@MAN7EXT@).
1717 .
1718 .
1719 .\" --------------------------------------------------------------------
1720 .SH "FILES"
1721 .\" --------------------------------------------------------------------
1722 .
1723 .TP
1724 .BI @FONTDIR@/dev name /DESC
1725 Device description file for device
1726 .IR name .
1727 .
1728 .TP
1729 .IB \[la]groff_source_dir\[ra] /src/libs/libdriver/input.cc
1730 Defines the parser and postprocessor for the intermediate output.
1731 .
1732 It is located relative to the top directory of the
1733 .I groff
1734 source tree, e.g.
1735 .IR @GROFFSRCDIR@ .
1736 .
1737 This parser is the definitive specification of the
1738 .I groff
1739 intermediate output format.
1740 .
1741 .
1742 .\" --------------------------------------------------------------------
1743 .SH "SEE ALSO"
1744 .\" --------------------------------------------------------------------
1745 .
1746 A reference like
1747 .BR groff (@MAN7EXT@)
1748 refers to a manual page; here
1749 .I groff
1750 in section\~\c
1751 .I @MAN7EXT@
1752 of the man-page documentation system.
1753 .
1754 To read the example, look up section\~@MAN7EXT@ in your desktop help
1755 system or call from the shell prompt
1756 .
1757 .RS
1758 .P
1759 .ShellCommand man @MAN7EXT@ groff
1760 .RE
1761 .
1762 .P
1763 For more details, see
1764 .BR man (1).
1765 .
1766 .TP
1767 .BR groff (@MAN1EXT@)
1768 option
1769 .B -Z
1770 and further readings on groff.
1771 .
1772 .TP
1773 .BR groff (@MAN7EXT@)
1774 for details of the
1775 .I groff
1776 language such as numerical units and escape sequences.
1777 .
1778 .TP
1779 .BR groff_font (@MAN5EXT@)
1780 for details on the device scaling parameters of the
1781 .B DESC
1782 file.
1783 .
1784 .TP
1785 .BR troff (@MAN1EXT@)
1786 generates the device-independent intermediate output.
1787 .
1788 .TP
1789 .BR roff (@MAN7EXT@)
1790 for historical aspects and the general structure of roff systems.
1791 .
1792 .TP
1793 .BR groff_diff (@MAN7EXT@)
1794 The differences between the intermediate output in groff and classical
1795 troff.
1796 .
1797 .P
1798 .BR \%grodvi (@MAN1EXT@),
1799 .BR \%grohtml (@MAN1EXT@),
1800 .BR \%grolbp (@MAN1EXT@),
1801 .BR \%grolj4 (@MAN1EXT@),
1802 .BR \%grops (@MAN1EXT@),
1803 .BR \%grotty (@MAN1EXT@)
1804 .br
1805 .RS
1806 the groff postprocessor programs.
1807 .RE
1808 .
1809 .P
1810 For a treatment of all aspects of the groff system within a single
1811 document, see the
1812 .I groff info
1813 .IR file .
1814 .
1815 It can be read within the integrated help systems, within
1816 .BR emacs (1)
1817 or from the shell prompt by
1818 .
1819 .RS
1820 .ShellCommand info groff
1821 .RE
1822 .
1823 .P
1824 The
1825 .I classical troff output language
1826 is described in two AT&T Bell Labs CSTR documents available on-line at
1827 .URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr.html \
1828      "Bell Labs CSTR site" .
1829 .
1830 .TP
1831 .I [CSTR #97]
1832 .I A Typesetter-independent TROFF
1833 by
1834 .I Brian Kernighan
1835 is the original and most concise documentation on the output language;
1836 see
1837 .URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:97.ps.gz CSTR\~#97 .
1838 .
1839 .TP
1840 .I [CSTR\~#54]
1841 The 1992 revision of the
1842 .I Nroff/\:Troff User's Manual
1843 by
1844 .I J.\& F.\& Osanna
1845 and
1846 .I Brian Kernighan
1847 isn't as concise as
1848 .I [CSTR\~#97]
1849 regarding the output language;
1850 see
1851 .URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz CSTR\~#54 .
1852 .
1853 .
1854 .\" --------------------------------------------------------------------
1855 .SH "AUTHORS"
1856 .\" --------------------------------------------------------------------
1857 .
1858 Copyright (C) 1989, 2001, 2002 Free Software Foundation, Inc.
1859 .P
1860 This document is distributed under the terms of the FDL (GNU Free
1861 Documentation License) version 1.1 or later.
1862 .
1863 You should have received a copy of the FDL with this package; it is also
1864 available on-line at the
1865 .URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
1866 .
1867 .P
1868 This document is part of
1869 .IR groff ,
1870 the GNU roff distribution.
1871 .
1872 It is based on a former version \- published under the GPL \- that
1873 described only parts of the
1874 .I groff
1875 extensions of the output language.
1876 .
1877 It has been rewritten 2002 by
1878 .MTO bwarken@mayn.de "Bernd Warken"
1879 and is maintained by
1880 .MTO wl@gnu.org "Werner Lemberg" .
1881 .
1882 .\" --------------------------------------------------------------------
1883 .\" Emacs settings
1884 .\" --------------------------------------------------------------------
1885 .\"
1886 .\" Local Variables:
1887 .\" mode: nroff
1888 .\" End: