summaryrefslogtreecommitdiffstats
path: root/contrib/groff/doc/groff-6
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/groff/doc/groff-6')
-rw-r--r--contrib/groff/doc/groff-61462
1 files changed, 0 insertions, 1462 deletions
diff --git a/contrib/groff/doc/groff-6 b/contrib/groff/doc/groff-6
deleted file mode 100644
index f7f01e1..0000000
--- a/contrib/groff/doc/groff-6
+++ /dev/null
@@ -1,1462 +0,0 @@
-This is groff, produced by makeinfo version 4.3d from ./groff.texinfo.
-
-This manual documents GNU `troff' version 1.19.
-
- Copyright (C) 1994-2000, 2001, 2002, 2003 Free Software Foundation,
-Inc.
-
- Permission is granted to copy, distribute and/or modify this
- document under the terms of the GNU Free Documentation License,
- Version 1.1 or any later version published by the Free Software
- Foundation; with no Invariant Sections, with the Front-Cover texts
- being `A GNU Manual," and with the Back-Cover Texts as in (a)
- below. A copy of the license is included in the section entitled
- `GNU Free Documentation License."
-
- (a) The FSF's Back-Cover Text is: `You have freedom to copy and
- modify this GNU Manual, like GNU software. Copies published by
- the Free Software Foundation raise funds for GNU development."
-
-INFO-DIR-SECTION Typesetting
-START-INFO-DIR-ENTRY
-* Groff: (groff). The GNU troff document formatting system.
-END-INFO-DIR-ENTRY
-
-
-File: groff, Node: Changing Type Sizes, Next: Fractional Type Sizes, Prev: Sizes, Up: Sizes
-
-Changing Type Sizes
--------------------
-
- - Request: .ps [size]
- - Request: .ps +size
- - Request: .ps -size
- - Escape: \ssize
- - Register: \n[.s]
- Use the `ps' request or the `\s' escape to change (increase,
- decrease) the type size (in points). Specify SIZE as either an
- absolute point size, or as a relative change from the current size.
- The size 0, or no argument, goes back to the previous size.
-
- Default scaling indicator of `size' is `z'. If `size' is zero or
- negative, it is set to 1u.
-
- The read-only number register `.s' returns the point size in
- points as a decimal fraction. This is a string. To get the point
- size in scaled points, use the `.ps' register instead.
-
- `.s' is associated with the current environment (*note
- Environments::).
-
-
- snap, snap,
- .ps +2
- grin, grin,
- .ps +2
- wink, wink, \s+2nudge, nudge,\s+8 say no more!
- .ps 10
-
- The `\s' escape may be called in a variety of ways. Much like
- other escapes there must be a way to determine where the argument
- ends and the text begins. Any of the following forms are valid:
-
- `\sN'
- Set the point size to N points. N must be either 0 or in the
- range 4 to 39.
-
- `\s+N'
- `\s-N'
- Increase or decrease the point size by N points. N must be
- exactly one digit.
-
- `\s(NN'
- Set the point size to NN points. NN must be exactly two
- digits.
-
- `\s+(NN'
- `\s-(NN'
- `\s(+NN'
- `\s(-NN'
- Increase or decrease the point size by NN points. NN must be
- exactly two digits.
-
- Note that `\s' doesn't produce an input token in `gtroff'. As a
- consequence, it can be used in requests like `mc' (which expects a
- single character as an argument) to change the font on the fly:
-
-
- .mc \s[20]x\s[0]
-
- *Note Fractional Type Sizes::, for yet another syntactical form of
- using the `\s' escape.
-
- - Request: .sizes s1 s2 ... sn [0]
- Some devices may only have certain permissible sizes, in which case
- `gtroff' rounds to the nearest permissible size. The `DESC' file
- specifies which sizes are permissible for the device.
-
- Use the `sizes' request to change the permissible sizes for the
- current output device. Arguments are in scaled points; the
- `sizescale' line in the `DESC' file for the output device provides
- the scaling factor. For example, if the scaling factor is 1000,
- then the value 12000 is 12 points.
-
- Each argument can be a single point size (such as `12000'), or a
- range of sizes (such as `4000-72000'). You can optionally end the
- list with a zero.
-
- - Request: .vs [space]
- - Request: .vs +space
- - Request: .vs -space
- - Register: \n[.v]
- Change (increase, decrease) the vertical spacing by SPACE. The
- default scaling indicator is `p'.
-
- If `vs' is called without an argument, the vertical spacing is
- reset to the previous value before the last call to `vs'.
-
- `gtroff' creates a warning of type `range' if SPACE is negative;
- the vertical spacing is then set to the vertical resolution (as
- given in the `.V' register).
-
- The read-only number register `.v' contains the current vertical
- spacing; it is associated with the current environment (*note
- Environments::).
-
- The effective vertical line spacing consists of four components.
-
- * The vertical line spacing as set with the `vs' request.
-
- * The "post-vertical line spacing" as set with the `pvs' request.
- This is vertical space which will be added after a line has been
- output.
-
- * The "extra pre-vertical line space" as set with the `\x' request,
- using a negative value. This is vertical space which will be
- added once before the current line has been output.
-
- * The "extra post-vertical line space" as set with the `\x' request,
- using a positive value. This is vertical space which will be
- added once after the current line has been output.
-
- It is usually better to use `vs' or `pvs' instead of `ls' to produce
-double-spaced documents: `vs' and `pvs' have a finer granularity for
-the inserted vertical space compared to `ls'; furthermore, certain
-preprocessors assume single-spacing.
-
- *Note Manipulating Spacing::, for more details on the `\x' escape
-and the `ls' request.
-
- - Request: .pvs [space]
- - Request: .pvs +space
- - Request: .pvs -space
- - Register: \n[.pvs]
- Change (increase, decrease) the post-vertical spacing by SPACE.
- The default scaling indicator is `p'.
-
- If `pvs' is called without an argument, the post-vertical spacing
- is reset to the previous value before the last call to `pvs'.
-
- `gtroff' creates a warning of type `range' if SPACE is zero or
- negative; the vertical spacing is then set to zero.
-
- The read-only number register `.pvs' contains the current
- post-vertical spacing; it is associated with the current
- environment (*note Environments::).
-
-
-File: groff, Node: Fractional Type Sizes, Prev: Changing Type Sizes, Up: Sizes
-
-Fractional Type Sizes
----------------------
-
- A "scaled point" is equal to 1/SIZESCALE points, where SIZESCALE is
-specified in the `DESC' file (1 by default). There is a new scale
-indicator `z' which has the effect of multiplying by SIZESCALE.
-Requests and escape sequences in `gtroff' interpret arguments that
-represent a point size as being in units of scaled points, but they
-evaluate each such argument using a default scale indicator of `z'.
-Arguments treated in this way are the argument to the `ps' request, the
-third argument to the `cs' request, the second and fourth arguments to
-the `tkf' request, the argument to the `\H' escape sequence, and those
-variants of the `\s' escape sequence that take a numeric expression as
-their argument (see below).
-
- For example, suppose SIZESCALE is 1000; then a scaled point is
-equivalent to a millipoint; the request `.ps 10.25' is equivalent to
-`.ps 10.25z' and thus sets the point size to 10250 scaled points, which
-is equal to 10.25 points.
-
- `gtroff' disallows the use of the `z' scale indicator in instances
-where it would make no sense, such as a numeric expression whose
-default scale indicator was neither `u' nor `z'. Similarly it would
-make no sense to use a scaling indicator other than `z' or `u' in a
-numeric expression whose default scale indicator was `z', and so
-`gtroff' disallows this as well.
-
- There is also new scale indicator `s' which multiplies by the number
-of units in a scaled point. So, for example, `\n[.ps]s' is equal to
-`1m'. Be sure not to confuse the `s' and `z' scale indicators.
-
- - Register: \n[.ps]
- A read-only number register returning the point size in scaled
- points.
-
- `.ps' is associated with the current environment (*note
- Environments::).
-
- - Register: \n[.psr]
- - Register: \n[.sr]
- The last-requested point size in scaled points is contained in the
- `.psr' read-only number register. The last requested point size
- in points as a decimal fraction can be found in `.sr'. This is a
- string-valued read-only number register.
-
- Note that the requested point sizes are device-independent, whereas
- the values returned by the `.ps' and `.s' registers are not. For
- example, if a point size of 11pt is requested, and a `sizes'
- request (or a `sizescale' line in a `DESC' file) specifies 10.95pt
- instead, this value is actually used.
-
- Both registers are associated with the current environment (*note
- Environments::).
-
- The `\s' escape has the following syntax for working with fractional
-type sizes:
-
-`\s[N]'
-`\s'N''
- Set the point size to N scaled points; N is a numeric expression
- with a default scale indicator of `z'.
-
-`\s[+N]'
-`\s[-N]'
-`\s+[N]'
-`\s-[N]'
-`\s'+N''
-`\s'-N''
-`\s+'N''
-`\s-'N''
- Increase or or decrease the point size by N scaled points; N is a
- numeric expression with a default scale indicator of `z'.
-
- *Note Font Files::.
-
-
-File: groff, Node: Strings, Next: Conditionals and Loops, Prev: Sizes, Up: gtroff Reference
-
-Strings
-=======
-
- `gtroff' has string variables, which are entirely for user
-convenience (i.e. there are no built-in strings exept `.T', but even
-this is a read-write string variable).
-
- - Request: .ds name [string]
- - Request: .ds1 name [string]
- - Escape: \*n
- - Escape: \*(nm
- - Escape: \*[name arg1 arg2 ...]
- Define and access a string variable NAME (one-character name N,
- two-character name NM). If NAME already exists, `ds' overwrites
- the previous definition. Only the syntax form using brackets can
- take arguments which are handled identically to macro arguments;
- the single exception is that a closing bracket as an argument must
- be enclosed in double quotes. *Note Request and Macro
- Arguments::, and *Note Parameters::.
-
- Example:
-
-
- .ds foo a \\$1 test
- .
- This is \*[foo nice].
- => This is a nice test.
-
- The `\*' escape "interpolates" (expands in-place) a
- previously-defined string variable. To be more precise, the stored
- string is pushed onto the input stack which is then parsed by
- `gtroff'. Similar to number registers, it is possible to nest
- strings, i.e. string variables can be called within string
- variables.
-
- If the string named by the `\*' escape does not exist, it is
- defined as empty, and a warning of type `mac' is emitted (see
- *Note Debugging::, for more details).
-
- *Caution:* Unlike other requests, the second argument to the `ds'
- request takes up the entire line including trailing spaces. This
- means that comments on a line with such a request can introduce
- unwanted space into a string.
-
-
- .ds UX \s-1UNIX\s0\u\s-3tm\s0\d \" UNIX trademark
-
- Instead the comment should be put on another line or have the
- comment escape adjacent with the end of the string.
-
-
- .ds UX \s-1UNIX\s0\u\s-3tm\s0\d\" UNIX trademark
-
- To produce leading space the string can be started with a double
- quote. No trailing quote is needed; in fact, any trailing quote is
- included in your string.
-
-
- .ds sign " Yours in a white wine sauce,
-
- Strings are not limited to a single line of text. A string can
- span several lines by escaping the newlines with a backslash. The
- resulting string is stored _without_ the newlines.
-
-
- .ds foo lots and lots \
- of text are on these \
- next several lines
-
- It is not possible to have real newlines in a string. To put a
- single double quote character into a string, use two consecutive
- double quote characters.
-
- The `ds1' request turns off compatibility mode while interpreting
- a string. To be more precise, a "compatibility save" input token
- is inserted at the beginning of the string, and a "compatibility
- restore" input token at the end.
-
-
- .nr xxx 12345
- .ds aa The value of xxx is \\n[xxx].
- .ds1 bb The value of xxx ix \\n[xxx].
- .
- .cp 1
- .
- \*(aa
- => warning: number register `[' not defined
- => The value of xxx is 0xxx].
- \*(bb
- => The value of xxx ix 12345.
-
- Strings, macros, and diversions (and boxes) share the same name
- space. Internally, even the same mechanism is used to store them.
- This has some interesting consequences. For example, it is
- possible to call a macro with string syntax and vice versa.
-
-
- .de xxx
- a funny test.
- ..
- This is \*[xxx]
- => This is a funny test.
-
- .ds yyy a funny test
- This is
- .yyy
- => This is a funny test.
-
- Diversions and boxes can be also called with string syntax.
-
- Another consequence is that you can copy one-line diversions or
- boxes to a string.
-
-
- .di xxx
- a \fItest\fR
- .br
- .di
- .ds yyy This is \*[xxx]\c
- \*[yyy].
- => This is a test.
-
- As the previous example shows, it is possible to store formatted
- output in strings. The `\c' escape prevents the insertion of an
- additional blank line in the output.
-
- Copying diversions longer than a single output line produces
- unexpected results.
-
-
- .di xxx
- a funny
- .br
- test
- .br
- .di
- .ds yyy This is \*[xxx]\c
- \*[yyy].
- => test This is a funny.
-
- Usually, it is not predictable whether a diversion contains one or
- more output lines, so this mechanism should be avoided. With UNIX
- `troff', this was the only solution to strip off a final newline
- from a diversion. Another disadvantage is that the spaces in the
- copied string are already formatted, making them unstretchable.
- This can cause ugly results.
-
- A clean solution to this problem is available in GNU `troff',
- using the requests `chop' to remove the final newline of a
- diversion, and `unformat' to make the horizontal spaces
- stretchable again.
-
-
- .box xxx
- a funny
- .br
- test
- .br
- .box
- .chop xxx
- .unformat xxx
- This is \*[xxx].
- => This is a funny test.
-
- *Note Gtroff Internals::, for more information.
-
- - Request: .as name [string]
- - Request: .as1 name [string]
- The `as' request is similar to `ds' but appends STRING to the
- string stored as NAME instead of redefining it. If NAME doesn't
- exist yet, it is created.
-
-
- .as sign " with shallots, onions and garlic,
-
- The `as1' request is similar to `as', but compatibility mode is
- switched off while the appended string is interpreted. To be more
- precise, a "compatibility save" input token is inserted at the
- beginning of the appended string, and a "compatibility restore"
- input token at the end.
-
- Rudimentary string manipulation routines are given with the next two
-requests.
-
- - Request: .substring str n1 [n2]
- Replace the string named STR with the substring defined by the
- indices N1 and N2. The first character in the string has index 0.
- If N2 is omitted, it is taken to be equal to the string's length.
- If the index value N1 or N2 is negative, it is counted from the
- end of the string, going backwards: The last character has
- index -1, the character before the last character has index -2,
- etc.
-
-
- .ds xxx abcdefgh
- .substring xxx 1 -4
- \*[xxx]
- => bcde
-
-
- - Request: .length reg str
- Compute the number of characters of STR and return it in the
- number register REG. If REG doesn't exist, it is created. `str'
- is read in copy mode.
-
-
- .ds xxx abcd\h'3i'efgh
- .length yyy \*[xxx]
- \n[yyy]
- => 14
-
-
- - Request: .rn xx yy
- Rename the request, macro, diversion, or string XX to YY.
-
- - Request: .rm xx
- Remove the request, macro, diversion, or string XX. `gtroff'
- treats subsequent invocations as if the object had never been
- defined.
-
- - Request: .als new old
- Create an alias named NEW for the request, string, macro, or
- diversion object named OLD. The new name and the old name are
- exactly equivalent (it is similar to a hard rather than a soft
- link). If OLD is undefined, `gtroff' generates a warning of type
- `mac' and ignores the request.
-
- - Request: .chop xx
- Remove (chop) the last character from the macro, string, or
- diversion named XX. This is useful for removing the newline from
- the end of diversions that are to be interpolated as strings.
- This command can be used repeatedly; see *Note Gtroff Internals::,
- for details on nodes inserted additionally by `gtroff'.
-
- *Note Identifiers::, and *Note Comments::.
-
-
-File: groff, Node: Conditionals and Loops, Next: Writing Macros, Prev: Strings, Up: gtroff Reference
-
-Conditionals and Loops
-======================
-
-* Menu:
-
-* Operators in Conditionals::
-* if-else::
-* while::
-
-
-File: groff, Node: Operators in Conditionals, Next: if-else, Prev: Conditionals and Loops, Up: Conditionals and Loops
-
-Operators in Conditionals
--------------------------
-
- In `if' and `while' requests, there are several more operators
-available:
-
-`e'
-`o'
- True if the current page is even or odd numbered (respectively).
-
-`n'
- True if the document is being processed in nroff mode (i.e., the
- `.nroff' command has been issued).
-
-`t'
- True if the document is being processed in troff mode (i.e., the
- `.troff' command has been issued).
-
-`v'
- Always false. This condition is for compatibility with other
- `troff' versions only.
-
-`'XXX'YYY''
- True if the string XXX is equal to the string YYY. Other
- characters can be used in place of the single quotes; the same set
- of delimiters as for the `\D' escape is used (*note Escapes::).
- `gtroff' formats the strings before being compared:
-
-
- .ie "|"\fR|\fP" \
- true
- .el \
- false
- => true
-
- The resulting motions, glyph sizes, and fonts have to match,(1)
- (*note Operators in Conditionals-Footnote-1::) and not the
- individual motion, size, and font requests. In the previous
- example, `|' and `\fR|\fP' both result in a roman `|' glyph with
- the same point size and at the same location on the page, so the
- strings are equal. If `.ft I' had been added before the `.ie',
- the result would be "false" because (the first) `|' produces an
- italic `|' rather than a roman one.
-
-`r XXX'
- True if there is a number register named XXX.
-
-`d XXX'
- True if there is a string, macro, diversion, or request named XXX.
-
-`m XXX'
- True if there is a color named XXX.
-
-`c G'
- True if there is a glyph G available(2) (*note Operators in
- Conditionals-Footnote-2::); G is either an ASCII character or a
- special character (`\(GG' or `\[GGG]'); the condition is also true
- if G has been defined by the `char' request.
-
- Note that these operators can't be combined with other operators like
-`:' or `&'; only a leading `!' (without whitespace between the
-exclamation mark and the operator) can be used to negate the result.
-
-
- .nr xxx 1
- .ie !r xxx \
- true
- .el \
- false
- => false
-
- A whitespace after `!' always evaluates to zero (this bizarre
-behaviour is due to compatibility with UNIX `troff').
-
-
- .nr xxx 1
- .ie ! r xxx \
- true
- .el \
- false
- => r xxx true
-
- It is possible to omit the whitespace before the argument to the
-`r', `d', and `c' operators.
-
- *Note Expressions::.
-
-
-File: groff, Node: Operators in Conditionals-Footnotes, Up: Operators in Conditionals
-
- (1) The created output nodes must be identical. *Note Gtroff
-Internals::.
-
- (2) The name of this conditional operator is a misnomer since it
-tests names of output glyphs.
-
-
-File: groff, Node: if-else, Next: while, Prev: Operators in Conditionals, Up: Conditionals and Loops
-
-if-else
--------
-
- `gtroff' has if-then-else constructs like other languages, although
-the formatting can be painful.
-
- - Request: .if expr anything
- Evaluate the expression EXPR, and executes ANYTHING (the remainder
- of the line) if EXPR evaluates to non-zero (true). ANYTHING is
- interpreted as though it was on a line by itself (except that
- leading spaces are swallowed). *Note Expressions::, for more info.
-
-
- .nr xxx 1
- .nr yyy 2
- .if ((\n[xxx] == 1) & (\n[yyy] == 2)) true
- => true
-
-
- - Request: .nop anything
- Executes ANYTHING. This is similar to `.if 1'.
-
- - Request: .ie expr anything
- - Request: .el anything
- Use the `ie' and `el' requests to write an if-then-else. The
- first request is the `if' part and the latter is the `else' part.
-
-
- .ie n .ls 2 \" double-spacing in nroff
- .el .ls 1 \" single-spacing in troff
-
-
- - Escape: \{
- - Escape: \}
- In many cases, an if (or if-else) construct needs to execute more
- than one request. This can be done using the `\{' and `\}'
- escapes. The following example shows the possible ways to use
- these escapes (note the position of the opening and closing
- braces).
-
-
- .ie t \{\
- . ds lq ``
- . ds rq ''
- .\}
- .el \
- .\{\
- . ds lq "
- . ds rq "\}
-
-
- *Note Expressions::.
-
-
-File: groff, Node: while, Prev: if-else, Up: Conditionals and Loops
-
-while
------
-
- `gtroff' provides a looping construct using the `while' request,
-which is used much like the `if' (and related) requests.
-
- - Request: .while expr anything
- Evaluate the expression EXPR, and repeatedly execute ANYTHING (the
- remainder of the line) until EXPR evaluates to 0.
-
-
- .nr a 0 1
- .while (\na < 9) \{\
- \n+a,
- .\}
- \n+a
- => 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
-
- Some remarks.
-
- * The body of a `while' request is treated like the body of a
- `de' request: `gtroff' temporarily stores it in a macro which
- is deleted after the loop has been exited. It can
- considerably slow down a macro if the body of the `while'
- request (within the macro) is large. Each time the macro is
- executed, the `while' body is parsed and stored again as a
- temporary macro.
-
-
- .de xxx
- . nr num 10
- . while (\\n[num] > 0) \{\
- . \" many lines of code
- . nr num -1
- . \}
- ..
-
- The traditional and ofter better solution (UNIX `troff'
- doesn't have the `while' request) is to use a recursive macro
- instead which is parsed only once during its definition.
-
-
- .de yyy
- . if (\\n[num] > 0) \{\
- . \" many lines of code
- . nr num -1
- . yyy
- . \}
- ..
- .
- .de xxx
- . nr num 10
- . yyy
- ..
-
- Note that the number of available recursion levels is set
- to 1000 (this is a compile-time constant value of `gtroff').
-
- * The closing brace of a `while' body must end a line.
-
-
- .if 1 \{\
- . nr a 0 1
- . while (\n[a] < 10) \{\
- . nop \n+[a]
- .\}\}
- => unbalanced \{ \}
-
-
- - Request: .break
- Break out of a `while' loop. Be sure not to confuse this with the
- `br' request (causing a line break).
-
- - Request: .continue
- Finish the current iteration of a `while' loop, immediately
- restarting the next iteration.
-
- *Note Expressions::.
-
-
-File: groff, Node: Writing Macros, Next: Page Motions, Prev: Conditionals and Loops, Up: gtroff Reference
-
-Writing Macros
-==============
-
- A "macro" is a collection of text and embedded commands which can be
-invoked multiple times. Use macros to define common operations.
-
- - Request: .de name [end]
- - Request: .de1 name [end]
- - Request: .dei name [end]
- Define a new macro named NAME. `gtroff' copies subsequent lines
- (starting with the next one) into an internal buffer until it
- encounters the line `..' (two dots). The optional second argument
- to `de' changes this to a macro to `.END'.
-
- There can be whitespace after the first dot in the line containing
- the ending token (either `.' or macro `END').
-
- Here a small example macro called `P' which causes a break and
- inserts some vertical space. It could be used to separate
- paragraphs.
-
-
- .de P
- . br
- . sp .8v
- ..
-
- The following example defines a macro within another. Remember
- that expansion must be protected twice; once for reading the macro
- and once for executing.
-
-
- \# a dummy macro to avoid a warning
- .de end
- ..
- .
- .de foo
- . de bar end
- . nop \f[B]Hallo \\\\$1!\f[]
- . end
- ..
- .
- .foo
- .bar Joe
- => Hallo Joe!
-
- Since `\f' has no expansion, it isn't necessary to protect its
- backslash. Had we defined another macro within `bar' which takes
- a parameter, eight backslashes would be necessary before `$1'.
-
- The `de1' request turns off compatibility mode while executing the
- macro. On entry, the current compatibility mode is saved and
- restored at exit.
-
-
- .nr xxx 12345
- .
- .de aa
- The value of xxx is \\n[xxx].
- ..
- .de1 bb
- The value of xxx ix \\n[xxx].
- ..
- .
- .cp 1
- .
- .aa
- => warning: number register ' not defined
- => The value of xxx is 0xxx].
- .bb
- => The value of xxx ix 12345.
-
- The `dei' request defines a macro indirectly. That is, it expands
- strings whose names are NAME or END before performing the append.
-
- This:
-
-
- .ds xx aa
- .ds yy bb
- .dei xx yy
-
- is equivalent to:
-
-
- .de aa bb
-
- Using `trace.tmac', you can trace calls to `de' and `de1'.
-
- Note that macro identifiers are shared with identifiers for
- strings and diversions.
-
- - Request: .am name [end]
- - Request: .am1 name [end]
- - Request: .ami name [end]
- Works similarly to `de' except it appends onto the macro named
- NAME. So, to make the previously defined `P' macro actually do
- indented instead of block paragraphs, add the necessary code to the
- existing macro like this:
-
-
- .am P
- .ti +5n
- ..
-
- The `am1' request turns off compatibility mode while executing the
- appended macro piece. To be more precise, a "compatibility save"
- input token is inserted at the beginning of the appended code, and
- a "compatibility restore" input token at the end.
-
- The `ami' request appends indirectly, meaning that `gtroff'
- expands strings whose names are NAME or END before performing the
- append.
-
- Using `trace.tmac', you can trace calls to `am' and `am1'.
-
- *Note Strings::, for the `als' request to rename a macro.
-
- The `de', `am', `di', `da', `ds', and `as' requests (together with
-its variants) only create a new object if the name of the macro,
-diversion or string diversion is currently undefined or if it is
-defined to be a request; normally they modify the value of an existing
-object.
-
- - Request: .return
- Exit a macro, immediately returning to the caller.
-
-* Menu:
-
-* Copy-in Mode::
-* Parameters::
-
-
-File: groff, Node: Copy-in Mode, Next: Parameters, Prev: Writing Macros, Up: Writing Macros
-
-Copy-in Mode
-------------
-
- When `gtroff' reads in the text for a macro, string, or diversion,
-it copies the text (including request lines, but excluding escapes) into
-an internal buffer. Escapes are converted into an internal form,
-except for `\n', `\$', `\*', `\\' and `\<RET>' which are evaluated and
-inserted into the text where the escape was located. This is known as
-"copy-in" mode or "copy" mode.
-
- What this means is that you can specify when these escapes are to be
-evaluated (either at copy-in time or at the time of use) by insulating
-the escapes with an extra backslash. Compare this to the `\def' and
-`\edef' commands in TeX.
-
- The following example prints the numbers 20 and 10:
-
-
- .nr x 20
- .de y
- .nr x 10
- \&\nx
- \&\\nx
- ..
- .y
-
-
-File: groff, Node: Parameters, Prev: Copy-in Mode, Up: Writing Macros
-
-Parameters
-----------
-
- The arguments to a macro or string can be examined using a variety of
-escapes.
-
- - Register: \n[.$]
- The number of arguments passed to a macro or string. This is a
- read-only number register.
-
- Any individual argument can be retrieved with one of the following
-escapes:
-
- - Escape: \$n
- - Escape: \$(nn
- - Escape: \$[nnn]
- Retrieve the Nth, NNth or NNNth argument. As usual, the first
- form only accepts a single number (larger than zero), the second a
- two-digit number (larger or equal to 10), and the third any
- positive integer value (larger than zero). Macros and strings can
- have an unlimited number of arguments. Note that due to copy-in
- mode, use two backslashes on these in actual use to prevent
- interpolation until the macro is actually invoked.
-
- - Request: .shift [n]
- Shift the arguments 1 position, or as many positions as specified
- by its argument. After executing this request, argument I becomes
- argument I-N; arguments 1 to N are no longer available. Shifting
- by negative amounts is currently undefined.
-
- - Escape: \$*
- - Escape: \$@
- In some cases it is convenient to use all of the arguments at once
- (for example, to pass the arguments along to another macro). The
- `\$*' escape concatenates all the arguments separated by spaces. A
- similar escape is `\$@', which concatenates all the arguments with
- each surrounded by double quotes, and separated by spaces. If not
- in compatibility mode, the input level of double quotes is
- preserved (see *Note Request and Macro Arguments::).
-
- - Escape: \$0
- The name used to invoke the current macro. The `als' request can
- make a macro have more than one name.
-
-
- .de generic-macro
- . ...
- . if \\n[error] \{\
- . tm \\$0: Houston, we have a problem.
- . return
- . \}
- ..
- .
- .als foo generic-macro
- .als bar generic-macro
-
-
- *Note Request and Macro Arguments::.
-
-
-File: groff, Node: Page Motions, Next: Drawing Requests, Prev: Writing Macros, Up: gtroff Reference
-
-Page Motions
-============
-
- *Note Manipulating Spacing::, for a discussion of the main request
-for vertical motion, `sp'.
-
- - Request: .mk [reg]
- - Request: .rt [dist]
- The request `mk' can be used to mark a location on a page, for
- movement to later. This request takes a register name as an
- argument in which to store the current page location. With no
- argument it stores the location in an internal register. The
- results of this can be used later by the `rt' or the `sp' request
- (or the `\v' escape).
-
- The `rt' request returns _upwards_ to the location marked with the
- last `mk' request. If used with an argument, return to a position
- which distance from the top of the page is DIST (no previous call
- to `mk' is necessary in this case). Default scaling indicator is
- `v'.
-
- Here a primitive solution for a two-column macro.
-
-
- .nr column-length 1.5i
- .nr column-gap 4m
- .nr bottom-margin 1m
- .
-
-
- .de 2c
- . br
- . mk
- . ll \\n[column-length]u
- . wh -\\n[bottom-margin]u 2c-trap
- . nr right-side 0
- ..
- .
-
-
- .de 2c-trap
- . ie \\n[right-side] \{\
- . nr right-side 0
- . po -(\\n[column-length]u + \\n[column-gap]u)
- . \" remove trap
- . wh -\\n[bottom-margin]u
- . \}
- . el \{\
- . \" switch to right side
- . nr right-side 1
- . po +(\\n[column-length]u + \\n[column-gap]u)
- . rt
- . \}
- ..
- .
-
-
- .pl 1.5i
- .ll 4i
- This is a small test which shows how the
- rt request works in combination with mk.
-
- .2c
- Starting here, text is typeset in two columns.
- Note that this implementation isn't robust
- and thus not suited for a real two-column
- macro.
-
- Result:
-
-
- This is a small test which shows how the
- rt request works in combination with mk.
-
- Starting here, isn't robust
- text is typeset and thus not
- in two columns. suited for a
- Note that this real two-column
- implementation macro.
-
-
- The following escapes give fine control of movements about the page.
-
- - Escape: \v'e'
- Move vertically, usually from the current location on the page (if
- no absolute position operator `|' is used). The argument E
- specifies the distance to move; positive is downwards and negative
- upwards. The default scaling indicator for this escape is `v'.
- Beware, however, that `gtroff' continues text processing at the
- point where the motion ends, so you should always balance motions
- to avoid interference with text processing.
-
- `\v' doesn't trigger a trap. This can be quite useful; for
- example, consider a page bottom trap macro which prints a marker
- in the margin to indicate continuation of a footnote or something
- similar.
-
- There are some special-case escapes for vertical motion.
-
- - Escape: \r
- Move upwards 1v.
-
- - Escape: \u
- Move upwards .5v.
-
- - Escape: \d
- Move down .5v.
-
- - Escape: \h'e'
- Move horizontally, usually from the current location (if no
- absolute position operator `|' is used). The expression E
- indicates how far to move: positive is rightwards and negative
- leftwards. The default scaling indicator for this escape is `m'.
-
- This horizontal space is not discarded at the end of a line. To
- insert discardable space of a certain length use the `ss' request.
-
- There are a number of special-case escapes for horizontal motion.
-
- - Escape: \<SP>
- An unbreakable and unpaddable (i.e. not expanded during filling)
- space. (Note: This is a backslash followed by a space.)
-
- - Escape: \~
- An unbreakable space that stretches like a normal inter-word space
- when a line is adjusted.
-
- - Escape: \|
- A 1/6th em space. Ignored for TTY output devices (rounded to
- zero).
-
- - Escape: \^
- A 1/12th em space. Ignored for TTY output devices (rounded to
- zero).
-
- - Escape: \0
- A space the size of a digit.
-
- The following string sets the TeX logo:
-
-
- .ds TeX T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
-
- - Escape: \w'text'
- - Register: \n[st]
- - Register: \n[sb]
- - Register: \n[rst]
- - Register: \n[rsb]
- - Register: \n[ct]
- - Register: \n[ssc]
- - Register: \n[skw]
- Return the width of the specified TEXT in basic units. This
- allows horizontal movement based on the width of some arbitrary
- text (e.g. given as an argument to a macro).
-
-
- The length of the string `abc' is \w'abc'u.
- => The length of the string `abc' is 72u.
-
- Font changes may occur in TEXT which don't affect current settings.
-
- After use, `\w' sets several registers:
-
- `st'
- `sb'
- The highest and lowest point of the baseline, respectively,
- in TEXT.
-
- `rst'
- `rsb'
- Like the `st' and `sb' registers, but takes account of the
- heights and depths of glyphs. With other words, this gives
- the highest and lowest point of TEXT. Values below the
- baseline are negative.
-
- `ct'
- Defines the kinds of glyphs occurring in TEXT:
-
- 0
- only short glyphs, no descenders or tall glyphs.
-
- 1
- at least one descender.
-
- 2
- at least one tall glyph.
-
- 3
- at least one each of a descender and a tall glyph.
-
- `ssc'
- The amount of horizontal space (possibly negative) that
- should be added to the last glyph before a subscript.
-
- `skw'
- How far to right of the center of the last glyph in the `\w'
- argument, the center of an accent from a roman font should be
- placed over that glyph.
-
- - Escape: \kp
- - Escape: \k(ps
- - Escape: \k[position]
- Store the current horizontal position in the _input_ line in
- number register with name POSITION (one-character name P,
- two-character name PS). Use this, for example, to return to the
- beginning of a string for highlighting or other decoration.
-
- - Register: \n[hp]
- The current horizontal position at the input line.
-
- - Register: \n[.k]
- A read-only number register containing the current horizontal
- output position.
-
- - Escape: \o'abc'
- Overstrike glyphs A, B, C, ...; the glyphs are centered, and the
- resulting spacing is the largest width of the affected glyphs.
-
- - Escape: \zg
- Print glyph G with zero width, i.e., without spacing. Use this to
- overstrike glyphs left-aligned.
-
- - Escape: \Z'anything'
- Print ANYTHING, then restore the horizontal and vertical position.
- The argument may not contain tabs or leaders.
-
- The following is an example of a strike-through macro:
-
-
- .de ST
- .nr ww \w'\\$1'
- \Z@\v'-.25m'\l'\\n[ww]u'@\\$1
- ..
- .
- This is
- .ST "a test"
- an actual emergency!
-
-
-
-File: groff, Node: Drawing Requests, Next: Traps, Prev: Page Motions, Up: gtroff Reference
-
-Drawing Requests
-================
-
- `gtroff' provides a number of ways to draw lines and other figures
-on the page. Used in combination with the page motion commands (see
-*Note Page Motions::, for more info), a wide variety of figures can be
-drawn. However, for complex drawings these operations can be quite
-cumbersome, and it may be wise to use graphic preprocessors like `gpic'
-or `ggrn'. *Note gpic::, and *Note ggrn::, for more information.
-
- All drawing is done via escapes.
-
- - Escape: \l'l'
- - Escape: \l'lg'
- Draw a line horizontally. L is the length of the line to be
- drawn. If it is positive, start the line at the current location
- and draw to the right; its end point is the new current location.
- Negative values are handled differently: The line starts at the
- current location and draws to the left, but the current location
- doesn't move.
-
- L can also be specified absolutely (i.e. with a leading `|') which
- draws back to the beginning of the input line. Default scaling
- indicator is `m'.
-
- The optional second parameter G is a glyph to draw the line with.
- If this second argument is not specified, `gtroff' uses the
- underscore glyph, `\[ru]'.
-
- To separate the two arguments (to prevent `gtroff' from
- interpreting a drawing glyph as a scaling indicator if the glyph is
- represented by a single character) use `\&'.
-
- Here a small useful example:
-
-
- .de box
- \[br]\\$*\[br]\l'|0\[rn]'\l'|0\[ul]'
- ..
-
- Note that this works by outputting a box rule (a vertical line),
- then the text given as an argument and then another box rule.
- Finally, the line drawing escapes both draw from the current
- location to the beginning of the _input_ line - this works because
- the line length is negative, not moving the current point.
-
- - Escape: \L'l'
- - Escape: \L'lg'
- Draw vertical lines. Its parameters are similar to the `\l'
- escape, except that the default scaling indicator is `v'. The
- movement is downwards for positive values, and upwards for
- negative values. The default glyph is the box rule glyph,
- `\[br]'. As with the vertical motion escapes, text processing
- blindly continues where the line ends.
-
-
- This is a \L'3v'test.
-
- Here the result, produced with `grotty'.
-
-
- This is a
- |
- |
- |test.
-
-
- - Escape: \D'command arg ...'
- The `\D' escape provides a variety of drawing functions. Note
- that on character devices, only vertical and horizontal lines are
- supported within `grotty'; other devices may only support a subset
- of the available drawing functions.
-
- The default scaling indicator for all subcommands of `\D' is `m'
- for horizontal distances and `v' for vertical ones. Exceptions
- are `\D'f ...'' and `\D't ...'' which use `u' as the default, and
- `\D'FX ...'' which arguments are treated similar to the `defcolor'
- request.
-
- `\D'l DX DY''
- Draw a line from the current location to the relative point
- specified by (DX,DY).
-
- The following example is a macro for creating a box around a
- text string; for simplicity, the box margin is taken as a
- fixed value, 0.2m.
-
-
- .de BOX
- . nr @wd \w'\\$1'
- \h'.2m'\
- \h'-.2m'\v'(.2m - \\n[rsb]u)'\
- \D'l 0 -(\\n[rst]u - \\n[rsb]u + .4m)'\
- \D'l (\\n[@wd]u + .4m) 0'\
- \D'l 0 (\\n[rst]u - \\n[rsb]u + .4m)'\
- \D'l -(\\n[@wd]u + .4m) 0'\
- \h'.2m'\v'-(.2m - \\n[rsb]u)'\
- \\$1\
- \h'.2m'
- ..
-
- First, the width of the string is stored in register `@wd'.
- Then, four lines are drawn to form a box, properly offset by
- the box margin. The registers `rst' and `rsb' are set by the
- `\w' escape, containing the largest height and depth of the
- whole string.
-
- `\D'c D''
- Draw a circle with a diameter of D with the leftmost point at
- the current position. After drawing, the current location is
- positioned at the rightmost point of the circle.
-
- `\D'C D''
- Draw a solid circle with the same parameters and behaviour as
- an outlined circle. No outline is drawn.
-
- `\D'e X Y''
- Draw an ellipse with a horizontal diameter of X and a vertical
- diameter of Y with the leftmost point at the current position.
- After drawing, the current location is positioned at the
- rightmost point of the ellipse.
-
- `\D'E X Y''
- Draw a solid ellipse with the same parameters and behaviour
- as an outlined ellipse. No outline is drawn.
-
- `\D'a DX1 DY1 DX2 DY2''
- Draw an arc clockwise from the current location through the
- two specified relative locations (DX1,DY1) and (DX2,DY2).
- The coordinates of the first point are relative to the
- current position, and the coordinates of the second point are
- relative to the first point. After drawing, the current
- position is moved to the final point of the arc.
-
- `\D'~ DX1 DY1 DX2 DY2 ...''
- Draw a spline from the current location to the relative point
- (DX1,DY1) and then to (DX2,DY2), and so on. The current
- position is moved to the terminal point of the drawn curve.
-
- `\D'f N''
- Set the shade of gray to be used for filling solid objects
- to N; N must be an integer between 0 and 1000, where 0
- corresponds solid white and 1000 to solid black, and values
- in between correspond to intermediate shades of gray. This
- applies only to solid circles, solid ellipses, and solid
- polygons. By default, a level of 1000 is used.
-
- Despite of being silly, the current point is moved
- horizontally to the right by N.
-
- Don't use this command! It has the serious drawback that it
- will be always rounded to the next integer multiple of the
- horizontal resolution (the value of the `hor' keyword in the
- `DESC' file). Use `\M' (*note Colors::) or `\D'Fg ...''
- instead.
-
- `\D'p DX1 DY1 DX2 DY2 ...''
- Draw a polygon from the current location to the relative
- position (DX1,DY1) and then to (DX2,DY2) and so on. When the
- specified data points are exhausted, a line is drawn back to
- the starting point. The current position is changed by
- adding the sum of all arguments with odd index to the actual
- horizontal position and the even ones to the vertical
- position.
-
- `\D'P DX1 DY1 DX2 DY2 ...''
- Draw a solid polygon with the same parameters and behaviour
- as an outlined polygon. No outline is drawn.
-
- Here a better variant of the box macro to fill the box with
- some color. Note that the box must be drawn before the text
- since colors in `gtroff' are not transparent; the filled
- polygon would hide the text completely.
-
-
- .de BOX
- . nr @wd \w'\\$1'
- \h'.2m'\
- \h'-.2m'\v'(.2m - \\n[rsb]u)'\
- \M[lightcyan]\
- \D'P 0 -(\\n[rst]u - \\n[rsb]u + .4m) \
- (\\n[@wd]u + .4m) 0 \
- 0 (\\n[rst]u - \\n[rsb]u + .4m) \
- -(\\n[@wd]u + .4m) 0'\
- \h'.2m'\v'-(.2m - \\n[rsb]u)'\
- \M[]\
- \\$1\
- \h'.2m'
- ..
-
- `\D't N''
- Set the current line thickness to N machine units. A value of
- zero selects the smallest available line thickness. A
- negative value makes the line thickness proportional to the
- current point size (this is the default behaviour of AT&T
- `troff').
-
- Despite of being silly, the current point is moved
- horizontally to the right by N.
-
- `\D'FSCHEME COLOR_COMPONENTS''
- Change current fill color. SCHEME is a single letter
- denoting the color scheme: `r' (rgb), `c' (cmy), `k' (cmyk),
- `g' (gray), or `d' (default color). The color components use
- exactly the same syntax as in the `defcolor' request (*note
- Colors::); the command `\D'Fd'' doesn't take an argument.
-
- _No_ position changing!
-
- Examples:
-
-
- \D'Fg .3' \" same gray as \D'f 700' \D'Fr #0000ff' \"
- blue
-
- *Note Graphics Commands::.
-
- - Escape: \b'string'
- "Pile" a sequence of glyphs vertically, and center it vertically
- on the current line. Use it to build large brackets and braces.
-
- Here an example how to create a large opening brace:
-
-
- \b'\[lt]\[bv]\[lk]\[bv]\[lb]'
-
- The first glyph is on the top, the last glyph in STRING is at the
- bottom. Note that `gtroff' separates the glyphs vertically by 1m,
- and the whole object is centered 0.5m above the current baseline;
- the largest glyph width is used as the width for the whole object.
- This rather unflexible positioning algorithm doesn't work with
- `-Tdvi' since the bracket pieces vary in height for this device.
- Instead, use the `eqn' preprocessor.
-
- *Note Manipulating Spacing::, how to adjust the vertical spacing
- with the `\x' escape.
-
-
-File: groff, Node: Traps, Next: Diversions, Prev: Drawing Requests, Up: gtroff Reference
-
-Traps
-=====
-
- "Traps" are locations, which, when reached, call a specified macro.
-These traps can occur at a given location on the page, at a given
-location in the current diversion, at a blank line, after a certain
-number of input lines, or at the end of input.
-
- Setting a trap is also called "planting". It is also said that a
-trap is "sprung" if the associated macro is executed.
-
-* Menu:
-
-* Page Location Traps::
-* Diversion Traps::
-* Input Line Traps::
-* Blank Line Traps::
-* End-of-input Traps::
-
OpenPOWER on IntegriCloud