|
|
1.1 ! root 1: .de PS \" start picture ! 2: . \" $1 is height, $2 is width, both in inches ! 3: .if \\$1>0 .sp .35 ! 4: .ie \\$1>0 .nr $1 \\$1 ! 5: .el .nr $1 0 ! 6: .in (\\n(.lu-\\$2)/2u ! 7: .ne \\$1 ! 8: .. ! 9: .de PE \" end of picture ! 10: .in ! 11: .if \\n($1>0 .sp .65 ! 12: .. ! 13: .TH PIC 1 ! 14: .CT 1 writing_troff graphics ! 15: .SH NAME ! 16: pic, tpic \(mi troff and tex preprocessors for drawing pictures ! 17: .SH SYNOPSIS ! 18: .B pic ! 19: [ ! 20: .I files ! 21: ] ! 22: .PP ! 23: .B tpic ! 24: [ ! 25: .I files ! 26: ] ! 27: .SH DESCRIPTION ! 28: .I Pic ! 29: is a ! 30: .IR troff (1) ! 31: preprocessor for drawing figures on a typesetter. ! 32: .I Pic ! 33: code is contained between ! 34: .B .PS ! 35: and ! 36: .B .PE ! 37: lines: ! 38: .IP ! 39: .EX ! 40: \&.PS \f2optional-width\fP \f2optional-height\fP ! 41: \f2element-list\fP ! 42: \&.PE ! 43: .EE ! 44: If ! 45: .IR optional-width ! 46: is present, the picture is made that many inches wide, ! 47: regardless of any dimensions used internally. ! 48: The height is scaled in the same proportion unless ! 49: .IR optional-height ! 50: is present. ! 51: If ! 52: .B .PF ! 53: is used instead of ! 54: .BR .PE , ! 55: the typesetting position after printing is restored to what it was ! 56: upon entry. ! 57: .PP ! 58: A line of the form ! 59: .IP ! 60: .BI .PS < file ! 61: causes ! 62: .I pic ! 63: to treat the the named file as if it stood in place of the ! 64: .B .PS ! 65: line. ! 66: .PP ! 67: An ! 68: .IR element-list ! 69: is a list of elements: ! 70: .EX ! 71: \f2primitive attribute-list\fP ! 72: \f2placename\fP : \f2element\fP ! 73: \f2placename\fP : \f2position\fP ! 74: \f2var\fP = \f2expr\fP ! 75: \f2direction\fP ! 76: { \f2element-list\fP } ! 77: [ \f2element-list\fP ] ! 78: for \f2var\fP = \f2expr\fP to \f2expr\fP by \f2expr\fP do { \f2anything\fP } ! 79: if \f2expr\fP then { \f2anything\fP } else { \f2anything\fP } ! 80: copy \f2file,\fP copy thru \f2macro,\fP copy \f2file\fP thru \fPmacro\fP ! 81: sh { \f2commandline\fP } ! 82: print \f2expr\fP ! 83: reset \f2optional var-list\fP ! 84: \f2troff-command\fP ! 85: .EE ! 86: .PP ! 87: Elements are separated by newlines or semicolons; ! 88: a long element may be continued by ending the line with a backslash. ! 89: Comments are introduced by a ! 90: .BI # ! 91: and terminated by a newline. ! 92: Variable names begin with a lower case letter; ! 93: place names begin with upper case. ! 94: Place and variable names retain their values ! 95: from one picture to the next. ! 96: .PP ! 97: After each primitive ! 98: the current position moves in the current direction ! 99: .RB ( up , down , ! 100: .BR left , right ! 101: (default)) by the size of the primitive. ! 102: The current position and direction are saved upon entry ! 103: to a ! 104: .BR { ... } ! 105: block and restored upon exit. ! 106: Elements within a block enclosed in ! 107: .BR [ ... ] ! 108: are treated as a unit; ! 109: the dimensions are determined by the extreme points ! 110: of the contained objects. ! 111: Names, variables, and direction of motion within a block are local to that block. ! 112: .PP ! 113: .IR troff-command ! 114: is any line that begins with a period. ! 115: Such a line is assumed to make sense in the context where it appears; ! 116: generally, this means only size and font changes. ! 117: Changes to vertical spacing will produce broken pictures. ! 118: .PP ! 119: The ! 120: .I primitive ! 121: objects are: ! 122: .br ! 123: .EX ! 124: box circle ellipse arc line arrow spline move \f2text-list\fP ! 125: .EE ! 126: .L arrow ! 127: is a synonym for ! 128: .LR "line ->" . ! 129: .PP ! 130: An ! 131: .IR attribute-list ! 132: is a sequence of zero or more attributes; ! 133: each attribute consists of a keyword, perhaps followed by a value. ! 134: .EX ! 135: .ta .5i 2.5i ! 136: h(eigh)t \f2expr\fP wid(th) \f2expr\fP ! 137: rad(ius) \f2expr\fP diam(eter) \f2expr\fP ! 138: up \f2opt-expr\fP down \f2opt-expr\fP ! 139: right \f2opt-expr\fP left \f2opt-expr\fP ! 140: from \f2position\fP to \f2position\fP ! 141: at \f2position\fP with \f2corner\fP ! 142: by \f2expr, expr\fP then ! 143: dotted \f2opt-expr\fP dashed \f2opt-expr\fP ! 144: chop \f2opt-expr\fP -> <- <-> ! 145: invis same ! 146: \f2text-list\fP \f2expr\fP ! 147: .EE ! 148: Missing attributes and values are filled in from defaults. ! 149: Not all attributes make sense for all primitives; ! 150: irrelevant ones are silently ignored. ! 151: The attribute ! 152: .L at ! 153: causes the geometrical center to be put at the specified place; ! 154: .L with ! 155: causes the position on the object to be put at the specified place. ! 156: For lines, splines and arcs, ! 157: .L height ! 158: and ! 159: .L width ! 160: refer to arrowhead size. ! 161: A bare ! 162: .I expr ! 163: implies motion in the current direction. ! 164: .PP ! 165: Text is normally an attribute of some primitive; ! 166: by default it is placed at the geometrical center of the object. ! 167: Stand-alone text is also permitted. ! 168: A text list ! 169: is a list of text items: ! 170: .EX ! 171: \f2 text-item\fP: ! 172: "..." \f2positioning ...\fP ! 173: sprintf("\f2format\fP", \f2expr\fP, \f2...\fP) \f2positioning ...\fP ! 174: \f2 positioning\fP: ! 175: center ljust rjust above below ! 176: .EE ! 177: If there are multiple text items for some primitive, ! 178: they are arranged vertically and centered except as qualified. ! 179: Positioning requests apply to each item independently. ! 180: Text items may contain in-line ! 181: .I troff ! 182: commands for size and font changes, local motions, etc., ! 183: but make sure that these are balanced ! 184: so that the entering state is restored before exiting. ! 185: .PP ! 186: A position is ultimately an ! 187: .I x,y ! 188: coordinate pair, but it may be specified in other ways. ! 189: .EX ! 190: \f2 position\fP: ! 191: \f2expr, expr\fP ! 192: \f2place\fP \(+- \f2expr, expr\fP ! 193: \f2place\fP \(+- ( \f2expr, expr\fP ) ! 194: ( \f2position\fP,\f2 position\fP ) \f2x\fP\fR from one, \f2y\fP\fR the other\fP ! 195: \f2expr\fP [\f2of the way\fP] between \f2position\fP and \f2position\fP ! 196: \f2expr\fP < \f2position\fP , \f2position\fP > ! 197: ( \f2position\fP ) ! 198: .EE ! 199: .PP ! 200: .EX ! 201: \f2 place\fP: ! 202: \f2placename\fP \f2optional-corner\fP ! 203: \f2corner\fP of \f2placename\fP ! 204: \f2nth\fP \f2primitive\fP \f2optional-corner\fP ! 205: \f2corner\fP of \f2nth\fP \f2primitive\fP ! 206: Here ! 207: .EE ! 208: An ! 209: .IR optional-corner ! 210: is one of the eight compass points ! 211: or the center or the start or end of a primitive. ! 212: .EX ! 213: \f2 optional-corner\fP: ! 214: .n .e .w .s .ne .se .nw .sw .c .start .end ! 215: \f2 corner\fP: ! 216: top bot left right start end ! 217: .EE ! 218: Each object in a picture has an ordinal number; ! 219: .IR nth ! 220: refers to this. ! 221: .EX ! 222: \f2 nth\fP: ! 223: \f2n\fPth\f2, n\fPth last ! 224: .EE ! 225: .PP ! 226: The built-in variables and their default values are: ! 227: .EX ! 228: .ta .5i 2.5i ! 229: boxwid = 0.75 boxht = 0.5 ! 230: circlerad = 0.25 arcrad = 0.25 ! 231: ellipsewid = 0.75 ellipseht = 0.5 ! 232: linewid = 0.5 lineht = 0.5 ! 233: movewid = 0.5 moveht = 0.5 ! 234: textwid = 0 textht = 0 ! 235: arrowwid = 0.05 arrowht = 0.1 ! 236: dashwid = 0.1 arrowhead = 2 ! 237: scale = 1 ! 238: .EE ! 239: These may be changed at any time, ! 240: and the new values remain in force from picture to picture until changed again ! 241: or reset by a ! 242: .L reset ! 243: statement. ! 244: Variables changed within ! 245: .B [ ! 246: and ! 247: .B ] ! 248: revert to their previous value upon exit from the block. ! 249: Dimensions are divided by ! 250: .B scale ! 251: during output. ! 252: .PP ! 253: Expressions in ! 254: .I pic ! 255: are evaluated in floating point. ! 256: All numbers representing dimensions are taken to be in inches. ! 257: .EX ! 258: \f2 expr\fP: ! 259: \f2expr\fP \f2op\fP \f2expr\fP ! 260: - \f2expr\fP ! 261: ! \f2expr\fP ! 262: ( \f2expr\fP ) ! 263: variable ! 264: number ! 265: \f2place\fP .x \f2place\fP .y \f2place\fP .ht \f2place\fP .wid \f2place\fP .rad ! 266: sin(\f2expr\fP) cos(\f2expr\fP) atan2(\f2expr,expr\fP) log(\f2expr\fP) exp(\f2expr\fP) ! 267: sqrt(\f2expr\fP) max(\f2expr,expr\fP) min(\f2expr,expr\fP) int(\f2expr\fP) rand() ! 268: \f2 op\fP: ! 269: + - * / % < <= > >= == != && || ! 270: .EE ! 271: .PP ! 272: The ! 273: .B define ! 274: and ! 275: .B undef ! 276: statements are not part of the grammar. ! 277: .EX ! 278: define \f2name\fP { \f2replacement text\fP } ! 279: undef \f2name\fP ! 280: .EE ! 281: Occurrences of ! 282: .BR $1 , ! 283: .BR $2 , ! 284: etc., ! 285: in the replacement text ! 286: will be replaced by the corresponding arguments if ! 287: .I name ! 288: is invoked as ! 289: .EX ! 290: \f2name\fP(\f2arg1\fP, \f2arg2\fP, ...) ! 291: .EE ! 292: Non-existent arguments are replaced by null strings. ! 293: Replacement text ! 294: may contain newlines. ! 295: The ! 296: .B undef ! 297: statement removes the definition of a macro. ! 298: .PP ! 299: .I Tpic ! 300: is a ! 301: .IR tex (1) ! 302: preprocessor that accepts ! 303: .IR pic ! 304: language. ! 305: It produces Tex commands that define a box called ! 306: .BR \egraph , ! 307: which contains the picture. ! 308: The box may be output this way: ! 309: .IP ! 310: .L ! 311: \ecenterline{\ebox\egraph} ! 312: .SH EXAMPLES ! 313: .EX ! 314: arrow "input" above; box "process"; arrow "output" above ! 315: move ! 316: A: ellipse ! 317: circle rad .1 with .w at A.e ! 318: circle rad .05 at 0.5 <A.c, A.ne> ! 319: arc from A.c to A.se rad 0.5 ! 320: .EE ! 321: .PP ! 322: .PS ! 323: arrow "input" above; box "process"; arrow "output" above ! 324: move ! 325: A: ellipse ! 326: circle rad .1 with .w at A.e ! 327: circle rad .05 at 0.5 <A.c, A.ne> ! 328: arc from A.c to A.se rad 0.5 ! 329: .PE ! 330: .SH "SEE ALSO" ! 331: .IR cip (9.1), ! 332: .IR ideal (1), ! 333: .IR ped (9.1), ! 334: .IR grap (1), ! 335: .IR dag (1), ! 336: .IR doctype (1), ! 337: .IR troff (1) ! 338: .br ! 339: B. W. Kernighan, ! 340: `PIC\(ema Graphics Language for Typesetting', ! 341: this manual, Volume 2
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.