How to use fonts.handlers.otf.enhancers.patches?
Dear list, The EB Garamond font is lacking the ϵ glyph but it contains ε. So naturally you want to remap ϵ to ε. It cannot be done using font features because the the slot 0x03B5 (ϵ) is just missing, so substitution will not kick in. I tried adapting the mechanism to add uppercase greek to Latin Modern Math from lm- math.lfg. Unfortunately, my code is not working. What am I doing wrong? Cheers, Henri --- \startluacode local patches = fonts.handlers.otf.enhancers.patches local function patch(data,filename) local uni_to_ind = data.map.map if not uni_to_ind[0x3F5] then patches.report("add ε for ϵ") uni_to_ind[0x3F5] = uni_to_ind[0x3B5] end end patches.register("after","missing glyphs","^ebgaramond*", patch) \stopluacode \setupbodyfont[ebgaramond] \starttext ε % = 03B5 ϵ % = 03F5 \stoptext
On 2/26/2018 11:54 PM, Henri Menke wrote:
Dear list,
The EB Garamond font is lacking the ϵ glyph but it contains ε. So naturally you want to remap ϵ to ε. It cannot be done using font features because the the slot 0x03B5 (ϵ) is just missing, so substitution will not kick in. I tried adapting the mechanism to add uppercase greek to Latin Modern Math from lm- math.lfg. Unfortunately, my code is not working. What am I doing wrong?
Cheers, Henri
---
\startluacode local patches = fonts.handlers.otf.enhancers.patches
local function patch(data,filename) local uni_to_ind = data.map.map if not uni_to_ind[0x3F5] then patches.report("add ε for ϵ") uni_to_ind[0x3F5] = uni_to_ind[0x3B5] end end
patches.register("after","missing glyphs","^ebgaramond*", patch) \stopluacode
\setupbodyfont[ebgaramond]
\starttext
ε % = 03B5 ϵ % = 03F5
\stoptext if you want to use the patch mechanism:
\startluacode local function patch(data,filename) data.descriptions[utf.byte("ϵ")] = data.descriptions[utf.byte("ε")] end fonts.handlers.otf.enhancers.patches.register("after","missing glyphs","^ebgaramond*", patch) \stopluacode \setupbodyfont[ebgaramond] \starttext ϵ ε \stoptext or when you want to buse features: \startluacode fonts.handlers.otf.addfeature { name = "ccmp", -- or "ebhack" type = "substitution", nocheck = true, data = { ["ϵ"] = "ε", } } \stopluacode % \definefontfeature[default][default][ebhack=yes] \setupbodyfont[ebgaramond] \starttext ϵ ε \stoptext ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
Thank you for the prompt solution! The enhancers.patches solution does not work with ConTeXt from TeXlive 2017. I suspect that the font name matching on "^ebgaramond.*" is incorrect, because the patch function is never called (MWE and log attached). If I wanted to do this in ConTeXt I'd use the feature approach but unfortunately the unicode-math package for LaTeX gives no option to set mode=base to have features applied in math mode :/ Cheers, Henri On 02/27/2018 09:34 PM, Hans Hagen wrote:
On 2/26/2018 11:54 PM, Henri Menke wrote:
Dear list,
The EB Garamond font is lacking the ϵ glyph but it contains ε. So naturally you want to remap ϵ to ε. It cannot be done using font features because the the slot 0x03B5 (ϵ) is just missing, so substitution will not kick in. I tried adapting the mechanism to add uppercase greek to Latin Modern Math from lm- math.lfg. Unfortunately, my code is not working. What am I doing wrong?
Cheers, Henri
---
\startluacode local patches = fonts.handlers.otf.enhancers.patches
local function patch(data,filename) local uni_to_ind = data.map.map if not uni_to_ind[0x3F5] then patches.report("add ε for ϵ") uni_to_ind[0x3F5] = uni_to_ind[0x3B5] end end
patches.register("after","missing glyphs","^ebgaramond*", patch) \stopluacode
\setupbodyfont[ebgaramond]
\starttext
ε % = 03B5 ϵ % = 03F5
\stoptext if you want to use the patch mechanism:
\startluacode local function patch(data,filename) data.descriptions[utf.byte("ϵ")] = data.descriptions[utf.byte("ε")] end
fonts.handlers.otf.enhancers.patches.register("after","missing glyphs","^ebgaramond*", patch) \stopluacode
\setupbodyfont[ebgaramond]
\starttext
ϵ ε
\stoptext
or when you want to buse features:
\startluacode fonts.handlers.otf.addfeature { name = "ccmp", -- or "ebhack" type = "substitution", nocheck = true, data = { ["ϵ"] = "ε", } } \stopluacode
% \definefontfeature[default][default][ebhack=yes]
\setupbodyfont[ebgaramond]
\starttext
ϵ ε
\stoptext
----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
On 2/27/2018 11:10 AM, Henri Menke wrote:
Thank you for the prompt solution!
The enhancers.patches solution does not work with ConTeXt from TeXlive 2017. I suspect that the font name matching on "^ebgaramond.*" is incorrect, because the patch function is never called (MWE and log attached).
you could print the filename and see what gets by (maybe the ^ is not needed)
If I wanted to do this in ConTeXt I'd use the feature approach but unfortunately the unicode-math package for LaTeX gives no option to set mode=base to have features applied in math mode :/
i have no clue what happens there so ...
Cheers, Henri
On 02/27/2018 09:34 PM, Hans Hagen wrote:
On 2/26/2018 11:54 PM, Henri Menke wrote:
Dear list,
The EB Garamond font is lacking the ϵ glyph but it contains ε. So naturally you want to remap ϵ to ε. It cannot be done using font features because the the slot 0x03B5 (ϵ) is just missing, so substitution will not kick in. I tried adapting the mechanism to add uppercase greek to Latin Modern Math from lm- math.lfg. Unfortunately, my code is not working. What am I doing wrong?
Cheers, Henri
---
\startluacode local patches = fonts.handlers.otf.enhancers.patches
local function patch(data,filename) local uni_to_ind = data.map.map if not uni_to_ind[0x3F5] then patches.report("add ε for ϵ") uni_to_ind[0x3F5] = uni_to_ind[0x3B5] end end
patches.register("after","missing glyphs","^ebgaramond*", patch) \stopluacode
\setupbodyfont[ebgaramond]
\starttext
ε % = 03B5 ϵ % = 03F5
\stoptext if you want to use the patch mechanism:
\startluacode local function patch(data,filename) data.descriptions[utf.byte("ϵ")] = data.descriptions[utf.byte("ε")] end
fonts.handlers.otf.enhancers.patches.register("after","missing glyphs","^ebgaramond*", patch) \stopluacode
\setupbodyfont[ebgaramond]
\starttext
ϵ ε
\stoptext
or when you want to buse features:
\startluacode fonts.handlers.otf.addfeature { name = "ccmp", -- or "ebhack" type = "substitution", nocheck = true, data = { ["ϵ"] = "ε", } } \stopluacode
% \definefontfeature[default][default][ebhack=yes]
\setupbodyfont[ebgaramond]
\starttext
ϵ ε
\stoptext
----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/context-mirror/commits/ wiki : http://contextgarden.net ___________________________________________________________________________________
-- ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
participants (2)
-
Hans Hagen
-
Henri Menke