return { name = "common-math-jmn", version = "1.00", comment = "Goodies that complement the JMN collection.", author = "Hans, Mikael", copyright = "ConTeXt development team", mathematics = { helpers = { addmissing = function(main) local max = math.max local copytable = table.copy local slotcommand = fonts.helpers.commands.slot local builders = fonts.handlers.vf.math.builders local ps = fonts.helpers.privateslot local characters = main.characters local variables = main.goodies.mathematics and main.goodies.mathematics.variables or { } local joinrelfactor = variables.joinrelfactor or 3 local notshiftfactor = variables.notshiftfactor or 0 local umbracepiece = ps("um brace piece") local lmbracepiece = ps("lm brace piece") local cmbracepiece = ps("cm brace piece") local ulbracepiece = ps("ul brace piece") local urbracepiece = ps("ur brace piece") local llbracepiece = ps("ll brace piece") local lrbracepiece = ps("lr brace piece") builders.brace(main,0x23DE,ulbracepiece,cmbracepiece,lrbracepiece,llbracepiece,cmbracepiece,urbracepiece,"top") builders.brace(main,0x23DF,llbracepiece,cmbracepiece,urbracepiece,ulbracepiece,cmbracepiece,lrbracepiece,"bottom") builders.parent(main,0x23DC,ulbracepiece,umbracepiece,urbracepiece,"top") builders.parent(main,0x23DD,llbracepiece,lmbracepiece,lrbracepiece,"bottom") builders.dots(main,0x2026) -- ldots builders.dots(main,0x22EE) -- vdots builders.dots(main,0x22EF) -- cdots builders.dots(main,0x22F1) -- ddots builders.dots(main,0x22F0) -- udots builders.jointwo(main,0x21A6,ps("maps to piece"),.15,0x02192) -- \mapstochar\rightarrow local srl = ps("rule left piece") local srm = ps("rule middle piece") local srr = ps("rule right piece") local drl = ps("double rule left piece") local drm = ps("double rule middle piece") local drr = ps("double rule right piece") local sfl = ps("flat rule left piece") local sfm = ps("flat rule middle piece") local sfr = ps("flat rule right piece") local dfl = ps("flat double rule left piece") local dfm = ps("flat double rule middle piece") local dfr = ps("flat double rule right piece") local sal = ps("arrow left piece") local sar = ps("arrow right piece") local dal = ps("double arrow left piece") local dar = ps("double arrow right piece") local rad = ps("radical bar extender") local antykwa = characters[srm] if not antykwa then sal = 0x02190 sar = 0x02192 dal = 0x021D0 dar = 0x021D2 srl = 0x0002D srr = 0x0002D drl = 0x0003D drr = 0x0003D sfl = 0x0002D srm = 0x0002D dfl = 0x0003D drm = 0x0003D end if not characters[sfm] then local csal = characters[sal] local sheight = csal.height local sdepth = csal.depth local cdal = characters[dal] local dheight = cdal.height local ddepth = cdal.depth local csfl = copytable(characters[srl]) characters[sfl] = csfl csfl.height = sheight csfl.depth = sdepth csfl.italic = nil local csfm = copytable(characters[srm]) characters[sfm] = csfm csfm.height = sheight csfm.depth = sdepth csfm.italic = nil local csfr = copytable(characters[srr]) characters[sfr] = csfr csfr.height = sheight csfr.depth = sdepth csfr.italic = nil local cdfl = copytable(characters[drl]) characters[dfl] = cdfl cdfl.height = dheight cdfl.depth = ddepth cdfl.italic = nil local cdfm = copytable(characters[drm]) characters[dfm] = cdfm cdfm.height = dheight cdfm.depth = ddepth cdfm.italic = nil local cdfr = copytable(characters[drr]) characters[dfr] = cdfr cdfr.height = dheight cdfr.depth = ddepth cdfr.italic = nil end builders.jointwo(main,0x27F5,sal,joinrelfactor,srr) builders.jointwo(main,0x27F6,srl,joinrelfactor,sar) builders.jointwo(main,0x27F7,sal,joinrelfactor,sar) builders.jointwo(main,0x27F8,dal,joinrelfactor,drr) builders.jointwo(main,0x27F9,drl,joinrelfactor,dar) builders.jointwo(main,0x27FA,dal,joinrelfactor,dar) if antykwa then builders.horibar(main,0x203E,srm,srl,srr,0x02212) -- overbar underbar fraction (we take 90/91/92 too!) -- builders.horibar(main,0x203E,srm,srl,srr,0x0002D) -- overbar underbar fraction (we take 90/91/92 too!) builders.rootbar(main,rad,srm,srr,0x02212) -- radical else builders.horibar(main,0x203E,0xFE073) -- overbar underbar end local ffactor = antykwa and 1 or 1 local mfactor = antykwa and 1 or .8 local lfactor = antykwa and 1 or .8 builders.extension(main,0x2190,sal,sfm,sfr,ffactor,mfactor,lfactor) -- \leftarrow builders.extension(main,0x2192,sfl,sfm,sar,ffactor,mfactor,lfactor) -- \rightarrow builders.extension(main,0x27F5,sal,sfm,sfr,ffactor,mfactor,lfactor) builders.extension(main,0x27F6,sfl,sfm,sar,ffactor,mfactor,lfactor) builders.extension(main,0x27F7,sal,sfm,sar,ffactor,mfactor,lfactor) builders.extension(main,0x27F8,dal,dfm,dfr,ffactor,mfactor,lfactor) builders.extension(main,0x27F9,dfl,dfm,dar,ffactor,mfactor,lfactor) builders.extension(main,0x27FA,dal,dfm,dar,ffactor,mfactor,lfactor) local tfactor = antykwa and -0.8 or -0.8 local bfactor = antykwa and 0.1 or 0.1 local left = characters[0x27F5] local right = characters[0x27F6] local both = characters[0x27F7] local height = max(left.height or 0,right.height or 0,both.height or 0) local depth = max(left.depth or 0,right.depth or 0,both.depth or 0) left .height = height left .depth = depth right.height = height right.depth = depth both .height = height both .depth = depth local t = copytable(left) characters[0x20D6] = t t.inneryoffset = tfactor*height t.innerlocation = "top" t.next = nil t.italic = nil -- over local t = copytable(right) characters[0x20D7] = t t.inneryoffset = tfactor*height t.innerlocation = "top" t.next = nil t.italic = nil local t = copytable(both) characters[0x20E1] = t t.inneryoffset = tfactor*height t.innerlocation = "top" t.next = nil t.italic = nil local t = copytable(left) characters[0x20EE] = t t.inneryoffset = bfactor*height t.innerlocation = "bottom" t.next = nil t.italic = nil -- under local t = copytable(right) characters[0x20EF] = t t.inneryoffset = bfactor*height t.innerlocation = "bottom" t.next = nil t.italic = nil local t = copytable(both) characters[0x034D] = t t.inneryoffset = bfactor*height t.innerlocation = "bottom" t.next = nil t.italic = nil local tfactor = antykwa and -15 or -15 local bfactor = antykwa and 1 or 1 local t = copytable(characters[0x203E]) characters[0x0305] = t t.inneryoffset = tfactor*t.height t.innerlocation = "top" t.next = nil t.italic = nil local t = copytable(characters[0x203E]) characters[0x0332] = t t.inneryoffset = bfactor*t.height t.innerlocation = "bottom" t.next = nil t.italic = nil builders.jointwo(main,0x2016,0x007C,0.20,0x007C) builders.jointwo(main,0x2980,0x007C,0.20,0x007C,0.20,0x007C) characters[0x007C].extensible = true characters[0x007C].varianttemplate = 0x5B characters[0x2016].extensible = true characters[0x2016].varianttemplate = 0x5B characters[0x2980].extensible = true characters[0x2980].varianttemplate = 0x5B -- 21CB leftrightharpoon -- 21CC rightleftharpoon builders.stack(main,0x2259,0x0003D,3,0x02227) -- \buildrel\wedge\over= builders.jointwo(main,0x22C8,0x022B3,joinrelfactor,0x022B2) -- \mathrel\triangleright\joinrel\mathrel\triangleleft (4 looks better than 3) builders.jointwo(main,0x22A7,0x0007C,joinrelfactor,0x0003D) -- \mathrel|\joinrel= builders.overlaytwo(main,0x2260,0x00338,notshiftfactor,0x0003D) -- \not\equal builders.overlaytwo(main,0x2284,0x00338,notshiftfactor,0x02282) -- \not\subset builders.overlaytwo(main,0x2285,0x00338,notshiftfactor,0x02283) -- \not\supset builders.overlaytwo(main,0x2209,0x00338,notshiftfactor,0x02208) -- \not\in -- builders.jointwo (main,0x2254,0x03A,0,0x03D) -- := -- builders.jointhree(main,0x2A74,0x03A,0,0x03A,0,0x03D) -- ::= -- builders.jointwo (main,0x2A75,0x03D,0,0x03D) -- == builders.repeated(main,0x222B,0x222B,1,1/2) builders.repeated(main,0x222C,0x222B,2,1/2) builders.repeated(main,0x222D,0x222B,3,1/2) characters[0x02B9] = characters[0x2032] -- we're nice -- some things are done automatically: -- add primes -- add equals and alike end } } }