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