groff: Page Motions

 
 5.22 Page Motions
 =================
 
 SeeManipulating Spacing, for a discussion of the main request for
 vertical motion, 'sp'.
 
  -- Request: .mk [reg]
  -- Request: .rt [dist]
      The request 'mk' can be used to mark a location on a page, for
      movement to later.  This request takes a register name as an
      argument in which to store the current page location.  With no
      argument it stores the location in an internal register.  The
      results of this can be used later by the 'rt' or the 'sp' request
      (or the '\v' escape).
 
      The 'rt' request returns _upwards_ to the location marked with the
      last 'mk' request.  If used with an argument, return to a position
      which distance from the top of the page is DIST (no previous call
      to 'mk' is necessary in this case).  Default scaling indicator is
      'v'.
 
      Here a primitive solution for a two-column macro.
 
           .nr column-length 1.5i
           .nr column-gap 4m
           .nr bottom-margin 1m
           .
           .de 2c
           .  br
           .  mk
           .  ll \\n[column-length]u
           .  wh -\\n[bottom-margin]u 2c-trap
           .  nr right-side 0
           ..
           .
           .de 2c-trap
           .  ie \\n[right-side] \{\
           .    nr right-side 0
           .    po -(\\n[column-length]u + \\n[column-gap]u)
           .    \" remove trap
           .    wh -\\n[bottom-margin]u
           .  \}
           .  el \{\
           .    \" switch to right side
           .    nr right-side 1
           .    po +(\\n[column-length]u + \\n[column-gap]u)
           .    rt
           .  \}
           ..
           .
           .pl 1.5i
           .ll 4i
           This is a small test that shows how the
           rt request works in combination with mk.
 
           .2c
           Starting here, text is typeset in two columns.
           Note that this implementation isn't robust
           and thus not suited for a real two-column
           macro.
 
      Result:
 
           This is a small test that shows how the
           rt request works in combination with mk.
 
           Starting  here,    isn't    robust
           text is typeset    and   thus  not
           in two columns.    suited  for   a
           Note that  this    real two-column
           implementation     macro.
 
    The following escapes give fine control of movements about the page.
 
  -- Escape: \v'e'
      Move vertically, usually from the current location on the page (if
      no absolute position operator '|' is used).  The argument E
      specifies the distance to move; positive is downwards and negative
      upwards.  The default scaling indicator for this escape is 'v'.
      Beware, however, that 'gtroff' continues text processing at the
      point where the motion ends, so you should always balance motions
      to avoid interference with text processing.
 
      '\v' doesn't trigger a trap.  This can be quite useful; for
      example, consider a page bottom trap macro that prints a marker in
      the margin to indicate continuation of a footnote or something
      similar.
 
    There are some special-case escapes for vertical motion.
 
  -- Escape: \r
      Move upwards 1v.
 
  -- Escape: \u
      Move upwards .5v.
 
  -- Escape: \d
      Move down .5v.
 
  -- Escape: \h'e'
      Move horizontally, usually from the current location (if no
      absolute position operator '|' is used).  The expression E
      indicates how far to move: positive is rightwards and negative
      leftwards.  The default scaling indicator for this escape is 'm'.
 
      This horizontal space is not discarded at the end of a line.  To
      insert discardable space of a certain length use the 'ss' request.
 
    There are a number of special-case escapes for horizontal motion.
 
  -- Escape: \<SP>
      An unbreakable and unpaddable (i.e. not expanded during filling)
      space.  (Note: This is a backslash followed by a space.)
 
  -- Escape: \~
      An unbreakable space that stretches like a normal inter-word space
      when a line is adjusted.
 
  -- Escape: \|
      A 1/6th em space.  Ignored for TTY output devices (rounded to
      zero).
 
      However, if there is a glyph defined in the current font file with
      name '\|' (note the leading backslash), the width of this glyph is
      used instead (even for TTYs).
 
  -- Escape: \^
      A 1/12th em space.  Ignored for TTY output devices (rounded to
      zero).
 
      However, if there is a glyph defined in the current font file with
      name '\^' (note the leading backslash), the width of this glyph is
      used instead (even for TTYs).
 
  -- Escape: \0
      A space the size of a digit.
 
    The following string sets the TeX logo:
 
      .ds TeX T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
 
  -- Escape: \w'text'
  -- Register: \n[st]
  -- Register: \n[sb]
  -- Register: \n[rst]
  -- Register: \n[rsb]
  -- Register: \n[ct]
  -- Register: \n[ssc]
  -- Register: \n[skw]
      Return the width of the specified TEXT in basic units.  This allows
      horizontal movement based on the width of some arbitrary text (e.g.
      given as an argument to a macro).
 
           The length of the string `abc' is \w'abc'u.
               => The length of the string `abc' is 72u.
 
      Font changes may occur in TEXT, which don't affect current
      settings.
 
      After use, '\w' sets several registers:
 
      'st'
      'sb'
           The highest and lowest point of the baseline, respectively, in
           TEXT.
 
      'rst'
      'rsb'
           Like the 'st' and 'sb' registers, but takes account of the
           heights and depths of glyphs.  In other words, this gives the
           highest and lowest point of TEXT.  Values below the baseline
           are negative.
 
      'ct'
           Defines the kinds of glyphs occurring in TEXT:
 
           0
                only short glyphs, no descenders or tall glyphs.
 
           1
                at least one descender.
 
           2
                at least one tall glyph.
 
           3
                at least one each of a descender and a tall glyph.
 
      'ssc'
           The amount of horizontal space (possibly negative) that should
           be added to the last glyph before a subscript.
 
      'skw'
           How far to right of the center of the last glyph in the '\w'
           argument, the center of an accent from a roman font should be
           placed over that glyph.
 
  -- Escape: \kp
  -- Escape: \k(ps
  -- Escape: \k[position]
      Store the current horizontal position in the _input_ line in number
      register with name POSITION (one-character name P, two-character
      name PS).  Use this, for example, to return to the beginning of a
      string for highlighting or other decoration.
 
  -- Register: \n[hp]
      The current horizontal position at the input line.
 
  -- Register: \n[.k]
      A read-only number register containing the current horizontal
      output position (relative to the current indentation).
 
  -- Escape: \o'abc'
      Overstrike glyphs A, B, C, ...; the glyphs are centered, and the
      resulting spacing is the largest width of the affected glyphs.
 
  -- Escape: \zg
      Print glyph G with zero width, i.e., without spacing.  Use this to
      overstrike glyphs left-aligned.
 
  -- Escape: \Z'anything'
      Print ANYTHING, then restore the horizontal and vertical position.
      The argument may not contain tabs or leaders.
 
      The following is an example of a strike-through macro:
 
           .de ST
           .nr ww \w'\\$1'
           \Z@\v'-.25m'\l'\\n[ww]u'@\\$1
           ..
           .
           This is
           .ST "a test"
           an actual emergency!