context-2021-math.tex /size: 5502 b    last modification: 2021-10-28 13:50
1% language=us
2
3\usemodule[present-boring,abbreviations-logos]
4
5\definecolor[maincolor] [r=.4]
6\definecolor[extracolor][s=.1]
7
8\startdocument
9  [title={MATH},
10   banner={complete control},
11   location={context\enspace {\bf 2021}\enspace meeting}]
12
13\starttitle[title=The benchmark]
14
15\startitemize
16
17\startitem
18    Traditional \TEX\ has set the benchmark for typesetting math.
19\stopitem
20
21\startitem
22    It uses three categories of fonts: alphabet, symbol, extensible.
23\stopitem
24
25\startitem
26    Limitations in fonts have lead to some curious handling of dimensions.
27\stopitem
28
29\startitem
30    The fact that there is \type {\over} makes for multipass scanning and
31    processing.
32\stopitem
33
34\startitem
35    The last family counts (when entering the second pass) so one has to use very
36    controlled font switching.
37\stopitem
38
39\startitem
40    Some features (limits, integrals, primes) rely on special macros and parsing.
41\stopitem
42
43\startitem
44    One can end up in tricky font switching. Also, quite some fonts are loaded in
45    order to set up the machinery.
46\stopitem
47
48\stopitemize
49
50\stoptitle
51
52\starttitle[title=Todays reality]
53
54\startitemize
55
56\startitem
57    We now use \OPENTYPE\ math fonts. In fact, in \MKIV\ we always used only one
58    font instance (unless we mix font families).
59\stopitem
60
61\startitem
62    We operate in the \UNICODE\ domain, so in the end there was no need to bump the
63    number of families in \LUATEX.
64\stopitem
65
66\startitem
67    In \CONTEXT\ we use only a few font families: regular, regular r2l, bold, bold r2l.
68\stopitem
69
70\startitem
71    All the tricky stuff is done with the help of \LUA. This already started very
72    early in the \LUATEX\ project and has not changed.
73\stopitem
74
75\startitem
76    But we still run into issues because the available fonts are inconsistent,
77    incompatible, have issues and that is unlikely to change.
78\stopitem
79
80\startitem
81    We have a virtual font system in place that was used during the transition (when no
82    fonts were available).
83\stopitem
84
85\startitem
86    In \CONTEXT\ there are various ways to deal with shortcomings in or extensions to fonts.
87\stopitem
88
89\startitem
90    At some point we need to make up our minds, accept the issues with fonts, and
91    just fix things runtime.
92\stopitem
93
94\stopitemize
95
96\stoptitle
97
98\starttitle[title=The engine]
99
100\startitemize
101
102\startitem
103    In \LUATEX\ we started with a hybrid approach but eventually ended up with
104    more split code paths.
105\stopitem
106
107\startitem
108    In \LUAMETATEX\ nearly all aspects of the engine had made configurable and are under
109    user control.
110\stopitem
111
112\startitem
113    This permits experiments where we can apply old methods onto new fonts.
114\stopitem
115
116\stopitemize
117
118\stoptitle
119
120\starttitle[title=The tricky things]
121
122\startitemize
123
124\startitem
125    Spacing in traditional math is a combination of widths and italic correction:
126    we need to add them and sometimes afterwards subtract the italic correction.
127    In \OPENTYPE\ math we don't lie about dimensions and apply italic correction
128    selectively (as we have staircase kerns).
129\stopitem
130
131\startitem
132    Special symbols like primes are quite inconsistent wrt dimensions and positioning
133    and we need to catch that. We also need robust ways to collapse them to the proper
134    \UNICODE\ symbol.
135\stopitem
136
137\startitem
138    Larger variants (these \type {\bigg} things) needs some attention too.
139\stopitem
140
141\startitem
142    We need to map characters onto the right shaped (alphabets) because hardly
143    anyone will enter the \UNICODE\ math characters directly.
144\stopitem
145
146\startitem
147    We might want to fix scripts, italics, kern pairs etc.
148\stopitem
149
150\stopitemize
151
152\stoptitle
153
154\starttitle[title=Implementation]
155
156Among the new features (introduced over a period of time) are:
157
158\startitemize
159
160\startitem
161    All kind of inter|-|class spacing parameters (in addition to what \LUATEX\
162    already provides).
163\stopitem
164
165\startitem
166    Dozens of \OPENTYPE\ font related spacing parameters (more that traditional
167    \TEX).
168\stopitem
169
170\startitem
171    Opened up additional font (and taste) related parameters (hard coded in
172    traditional \TEX).
173\stopitem
174
175\startitem
176    Opened up style related parameters (hard coded in traditional \TEX).
177\stopitem
178
179\startitem
180    Control codes that make the engine follow a different (the traditional) code
181    path (which can come in handy when testing or writing manuals).
182\stopitem
183
184\startitem
185    The ability to simplify the result a bit wrt characters (the engine loves to
186    box a lot).
187\stopitem
188
189\startitem
190    Efficient font, style and parameter scaling by reusing fonts and thereby
191    limiting the number of instances.
192\stopitem
193
194\startitem
195    More options to special (constructed) symbols.
196\stopitem
197
198\startitem
199    Let math related nodes carry around more control properties and states.
200\stopitem
201
202\startitem
203    Support of local changes to math parameters.
204\stopitem
205
206\stopitemize
207
208\stoptitle
209
210\stopdocument
211
212% mml
213% vf chars for extensibles
214
215% noads.handlers.showtree
216% noads.handlers.unscript
217% noads.handlers.unstack
218% noads.handlers.variants
219% noads.handlers.relocate
220% noads.handlers.families
221% noads.handlers.render
222% noads.handlers.collapse
223% noads.handlers.fixscripts
224% noads.handlers.domains
225% noads.handlers.autofences
226% noads.handlers.resize
227% noads.handlers.respace
228% noads.handlers.alternates
229% noads.handlers.tags
230% noads.handlers.italics
231% noads.handlers.kernpairs
232% noads.handlers.classes
233
234% builders.kernel.mlisttohlist
235% noads.handlers.makeup
236% noads.handlers.align
237