2 .TH GROFF_OUT @MAN5EXT@ "@MDATE@" "groff @VERSION@"
4 groff_out \- groff intermediate output format
7 .\" Source file position: <groff_source>/man/groff_out.man
8 .\" Installed position: <prefix>/share/man/man5/groff_out.5
11 .\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
12 .do nr groff_out_C \n[.C]
16 .\" ====================================================================
18 .\" ====================================================================
20 .\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
22 .\" This file is part of groff, the GNU roff type-setting system.
24 .\" Permission is granted to copy, distribute and/or modify this
25 .\" document under the terms of the GNU Free Documentation License,
26 .\" Version 1.3 or any later version published by the Free Software
27 .\" Foundation; with no Invariant Sections, with no Front-Cover Texts,
28 .\" and with no Back-Cover Texts.
30 .\" A copy of the Free Documentation License is included as a file
31 .\" called FDL in the main directory of the groff source package.
34 .\" ====================================================================
36 .\" ====================================================================
38 .\" ================= Document configuration
40 .\" Number register to decide whether the commands '{' and '}' are used
41 .\" 0: disable (actual default); 1: enable
45 Unfortunately, old versions of groff used an illogical position change
46 after some D\~commands (Dp, DP, Dt). If the number register
47 @STUPID_DRAWING_POSITIONING is 1 (actual default) then change position
48 after these commands, otherwise the position is not changed.
50 .nr @STUPID_DRAWING_POSITIONING 1
52 .\" ================= Semantical definitions
55 .ds @backslash \[rs]\"
56 .ds @linebreak \fR\[la]line-break\[ra]\fP\"
58 .\" Begin of macro definitions
61 .RI ( \,\\$1\/ ,\ \,\\$2\/ )\\$3
64 .offset \fI\\$1\/\fP\d\s-3\\$2\s+3\u\x'\n[.v]/4' \fI\\$3\/\fP\
65 \d\s-3\\$4\s+3\u\x'\n[.v]/4' \\$5\x'\n[.v]/4'
67 .\" format: .command <name> "<arguments>" <punctuation>
69 \fB\\$1\fP\ \fI\,\\$2\/\fP\\$3
71 .\" format: .D-command <subcommand> "<arguments>"
73 \fBD\\$1\fP\ \fI\,\\$2\/\fP\|\*[@linebreak]
76 .\" We set these as troff micromotions rather than eqn because \d and \u
77 .\" can be lifted to XML subscript/superscript tags. Don't change
78 .\" these to a parameterized string, man2html won't handle that.
79 .ds hv1 \fIh\d\s-3\&1\s+3\u\~v\d\s-3\&1\s+3\u\fP\x'\n[.v]/4'
80 .ds hv2 \fIh\d\s-3\&2\s+3\u\~v\d\s-3\&2\s+3\u\fP\x'\n[.v]/4'
81 .ds hvn \fIh\d\s-3\&n\s+3\u\~v\d\s-3\&n\s+3\u\fP\x'\n[.v]/4'
84 \fBDa\fP\ \*[hv1] \*[hv2]\|\*[@linebreak]
86 .\" graphics command .D with a variable number of arguments
87 .\" format: .D-multiarg <subcommand>
89 \fBD\\$1\fP\ \*[hv1] \*[hv2] .\|.\|. \*[hvn]\|\*[@linebreak]
91 .\" format: .x-command <subname> "<arguments>"
93 \fBx\\$1\fP\ \fI\\$2\fP\|\*[@linebreak]
96 .RI "(" "\\$1" " control command)"
99 .\" End of macro definitions
102 .\" ====================================================================
104 .\" ====================================================================
106 This manual page describes the
107 .I intermediate output
110 text processing system
111 .BR groff (@MAN1EXT@).
113 This output is produced by a run of the GNU
114 .BR @g@troff (@MAN1EXT@)
117 It contains already all device-specific information, but it is not yet
118 fed into a device postprocessor program.
125 .BR groff (@MAN1EXT@)
126 is a wrapper program around
128 that automatically calls a
129 postprocessor, this output does not show up normally.
131 This is why it is called
139 program provides the option
141 to inhibit postprocessing, such that the produced
142 .I intermediate output
143 is sent to standard output just like calling
149 In this document, the term
151 describes what is output by the GNU
154 .I intermediate output
155 refers to the language that is accepted by the parser that prepares
156 this output for the postprocessors.
158 This parser is smarter on whitespace and implements obsolete elements
159 for compatibility, otherwise both formats are the same.
161 Both formats can be viewed directly with
162 .BR \%gxditview (@MAN1EXT@).
166 The main purpose of the
167 .I intermediate output
168 concept is to facilitate the development of postprocessors by
169 providing a common programming interface for all devices.
171 It has a language of its own that is completely different from the
172 .BR groff (@MAN7EXT@)
177 language is a high-level programming language for text processing, the
178 .I intermediate output
179 language is a kind of low-level assembler language by specifying all
180 positions on the page for writing and drawing.
187 versions are denoted as
191 .I intermediate output
194 is fairly readable, while
196 output was hard to understand because of strange habits that are
197 still supported, but not used any longer by
202 .\" ====================================================================
203 .SH "LANGUAGE CONCEPTS"
204 .\" ====================================================================
210 input is cracked down to the information on what has to be printed at
211 what position on the intended device.
213 So the language of the
214 .I intermediate output
215 format can be quite small.
217 Its only elements are commands with or without arguments.
219 In this document, the term \[lq]command\[rq] always refers to the
220 .I intermediate output
221 language, never to the
223 language used for document formatting.
225 There are commands for positioning and text writing, for drawing, and
226 for device controlling.
229 .\" ====================================================================
231 .\" ====================================================================
233 .I Classical troff output
234 had strange requirements on whitespace.
238 output parser, however, is smart about whitespace by making it
241 The whitespace characters, i.e., the
246 characters, always have a syntactical meaning.
248 They are never printable because spacing within the output is always
249 done by positioning commands.
257 characters is treated as a single
261 It separates commands and arguments, but is only required when there
262 would occur a clashing between the command code and the arguments
265 Most often, this happens when variable length command names,
266 arguments, argument lists, or command clusters meet.
268 Commands and arguments with a known, fixed length need not be
275 A line break is a syntactical element, too.
277 Every command argument can be followed by whitespace, a comment, or a
281 .I syntactical line break
282 is defined to consist of optional
284 that is optionally followed by a comment, and a newline character.
288 The normal commands, those for positioning and text, consist of a
289 single letter taking a fixed number of arguments.
291 For historical reasons, the parser allows stacking of such commands on
292 the same line, but fortunately, in
293 .I groff intermediate
295 every command with at least one argument is followed by a line break,
296 thus providing excellent readability.
299 The other commands \[em] those for drawing and device controlling \[em]
300 have a more complicated structure; some recognize long command names,
301 and some take a variable number of arguments.
307 commands were designed to request a
308 .I syntactical line break
309 after their last argument.
313 has an argument that can stretch over several lines, all other
314 commands must have all of their arguments on the same line as the
315 command, i.e., the arguments may not be split by a line break.
318 Empty lines, i.e., lines containing only space and/or a comment, can
321 They are just ignored.
324 .\" ====================================================================
326 .\" ====================================================================
328 Some commands take integer arguments that are assumed to represent
329 values in a measurement unit, but the letter for the corresponding
331 is not written with the output command arguments;
333 .BR groff (@MAN7EXT@)
335 .IR "Groff: The GNU Implementation of troff" ,
339 for more on this topic.
341 Most commands assume the scale indicator\~\c
343 the basic unit of the device, some use\~\c
347 of the device, while others, such as the color commands expect plain
350 Note that these scale indicators are relative to the chosen device.
352 They are defined by the parameters specified in the device's
355 .BR groff_font (@MAN5EXT@).
359 Note that single characters can have the eighth bit set, as can the
360 names of fonts and special characters (this is, glyphs).
362 The names of glyphs and fonts can be of arbitrary length.
364 A glyph that is to be printed will always be in the current font.
368 A string argument is always terminated by the next whitespace
369 character (space, tab, or newline); an embedded
371 character is regarded as part of the argument, not as the beginning of
374 An integer argument is already terminated by the next non-digit
375 character, which then is regarded as the first character of the next
379 .\" ====================================================================
381 .\" ====================================================================
383 .I intermediate output
384 document consists of two parts, the
392 is to set the general device parameters using three exactly specified
397 is guaranteed to consist of the following three lines (in that order):
409 with the arguments set as outlined in subsection \[lq]Device Control
412 However, the parser for the
413 .I intermediate output
414 format is able to swallow additional whitespace and comments as well.
420 is the main section for processing the document data.
422 Syntactically, it is a sequence of any commands different from the
426 Processing is terminated as soon as the first
428 command is encountered; the last line of any
429 .I groff intermediate output
430 always contains such a command.
438 A new page is started by a
441 Positioning, writing, and drawing commands are always done within the
442 current page, so they cannot occur before the first
445 Absolute positioning (by the
449 is done relative to the current page, all other positioning
450 is done relative to the current location within this page.
453 .\" ====================================================================
454 .SH "COMMAND REFERENCE"
455 .\" ====================================================================
457 This section describes all
458 .I intermediate output
459 commands, the classical commands as well as the
464 .\" ====================================================================
465 .SS "Comment Command"
466 .\" ====================================================================
469 .BI # anything \[la]end-of-line\[ra]
472 Ignore any characters from the
474 character up to the next newline character.
477 This command is the only possibility for commenting in the
481 Each comment can be preceded by arbitrary
484 every command can be terminated by a comment.
487 .\" ====================================================================
488 .SS "Simple Commands"
489 .\" ====================================================================
491 The commands in this subsection have a command code consisting of a
492 single character, taking a fixed number of arguments.
494 Most of them are commands for positioning and text writing.
496 These commands are smart about whitespace.
500 can be inserted before, after, and between the command letter and its
503 All of these commands are stackable, i.e., they can be preceded by
504 other simple commands or followed by arbitrary other commands on the
509 is only necessary when two integer arguments would clash or if the
510 preceding argument ends with a string argument.
513 .if \n[@USE_ENV_STACK]=1 \{\
516 Open a new environment by copying the actual device configuration data
517 to the environment stack.
519 The current environment is setup by the device specification and
520 manipulated by the setting commands.
525 Close the actual environment (opened by a preceding
527 and restore the previous environment from the environment
528 stack as the actual device configuration data.
530 .\} \" endif @USE_ENV_STACK
534 .command C xxx \[la]white-space\[ra]
535 Print a glyph (special character) named
542 is necessary to allow glyph names of arbitrary length.
544 The glyph is printed at the current print position; the
545 glyph's size is read from the font file.
547 The print position is not changed.
552 Print glyph with single-letter name\~\c
554 at the current print position;
555 the glyph's size is read from the font file.
557 The print position is not changed.
562 Set font to font number\~\c
564 (a non-negative integer).
569 Move right to the absolute vertical position\~\c
571 (a non-negative integer in basic units\~\c
573 relative to left edge of current page.
580 (a non-negative integer) basic units\~\c
582 horizontally to the right.
585 allows negative values for
593 .command m "color-scheme \fR[\fPcomponent .\|.\|.\fR]\fP"
594 Set the color for text (glyphs), line drawing, and the outline of
595 graphic objects using different color schemes; the analogous command
596 for the filling color of graphic objects is
599 The color components are specified as integer arguments between 0 and
602 The number of color components and their meaning vary for the
603 different color schemes.
605 These commands are generated by the
608 .BR \*[@backslash]m .
610 No position changing.
620 .command mc "cyan magenta yellow"
621 Set color using the CMY color scheme, having the 3\~color components
622 cyan, magenta, and yellow.
627 Set color to the default color value
628 (black in most cases).
630 No component arguments.
635 Set color to the shade of gray given by the argument, an integer
636 between 0 (black) and \n[@maxcolor] (white).
640 .command mk "cyan magenta yellow black"
641 Set color using the CMYK color scheme, having the 4\~color components
642 cyan, magenta, yellow, and black.
645 .command mr "red green blue"
646 Set color using the RGB color scheme, having the 3\~color components
647 red, green, and blue.
654 Print glyph with index\~\c
656 (an integer, normally non-negative) of the current font.
658 The print position is not changed.
664 is used, negative values are emitted also to indicate an unbreakable
665 space with given width.
669 represents an unbreakable space which has a width of 193\|u.
678 Inform the device about a line break, but no positioning is done by
684 the integer arguments
688 informed about the space before and after the current line to
690 .I intermediate output
691 more human readable without performing any action.
695 they are just ignored, but they must be provided for compatibility
701 Begin a new page in the outprint.
703 The page number is set to\~\c
706 This page is completely independent of pages formerly processed even
707 if those have the same page number.
709 The vertical position on the outprint is automatically set to\~0.
711 All positioning, writing, and drawing is always done relative to a
714 must be issued before any of these commands.
733 see section \[lq]Compatibility\[rq] below.
737 .command t xyz\|.\|.\|. \[la]white-space\[ra]
739 .command t "xyz\|.\|.\|.\& dummy-arg" \[la]white-space\[ra]
740 Print a word, i.e., a sequence of glyphs with single-letter names
744 etc., terminated by a space character or a line break; an optional
745 second integer argument is ignored (this allows the formatter to
746 generate an even number of arguments).
748 The first glyph should be printed at the current position, the
749 current horizontal position should then be increased by the width of
750 the first glyph, and so on for each glyph.
752 The widths of the glyph are read from the font file, scaled for the
753 current point size, and rounded to a multiple of the horizontal
756 Special characters (glyphs with names longer than a single letter)
757 cannot be printed using this command; use the
759 command for those glyphs.
763 extension; it is only used for devices whose
768 .BR groff_font (@MAN5EXT@).
772 .command u "n xyz\|.\|.\|." \[la]white-space\[ra]
773 Print word with track kerning.
775 This is the same as the
777 command except that after printing each glyph, the current
778 horizontal position is increased by the sum of the width of that
786 extension; it is only used for devices whose
791 .BR groff_font (@MAN5EXT@).
796 Move down to the absolute vertical position\~\c
798 (a non-negative integer in basic units\~\c
800 relative to upper edge of current page.
811 is a non-negative integer).
814 allows negative values for
823 Informs about a paddable whitespace to increase readability.
825 The spacing itself must be performed explicitly by a move command.
828 .\" ====================================================================
829 .SS "Graphics Commands"
830 .\" ====================================================================
832 Each graphics or drawing command in the
833 .I intermediate output
834 starts with the letter\~\c
836 followed by one or two characters that specify a subcommand; this
837 is followed by a fixed or variable number of integer arguments that
838 are separated by a single space character.
842 may not be followed by another command on the same line (apart from a
852 output follows the classical spacing rules (no space between command
853 and subcommand, all arguments are preceded by a single space
854 character), but the parser allows optional space between the command
855 letters and makes the space before the first argument optional.
857 As usual, each space can be any sequence of tab and space characters.
861 Some graphics commands can take a variable number of arguments.
863 In this case, they are integers representing a size measured in basic
870 stand for horizontal distances where positive means right, negative
876 stand for vertical distances where positive means down, negative up.
878 All these distances are offsets relative to the current location.
882 Unless indicated otherwise, each graphics command directly corresponds
887 .BR groff (@MAN7EXT@).
893 are assumed to be device-specific.
895 Its arguments are parsed as strings; the whole information is then
896 sent to the postprocessor.
900 In the following command reference, the syntax element
901 .I \[la]line-break\[ra]
903 .I syntactical line break
904 as defined in subsection \[lq]Separation\[rq] above.
909 Draw B-spline from current position to offset
910 .indexed_offset h 1 v 1 ,
912 .indexed_offset h 2 v 2
913 if given, etc., up to
914 .indexed_offset h n v n .
915 This command takes a variable number of argument pairs; the current
916 position is moved to the terminal point of the drawn curve.
921 Draw arc from current position to
922 .indexed_offset h 1 v 1 \|+\|\c
923 .indexed_offset h 2 v 2
925 .indexed_offset h 1 v 1 ;
926 then move the current position to the final point of the arc.
932 .D-command C "d dummy-arg"
933 Draw a solid circle using the current fill color with diameter\~\c
935 (integer in basic units\~\c
937 with leftmost point at the current position; then move the current
938 position to the rightmost point of the circle.
940 An optional second integer argument is ignored (this allows the
941 formatter to generate an even number of arguments).
950 Draw circle line with diameter\~\c
952 (integer in basic units\~\c
954 with leftmost point at the current position; then move the current
955 position to the rightmost point of the circle.
960 Draw a solid ellipse in the current fill color with a horizontal
963 and a vertical diameter of\~\c
965 (both integers in basic units\~\c
967 with the leftmost point at the current position; then move to the
968 rightmost point of the ellipse.
977 Draw an outlined ellipse with a horizontal diameter of\~\c
979 and a vertical diameter of\~\c
981 (both integers in basic units\~\c
983 with the leftmost point at current position; then move to the
984 rightmost point of the ellipse.
988 .D-command F "color-scheme \fR[\fPcomponent .\|.\|.\fR]\fP"
989 Set fill color for solid drawing objects using different color
990 schemes; the analogous command for setting the color of text, line
991 graphics, and the outline of graphic objects is
994 The color components are specified as integer arguments between 0 and
997 The number of color components and their meaning vary for the
998 different color schemes.
1000 These commands are generated by the
1003 .BR \*[@backslash]D'F\ .\|.\|. '
1006 (with no other corresponding graphics commands).
1008 No position changing.
1018 .D-command Fc "cyan magenta yellow"
1019 Set fill color for solid drawing objects using the CMY color scheme,
1020 having the 3\~color components cyan, magenta, and yellow.
1025 Set fill color for solid drawing objects to the default fill color value
1026 (black in most cases).
1028 No component arguments.
1032 .D-command Fg "gray"
1033 Set fill color for solid drawing objects to the shade of gray given by
1034 the argument, an integer between 0 (black) and \n[@maxcolor] (white).
1038 .D-command Fk "cyan magenta yellow black"
1039 Set fill color for solid drawing objects using the CMYK color scheme,
1040 having the 4\~color components cyan, magenta, yellow, and black.
1043 .D-command Fr "red green blue"
1044 Set fill color for solid drawing objects using the RGB color scheme,
1045 having the 3\~color components red, green, and blue.
1054 must be an integer in the range \-32767 to 32767.
1058 .RI 0\|\[<=]\| n \|\[<=]\|1000
1059 Set the color for filling solid drawing objects to a shade of gray,
1060 where 0 corresponds to solid white, 1000 (the default) to solid black,
1061 and values in between to intermediate shades of gray; this is
1062 obsoleted by command
1066 .IR n "\|<\|0 or " n \|>\|1000
1067 Set the filling color to the color that is currently being used for
1068 the text and the outline, see command
1070 For example, the command sequence
1075 mg 0 0 \n[@maxcolor]
1081 sets all colors to blue.
1084 No position changing.
1095 Draw line from current position to offset
1097 (integers in basic units\~\c
1099 then set current position to the end of the drawn line.
1104 Draw a polygon line from current position to offset
1105 .indexed_offset h 1 v 1 ,
1106 from there to offset
1107 .indexed_offset h 2 v 2 ,
1109 .indexed_offset h n v n ,
1110 and from there back to the starting position.
1112 .ie \n[@STUPID_DRAWING_POSITIONING]=1 \{\
1113 For historical reasons, the position is changed by adding the sum of
1114 all arguments with odd index to the actual horizontal position and the
1115 even ones to the vertical position.
1117 Although this doesn't make sense it is kept for compatibility.
1121 As the polygon is closed, the end of drawing is the starting point, so
1122 the position doesn't change.
1132 The same macro as the corresponding
1134 command with the same arguments, but draws a solid polygon in the
1135 current fill color rather than an outlined polygon.
1137 .ie \n[@STUPID_DRAWING_POSITIONING]=1 \{\
1138 The position is changed in the same way as with
1142 No position changing.
1151 Set the current line thickness to\~\c
1153 (an integer in basic units\~\c
1159 select the smallest available line thickness; if
1161 set the line thickness proportional to the point size (this is the
1162 default before the first
1164 command was specified).
1166 .ie \n[@STUPID_DRAWING_POSITIONING]=1 \{\
1167 For historical reasons, the horizontal position is changed by adding
1168 the argument to the actual horizontal position, while the vertical
1169 position is not changed.
1171 Although this doesn't make sense it is kept for compatibility.
1175 No position changing.
1182 .\" ====================================================================
1183 .SS "Device Control Commands"
1184 .\" ====================================================================
1186 Each device control command starts with the letter
1188 followed by a space character (optional or arbitrary space/\:tab in
1190 and a subcommand letter or word; each argument (if any) must be
1197 commands are terminated by a
1198 .IR "syntactical line break" ;
1199 no device control command can be followed by another command on the same
1200 line (except a comment).
1203 The subcommand is basically a single letter, but to increase
1204 readability, it can be written as a word, i.e., an arbitrary sequence
1205 of characters terminated by the next tab, space, or newline character.
1207 All characters of the subcommand word but the first are simply ignored.
1211 outputs the initialization command
1215 and the resolution command
1224 are accepted as well to mean the same commands.
1227 In the following, the syntax element
1228 .I \[la]line-break\[ra]
1230 .I syntactical line break
1231 as defined in subsection \[lq]Separation\[rq] above.
1238 as the intended name for the current file in error reports.
1240 This is useful for remembering the original file name when
1242 uses an internal piping mechanism.
1244 The input file is not changed by this command.
1254 Mount font position\~\c
1256 (a non-negative integer) with font named\~\c
1260 .BR groff_font (@MAN5EXT@).
1266 Set character height to\~\c
1268 (a positive integer in scaled points\~\c
1272 used the unit points (\c
1275 see section \[lq]Compatibility\[rq] below.
1283 This is the third command of the
1292 The classical documentation reads
1293 .I pause device, can be
1298 .x-command r "n\ h\ v"
1304 is the minimal horizontal motion, and
1306 the minimal vertical motion possible with this device; all arguments
1307 are positive integers in basic units\~\c
1311 This is the second command of the
1320 degrees (an integer in basic units\~\c
1327 Terminates the processing of the current file; issued as the last
1329 .I intermediate @g@troff
1336 Generate trailer information, if any.
1340 this is actually just ignored.
1346 Set name of device to word
1348 a sequence of characters ended by the next whitespace character.
1350 The possible device names coincide with those from the groff
1354 This is the first command of the
1361 Configure underlining of spaces.
1365 is\~1, start underlining of spaces;
1368 is\~0, stop underlining of spaces.
1370 This is needed for the
1374 mode and is ignored otherwise.
1382 .x-command X anything
1386 uninterpreted to the device.
1388 If the line following this command starts with a
1390 character this line is interpreted as a continuation line in the
1395 is ignored, but a newline character is sent instead to the device, the
1396 rest of the line is sent uninterpreted.
1398 The same applies to all following lines until the first character of a
1403 This command is generated by the
1406 .BR \*[@backslash]X .
1408 The line-continuing feature is a
1413 .\" ====================================================================
1414 .SS "Obsolete Command"
1415 .\" ====================================================================
1419 output, emitting a single glyph was mostly done by a very
1420 strange command that combined a horizontal move and the printing of a
1423 It didn't have a command code, but is represented by a 3-character
1424 argument consisting of exactly 2\~digits and a character.
1430 (exactly two decimal digits) basic units\~\c
1432 then print glyph with single-letter name\~\c
1441 .I syntactical space
1442 around and within this command is allowed to be added.
1444 Only when a preceding command on the same line ends with an argument
1445 of variable length a separating space is obligatory.
1450 large clusters of these and other commands were used, mostly without
1451 spaces; this made such output almost unreadable.
1457 For modern high-resolution devices, this command does not make sense
1458 because the width of the glyphs can become much larger than two
1463 this is only used for the devices
1475 provide a better functionality.
1478 .\" ====================================================================
1479 .SH "POSTPROCESSING"
1480 .\" ====================================================================
1484 postprocessors are programs that have the task to translate the
1485 .I intermediate output
1486 into actions that are sent to a device.
1488 A device can be some piece of hardware such as a printer, or a software
1489 file format suitable for graphical or text processing.
1493 system provides powerful means that make the programming of such
1494 postprocessors an easy task.
1496 There is a library function that parses the
1497 .I intermediate output
1498 and sends the information obtained to the device via methods of a
1499 class with a common interface for each device.
1503 postprocessor must only redefine the methods of this class.
1506 see the reference in section \[lq]Files\[rq] below.
1509 .\" ====================================================================
1511 .\" ====================================================================
1513 This section presents the
1514 .I intermediate output
1515 generated from the same input for three different devices.
1517 The input is the sentence
1521 on the command line.
1525 High-resolution device
1532 \fBshell>\fP echo "hell world" | groff \-Z \-T ps
1563 This output can be fed into the postprocessor
1564 .BR grops (@MAN1EXT@)
1565 to get its representation as a PostScript file, or
1566 .BR gropdf (@MAN1EXT@)
1567 to output directly to PDF.
1571 Low-resolution device
1577 This is similar to the high-resolution device except that the
1578 positioning is done at a minor scale.
1580 Some comments (lines starting with
1582 were added for clarification; they were not generated by the
1588 \fBshell>\fP "hell world" | groff \-Z \-T latin1
1599 .I "# begin a new page"
1607 .I "# initial positioning on the page"
1611 .I "# write text \[oq]hell\[cq]"
1614 .I "# inform about a space, and do it by a horizontal jump"
1617 .I "# write text \[oq]world\[cq]"
1620 .I "# announce line break, but do nothing because ..."
1623 .I "# ... the end of the document has been reached"
1634 This output can be fed into the postprocessor
1635 .BR grotty (@MAN1EXT@)
1636 to get a formatted text document.
1640 Classical style output
1645 As a computer monitor has a very low resolution compared to modern
1647 .I intermediate output
1648 for the X\~devices can use the jump-and-write command with its 2-digit
1654 \fBshell>\fP "hell world" | groff \-Z \-T X100
1670 .I "# write text with old-style jump-and-write command"
1672 ch07e07l03lw06w11o07r05l03dh7
1683 This output can be fed into the postprocessor
1686 .BR \%gxditview (@MAN1EXT@)
1687 for displaying in\~X.
1691 Due to the obsolete jump-and-write command, the text clusters in the
1692 classical output are almost unreadable.
1695 .\" ====================================================================
1697 .\" ====================================================================
1700 .I intermediate output
1703 was first documented in
1707 .I groff intermediate output
1708 format is compatible with this specification except for the following
1713 The classical quasi device independence is not yet implemented.
1717 The old hardware was very different from what we use today.
1721 devices are also fundamentally different from the ones in
1725 For example, the classical PostScript device was called
1727 and had a resolution of 720 units per inch,
1731 device has a resolution of 72000 units per inch.
1733 Maybe, by implementing some rescaling mechanism similar to the
1734 classical quasi device independence, these could be integrated into
1740 The B-spline command
1742 is correctly handled by the
1743 .I intermediate output
1744 parser, but the drawing routines aren't implemented in some of the
1745 postprocessor programs.
1749 The argument of the commands
1753 has the implicit unit scaled point\~\c
1762 This isn't an incompatibility, but a compatible extension, for both
1763 units coincide for all devices without a
1765 parameter, including all classical and the
1771 devices with a sizescale parameter either did not exist, had a
1772 different name, or seem to have had a different resolution.
1774 So conflicts with classical devices are very unlikely.
1777 .ie \n[@STUPID_DRAWING_POSITIONING]=1 \{\
1779 The position changing after the commands
1784 is illogical, but as old versions of groff used this feature it is
1785 kept for compatibility reasons.
1786 .\} \" @STUPID_DRAWING_POSITIONING
1789 Temporarily, there existed some confusion on the positioning after the
1795 This has been clarified by establishing the classical rule for all
1796 groff drawing commands:
1802 The position after a graphic object has been drawn is at its end;
1803 for circles and ellipses, the "end" is at the right side.
1809 From this, the positionings specified for the drawing commands above
1810 follow quite naturally.
1811 .\} \" @STUPID_DRAWING_POSITIONING
1814 The differences between
1819 .BR groff_diff (@MAN7EXT@).
1822 .\" ====================================================================
1824 .\" ====================================================================
1827 .IR @FONTDIR@/dev name /DESC
1828 Device description file for device
1832 .I src/libs/libdriver/input.cpp
1833 Defines the parser and postprocessor for the
1837 It is located relative to the top directory of the
1841 This parser is the definitive specification of the
1842 .I groff intermediate output
1846 .\" ====================================================================
1848 .\" ====================================================================
1849 James Clark wrote an early version of this document, which described
1850 only the differences between
1852 output format and that of GNU
1855 The present version was completely rewritten in 2001 by
1856 .MT groff\-bernd.warken\-72@\:web.de
1861 .\" ====================================================================
1863 .\" ====================================================================
1866 .BR groff (@MAN7EXT@)
1867 refers to a manual page; here
1871 of the man page documentation system.
1873 To read the example, look up section\~@MAN7EXT@ in your desktop help
1874 system or call from the shell prompt
1880 \fBshell>\fP man @MAN7EXT@ groff
1886 For more details, see
1891 .BR groff (@MAN1EXT@)
1894 and further readings on groff.
1898 .BR groff (@MAN7EXT@)
1901 language such as numerical units and escape sequences.
1905 .BR groff_font (@MAN5EXT@)
1906 for details on the device scaling parameters of the
1912 .BR @g@troff (@MAN1EXT@)
1913 generates the device-independent intermediate output.
1917 .BR roff (@MAN7EXT@)
1918 for historical aspects and the general structure of roff systems.
1922 .BR groff_diff (@MAN7EXT@)
1923 The differences between the intermediate output in groff and classical
1928 .BR gxditview (@MAN1EXT@)
1935 .BR \%grodvi (@MAN1EXT@),
1936 .BR \%grohtml (@MAN1EXT@),
1937 .BR \%grolbp (@MAN1EXT@),
1938 .BR \%grolj4 (@MAN1EXT@),
1939 .BR \%grops (@MAN1EXT@),
1940 .BR \%grotty (@MAN1EXT@)
1943 the groff postprocessor programs.
1948 .IR "Groff: The GNU Implementation of troff" ,
1949 by Trent A.\& Fisher and Werner Lemberg,
1954 You can browse it interactively with \[lq]info groff\[rq].
1959 .I classical troff output language
1960 is described in two AT&T Bell Labs CSTR documents available on-line at
1961 .UR http://\:cm.bell\-labs.com/\:cm/\:cs/\:cstr.html
1968 .I A Typesetter-independent TROFF
1971 is the original and most comprehensive documentation on the output
1973 .UR http://\:cm.bell\-labs.com/\:cm/\:cs/\:cstr/\:97.ps.gz
1980 The 1992 revision of the
1981 .I Nroff/\:Troff User's Manual
1983 .I J.\& F.\& Ossanna
1986 isn't as comprehensive as
1988 regarding the output language; see
1989 .UR http://\:cm.bell\-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz
1994 .\" Restore compatibility mode (for, e.g., Solaris 10/11).
1998 .\" ====================================================================
2000 .\" ====================================================================
2002 .\" Local Variables:
2006 .\" vim: set filetype=groff textwidth=72: