home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / unix / riscbsd / 1_1_contri / usd / 25_trofftu / tt12 < prev    next >
Encoding:
Text File  |  1986-05-23  |  2.4 KB  |  124 lines

  1. .\"    @(#)tt12    6.1 (Berkeley) 5/23/86
  2. .\"
  3. .NH
  4. Conditionals
  5. .PP
  6. Suppose we want the
  7. .BD .SH
  8. macro to leave two extra inches of space just before section 1,
  9. but nowhere else.
  10. The cleanest way to do that is to test inside the
  11. .BD .SH
  12. macro
  13. whether
  14. the section number is 1,
  15. and add some space if it is.
  16. The
  17. .BD .if
  18. command provides the conditional test
  19. that we can add
  20. just before the heading line is output:
  21. .P1 4
  22. ^if \e\en(SH=1 ^sp 2i    \e" first section only
  23. .P2
  24. .PP
  25. The condition after the
  26. .BD .if
  27. can be any arithmetic or logical expression.
  28. If the condition is logically true, or arithmetically greater than zero,
  29. the rest of the line is treated as if
  30. it were text _
  31. here a command.
  32. If the condition is false, or zero or negative,
  33. the rest of the line is skipped.
  34. .PP
  35. It is possible to do more than one command if a condition is true.
  36. Suppose several operations are to be done before section 1.
  37. One possibility is to define a macro 
  38. .BD .S1
  39. and invoke it
  40. if we are about to do section 1
  41. (as determined by an
  42. .BD .if ).
  43. .P1
  44. ^de S1
  45. ---  processing for section 1 ---
  46. ^^
  47. ^de SH
  48. ^^^
  49. ^if \e\en(SH=1 ^S1
  50. ^^^
  51. ^^
  52. .P2
  53. .PP
  54. An alternate way is to use the
  55. extended form of the
  56. .BD .if ,
  57. like this:
  58. .P1
  59. ^if \e\en(SH=1 \e{--- processing
  60. for section 1 ----\e}
  61. .P2
  62. The braces
  63. .BD \e{
  64. and
  65. .BD \e}
  66. must occur in the positions shown
  67. or you will get unexpected extra lines in your output.
  68. .UL troff
  69. also provides
  70. an `if-else' construction,
  71. which we will not go into here.
  72. .PP
  73. A condition can be negated by preceding it with
  74. .BD ! ;
  75. we get the same effect as above (but less clearly) by using
  76. .P1
  77. ^if !\e\en(SH>1 ^S1
  78. .P2
  79. .PP
  80. There are a handful of 
  81. other conditions that can be tested with
  82. .BD .if .
  83. For example, is the current page even or odd?
  84. .P1
  85. ^if o ^tl 'odd page title''- % -'
  86. ^if e ^tl '- % -''even page title'
  87. .P2
  88. gives facing pages different titles and page numbers on the
  89. outside edge when used inside an appropriate new page macro.
  90. .PP
  91. Two other conditions
  92. are
  93. .BD t
  94. and
  95. .BD n ,
  96. which tell you whether the formatter is
  97. .UL troff
  98. or
  99. .UL nroff . 
  100. .P1
  101. ^if t troff stuff ...
  102. ^if n nroff stuff ...
  103. .P2
  104. .PP
  105. Finally, string comparisons may be made in an
  106. .BD .if :
  107. .P1
  108. ^if  'string1'string2'  stuff
  109. .P2
  110. does `stuff' if
  111. .ul
  112. string1
  113. is the same as
  114. .ul
  115. string2.
  116. The character separating the strings can be anything
  117. reasonable that is
  118. not contained in either string.
  119. The strings themselves can reference strings with
  120. .BD \e* ,
  121. arguments with 
  122. .BD \e$ ,
  123. and so on.
  124.