PageRenderTime 62ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/contrib/groff/man/groff_diff.man

https://bitbucket.org/freebsd/freebsd-head/
Unknown | 3848 lines | 3842 code | 6 blank | 0 comment | 0 complexity | cbc9dff3c7997ddca4916803cc304d3c MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, BSD-3-Clause, LGPL-2.0, LGPL-2.1, BSD-2-Clause, 0BSD, JSON, AGPL-1.0, GPL-2.0
  1. '\" e
  2. .\" The above line should force the use of eqn as a preprocessor
  3. .ig
  4. groff_diff.man
  5. Last update : 26 Jul 2004
  6. This file is part of groff, the GNU roff type-setting system.
  7. It is the source of the man-page groff_diff(7).
  8. Copyright (C) 1989, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  9. written by James Clark
  10. modified by Werner Lemberg <wl@gnu.org>
  11. Bernd Warken <bwarken@mayn.de>
  12. Permission is granted to copy, distribute and/or modify this document
  13. under the terms of the GNU Free Documentation License, Version 1.1 or
  14. any later version published by the Free Software Foundation; with the
  15. Invariant Sections being this .ig-section and AUTHORS, with no
  16. Front-Cover Texts, and with no Back-Cover Texts.
  17. A copy of the Free Documentation License is included as a file called
  18. FDL in the main directory of the groff source package.
  19. ..
  20. .
  21. .\" --------------------------------------------------------------------
  22. .\" Setup
  23. .\" --------------------------------------------------------------------
  24. .
  25. .do nr groff_diff_C \n[.C]
  26. .cp 0
  27. .
  28. .mso www.tmac
  29. .
  30. .if n \{\
  31. . mso tty-char.tmac
  32. . ftr CR R
  33. . ftr CI I
  34. . ftr CB B
  35. .\}
  36. .
  37. .if '\*[.T]'dvi' \
  38. . ftr CB CW
  39. .
  40. .\" define a string tx for the TeX logo
  41. .ie t .ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
  42. .el .ds tx TeX
  43. .
  44. .
  45. .\" --------------------------------------------------------------------
  46. .\" start of macro definitions
  47. .
  48. .eo
  49. .
  50. .de c
  51. ..
  52. .
  53. .de TQ
  54. . br
  55. . ns
  56. . TP \$1
  57. ..
  58. .de Text
  59. . RI "\$*"
  60. ..
  61. .de Topic
  62. . TP 2m
  63. . Text \[bu]
  64. ..
  65. .de squoted
  66. . ds @arg1 \$1
  67. . shift
  68. .\" Text \[oq]\f[CB]\*[@arg1]\f[]\[cq]\$*
  69. . Text \[oq]\f[B]\*[@arg1]\f[]\[cq]\$*
  70. . rm @arg1
  71. ..
  72. .c A shell command line
  73. .de ShellCommand
  74. . br
  75. . IR "shell#" "\h'1m'\f[CB]\$*\f[]\/"
  76. ..
  77. .c reference of a request or macro
  78. .de request
  79. . ds @arg1 \$1
  80. . shift 1
  81. .\" Text \f[CB]\*[@arg1]\f[]\$*
  82. . Text \f[B]\*[@arg1]\f[]\$*
  83. . rm @arg1
  84. ..
  85. .als option request
  86. .
  87. .c representation of an escape sequence
  88. .de esc
  89. . ds @arg1 \$1
  90. . shift
  91. .\" Text \f[CB]\[rs]\*[@arg1]\f[]\$*
  92. . Text \f[B]\[rs]\*[@arg1]\&\f[]\$*
  93. . rm @arg1
  94. ..
  95. .ec
  96. .\" end of macro definitions
  97. .
  98. .\" from old groff_out.man
  99. .ie \n(.g \
  100. . ds ic \/
  101. .el \
  102. . ds ic \^
  103. .
  104. .
  105. .\" --------------------------------------------------------------------
  106. .\" Title
  107. .\" --------------------------------------------------------------------
  108. .
  109. .TH GROFF_DIFF @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
  110. .SH NAME
  111. groff_diff \- differences between GNU troff and classical troff
  112. .
  113. .
  114. .\" --------------------------------------------------------------------
  115. .SH DESCRIPTION
  116. .\" --------------------------------------------------------------------
  117. .
  118. This manual page describes the language differences between
  119. .IR groff ,
  120. the GNU
  121. .I roff
  122. text processing system and the classical
  123. .I roff
  124. formatter of the freely available Unix\~7 of the 1970s, documented in
  125. the
  126. .I Troff User's Manual
  127. by
  128. .I Osanna
  129. and
  130. .IR Kernighan .
  131. This inludes the roff language as well as the intermediate output
  132. format (troff output).
  133. .
  134. .P
  135. The section
  136. .I SEE ALSO
  137. gives pointers to both the classical
  138. .I roff
  139. and the modern
  140. .I groff
  141. documentation.
  142. .
  143. .
  144. .\" --------------------------------------------------------------------
  145. .SH "GROFF LANGUAGE"
  146. .\" --------------------------------------------------------------------
  147. .
  148. In this section, all additional features of
  149. .I groff
  150. compared to the classical Unix\~7
  151. .I troff
  152. are described in detail.
  153. .
  154. .
  155. .\" --------------------------------------------------------------------
  156. .SS "Long names"
  157. .\" --------------------------------------------------------------------
  158. .
  159. The names of number registers, fonts, strings/\:macros/\:diversions,
  160. special characters (glyphs), and colors can be of any length.
  161. .
  162. In escape sequences, additionally to the classical
  163. .BI ( xx
  164. construction for a two-character name, you can use
  165. .BI [ xxx ]
  166. for a name of arbitrary length.
  167. .
  168. .TP
  169. .BI \[rs][ xxx ]
  170. Print the special character (glyph) called
  171. .IR xxx .
  172. .
  173. .TP
  174. .BI \[rs][ "comp1 comp2 .\|.\|." ]
  175. Print composite glyph consisting of multiple components.
  176. .
  177. Example: `\[rs][A\~ho]' is capital letter A with ogonek which finally maps
  178. to glyph name `u0041_0328'.
  179. .
  180. See the
  181. .I groff info file
  182. for details how a glyph name for a composite glyph is constructed, and
  183. .BR groff_char (@MAN7EXT@)
  184. for list of glyph name components used composite glyph names.
  185. .
  186. .TP
  187. .BI \[rs]f[ xxx ]
  188. Set font
  189. .IR xxx .
  190. .
  191. Additionally,
  192. .B \[rs]f[]
  193. is a new syntax equal to
  194. .BR \[rs]fP ,
  195. i.e., to return to the previous font.
  196. .
  197. .TP
  198. .BI \[rs]*[ "xxx arg1 arg2 .\|.\|." ]
  199. Interpolate string
  200. .IR xxx ,
  201. taking
  202. .IR arg1 ,
  203. .IR arg2 ,
  204. .I .\|.\|.\&
  205. as arguments.
  206. .
  207. .TP
  208. .BI \[rs]n[ xxx ]
  209. Interpolate number register
  210. .IR xxx .
  211. .
  212. .
  213. .\" --------------------------------------------------------------------
  214. .SS "Fractional pointsizes"
  215. .\" --------------------------------------------------------------------
  216. .
  217. A
  218. .I scaled point
  219. is equal to
  220. .B 1/sizescale
  221. points, where
  222. .B sizescale
  223. is specified in the
  224. .B DESC
  225. file (1 by default).
  226. .
  227. There is a new scale indicator
  228. .B z
  229. that has the effect of multiplying by sizescale.
  230. .
  231. Requests and escape sequences in troff interpret arguments that
  232. represent a pointsize as being in units of scaled points, but they
  233. evaluate each such argument using a default scale indicator of
  234. .BR z .
  235. Arguments treated in this way are the argument to the
  236. .B ps
  237. request, the third argument to the
  238. .B cs
  239. request, the second and fourth arguments to the
  240. .B tkf
  241. request, the argument to the
  242. .B \[rs]H
  243. escape sequence, and those variants of the
  244. .B \[rs]s
  245. escape sequence that take a numeric expression as their argument.
  246. .
  247. .P
  248. For example, suppose sizescale is 1000; then a scaled point will be
  249. equivalent to a millipoint; the call
  250. .B .ps\ 10.25
  251. is equivalent to
  252. .B .ps\ 10.25z
  253. and so sets the pointsize to 10250 scaled points, which is equal to
  254. 10.25 points.
  255. .
  256. .P
  257. The number register
  258. .B \[rs]n[.s]
  259. returns the pointsize in points as decimal fraction.
  260. .
  261. There is also a new number register
  262. .B \[rs]n[.ps]
  263. that returns the pointsize in scaled points.
  264. .
  265. .P
  266. It would make no sense to use the
  267. .B z
  268. scale indicator in a numeric expression whose default scale indicator
  269. was neither
  270. .B u
  271. nor
  272. .BR z ,
  273. and so
  274. .B troff
  275. disallows this.
  276. .
  277. Similarly it would make no sense to use a scaling indicator other than
  278. .B z
  279. or
  280. .B u
  281. in a numeric expression whose default scale indicator was
  282. .BR z ,
  283. and so
  284. .B troff
  285. disallows this as well.
  286. .
  287. .P
  288. There is also new scale indicator\~\c
  289. .B s
  290. which multiplies by the number of units in a scaled point.
  291. .
  292. So, for example,
  293. .B \[rs]n[.ps]s
  294. is equal to
  295. .BR 1m .
  296. Be sure not to confuse the
  297. .B s
  298. and
  299. .B z
  300. scale indicators.
  301. .
  302. .
  303. .\" --------------------------------------------------------------------
  304. .SS "Numeric expressions"
  305. .\" --------------------------------------------------------------------
  306. .
  307. Spaces are permitted in a number expression within parentheses.
  308. .
  309. .P
  310. .B M
  311. indicates a scale of 100ths of an em.
  312. .B f
  313. indicates a scale of 65536 units, providing fractions for color
  314. definitions with the
  315. .B defcolor
  316. request.
  317. .
  318. For example, 0.5f = 32768u.
  319. .
  320. .TP
  321. .IB e1 >? e2
  322. The maximum of
  323. .I e1
  324. and
  325. .IR e2 .
  326. .
  327. .TP
  328. .IB e1 <? e2
  329. The minimum of
  330. .I e1
  331. and
  332. .IR e2 .
  333. .
  334. .TP
  335. .BI ( c ; e )
  336. Evaluate
  337. .I e
  338. using
  339. .I c
  340. as the default scaling indicator.
  341. .
  342. If
  343. .I c
  344. is missing, ignore scaling indicators in the evaluation of
  345. .IR e .
  346. .
  347. .
  348. .\" --------------------------------------------------------------------
  349. .SS "New escape sequences"
  350. .\" --------------------------------------------------------------------
  351. .
  352. .TP
  353. .BI \[rs]A' anything '
  354. This expands to
  355. .B 1
  356. or
  357. .B 0
  358. resp., depending on whether
  359. .I anything
  360. is or is not acceptable as the name of a string, macro, diversion, number
  361. register, environment, font, or color.
  362. It will return\~\c
  363. .B 0
  364. if
  365. .I anything
  366. is empty.
  367. .
  368. This is useful if you want to lookup user input in some sort of
  369. associative table.
  370. .
  371. .TP
  372. .BI \[rs]B' anything '
  373. This expands to
  374. .B 1
  375. or
  376. .B 0
  377. resp., depending on whether
  378. .I anything
  379. is or is not a valid numeric expression.
  380. .
  381. It will return\~\c
  382. .B 0
  383. if
  384. .I anything
  385. is empty.
  386. .
  387. .TP
  388. .BI \[rs]C' xxx '
  389. Typeset glyph named
  390. .IR xxx .
  391. Normally it is more convenient to use
  392. .BI \[rs][ xxx ]\f[R].
  393. But
  394. .B \[rs]C
  395. has the advantage that it is compatible with recent versions of
  396. .SM UNIX
  397. and is available in compatibility mode.
  398. .
  399. .TP
  400. .B \[rs]E
  401. This is equivalent to an escape character, but it is not interpreted in
  402. copy-mode.
  403. .
  404. For example, strings to start and end superscripting could be defined
  405. like this
  406. .
  407. .RS
  408. .IP
  409. .ft CB
  410. .Text .ds { \[rs]v'\-.3m'\[rs]s'\[rs]En[.s]*6u/10u'
  411. .br
  412. .Text .ds } \[rs]s0\[rs]v'.3m'
  413. .ft
  414. .
  415. .P
  416. The use of
  417. .B \[rs]E
  418. ensures that these definitions will work even if
  419. .B \[rs]*{
  420. gets interpreted in copy-mode (for example, by being used in a macro
  421. argument).
  422. .RE
  423. .
  424. .TP
  425. .BI \[rs]F f
  426. .TQ
  427. .BI \[rs]F( fm
  428. .TQ
  429. .BI \[rs]F[ fam ]
  430. Change font family.
  431. .
  432. This is the same as the
  433. .B fam
  434. request.
  435. .
  436. .B \[rs]F[]
  437. switches back to the previous color (note that
  438. .B \[rs]FP
  439. won't work; it selects font family `P' instead).
  440. .
  441. .TP
  442. .BI \[rs]m x
  443. .TQ
  444. .BI \[rs]m( xx
  445. .TQ
  446. .BI \[rs]m[ xxx ]
  447. Set drawing color.
  448. .B \[rs]m[]
  449. switches back to the previous color.
  450. .
  451. .TP
  452. .BI \[rs]M x
  453. .TQ
  454. .BI \[rs]M( xx
  455. .TQ
  456. .BI \[rs]M[ xxx ]
  457. Set background color for filled objects drawn with the
  458. .BI \[rs]D' .\|.\|. '
  459. commands.
  460. .B \[rs]M[]
  461. switches back to the previous color.
  462. .
  463. .TP
  464. .BI \[rs]N' n '
  465. Typeset the glyph with index
  466. .I n
  467. in the current font.
  468. .I n
  469. can be any integer.
  470. .
  471. Most devices only have glyphs with indices between 0 and 255.
  472. .
  473. If the current font does not contain a glyph with that code,
  474. special fonts will
  475. .I not
  476. be searched.
  477. .
  478. The
  479. .B \[rs]N
  480. escape sequence can be conveniently used in conjunction with the
  481. .B char
  482. request, for example
  483. .
  484. .RS
  485. .ft CB
  486. .IP
  487. .Text .char \[rs][phone] \[rs]f(ZD\[rs]N'37'
  488. .ft
  489. .RE
  490. .
  491. .IP
  492. The index of each glyph is given in the fourth column in the font
  493. description file after the
  494. .B charset
  495. command.
  496. .
  497. It is possible to include unnamed glyphs in the font description
  498. file by using a name of
  499. .BR \-\-\- ;
  500. the
  501. .B \[rs]N
  502. escape sequence is the only way to use these.
  503. .
  504. .TP
  505. .BI \[rs]O n
  506. .TQ
  507. .BI \[rs]O[ n ]
  508. Suppressing troff output.
  509. .
  510. The escapes
  511. .BR \[rs]02 ,
  512. .BR \[rs]O3 ,
  513. .BR \[rs]O4 ,
  514. and
  515. .B \[rs]O5
  516. are intended for internal use by
  517. .BR \%grohtml .
  518. .
  519. .RS
  520. .TP
  521. .B \[rs]O0
  522. Disable any ditroff glyphs from being emitted to the device driver,
  523. provided that the escape occurs at the outer level (see
  524. .B \[rs]O3
  525. and
  526. .BR \[rs]O4 ).
  527. .
  528. .TP
  529. .B \[rs]O1
  530. Enable output of glyphs, provided that the escape occurs at the outer
  531. level.
  532. .IP
  533. .B \[rs]O0
  534. and
  535. .B \[rs]O1
  536. also reset the registers
  537. .BR \[rs]n[opminx] ,
  538. .BR \[rs]n[opminy] ,
  539. .BR \[rs]n[opmaxx] ,
  540. and
  541. .B \[rs]n[opmaxy]
  542. to\~-1.
  543. .
  544. These four registers mark the top left and bottom right hand corners
  545. of a box which encompasses all written glyphs.
  546. .
  547. .TP
  548. .B \[rs]O2
  549. Provided that the escape occurs at the outer level, enable output of
  550. glyphs and also write out to stderr the page number and four registers
  551. encompassing the glyphs previously written since the last call to
  552. .BR \[rs]O .
  553. .
  554. .TP
  555. .B \[rs]O3
  556. Begin a nesting level.
  557. .
  558. At start-up,
  559. .B troff
  560. is at outer level.
  561. .
  562. This is really an internal mechanism for
  563. .B \%grohtml
  564. while producing images.
  565. .
  566. They are generated by running the troff source through
  567. .B troff
  568. to the postscript device and
  569. .B ghostscript
  570. to produce images in PNG format.
  571. .
  572. The
  573. .B \[rs]O3
  574. escape will start a new page if the device is not html (to reduce the
  575. possibility of images crossing a page boundary).
  576. .
  577. .TP
  578. .B \[rs]O4
  579. End a nesting level.
  580. .
  581. .TP
  582. .BI \[rs]O5[ Pfilename ]
  583. This escape is
  584. .B \%grohtml
  585. specific.
  586. .
  587. Provided that this escape occurs at the outer nesting level, write
  588. .I filename
  589. to stderr.
  590. .
  591. The position of the image,
  592. .IR P ,
  593. must be specified and must be one of l, r, c, or i (left, right,
  594. centered, inline).
  595. .
  596. .I filename
  597. will be associated with the production of the next inline image.
  598. .RE
  599. .
  600. .TP
  601. .BI \[rs]R' name\ \[+-]n '
  602. This has the same effect as
  603. .
  604. .RS
  605. .IP
  606. .BI .nr\ name\ \[+-]n
  607. .RE
  608. .
  609. .TP
  610. .BI \[rs]s( nn
  611. .TQ
  612. .BI \[rs]s\[+-]( nn
  613. Set the point size to
  614. .I nn
  615. points;
  616. .I nn
  617. must be exactly two digits.
  618. .
  619. .TP
  620. .BI \[rs]s[\[+-] n ]
  621. .TQ
  622. .BI \[rs]s\[+-][ n ]
  623. .TQ
  624. .BI \[rs]s'\[+-] n '
  625. .TQ
  626. .BI \[rs]s\[+-]' n '
  627. Set the point size to
  628. .I n
  629. scaled points;
  630. .I n
  631. is a numeric expression with a default scale indicator of\~\c
  632. .BR z .
  633. .
  634. .TP
  635. .BI \[rs]V x
  636. .TQ
  637. .BI \[rs]V( xx
  638. .TQ
  639. .BI \[rs]V[ xxx ]
  640. Interpolate the contents of the environment variable
  641. .IR xxx ,
  642. as returned by
  643. .BR getenv (3).
  644. .B \[rs]V
  645. is interpreted in copy-mode.
  646. .
  647. .TP
  648. .BI \[rs]Y x
  649. .TQ
  650. .BI \[rs]Y( xx
  651. .TQ
  652. .BI \[rs]Y[ xxx ]
  653. This is approximately equivalent to
  654. .BI \[rs]X'\[rs]*[ xxx ]'\f[R].
  655. However the contents of the string or macro
  656. .I xxx
  657. are not interpreted; also it is permitted for
  658. .I xxx
  659. to have been defined as a macro and thus contain newlines (it is not
  660. permitted for the argument to
  661. .B \[rs]X
  662. to contain newlines).
  663. .
  664. The inclusion of newlines requires an extension to the UNIX troff
  665. output format, and will confuse drivers that do not know about this
  666. extension.
  667. .
  668. .TP
  669. .BI \[rs]Z' anything '
  670. Print anything and then restore the horizontal and vertical position;
  671. .I anything
  672. may not contain tabs or leaders.
  673. .
  674. .TP
  675. .B \[rs]$0
  676. The name by which the current macro was invoked.
  677. .
  678. The
  679. .B als
  680. request can make a macro have more than one name.
  681. .
  682. .TP
  683. .B \[rs]$*
  684. In a macro or string, the concatenation of all the arguments separated
  685. by spaces.
  686. .
  687. .TP
  688. .B \[rs]$@
  689. In a macro or string, the concatenation of all the arguments with each
  690. surrounded by double quotes, and separated by spaces.
  691. .
  692. .TP
  693. .BI \[rs]$( nn
  694. .TQ
  695. .BI \[rs]$[ nnn ]
  696. In a macro or string, this gives the
  697. .IR nn -th
  698. or
  699. .IR nnn -th
  700. argument.
  701. .
  702. Macros and strings can have an unlimited number of arguments.
  703. .
  704. .TP
  705. .BI \[rs]? anything \[rs]?
  706. When used in a diversion, this will transparently embed
  707. .I anything
  708. in the diversion.
  709. .I anything
  710. is read in copy mode.
  711. .
  712. When the diversion is reread,
  713. .I anything
  714. will be interpreted.
  715. .I anything
  716. may not contain newlines; use
  717. .B \[rs]!\&
  718. if you want to embed newlines in a diversion.
  719. .
  720. The escape sequence
  721. .B \[rs]?\&
  722. is also recognised in copy mode and turned into a single internal
  723. code; it is this code that terminates
  724. .IR anything .
  725. Thus
  726. .
  727. .RS
  728. .IP
  729. .ne 14v+\n(.Vu
  730. .ft CB
  731. .nf
  732. .Text .nr x 1
  733. .Text .nf
  734. .Text .di d
  735. .Text \[rs]?\[rs]\[rs]?\[rs]\[rs]\[rs]\[rs]?\[rs]\[rs]\[rs]\[rs]\[rs]\[rs]\[rs]\c
  736. .Text \[rs]nx\[rs]\[rs]\[rs]\[rs]?\[rs]\[rs]?\[rs]?
  737. .Text .di
  738. .Text .nr x 2
  739. .Text .di e
  740. .Text .d
  741. .Text .di
  742. .Text .nr x 3
  743. .Text .di f
  744. .Text .e
  745. .Text .di
  746. .Text .nr x 4
  747. .Text .f
  748. .fi
  749. .ft
  750. .RE
  751. .
  752. .IP
  753. will print\~\c
  754. .BR 4 .
  755. .
  756. .TP
  757. .B \[rs]/
  758. This increases the width of the preceding glyph so that the
  759. spacing between that glyph and the following glyph will be
  760. correct if the following glyph is a roman glyph.
  761. .
  762. .if t \{\
  763. . nop For example, if an italic f is immediately followed by a roman
  764. . nop right parenthesis, then in many fonts the top right portion of
  765. . nop the f will overlap the top left of the right parenthesis
  766. . nop producing \f[I]f\f[R])\f[R], which is ugly.
  767. . nop Inserting
  768. . B \[rs]/
  769. . nop produces
  770. . ie \n(.g \f[I]f\/\f[R])\f[R]
  771. . el \f[I]f\|\f[R])\f[R]
  772. . nop and avoids this problem.
  773. .\}
  774. It is a good idea to use this escape sequence whenever an italic
  775. glyph is immediately followed by a roman glyph without any
  776. intervening space.
  777. .
  778. .TP
  779. .B \[rs],
  780. This modifies the spacing of the following glyph so that the
  781. spacing between that glyph and the preceding glyph will
  782. correct if the preceding glyph is a roman glyph.
  783. .
  784. .if t \{\
  785. . nop For example, inserting
  786. . B \[rs],
  787. . nop between the parenthesis and the f changes
  788. . nop \f[R](\f[I]f\f[R] to
  789. . ie \n(.g \f[R](\,\f[I]f\f[R].
  790. . el \f[R](\^\f[I]f\f[R].
  791. .\}
  792. It is a good idea to use this escape sequence whenever a roman
  793. glyph is immediately followed by an italic glyph without any
  794. intervening space.
  795. .
  796. .TP
  797. .B \[rs])
  798. Like
  799. .B \[rs]&
  800. except that it behaves like a character declared with the
  801. .B cflags
  802. request to be transparent for the purposes of end-of-sentence
  803. recognition.
  804. .
  805. .TP
  806. .B \[rs]~
  807. This produces an unbreakable space that stretches like a normal
  808. inter-word space when a line is adjusted.
  809. .
  810. .TP
  811. .B \[rs]:
  812. This causes the insertion of a zero-width break point.
  813. .
  814. It is equal to
  815. .B \[rs]%
  816. within a word but without insertion of a soft hyphen character.
  817. .
  818. .TP
  819. .B \[rs]#
  820. Everything up to and including the next newline is ignored.
  821. .
  822. This is interpreted in copy mode.
  823. .
  824. It is like
  825. .B \[rs]"
  826. except that
  827. .B \[rs]"
  828. does not ignore the terminating newline.
  829. .
  830. .
  831. .\" --------------------------------------------------------------------
  832. .SS "New requests"
  833. .\" --------------------------------------------------------------------
  834. .
  835. .TP
  836. .BI .aln\ xx\ yy
  837. Create an alias
  838. .I xx
  839. for number register object named
  840. .IR yy .
  841. The new name and the old name will be exactly equivalent.
  842. .
  843. If
  844. .I yy
  845. is undefined, a warning of type
  846. .B reg
  847. will be generated, and the request will be ignored.
  848. .
  849. .TP
  850. .BI .als\ xx\ yy
  851. Create an alias
  852. .I xx
  853. for request, string, macro, or diversion object named
  854. .IR yy .
  855. .
  856. The new name and the old name will be exactly equivalent (it is
  857. similar to a hard rather than a soft link).
  858. .
  859. If
  860. .I yy
  861. is undefined, a warning of type
  862. .B mac
  863. will be generated, and the request will be ignored.
  864. .
  865. The
  866. .BR de ,
  867. .BR am ,
  868. .BR di ,
  869. .BR da ,
  870. .BR ds ,
  871. and
  872. .B as
  873. requests only create a new object if the name of the macro, diversion
  874. or string diversion is currently undefined or if it is defined to be a
  875. request; normally they modify the value of an existing object.
  876. .
  877. .TP
  878. .BI .am1\ xx\ yy
  879. Similar to
  880. .BR .am ,
  881. but compatibility mode is switched off during execution.
  882. .
  883. To be more precise, a `compatibility save' token is inserted at the
  884. beginning of the macro addition, and a `compatibility restore' token at
  885. the end.
  886. .
  887. As a consequence, the requests
  888. .BR am ,
  889. .BR am1 ,
  890. .BR de ,
  891. and
  892. .B de1
  893. can be intermixed freely since the compatibility save/\:restore tokens
  894. only affect the macro parts defined by
  895. .B .am1
  896. and
  897. .BR .ds1 .
  898. .
  899. .TP
  900. .BI .ami\ xx\ yy
  901. Append to macro indirectly.
  902. .
  903. See the
  904. .B dei
  905. request below for more information.
  906. .
  907. .TP
  908. .BI .ami1\ xx\ yy
  909. Same as the
  910. .B ami
  911. request but compatibility mode is switched off during execution.
  912. .
  913. .TP
  914. .BI .as1\ xx\ yy
  915. Similar to
  916. .BR .as ,
  917. but compatibility mode is switched off during expansion.
  918. .
  919. To be more precise, a `compatibility save' token is inserted at the
  920. beginning of the string, and a `compatibility restore' token at the end.
  921. .
  922. As a consequence, the requests
  923. .BR as ,
  924. .BR as1 ,
  925. .BR ds ,
  926. and
  927. .B ds1
  928. can be intermixed freely since the compatibility save/\:restore tokens
  929. only affect the (sub)strings defined by
  930. .B as1
  931. and
  932. .BR ds1 .
  933. .
  934. .TP
  935. .BI .asciify\ xx
  936. This request `unformats' the diversion
  937. .I xx
  938. in such a way that
  939. .SM ASCII
  940. and space characters (and some escape sequences) that were formatted
  941. and diverted into
  942. .I xx
  943. will be treated like ordinary input characters when
  944. .I xx
  945. is reread.
  946. Useful for diversions in conjunction with the
  947. .B .writem
  948. request.
  949. .
  950. It can be also used for gross hacks; for example, this
  951. .
  952. .RS
  953. .IP
  954. .ne 7v+\n(.Vu
  955. .ft CB
  956. .nf
  957. .Text .tr @.
  958. .Text .di x
  959. .Text @nr n 1
  960. .Text .br
  961. .Text .di
  962. .Text .tr @@
  963. .Text .asciify x
  964. .Text .x
  965. .fi
  966. .ft
  967. .RE
  968. .
  969. .IP
  970. will set register\~\c
  971. .B n
  972. to\~1.
  973. .
  974. Note that glyph information (font, font size, etc.) is not preserved;
  975. use
  976. .B .unformat
  977. instead.
  978. .
  979. .TP
  980. .B .backtrace
  981. Print a backtrace of the input stack on stderr.
  982. .
  983. .TP
  984. .BI .blm\ xx
  985. Set the blank line macro to
  986. .IR xx .
  987. If there is a blank line macro, it will be invoked when a blank line
  988. is encountered instead of the usual troff behaviour.
  989. .
  990. .TP
  991. .BI .box\ xx
  992. .TQ
  993. .BI .boxa\ xx
  994. These requests are similar to the
  995. .B di
  996. and
  997. .B da
  998. requests with the exception that a partially filled line will not
  999. become part of the diversion (i.e., the diversion always starts with a
  1000. new line) but restored after ending the diversion, discarding the
  1001. partially filled line which possibly comes from the diversion.
  1002. .
  1003. .TP
  1004. .B .break
  1005. Break out of a while loop.
  1006. .
  1007. See also the
  1008. .B while
  1009. and
  1010. .B continue
  1011. requests.
  1012. .
  1013. Be sure not to confuse this with the
  1014. .B br
  1015. request.
  1016. .
  1017. .TP
  1018. .B .brp
  1019. This is the same as
  1020. .BR \[rs]p .
  1021. .
  1022. .TP
  1023. .BI .cflags\ n\ c1\ c2\|.\|.\|.\&
  1024. Characters
  1025. .IR c1 ,
  1026. .IR c2 ,\|.\|.\|.\&
  1027. have properties determined by
  1028. .IR n ,
  1029. which is ORed from the following:
  1030. .
  1031. .RS
  1032. .IP 1
  1033. The character ends sentences (initially characters
  1034. .B .?!\&
  1035. have this property).
  1036. .
  1037. .IP 2
  1038. Lines can be broken before the character (initially no characters have
  1039. this property); a line will not be broken at a character with this
  1040. property unless the characters on each side both have non-zero
  1041. hyphenation codes.
  1042. .
  1043. .IP 4
  1044. Lines can be broken after the character (initially characters
  1045. .B \-\[rs][hy]\[rs][em]
  1046. have this property); a line will not be broken at a character with
  1047. this property unless the characters on each side both have non-zero
  1048. hyphenation codes.
  1049. .
  1050. .IP 8
  1051. The character overlaps horizontally (initially characters
  1052. .B \[rs][ul]\[rs][rn]\[rs][ru]\[rs][radicalex]\[rs][sqrtex]
  1053. have this property).
  1054. .
  1055. .IP 16
  1056. The character overlaps vertically (initially character
  1057. .B \[rs][br]
  1058. has this property).
  1059. .
  1060. .IP 32
  1061. An end-of-sentence character followed by any number of characters with
  1062. this property will be treated as the end of a sentence if followed by
  1063. a newline or two spaces; in other words the character is transparent
  1064. for the purposes of end-of-sentence recognition; this is the same as
  1065. having a zero space factor in \*[tx] (initially characters
  1066. .B \[dq]')]*\[rs](dg\[rs](rq
  1067. have this property).
  1068. .RE
  1069. .
  1070. .TP
  1071. .BI .char\ c\ string
  1072. Define glyph
  1073. .I c
  1074. to be
  1075. .IR string .
  1076. Every time glyph
  1077. .I c
  1078. needs to be printed,
  1079. .I string
  1080. will be processed in a temporary environment and the result will be
  1081. wrapped up into a single object.
  1082. .
  1083. Compatibility mode will be turned off and the escape character will be
  1084. set to
  1085. .B \[rs]
  1086. while
  1087. .I string
  1088. is being processed.
  1089. .
  1090. Any emboldening, constant spacing or track kerning will be applied to
  1091. this object rather than to individual glyphs in
  1092. .IR string .
  1093. .
  1094. .IP
  1095. A glyph defined by this request can be used just like a normal
  1096. glyph provided by the output device.
  1097. .
  1098. In particular other characters can be translated to it with the
  1099. .B tr
  1100. request; it can be made the leader character by the
  1101. .B lc
  1102. request; repeated patterns can be drawn with the character using the
  1103. .B \[rs]l
  1104. and
  1105. .B \[rs]L
  1106. escape sequences; words containing the character can be hyphenated
  1107. correctly, if the
  1108. .B hcode
  1109. request is used to give the character a hyphenation code.
  1110. .
  1111. .IP
  1112. There is a special anti-recursion feature: Use of glyph within the
  1113. glyph's definition will be handled like normal glyphs not
  1114. defined with
  1115. .BR char .
  1116. .IP
  1117. A glyph definition can be removed with the
  1118. .B rchar
  1119. request.
  1120. .
  1121. .TP
  1122. .BI .chop\ xx
  1123. Chop the last element off macro, string, or diversion
  1124. .IR xx .
  1125. This is useful for removing the newline from the end of diversions
  1126. that are to be interpolated as strings.
  1127. .
  1128. .TP
  1129. .BI .close\ stream
  1130. Close the stream named
  1131. .IR stream ;
  1132. .I stream
  1133. will no longer be an acceptable argument to the
  1134. .B write
  1135. request.
  1136. .
  1137. See the
  1138. .B open
  1139. request.
  1140. .
  1141. .TP
  1142. .BI .composite\ glyph1\ glyph2
  1143. Map glyph name
  1144. .I glyph1
  1145. to glyph name
  1146. .I glyph2
  1147. if it is used in
  1148. .BI \[rs][ ... ]
  1149. with more than one component.
  1150. .
  1151. .TP
  1152. .B .continue
  1153. Finish the current iteration of a while loop.
  1154. .
  1155. See also the
  1156. .B while
  1157. and
  1158. .B break
  1159. requests.
  1160. .
  1161. .TP
  1162. .BI .color\ n
  1163. If
  1164. .I n
  1165. is non-zero or missing, enable colors (this is the default), otherwise
  1166. disable them.
  1167. .
  1168. .TP
  1169. .BI .cp\ n
  1170. If
  1171. .I n
  1172. is non-zero or missing, enable compatibility mode, otherwise disable
  1173. it.
  1174. .
  1175. In compatibility mode, long names are not recognised, and the
  1176. incompatibilities caused by long names do not arise.
  1177. .
  1178. .TP
  1179. .BI .defcolor\ xxx\ scheme\ color_components
  1180. Define color.
  1181. .I scheme
  1182. can be one of the following values:
  1183. .B rgb
  1184. (three components),
  1185. .B cym
  1186. (three components),
  1187. .B cmyk
  1188. (four components), and
  1189. .B gray
  1190. or
  1191. .B grey
  1192. (one component).
  1193. .
  1194. Color components can be given either as a hexadecimal string or as
  1195. positive decimal integers in the range 0-65535.
  1196. .
  1197. A hexadecimal string contains all color components concatenated; it
  1198. must start with either
  1199. .B #
  1200. or
  1201. .BR ## .
  1202. The former specifies hex values in the range 0-255 (which are
  1203. internally multiplied by\~257), the latter in the range 0-65535.
  1204. .
  1205. Examples: #FFC0CB (pink), ##ffff0000ffff (magenta).
  1206. .
  1207. A new scaling indicator\~\c
  1208. .B f
  1209. has been introduced which multiplies its value by\~65536; this makes
  1210. it convenient to specify color components as fractions in the range 0
  1211. to\~1.
  1212. .
  1213. Example:
  1214. .
  1215. .RS
  1216. .IP
  1217. .ft CB
  1218. .Text .defcolor darkgreen rgb 0.1f 0.5f 0.2f
  1219. .br
  1220. .ft
  1221. .RE
  1222. .
  1223. .IP
  1224. Note that
  1225. .B f
  1226. is the default scaling indicator for the
  1227. .B defcolor
  1228. request, thus the above statement is equivalent to
  1229. .
  1230. .RS
  1231. .IP
  1232. .ft CB
  1233. .Text .defcolor darkgreen rgb 0.1 0.5 0.2
  1234. .br
  1235. .ft
  1236. .RE
  1237. .
  1238. .IP
  1239. The color named
  1240. .B default
  1241. (which is device-specific) can't be redefined.
  1242. .
  1243. It is possible that the default color for
  1244. .esc M
  1245. and
  1246. .esc m
  1247. is not the same.
  1248. .
  1249. .TP
  1250. .BI .de1\ xx\ yy
  1251. Similar to
  1252. .BR .de ,
  1253. but compatibility mode is switched off during execution.
  1254. .
  1255. On entry, the current compatibility mode is saved and restored at exit.
  1256. .
  1257. .TP
  1258. .BI .dei\ xx\ yy
  1259. Define macro indirectly.
  1260. .
  1261. The following example
  1262. .
  1263. .RS
  1264. .IP
  1265. .ne 2v+\n(.Vu
  1266. .ft CB
  1267. .nf
  1268. .Text .ds xx aa
  1269. .Text .ds yy bb
  1270. .Text .dei xx yy
  1271. .fi
  1272. .ft
  1273. .RE
  1274. .
  1275. .IP
  1276. is equivalent to
  1277. .
  1278. .RS
  1279. .IP
  1280. .ft CB
  1281. .Text .de aa bb
  1282. .br
  1283. .ft
  1284. .RE
  1285. .
  1286. .TP
  1287. .BI .dei1\ xx\ yy
  1288. Similar to the
  1289. .B dei
  1290. request but compatibility mode is switched off during execution.
  1291. .
  1292. .TP
  1293. .BI .do\ xxx
  1294. Interpret
  1295. .I .xxx
  1296. with compatibility mode disabled.
  1297. .
  1298. For example,
  1299. .
  1300. .RS
  1301. .
  1302. .IP
  1303. .ft CB
  1304. .Text .do fam T
  1305. .br
  1306. .ft
  1307. .
  1308. .P
  1309. would have the same effect as
  1310. .
  1311. .IP
  1312. .ft CB
  1313. .Text .fam T
  1314. .br
  1315. .ft
  1316. .
  1317. .P
  1318. except that it would work even if compatibility mode had been enabled.
  1319. .
  1320. Note that the previous compatibility mode is restored before any files
  1321. sourced by
  1322. .I xxx
  1323. are interpreted.
  1324. .
  1325. .RE
  1326. .
  1327. .TP
  1328. .BI .ds1\ xx\ yy
  1329. Similar to
  1330. .BR .ds ,
  1331. but compatibility mode is switched off during expansion.
  1332. .
  1333. To be more precise, a `compatibility save' token is inserted at the
  1334. beginning of the string, and a `compatibility restore' token at the end.
  1335. .
  1336. .TP
  1337. .B .ecs
  1338. Save current escape character.
  1339. .
  1340. .TP
  1341. .B .ecr
  1342. Restore escape character saved with
  1343. .BR ecs .
  1344. Without a previous call to
  1345. .BR ecs ,
  1346. .RB ` \[rs] '
  1347. will be the new escape character.
  1348. .
  1349. .TP
  1350. .BI .evc\ xx
  1351. Copy the contents of environment
  1352. .I xx
  1353. to the current environment.
  1354. .
  1355. No pushing or popping of environments will be done.
  1356. .
  1357. .TP
  1358. .BI .fam\ xx
  1359. Set the current font family to
  1360. .IR xx .
  1361. The current font family is part of the current environment.
  1362. If
  1363. .I xx
  1364. is missing, switch back to previous font family.
  1365. .
  1366. The value at start-up is `T'.
  1367. .
  1368. See the description of the
  1369. .B sty
  1370. request for more information on font families.
  1371. .
  1372. .TP
  1373. .BI .fchar\ c\ string
  1374. Define fallback glyph
  1375. .I c
  1376. to be
  1377. .IR string .
  1378. .
  1379. The syntax of this request is the same as the
  1380. .B char
  1381. request; the only difference is that a glyph defined with
  1382. .B char
  1383. hides the glyph with the same name in the current font, whereas a
  1384. glyph defined with
  1385. .B fchar
  1386. is checked only if the particular glyph isn't found in the current font.
  1387. .
  1388. This test happens before checking special fonts.
  1389. .
  1390. .TP
  1391. .BI .fcolor\ c
  1392. Set the fill color to
  1393. .IR c .
  1394. If
  1395. .I c
  1396. is missing,
  1397. switch to the previous fill color.
  1398. .
  1399. .TP
  1400. .BI .fschar\ f\ c\ string
  1401. Define fallback glyph
  1402. .I c
  1403. for font
  1404. .I f
  1405. to be
  1406. .IR string .
  1407. .
  1408. The syntax of this request is the same as the
  1409. .B char
  1410. request (with an additional argument to specify the font); a glyph
  1411. defined with
  1412. .B fschar
  1413. is searched after the list of fonts declared with the
  1414. .B fspecial
  1415. request but before the list of fonts declared with
  1416. .BR special .
  1417. .
  1418. .TP
  1419. .BI .fspecial\ f\ s1\ s2\|.\|.\|.\&
  1420. When the current font is
  1421. .IR f ,
  1422. fonts
  1423. .IR s1 ,
  1424. .IR s2 ,\|.\|.\|.\&
  1425. will be special, that is, they will searched for glyphs not in
  1426. the current font.
  1427. .
  1428. Any fonts specified in the
  1429. .B special
  1430. request will be searched after fonts specified in the
  1431. .B fspecial
  1432. request.
  1433. .
  1434. Without argument, reset the list of global special fonts to be empty.
  1435. .
  1436. .TP
  1437. .BI .ftr\ f\ g
  1438. Translate font
  1439. .I f
  1440. to
  1441. .IR g .
  1442. Whenever a font named
  1443. .I f
  1444. is referred to in an
  1445. .B \[rs]f
  1446. escape sequence, in the
  1447. .B F
  1448. and
  1449. .B S
  1450. conditional operators, or in the
  1451. .BR ft ,
  1452. .BR ul ,
  1453. .BR bd ,
  1454. .BR cs ,
  1455. .BR tkf ,
  1456. .BR special ,
  1457. .BR fspecial ,
  1458. .BR fp ,
  1459. or
  1460. .BR sty
  1461. requests, font
  1462. .I g
  1463. will be used.
  1464. If
  1465. .I g
  1466. is missing, or equal to
  1467. .I f
  1468. then font
  1469. .I f
  1470. will not be translated.
  1471. .
  1472. .TP
  1473. .BI .gcolor\ c
  1474. Set the glyph color to
  1475. .IR c .
  1476. If
  1477. .I c
  1478. is missing,
  1479. switch to the previous glyph color.
  1480. .
  1481. .TP
  1482. .BI .hcode \ c1\ code1\ c2\ code2\|.\|.\|.\&
  1483. Set the hyphenation code of character
  1484. .I c1
  1485. to
  1486. .I code1
  1487. and that of
  1488. .I c2
  1489. to
  1490. .IR code2 .
  1491. A hyphenation code must be a single input character (not a special
  1492. character) other than a digit or a space.
  1493. .
  1494. Initially each lower-case letter \%a-z has a hyphenation code, which is
  1495. itself, and each upper-case letter \%A-Z has a hyphenation code which is
  1496. the lower-case version of itself.
  1497. .
  1498. See also the
  1499. .B hpf
  1500. request.
  1501. .
  1502. .TP
  1503. .BI .hla\ lang
  1504. Set the current hyphenation language to
  1505. .IR lang .
  1506. Hyphenation exceptions specified with the
  1507. .B hw
  1508. request and hyphenation patterns specified with the
  1509. .B hpf
  1510. request are both associated with the current hyphenation language.
  1511. .
  1512. The
  1513. .B hla
  1514. request is usually invoked by the
  1515. .B troffrc
  1516. file.
  1517. .
  1518. .TP
  1519. .BI .hlm\ n
  1520. Set the maximum number of consecutive hyphenated lines to\~\c
  1521. .IR n .
  1522. If
  1523. .I n
  1524. is negative, there is no maximum.
  1525. .
  1526. The default value is\~\-1.
  1527. .
  1528. This value is associated with the current environment.
  1529. .
  1530. Only lines output from an environment count towards the maximum
  1531. associated with that environment.
  1532. .
  1533. Hyphens resulting from
  1534. .B \[rs]%
  1535. are counted; explicit hyphens are not.
  1536. .
  1537. .TP
  1538. .BI .hpf\ file
  1539. Read hyphenation patterns from
  1540. .IR file ;
  1541. this will be searched for in the same way that
  1542. .IB name .tmac
  1543. is searched for when the
  1544. .BI \-m name
  1545. option is specified.
  1546. .
  1547. It should have the same format as (simple) \*[tx] patterns files.
  1548. .
  1549. More specifically, the following scanning rules are implemented.
  1550. .
  1551. .RS
  1552. .IP \[bu]
  1553. A percent sign starts a comment (up to the end of the line) even if
  1554. preceded by a backslash.
  1555. .
  1556. .IP \[bu]
  1557. No support for `digraphs' like
  1558. .BR \[rs]$ .
  1559. .
  1560. .IP \[bu]
  1561. .BI ^^ xx
  1562. .RI ( x
  1563. is 0-9 or a-f) and
  1564. .BI ^^ x
  1565. (character code of\~\c
  1566. .I x
  1567. in the range 0-127) are recognized; other use of
  1568. .B ^
  1569. causes an error.
  1570. .
  1571. .IP \[bu]
  1572. No macro expansion.
  1573. .
  1574. .IP \[bu]
  1575. .B hpf
  1576. checks for the expression
  1577. .B \[rs]patterns{.\|.\|.}
  1578. (possibly with whitespace before and after the braces).
  1579. .
  1580. Everything between the braces is taken as hyphenation patterns.
  1581. .
  1582. Consequently,
  1583. .B {
  1584. and
  1585. .B }
  1586. are not allowed in patterns.
  1587. .
  1588. .IP \[bu]
  1589. Similarly,
  1590. .B \[rs]hyphenation{.\|.\|.}
  1591. gives a list of hyphenation exceptions.
  1592. .
  1593. .IP \[bu]
  1594. .B \[rs]endinput
  1595. is recognized also.
  1596. .
  1597. .IP \[bu]
  1598. For backwards compatibility, if
  1599. .B \[rs]patterns
  1600. is missing, the whole file is treated as a list of hyphenation patterns
  1601. (only recognizing the
  1602. .BR % \~\c
  1603. character as the start of a comment).
  1604. .RE
  1605. .
  1606. .IP
  1607. Use the
  1608. .B hpfcode
  1609. request to map the encoding used in hyphenation patterns files to
  1610. .BR groff 's
  1611. input encoding.
  1612. .IP
  1613. The set of hyphenation patterns is associated with the current language
  1614. set by the
  1615. .B hla
  1616. request.
  1617. .
  1618. The
  1619. .B hpf
  1620. request is usually invoked by the
  1621. .B troffrc
  1622. file; a second call replaces the old patterns with the new ones.
  1623. .
  1624. .TP
  1625. .BI .hpfa\ file
  1626. The same as
  1627. .B hpf
  1628. except that the hyphenation patterns from
  1629. .I file
  1630. are appended to the patterns already loaded in the current language.
  1631. .
  1632. .TP
  1633. .BI .hpfcode\ a\ b\ c\ d\ .\|.\|.
  1634. After reading a hyphenation patterns file with the
  1635. .B hpf
  1636. or
  1637. .B hpfa
  1638. request, convert all characters with character code\~\c
  1639. .I a
  1640. in the recently read patterns to character code\~\c
  1641. .IR b ,
  1642. character code\~\c
  1643. .I c
  1644. to\~\c
  1645. .IR d ,
  1646. etc.
  1647. .
  1648. Initially, all character codes map to themselves.
  1649. .
  1650. The arguments of
  1651. .B hpfcode
  1652. must be integers in the range 0 to\~255.
  1653. .
  1654. Note that it is even possible to use character codes which are invalid in
  1655. .B groff
  1656. otherwise.
  1657. .
  1658. .TP
  1659. .BI .hym\ n
  1660. Set the
  1661. .I hyphenation margin
  1662. to\~\c
  1663. .IR n :
  1664. when the current adjustment mode is not\~\c
  1665. .BR b ,
  1666. the line will not be hyphenated if the line is no more than
  1667. .I n
  1668. short.
  1669. .
  1670. The default hyphenation margin is\~0.
  1671. .
  1672. The default scaling indicator for this request is\~\c
  1673. .IR m .
  1674. The hyphenation margin is associated with the current environment.
  1675. .
  1676. The current hyphenation margin is available in the
  1677. .B \[rs]n[.hym]
  1678. register.
  1679. .
  1680. .TP
  1681. .BI .hys\ n
  1682. Set the
  1683. .I hyphenation space
  1684. to\~\c
  1685. .IR n :
  1686. when the current adjustment mode is\~\c
  1687. .B b
  1688. don't hyphenate the line if the line can be justified by adding no
  1689. more than
  1690. .I n
  1691. extra space to each word space.
  1692. .
  1693. The default hyphenation space is\~0.
  1694. .
  1695. The default scaling indicator for this request is\~\c
  1696. .BR m .
  1697. The hyphenation space is associated with the current environment.
  1698. .
  1699. The current hyphenation space is available in the
  1700. .B \[rs]n[.hys]
  1701. register.
  1702. .
  1703. .TP
  1704. .BI .itc\ n\ macro
  1705. Variant of
  1706. .B .it
  1707. for which a line interrupted with
  1708. .B \[rs]c
  1709. counts as one input line.
  1710. .
  1711. .TP
  1712. .BI .kern\ n
  1713. If
  1714. .I n
  1715. is non-zero or missing, enable pairwise kerning, otherwise disable it.
  1716. .
  1717. .TP
  1718. .BI .length\ xx\ string
  1719. Compute the length of
  1720. .I string
  1721. and return it in the number register
  1722. .I xx
  1723. (which is not necessarily defined before).
  1724. .
  1725. .TP
  1726. .BI .linetabs\ n
  1727. If
  1728. .I n
  1729. is non-zero or missing, enable line-tabs mode, otherwise disable it
  1730. (which is the default).
  1731. .
  1732. In line-tabs mode, tab distances are computed relative to the
  1733. (current) output line.
  1734. .
  1735. Otherwise they are taken relative to the input line.
  1736. .
  1737. For example, the following
  1738. .
  1739. .RS
  1740. .IP
  1741. .ne 6v+\n(.Vu
  1742. .ft CB
  1743. .nf
  1744. .Text .ds x a\[rs]t\[rs]c
  1745. .Text .ds y b\[rs]t\[rs]c
  1746. .Text .ds z c
  1747. .Text .ta 1i 3i
  1748. .Text \[rs]*x
  1749. .Text \[rs]*y
  1750. .Text \[rs]*z
  1751. .fi
  1752. .ft
  1753. .RE
  1754. .
  1755. .IP
  1756. yields
  1757. .
  1758. .RS
  1759. .IP
  1760. a b c
  1761. .RE
  1762. .
  1763. .IP
  1764. In line-tabs mode, the same code gives
  1765. .
  1766. .RS
  1767. .IP
  1768. a b c
  1769. .RE
  1770. .
  1771. .IP
  1772. Line-tabs mode is associated with the current environment; the
  1773. read-only number register
  1774. .B \\[rs]n[.linetabs]
  1775. is set to\~1 if in line-tabs mode, and 0 otherwise.
  1776. .
  1777. .TP
  1778. .BI .mso\ file
  1779. The same as the
  1780. .B so
  1781. request except that
  1782. .I file
  1783. is searched for in the same directories as macro files for the the
  1784. .B \-m
  1785. command line option.
  1786. .
  1787. If the file name to be included has the form
  1788. .IB name .tmac
  1789. and it isn't found,
  1790. .B mso
  1791. tries to include
  1792. .BI tmac. name
  1793. instead and vice versa.
  1794. .
  1795. .TP
  1796. .BI .nop \ anything
  1797. Execute
  1798. .IR anything .
  1799. This is similar to `.if\ 1'.
  1800. .
  1801. .TP
  1802. .B .nroff
  1803. Make the
  1804. .B n
  1805. built-in condition true and the
  1806. .B t
  1807. built-in condition false.
  1808. .
  1809. This can be reversed using the
  1810. .B troff
  1811. request.
  1812. .
  1813. .TP
  1814. .BI .open\ stream\ filename
  1815. Open
  1816. .I filename
  1817. for writing and associate the stream named
  1818. .I stream
  1819. with it.
  1820. .
  1821. See also the
  1822. .B close
  1823. and
  1824. .B write
  1825. requests.
  1826. .
  1827. .TP
  1828. .BI .opena\ stream\ filename
  1829. Like
  1830. .BR open ,
  1831. but if
  1832. .I filename
  1833. exists, append to it instead of truncating it.
  1834. .
  1835. .TP
  1836. .BI .output\ string
  1837. Emit
  1838. .I string
  1839. directly to the intermediate output (subject to copy-mode interpretation);
  1840. this is similar to
  1841. .B \[rs]!
  1842. used at the top level.
  1843. .
  1844. An initial double quote in
  1845. .I string
  1846. is stripped off to allow initial blanks.
  1847. .
  1848. .TP
  1849. .B .pnr
  1850. Print the names and contents of all currently defined number registers
  1851. on stderr.
  1852. .
  1853. .TP
  1854. .BI .psbb \ filename
  1855. Get the bounding box of a PostScript image
  1856. .IR filename .
  1857. This file must conform to Adobe's Document Structuring Conventions;
  1858. the command looks for a
  1859. .B \%%%BoundingBox
  1860. comment to extract the bounding box values.
  1861. .
  1862. After a successful call, the coordinates (in PostScript units) of the
  1863. lower left and upper right corner can be found in the registers
  1864. .BR \[rs]n[llx] ,
  1865. .BR \[rs]n[lly] ,
  1866. .BR \[rs]n[urx] ,
  1867. and
  1868. .BR \[rs]n[ury] ,
  1869. respectively.
  1870. .
  1871. If some error has occurred, the four registers are set to zero.
  1872. .
  1873. .TP
  1874. .BI .pso \ command
  1875. This behaves like the
  1876. .B so
  1877. request except that input comes from the standard output of
  1878. .IR command .
  1879. .
  1880. .TP
  1881. .B .ptr
  1882. Print the names and positions of all traps (not including input line
  1883. traps and diversion traps) on stderr.
  1884. .
  1885. Empty slots in the page trap list are printed as well, because they
  1886. can affect the priority of subsequently planted traps.
  1887. .
  1888. .TP
  1889. .BI .pvs \ \[+-]n
  1890. Set the post-vertical line space to
  1891. .IR n ;
  1892. default scale indicator is\~\c
  1893. .BR p .
  1894. .
  1895. This value will be added to each line after it has been output.
  1896. .
  1897. With no argument, the post-vertical line space is set to its previous
  1898. value.
  1899. .
  1900. .IP
  1901. The total vertical line spacing consists of four components:
  1902. .B .vs
  1903. and
  1904. .B \[rs]x
  1905. with a negative value which are applied before the line is output, and
  1906. .B .pvs
  1907. and
  1908. .B \[rs]x
  1909. with a positive value which are applied after the line is output.
  1910. .
  1911. .TP
  1912. .BI .rchar\ c1\ c2\|.\|.\|.\&
  1913. Remove the definitions of glyphs
  1914. .IR c1 ,
  1915. .IR c2 ,\|.\|.\|.
  1916. This undoes the effect of a
  1917. .B char
  1918. request.
  1919. .
  1920. .TP
  1921. .B .return
  1922. Within a macro, return immediately.
  1923. .
  1924. If called with an argument, return twice, namely from the current macro and
  1925. from the macro one level higher.
  1926. .
  1927. No effect otherwise.
  1928. .
  1929. .TP
  1930. .BI .rfschar\ c1\ c2\|.\|.\|.\&
  1931. Remove the font-specific definitions of glyphs
  1932. .IR c1 ,
  1933. .IR c2 ,\|.\|.\|.
  1934. This undoes the effect of a
  1935. .B fschar
  1936. request.
  1937. .
  1938. .TP
  1939. .B .rj
  1940. .TQ
  1941. .BI .rj \~n
  1942. Right justify the next
  1943. .IR n \~\c
  1944. input lines.
  1945. .
  1946. Without an argument right justify the next input line.
  1947. .
  1948. The number of lines to be right justified is available in the
  1949. .B \[rs]n[.rj]
  1950. register.
  1951. .
  1952. This implicitly does
  1953. .BR .ce \~0 .
  1954. The
  1955. .B ce
  1956. request implicitly does
  1957. .BR .rj \~0 .
  1958. .
  1959. .TP
  1960. .BI .rnn \ xx\ yy
  1961. Rename number register
  1962. .I xx
  1963. to
  1964. .IR yy .
  1965. .
  1966. .TP
  1967. .BI .schar\ c\ string
  1968. Define global fallback glyph
  1969. .I c
  1970. to be
  1971. .IR string .
  1972. .
  1973. The syntax of this request is the same as the
  1974. .B char
  1975. request; a glyph defined with
  1976. .B schar
  1977. is searched after the list of fonts declared with the
  1978. .B special
  1979. request but before the mounted special fonts.
  1980. .
  1981. .TP
  1982. .BI .shc\ c
  1983. Set the soft hyphen character to
  1984. .IR c .
  1985. If
  1986. .I c
  1987. is omitted, the soft hyphen character will be set to the default
  1988. .BR \[rs](hy .
  1989. The soft hyphen character is the glyph which will be inserted when
  1990. a word is hyphenated at a line break.
  1991. .
  1992. If the soft hyphen character does not exist in the font of the
  1993. glyph immediately preceding a potential break point, then the line
  1994. will not be broken at that point.
  1995. .
  1996. Neither definitions (specified with the
  1997. .B char
  1998. request) nor translations (specified with the
  1999. .B tr
  2000. request) are considered when finding the soft hyphen character.
  2001. .
  2002. .TP
  2003. .BI .shift\ n
  2004. In a macro, shift the arguments by
  2005. .I n
  2006. positions: argument\~\c
  2007. .I i
  2008. becomes argument
  2009. .IR i \- n ;
  2010. arguments 1 to\~\c
  2011. .I n
  2012. will no longer be available.
  2013. .
  2014. If
  2015. .I n
  2016. is missing, arguments will be shifted by\~1.
  2017. .
  2018. Shifting by negative amounts is currently undefined.
  2019. .
  2020. .TP
  2021. .BI .sizes\ s1\ s2\|.\|.\|.\|sn\ [0]
  2022. This command is similar to the
  2023. .B sizes
  2024. command of a
  2025. .B DESC
  2026. file.
  2027. .
  2028. It sets the available font sizes for the current font to
  2029. .IR s1 ,
  2030. .IR s2 ,\|.\|.\|.\|,\~ sn
  2031. scaled points.
  2032. .
  2033. The list of sizes can be terminated by an optional\~\c
  2034. .BR 0 .
  2035. .
  2036. Each
  2037. .I si
  2038. can also be a range of sizes
  2039. .IR m - n .
  2040. .
  2041. Contrary to the font file command, the list can't extend over more
  2042. than a single line.
  2043. .
  2044. .TP
  2045. .BI .special\ s1\ s2\|.\|.\|.\&
  2046. Fonts
  2047. .IR s1 ,
  2048. .IR s2 ,
  2049. are special and will be searched for glyphs not in the current
  2050. font.
  2051. .
  2052. Without arguments, reset the list of special fonts to be empty.
  2053. .
  2054. .TP
  2055. .BI .spreadwarn\ limit
  2056. Make
  2057. .B troff
  2058. emit a warning if the additional space inserted for each space between
  2059. words in an output line is larger or equal to
  2060. .IR limit .
  2061. .
  2062. A negative value is changed to zero; no argument toggles the warning on
  2063. and off without changing
  2064. .IR limit .
  2065. .
  2066. The default scaling indicator is\~\c
  2067. .BR m .
  2068. .
  2069. At startup,
  2070. .B spreadwarn
  2071. is deactivated, and
  2072. .I limit
  2073. is set to 3m.
  2074. .
  2075. For example,
  2076. .B .spreadwarn\ 0.2m
  2077. will cause a warning if
  2078. .B troff
  2079. must add 0.2m or more for each interword space in a line.
  2080. .
  2081. This request is active only if text is justified to both margins (using
  2082. .BR .ad\ b ).
  2083. .
  2084. .TP
  2085. .BI .sty\ n\ f
  2086. Associate style\~\c
  2087. .I f
  2088. with font position\~\c
  2089. .IR n .
  2090. A font position can be associated either with a font or with a style.
  2091. .
  2092. The current font is the index of a font position and so is also either
  2093. a font or a style.
  2094. .
  2095. When it is a style, the font that is actually used is the font the
  2096. name of which is the concatenation of the name of the current family
  2097. and the name of the current style.
  2098. .
  2099. For example, if the current font is\~1 and font position\~1 is
  2100. associated with style\~\c
  2101. .B R
  2102. and the current font family is\~\c
  2103. .BR T ,
  2104. then font
  2105. .BR TR
  2106. will be used.
  2107. .
  2108. If the current font is not a style, then the current family is ignored.
  2109. .
  2110. When the requests
  2111. .BR cs ,
  2112. .BR bd ,
  2113. .BR tkf ,
  2114. .BR uf ,
  2115. or
  2116. .B fspecial
  2117. are applied to a style, then they will instead be applied to the
  2118. member of the current family corresponding to that style.
  2119. .
  2120. The default family can be set with the
  2121. .B \-f
  2122. option.
  2123. .
  2124. The
  2125. .B styles
  2126. command in the
  2127. .SM DESC
  2128. file controls which font positions (if any) are initially associated
  2129. with styles rather than fonts.
  2130. .
  2131. .TP
  2132. .BI .substring\ xx\ n1\ [ n2 ]
  2133. Replace the string named
  2134. .I xx
  2135. with the substring defined by the indices
  2136. .I n1
  2137. and
  2138. .IR n2 .
  2139. The first character in the string has index\~0.
  2140. .
  2141. If
  2142. .I n2
  2143. is omitted, it is taken to be equal to the string's length.
  2144. .
  2145. If the index value
  2146. .I n1
  2147. or
  2148. .I n2
  2149. is negative, it will be counted from the end of the string,
  2150. going backwards:
  2151. .
  2152. The last character has index\~-1, the character before the last
  2153. character has index\~-2, etc.
  2154. .
  2155. .TP
  2156. .BI .tkf\ f\ s1\ n1\ s2\ n2
  2157. Enable track kerning for font
  2158. .IR f .
  2159. When the current font is
  2160. .I f
  2161. the width of every glyph will be increased by an amount between
  2162. .I n1
  2163. and
  2164. .IR n2 ;
  2165. when the current point size is less than or equal to
  2166. .I s1
  2167. the width will be increased by
  2168. .IR n1 ;
  2169. when it is greater than or equal to
  2170. .I s2
  2171. the width will be increased by
  2172. .IR n2 ;
  2173. when the point size is greater than or equal to
  2174. .I s1
  2175. and less than or equal to
  2176. .I s2
  2177. the increase in width is a linear function of the point size.
  2178. .
  2179. .TP
  2180. .BI .tm1\ string
  2181. Similar to the
  2182. .B tm
  2183. request,
  2184. .I string
  2185. is read in copy mode and written on the standard error, but an initial
  2186. double quote in
  2187. .I string
  2188. is stripped off to allow initial blanks.
  2189. .
  2190. .TP
  2191. .BI .tmc\ string
  2192. Similar to
  2193. .B tm1
  2194. but without writing a final newline.
  2195. .
  2196. .TP
  2197. .BI .trf\ filename
  2198. Transparently output the contents of file
  2199. .IR filename .
  2200. Each line is output as if preceded by
  2201. .BR \[rs]! ;
  2202. however, the lines are not subject to copy-mode interpretation.
  2203. .
  2204. If the file does not end with a newline, then a newline will be added.
  2205. .
  2206. For example, you can define a macro\~\c
  2207. .I x
  2208. containing the contents of file\~\c
  2209. .IR f ,
  2210. using
  2211. .
  2212. .RS
  2213. .IP
  2214. .ne 2v+\n(.Vu
  2215. .ft CB
  2216. .nf
  2217. .Text .di x
  2218. .Text .trf f
  2219. .Text .di
  2220. .fi
  2221. .ft
  2222. .RE
  2223. .
  2224. .IP
  2225. Unlike with the
  2226. .B cf
  2227. request, the file cannot contain characters such as
  2228. .SM NUL
  2229. that are not legal troff input characters.
  2230. .
  2231. .TP
  2232. .BI .trin\ abcd
  2233. This is the same as the
  2234. .B tr
  2235. request except that the
  2236. .B asciify
  2237. request will use the character code (if any) before the character
  2238. translation.
  2239. .
  2240. Example:
  2241. .
  2242. .RS
  2243. .IP
  2244. .nf
  2245. .ft CB
  2246. .Text .trin ax
  2247. .Text .di xxx
  2248. .Text a
  2249. .Text .br
  2250. .Text .di
  2251. .Text .xxx
  2252. .Text .trin aa
  2253. .Text .asciify xxx
  2254. .Text .xxx
  2255. .fi
  2256. .ft
  2257. .RE
  2258. .
  2259. .IP
  2260. The result is
  2261. .BR x\ a .
  2262. .
  2263. Using
  2264. .BR tr ,
  2265. the result would be
  2266. .BR x\ x .
  2267. .
  2268. .TP
  2269. .BI .trnt\ abcd
  2270. This is the same as the
  2271. .B tr
  2272. request except that the translations do not apply to text that is
  2273. transparently throughput into a diversion with
  2274. .BR \[rs]! .
  2275. For example,
  2276. .
  2277. .RS
  2278. .IP
  2279. .nf
  2280. .ft CB
  2281. .Text .tr ab
  2282. .Text .di x
  2283. .Text \[rs]!.tm a
  2284. .Text .di
  2285. .Text .x
  2286. .fi
  2287. .ft
  2288. .RE
  2289. .
  2290. .IP
  2291. will print\~\c
  2292. .BR b ;
  2293. if
  2294. .B trnt
  2295. is used instead of
  2296. .B tr
  2297. it will print\~\c
  2298. .BR a .
  2299. .RE
  2300. .
  2301. .TP
  2302. .B .troff
  2303. Make the
  2304. .B n
  2305. built-in condition false, and the
  2306. .B t
  2307. built-in condition true.
  2308. .
  2309. This undoes the effect of the
  2310. .B nroff
  2311. request.
  2312. .
  2313. .TP
  2314. .BI .unformat\ xx
  2315. This request `unformats' the diversion
  2316. .IR xx .
  2317. Contrary to the
  2318. .B .asciify
  2319. request, which tries to convert formatted elements of the diversion
  2320. back to input tokens as much as possible,
  2321. .B .unformat
  2322. will only handle tabs and spaces between words (usually caused by
  2323. spaces or newlines in the input) specially.
  2324. .
  2325. The former are treated as if they were input tokens, and the latter
  2326. are stretchable again.
  2327. .
  2328. Note that the vertical size of lines is not preserved.
  2329. .
  2330. Glyph information (font, font size, space width, etc.) is retained.
  2331. .
  2332. Useful in conjunction with the
  2333. .B .box
  2334. and
  2335. .B .boxa
  2336. requests.
  2337. .
  2338. .TP
  2339. .BI .vpt\ n
  2340. Enable vertical position traps if
  2341. .I n
  2342. is non-zero, disable them otherwise.
  2343. .
  2344. Vertical position traps are traps set by the
  2345. .B wh
  2346. or
  2347. .B dt
  2348. requests.
  2349. .
  2350. Traps set by the
  2351. .B it
  2352. request are not vertical position traps.
  2353. .
  2354. The parameter that controls whether vertical position traps are
  2355. enabled is global.
  2356. .
  2357. Initially vertical position traps are enabled.
  2358. .
  2359. .TP
  2360. .BI .warn\ n
  2361. Control warnings.
  2362. .I n
  2363. is the sum of the numbers associated with each warning that is to be
  2364. enabled; all other warnings will be disabled.
  2365. .
  2366. The number associated with each warning is listed in
  2367. .BR @g@troff (@MAN1EXT@).
  2368. .
  2369. For example,
  2370. .B .warn\~0
  2371. will disable all warnings, and
  2372. .B .warn\~1
  2373. will disable all warnings except that about missing glyphs.
  2374. .
  2375. If
  2376. .I n
  2377. is not given, all warnings will be enabled.
  2378. .
  2379. .TP
  2380. .BI .warnscale\ si
  2381. Set the scaling indicator used in warnings to
  2382. .IR si .
  2383. .
  2384. Valid values for
  2385. .I si
  2386. are
  2387. .BR u ,
  2388. .BR i ,
  2389. .BR c ,
  2390. .BR p ,
  2391. and
  2392. .BR P .
  2393. .
  2394. At startup, it is set to\~\c
  2395. .BR i .
  2396. .
  2397. .TP
  2398. .BI .while \ c\ anything
  2399. While condition\~\c
  2400. .I c
  2401. is true, accept
  2402. .I anything
  2403. as input;
  2404. .IR c \~\c
  2405. can be any condition acceptable to an
  2406. .B if
  2407. request;
  2408. .I anything
  2409. can comprise multiple lines if the first line starts with
  2410. .B \[rs]{
  2411. and the last line ends with
  2412. .BR \[rs]} .
  2413. See also the
  2414. .B break
  2415. and
  2416. .B continue
  2417. requests.
  2418. .
  2419. .TP
  2420. .BI .write\ stream\ anything
  2421. Write
  2422. .I anything
  2423. to the stream named
  2424. .IR stream .
  2425. .I stream
  2426. must previously have been the subject of an
  2427. .B open
  2428. request.
  2429. .I anything
  2430. is read in copy mode;
  2431. a leading\~\c
  2432. .B \[dq]
  2433. will be stripped.
  2434. .
  2435. .TP
  2436. .BI .writec\ stream\ anything
  2437. Similar to
  2438. .B write
  2439. but without writing a final newline.
  2440. .
  2441. .TP
  2442. .BI .writem\ stream\ xx
  2443. Write the contents of the macro or string
  2444. .I xx
  2445. to the stream named
  2446. .IR stream .
  2447. .I stream
  2448. must previously have been the subject of an
  2449. .B open
  2450. request.
  2451. .I xx
  2452. is read in copy mode.
  2453. .
  2454. .
  2455. .\" --------------------------------------------------------------------
  2456. .SS "Extended escape sequences"
  2457. .\" --------------------------------------------------------------------
  2458. .
  2459. .TP
  2460. .BI \[rs]D' .\|.\|. '
  2461. All drawing commands of groff's intermediate output are accepted.
  2462. .
  2463. See subsection
  2464. .B "Drawing Commands"
  2465. below for more information.
  2466. .
  2467. .
  2468. .\" --------------------------------------------------------------------
  2469. .SS "Extended requests"
  2470. .\" --------------------------------------------------------------------
  2471. .
  2472. .TP
  2473. .BI .cf\ filename
  2474. When used in a diversion, this will embed in the diversion an object
  2475. which, when reread, will cause the contents of
  2476. .I filename
  2477. to be transparently copied through to the output.
  2478. .
  2479. In UNIX troff, the contents of
  2480. .I filename
  2481. is immediately copied through to the output regardless of whether
  2482. there is a current diversion; this behaviour is so anomalous that it
  2483. must be considered a bug.
  2484. .
  2485. .TP
  2486. .BI .de\ xx\ yy
  2487. .TQ
  2488. .BI .am\ xx\ yy
  2489. .TQ
  2490. .BI .ds\ xx\ yy
  2491. .TQ
  2492. .BI .as\ xx\ yy
  2493. In compatibility mode, these requests behaves similar to
  2494. .BR .de1 ,
  2495. .BR .am1 ,
  2496. .BR .ds1 ,
  2497. and
  2498. .BR .as1 ,
  2499. respectively: A `compatibility save' token is inserted at the
  2500. beginning, and a `compatibility restore' token at the end, with
  2501. compatibility mode switched on during execution.
  2502. .
  2503. .TP
  2504. .BI .ev\ xx
  2505. If
  2506. .I xx
  2507. is not a number, this will switch to a named environment called
  2508. .IR xx .
  2509. The environment should be popped with a matching
  2510. .B ev
  2511. request without any arguments, just as for numbered environments.
  2512. .
  2513. There is no limit on the number of named environments; they will be
  2514. created the first time that they are referenced.
  2515. .
  2516. .TP
  2517. .BI .ss\ m\ n
  2518. When two arguments are given to the
  2519. .B ss
  2520. request, the second argument gives the
  2521. .IR "sentence space size" .
  2522. If the second argument is not given, the sentence space size
  2523. will be the same as the word space size.
  2524. .
  2525. Like the word space size, the sentence space is in units of
  2526. one twelfth of the spacewidth parameter for the current font.
  2527. .
  2528. Initially both the word space size and the sentence
  2529. space size are\~12.
  2530. .
  2531. Contrary to UNIX troff, GNU troff handles this request in nroff mode
  2532. also; a given value is then rounded down to the nearest multiple
  2533. of\~12.
  2534. .
  2535. The sentence space size is used in two circumstances.
  2536. .
  2537. If the end of a sentence occurs at the end of a line in fill mode,
  2538. then both an inter-word space and a sentence space will be added; if
  2539. two spaces follow the end of a sentence in the middle of a line, then
  2540. the second space will be a sentence space.
  2541. .
  2542. Note that the behaviour of UNIX troff will be exactly that exhibited
  2543. by GNU troff if a second argument is never given to the
  2544. .B ss
  2545. request.
  2546. .
  2547. In GNU troff, as in UNIX troff, you should always follow a sentence
  2548. with either a newline or two spaces.
  2549. .
  2550. .TP
  2551. .BI .ta\ n1\ n2\|.\|.\|.nn \ T\ r1\ r2\|.\|.\|.\|rn
  2552. Set tabs at positions
  2553. .IR n1 ,
  2554. .IR n2 ,\|.\|.\|.\|,
  2555. .I nn
  2556. and then set tabs at
  2557. .IR nn + r1 ,
  2558. .IR nn + r2 ,\|.\|.\|.\|,
  2559. .IR nn + rn
  2560. and then at
  2561. .IR nn + rn + r1 ,
  2562. .IR nn + rn + r2 ,\|.\|.\|.\|,
  2563. .IR nn + rn + rn ,
  2564. and so on.
  2565. For example,
  2566. .
  2567. .RS
  2568. .IP
  2569. .ft CB
  2570. .Text .ta T .5i
  2571. .br
  2572. .ft
  2573. .
  2574. .P
  2575. will set tabs every half an inch.
  2576. .RE
  2577. .
  2578. .
  2579. .\" --------------------------------------------------------------------
  2580. .SS "New number registers"
  2581. .\" --------------------------------------------------------------------
  2582. .
  2583. The following read-only registers are available:
  2584. .
  2585. .TP
  2586. .B \[rs]n[.C]
  2587. 1\~if compatibility mode is in effect, 0\~otherwise.
  2588. .
  2589. .TP
  2590. .B \[rs]n[.cdp]
  2591. The depth of the last glyph added to the current environment.
  2592. .
  2593. It is positive if the glyph extends below the baseline.
  2594. .
  2595. .TP
  2596. .B \[rs]n[.ce]
  2597. The number of lines remaining to be centered, as set by the
  2598. .B ce
  2599. request.
  2600. .
  2601. .TP
  2602. .B \[rs]n[.cht]
  2603. The height of the last glyph added to the current environment.
  2604. .
  2605. It is positive if the glyph extends above the baseline.
  2606. .
  2607. .TP
  2608. .B \[rs]n[.color]
  2609. 1\~if colors are enabled, 0\~otherwise.
  2610. .
  2611. .TP
  2612. .B \[rs]n[.csk]
  2613. The skew of the last glyph added to the current environment.
  2614. .
  2615. The
  2616. .I skew
  2617. of a glyph is how far to the right of the center of a glyph
  2618. the center of an accent over that glyph should be placed.
  2619. .
  2620. .TP
  2621. .B \[rs]n[.ev]
  2622. The name or number of the current environment.
  2623. .
  2624. This is a string-valued register.
  2625. .
  2626. .TP
  2627. .B \[rs]n[.fam]
  2628. The current font family.
  2629. .
  2630. This is a string-valued register.
  2631. .
  2632. .TP
  2633. .B \[rs]n[.fn]
  2634. The current (internal) real font name.
  2635. .
  2636. This is a string-valued register.
  2637. .
  2638. If the current font is a style, the value of
  2639. .B \[rs]n[.fn]
  2640. is the proper concatenation of family and style name.
  2641. .
  2642. .TP
  2643. .B \[rs]n[.fp]
  2644. The number of the next free font position.
  2645. .
  2646. .TP
  2647. .B \[rs]n[.g]
  2648. Always\~1.
  2649. .
  2650. Macros should use this to determine whether they are running under GNU
  2651. troff.
  2652. .
  2653. .TP
  2654. .B \[rs]n[.height]
  2655. The current height of the font as set with
  2656. .BR \[rs]H .
  2657. .
  2658. .TP
  2659. .B \[rs]n[.hla]
  2660. The current hyphenation language as set by the
  2661. .B hla
  2662. request.
  2663. .
  2664. .TP
  2665. .B \[rs]n[.hlc]
  2666. The number of immediately preceding consecutive hyphenated lines.
  2667. .
  2668. .TP
  2669. .B \[rs]n[.hlm]
  2670. The maximum allowed number of consecutive hyphenated lines, as set by
  2671. the
  2672. .B hlm
  2673. request.
  2674. .
  2675. .TP
  2676. .B \[rs]n[.hy]
  2677. The current hyphenation flags (as set by the
  2678. .B hy
  2679. request).
  2680. .
  2681. .TP
  2682. .B \[rs]n[.hym]
  2683. The current hyphenation margin (as set by the
  2684. .B hym
  2685. request).
  2686. .
  2687. .TP
  2688. .B \[rs]n[.hys]
  2689. The current hyphenation space (as set by the
  2690. .B hys
  2691. request).
  2692. .
  2693. .TP
  2694. .B \[rs]n[.in]
  2695. The indent that applies to the current output line.
  2696. .
  2697. .TP
  2698. .B \[rs]n[.int]
  2699. Set to a positive value if last output line is interrupted (i.e., if
  2700. it contains
  2701. .IR \[rs]c ).
  2702. .
  2703. .TP
  2704. .B \[rs]n[.kern]
  2705. 1\~if pairwise kerning is enabled, 0\~otherwise.
  2706. .
  2707. .TP
  2708. .B \[rs]n[.lg]
  2709. The current ligature mode (as set by the
  2710. .B lg
  2711. request).
  2712. .
  2713. .TP
  2714. .B \[rs]n[.linetabs]
  2715. The current line-tabs mode (as set by the
  2716. .B linetabs
  2717. request).
  2718. .
  2719. .TP
  2720. .B \[rs]n[.ll]
  2721. The line length that applies to the current output line.
  2722. .
  2723. .TP
  2724. .B \[rs]n[.lt]
  2725. The title length as set by the
  2726. .B lt
  2727. request.
  2728. .
  2729. .TP
  2730. .B \[rs]n[.m]
  2731. The name of the current drawing color.
  2732. .
  2733. This is a string-valued register.
  2734. .
  2735. .TP
  2736. .B \[rs]n[.M]
  2737. The name of the current background color.
  2738. .
  2739. This is a string-valued register.
  2740. .
  2741. .TP
  2742. .B \[rs]n[.ne]
  2743. The amount of space that was needed in the last
  2744. .B ne
  2745. request that caused a trap to be sprung.
  2746. .
  2747. Useful in conjunction with the
  2748. .B \[rs]n[.trunc]
  2749. register.
  2750. .
  2751. .TP
  2752. .B \[rs]n[.ns]
  2753. 1\~if no-space mode is active, 0\~otherwise.
  2754. .
  2755. .TP
  2756. .B \[rs]n[.pe]
  2757. 1\~during a page ejection caused by the
  2758. .B bp
  2759. request, 0\~otherwise.
  2760. .
  2761. .TP
  2762. .B \[rs]n[.pn]
  2763. The number of the next page, either the value set by a
  2764. .B pn
  2765. request, or the number of the current page plus\~1.
  2766. .
  2767. .TP
  2768. .B \[rs]n[.ps]
  2769. The current pointsize in scaled points.
  2770. .
  2771. .TP
  2772. .B \[rs]n[.psr]
  2773. The last-requested pointsize in scaled points.
  2774. .
  2775. .TP
  2776. .B \[rs]n[.pvs]
  2777. The current post-vertical line space as set with the
  2778. .B pvs
  2779. request.
  2780. .
  2781. .TP
  2782. .B \[rs]n[.rj]
  2783. The number of lines to be right-justified as set by the
  2784. .B rj
  2785. request.
  2786. .
  2787. .TP
  2788. .B \[rs]n[.slant]
  2789. The slant of the current font as set with
  2790. .BR \[rs]S .
  2791. .
  2792. .TP
  2793. .B \[rs]n[.sr]
  2794. The last requested pointsize in points as a decimal fraction.
  2795. .
  2796. This is a string-valued register.
  2797. .
  2798. .TP
  2799. .B \[rs]n[.ss]
  2800. .TQ
  2801. .B \[rs]n[.sss]
  2802. These give the values of the parameters set by the first and second
  2803. arguments of the
  2804. .B ss
  2805. request.
  2806. .
  2807. .TP
  2808. .B \[rs]n[.sty]
  2809. The current font style.
  2810. .
  2811. This is a string-valued register.
  2812. .
  2813. .TP
  2814. .B \[rs]n[.tabs]
  2815. A string representation of the current tab settings suitable for use
  2816. as an argument to the
  2817. .B ta
  2818. request.
  2819. .
  2820. .TP
  2821. .B \[rs]n[.trunc]
  2822. The amount of vertical space truncated by the most recently sprung
  2823. vertical position trap, or, if the trap was sprung by a
  2824. .B ne
  2825. request, minus the amount of vertical motion produced by the
  2826. .B ne
  2827. request.
  2828. .
  2829. In other words, at the point a trap is sprung, it represents the
  2830. difference of what the vertical position would have been but for the
  2831. trap, and what the vertical position actually is.
  2832. .
  2833. Useful in conjunction with the
  2834. .B \[rs]n[.ne]
  2835. register.
  2836. .
  2837. .TP
  2838. .B \[rs]n[.U]
  2839. Set to 1 if in safer mode and to 0 if in unsafe mode (as given with the
  2840. .B \-U
  2841. command line option).
  2842. .
  2843. .TP
  2844. .B \[rs]n[.vpt]
  2845. 1\~if vertical position traps are enabled, 0\~otherwise.
  2846. .
  2847. .TP
  2848. .B \[rs]n[.warn]
  2849. The sum of the numbers associated with each of the currently enabled
  2850. warnings.
  2851. .
  2852. The number associated with each warning is listed in
  2853. .BR @g@troff (@MAN1EXT@).
  2854. .
  2855. .TP
  2856. .B \[rs]n[.x]
  2857. The major version number.
  2858. .
  2859. For example, if the version number is 1.03, then
  2860. .B \[rs]n[.x]
  2861. will contain\~1.
  2862. .
  2863. .TP
  2864. .B \[rs]n[.y]
  2865. The minor version number.
  2866. .
  2867. For example, if the version number is 1.03, then
  2868. .B \[rs]n[.y]
  2869. will contain\~03.
  2870. .
  2871. .TP
  2872. .B \[rs]n[.Y]
  2873. The revision number of groff.
  2874. .
  2875. .TP
  2876. .B \[rs]n[llx]
  2877. .TQ
  2878. .B \[rs]n[lly]
  2879. .TQ
  2880. .B \[rs]n[urx]
  2881. .TQ
  2882. .B \[rs]n[ury]
  2883. These four registers are set by the
  2884. .B .psbb
  2885. request and contain the bounding box values (in PostScript units) of a
  2886. given PostScript image.
  2887. .
  2888. .P
  2889. The following read/write registers are set by the
  2890. .B \[rs]w
  2891. escape sequence:
  2892. .
  2893. .TP
  2894. .B \[rs]n[rst]
  2895. .TQ
  2896. .B \[rs]n[rsb]
  2897. Like the
  2898. .B st
  2899. and
  2900. .B sb
  2901. registers, but take account of the heights and depths of glyphs.
  2902. .
  2903. .TP
  2904. .B \[rs]n[ssc]
  2905. The amount of horizontal space (possibly negative) that should be
  2906. added to the last glyph before a subscript.
  2907. .
  2908. .TP
  2909. .B \[rs]n[skw]
  2910. How far to right of the center of the last glyph in the
  2911. .B \[rs]w
  2912. argument, the center of an accent from a roman font should be placed
  2913. over that glyph.
  2914. .
  2915. .P
  2916. Other available read/write number registers are:
  2917. .
  2918. .TP
  2919. .B \[rs]n[c.]
  2920. The current input line number.
  2921. .B \[rs]n[.c]
  2922. is a read-only alias to this register.
  2923. .
  2924. .TP
  2925. .B \[rs]n[hours]
  2926. The number of hours past midnight.
  2927. .
  2928. Initialized at start-up.
  2929. .
  2930. .TP
  2931. .B \[rs]n[hp]
  2932. The current horizontal position at input line.
  2933. .
  2934. .TP
  2935. .B \[rs]n[minutes]
  2936. The number of minutes after the hour.
  2937. .
  2938. Initialized at start-up.
  2939. .
  2940. .TP
  2941. .B \[rs]n[seconds]
  2942. The number of seconds after the minute.
  2943. .
  2944. Initialized at start-up.
  2945. .
  2946. .TP
  2947. .B \[rs]n[systat]
  2948. The return value of the system() function executed by the last
  2949. .B sy
  2950. request.
  2951. .
  2952. .TP
  2953. .B \[rs]n[slimit]
  2954. If greater than\~0, the maximum number of objects on the input stack.
  2955. .
  2956. If less than or equal to\~0, there is no limit on the number of
  2957. objects on the input stack.
  2958. .
  2959. With no limit, recursion can continue until virtual memory is
  2960. exhausted.
  2961. .
  2962. .TP
  2963. .B \[rs]n[year]
  2964. The current year.
  2965. .
  2966. Note that the traditional
  2967. .B troff
  2968. number register
  2969. .B \[rs]n[yr]
  2970. is the current year minus 1900.
  2971. .
  2972. .
  2973. .\" --------------------------------------------------------------------
  2974. .SS Miscellaneous
  2975. .\" --------------------------------------------------------------------
  2976. .
  2977. .B @g@troff
  2978. predefines a single (read/write) string-based register,
  2979. .BR \[rs]*(.T ,
  2980. which contains the argument given to the
  2981. .B \-T
  2982. command line option, namely the current output device (for example,
  2983. .I latin1
  2984. or
  2985. .IR ascii ).
  2986. Note that this is not the same as the (read-only) number register
  2987. .B \[rs]n[.T]
  2988. which is defined to be\~1 if
  2989. .B troff
  2990. is called with the
  2991. .B \-T
  2992. command line option, and zero otherwise.
  2993. .
  2994. This behaviour is different to UNIX troff.
  2995. .
  2996. .P
  2997. Fonts not listed in the
  2998. .SM DESC
  2999. file are automatically mounted on the next available font position
  3000. when they are referenced.
  3001. .
  3002. If a font is to be mounted explicitly with the
  3003. .B fp
  3004. request on an unused font position, it should be mounted on the first
  3005. unused font position, which can be found in the
  3006. .B \[rs]n[.fp]
  3007. register; although
  3008. .B troff
  3009. does not enforce this strictly, it will not allow a font to be mounted
  3010. at a position whose number is much greater than that of any currently
  3011. used position.
  3012. .
  3013. .P
  3014. Interpolating a string does not hide existing macro arguments.
  3015. .
  3016. Thus in a macro, a more efficient way of doing
  3017. .
  3018. .IP
  3019. .BI . xx\ \[rs]\[rs]$@
  3020. .P
  3021. is
  3022. .
  3023. .IP
  3024. .BI \[rs]\[rs]*[ xx ]\[rs]\[rs]
  3025. .
  3026. .P
  3027. If the font description file contains pairwise kerning information,
  3028. glyphs from that font will be kerned.
  3029. .
  3030. Kerning between two glyphs can be inhibited by placing a
  3031. .B \[rs]&
  3032. between them.
  3033. .
  3034. .P
  3035. In a string comparison in a condition, characters that appear at
  3036. different input levels to the first delimiter character will not be
  3037. recognised as the second or third delimiters.
  3038. .
  3039. This applies also to the
  3040. .B tl
  3041. request.
  3042. .
  3043. In a
  3044. .B \[rs]w
  3045. escape sequence, a character that appears at a different input level
  3046. to the starting delimiter character will not be recognised as the
  3047. closing delimiter character.
  3048. .
  3049. The same is true for
  3050. .BR \[rs]A ,
  3051. .BR \[rs]b ,
  3052. .BR \[rs]B ,
  3053. .BR \[rs]C ,
  3054. .BR \[rs]l ,
  3055. .BR \[rs]L ,
  3056. .BR \[rs]o ,
  3057. .BR \[rs]X ,
  3058. and
  3059. .BR \[rs]Z .
  3060. .
  3061. When decoding a macro or string argument that is delimited by double
  3062. quotes, a character that appears at a different input level to the starting
  3063. delimiter character will not be recognised as the closing delimiter
  3064. character.
  3065. .
  3066. The implementation of
  3067. .B \[rs]$@
  3068. ensures that the double quotes surrounding an argument will appear the
  3069. same input level, which will be different to the input level of the
  3070. argument itself.
  3071. .
  3072. In a long escape name
  3073. .B ]
  3074. will not be recognized as a closing delimiter except when it occurs at
  3075. the same input level as the opening
  3076. .BR ] .
  3077. .
  3078. In compatibility mode, no attention is paid to the input-level.
  3079. .
  3080. .P
  3081. There are some new types of condition:
  3082. .
  3083. .TP
  3084. .BI .if\ r xxx
  3085. True if there is a number register named
  3086. .IR xxx .
  3087. .
  3088. .TP
  3089. .BI .if\ d xxx
  3090. True if there is a string, macro, diversion, or request named
  3091. .IR xxx .
  3092. .
  3093. .TP
  3094. .BI .if\ m xxx
  3095. True if there is a color named
  3096. .IR xxx .
  3097. .
  3098. .TP
  3099. .BI .if\ c ch
  3100. True if there is a glyph
  3101. .IR ch
  3102. available;
  3103. .I ch
  3104. is either an
  3105. .SM ASCII
  3106. character or a glyph (special character)
  3107. .BI \[rs]( xx
  3108. or
  3109. .BI \[rs][ xxx ]\f[R];
  3110. the condition will also be true if
  3111. .I ch
  3112. has been defined by the
  3113. .B char
  3114. request.
  3115. .
  3116. .TP
  3117. .BI .if\ F f
  3118. True if font
  3119. .I f
  3120. exists.
  3121. .
  3122. .B f
  3123. is handled as if it was opened with the
  3124. .B ft
  3125. request (this is, font translation and styles are applied), without
  3126. actually mounting it.
  3127. .
  3128. .TP
  3129. .BI .if\ S s
  3130. True if style
  3131. .I s
  3132. has been registered.
  3133. .
  3134. Font translation is applied.
  3135. .
  3136. .P
  3137. The
  3138. .B tr
  3139. request can now map characters onto
  3140. .BR \[rs]~ .
  3141. .
  3142. .P
  3143. It is now possible to have whitespace between the first and second dot
  3144. (or the name of the ending macro) to end a macro definition.
  3145. .
  3146. Example:
  3147. .
  3148. .IP
  3149. .ne 6v+\n(.Vu
  3150. .ft CB
  3151. .nf
  3152. .Text .if t \[rs]{\[rs]
  3153. .Text . de bar
  3154. .Text . nop Hello, I'm `bar'.
  3155. .Text . .
  3156. .Text .\[rs]}
  3157. .fi
  3158. .
  3159. .
  3160. .\" --------------------------------------------------------------------
  3161. .SH "INTERMEDIATE OUTPUT FORMAT"
  3162. .\" --------------------------------------------------------------------
  3163. .
  3164. This section describes the format output by GNU troff.
  3165. .
  3166. The output format used by GNU troff is very similar to that used
  3167. by Unix device-independent troff.
  3168. .
  3169. Only the differences are documented here.
  3170. .
  3171. .
  3172. .\" --------------------------------------------------------------------
  3173. .SS "Units"
  3174. .\" --------------------------------------------------------------------
  3175. .
  3176. The argument to the
  3177. .B s
  3178. command is in scaled points (units of
  3179. .RI points/ n ,
  3180. where
  3181. .I n
  3182. is the argument to the
  3183. .B sizescale
  3184. command in the DESC file).
  3185. .
  3186. The argument to the
  3187. .B x\ Height
  3188. command is also in scaled points.
  3189. .
  3190. .
  3191. .\" --------------------------------------------------------------------
  3192. .SS "Text Commands"
  3193. .\" --------------------------------------------------------------------
  3194. .
  3195. .TP
  3196. .BI N n
  3197. Print glyph with index\~\c
  3198. .I n
  3199. (a non-negative integer) of the current font.
  3200. .
  3201. .P
  3202. If the
  3203. .B tcommand
  3204. line is present in the DESC file, troff will use the following two
  3205. commands.
  3206. .
  3207. .TP
  3208. .BI t xxx
  3209. .I xxx
  3210. is any sequence of characters terminated by a space or a newline (to
  3211. be more precise, it is a sequence of glyphs which are accessed with
  3212. the corresponding characters); the first character should be printed at
  3213. the current position, the current horizontal position should be increased
  3214. by the width of the first character, and so on for each character.
  3215. .
  3216. The width of the glyph is that given in the font file,
  3217. appropriately scaled for the current point size, and rounded so that
  3218. it is a multiple of the horizontal resolution.
  3219. .
  3220. Special characters cannot be printed using this command.
  3221. .
  3222. .TP
  3223. .BI u n\ xxx
  3224. This is same as the
  3225. .B t
  3226. command except that after printing each character, the current
  3227. horizontal position is increased by the sum of the width of that
  3228. character and
  3229. .IR n .
  3230. .
  3231. .P
  3232. Note that single characters can have the eighth bit set, as can the
  3233. names of fonts and special characters.
  3234. .
  3235. .P
  3236. The names of glyphs and fonts can be of arbitrary length; drivers
  3237. should not assume that they will be only two characters long.
  3238. .
  3239. .P
  3240. When a glyph is to be printed, that glyph will always be
  3241. in the current font.
  3242. .
  3243. Unlike device-independent troff, it is not necessary for drivers to
  3244. search special fonts to find a glyph.
  3245. .
  3246. .P
  3247. For color support, some new commands have been added:
  3248. .
  3249. .TP
  3250. .Text \f[B]mc \f[I]cyan magenta yellow\f[R]
  3251. .TQ
  3252. .Text \f[B]md\f[R]
  3253. .TQ
  3254. .Text \f[B]mg \f[I]gray\f[R]
  3255. .TQ
  3256. .Text \f[B]mk \f[I]cyan magenta yellow black\f[R]
  3257. .TQ
  3258. .Text \f[B]mr \f[I]red green blue\f[R]
  3259. Set the color components of the current drawing color, using various
  3260. color schemes.
  3261. .
  3262. .B md
  3263. resets the drawing color to the default value.
  3264. .
  3265. The arguments are integers in the range 0 to 65536.
  3266. .
  3267. .P
  3268. The
  3269. .B x
  3270. device control command has been extended.
  3271. .
  3272. .TP
  3273. .Text \f[B]x u \f[I]n\f[R]
  3274. If
  3275. .I n
  3276. is\~1, start underlining of spaces.
  3277. .
  3278. If
  3279. .I n
  3280. is\~0, stop underlining of spaces.
  3281. .
  3282. This is needed for the
  3283. .B cu
  3284. request in nroff mode and is ignored otherwise.
  3285. .
  3286. .
  3287. .\" --------------------------------------------------------------------
  3288. .SS "Drawing Commands"
  3289. .\" --------------------------------------------------------------------
  3290. .
  3291. The
  3292. .B D
  3293. drawing command has been extended.
  3294. .
  3295. These extensions will not be used by GNU pic if the
  3296. .B \-n
  3297. option is given.
  3298. .
  3299. .TP
  3300. .Text \f[B]Df \f[I]n\f[R]\*[ic]\[rs]n
  3301. Set the shade of gray to be used for filling solid objects to
  3302. .IR n ;
  3303. .I n
  3304. must be an integer between 0 and 1000, where 0 corresponds solid white
  3305. and 1000 to solid black, and values in between correspond to
  3306. intermediate shades of gray.
  3307. .
  3308. This applies only to solid circles, solid ellipses and solid
  3309. polygons.
  3310. .
  3311. By default, a level of 1000 will be used.
  3312. .
  3313. Whatever color a solid object has, it should completely obscure
  3314. everything beneath it.
  3315. .
  3316. A value greater than 1000 or less than 0 can also be used: this means
  3317. fill with the shade of gray that is currently being used for lines and
  3318. text.
  3319. .
  3320. Normally this will be black, but some drivers may provide a way of
  3321. changing this.
  3322. .
  3323. .IP
  3324. The corresponding
  3325. .BI \[rs]D'f .\|.\|. '
  3326. command shouldn't be used since its argument is always rounded to an
  3327. integer multiple of the horizontal resolution which can lead to
  3328. surprising results.
  3329. .
  3330. .TP
  3331. .Text \f[B]DC \f[I]d\f[R]\*[ic]\[rs]n
  3332. Draw a solid circle with a diameter of
  3333. .I d
  3334. with the leftmost point at the current position.
  3335. .
  3336. .TP
  3337. .Text \f[B]DE \f[I]dx dy\f[R]\*[ic]\[rs]n
  3338. Draw a solid ellipse with a horizontal diameter of
  3339. .I dx
  3340. and a vertical diameter of
  3341. .I dy
  3342. with the leftmost point at the current position.
  3343. .EQ
  3344. delim $$
  3345. .EN
  3346. .
  3347. .TP
  3348. .Text \f[B]Dp\f[R] $dx sub 1$ $dy sub 1$ $dx sub 2$ $dy sub 2$ $...$ $dx sub n$ $dy sub n$\[rs]n
  3349. Draw a polygon with, for $i = 1 ,..., n+1$, the
  3350. .IR i -th
  3351. vertex at the current position
  3352. .
  3353. $+ sum from j=1 to i-1 ( dx sub j , dy sub j )$.
  3354. .
  3355. At the moment, GNU pic only uses this command to generate triangles
  3356. and rectangles.
  3357. .
  3358. .TP
  3359. .Text \f[B]DP\f[R] $dx sub 1$ $dy sub 1$ $dx sub 2$ $dy sub 2$ $...$ $dx sub n$ $dy sub n$\[rs]n
  3360. .
  3361. Like
  3362. .B Dp
  3363. but draw a solid rather than outlined polygon.
  3364. .
  3365. .TP
  3366. .Text \f[B]Dt \f[I]n\f[R]\*[ic]\[rs]n
  3367. Set the current line thickness to
  3368. .I n
  3369. machine units.
  3370. .
  3371. Traditionally Unix troff drivers use a line thickness proportional to
  3372. the current point size; drivers should continue to do this if no
  3373. .B Dt
  3374. command has been given, or if a
  3375. .B Dt
  3376. command has been given with a negative value of
  3377. .IR n .
  3378. A zero value of
  3379. .I n
  3380. selects the smallest available line thickness.
  3381. .
  3382. .P
  3383. A difficulty arises in how the current position should be changed after
  3384. the execution of these commands.
  3385. .
  3386. This is not of great importance since the code generated by GNU pic
  3387. does not depend on this.
  3388. .
  3389. Given a drawing command of the form
  3390. .IP
  3391. \f[B]\[rs]D\[fm]\f[I]c\f[R] $x sub 1$ $y sub 1$ $x sub 2$ $y sub 2$ $...$ $x sub n$ $y sub n$\[fm]
  3392. .
  3393. .P
  3394. where
  3395. .I c
  3396. is not one of
  3397. .BR c ,
  3398. .BR e ,
  3399. .BR l ,
  3400. .BR a ,
  3401. or
  3402. .BR ~ ,
  3403. Unix troff will treat each of the $x sub i$ as a horizontal quantity,
  3404. and each of the $y sub i$ as a vertical quantity and will assume that
  3405. the width of the drawn object is $sum from i=1 to n x sub i$,
  3406. and that the height is $sum from i=1 to n y sub i$.
  3407. .
  3408. (The assumption about the height can be seen by examining the
  3409. .B st
  3410. and
  3411. .B sb
  3412. registers after using such a
  3413. .B D
  3414. command in a \[rs]w escape sequence).
  3415. .
  3416. This rule also holds for all the original drawing commands with the
  3417. exception of
  3418. .BR De .
  3419. For the sake of compatibility GNU troff also follows this rule, even
  3420. though it produces an ugly result in the case of the
  3421. .B Dt
  3422. and
  3423. .BR Df ,
  3424. and, to a lesser extent,
  3425. .B DE
  3426. commands.
  3427. .
  3428. Thus after executing a
  3429. .B D
  3430. command of the form
  3431. .IP
  3432. \f[B]D\f[I]c\f[R] $x sub 1$ $y sub 1$ $x sub 2$ $y sub 2$ $...$ \c
  3433. $x sub n$ $y sub n$\[rs]n
  3434. .
  3435. .P
  3436. the current position should be increased by
  3437. .
  3438. $( sum from i=1 to n x sub i , sum from i=1 to n y sub i )$.
  3439. .
  3440. .P
  3441. Another set of extensions is
  3442. .
  3443. .TP
  3444. .Text \f[B]DFc \f[I]cyan magenta yellow\f[R]\*[ic]\[rs]n
  3445. .TQ
  3446. .Text \f[B]DFd\f[R]\*[ic]\[rs]n
  3447. .TQ
  3448. .Text \f[B]DFg \f[I]gray\f[R]\*[ic]\[rs]n
  3449. .TQ
  3450. .Text \f[B]DFk \f[I]cyan magenta yellow black\f[R]\*[ic]\[rs]n
  3451. .TQ
  3452. .Text \f[B]DFr \f[I]red green blue\f[R]\*[ic]\[rs]n
  3453. Set the color components of the filling color similar to the
  3454. .B m
  3455. commands above.
  3456. .
  3457. .P
  3458. The current position isn't changed by those colour commands (contrary to
  3459. .BR Df ).
  3460. .
  3461. .
  3462. .\" --------------------------------------------------------------------
  3463. .SS "Device Control Commands"
  3464. .\" --------------------------------------------------------------------
  3465. .
  3466. There is a continuation convention which permits the argument to the
  3467. .B x\ X
  3468. command to contain newlines: when outputting the argument to the
  3469. .B x\ X
  3470. command, GNU troff will follow each newline in the argument with a
  3471. .B +
  3472. character (as usual, it will terminate the entire argument with a
  3473. newline); thus if the line after the line containing the
  3474. .B x\ X
  3475. command starts with
  3476. .BR + ,
  3477. then the newline ending the line containing the
  3478. .B x\ X
  3479. command should be treated as part of the argument to the
  3480. .B x\ X
  3481. command, the
  3482. .B +
  3483. should be ignored, and the part of the line following the
  3484. .B +
  3485. should be treated like the part of the line following the
  3486. .B x\ X
  3487. command.
  3488. .
  3489. .P
  3490. The first three output commands are guaranteed to be:
  3491. .IP
  3492. .BI x\ T\ device
  3493. .br
  3494. .BI x\ res\ n\ h\ v
  3495. .br
  3496. .B x init
  3497. .
  3498. .
  3499. .\" --------------------------------------------------------------------
  3500. .SH INCOMPATIBILITIES
  3501. .\" --------------------------------------------------------------------
  3502. .
  3503. In spite of the many extensions, groff has retained compatibility to
  3504. classical troff to a large degree.
  3505. .
  3506. For the cases where the extensions lead to collisions, a special
  3507. compatibility mode with the restricted, old functionality was created
  3508. for groff.
  3509. .
  3510. .
  3511. .\" --------------------------------------------------------------------
  3512. .SS "Groff Language"
  3513. .\" --------------------------------------------------------------------
  3514. .
  3515. .I groff
  3516. provides a
  3517. .B compatibility mode
  3518. that allows to process roff code written for classical
  3519. .B troff
  3520. or for other implementations of roff in a consistent way.
  3521. .
  3522. .P
  3523. Compatibility mode can be turned on with the
  3524. .option \-C
  3525. command line option, and turned on or off with the
  3526. .request .cp
  3527. request.
  3528. .
  3529. The number register
  3530. .esc n(.C
  3531. is\~1 if compatibility mode is on, 0\~otherwise.
  3532. .
  3533. .P
  3534. This became necessary because the GNU concept for long names causes
  3535. some incompatibilities.
  3536. .I Classical troff
  3537. interprets
  3538. .IP
  3539. .request .dsabcd
  3540. .
  3541. .P
  3542. as defining a string
  3543. .B ab
  3544. with contents
  3545. .BR cd .
  3546. In
  3547. .IR groff
  3548. mode, this will be considered as a call of a macro named
  3549. .request dsabcd .
  3550. .
  3551. .P
  3552. Also
  3553. .I classical troff
  3554. interprets
  3555. .esc *[
  3556. or
  3557. .esc n[
  3558. as references to a string or number register called
  3559. .request [
  3560. while
  3561. .I groff
  3562. takes this as the start of a long name.
  3563. .
  3564. .P
  3565. In
  3566. .IR "compatibility mode" ,
  3567. groff interprets these things in the traditional way; so long
  3568. names are not recognized.
  3569. .
  3570. .P
  3571. On the other hand, groff in
  3572. .I GNU native mode
  3573. does not allow to use the single-character escapes
  3574. .esc \[rs]
  3575. (backslash),
  3576. .esc |
  3577. (vertical bar),
  3578. .esc ^
  3579. (caret),
  3580. .esc &
  3581. (ampersand),
  3582. .esc {
  3583. (opening brace),
  3584. .esc }
  3585. (closing brace),
  3586. .squoted "\[rs]\ "
  3587. (space),
  3588. .esc '
  3589. (single quote),
  3590. .esc `
  3591. (backquote),
  3592. .esc \-
  3593. (minus),
  3594. .esc _
  3595. (underline),
  3596. .esc !
  3597. (bang),
  3598. .esc %
  3599. (percent),
  3600. and
  3601. .esc c
  3602. (character c) in names of strings, macros, diversions, number
  3603. registers, fonts or environments, whereas
  3604. .I classical troff
  3605. does.
  3606. .
  3607. .P
  3608. The
  3609. .esc A
  3610. escape sequence can be helpful in avoiding these escape sequences in
  3611. names.
  3612. .
  3613. .P
  3614. Fractional pointsizes cause one noteworthy incompatibility.
  3615. .
  3616. In
  3617. .I classical
  3618. .IR troff ,
  3619. the
  3620. .request ps
  3621. request ignores scale indicators and so
  3622. .RS
  3623. .P
  3624. .B .ps\~10u
  3625. .RE
  3626. .
  3627. .P
  3628. will set the pointsize to 10\~points, whereas in groff native mode the
  3629. pointsize will be set to 10\~scaled points.
  3630. .
  3631. .P
  3632. In
  3633. .IR groff ,
  3634. there is a fundamental difference between unformatted input
  3635. characters, and formatted output characters (glyphs).
  3636. .
  3637. Everything that affects how a glyph will be output is
  3638. stored with the glyph; once a glyph has been
  3639. constructed it is unaffected by any subsequent requests that are
  3640. executed, including the
  3641. .request bd ,
  3642. .request cs ,
  3643. .request tkf ,
  3644. .request tr ,
  3645. or
  3646. .request fp
  3647. requests.
  3648. .
  3649. .P
  3650. Normally glyphs are constructed from input characters at
  3651. the moment immediately before the glyph is added to the current
  3652. output line.
  3653. .
  3654. Macros, diversions and strings are all, in fact, the same type of
  3655. object; they contain lists of input characters and glyphs
  3656. in any combination.
  3657. .
  3658. .P
  3659. Special characters can be both; before being added to the output, they
  3660. act as input entities, afterwards they denote glyphs.
  3661. .
  3662. .P
  3663. A glyph does not behave like an input character for the
  3664. purposes of macro processing; it does not inherit any of the special
  3665. properties that the input character from which it was constructed
  3666. might have had.
  3667. .
  3668. The following example will make things clearer.
  3669. .
  3670. .P
  3671. .RS
  3672. .nf
  3673. .ft CB
  3674. .Text .di x
  3675. .Text \[rs]\[rs]\[rs]\[rs]
  3676. .Text .br
  3677. .Text .di
  3678. .Text .x
  3679. .ft
  3680. .fi
  3681. .RE
  3682. .
  3683. .P
  3684. With
  3685. .I GNU troff
  3686. this will be printed as
  3687. .esc \[rs] .
  3688. So each pair of input backslashes
  3689. .squoted \[rs]\[rs]
  3690. is turned into a single output backslash glyph
  3691. .squoted \[rs]
  3692. and the resulting output backslashes are not interpreted as escape
  3693. characters when they are reread.
  3694. .
  3695. .P
  3696. .I Classical troff
  3697. would interpret them as escape characters when they were reread and
  3698. would end up printing a single backslash
  3699. .squoted \[rs] .
  3700. .
  3701. .P
  3702. In GNU, the correct way to get a printable version of the backslash
  3703. character
  3704. .squoted \[rs]
  3705. is the
  3706. .esc (rs
  3707. escape sequence, but classical troff does not provide a clean feature
  3708. for getting a non-syntactical backslash.
  3709. .
  3710. A close method is the printable version of the current escape
  3711. character using the
  3712. .esc e
  3713. escape sequence; this works if the current escape character is not
  3714. redefined.
  3715. .
  3716. It works in both GNU mode and compatibility mode, while dirty tricks
  3717. like specifying a sequence of multiple backslashes do not work
  3718. reliably; for the different handling in diversions, macro definitions,
  3719. or text mode quickly leads to a confusion about the necessary number of
  3720. backslashes.
  3721. .
  3722. .P
  3723. To store an escape sequence in a diversion that will be interpreted
  3724. when the diversion is reread, either the traditional
  3725. .esc !
  3726. transparent output facility or the
  3727. new
  3728. .esc ?
  3729. escape sequence can be used.
  3730. .
  3731. .
  3732. .\" --------------------------------------------------------------------
  3733. .SS "Intermediate Output"
  3734. .\" --------------------------------------------------------------------
  3735. .
  3736. The groff intermediate output format is in a state of evolution.
  3737. .
  3738. So far it has some incompatibilities, but it is intended to establish
  3739. a full compatibility to the classical troff output format.
  3740. .
  3741. Actually the following incompatibilities exist:
  3742. .
  3743. .Topic
  3744. The positioning after the drawing of the polygons conflicts with the
  3745. classical definition.
  3746. .
  3747. .Topic
  3748. The intermediate output cannot be rescaled to other devices as
  3749. classical "device-independent" troff did.
  3750. .
  3751. .
  3752. .\" --------------------------------------------------------------------
  3753. .SH AUTHORS
  3754. .\" --------------------------------------------------------------------
  3755. .
  3756. Copyright (C) 1989, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  3757. .
  3758. .P
  3759. This document is distributed under the terms of the FDL (GNU Free
  3760. Documentation License) version 1.1 or later.
  3761. .
  3762. You should have received a copy of the FDL on your system, it is also
  3763. available on-line at the
  3764. .URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
  3765. .
  3766. This document was written by James Clark, with modifications by
  3767. .MTO wl@gnu.org "Werner Lemberg"
  3768. and
  3769. .MTO bwarken@mayn.de "Bernd Warken" .
  3770. .
  3771. .P
  3772. This document is part of
  3773. .IR groff ,
  3774. the GNU roff distribution.
  3775. .
  3776. Formerly, the contents of this document was kept in the manual
  3777. page
  3778. .BR @g@troff (@MAN1EXT@).
  3779. Only the parts dealing with the language aspects of the different
  3780. .I roff
  3781. systems were carried over into this document.
  3782. .
  3783. The
  3784. .I troff
  3785. command line options and warnings are still documented in
  3786. .BR @g@troff (@MAN1EXT@).
  3787. .
  3788. .\" --------------------------------------------------------------------
  3789. .SH "SEE ALSO"
  3790. .\" --------------------------------------------------------------------
  3791. .
  3792. The
  3793. .I groff info
  3794. .IR file ,
  3795. cf.\&
  3796. .BR info (1)
  3797. presents all groff documentation within a single document.
  3798. .
  3799. .TP
  3800. .BR groff (@MAN1EXT@)
  3801. A list of all documentation around
  3802. .IR groff .
  3803. .
  3804. .TP
  3805. .BR groff (@MAN7EXT@)
  3806. A description of the
  3807. .I groff
  3808. language, including a short, but complete reference of all predefined
  3809. requests, registers, and escapes of plain
  3810. .IR groff .
  3811. From the command line, this is called using
  3812. .
  3813. .IP
  3814. .ShellCommand man\~7\~groff
  3815. .
  3816. .TP
  3817. .BR roff (@MAN7EXT@)
  3818. A survey of
  3819. .I roff
  3820. systems, including pointers to further historical documentation.
  3821. .
  3822. .TP
  3823. .RI [ CSTR\~#54\/ ]
  3824. The
  3825. .I Nroff/\:Troff User's Manual
  3826. by
  3827. .I J.\& F.\& Osanna
  3828. of 1976 in the revision of
  3829. .I Brian Kernighan
  3830. of 1992, being the
  3831. .URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz \
  3832. "classical troff documentation" .
  3833. .
  3834. .cp \n[groff_diff_C]
  3835. .
  3836. .\" --------------------------------------------------------------------
  3837. .\" Emacs variables
  3838. .\" --------------------------------------------------------------------
  3839. .
  3840. .\" Local Variables:
  3841. .\" mode: nroff
  3842. .\" End: