Home
        UNIX Version 7 Volume 2A
         Contents
1.    abgdezyhikImncoprstufxqw  aopBydseCnOtKAUveEconpotvoxyvo    ABGDEZYHIKLMNCOPRS TUFXQW  ABTAEZHOIKAMNEOIIPYTY   X  Q    
2.    for simulating the older roff formatters on UNIX and  GCOS  and for other special applications  Typically  you will find these packages easier to use than troff  once you get beyond the most trivial operations  you  should always consider them first     In the few cases where existing packages don   t  do the whole job  the solution is not to write an  entirely new set of troff instructions from scratch  but  to make small changes to adapt packages that already  exist     In accordance with this philosophy of letting  someone else do the work  the part of troff described  here is only a small part of the whole  although it  tries to concentrate on the more useful parts  In any    case  there is no attempt to be complete  Rather  the  emphasis is on showing how to do simple things  and  how to make incremental changes to what already  exists  The contents of the remaining sections are     2  Point sizes and line spacing   3  Fonts and special characters   4  Indents and line length   5  Tabs   6  Local motions  Drawing lines and characters  7  Strings   8     Introduction to macros  9  Titles  pages and numbering  10  Number registers and arithmetic  11  Macros with arguments  12  Conditionals  13  Environments  14  Diversions  Appendix  Typesetter character set    The troff described here is the C language version  running on UNIX at Murray Hill  as documented in     1      To use troff you have to prepare not only the  actual text you want printed  but some information  t
3.    tal or vertical dimensions  For example     7 21    would seem obvious enough     3  inches  Sorry   Remember that the default units for horizontal param   eters like ll are ems  That   s really    7 ems   2  inches     and when translated into machine units  it  becomes zero  How about    ll 7i 2    Sorry  still no good     the    2    is    2 ems     so    7i 2    is  small  although not zero  You must use    ll 7i 2u    So again  a safe rule is to attach a scale indicator to  every number  even constants     For arithmetic done within a  nr command   there is no implication of horizontal or vertical  dimension  so the default units are    units     and 7i 2  and 7i 2u mean the same thing  Thus     nr Il 7i 2  J   n llu    does just what you want  so long as you don   t forget  the u on the  Il command     11  Macros with arguments    The next step is to define macros that can  change from one use to the next according to parame   ters supplied as arguments  To make this work  we  need two things  first  when we define the macro  we  have to indicate that some parts of it will be provided  as arguments when the macro is called  Then when  the macro is called we have to provide actual argu   ments to be plugged into the definition     Let us illustrate by defining a macro  SM that  will print its argument two points smaller than the  surrounding text  That is  the macro call    SM TROFF    will produce TROFF   The definition of  SM is     de SM   s    2   1 s 2    Within 
4.   Bell Laboratories Computing Science  Technical Report 49  1976     M  E  Lesk  Typing Documents on UNIX  Bell  Laboratories  1978     J  R  Mashey and D  W  Smith  PWB MM      Programmer   s Workbench Memorandum Mac   ros  Bell Laboratories internal memorandum      2      3      4      5     2 1302    Appendix A  Phototypesetter Character Set    These characters exist in roman  italic  and bold  To get the one on the left  type the four character name on the          right   ff CFE fi  fi fl dA ffi   Fi ffl   Fl       ru   em       d4     A2    34       co      de    dg        fm      ct      ag e     bu   sq      hy              In bold    sq is m      The following are special font characters         p1     mi x   mu oe   di       eq    G   gt     gt    lt     lt            E     no    si       ap    C  ox   pt V   gr   gt  AS  amp  Ae T ua 4    da  f  Gs d3   pd   o   if V Ner   c   sb     sp u   cu M   ca  c   Gb  gt   ap E      mo     es  4   aa 5   ga O ci      bs     sc     dd  lt      dh      rh   t    t  de    ae   L Adb J  ab L   df   ef   4   k to ak     bv     ts     br   Nor   ul     Nm            These four characters also have two character names  The    is the apostrophe on terminals  the   is the other quote    mark      V   Y ea  gl       These characters exist only on the special font  but they do not have four character names          lt   gt    f          For greek  precede the roman letter by     to get the corresponding greek  for example     a is a  
5.   and so on are all legal  Notice that the scale specifier  i or p or m goes inside the quotes  Any character can  be used in place of the quotes  this is also true of all  other troff commands described in this section     Since troff does not take within the line verti   cal motions into account when figuring out where it is  on the page  output lines can have unexpected posi   tions if the left and right ends aren   t at the same vert   ical position  Thus  v  like  u and  d  should always  balance upward vertical motion in a line with the  same amount in the downward direction     Arbitrary horizontal motions are also available       h is quite analogous to  v  except that the default  scale factor is ems instead of line spaces  As an  example      h   0 1i       causes a backwards motion of a tenth of an inch  As  a practical matter  consider printing the mathematical  symbol     gt  gt      The default spacing is too wide  so eqn  replaces this by     gt  h    0 3m    gt   to produce  gt      Frequently  h is used with the    width function      w to generate motions equal to the width of some  character string  The construction     wthing    is a number equal to the width of    thing    in machine  units  1 432 inch   All troff computations are ulti     mately done in these units  To move horizontally the  width of an    x     we can say     h w xu     As we mentioned above  the default scale factor for  all horizontal dimensions is m  ems  so here we must  have the u 
6.  4i 5i 6i    Unfortunately the stops are left justified only   as on a typewriter   so lining up columns of right   justified numbers can be painful  If you have many  numbers  or if you need more complicated table lay   out  don   t use troff directly  use the tbl program  described in  3      For a handful of numeric columns  you can do  it this way  Precede every number by enough blanks  to make it line up when typed      nf     ta li 2i 3i   l tab 2 tab 3  40 tab 50 tab 60  700 tab 800 tab 900  fi    Then change each leading blank into the string  0   This is a character that does not print  but that has the    same width as a digit  When printed  this will pro   duce    1 2 3  40 50 60  700 800 900    It is also possible to fill up tabbed over space  with some character other than blanks by setting the     tab replacement character    with the  tc command     eta 1 5i 2 51  ste   ru Aru is  _    Name tab Age tab    produces    Name Age       To reset the tab replacement character to a blank  use   tc with no argument   Lines can also be drawn with  the  l command  described in Section 6      troff also provides a very general mechanism  called    fields    for setting up complicated columns    This is used by tbl   We will not go into it in this    paper     6  Local Motions  Drawing lines and characters    Remember    Area   mm and the big    P    in the    Paternoster  How are they done  troff provides a  host of commands for placing characters of any size  at any plac
7.  Jersey 07974    1  Introduction    troff  1  is a text formatting program  written  by J  F  Ossanna  for producing high quality printed  output from the phototypesetter on the UNIX and  GCOS operating systems  This document is an exam   ple of troff output     The single most important rule of using troff is  not to use it directly  but through some intermediary   In many ways  troff resembles an assembly language      a remarkably powerful and flexible one     but  nonetheless such that many operations must be  specified at a level of detail and in a form that is too  hard for most people to use effectively     For two special applications  there are pro   grams that provide an interface to troff for the major   ity of users  eqn  2  provides an easy to learn  language for typesetting mathematics  the eqn user  need know no troff whatsoever to typeset mathemat   ics  tbl  3  provides the same convenience for pro   ducing tables of arbitrary complexity     For producing straight text  which may well  contain mathematics or tables   there are a number of     macro packages    that define formatting rules and  operations for specific styles of documents  and  reduce the amount of direct contact with troff  In  particular  the     ms     4  and PWB MM  5  packages  for Bell Labs internal memoranda and external papers  provide most of the facilities needed for a wide range  of document preparation   This memo was prepared  with     ms      There are also packages for viewgraphs
8.  diverted into a macro instead of being printed  and  then at some convenient time the macro may be put  back into the input     The command  di xy begins a diversion     all  subsequent output is collected into the macro xy until  the command  di with no arguments is encountered   This terminates the diversion  The processed text is  available at any time thereafter  simply by giving the  command    xy    The vertical size of the last finished diversion is con   tained in the built in number register dn     As a simple example  suppose we want to  implement a    keep release    operation  so that text  between the commands  KS and  KE will not be split  across a page boundary  as for a figure or table    Clearly  when a  KS is encountered  we have to begin  diverting the output so we can find out how big it is   Then when a  KE is seen  we decide whether the  diverted text will fit on the current page  and print it  either there if it fits  or at the top of the next page if  it doesn   t  So      de KS    start keep      br    start fresh line   ev 1    collect in new environment  fi    make it filled text   di XX    collect in XX    de KE    end keep    br    get last partial line    di    end diversion    Jif  n dn gt    n  t  bp    bp if doesn   t fit     nf    bring it back in no fill   XX    text  eV    return to normal environment    Recall that number register nl is the current position  on the output page  Since output was being diverted   this remains at its value w
9.  important  Not  only does it save typing  but it makes later changes  much easier  Suppose we decide that the paragraph  indent is too small  the vertical space is much too big   and roman font should be forced  Instead of chang   ing the whole document  we need only change the  definition of  PP to something like     de PP  sp 2p   ti  3m  ft R       paragraph macro    and the change takes effect everywhere we used  PP        is a troff command that causes the rest of  the line to be ignored  We use it here to add com   ments to the macro definition  a wise idea once  definitions get complicated      As another example of macros  consider these  two which start and end a block of offset  unfilled  text  like most of the examples in this paper      de BS     Sp  nf    in  0 3i       start indented block     de BE   Sp   fi   in    0 3i       end indented block    Now we can surround text like    Copy to   John Doe  Richard Roberts  Stanley Smith    by the commands  BS and  BE  and it will come out  as it did above  Notice that we indented by  in  0 3i  instead of  in 0 3i  This way we can nest our uses of   BS and BE to get blocks within blocks     If later on we decide that the indent should be  0 5i  then it is only necessary to change the  definitions of  BS and  BE  not the whole paper     9  Titles  Pages and Numbering    This is an area where things get tougher   because nothing is done for you automatically  Of  necessity  some of this section is a cookbook  to be  co
10.  line is to be italicized     Fonts can also be changed within a line or  word with the in line command  f     boldface text  is produced by   fBbold flface fR text    If you want to do this so the previous font  whatever  it was  is left undisturbed  insert extra  fP commands   like this      fBbold fP flface fP fR  text fP    Because only the immediately previous font is  remembered  you have to restore the previous font  after each change or you can lose it  The same is  true of  ps and  vs when used without an argument     There are other fonts available besides the  standard set  although you can still use only four at  any given time  The command  fp tells troff what  fonts are physically mounted on the typesetter     fp 3 H    says that the Helvetica font is mounted on position 3    For a complete list of fonts and what they look like   see the troff manual   Appropriate  fp commands  should appear at the beginning of your document if  you do not use the standard fonts     It is possible to make a document relatively  independent of the actual fonts used to print it by  using font numbers instead of names  for example   f3  and  ft   3 mean    whatever font is mounted at position  3     and thus work for any setting  Normal settings  are roman font on 1  italic on 2  bold on 3  and spe   cial on 4     There is also a way to get    synthetic    bold    fonts by overstriking letters with a slight offset  Look  at the  bd command in  1      Special characters have four ch
11. 4 28 36    If the number after  ps is not one of these legal  sizes  it is rounded up to the next valid value  with a  maximum of 36  If no number follows  ps  troff  reverts to the previous size  whatever it was  troff  begins with point size 10  which is usually fine  This  document is in 9 point     The point size can also be changed in the mid   dle of a line or even a word with the in line com   mand  s  To produce    UNIX runs on a PDP 11 45  type   s8UNIX s10 runs on a  s8PDP  s1011 45    As above   s should be followed by a legal point size   except that  sO causes the size to revert to its previous  value  Notice that  s1011 can be understood correctly  as    size 10  followed by an 11     if the size is legal   but not otherwise  Be cautious with similar construc   tions     Relative size changes are also legal and useful    s   2UNIX s 2    temporarily decreases the size  whatever it is  by two  points  then restores it  Relative size changes have  the advantage that the size difference is independent  of the starting size of the document  The amount of  the relative change is restricted to a single digit     The other parameter that determines what the  type looks like is the spacing between lines  which is  set independently of the point size  Vertical spacing  is measured from the bottom of one line to the bot   tom of the next  The command to control vertical  spacing is  vs  For running text  it is usually best to  set the vertical spacing about 20  bigger tha
12. A TROFF Tutorial    Brian W  Kernighan    Bell Laboratories  Murray Hill  New Jersey 07974    ABSTRACT    troff is a text formatting program for driving the Graphic Systems photo   typesetter on the UNIX and GCOS operating systems  This device is capable of pro   ducing high quality text  this paper is an example of troff output     The phototypesetter itself normally runs with four fonts  containing roman  italic  and bold letters  as on this page   a full greek alphabet  and a substantial number of  special characters and mathematical symbols  Characters can be printed in a range of  sizes  and placed anywhere on the page     troff allows the user full control over fonts  sizes  and character positions  as  well as the usual features of a formatter     right margin justification  automatic hyphe   nation  page titling and numbering  and so on  It also provides macros  arithmetic vari   ables and operations  and conditional testing  for complicated formatting tasks     This document is an introduction to the most basic use of troff  It presents just  enough information to enable the user to do simple formatting tasks like making view   graphs  and to make incremental changes to existing packages of troff commands  In  most respects  the UNIX formatter nroff is identical to troff  so this document also  serves as a tutorial on nroff     August 4  1978     UNIX is a Trademark of Bell Laboratories     A TROFF Tutorial    Brian W  Kernighan    Bell Laboratories  Murray Hill  New
13. L is entirely  analogous  except that it draws a vertical line instead  of horizontal        7  Strings    Obviously if a paper contains a large number  of occurrences of an acute accent over a letter    e      typing  o e   for each    would be a great nuisance     Fortunately  troff provides a way in which you  can store an arbitrary collection of text in a    string      and thereafter use the string name as a shorthand for  its contents  Strings are one of several troff mechan   isms whose judicious use lets you type a document  with less effort and organize it so that extensive for   mat changes can be made with few editing changes     A reference to a string is replaced by whatever  text the string was defined as  Strings are defined  with the command  ds  The line     ds e  o e      defines the string e to have the value  o e      String names may be either one or two charac   ters long  and are referred to by   x for one character  names or    xy for two character names  Thus to get  t  l  phone  given the definition of the string e as  above  we can say t  el  ephone     If a string must begin with blanks  define it as     ds xx   text    The double quote signals the beginning of the  definition  There is no trailing quote  the end of the  line terminates the string     A string may actually be several lines long  if  troff encounters a   at the end of any line  it is  thrown away and the next line added to the current    one  So you can make a long string simply by 
14. Protecting by an extra layer of backslashes is  only needed for  n          which we haven   t come to  yet   and   itself  Things like  s   f   h   v  and so on  do not need an extra backslash  since they are con   verted by troff to an internal code immediately upon  being seen     Arithmetic expressions can appear anywhere  that a number is expected  As a trivial example      nr PS   n PS   2    decrements PS by 2  Expressions can use the arith     metic operators                  mod   the relational  operators  gt    gt     lt    lt       and     not equal   and  parentheses     Although the arithmetic we have done so far  has been straightforward  more complicated things are  somewhat tricky  First  number registers hold only  integers  troff arithmetic uses truncating integer divi   sion  just like Fortran  Second  in the absence of  parentheses  evaluation is done left to right without  any operator precedence  including relational opera   tors   Thus    1    4 3 13    becomes          1     Number registers can occur anywhere  in an expression  and so can scale indicators like p  i   m  and so on  but no spaces   Although integer divi   sion causes truncation  each number and its scale  indicator is converted to machine units  1 432 inch   before any arithmetic is done  so 1i 2u evaluates to  0 5i correctly     The scale indicator u often has to appear when  you wouldn   t expect it     in particular  when arith   metic is being done in a context that implies horizon
15. a macro definition  the symbol    n refers to  the nth argument that the macro was called with   Thus    1 is the string to be placed in a smaller point  size when  SM is called     As a slightly more complicated version  the  following definition of  SM permits optional second  and third arguments that will be printed in the normal  size      de SM     3 s    2    1 s 2   2    Arguments not provided when the macro is called are  treated as empty  so     SM TROFF     produces TROFF   while   SM TROFF         produces  TROFF   It is convenient to reverse the  order of arguments because trailing punctuation is  much more common than leading     By the way  the number of arguments that a  macro was called with is available in number register          The following macro  BD is the one used to  make the    bold roman    we have been using for troff  command names in text  It combines horizontal  motions  width computations  and argument rearrange   ment      de BD    amp    3 F1    1 h    w     1 u 1u   1 fP   2      10     The  h and  w commands need no extra backslash  as  we discussed above  The   amp  is there in case the  argument begins with a period     Two backslashes are needed with the    n com   mands  though  to protect one of them when the  macro is being defined  Perhaps a second example  will make this clearer  Consider a macro called  SH  which produces section headings rather like those in  this paper  with the sections numbered automatically   and the title in b
16. aracter names  beginning with     and they may be inserted any   where  For example     Atha  is produced by    14     12     34    In particular  greek letters are all of the form          where     is an upper or lower case roman letter rem   iniscent of the greek  Thus to get    E axB   gt      in bare troff we have to type    ES Aamu    b      gt   if  That line is unscrambled as follows        S        a    mu     b           gt    Gif    8 l  exenrm    A complete list of these special names occurs in  Appendix A     In eqn  2  the same effect can be achieved  with the input    SIGMA   alpha times beta       gt  inf    which is less concise  but clearer to the uninitiated     Notice that each four character name is a sin   gle character as far as troff is concerned     the     translate    command       tr  Gmi  em    is perfectly clear  meaning         that is  to translate     into         Some characters are automatically translated  into others  grave and acute accents  apos   trophes  become open and close single quotes         the  combination of                 is generally preferable to the  double quotes        Similarly a typed minus sign  becomes a hyphen    To print an explicit     sign  use      To get a backslash printed  use  e     4  Indents and Line Lengths    troff starts with a line length of 6 5 inches  too  wide for 8x11 paper  To reset the line length  use  the  1  command  as in    ll 6i    As with  sp  the actual length can be specified in  severa
17. by using    if    n SH gt 1  S1    There are a handful of other conditions that  can be tested with  if  For example  is the current  page even or odd     Af e  tl    even page title     Af o  tl    odd page title       gives facing pages different titles when used inside an  appropriate new page macro    Two other conditions are t and n  which tell  you whether the formatter is troff or nroff     af t troff stuff      if n nroff stuff         1l     Finally  string comparisons may be made in an  wif     af    string    string2    stuff    does    stuff    if string  is the same as string2  The  character separating the strings can be anything rea   sonable that is not contained in either string  The  strings themselves can reference strings with     argu   ments with     and so on     13  Environments    As we mentioned  there is a potential problem  when going across a page boundary  parameters like  size and font for a page title may well be different  from those in effect in the text when the page boun   dary occurs  troff provides a very general way to  deal with this and similar situations  There are three     environments     each of which has independently sett   able versions of many of the parameters associated  with processing  including size  font  line and title  lengths  fill nofill mode  tab stops  and even partially  collected lines  Thus the titling problem may be  readily solved by processing the main text in one  environment and titles in a separate one wit
18. current page number  nl for the current vertical posi   tion on the page  dy  mo and yr for the current day   month and year  and  s and f for the current size and  font   The font is a number from 1 to 4   Any of  these can be used in computations like any other  register  but some  like  s and  f  cannot be changed  with  nr     As an example of the use of number registers   in the  ms macro package  4   most significant  parameters are defined in terms of the values of a  handful of number registers  These include the point  size for text  the vertical spacing  and the line and  title lengths  To set the point size and vertical spac   ing for the following paragraphs  for example  a user  may say     nr PS 9  aor VS 11    The paragraph macro  PP is defined  roughly  as fol   lows      de PP   ps   n PS    reset size  avs   n VSp    spacing  ft R    font    sp 0 5v    half a line  ti  3m    This sets the font to Roman and the point size and  line spacing to whatever values are stored in the  number registers PS and VS     Why are there two backslashes  This is the  eternal problem of how to quote a quote  When troff  originally reads the macro definition  it peels off one  backslash to see what   s coming next  To ensure that  another is left in the definition when the macro is  used  we have to put in two backslashes in the  definition  If only one backslash is used  point size  and vertical spacing will be frozen at the time the  macro is defined  not when it is used     
19. e  You can use them to draw special char   acters or to tune your output for a particular appear   Most of these commands are straightforward   but messy to read and tough to type correctly     ance     If you won   t use eqn  subscripts and super   scripts are most easily done with the half line local  motions  u and  d  To go back up the page half a  point size  insert a  u at the desired place  to go  down  insert a  d    u and  d should always be used in  pairs  as explained below   Thus    Area      pr u2 d  produces  Area   mm    To make the    2    smaller  bracket it with  s   2    s0   Since  u and  d refer to the current point size  be sure  to put them either both inside or both outside the size  changes  or you will get an unbalanced vertical  motion     Sometimes the space given by  u and  d isn   t  the right amount  The  v command can be used to  request an arbitrary amount of vertical motion  The  in line command     v    amount      causes motion up or down the page by the amount  specified in     amount      For example  to move the    P     down  we used     in  0 6i  move paragraph in   Jl  0 3i  shorten lines   ti    0 3i  move P back      v   2 s36P sO v     2   ater noster qui est  in caelis        A minus sign causes upward motion  while no sign or  a plus sign means down the page  Thus  v      2    causes  an upward vertical motion of two line spaces     There are many other ways to specify the  amount of motion         v0 1i7    v  3p     v   0 5m   
20. e name of  a macro  not a macro call   The minus sign means     measure up from the bottom of the page     so       1i     means    one inch from the bottom        The  wh command appears in the input outside  the definition of  NP  typically the input would be     de NP     wh  li NP    Now what happens  As text is actually being  output  troff keeps track of its vertical position on the  page  and after a line is printed within one inch from  the bottom  the  NP macro is activated   In the jar   gon  the  wh command sets a trap at the specified  place  which is    sprung    when that point is passed     NP causes a skip to the top of the next page  that   s  what the    bp was for   then prints the title with the  appropriate margins     Why    bp and    sp instead of  bp and  sp  The  answer is that  sp and  bp  like several other com   mands  cause a break to take place  That is  all the  input text collected but not yet printed is flushed out  as soon as possible  and the next input line is  guaranteed to start a new line of output  If we had  used  sp or  bp in the  NP macro  this would cause a  break in the middle of the current output line when a  new page is started  The effect would be to print the  left over part of that line at the top of the page  fol   lowed by the next input line on a new output line   This is not what we want  Using     instead of   for a  command tells troff that no break is to take place        the output line currently being filled should n
21. e the     bp command  or split the job into a footer macro  invoked at the bottom margin and a header macro  invoked at the top of the page  These variations are  left as exercises     Output page numbers are computed automati   cally as each page is produced  starting at 1   but no  numbers are printed unless you ask for them expli   citly  To get page numbers printed  include the char   acter   in the  tl line at the position where you want  the number to appear  For example    tl 7     7    centers the page number inside hyphens  as on this  page  You can set the page number at any time with  either  bp n  which immediately starts a new page    numbered n  or with  pnn  which sets the page  number for the next page but doesn   t cause a skip to  the new page  Again   bp  n sets the page number to  n more than its current value   bp means  bp  1     10  Number Registers and Arithmetic    troff has a facility for doing arithmetic  and for  defining and using variables with numeric values   called number registers  Number registers  like  strings and macros  can be useful in setting up a  document so it is easy to change later  And of course  they serve for any sort of arithmetic computation     Like strings  number registers have one or two  character names  They are set by the  nr command   and are referenced anywhere by  nx  one character  name  or  n xy  two character name      There are quite a few pre defined number  registers maintained by troff  among them   for the  
22. ember  that each is just one character to troff     You can make your own overstrikes with  another special convention   z  the zero motion com   mand   zx suppresses the normal horizontal motion  after printing the single character x  so another char   acter can be laid on top of it  Although sizes can be  changed within  o  it centers the characters on the  widest  and there can be no horizontal or vertical  motions  so  z may be the only way to get what you  want     El    is produced by    sp 2   s8 z  sq s14 z  sq s22 z  sq s36  sq    The  sp is needed to leave room for the result     As another example  an extra heavy semicolon  that looks like    5 instead of   or 4    can be constructed with a big comma and a big  period above it      s 6 z  v    0 25m   v0 25m s0       0 25m    is an empirical constant     A more ornate overstrike is given by the brack   eting function  b  which piles up characters vertically   centered on the current baseline  Thus we can get big  brackets  constructing them with piled up smaller  pieces     UUs     by typing in only this      Sp   b     t dk db     b    dc df    x  b    are  cf     o    at  rk  rb       troff also provides a convenient facility for  drawing horizontal and vertical lines of arbitrary  length with arbitrary characters   I   li    draws a line  one inch long  like this    The  length can be followed by the character to use if the _  isn   t appropriate   I   0 5i     draws a half inch line of  dots  The construction  
23. end   ing each line but the last with a backslash      ds xx this    is a very    long string    Strings may be defined in terms of other  strings  or even in terms of themselves  we will dis   cuss some of these possibilities later     8  Introduction to Macros    Before we can go much further in troff  we  need to learn a bit about the macro facility  In its  simplest form  a macro is just a shorthand notation  quite similar to a string  Suppose we want every  paragraph to start in exactly the same way     with a  space and a temporary indent of two ems      Sp  ti  2m    Then to save typing  we would like to collapse these  into one shorthand line  a troff    command    like     PP    that would be treated by troff exactly as     Sp  ti  2m     PP is called a macro  The way we tell troff what   PP means is to define it with the  de command      de PP     Sp  ti  2m    The first line names the macro  we used     PP    for     paragraph     and upper case so it wouldn   t conflict  with any name that troff might already know about    The last line    marks the end of the definition  In  between is the text  which is simply inserted when   ever troff sees the    command    or macro call     PP    A macro can contain any mixture of text and format   ting commands     The definition of  PP has to precede its first  use  undefined macros are simply ignored  Names are  restricted to one or two characters     Using macros for commonly occurring  sequences of commands is critically
24. for machine units  or the motion produced  will be far too large  troff is quite happy with the    nested quotes  by the way  so long as you don   t leave  any out     As a live example of this kind of construction   all of the command names in the text  like  sp  were    done by overstriking with a slight offset  The com   mands for  sp are     Sp h    w  sp   u h   lu    sp  That is  put out     sp     move left by the width of     sp      move right 1 unit  and print     sp    again   Of course  there is a way to avoid typing that much input for    each command name  which we will discuss in Sec   tion 11      There are also several special purpose troff  commands for local motion  We have already seen   0  which is an unpaddable white space of the same  width as a digit     Unpaddable    means that it will  never be widened or split across a line by line  justification and filling  There is also   blank   which  is an unpaddable character the width of a space   l   which is half that width  V  which is one quarter of  the width of a space  and   amp   which has zero width    This last one is useful  for example  in entering a  text line which would otherwise begin with a              The command  o  used like   o   set of characters       causes  up to 9  characters to be overstruck  centered  on the widest  This is nice for accents  as in    syst o e  ga me t o e  aa l o e  aa  phonique  which makes  syst  me t  l  phonique  The accents are   ga and   aa  or   and V  rem
25. h its own  suitable parameters     The command  ev n shifts to environment n  n  must be 0  1 or 2  The command  ev with no argu   ment returns to the previous environment  Environ   ment names are maintained in a stack  so calls for  different environments may be nested and unwound  consistently     Suppose we say that the main text is processed  in environment 0  which is where troff begins by    default  Then we can modify the new page macro   NP to process titles in environment 1 like this     de NP   ev 1    shift to new environment   It 6i    set parameters here   ft R    _ps 10       any other processing       ev    return to previous environment    It is also possible to initialize the parameters for an  environment outside the  NP macro  but the version  shown keeps all the processing in one place and is  thus easier to understand and change     14  Diversions    There are numerous occasions in page layout  when it is necessary to store some text for a period of  time without actually printing it  Footnotes are the  most obvious example  the text of the footnote usu   ally appears in the input well before the place on the  page where it is to be printed is reached  In fact  the  place where it is output normally depends on how big  it is  which implies that there must be a way to pro     cess the footnote at least enough to decide its size  without printing it     troff provides a mechanism called a diversion  for doing this processing  Any part of the output may  be
26. hat tells how you want it printed   Readers who use  roff will find the approach familiar   For troff the  text and the formatting information are often  intertwined quite intimately  Most commands to troff  are placed on a line separate from the text itself   beginning with a period  one command per line   For  example     Some text    ps 14  Some more text     will change the    point size     that is  the size of the  letters being printed  to    14 point     one point is 1 72  inch  like this     Some text  Some more text     Occasionally  though  something special occurs  in the middle of a line     to produce    Area   Tr 2    you have to type  Area      p fIr fR    s8 u2 d s0     which we will explain shortly   The backslash char   acter   is used to introduce troff commands and spe   cial characters within a line of text     2  Point Sizes  Line Spacing    As mentioned above  the command  ps sets the  point size  One point is 1 72 inch  so 6 point charac   ters are at most 1 12 inch high  and 36 point charac   ters are      inch  There are 15 point sizes  listed  below     6 point  Pack my box with five dozen liquor jugs    7 point  Pack my box with five dozen liquor jugs    8 point  Pack my box with five dozen liquor jugs    9 point  Pack my box with five dozen liquor jugs   10 point  Pack my box with five dozen liquor    11 point  Pack my box with five dozen  12 point  Pack my box with five dozen    14 point  Pack my box with five  16 point 18 point 20 point    22 2
27. hen the diversion started   dn is the amount of text in the diversion   t  another  built in register  is the distance to the next trap   which we assume is at the bottom margin of the page   If the diversion is large enough to go past the trap   the  if is satisfied  and a  bp is issued  In either case   the diverted output is then brought back with  XX  It  is essential to bring it back in no fill mode so troff  will do no further processing on it     This is not the most general keep release  nor  is it robust in the face of all conceivable inputs  but it  would require more space than we have here to write  it in full generality  This section is not intended to    ah pe    teach everything about diversions  but to sketch out  enough that you can read existing macro packages  with some comprehension     Acknowledgements    I am deeply indebted to J  F  Ossanna  the  author of troff  for his repeated patient explanations  of fine points  and for his continuing willingness to  adapt troff to make other uses easier  I am also  grateful to Jim Blinn  Ted Dolotta  Doug Mcllroy   Mike Lesk and Joel Sturman for helpful comments on  this paper     References     1  J  F  Ossanna  NROFF TROFF User   s Manual   Bell Laboratories Computing Science Technical    Report 54  1976     B  W  Kernighan  A System for Typesetting  Mathematics     User   s Guide  Second Edition    Bell Laboratories Computing Science Technical  Report 17  1977     M  E  Lesk  TBL     A Program to Format  Tables
28. itions for any of the strings     12  Conditionals    Suppose we want the  SH macro to leave two  extra inches of space just before section 1  but  nowhere else  The cleanest way to do that is to test  inside the  SH macro whether the section number is  1  and add some space if it is  The  if command pro   vides the conditional test that we can add just before  the heading line is output     if   n SH 1  sp 2i    first section only    The condition after the  if can be any arith   metic or logical expression  If the condition is logi   cally true  or arithmetically greater than zero  the rest  of the line is treated as if it were text     here a com   mand  If the condition is false  or zero or negative   the rest of the line is skipped     It is possible to do more than one command if  a condition is true  Suppose several operations are to  be done before section 1  One possibility is to define  a macro  S1 and invoke it if we are about to do sec   tion 1  as determined by an if      de S1      processing for section 1         de SH    if   n SH 1  S1    An alternate way is to use the extended form  of the  if  like this     if  n SH 1       processing  for section 1           The braces    and    must occur in the positions  shown or you will get unexpected extra lines in your  output  troff also provides an    if else    construction   which we will not go into here     A condition can be negated by preceding it  with    we get the same effect as above  but less  clearly  
29. l ways  inches are probably the most intuitive     The maximum line length provided by the  typesetter is 7 5 inches  by the way  To use the full  width  you will have to reset the default physical left  margin        page offset      which is normally slightly  less than one inch from the left edge of the paper   This is done by the  po command      po 0    sets the offset as far to the left as it will go     The indent command  in causes the left margin  to be indented by some specified amount from the  page offset  If we use  in to move the left margin in   and Jl to move the right margin to the left  we can  make offset blocks of text     in 0 31   ll    0 3i   text to be set into a block  ll  0 3i   in    0 3i    will create a block that looks like this     Pater noster qui est in caelis sanctificetur  nomen tuum  adveniat regnum tuum  fiat  voluntas tua  sicut in caelo  et in terra         Amen   Notice the use of         and         to specify the amount of  change  These change the previous setting by the    specified amount  rather than just overriding it  The  distinction is quite important  I   1i makes lines one  inch longer   ll 1i makes them one inch long     With  in   Il and  po  the previous value is used  if no argument is specified     To indent a single line  use the    temporary  indent    command  ti  For example  all paragraphs in  this memo effectively begin with the command    ti 3    Three of what  The default unit for  ti  as for most  horizontally 
30. n the  character size  For example  so far in this document   we have used       9 on 11     that is      _ps 9   vs 11p    If we changed to     _ps 9    vs 9p  the running text would look like this  After a few  lines  you will agree it looks a little cramped  The  right vertical spacing is partly a matter of taste   depending on how much text you want to squeeze    into a given space  and partly a matter of traditional  printing style  By default  troff uses 10 on 12     Point size and vertical spacing  make a substantial difference in the  amount of text per square inch  This is  12 on 14     Point size and vertical spacing make a substantial difference in the  amount of text per square inch  For example  10 on 12 uses about twice as much  space as 7 on 8  This is 6 on 7  which is even smaller  It packs a lot more  words per line  but you can go blind trying to read it     When used without arguments   ps and  vs  revert to the previous size and vertical spacing respec   tively     The command  sp is used to get extra vertical  space  Unadorned  it gives you one extra blank line   one  vs  whatever that has been set to   Typically   that   s more or less than you want  so  sp can be fol   lowed by information about how much space you  want         sp 2i   means    two inches of vertical space      sp 2p   means    two points of vertical space     and  sp 2    means    two vertical spaces        two of whatever  vs is  set to  this can also be made explicit with  sp 2v    t
31. old in a smaller size  The use is     SH  Section title          If the argument to a macro is to contain blanks  then  it must be surrounded by double quotes  unlike a  string  where only one leading quote is permitted      Here is the definition of the  SH macro      nr SH 0   de SH  Sp 0 31  ft B    nr SH   n SH 1    increment number   ps   n PS 1    decrease PS     n SH    1    number  title    ps   n PS    restore PS   Sp 0 31   ft R       initialize section number    The section number is kept in number register SH   which is incremented each time just before it is used    A number register may have the same name as a  macro without conflict but a string may not      We used   n SH instead of  n SH and   n PS  instead of  n PS  If we had used  n SH  we would get  the value of the register at the time the macro was  defined  not at the time it was used  If that   s what  you want  fine  but not here  Similarly  by using    n PS  we get the point size at the time the macro is  called     As an example that does not involve numbers   recall our  NP macro which had a    tl    left   center right       We could make these into parameters by using  instead    tl We LT We CT  RT     so the title comes from three strings called LT  CT  and RT  If these are empty  then the title will be a    blank line  Normally CT would be set with some   thing like   ds CT         to give just the page number between hyphens  as on  the top of this page   but a user could supply private  defin
32. oriented commands  Il   in   po   is ems   an em is roughly the width of the letter    m    in the  current point size   Precisely  a em in size p is p  points   Although inches are usually clearer than ems  to people who don   t set type for a living  ems have a  place  they are a measure of size that is proportional  to the current point size  If you want to make text  that keeps its proportions regardless of point size  you  should use ems for all dimensions  Ems can be  specified as scale factors directly  as in  ti 2 5m     Lines can also be indented negatively if the  indent is already positive     ti    0 3i    causes the next line to be moved back three tenths of  an inch  Thus to make a decorative initial capital  we  indent the whole paragraph  then move the letter    P     back with a  ti command     ater noster qui est in caelis  PP reitse nomen tuum  adveniat   regnum tuum  fiat voluntas tua  sicut  in caelo  et in terra      Amen     Of course  there is also some trickery to make the    P     bigger  just a     s36P sO      and to move it down from  its normal position  see the section on local motions      5  Tabs    Tabs  the ASCII    horizontal tab    character  can  be used to produce output in columns  or to set the  horizontal position of output  Typically tabs are used  only in unfilled text  Tab stops are set by default  every half inch from the current indent  but can be  changed by the  ta command  To set stops every  inch  for example      ta li 2i 3i
33. ot be  forced out before the space or new page     The list of commands that cause a break is  short and natural      bp br  ce fi nf sp in ti    All others cause no break  regardless of whether you  use a   or a      If you really need a break  add a  br  command at the appropriate place     One other thing to beware of     if you   re  changing fonts or point sizes a lot  you may find that  if you cross a page boundary in an unexpected font or  size  your titles come out in that size and font instead  of what you intended  Furthermore  the length of a  title is independent of the current line length  so titles  will come out at the default length of 6 5 inches  unless you change it  which is done with the  lt com   mand     There are several ways to fix the problems of  point sizes and fonts in titles  For the simplest appli   cations  we can change  NP to set the proper size and  font for the title  then restore the previous values  like  this      de NP    bp      sp 0 5i   ft R    set title font to roman   ps 10    and size to 10 point  It 6i    and length to 6 inches   tl    left   center right       ps    revert to previous size  ft P    and to previous font     sp 0 3i    This version of  NP does not work if the fields  in the  tl command contain size or font changes  To  cope with that requires troff   s    environment    mechan   ism  which we will discuss in Section 13     To get a footer at the bottom of a page  you  can modify  NP so it does some processing befor
34. pied literally until you get some experience     Suppose you want a title at the top of each  page  saying just       left top center top right top    In roff  one can say     he    left top   center top    right top     fo    left bottom   center bottom    right bottom       to get headers and footers automatically on every  page  Alas  this doesn   t work in troff  a serious hard   ship for the novice  Instead you have to do a lot of  specification     You have to say what the actual title is  easy    when to print it  easy enough   and what to do at and    around the title line  harder   Taking these in reverse  order  first we define a macro  NP  for    new page     to  process titles and the like at the end of one page and  the beginning of the next      de NP      op      sp 0 5i    tl    left top   center top    right top        sp 0 3i    To make sure we   re at the top of a page  we issue a     begin page    command    bp  which causes a skip to  top of page  we   ll explain the    shortly   Then we  space down half an inch  print the title  the use of  tl  should be self explanatory  later we will discuss  parameterizing the titles   space another 0 3 inches   and we   re done     To ask for  NP at the bottom of each page  we  have to say something like    when the text is within an  inch of the bottom of the page  start the processing  for a new page     This is done with a    when    com   mand  wh      wh  li NP     No         is used before NP  this is simply th
35. roff also understands decimal fractions in most  places  so     sp 1 51    is a space of 1 5 inches  These same scale factors  can be used after  vs to define line spacing  and in  fact after most commands that deal with physical  dimensions     It should be noted that all size numbers are  converted internally to    machine units     which are  1 432 inch  1 6 point   For most purposes  this is  enough resolution that you don   t have to worry about  the accuracy of the representation  The situation is  not quite so good vertically  where resolution is 1 144  inch  1 2 point      3  Fonts and Special Characters    troff and the typesetter allow four different  fonts at any one time  Normally three fonts  Times  roman  italic and bold  and one collection of special  characters are permanently mounted     abcdefghijklmnopqrstuvwxyz 0123456789  ABCDEFGHIJKLMNOPQRSTUVWXYZ  abcdefghijklmnopqrstuvwxyz 0123456789  ABCDEFGHIJKLMNOPQRSTUVWXYZ  abcdefghijklmnopqrstuvwxyz 0123456789  ABCDEFGHIJKLMNOPQRSTUVWXYZ    The greek  mathematical symbols and miscellany of  the special font are listed in Appendix A     troff prints in roman unless told otherwise  To  switch into bold  use the  ft command    ft B  and for italics   ft I    To return to roman  use  ft R  to return to the previ   ous font  whatever it was  use either  ft P or just  ft   The    underline    command    ul    causes the next input line to print in italics   ul can  be followed by a count to indicate that more than one 
    
Download Pdf Manuals
 
 
    
Related Search
    
Related Contents
Checkmate mcpa ester 600 Stitchdp LARGE  Everyday Practical Electronics - 2000.09 - Vol  Moxa NPort IA-5150 Device Server  MicroRNA Discovery Kit User Manual, v.3  USER`S MANUAL  Un guide sur le tracteur  JOY DRUM 取扱説明書.indd  PDF:256KB  授業支援ボックス [PDF:750KB]      Copyright © All rights reserved. 
   Failed to retrieve file