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