summaryrefslogtreecommitdiff
path: root/usergrps/uktug/baskervi/3_1/a-fine.tex
blob: 0aab208bf71b2a1855fdc2d9f7c2180ac6855f42 (plain)
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
174
% FINE: \tugboat\teach.tex
%
% Jonathan Fine
% 203 Coldhams Lane
% Cambridge
% CB1 3HY
%
% Tel 0223 215389
%
% Email: J.Fine@pmms.cam.ac.uk

\title{What should we teach \TeX?}
\author[Jonathan Fine]{Jonathan Fine\\Cambridge}

\begin{article}

\begin{quote}
A `virgin' \TeX\ system that has no macros is like a newborn baby
that has an immense amount to learn about the real world; but it is
capable of learning fast. \\
{\em The \TeX book} p.342
\end{quote}


\section{Introduction}

I would like to use this article as an opportunity to explain to the
UK \TeX\ community what it is that am doing, and have been trying to
do, for the last two years.  This will not be easy -- the subject
matter can be difficult and unfamiliar, even to myself -- and so the
reader's indulgence is asked for.

I am working in what the cosmologists might call the first seconds of
the universe.  More exactly, I am writing macros that are to be
loaded even before the like of \verb|plain| or \LaTeX\ are to be loaded.
Most users are concerned with later time, when \TeX\ is generating a
\verb|dvi| file from the author's typescript.

\section{Macro packages}

Before explaining further, a few words about \verb|plain| and \LaTeX.  In
the beginning was \verb|plain.tex|, which consists of 1229 lines.  \LaTeX\
2.09 consists of 1318 lines in \verb|lplain.tex|, the \LaTeX\ version of
plain, together with 8565 lines in \verb|latex.tex| and 995 lines in
\verb|lfonts.tex|.  Although the new \LaTeX\ 3 is not yet available, two of
its intended support macro files, \verb|doc.doc| and \verb|docstrip.doc|, weigh
in at 4554 and 2918 lines respectively.  (In fairness, it should be
added that the relative quantity of documentation is greater in the
later files).

A file such as \verb|plain.tex| has two purposes.  One is to place
particular macros etc.\ into the memory of \TeX -- to teach it
something.  The other is for us to read, so that we might know what is
being done.  From the beginning there has been a tension between
these two functions.
In the \TeX book Knuth does {\it not\/} list \verb|plain.tex| verbatim.  On
p.342 he explains:
\begin{quote}
``Un-optimized versions of the macros are easier for humans to
understand, so we shall deal with those;  \verb|plain.tex| contains
equivalent constructions that work better on a machine.''
\end{quote}
and further explanation is given at the top of p.348.

This tension between human comprehension and machine efficiency has
grown with time, and is commonly expressed by the complaint, that
\TeX\ is difficult to program, or inadequate as a programming
language.  (I personally like the \TeX\ macro language, and believe
its basic conception to be sound.  However the complaints are real,
for they have a basis in experience).

\section{A new point of view}

If \TeX\ were a new microprocessor with its own instruction set, then
specialist developers would produce language tools.  These would
compile higher level commands into \TeX's instruction set.  Such
tools would relieve much of the tension and difficulty in programming
\TeX.

Two years ago I began such a process of development for \TeX.  If I
had known then the work involved, I may not have started.  It has now
born its first fruit, the \verb|\noname| package, which is a valuable tool
for the author of \TeX\ macros.

Briefly, \verb|\noname| removes many of the irritations of \TeX\ by
implementing an extension of the \TeX\ programming language.  Files
written in the \verb|\noname| dialect of \TeX\ can be loaded directly into
\TeX's memory, or compiled into a form where they can be loaded at
high speed and with minimal overhead.  The situation is similar to
that of a language interpreter and compiler.  The \verb|\noname| package,
and macros written using \verb|\noname| are completely compatible with,
and independent from, the standard packages such as \verb|plain| and
\LaTeX.

\section{About {\tt noname}}

Here are some of the features of \verb|\noname| which ease the
programmer's task.
\begin{itemize}
  \item It is easy to write long comments -- every line not beginning with a
        space character or a hash \verb|#| is ignored.
  \item Lines beginning with a \verb|#| are {\it hash commands}, which control
        conditional compilation, much as in {\it C}.
  \item All white space in macro code is ignored.  However, the escape
        character \verb|~| will {\it always\/} produce an ordinary space
        character, even after a control word or a previous space producing
        \verb|~|.
  \item As well as letters and \verb|@| the digits \verb|0..9|, the underscore \verb|_| and
        the colon \verb|:| can be used to form a control word.  This does not
        conflict with the normal use of these characters.
  \item Ready access is provided to active characters, and other characters
        with unusual catcodes.
  \item Ready access is provided to control sequences which store numeric
        constants such as $-1$, $0$, $16$ and $255$.  One simply types \verb|[-1]|
        in place of \verb|\m@ne|, and \verb|[16]| instead of \verb|\sixt@@n|.
  \item Support is provided for the powerful control macros \verb|\break|,
        \verb|\continue|, \verb|\return|, \verb|\CASE| and \verb|\FIND|.
 \end{itemize}

This is only the beginning.  Intended, planned, and under
development enhancements include the following.
\begin{itemize}
\item Indexing and cross-reference utilities.
\item Interactive tutorial material for teaching how macros and primitive
commands work.  This will use the next item.
\item A {\it single-step debugger\/} which will execute \TeX\ code one step
at a time.  For example, the expansion of an expandable token such as a
macro is a single step, as is the execution of a primitive command.
\TeX\ acts on a stream of tokens.  After each step the (changed)
stream of tokens is displayed and the user regains control.
\item A powerful {\it pretty printer\/} for typesetting source files
written in the \verb|\noname| dialect of \TeX.  This will require zero or
minimal additional markup.
\item Named parameters for macros.  This means one can write
\begin{quote}
\verb|\def\mymacro #\text ... |
\end{quote}
instead of
\begin{quote}
\verb|\def\mymacro #1 ... |
\end{quote}
when coding a macro.  This makes it easier for a human to read the
macro.
\item Support for modules, with private and public identifiers.  This will
remove much of the conflict that arises from different packages
using the same identifier to hold different meanings.
\item Support for various tricks to help conserve \TeX's hash table
(maximum number of control words), registers (\verb|\count|, \verb|\skip|,
etc.)\ and other resources.
\end{itemize}

\section{Conclusions}
There is currently international discussion within the \TeX\
community -- under the title NTS (new typesetting system) -- of what
if anything should replace \TeX\ the program.  The \verb|\noname| package
demonstrates that much more can be done with \TeX\ than is commonly
realized.  In particular, it removes some (not all) of the
difficulties in programming \TeX.  It is important to understand what
can and cannot be done with \TeX\ as it is, and how or why not, if
one is set on creating a successor.

I began by posing the question, what should we teach \TeX?  My
response is this.  First of all we should teach \TeX\ how to read and
understand macros written in a well-designed high(er) level extension
or dialect of \TeX.  It will then be much easier to write the many
tens of thousands of lines that make up \LaTeX\ 2.09 and 3, and
countless other macro packages across the world.

If you are interested in \verb|\noname| and would like a demonstration
copy, please contact me.  The price, for a site license, will be two
or three figures.  For approved public domain developers, the price
will be zero.

\end{article}