local common = fonts.goodies.load("common-math.lfg") local presets = common.mathematics.tweaks.presets local integral_variants = { bottomright = -0.4 } ----- integral_top = { topright = 0.05 } local integral_bottom = { bottomright = -0.35 } return { name = "stix-two-math", version = "1.00", comment = "Goodies that complement stix two opentype.", author = "Hans Hagen & Mikael Sundqvist", copyright = "ConTeXt development team", mathematics = { alternates = { calligraphic = { feature = 'ss01', value = 1, comment = "Mathematical Alternative Calligraphic Characters" }, italic = { feature = 'ss02', value = 1, comment = "Mathematical Alternative Lowercase Italic" }, barred = { feature = 'ss03', value = 1, comment = "Mathematical Alternative Barred Characters" }, -- hbar, lambdabar etc primes = { feature = 'ss04', value = 1, comment = "Mathematical Alternative Primes" }, -- larger/lower primes, minute etc arrow = { feature = 'ss05', value = 1, comment = "Mathematical Alternative Smaller Arrows" }, narrower = { feature = 'ss06', value = 1, comment = "Mathematical Alternative Narrower Elements" }, -- narrower/shorter element etc small = { feature = 'ss07', value = 1, comment = "Mathematical Alternative Smaller Operators" }, upright = { feature = 'ss08', value = 1, comment = "Mathematical Alternative Upright Symbols" }, -- upright integrals etc. negated = { feature = 'ss09', value = 1, comment = "Mathematical Alternative Negated Symbols" }, relation = { feature = 'ss10', value = 1, comment = "Mathematical Alternative Relations" }, negatedset = { feature = 'ss09', value = 1, comment = "Mathematical Alternative Negated Set Symbols" }, -- todo = { feature = 'ss14', value = 1, comment = "" }, circled = { feature = 'ss16', value = 1, comment = "Mathematical Alternative Circled Operators" }, }, parameters = { -- NoLimitSupFactor = 0, -- NoLimitSubFactor = 1000, -- AccentBaseHeight = 0, AccentBaseDepth = 30, FlattenedAccentTopShiftUp = 0, -- AccentExtendMargin = 50, -- RadicalDegreeBottomRaisePercent = 65, -- RadicalKernBeforeDegree = 500, RadicalKernAfterDegree = -500, -- RadicalVerticalGap = 10, -- RadicalRuleThickness = 68, -- 68 in font (but shifted down) DelimiterPercent = 90, DelimiterShortfall = 400, DisplayOperatorMinHeight = 1800, -- 1800 in font PrimeRaisePercent = 75, -- 50 default PrimeRaiseComposedPercent = 10, -- 25 default }, tweaks = { aftercopying = { { tweak = "version", expected = "Version 2.12 b168", }, { tweak = "fixprimes", scale = 1, -- smaller = true, factor = 1, }, { tweak = "addmirrors", }, -- MS: we need to check this, I moved it up { tweak = "replacealphabets", list = { { source = "uppercasescript", target = "uppercasecalligraphic", }, { source = "uppercasescript", target = "uppercasescript", feature = "ss01", }, }, }, -- presets.scripttocalligraphic { }, presets.rsfstoscript { }, presets.rsfsuprighttoscript { }, presets.moderntocalligraphic { }, presets.eulertocalligraphic { }, presets.xitsarabic { rscale = 0.95 }, presets.fallbacks { }, presets.moveitalics { correct = true }, presets.moveitalics { correct = true, letters = true }, presets.moveintegrals { }, presets.wipeitalics { }, { tweak = "simplifykerns", }, { tweak = "kerns", list = { [0x002F] = { topleft = -0.2, bottomright = -0.2 }, ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom -- ["0x7D.variants.*"] = { topright = -0.15, bottomright = -0.15 }, -- right brace variants ["0x29.parts.top"] = { topright = -0.1, }, -- right parenthesis top ["0x29.parts.bottom"] = { bottomright = -0.1 }, -- right parenthesis bottom ["0x29.variants.*"] = { topright = -0.2, bottomright = -0.2 }, -- right parenthesis variants ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants [0x27E9] = { topright = -0.1, bottomright = -0.1 }, -- angle ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, [0x27EB] = { topright = -0.1, bottomright = -0.1 }, ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, -- ["0x222B.parts.bottom"] = { bottomright = -0.30 }, -- int -- ["0x222C.parts.bottom"] = { bottomright = -0.15 }, -- iint does not exist -- ["0x222D.parts.bottom"] = { bottomright = -0.10 }, -- iiint does not exist -- ["0x2A0C.parts.bottom"] = { bottomright = -0.05 }, -- iiiint does not exist -- -- ["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom, -- ["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom, -- ["0x222D.variants.*"] = integral_variants, ["0x222D.parts.top"] = integral_top, ["0x222D.parts.bottom"] = integral_bottom, -- ["0x222E.variants.*"] = integral_variants, ["0x222E.parts.top"] = integral_top, ["0x222E.parts.bottom"] = integral_bottom, -- ["0x222F.variants.*"] = integral_variants, ["0x222F.parts.top"] = integral_top, ["0x222F.parts.bottom"] = integral_bottom, -- ["0x2230.variants.*"] = integral_variants, ["0x2230.parts.top"] = integral_top, ["0x2230.parts.bottom"] = integral_bottom, -- ["0x2231.variants.*"] = integral_variants, ["0x2231.parts.top"] = integral_top, ["0x2231.parts.bottom"] = integral_bottom, -- ["0x2232.variants.*"] = integral_variants, ["0x2232.parts.top"] = integral_top, ["0x2232.parts.bottom"] = integral_bottom, -- ["0x2233.variants.*"] = integral_variants, ["0x2233.parts.top"] = integral_top, ["0x2233.parts.bottom"] = integral_bottom, }, }, -- Accents are a mess. We migrate the extensibles from the combiners to the base accent -- and then need to tweak the width (which is auto set because it was zero with a large -- accent anchor offset). First we copy and fix. { tweak = "extendaccents", }, { tweak = "radicaldegreeanchors", list = { [0x221A] = { location = "left", hfactor = 0.00, vfactor = 0.7 }, ["0x221A.variants.*"] = { location = "left", hfactor = 0.00, vfactor = 0.55 }, -- ["0x221A.variants.1"] = { location = "left", hfactor = 0.05, vfactor = .65 }, -- ["0x221A.variants.2"] = { location = "left", hfactor = .1, vfactor = .65 }, ["0x221A.variants.3"] = { location = "left", hfactor = 0.00, vfactor = .525 }, -- ["0x221A.variants.4"] = { location = "left", hfactor = .1, vfactor = .55 }, -- ["0x221A.variants.5"] = { location = "left", hfactor = 0.05, vfactor = .525 }, -- ["0x221A.variants.5"] = { location = "left", hfactor = .1, vfactor = .55 }, -- ["0x221Aq.variants.6"] = { location = "left", hfactor = .1, vfactor = .55 }, -- ["0x221A.parts.top"] = { location = "left", hfactor = .1, vfactor = 5.5 }, -- keep commented: bottom wins over top ["0x221A.parts.bottom"] = { location = "left", hfactor = 0.05, vfactor = 1.00 }, } }, { tweak = "fixaccents", }, -- First we set the dimensions of the initial accent which started out as zero but we want -- a proper width. { tweak = "dimensions", list = { [0x00302] = { width = 1.2, anchor = 1.10, xoffset = .05 }, -- widehat [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve [0x0030C] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widecheck }, }, -- Then we deal with all offsets and heights in one go. So we treat the initial accent -- as well as the variants here. { tweak = "dimensions", list = { -- here we want to apply to all -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 [0x020DB] = { yoffset = 0.025, height = .95, all = true }, -- widedddot : 0x20DB (self) }, }, -- We now copy these to the not wide slots so that we can set these to stretch as well, -- if only because it is less confusing and more consistent. { tweak = "copyaccents", }, -- So far for the accents. { tweak = "checkspacing", }, { tweak = "addscripts", }, { tweak = "accentdimensions", }, { tweak = "addrules", }, { tweak = "addarrows", }, { tweak = "fixslashes", }, { -- already exists, but not good spacing tweak = "addbars", advance = 0.4, }, { tweak = "addactuarian", }, { tweak = "addfourier", variant = 1, }, { tweak = "addparts", list = { [0x21F4] = { horizontal = true, template = 0x2192, sequence = { { glyph = "first", factor = 2 }, -- { glyph = 0x2022 }, { glyph = 0x2218 }, { glyph = "first", factor = 2 }, { glyph = "last" }, } } } }, -- this is the mkiv section { tweak = "emulatelmtx", feature = "emulatelmtx", comment = "this is for mkiv", }, }, }, bigslots = { 1, 3, 5, 7 }, }, }