Annotation of 43BSDReno/share/doc/usd/25.trofftut/tt11, revision 1.1

1.1     ! root        1: .\"    @(#)tt11        6.1 (Berkeley) 5/23/86
        !             2: .\"
        !             3: .NH
        !             4: Macros with arguments
        !             5: .PP
        !             6: The next step is to define macros that can change from one
        !             7: use to the next
        !             8: according to parameters supplied as arguments.
        !             9: To make this work, we need two things:
        !            10: first, when we define the macro, we have to indicate that some
        !            11: parts of it will be provided as arguments when the macro is called.
        !            12: Then when the macro is 
        !            13: called
        !            14: we have to provide actual arguments
        !            15: to be plugged into the definition.
        !            16: .PP
        !            17: Let us illustrate by defining a macro
        !            18: .BD .SM
        !            19: that will print its argument two points
        !            20: smaller than the surrounding text.
        !            21: That is, the macro call
        !            22: .P1
        !            23: ^SM TROFF
        !            24: .P2
        !            25: will produce
        !            26: .UC TROFF .
        !            27: .PP
        !            28: The definition of
        !            29: .BD .SM
        !            30: is
        !            31: .P1
        !            32: ^de SM
        !            33: \es\-2\e\e$1\es+2
        !            34: ^^
        !            35: .P2
        !            36: Within a macro definition,
        !            37: the symbol
        !            38: .BD \e\e$n
        !            39: refers to the
        !            40: .BD n th
        !            41: argument
        !            42: that the macro was called with.
        !            43: Thus
        !            44: .BD \e\e$1
        !            45: is the string to be placed in a smaller point
        !            46: size when
        !            47: .BD .SM
        !            48: is called.
        !            49: .PP
        !            50: As a slightly more complicated version, the following definition of
        !            51: .BD .SM
        !            52: permits optional second and third arguments
        !            53: that will be printed in the normal size:
        !            54: .P1
        !            55: ^de SM
        !            56: \e\e$3\es\-2\e\e$1\es+2\e\e$2
        !            57: ^^
        !            58: .P2
        !            59: Arguments not provided when the macro is called are treated
        !            60: as empty,
        !            61: so
        !            62: .P1
        !            63: ^SM  TROFF  ),
        !            64: .P2
        !            65: produces
        !            66: .UC TROFF ),
        !            67: while
        !            68: .P1
        !            69: ^SM  TROFF  ).  (
        !            70: .P2
        !            71: produces
        !            72: .UC TROFF ). (
        !            73: It is convenient to reverse 
        !            74: the order of arguments because trailing punctuation
        !            75: is much more common than leading.
        !            76: .PP
        !            77: By the way, the number of arguments that a macro was called with
        !            78: is available in number register
        !            79: .BD .$ .
        !            80: .PP
        !            81: The following macro
        !            82: .BD ^BD
        !            83: is the one used to make the
        !            84: `bold roman' we have been using for
        !            85: .UL troff
        !            86: command names in text.
        !            87: It combines horizontal motions, width computations,
        !            88: and argument rearrangement.
        !            89: .P1 2
        !            90: \&.de BD
        !            91: \e&\e\e$3\ef1\e\e$1\eh'\-\ew'\e\e$1'u+1u'\e\e$1\efP\e\e$2
        !            92: \&..
        !            93: .P2
        !            94: The
        !            95: .BD \eh
        !            96: and
        !            97: .BD \ew
        !            98: commands need no extra backslash, as we discussed above.
        !            99: The
        !           100: .BD \e&
        !           101: is there in case the argument begins with a period.
        !           102: .WS
        !           103: .PP
        !           104: Two backslashes are needed with the
        !           105: .BD \e\e$n
        !           106: commands, though,
        !           107: to protect one of them when the macro is
        !           108: being defined.
        !           109: Perhaps a second example will make this clearer.
        !           110: Consider a macro called
        !           111: .BD .SH
        !           112: which
        !           113: produces section headings rather like those in this paper,
        !           114: with the sections numbered automatically,
        !           115: and the title in bold in a smaller size.
        !           116: The use is
        !           117: .P1
        !           118: ^SH  "Section title ..."
        !           119: .P2
        !           120: (If the argument to a macro is to contain blanks,
        !           121: then it must be
        !           122: .ul
        !           123: surrounded
        !           124: by double quotes,
        !           125: unlike a string, where only one leading quote is permitted.)
        !           126: .PP
        !           127: Here is the definition of the
        !           128: .BD .SH
        !           129: macro:
        !           130: .P1
        !           131: .ta .75i 1.15i
        !           132: ^nr SH 0       \e" initialize section number
        !           133: ^de SH
        !           134: ^sp 0.3i
        !           135: ^ft B
        !           136: ^nr SH \e\en(SH+1      \e" increment number
        !           137: ^ps \e\en(PS\-1        \e" decrease PS
        !           138: \e\en(SH.  \e\e$1      \e" number. title
        !           139: ^ps \e\en(PS           \e" restore PS
        !           140: ^sp 0.3i
        !           141: ^ft R
        !           142: ^^
        !           143: .P2
        !           144: The section number is kept in number register SH, which is incremented each
        !           145: time just before it is used.
        !           146: (A number register may have the same name as a macro
        !           147: without conflict but a string may not.)
        !           148: .PP
        !           149: We used
        !           150: .BD \e\en(SH
        !           151: instead of
        !           152: .BD \en(SH
        !           153: and
        !           154: .BD \e\en(PS
        !           155: instead of
        !           156: .BD \en(PS .
        !           157: If we had used
        !           158: .BD \en(SH ,
        !           159: we would get the value of the register at the time the macro was
        !           160: .ul
        !           161: defined,
        !           162: not at the time it was
        !           163: .ul
        !           164: used.
        !           165: If that's what you want, fine,
        !           166: but not here.
        !           167: Similarly,
        !           168: by using
        !           169: .BD \e\en(PS ,
        !           170: we get the point size at the time the macro is called.
        !           171: .WS
        !           172: .PP
        !           173: As an example that does not involve numbers,
        !           174: recall our
        !           175: .BD .NP
        !           176: macro which had a
        !           177: .P1
        !           178: ^tl 'left'center'right'
        !           179: .P2
        !           180: We could make these into parameters by using instead
        !           181: .P1
        !           182: ^tl '\e\e*(LT'\e\e*(CT'\e\e*(RT'
        !           183: .P2
        !           184: so the title comes from three strings called LT, CT and RT.
        !           185: If these are empty, then the title will be a blank line.
        !           186: Normally CT would be set with something like
        !           187: .P1
        !           188: \&^ds  CT  - % -
        !           189: .P2
        !           190: to give just the page number between hyphens (as on the top of this page),
        !           191: but a user could supply private definitions for
        !           192: any of the strings.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.