|
|
1.1 ! root 1: .\" @(#)e6 6.1 (Berkeley) 5/22/86 ! 2: .\" ! 3: .NH ! 4: Experience ! 5: .PP ! 6: There are really three aspects of interest_how ! 7: well ! 8: .UC EQN ! 9: sets mathematics, ! 10: how well it satisfies its goal ! 11: of being ``easy to use,'' ! 12: and how easy it was to build. ! 13: .PP ! 14: The first question is easily addressed. ! 15: This entire paper ! 16: has been set by the program. ! 17: Readers can judge for themselves ! 18: whether it is good enough for their purposes. ! 19: One of our users commented that although the output ! 20: is not as good as the best hand-set material, ! 21: it is still ! 22: better than average, ! 23: and much better than ! 24: the worst. ! 25: In any case, who cares? ! 26: Printed books cannot compete with the birds and flowers ! 27: of illuminated manuscripts on esthetic grounds, ! 28: either, ! 29: but they have some clear economic advantages. ! 30: .PP ! 31: Some of the deficiencies in the output could ! 32: be cleaned up with more work on our part. ! 33: For example, we sometimes leave too much space between ! 34: a roman letter and an italic one. ! 35: If we were willing to keep track of the fonts ! 36: involved, ! 37: we could do this better more of the time. ! 38: .PP ! 39: Some other weaknesses are inherent in our output device. ! 40: It is hard, for instance, to draw a line ! 41: of an arbitrary length without getting ! 42: a perceptible overstrike at one end. ! 43: .PP ! 44: As to ease of use, ! 45: at the time of writing, ! 46: the system has been used by two distinct groups. ! 47: One user population consists of mathematicians, ! 48: chemists, physicists, and computer scientists. ! 49: Their typical reaction has been something like: ! 50: .IP " (1)" ! 51: It's easy to write, although I make the following mistakes... ! 52: .IP " (2)" ! 53: How do I do...? ! 54: .IP " (3)" ! 55: It botches the following things.... Why don't you fix them? ! 56: .IP " (4)" ! 57: You really need the following features... ! 58: .sp 5p ! 59: .PP ! 60: The learning time is short. ! 61: A few minutes gives the general flavor, ! 62: and typing a page or two of a paper generally ! 63: uncovers most of the misconceptions about how it works. ! 64: .PP ! 65: The second user group is much larger, ! 66: the secretaries and mathematical typists ! 67: who were the original target of the system. ! 68: They tend to be enthusiastic converts. ! 69: They find the language easy to learn ! 70: (most are largely self-taught), ! 71: and have little trouble producing the output they want. ! 72: They are of course less critical of the esthetics of their output ! 73: than users trained in mathematics. ! 74: After a transition period, most find ! 75: using a computer more interesting than ! 76: a regular typewriter. ! 77: .PP ! 78: The main difficulty that users have seems to be remembering ! 79: that a blank is a delimiter; ! 80: even experienced users use blanks where they shouldn't and omit them ! 81: when they are needed. ! 82: A common instance is typing ! 83: .P1 ! 84: f(x sub i) ! 85: .P2 ! 86: which produces ! 87: .EQ ! 88: f(x sub i) ! 89: .EN ! 90: instead of ! 91: .EQ ! 92: f(x sub i ) ! 93: .EN ! 94: Since the ! 95: .UC EQN ! 96: language knows no mathematics, it cannot deduce that the ! 97: right parenthesis is not part of the subscript. ! 98: .PP ! 99: The language is somewhat prolix, but this doesn't seem ! 100: excessive considering how much is being done, ! 101: and it is certainly more compact than the corresponding ! 102: .UC TROFF ! 103: commands. ! 104: For example, here is the source for the continued fraction ! 105: expression in Section 1 of this paper: ! 106: .P1 ! 107: .ne 4 ! 108: .ce 0 ! 109: a sub 0 + b sub 1 over ! 110: {a sub 1 + b sub 2 over ! 111: {a sub 2 + b sub 3 over ! 112: {a sub 3 + ... }}} ! 113: .P2 ! 114: This is the input for the large integral of Section 1; ! 115: notice the use of definitions: ! 116: .P1 ! 117: .ce 0 ! 118: .ne 15 ! 119: .in 1 ! 120: define emx "{e sup mx}" ! 121: define mab "{m sqrt ab}" ! 122: define sa "{sqrt a}" ! 123: define sb "{sqrt b}" ! 124: int dx over {a emx - be sup -mx} ~=~ ! 125: left { lpile { ! 126: 1 over {2 mab} ~log~ ! 127: {sa emx - sb} over {sa emx + sb} ! 128: above ! 129: 1 over mab ~ tanh sup -1 ( sa over sb emx ) ! 130: above ! 131: -1 over mab ~ coth sup -1 ( sa over sb emx ) ! 132: } ! 133: .in 0 ! 134: .P2 ! 135: .PP ! 136: As to ease of construction, ! 137: we have already ! 138: mentioned that there are really only a few person-months ! 139: invested. ! 140: Much of this time has gone into two things_fine-tuning ! 141: (what is the most esthetically pleasing space to use ! 142: between the numerator and denominator of a fraction?), ! 143: and changing things found deficient by our users ! 144: (shouldn't a tilde be a delimiter?). ! 145: .PP ! 146: The program consists of a number of small, ! 147: essentially unconnected modules for code generation, ! 148: a simple lexical analyzer, ! 149: a canned parser which we did not have to write, ! 150: and some miscellany associated with input files ! 151: and the macro facility. ! 152: The program is now about 1600 lines of ! 153: .UC C ! 154: [6], a high-level language reminiscent of ! 155: .UC BCPL . ! 156: About 20 percent of these lines are ``print'' statements, ! 157: generating the output code. ! 158: .PP ! 159: The semantic routines that generate the actual ! 160: .UC TROFF ! 161: commands can be changed to accommodate other formatting languages ! 162: and devices. ! 163: For example, in less than 24 hours, ! 164: one of us changed the entire semantic package ! 165: to drive ! 166: .UC NROFF, ! 167: a variant of ! 168: .UC TROFF, ! 169: for typesetting mathematics on teletypewriter devices ! 170: capable of reverse line motions. ! 171: Since many potential users do not have access ! 172: to a typesetter, but still have to type mathematics, ! 173: this provides a way to get a typed version of the final output ! 174: which is close enough for debugging purposes, ! 175: and sometimes even for ultimate use.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.