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