Yes. Ligatures are so-called glyph substitutions. That means that one or more glyphs are substituted for one or more other glyphs. IOW you need something to substitute for something else.
The technical problem below is that you can have two ways of accessing your glyphs: firstly, through the character. I.e., you give the font a Unicode value, and the font returns the glyph for it. That is what happens, e.g., when you type with a font: your key press produces a keycode, which is then transformed by the keyboard layout into a character (Unicode value), and the rasterizer retrieves the glyph from your font that has that Unicode value assigned to it.
Secondly, you can access the glyph through an OpenType feature. An OpenType feature can substitute one or more existing glyphs for one or more other glyph, which does not need (and usually does not have) a Unicode value assigned. Ligature glyphs do not (and should not) have Unicode values assigned, so they need to be accessed through an OpenType feature.
Note again that OT features work on the glyph level, not on a character level. If you do not have b
in your font and you still want the ligature to work, what you ask for is to replace a glyph in combination with a mere character, which is not possible, because it is not working on a glyph level. A font, after all, is a collection of glyphs. Unicode is a collection of characters.
Theoretically, you can, thirdly, access glyphs through their glyph ID. Which is what a glyph palette would do. But that is usually not what you aim for as a type designer, so let’s ignore this for now. (Also there is the special case of the fallback glyph .notdef
, but I’ll ignore that one here as well.)
So, if you want a ligature substitution, that is two or more glyphs substituted by a single glyph. If you do not want to have the second glyph in your font, then it is not a ligature but an alternate, and I suggest a different naming for the glyph, e.g. a.ss01
or a.cv01
.
More on the subject: