










               WWrriittiinngg PPaappeerrss wwiitthh GGRROOFFFF uussiinngg --mmee


                         _E_r_i_c _P_. _A_l_l_m_a_n_*

                         Project INGRES
                 Electronics Research Laboratory
               University of California, Berkeley
                   Berkeley, California  94720


                _M_o_d_i_f_i_e_d _f_o_r _G_R_O_F_F _b_y _J_a_m_e_s _C_l_a_r_k






     This  document  describes  the  text  processing  facilities
available  on  the  UNIX|-  operating system via GROFF and the -me
macro package.  It is assumed that the reader already  is  gener-
ally  familiar  with  the UNIX operating system and a text editor
such as eexx.  This is intended to be a casual introduction, and as
such not all material is covered.  In particular, many variations
and  additional  features  of  the  -me  macro  package  are  not
explained.   For  a complete discussion of this and other issues,
see _T_h_e _-_m_e _R_e_f_e_r_e_n_c_e _M_a_n_u_a_l and _T_h_e _N_R_O_F_F_/_T_R_O_F_F  _R_e_f_e_r_e_n_c_e  _M_a_n_-
_u_a_l_.

     GROFF,  a  computer  program that runs on the UNIX operating
system, reads an input file prepared by the user  and  outputs  a
formatted  paper  suitable for publication or framing.  The input
consists of _t_e_x_t, or words to be  printed,  and  _r_e_q_u_e_s_t_s,  which
give  instructions to the GROFF program telling how to format the
printed copy.

     Section 1 describes the basics of text processing.   Section
2  describes  the basic requests.  Section 3 introduces displays.
Annotations, such as footnotes, are handled in  section  4.   The
more  complex  requests  which are not discussed in section 2 are
covered in section 5.  Finally, section 6  discusses  things  you
will need to know if you want to typeset documents.  If you are a
novice, you probably won't want to read beyond  section  4  until
____________________
   *Author's  current  address:  Britton  Lee, Inc., 1919 Addison
Suite 105, Berkeley, California 94704.
   |-UNIX is a trademark of AT&T Bell Laboratories




UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                             11







UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                             22


you have tried some of the basic features out.

     When  you have your raw text ready, call the GROFF formatter
by typing as a request to the UNIX shell:

    groff -me -T_t_y_p_e _f_i_l_e_s

where _t_y_p_e describes the type of output device you are using.   A
complete description of options to the GROFF command can be found
in ggrrooffff(1).

     The word _a_r_g_u_m_e_n_t is used in this manual to mean a  word  or
number which appears on the same line as a request which modifies
the meaning of that request.  For example, the request

    .sp

spaces one line, but

    .sp 4

spaces four lines.  The number  44  is  an  _a_r_g_u_m_e_n_t  to  the  ..sspp
request which says to space four lines instead of one.  Arguments
are separated from the request and from each other by spaces.

11..  BBaassiiccss ooff TTeexxtt PPrroocceessssiinngg

        The primary function of GROFF is to  _c_o_l_l_e_c_t  words  from
   input  lines,  _f_i_l_l output lines with those words, _j_u_s_t_i_f_y the
   right hand margin by inserting extra spaces in the  line,  and
   output the result.  For example, the input:

       Now is the time
       for all good men
       to come to the aid
       of their party.
       Four score and seven
       years ago,...

   will  be read, packed onto output lines, and justified to pro-
   duce:

       Now is the time for all good men to come to the aid of
       their party.  Four score and seven years ago,...

   Sometimes  you may want to start a new output line even though
   the line you are on is not yet full; for example, at  the  end
   of  a  paragraph.   To  do  this  you can cause a _b_r_e_a_k, which
   starts a new output line.  Some requests cause a  break  auto-
   matically,  as  do blank input lines and input lines beginning
   with a space.












UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                             33


        Not all input lines are text to be  formatted.   Some  of
   the  input lines are _r_e_q_u_e_s_t_s which describe how to format the
   text.  Requests always have a period or an apostrophe ("'") as
   the first character of the input line.

        The text formatter also does more complex things, such as
   automatically  numbering  pages,  skipping  over  page  folds,
   putting footnotes in the correct place, and so forth.

        I  can offer you a few hints for preparing text for input
   to GROFF.  First, keep the input  lines  short.   Short  input
   lines  are  easier  to  edit,  and  GROFF will pack words onto
   longer lines for you anyhow.  In  keeping  with  this,  it  is
   helpful  to  begin  a  new  line after every period, comma, or
   phrase, since common corrections are to  add  or  delete  sen-
   tences  or  phrases.   Second, do not put spaces at the end of
   lines, since this can sometimes confuse the  NROFF  processor.
   Third,  do  not  hyphenate  words  at the end of lines (except
   words that should have hyphens in them,  such  as  "mother-in-
   law");  GROFF  is  smart  enough to hyphenate words for you as
   needed, but is not smart enough to take hyphens out and join a
   word  back  together.   Also,  words  such  as "mother-in-law"
   should not be broken over a line, since then you  will  get  a
   space where not wanted, such as "mother- in-law".

22..  BBaassiicc RReeqquueessttss

   22..11..  PPaarraaggrraapphhss

           Paragraphs  are  begun  by using the ..pppp request.  For
      example, the input:

          .pp
          Now is the time for all good men
          to come to the aid of their party.
          Four score and seven years ago,...

      produces a blank line followed by an indented  first  line.
      The result is:

               Now  is  the  time for all good men to come to
          the aid of their party.  Four score and seven years
          ago,...


           Notice  that  the sentences of the paragraphs _m_u_s_t _n_o_t
      begin with a space, since blank lines and  lines  beginning
      with spaces cause a break.  For example, if I had typed:

          .pp
          Now is the time for all good men
                to come to the aid of their party.
          Four score and seven years ago,...










UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                             44


      The output would be:

               Now is the time for all good men
                to  come  to  the  aid  of their party.  Four
          score and seven years ago,...

      A new line begins after the word "men" because  the  second
      line began with a space character.

           There are many fancier types of paragraphs, which will
      be described later.

   22..22..  HHeeaaddeerrss aanndd FFooootteerrss

           Arbitrary headers and footers can be put  at  the  top
      and  bottom  of  every  page.   Two  requests  of  the form
      ..hhee _t_i_t_l_e and ..ffoo _t_i_t_l_e define the titles  to  put  at  the
      head  and the foot of every page, respectively.  The titles
      are called _t_h_r_e_e_-_p_a_r_t titles, that is, there is a left-jus-
      tified  part,  a centered part, and a right-justified part.
      To separate these three parts the first character of  _t_i_t_l_e
      (whatever it may be) is used as a delimiter.  Any character
      may be used, but backslash and double quote marks should be
      avoided.   The percent sign is replaced by the current page
      number whenever found  in  the  title.   For  example,  the
      input:

          .he ''%''
          .fo 'Jane Jones''My Book'

      results  in  the  page  number  centered at the top of each
      page, "Jane Jones" in the lower left corner, and "My  Book"
      in the lower right corner.

   22..33..  DDoouubbllee SSppaacciinngg

           GROFF  will  double space output text automatically if

      you use the request ..llss 22, as is done in this section.  You

      can revert to single spaced mode by typing ..llss 11.

   22..44..  PPaaggee LLaayyoouutt

           A  number  of requests allow you to change the way the
      printed copy looks, sometimes called the _l_a_y_o_u_t of the out-
      put  page.   Most  of  these requests adjust the placing of
      "white space" (blank lines or spaces).  In  these  explana-
      tions, characters in italics should be replaced with values
      you wish to use; bold characters represent characters which
      should actually be typed.












UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                             55


           The ..bbpp request starts a new page.

           The  request  ..sspp _N  leaves _N lines of blank space.  _N
      can be omitted (meaning skip a single line) or  can  be  of
      the  form _Nii (for _N inches) or _Ncc (for _N centimeters).  For
      example, the input:

          .sp 1.5i
          My thoughts on the subject
          .sp

      leaves one and a half inches of space, followed by the line
      "My  thoughts  on  the subject", followed by a single blank
      line.

           The ..iinn _+_N request changes the amount of  white  space
      on  the  left of the page (the _i_n_d_e_n_t).  The argument _N can
      be of the form ++_N (meaning leave _N spaces more than you are
      already  leaving), --_N (meaning leave less than you do now),
      or just _N (meaning leave exactly _N spaces).  _N  can  be  of
      the form _Nii or _Ncc also.  For example, the input:

          initial text
          .in 5
          some text
          .in +1i
          more text
          .in -2c
          final text

      produces  "some text" indented exactly five spaces from the
      left margin, "more text" indented five spaces plus one inch
      from the left margin (fifteen spaces on a pica typewriter),
      and "final text" indented five spaces plus one  inch  minus
      two centimeters from the margin.  That is, the output is:

          initial text
               some text
                         more text
                 final text


           The  ..ttii _+_N  (temporary  indent)  request is used like
      ..iinn _+_N when the indent should apply to one line only, after
      which  it  should revert to the previous indent.  For exam-
      ple, the input:

















UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                             66


          .in 1i
          .ti 0
          Ware, James R.  The Best of Confucius,
          Halcyon House, 1950.
          An excellent book containing translations of
          most of Confucius' most delightful sayings.
          A definite must for anyone interested in the early foundations
          of Chinese philosophy.

      produces:
      Ware, James R.  The Best of Confucius, Halcyon House, 1950.
                An excellent book containing translations of most
                of Confucius' most delightful sayings.   A  defi-
                nite  must  for  anyone  interested  in the early
                foundations of Chinese philosophy.

           Text lines can be centered by using the  ..ccee  request.
      The  line  after  the ..ccee is centered (horizontally) on the
      page.  To center more than one line, use ..ccee _N (where _N  is
      the  number  of  lines to center), followed by the _N lines.
      If you want to center many lines but don't  want  to  count
      them, type:

          .ce 1000
          lines to center
          .ce 0

      The ..ccee 00 request tells GROFF to center zero more lines, in
      other words, stop centering.

           All of these requests cause a  break;  that  is,  they
      always  start  a new line.  If you want to start a new line
      without performing any other action, use ..bbrr.

33..  DDiissppllaayyss

        Displays are sections of text to be set off from the body
   of  the paper.  Major quotes, tables, and figures are types of
   displays, as are all the examples used in this document.   All
   displays except centered blocks are output single spaced.

   33..11..  MMaajjoorr QQuuootteess

           Major  quotes are quotes which are several lines long,
      and hence are set in from the  rest  of  the  text  without
      quote  marks around them.  These can be generated using the
      commands ..((qq and ..))qq to surround the quote.   For  example,
      the input:















UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                             77


          As Weizenbaum points out:
          .(q
          It is said that to explain is to explain away.
          This maxim is nowhere so well fulfilled
          as in the areas of computer programming,...
          .)q

      generates as output:

      As Weizenbaum points out:

          It  is  said  that  to  explain is to explain away.
          This maxim is nowhere so well fulfilled as  in  the
          areas of computer programming,...


   33..22..  LLiissttss

           A  _l_i_s_t  is  an indented, single spaced, unfilled dis-
      play.  Lists should be used when the material to be printed
      should  not  be filled and justified like normal text, such
      as columns of figures or the examples used in  this  paper.
      Lists  are  surrounded  by  the  requests ..((ll and ..))ll.  For
      example, type:

          Alternatives to avoid deadlock are:
          .(l
          Lock in a specified order
          Detect deadlock and back out one process
          Lock all resources needed before proceeding
          .)l

      will produce:
      Alternatives to avoid deadlock are:

          Lock in a specified order
          Detect deadlock and back out one process
          Lock all resources needed before proceeding


   33..33..  KKeeeeppss

           A _k_e_e_p is a display of lines which are kept on a  sin-
      gle  page if possible.  An example of where you would use a
      keep might be a diagram.  Keeps differ from lists  in  that
      lists may be broken over a page boundary whereas keeps will
      not.

           Blocks are the basic kind of keep.   They  begin  with
      the  request ..((bb and end with the request ..))bb.  If there is
      not room on the current page for everything in the block, a
      new page is begun.  This has the unpleasant effect of leav-
      ing blank space at the bottom of the page.   When  this  is










UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                             88


      not appropriate, you can use the alternative, called _f_l_o_a_t_-
      _i_n_g _k_e_e_p_s.

           _F_l_o_a_t_i_n_g _k_e_e_p_s move relative to the text.  Hence, they
      are good for things which will be referred to by name, such
      as "See figure 3".  A floating keep will appear at the bot-
      tom  of the current page if it will fit; otherwise, it will
      appear at the top of the next page.  Floating  keeps  begin
      with  the line ..((zz and end with the line ..))zz.  For an exam-
      ple of a floating keep, see figure 1.  The ..hhll  request  is
      used  to  draw  a horizontal line so that the figure stands
      out from the text.

   33..44..  FFaanncciieerr DDiissppllaayyss

           Keeps and lists are normally collected in _n_o_f_i_l_l mode,
      so  that  they are good for tables and such.  If you want a
      display in fill mode (for  text),  type  ..((ll FF  (Throughout
      this section, comments applied to ..((ll also apply to ..((bb and
      ..((zz).  This kind of display will be indented from both mar-
      gins.  For example, the input:

          .(l F
          And now boys and girls,
          a newer, bigger, better toy than ever before!
          Be the first on your block to have your own computer!
          Yes kids, you too can have one of these modern
          data processing devices.
          You too can produce beautifully formatted papers
          without even batting an eye!
          .)l

      will be output as:



          _____________________________________________

          .(z
          .hl
          Text of keep to be floated.
          .sp
          .ce
          Figure 1.  Example of a Floating Keep.
          .hl
          .)z

             Figure 1.  Example of a Floating Keep.
          _____________________________________________














UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                             99


          And now boys and girls, a newer, bigger, better toy
          than ever before!  Be the first on  your  block  to
          have your own computer!  Yes kids, you too can have
          one of these modern data processing  devices.   You
          too  can produce beautifully formatted papers with-
          out even batting an eye!


           Lists and blocks are also normally indented  (floating
      keeps  are  normally left justified).  To get a left-justi-
      fied list, type ..((ll LL.  To get a  list  centered  line-for-
      line,  type ..((ll CC.  For example, to get a filled, left jus-
      tified list, enter:

          .(l L F
          text of block
          .)l

      The input:

          .(l
          first line of unfilled display
          more lines
          .)l

      produces the indented text:

          first line of unfilled display
          more lines

      Typing the character LL after the ..((ll request  produces  the
      left justified result:

      first line of unfilled display
      more lines

      Using  CC  instead of LL produces the line-at-a-time centered
      output:

                    first line of unfilled display
                              more lines


           Sometimes it may be that you want  to  center  several
      lines  as a group, rather than centering them one line at a
      time.  To do this use centered blocks, which are surrounded
      by the requests ..((cc and ..))cc.  All the lines are centered as
      a unit, such that the longest line is centered and the rest
      are  lined  up  around that line.  Notice that lines do not
      move relative to each other using centered blocks,  whereas
      they do using the CC argument to keeps.












UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                            1100


           Centered blocks are _n_o_t keeps, and may be used in con-
      junction with keeps.  For example, to  center  a  group  of
      lines as a unit and keep them on one page, use:

          .(b L
          .(c
          first line of unfilled display
          more lines
          .)c
          .)b

      to produce:

                 first line of unfilled display
                 more lines

      If  the  block  requests (..((bb and ..))bb) had been omitted the
      result would have been the same, but with no guarantee that
      the  lines of the centered block would have all been on one
      page.  Note the use of the LL argument to ..((bb;  this  causes
      the  centered block to center within the entire line rather
      than within the line minus the indent.   Also,  the  center
      requests must be nested _i_n_s_i_d_e the keep requests.

44..  AAnnnnoottaattiioonnss

        There  are  a  number  of requests to save text for later
   printing.  _F_o_o_t_n_o_t_e_s are printed at the bottom of the  current
   page.   _D_e_l_a_y_e_d _t_e_x_t is intended to be a variant form of foot-
   note; the text is printed only  when  explicitly  called  for,
   such  as  at  the  end of each chapter.  _I_n_d_e_x_e_s are a type of
   delayed text having a tag (usually the page  number)  attached
   to  each  entry  after  a row of dots.  Indexes are also saved
   until called for explicitly.

   44..11..  FFoooottnnootteess

           Footnotes begin with the request ..((ff and end with  the
      request  ..))ff.   The  current  footnote number is maintained
      automatically, and can be used by typing \**, to produce  a
      footnote  number1.  The number is automatically incremented
      after every footnote.  For example, the input:







____________________
   1Like this.












UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                            1111


          .(q
          A man who is not upright
          and at the same time is presumptuous;
          one who is not diligent and at the same time is ignorant;
          one who is untruthful and at the same time is incompetent;
          such men I do not count among acquaintances.\**
          .(f
          \**James R. Ware,
          .ul
          The Best of Confucius,
          Halcyon House, 1950.
          Page 77.
          .)f
          .)q

      generates the result:

          A man who is not upright and at the  same  time  is
          presumptuous;  one  who  is not diligent and at the
          same time is ignorant; one who is untruthful and at
          the  same  time  is  incompetent; such men I do not
          count among acquaintances.2

      It is important that the footnote appears _i_n_s_i_d_e the quote,
      so that you can be sure that the footnote  will  appear  on
      the same page as the quote.

   44..22..  DDeellaayyeedd TTeexxtt

           Delayed text is very similar to a footnote except that
      it is printed when called for explicitly.   This  allows  a
      list  of  references  to appear (for example) at the end of
      each chapter, as is the  convention  in  some  disciplines.
      Use \\**## on delayed text instead of \\**** as on footnotes.

           If  you are using delayed text as your standard refer-
      ence mechanism, you can still use  footnotes,  except  that
      you  may  want  to  reference them with special characters*
      rather than numbers.

   44..33..  IInnddeexxeess

           An "index" (actually more like a  table  of  contents,
      since  the entries are not sorted alphabetically) resembles
      delayed text, in that it is saved until called  for.   How-
      ever,  each  entry  has the page number (or some other tag)
      appended to the last line of the index entry after a row of
____________________
   2James R. Ware, _T_h_e _B_e_s_t _o_f _C_o_n_f_u_c_i_u_s_,  Halcyon  House,  1950.
Page 77.
   *Such as an asterisk.












UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                            1122


      dots.

           Index  entries begin with the request ..((xx and end with
      ..))xx.  The ..))xx request may have a  argument,  which  is  the
      value  to  print  as the "page number".  It defaults to the
      current page number.  If the page number given is an under-
      score  ("_")  no  page number or line of dots is printed at
      all.  To get the line of dots without a page  number,  type
      ..))xx """", which specifies an explicitly null page number.

           The ..xxpp request prints the index.

           For example, the input:

          .(x
          Sealing wax
          .)x
          .(x
          Cabbages and kings
          .)x _
          .(x
          Why the sea is boiling hot
          .)x 2.5a
          .(x
          Whether pigs have wings
          .)x ""
          .(x
          This is a terribly long index entry, such as might be used
          for a list of illustrations, tables, or figures; I expect it to
          take at least two lines.
          .)x
          .xp

      generates:
      Sealing wax ..........................................   12
      Cabbages and kings
      Why the sea is boiling hot ........................... 2.5a
      Whether pigs have wings ..............................
      This  is a terribly long index entry, such as might
           be used for a list of  illustrations,  tables,
           or  figures;  I expect it to take at least two
           lines.  .........................................   12

           The ..((xx request may have a single character  argument,
      specifying  the "name" of the index; the normal index is xx.
      Thus, several "indices" may  be  maintained  simultaneously
      (such as a list of tables, table of contents, etc.).

           Notice  that  the  index must be printed at the _e_n_d of
      the paper, rather than at the beginning where it will prob-
      ably appear (as a table of contents); the pages may have to
      be physically rearranged after printing.











UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                            1133


55..  FFaanncciieerr FFeeaattuurreess

        A  large  number  of  fancier  requests  exist,   notably
   requests  to  provide other sorts of paragraphs, numbered sec-
   tions of the form 11..22..33 (such as used in this  document),  and
   multicolumn output.

   55..11..  MMoorree PPaarraaggrraapphhss

           Paragraphs  generally start with a blank line and with
      the first line indented.  It is possible to get left-justi-
      fied block-style paragraphs by using ..llpp instead of ..pppp, as
      demonstrated by the next paragraph.

      Sometimes you want to use paragraphs  that  have  the  _b_o_d_y
      indented,   and   the  first  line  exdented  (opposite  of
      indented) with a label.  This can  be  done  with  the  ..iipp
      request.   A  word  specified  on  the  same line as ..iipp is
      printed in the margin, and the body is lined up at  a  pre-
      specified  position  (normally  five spaces).  For example,
      the input:

          .ip one
          This is the first paragraph.
          Notice how the first line
          of the resulting paragraph lines up
          with the other lines in the paragraph.
          .ip two
          And here we are at the second paragraph already.
          You may notice that the argument to ..iipp
          appears
          in the margin.
          .lp
          We can continue text...

      produces as output:

      one  This is the first paragraph.   Notice  how  the  first
           line  of  the  resulting  paragraph  lines up with the
           other lines in the paragraph.

      two  And here we are at the second paragraph already.   You
           may  notice  that  the  argument to ..iipp appears in the
           margin.

      We can continue text without starting a new indented  para-
      graph by using the ..llpp request.

           If  you have spaces in the label of a ..iipp request, you
      must use an "unpaddable space" instead of a regular  space.
      This  is typed as a backslash character ("\") followed by a
      space.  For example, to print the label "Part 1", enter:











UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                            1144


          .ip "Part\ 1"


           If a label of an  indented  paragraph  (that  is,  the
      argument to ..iipp) is longer than the space allocated for the
      label, ..iipp will begin a new  line  after  the  label.   For
      example, the input:

          .ip longlabel
          This paragraph had a long label.
          The first character of text on the first line
          will not line up with the text on second and subsequent lines,
          although they will line up with each other.

      will produce:

      longlabel
           This  paragraph had a long label.  The first character
           of text on the first line will not line  up  with  the
           text  on  second  and  subsequent lines, although they
           will line up with each other.

           It is possible to change the  size  of  the  label  by
      using  a  second  argument  which is the size of the label.
      For example, the above example could be done  correctly  by
      saying:

          .ip longlabel 10

      which  will  make  the  paragraph indent 10 spaces for this
      paragraph only.  If you have many paragraphs to indent  all
      the  same amount, use the _n_u_m_b_e_r _r_e_g_i_s_t_e_r iiii.  For example,
      to leave one inch of space for the label, type:

          .nr ii 1i

      somewhere before the first call to ..iipp.  Refer to the  ref-
      erence manual for more information.

           If  ..iipp is used with no argument at all no hanging tag
      will be printed.  For example, the input:

          .ip [a]
          This is the first paragraph of the example.
          We have seen this sort of example before.
          .ip
          This paragraph is lined up with the previous paragraph,
          but it has no tag in the margin.

      produces as output:

      [a]  This is the first paragraph of the example.   We  have
           seen this sort of example before.










UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                            1155


           This  paragraph  is  lined  up with the previous para-
           graph, but it has no tag in the margin.

           A special case of ..iipp is ..nnpp, which automatically num-
      bers  paragraphs  sequentially  from  1.   The numbering is
      reset at the next ..pppp, ..llpp, or ..sshh (to be described in  the
      next section) request.  For example, the input:

          .np
          This is the first point.
          .np
          This is the second point.
          Points are just regular paragraphs
          which are given sequence numbers automatically
          by the .np request.
          .pp
          This paragraph will reset numbering by .np.
          .np
          For example,
          we have reverted to numbering from one now.

      generates:

       (1)   This is the first point.

       (2)   This  is  the second point.  Points are just regular
             paragraphs which are given sequence numbers automat-
             ically by the .np request.

           This paragraph will reset numbering by .np.

       (1)   For  example, we have reverted to numbering from one
             now.

           The ..bbuu request gives lists  of  this  sort  that  are
      identified  with  bullets  rather  than numbers.  The para-
      graphs are also crunched together.  For example, the input:

          .bu
          One egg yolk
          .bu
          One tablespoon cream or top milk
          .bu
          Salt, cayenne, and lemon juice to taste
          .bu
          A generous two tablespoonfuls of butter

      produces3:
____________________
   3By  the  way,  if  you put the first three ingredients in a a
heavy, deep pan and whisk the ingredients  madly  over  a  medium
flame  (never  taking  your hand off the handle of the pot) until
the mixture reaches the consistency of custard (just a minute  or










UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                            1166


       +o One egg yolk
       +o One tablespoon cream or top milk
       +o Salt, cayenne, and lemon juice to taste
       +o A generous two tablespoonfuls of butter

   55..22..  SSeeccttiioonn HHeeaaddiinnggss

           Section numbers (such as the ones used in  this  docu-
      ment) can be automatically generated using the ..sshh request.
      You must tell ..sshh the _d_e_p_t_h of the  section  number  and  a
      section title.  The depth specifies how many numbers are to
      appear (separated by decimal points) in the section number.
      For example, the section number 44..22..55 has a depth of three.

           Section numbers are incremented in a fairly  intuitive
      fashion.  If you add a number (increase the depth), the new
      number starts out at one.  If you subtract section  numbers
      (or  keep the same number) the final number is incremented.
      For example, the input:

          .sh 1 "The Preprocessor"
          .sh 2 "Basic Concepts"
          .sh 2 "Control Inputs"
          .sh 3
          .sh 3
          .sh 1 "Code Generation"
          .sh 3

      produces as output the result:

          11..  TThhee PPrreepprroocceessssoorr
          11..11..  BBaassiicc CCoonncceeppttss
          11..22..  CCoonnttrrooll IInnppuuttss
          11..22..11..
          11..22..22..
          22..  CCooddee GGeenneerraattiioonn
          22..11..11..


           You can specify the section number to begin by placing
      the  section  number  after the section title, using spaces
      instead of dots.  For example, the request:

          .sh 3 "Another section" 7 3 4

      will begin the section numbered 77..33..44; all  subsequent  ..sshh
      requests will number relative to this number.

____________________
two),  then mix in the butter off-heat, you will have a wonderful
Hollandaise sauce.












UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                            1177


           There  are more complex features which will cause each
      section to be indented proportionally to the depth  of  the
      section.  For example, if you enter:

          .nr si _N

      each  section will be indented by an amount _N.  _N must have
      a scaling factor attached, that is, it must be of the  form
      _N_x,  where  _x  is  a  character telling what units _N is in.
      Common values for _x are ii for inches,  cc  for  centimeters,
      and nn for _e_n_s (the width of a single character).  For exam-
      ple, to indent each section one-half inch, type:

          .nr si 0.5i

      After this, sections will be indented by one-half inch  per
      level  of  depth  in the section number.  For example, this
      document was produced using the request

          .nr si 3n

      at the beginning of the input file, giving three spaces  of
      indent per section depth.

           Section  headers  without automatically generated num-
      bers can be done using:

          .uh "Title"

      which will do a section heading, but will put no number  on
      the section.

   55..33..  PPaarrttss ooff tthhee BBaassiicc PPaappeerr

           There  are  some  requests  which assist in setting up
      papers.  The ..ttpp request  initializes  for  a  title  page.
      There are no headers or footers on a title page, and unlike
      other pages you can space down and leave blank space at the
      top.  For example, a typical title page might appear as:

          .tp
          .sp 2i
          .(l C
          THE GROWTH OF TOENAILS
          IN UPPER PRIMATES
          .sp
          by
          .sp
          Frank N. Furter
          .)l
          .bp












UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                            1188


           The ..++cc _T request can be used to start chapters.  Each
      chapter is automatically numbered from one, and  a  heading
      is printed at the top of each chapter with the chapter num-
      ber and the chapter name _T.  For example, to begin a  chap-
      ter called "Conclusions", use the request:

          .+c "CONCLUSIONS"

      which will produce, on a new page, the lines

                               CHAPTER 5
                              CONCLUSIONS

      with appropriate spacing for a thesis.  Also, the header is
      moved to the foot of the page on the first page of a  chap-
      ter.   Although  the  ..++cc  request was not designed to work
      only with the ..tthh request,  it  is  tuned  for  the  format
      acceptable for a PhD thesis at Berkeley.

           If  the  title  parameter  _T  is  omitted from the ..++cc
      request, the result is a chapter with no heading.  This can
      also  be used at the beginning of a paper; for example, ..++cc
      was used to generate page one of this document.

           Although papers traditionally have the abstract, table
      of  contents, and so forth at the front of the paper, it is
      more convenient to format and print them  last  when  using
      GROFF.   This is so that index entries can be collected and
      then printed for the table of contents (or  whatever).   At
      the end of the paper, issue the ..++++ PP request, which begins
      the preliminary part of  the  paper.   After  issuing  this
      request,  the  ..++cc request will begin a preliminary section
      of the paper.  Most notably, this prints  the  page  number
      restarted from one in lower case Roman numbers.  ..++cc may be
      used repeatedly to begin different parts of the front mate-
      rial  for  example,  the  abstract,  the table of contents,
      acknowledgments, list of illustrations, etc.   The  request
      ..++++  BB  may also be used to begin the bibliographic section
      at the end of the paper.   For  example,  the  paper  might
      appear  as outlined in figure 2.  (In this figure, comments
      begin with the sequence \\"".)

   55..44..  EEqquuaattiioonnss aanndd TTaabblleess

           Two special UNIX  programs  exist  to  format  special
      types  of  material.   EEqqnn sets equations.  TTbbll arranges to
      print extremely pretty tables  in  a  variety  of  formats.
      This  document will only describe the embellishments to the
      standard features; consult the reference manuals for  those
      processors for a description of their use.

           The  eeqqnn  program  is  described fully in the document
      _T_y_p_e_s_e_t_t_i_n_g  _M_a_t_h_e_m_a_t_i_c_s  _-  _U_s_e_r_'_s  _G_u_i_d_e  by   Brian   W.










UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                            1199



_________________________________________________________________

.th                           \" set for thesis mode
.fo ''DRAFT''                 \" define footer for each page
.tp                           \" begin title page
.(l C                         \" center a large block
THE GROWTH OF TOENAILS
IN UPPER PRIMATES
.sp
by
.sp
Frank Furter
.)l                           \" end centered part
.+c INTRODUCTION              \" begin chapter named "INTRODUCTION"
.(x t                         \" make an entry into index `t'
Introduction
.)x                           \" end of index entry
text of chapter one
.+c "NEXT CHAPTER"            \" begin another chapter
.(x t                         \" enter into index `t' again
Next Chapter
.)x
text of chapter two
.+c CONCLUSIONS
.(x t
Conclusions
.)x
text of chapter three
.++ B                         \" begin bibliographic information
.+c BIBLIOGRAPHY              \" begin another `chapter'
.(x t
Bibliography
.)x
text of bibliography
.++ P                         \" begin preliminary material
.+c "TABLE OF CONTENTS"
.xp t                         \" print index `t' collected above
.+c PREFACE                   \" begin another preliminary section
text of preface


              Figure 2.  Outline of a Sample Paper
_________________________________________________________________


      Kernighan  and  Lorinda L. Cherry.  Equations are centered,
      and are kept on one page.  They are introduced by  the  ..EEQQ
      request and terminated by the ..EENN request.

           The  ..EEQQ  request  may  take  an equation number as an
      optional argument, which is printed vertically centered  on
      the  right  hand  side  of  the  equation.  If the equation










UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                            2200


      becomes too long it should be split between two lines.   To
      do this, type:

          .EQ (eq 34)
          text of equation 34
          .EN C
          .EQ
          continuation of equation 34
          .EN

      The  CC  on the ..EENN request specifies that the equation will
      be continued.

           The  ttbbll  program  produces  tables.   It   is   fully
      described (including numerous examples) in the document _T_b_l
      _- _A _P_r_o_g_r_a_m _t_o _F_o_r_m_a_t _T_a_b_l_e_s by M. E. Lesk.   Tables  begin
      with  the ..TTSS request and end with the ..TTEE request.  Tables
      are normally kept on a single page.  If you  have  a  table
      which  is too big to fit on a single page, so that you know
      it will extend to several pages, begin the table  with  the
      request ..TTSS HH and put the request ..TTHH after the part of the
      table which you want duplicated at the top  of  every  page
      that the table is printed on.  For example, a table defini-
      tion for a long table might look like:

          .TS H
          c s s
          n n n.
          THE TABLE TITLE
          .TH
          text of the table
          .TE


   55..55..  TTwwoo CCoolluummnn OOuuttppuutt

           You can get two column output automatically  by  using
      the  request  ..22cc.   This  causes everything after it to be
      output in two-column form.  The request ..bbcc  will  start  a
      new  column;  it  differs  from ..bbpp in that ..bbpp may leave a
      totally blank column when it starts a new page.  To  revert
      to single column output, use ..11cc.

   55..66..  DDeeffiinniinngg MMaaccrrooss

           A _m_a_c_r_o is a collection of requests and text which may
      be used by stating a simple request.  Macros begin with the
      line  ..ddee _x_x  (where  _x_x  is  the  name  of the macro to be
      defined) and end with the  line  consisting  of  two  dots.
      After  defining the macro, stating the line .._x_x is the same
      as stating all the other lines.  For example, to  define  a
      macro  that  spaces 3 lines and then centers the next input
      line, enter:










UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                            2211


          .de SS
          .sp 3
          .ce
          ..

      and use it by typing:

          .SS
          Title Line
          (beginning of text)


           Macro names may be one or two characters.  In order to
      avoid  conflicts  with  names in -me, always use upper case
      letters as names.  The only names to avoid are TTSS, TTHH,  TTEE,
      EEQQ, and EENN.

   55..77..  AAnnnnoottaattiioonnss IInnssiiddee KKeeeeppss

           Sometimes  you  may  want  to  put a footnote or index
      entry inside a keep.  For example, if you want to  maintain
      a "list of figures" you will want to do something like:

          .(z
          .(c
          text of figure
          .)c
          .ce
          Figure 5.
          .(x f
          Figure 5
          .)x
          .)z

      which  you may hope will give you a figure with a label and
      an entry in the index  ff  (presumably  a  list  of  figures
      index).   Unfortunately, the index entry is read and inter-
      preted when the keep is read, not when it  is  printed,  so
      the  page  number  in the index is likely to be wrong.  The
      solution is to use the magic string \\!!  at the beginning of
      all  the lines dealing with the index.  In other words, you
      should use:

          .(z
          .(c
          Text of figure
          .)c
          .ce
          Figure 5.
          \!.(x f
          \!Figure 5
          \!.)x
          .)z










UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                            2222


      which will defer the processing of the index until the fig-
      ure is output.  This will guarantee that the page number in
      the index is correct.  The same comments  apply  to  blocks
      (with ..((bb and ..))bb) as well.

66..  TTRROOFFFF aanndd tthhee PPhhoottoosseetttteerr

        With  a  little care, you can prepare documents that will
   print nicely on either a regular terminal or when phototypeset
   using the TROFF formatting program.

   66..11..  FFoonnttss

           A _f_o_n_t is a style of type.  There are three fonts that
      are available simultaneously, Times  Roman,  Times  Italic,
      and  Times  Bold,  plus  the special math font.  The normal
      font is Roman.

           There  are  ways  of  switching  between  fonts.   The
      requests ..rr, ..ii, ..bb, and ..bbii switch to Roman, italic, bold,
      and bold-italic fonts respectively.  You can set  a  single
      word in some font by typing (for example):

          .i word

      which will set _w_o_r_d in italics but does not affect the sur-
      rounding text.

           Notice that if you are setting more than one  word  in
      whatever  font,  you  must  surround  that word with double
      quote marks (`"') so that it will appear to the GROFF  pro-
      cessor  as  a single word.  The quote marks will not appear
      in the formatted text.  If you do  want  a  quote  mark  to
      appear,  you should quote the entire string (even if a sin-
      gle word), and use _t_w_o quote marks where you  want  one  to
      appear.  For example, if you want to produce the text:

          _"_M_a_s_t_e_r _C_o_n_t_r_o_l_"

      in italics, you must type:

          .i """Master Control\|"""

      The  \\||  produces  a very narrow space so that the "l" does
      not overlap the quote sign in GROFF, like this:

          _"_M_a_s_t_e_r _C_o_n_t_r_o_l_"


           There are also  some  "pseudo-fonts"  available.   The
      input:












UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                            2233


          .(b
          .u underlined
          .bx "words in a box"
          .)b

      generates

          -u_-n_-d_-e_-r_-l_-i_-n_-e_-d_-______
          |_w_o_r_d_s__i_n__a__b_o_x_|_

      Notice that pseudo font requests set only the single param-
      eter in the pseudo font; ordinary font requests will  begin
      setting  all text in the special font if you do not provide
      a parameter.  No more than  one  word  should  appear  with
      these  three font requests in the middle of lines.  This is
      because of the way GROFF justifies text.  For  example,  if
      you were to issue the requests:

          .u "some bold italics"
          and
          .bx "words in a box"

      in   the   middle   of   a   line   GROFF __w_o_u_l_d____p_r_o_d_u_c_e
      -s-o-m-e--b-o-l-d--i-t-a-l-i-c-s-    and     |words     in______a______b_o_x_|_,
      which I think you will agree does not look good.

           The  second  parameter  of all font requests is set in
      the original font.  For example, the font request:

          .b bold face

      generates "bold" in bold font, but sets "face" in the  font
      of the surrounding text, resulting in:

          bboollddface.

      To set the two words bboolldd and ffaaccee both in bboolldd ffaaccee, type:

          .b "bold face"


           You can mix fonts in  a  word  by  using  the  special
      sequence \\cc at the end of a line to indicate "continue text
      processing"; this allows input lines to be joined  together
      without a space between them.  For example, the input:

          .u under \c
          .i italics

      generates -u-n-d-e-r-_i_t_a_l_i_c_s, but if we had typed:

          .u under
          .i italics










UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                            2244


      the result would have been -u-n-d-e-r-_i_t_a_l_i_c_s as two words.

   66..22..  PPooiinntt SSiizzeess

           The  phototypesetter supports different sizes of type,
      measured in points.  The default point size  is  10  points
      for  most  text,  8  points  for  footnotes.  To change the
      pointsize, type:

          .sz _+_N

      where _N is the size wanted in points.  The _v_e_r_t_i_c_a_l _s_p_a_c_i_n_g
      (distance between the bottom of most letters (the _b_a_s_e_l_i_n_e)
      between adjacent lines) is set to be  proportional  to  the
      type size.

           These pointsize changes are _t_e_m_p_o_r_a_r_y!!!  For example,
      to reset the pointsize of basic text to twelve point, use:

          .nr pp 12
          .nr sp 12
          .nr tp 12

      to reset the default pointsize of paragraphs, section head-
      ers,  and titles respectively.  If you only want to set the
      names of sections in a larger pointsize, use:

          .nr sp 11

      alone -- this sets section titles (e.g., PPooiinntt SSiizzeess above)
      in a larger font than the default.

           A single word or phrase can be set in a smaller point-
      size than the surrounding text using the ..ssmm request.  This
      is  especially  convenient for words that are all capitals,
      due to the optical  illusion  that  makes  them  look  even
      larger than they actually are.  For example:

          .sm UNIX

      prints as UNIX rather than UNIX.

           Warning:  changing  point sizes on the phototypesetter
      is a slow mechanical operation.  On laser printers  it  may
      require  loading new fonts.  Size changes should be consid-
      ered carefully.

   66..33..  QQuuootteess

           It is conventional when using the  typesetter  to  use
      pairs of grave and acute accents to generate double quotes,
      rather than the double  quote  character  (`"').   This  is
      because it looks better to use grave and acute accents; for










UUSSIINNGG GGRROOFFFF AANNDD --MMEE                                            2255


      example, compare "quote" to ``quote''.

           You may use the sequences \\**((llqq and \\**((rrqq to stand for
      the left and right quote respectively.  For example, use:

          \*(lqSome things aren't true
          even if they did happen.\*(rq

      to generate the result:

          "Some things aren't true even if they did happen."

      As a shorthand, the special font request:

          .q "quoted text"

      will generate "quoted text".  Notice that you must surround
      the material to be quoted with double quote marks if it  is
      more than one word.







AAcckknnoowwlleeddggmmeennttss

     I  would like to thank Bob Epstein, Bill Joy, and Larry Rowe
for having the courage to use the -me macros to produce non-triv-
ial  papers  during  the  development  stages; Ricki Blau, Pamela
Humphrey, and Jim Joyce for their  help  with  the  documentation
phase;  peter  kessler  for numerous complaints years after I was
"done" with this project, most accompanied by fixes (hence  forc-
ing me to fix several small bugs); and the plethora of people who
have contributed ideas and have given support for the project.






This document was GROFF'ed on April 21, 2001 and applies  to  the
version of the -me macros included with GROFF version 1.16.1.















