Hi Bruce and Hans ! Thank you very much for your answers, that helped me a lot. In fact, though I would love to switch to ConTeXt one day, I am still using LuaLaTeX — I am a slow learner and I know it will take me months to be able to achieve what I need for my job with ConTeXt and can do with LuaLaTeX and the Memoir class for the time being (despite sometimes being irritated by LaTeX limitations or oddities). I need the EB Garamond variable font for future jobs, but this font, provided by Google Fonts, is such a mess : kerning problems, unusable OpenType features that have to be rewritten from scratch, shifts in glyphs table… For sure, the original font by Georg Duffner was much better, but I need the variable version. Lots of fixing necessary, but thanks to fonts.handlers.otf.addfeature I have almost succeeded to make it a usable Garamond. Of course, it would be best to help Google improving this font, but I don’t have time yet. The actual problem was with the italic ligatures "a_s", "e_s", "é_s", "i_s" and "u_s", that should occur only at the end of words and not everywhere. Instead of removing the unwanted ligatures, I chose another way as soon as I understood how to fully use “current” to describe not only a single glyph, but a string if necessary — for instance, current={ { "a", "e", "eacute", "i", "u"}, {"s"} } Thanks for this wonderful tool ! Thomas Savary 1 le Grand-Plessis F-85340 L’Île-d’Olonne Tél. 06 22 82 61 34 https://compo85.fr/ Le samedi 25 décembre 2021, 00:04:51 CET Bruce Horrocks a écrit : > > On 24 Dec 2021, at 18:34, Thomas Savary via ntg-context > > wrote: > > > > Hello, dear list ! > > > > In order to fix a few bugs in some OpenType features included in EB > > Garamond font provided by Google Fonts, I am trying to remove some > > ligatures (erroneous in some contexts) with > > fonts.handlers.otf.addfeature. > > > > I must be missing something, because I can't get it to work. > > > > Here is a minimal —non working—example :-) > > (The attempted removal (“f_i” → “fi” only before “o”) is of course > > irrelevant. I chose it just for the sole purpose of this test, to > > provide a simple example. What I am trying to achieve is more > > complex, with other ligatures.) > > > > fonts.handlers.otf.addfeature{ > > > > name = "unfio", > > type = "chainsubstitution", > > lookups = { > > > > { type = "multiple", > > data = { [ "f_i" ] = { "f", "i" } } > > } > > > > } > > rules = { > > > > { after = { { "o" } }, > > current = { { "f_i" } }, > > lookups = { 1 } } > > > > } > > > > } > > > > } > > > > Could someone please explain to me what I did wrong ? > > Firstly, you have an extra } in the example above. > > Secondly, rules need to come inside a data section. Thus (untested): > > fonts.handlers.otf.addfeature{ > name = "unfio", > type = "chainsubstitution", > lookups = { > { > type = "substitution", > data = { > [ "f_i" ] = { "f", "i" } > } > } > }, > data = { > rules = { > { > after = { { "o" } },