summaryrefslogtreecommitdiff
path: root/tex/context/fonts/mkiv/lucida-math.lfg
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/fonts/mkiv/lucida-math.lfg')
-rw-r--r--tex/context/fonts/mkiv/lucida-math.lfg290
1 files changed, 290 insertions, 0 deletions
diff --git a/tex/context/fonts/mkiv/lucida-math.lfg b/tex/context/fonts/mkiv/lucida-math.lfg
new file mode 100644
index 000000000..6842d505b
--- /dev/null
+++ b/tex/context/fonts/mkiv/lucida-math.lfg
@@ -0,0 +1,290 @@
+local common = fonts.goodies.load("common-math.lfg")
+local presets = common.mathematics.tweaks.presets
+
+local integral_variants = { bottomright = -0.20 }
+----- integral_top = { topright = 0.05 }
+local integral_bottom = { bottomright = -0.45 }
+
+return {
+ name = "lucida-opentype-math",
+ version = "1.00",
+ comment = "Goodies that complement lucida opentype.",
+ author = "Hans Hagen & Mikael Sundqvist",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ parameters = {
+ -- RadicalDisplayStyleVerticalGap = 100,
+ -- NoLimitSupFactor = 0,
+ -- NoLimitSubFactor = 900,
+ FractionRuleThickness = 55,
+ -- AccentTopShiftUp = 0,
+ -- FlattenedAccentTopShiftUp = 0,
+ -- AccentExtendMargin = 50,
+ -- AccentBaseHeight = 650,
+ AccentBaseDepth = 250,
+ -- RadicalDegreeBottomRaisePercent = 50,
+ -- RadicalKernAfterDegree = -600,
+ -- RadicalRuleThickness = 35, -- 40 in font (46 in demi)
+ DelimiterPercent = 90,
+ DelimiterShortfall = 400,
+ -- DisplayOperatorMinHeight = 1800, -- 1300 in font (only one)
+ PrimeRaisePercent = 60, -- 50 default
+ PrimeRaiseComposedPercent = 50, -- 25 default
+ AxisHeight = 325, -- we keep the old fonts as they are (also for demos)
+ },
+ tweaks = {
+ aftercopying = {
+ {
+ tweak = "version",
+ expected = "Version 1.803",
+ },
+ {
+ tweak = "fixoldschool",
+ version = "Version 1.802",
+ },
+ -- {
+ -- tweak = "showinfo",
+ -- version = "Version 1.803",
+ -- },
+ {
+ tweak = "addmirrors",
+ },
+ presets.scripttocalligraphic { },
+ presets.rsfstoscript { rscale = 1 },
+ presets.rsfsuprighttoscript { rscale = 1 },
+ presets.moderntocalligraphic { rscale = 1 },
+ presets.eulertocalligraphic { rscale = 1 },
+ presets.xitsarabic { rscale = 1.05 },
+ presets.fallbacks { },
+ presets.moveitalics { correct = true },
+ presets.moveitalics { correct = true, letters = true },
+ presets.moveintegrals { factor = 1.5 },
+ presets.wipeitalics { },
+ {
+ tweak = "replacealphabets",
+ list = {
+ {
+ source = "uppercasescript",
+ target = "uppercasecalligraphic",
+ feature = "ss04",
+ },
+ {
+ source = "lowercasescript",
+ target = "lowercasecalligraphic",
+ feature = "ss04",
+ },
+ {
+ source = "uppercaseboldscript",
+ target = "uppercaseboldcalligraphic",
+ feature = "ss04",
+ },
+ -- No lowercase bold calligraphic/script in font
+ },
+ },
+ {
+ tweak = "dimensions",
+ version = "Version 1.802",
+ list = {
+ -- The < and > are slightly too small. We scale them by 867/795
+ ["0x003C"] = { scale = 1.09057, width = 1.09057, height = 1.09057 },
+ ["0x003E"] = { scale = 1.09057, width = 1.09057, height = 1.09057 },
+ -- The = is too big if in ss03. We scale it by 795/867 (not working like this)
+ -- ["0x003D.ss03"] = { scale = 0.916955, width = 0.916955, height = 0.916955 },
+ },
+ },
+ {
+ tweak = "dimensions",
+ version = "Version 1.802",
+ list = {
+ -- these we fix here. Remove when we have new version of Lucida
+ ["0x23DC.parts.1"] = { xoffset = -0.075, height = .4, yoffset = -0.6 },
+ ["0x23DC.parts.2"] = { height = .4, yoffset = -0.6 },
+ ["0x23DC.parts.3"] = { xoffset = 0.075, height = .4, yoffset = -0.6 },
+ ["0x23DD.parts.1"] = { xoffset = -0.075, depth = .8, yoffset = 0.2 },
+ ["0x23DD.parts.2"] = { depth = .8, yoffset = 0.2 },
+ ["0x23DD.parts.3"] = { xoffset = 0.075, depth = .8, yoffset = 0.2 },
+ -- these are done later using the AccentBase* parameters
+ -- [0x23DC] = { height = .2, yoffset = -0.8 },
+ -- [0x23DD] = { depth = .6, yoffset = 0.4 },
+ --
+ -- ["0x7C.variants.1"] = { squeeze = 0.75, height = 0.75, depth = 0.75 },
+ -- ["0x7C.variants.2"] = { squeeze = 0.75, height = 0.75, depth = 0.75 },
+ -- ["0x7C.variants.3"] = { squeeze = 0.75, height = 0.75, depth = 0.75 },
+ -- ["0x7C.variants.4"] = { squeeze = 0.75, height = 0.75, depth = 0.75 },
+ -- going zero makes them be ignored
+ ["0x7C.variants.3"] = { squeeze = 0.90, height = 0.90, depth = 0.90 },
+ ["0x7C.variants.4"] = { squeeze = 0.80, height = 0.80, depth = 0.80 },
+ },
+ },
+ -- 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 = .05, vfactor = .675 },
+ -- ["0x221A.variants.*"] = { location = "left", hfactor = .05, vfactor = .6 },
+ -- ["0x221A.variants.1"] = { location = "left", hfactor = .05, vfactor = .65 },
+ -- ["0x221A.variants.2"] = { location = "left", hfactor = .1, vfactor = .65 },
+ ["0x221A.variants.3"] = { location = "left", hfactor = 0, vfactor = .55 },
+ ["0x221A.variants.4"] = { location = "left", hfactor = 0, vfactor = .50 },
+ -- ["0x221A.variants.5"] = { location = "left", hfactor = .05, vfactor = .525 },
+ -- ["0x221A.variants.5"] = { location = "left", hfactor = .1, vfactor = .55 },
+ -- ["0x221A.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, vfactor = .85 },
+ }
+},
+ {
+ 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.4, anchor = 1.20, xoffset = .10 }, -- 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.015, 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 = "fixslashes",
+ },
+ -- {
+ -- tweak = "fixellipses",
+ -- },
+ {
+ tweak = "addbreve",
+ },
+ {
+ 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.25 }, -- right parenthesis top
+ ["0x29.parts.bottom"] = { bottomright = -0.25 }, -- 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.2, bottomright = -0.2 }, -- angle
+ ["0x27E9.variants.*"] = { topright = -0.3, bottomright = -0.3 },
+ [0x27EB] = { topright = -0.2, bottomright = -0.2 },
+ ["0x27EB.variants.*"] = { topright = -0.3, bottomright = -0.3 },
+ -- ["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,
+
+ },
+ },
+ {
+ tweak = "fixprimes",
+ factor = 0.8, -- accent base height
+ -- smaller = true, -- replace multiples
+ scale = 1.1, -- glyph scale
+ fake = 0.65, -- replace multiples with this width proportion
+ -- keep = true, -- keep the text size prime (aka minute)
+ },
+ {
+ tweak = "checkspacing",
+ },
+ {
+ tweak = "addscripts",
+ },
+ {
+ tweak = "accentdimensions",
+ },
+ {
+ tweak = "addrules",
+ },
+ {
+ tweak = "addactuarian",
+ },
+ {
+ tweak = "addfourier",
+ -- scale = 1.5,
+ variant = 1,
+ },
+ {
+ tweak = "addarrows",
+ left = 0.1,
+ right = 0.1,
+ slack = 0.20,
+ list = {
+ [0x21A9] = false,
+ [0x21AA] = false,
+ [0x2190] = false,
+ [0x2192] = false,
+ [0x219E] = false,
+ [0x21A0] = false,
+ -- [0x21A6] = false,
+ -- [0x21CB] = false,
+ -- [0x21CC] = false,
+ }
+ },
+ -- this is the mkiv section
+ {
+ tweak = "emulatelmtx",
+ feature = "emulatelmtx",
+ comment = "this is for mkiv",
+ },
+ },
+ },
+ alternates = {
+ textitalic = { feature = 'ss01', value = 1, comment = "Mathematical Alternative Lowercase Italic" },
+ arrow = { feature = 'ss02', value = 1, comment = "Mathematical Alternative Smaller Arrows" },
+ operator = { feature = 'ss03', value = 1, comment = "Mathematical Alternative Smaller Operators" },
+ calligraphic = { feature = 'ss04', value = 1, comment = "Mathematical Alternative Calligraphic Characters" },
+ zero = { feature = 'ss05', value = 1, comment = "Mathematical Alternative Zero" },
+ multipledots = { feature = 'ss06', value = 1, comment = "Mathematical Alternative Multiple Dots" },
+ ldots = { feature = 'ss07', value = 1, comment = "Mathematical Alternative Ellipsis" },
+ },
+ bigslots = {
+ 1, 2, 3, 4
+ },
+ --
+ -- experimental fixes for mkiv:
+ --
+ dimensions = dimensions,
+ kerns = kerns,
+ },
+}