common-math.lfg /size: 23 Kb    last modification: 2024-01-16 10:22
1
2local kerns = {}
3mathematics.tweaks.kernsets = kerns
4
5local punctuation = table.setmetatableindex(function(t,k)
6    local v = {
7        [0x2C] = k, -- ,
8        [0x2E] = k, -- .
9    }
10    t[k] = v
11    return v
12end)
13
14kerns[".,"] = punctuation
15
16return {
17    name        = "common-math",
18    version     = "1.00",
19    comment     = "Goodies that complement pagella.",
20    author      = "Hans Hagen & Mikael Sundqvist",
21    copyright   = "ConTeXt development team",
22    mathematics = {
23        tweaks = {
24            presets = {
25                fallbacks = function(parameters)
26                    return {
27                        tweak = "fallbacks",
28                    }
29                end,
30                scripttocalligraphic = function(parameters)
31                    return {
32                        tweak   = "replacealphabets",
33                        feature = "scripttocalligraphic",
34                        list    = {
35                            {
36                                source = "uppercasescript",
37                                target = "uppercasecalligraphic",
38                            },
39                            {
40                                source = "uppercaseboldscript",
41                                target = "uppercaseboldcalligraphic",
42                            },
43                        },
44                    }
45                end,
46                moderntocalligraphic = function(parameters)
47                    return {
48                        tweak   = "replacealphabets",
49                        feature = "moderntocalligraphic",
50                        list    = {
51                            {
52                                source   = "uppercasescript",
53                                target   = "uppercasecalligraphic",
54                                filename = "latinmodern-math.otf",
55                                rscale   = parameters.rscale,
56                            },
57                            {
58                                source   = "uppercaseboldscript",
59                                target   = "uppercaseboldcalligraphic",
60                                filename = "latinmodern-math.otf",
61                                rscale   = parameters.rscale,
62                            },
63                        },
64                    }
65                end,
66                eulertocalligraphic = function(parameters)
67                    return {
68                        tweak   = "replacealphabets",
69                        feature = "eulertocalligraphic",
70                        list    = {
71                            {
72                                source   = "uppercasescript",
73                                target   = "uppercasecalligraphic",
74                                filename = "euler-math.otf",
75                                rscale   = parameters.rscale,
76                            },
77                            {
78                                source   = "uppercaseboldscript",
79                                target   = "uppercaseboldcalligraphic",
80                                filename = "euler-math.otf",
81                                rscale   = parameters.rscale,
82                            },
83                        },
84                    }
85                end,
86                rsfstoscript = function(parameters)
87                    return {
88                        tweak   = "replacealphabets",
89                        feature = "rsfstoscript",
90                        list    = {
91                            {
92                                source   = "uppercasescript",
93                                target   = "uppercasescript",
94                                filename = "ralphsmithsformalscript-companion.otf",
95                                rscale   = parameters.rscale,
96                            },
97                            {
98                                source   = "uppercaseboldscript",
99                                target   = "uppercaseboldscript",
100                                filename = "ralphsmithsformalscript-companion.otf",
101                                rscale   = parameters.rscale,
102                            },
103                        },
104                    }
105                end,
106                rsfsuprighttoscript = function(parameters)
107                    return {
108                        tweak   = "replacealphabets",
109                        feature = "rsfsuprighttoscript",
110                        list    = {
111                            {
112                                source   = "uppercasescript",
113                                target   = "uppercasescript",
114                                filename = "ralphsmithsformalscript-companion.otf",
115                                rscale   = parameters.rscale,
116                                feature  = "ss01",
117                            },
118                            {
119                                source   = "uppercaseboldscript",
120                                target   = "uppercaseboldscript",
121                                filename = "ralphsmithsformalscript-companion.otf",
122                                rscale   = parameters.rscale,
123                                feature  = "ss01",
124                            },
125                        },
126                    }
127                end,
128                braille = function(parameters)
129                    return {
130                        tweak   = "replacealphabets",
131                        feature = "braille",
132                        list    = {
133                            {
134                                source   = "braillepatterns",
135                                target   = "braillepatterns",
136                                filename = "dejavuserif.ttf",
137                                rscale   = parameters.rscale,
138                            },
139                        },
140                    }
141                end,
142                xitsarabic = function(parameters)
143                    return {
144                        tweak   = "replacealphabets",
145                        feature = "xitsarabic",
146                        list    = {
147                            {
148                                source   = "arabicmathematicalalphabeticsymbols",
149                                target   = "arabicmathematicalalphabeticsymbols",
150                                filename = "xitsmath-companion.otf",
151                                rscale   = parameters.rscale,
152                            },
153                            {
154                                source   = "digitsarabicindic",
155                                target   = "digitsarabicindic",
156                                filename = "xitsmath-companion.otf",
157                                rscale   = parameters.rscale,
158                            },
159                            {
160                                source   = "digitsextendedarabicindic",
161                                target   = "digitsextendedarabicindic",
162                                filename = "xitsmath-companion.otf",
163                                rscale   = parameters.rscale,
164                            },
165                        },
166                    }
167                end,
168                moveitalics = function(parameters)
169                    return {
170                        tweak   = "moveitalics",
171                        correct = parameters.correct,
172                        list    = (parameters.all and "all") or (parameters.letters and "letters") or {
173                            --
174                            "lowercasenormal",
175                            "lowercaseitalic",
176                            "lowercasebold",
177                            "lowercasebolditalic",
178                            "lowercasegreeknormal",
179                            "lowercasegreekitalic",
180                            "lowercasegreekbold",
181                            "lowercasegreekbolditalic",
182                            "lowercaseboldfraktur",
183                            "lowercaseboldscript",
184                            "lowercasedoublestruck",
185                            "lowercasefraktur",
186                            "lowercasegreeksansserifbold",
187                            "lowercasegreeksansserifbolditalic",
188                            "lowercasemonospace",
189                            "lowercasesansserifbold",
190                            "lowercasesansserifbolditalic",
191                            "lowercasesansserifitalic",
192                            "lowercasesansserifnormal",
193                            "lowercasescript",
194                            --
195                            "uppercasenormal",
196                            "uppercaseitalic",
197                            "uppercasebold",
198                            "uppercasebolditalic",
199                            "uppercasegreeknormal",
200                            "uppercasegreekitalic",
201                            "uppercasegreekbold",
202                            "uppercasegreekbolditalic",
203                            "uppercaseboldfraktur",
204                            "uppercasebolditalic",
205                            "uppercaseboldscript",
206                            "uppercasedoublestruck",
207                            "uppercasefraktur",
208                            "uppercasegreeksansserifbold",
209                            "uppercasegreeksansserifbolditalic",
210                            "uppercasemonospace",
211                            "uppercasesansserifbold",
212                            "uppercasesansserifbolditalic",
213                            "uppercasesansserifitalic",
214                            "uppercasesansserifnormal",
215                            "uppercasescript",
216                            --
217                            "digitsbold",
218                            "digitsdoublestruck",
219                            "digitslatin",
220                            "digitsmonospace",
221                            "digitsnormal",
222                            "digitssansserifbold",
223                            "digitssansserifnormal",
224                            --                            --
225                            -- We don't do these (one can use all=true) because now we can get
226                            -- more details about what gets italics.
227                            --
228                            -- "latinextendeda",
229                            -- "latinextendedadditional",
230                            -- "latinextendedb",
231                            -- "latinextendedc",
232                            -- "latinextendedd",
233                            -- "latinextendede",
234                            -- "latinextendedf",
235                            -- "latinextendedg",
236                            -- "latinsupplement",
237                            --
238                            mathematics.tweaks.subsets.dotless,
239                            mathematics.tweaks.subsets.letterlike,
240                        }
241                    }
242                end,
243                moveintegrals = function(parameters)
244                    return {
245                        tweak    = "movelimits",
246                        factor   = parameters.factor or 1,
247                        icfactor = parameters.icfactor or 1,
248                        list     = mathematics.tweaks.subsets.integrals,
249                    }
250                end,
251                wipeitalics = function(parameters)
252                    return {
253                        tweak = "wipeitalics",
254                        all   = true,
255                    }
256                end,
257                wipeanchors = function(parameters)
258                    return {
259                        -- For upright alphabets, we unset the anchor. This means that accents are placed
260                        -- centered over the character. Should be on top.
261                        tweak = "wipeanchors",
262                        list = {
263                            "digitsbold",
264                            "digitsdoublestruck",
265                            "digitsmonospace",
266                            "digitsnormal",
267                            "digitssansserifbold",
268                            "digitssansserifnormal",
269                            "lowercasebold",
270                            "lowercaseboldfraktur",
271                            "lowercasedoublestruck",
272                            "lowercasefraktur",
273                            "lowercasegreekbold",
274                            "lowercasegreeknormal",
275                            "lowercasegreeksansserifbold",
276                            "lowercasemonospace",
277                            "lowercasenormal",
278                            "lowercasesansserifbold",
279                            "lowercasesansserifnormal",
280                            "uppercasebold",
281                            "uppercaseboldfraktur",
282                            "uppercasedoublestruck",
283                            "uppercasefraktur",
284                            "uppercasegreekbold",
285                            "uppercasegreeknormal",
286                            "uppercasegreeksansserifbold",
287                            "uppercasemonospace",
288                            "uppercasenormal",
289                            "uppercasesansserifbold",
290                            "uppercasesansserifnormal",
291                        },
292                    }
293                end,
294                pagellaradical = function(parameters)
295                    return {
296                        tweak   = "tweaks",
297                        feature = "pagellaradical",
298                        list    = {
299                            {
300                                tweak = "replacealphabets",
301                                list  = {
302                                    {
303                                        source   = { first = 0x0221A }, -- sqrt
304                                        filename = "texgyrepagella-math.otf",
305                                        inherit  = {
306                                            RadicalRuleThickness = true,
307                                        },
308                                    },
309                                },
310                            },
311                         -- {
312                         --     tweak = "parameters",
313                         --     list  = {
314                         --         RadicalRuleThickness = 122.88, -- 60*2048/1000
315                         --     },
316                         -- },
317                        },
318                    }
319                end,
320                smalldigits = function(parameters)
321                    return {
322                        tweak   = "dimensions",
323                        feature = "smalldigits",
324                        list    = {
325                            ["digitsnormal"] = {
326                                factor = parameters.factor or 0.9,
327                            },
328                        },
329                    }
330                end,
331                addmathkerns = function(parameters)
332                    local factor = parameters.factor or 1
333                    return {
334                        tweak = "kernpairs",
335                        list = {
336
337                            [0x1D436] = punctuation[factor * -0.05], -- italic C
338                            [0x1D439] = punctuation[factor * -0.15], -- italic F
339                            [0x1D43B] = punctuation[factor * -0.05], -- italic H
340                            [0x1D43D] = punctuation[factor * -0.15], -- italic J
341                            [0x1D43E] = punctuation[factor * -0.05], -- italic K
342                            [0x1D440] = punctuation[factor * -0.05], -- italic M
343                            [0x1D441] = punctuation[factor * -0.05], -- italic N
344                            [0x1D443] = punctuation[factor * -0.15], -- italic P
345                            [0x1D446] = punctuation[factor * -0.05], -- italic S
346                            [0x1D447] = punctuation[factor * -0.05], -- italic T
347                            [0x1D448] = punctuation[factor * -0.15], -- italic U
348                            [0x1D449] = punctuation[factor * -0.20], -- italic V
349                            [0x1D44A] = punctuation[factor * -0.15], -- italic W
350                            [0x1D44B] = punctuation[factor * -0.05], -- italic X
351                            [0x1D44C] = punctuation[factor * -0.20], -- italic Y
352                            [0x1D44D] = punctuation[factor * -0.05], -- italic Z
353                            [0x1D453] = punctuation[factor * -0.10], -- italic f
354                            [0x1D457] = punctuation[factor * -0.10], -- italic j
355                            [0x1D45F] = punctuation[factor * -0.10], -- italic r
356                            [0x00393] = punctuation[factor * -0.10], -- upright Gamma
357                            [0x003A0] = punctuation[factor * -0.05], -- upright Pi
358                            [0x003A5] = punctuation[factor * -0.15], -- upright Upsilon
359                            [0x003A8] = punctuation[factor * -0.05], -- upright Psi
360                            [0x1D6FF] = punctuation[factor * -0.10], -- italic delta
361                            [0x1D708] = punctuation[factor * -0.10], -- italic nu
362                            [0x1D70E] = punctuation[factor * -0.10], -- italic sigma
363                            [0x1D70F] = punctuation[factor * -0.10], -- italic tau
364                            [0x1D46A] = punctuation[factor * -0.05], -- bold italic C
365                            [0x1D46D] = punctuation[factor * -0.15], -- bold italic F
366                            [0x1D46F] = punctuation[factor * -0.05], -- bold italic H
367                            [0x1D471] = punctuation[factor * -0.15], -- bold italic J
368                            [0x1D472] = punctuation[factor * -0.05], -- bold italic K
369                            [0x1D474] = punctuation[factor * -0.05], -- bold italic M
370                            [0x1D475] = punctuation[factor * -0.05], -- bold italic N
371                            [0x1D477] = punctuation[factor * -0.15], -- bold italic P
372                            [0x1D47A] = punctuation[factor * -0.10], -- bold italic S
373                            [0x1D47B] = punctuation[factor * -0.05], -- bold italic T
374                            [0x1D47C] = punctuation[factor * -0.15], -- bold italic U
375                            [0x1D47D] = punctuation[factor * -0.20], -- bold italic V
376                            [0x1D47E] = punctuation[factor * -0.15], -- bold italic W
377                            [0x1D47F] = punctuation[factor * -0.05], -- bold italic X
378                            [0x1D480] = punctuation[factor * -0.20], -- bold italic Y
379                            [0x1D481] = punctuation[factor * -0.05], -- bold italic Z
380                            [0x1D487] = punctuation[factor * -0.10], -- bold italic f
381                            [0x1D48B] = punctuation[factor * -0.10], -- bold italic j
382                            [0x1D493] = punctuation[factor * -0.10], -- bold italic r
383                            [0x1D6AA] = punctuation[factor * -0.15], -- bold upright Gamma
384                            [0x1D6B7] = punctuation[factor * -0.05], -- bold upright Pi
385                            [0x1D6BC] = punctuation[factor * -0.15], -- bold upright Ypsilon
386                            [0x1D6BF] = punctuation[factor * -0.05], -- bold upright Psi
387                            [0x1D739] = punctuation[factor * -0.10], -- bold italic delta
388                            [0x1D742] = punctuation[factor * -0.10], -- bold italic nu
389                            [0x1D748] = punctuation[factor * -0.10], -- bold italic sigma
390                            [0x1D749] = punctuation[factor * -0.10], -- bold italic tau
391
392                            -- kind of special and font specific
393
394                         -- [0x1D451] = { -- italic d
395                         --     [0x1D44C] =  .11, -- italic Y
396                         --     [0x1D449] = -.11, -- italic Z
397                         --     [0x1D453] = -.32, -- italic f
398                         --     [0x1D457] = -.21, -- italic j
399                         -- },
400                         -- [0x1D485] = { -- bold italic d
401                         --     [0x1D480] =  .10, -- italic Y
402                         --     [0x1D481] = -.10, -- italic Z
403                         --     [0x1D487] = -.31, -- italic f
404                         --     [0x1D48B] = -.21, -- italic j
405                         -- },
406
407                            -- kern character with a slash
408
409                         -- [0x00393] = { [0x2F]=-0.05 }, -- upright Gamma
410                         -- [0x003A0] = { [0x2F]=-0.05 }, -- upright Pi
411                         -- [0x003A5] = { [0x2F]=-0.05 }, -- upright Ypsilon
412                         -- [0x003A8] = { [0x2F]=-0.05 }, -- upright Psi
413                         -- [0x1D436] = { [0x2F]=-0.05 }, -- C (bold) italic C
414                         -- [0x1D439] = { [0x2F]=-0.05 }, -- F (bold) italic F
415                         -- [0x1D43B] = { [0x2F]=-0.05 }, -- H (bold) italic H
416                         -- [0x1D43D] = { [0x2F]=-0.05 }, -- J (bold) italic J
417                         -- [0x1D43E] = { [0x2F]=-0.05 }, -- K (bold) italic K
418                         -- [0x1D440] = { [0x2F]=-0.05 }, -- M (bold) italic M
419                         -- [0x1D441] = { [0x2F]=-0.10 }, -- N (bold) italic N
420                         -- [0x1D443] = { [0x2F]=-0.05 }, -- P (bold) italic P
421                         -- [0x1D446] = { [0x2F]=-0.05 }, -- S (bold) italic S
422                         -- [0x1D447] = { [0x2F]=-0.05 }, -- T (bold) italic T
423                         -- [0x1D448] = { [0x2F]=-0.05 }, -- U (bold) italic U
424                         -- [0x1D449] = { [0x2F]=-0.10 }, -- V (bold) italic V
425                         -- [0x1D44A] = { [0x2F]=-0.10 }, -- W (bold) italic W
426                         -- [0x1D44B] = { [0x2F]=-0.10 }, -- X (bold) italic X
427                         -- [0x1D44C] = { [0x2F]=-0.10 }, -- Y (bold) italic Y
428                         -- [0x1D44D] = { [0x2F]=-0.05 }, -- Z (bold) italic Z
429
430                         -- [0x1D6AA] = { [0x2F]=-0.05 }, -- upright Gamma
431                         -- [0x1D6B7] = { [0x2F]=-0.05 }, -- upright Pi
432                         -- [0x1D6BC] = { [0x2F]=-0.05 }, -- upright Ypsilon
433                         -- [0x1D6BF] = { [0x2F]=-0.05 }, -- upright Psi
434                         -- [0x1D46A] = { [0x2F]=-0.05 }, -- C (bold) italic C
435                         -- [0x1D46D] = { [0x2F]=-0.05 }, -- F (bold) italic F
436                         -- [0x1D46F] = { [0x2F]=-0.05 }, -- H (bold) italic H
437                         -- [0x1D471] = { [0x2F]=-0.05 }, -- J (bold) italic J
438                         -- [0x1D472] = { [0x2F]=-0.05 }, -- K (bold) italic K
439                         -- [0x1D474] = { [0x2F]=-0.05 }, -- M (bold) italic M
440                         -- [0x1D475] = { [0x2F]=-0.10 }, -- N (bold) italic N
441                         -- [0x1D477] = { [0x2F]=-0.05 }, -- P (bold) italic P
442                         -- [0x1D47A] = { [0x2F]=-0.05 }, -- S (bold) italic S
443                         -- [0x1D47B] = { [0x2F]=-0.05 }, -- T (bold) italic T
444                         -- [0x1D47C] = { [0x2F]=-0.05 }, -- U (bold) italic U
445                         -- [0x1D47D] = { [0x2F]=-0.10 }, -- V (bold) italic V
446                         -- [0x1D47E] = { [0x2F]=-0.10 }, -- W (bold) italic W
447                         -- [0x1D47F] = { [0x2F]=-0.10 }, -- X (bold) italic X
448                         -- [0x1D480] = { [0x2F]=-0.10 }, -- Y (bold) italic Y
449                         -- [0x1D481] = { [0x2F]=-0.05 }, -- Z (bold) italic Z
450
451                        },
452                    }
453                end,
454            },
455        },
456    },
457}
458