I understand that a ligature is a ‘join’ between letters (glyphs). I’m getting nowhere with ligatures. I’m starting from rock bottom, and I’m lost in technicalities and unfamiliar words. I’ve tried some tutorials, but they seem to address more complicated issues.
(I’m using the FontCreator Professional.)
First, in the simplest possible terms, how do I make ligatures? My efforts simply do not work.
Second, how do I make space in the font definition file for a large number of ligatures.
Here’s what I’m trying to do:
It’s a very simple handwriting style, but pairs of letters join, or not, in different ways. For example,
t joins from the cross to a c i m n, but is not joined to ascenders like b h l, …,
horizontal joins follow f o r t v, …, except when followed by e,
when f follows a c m n, …, it has different shape,
the second f of ff has a different shape,
etc…
I estimate that the letters join in 15 different ways, though some simplification may be possible.
Ligatures are not what you need. What you are doing is creating a cursive font, for which you need to use Contextual Alternates.
For this, you need to create two or more versions of some letters and use an OpenType feature to substitute the appropriate glyph dependent on the context. This alternate glyphs do not need any Unicode mapping, but they need to be named appropriately.
The linked thread above is a bit old, but I don’t think it is out-of-date yet.
Thank you. I’ve been on the wrong track for days. I will definitely follow your advice.
Thanks. I seem to have a fairly steep learning curve at the moment.
Thank you for your help so far.
There are two OpenType Features example files at:
http://forum.high-logic.com:9080/t/how-to-make-a-contextual-cursive-font/4854/5 .
I wonder if one of those (probably the second) could be brought up-to-date, as neither FontCreator 15 nor I, can interpret them?
Or is there an alternative example?
I won’t be able to respond immediately as I am going away for a few days.
I’m still struggling with this. I’m an absolute beginner, but I think I’ve made progress.
I have created some classes and looked at the Code Editor, but I cannot understand how to use the classes.
I have one class call “diagonal” which I want to join to another class by a diagonal join. (I’m tempted to call the “join” a “ligature”, but I’m not sure if that’s right.) When the characters of the “diagonal” class come before other characters, there should be no join.
Can someone please help me with this? It’s supposed to be easy, but I cannot see it.
Is there a simple example font I could load, perhaps, to see how it’s done?
A ligature is used as a replacement of two or more glyphs. What you describe related to cursive attachment, but that is not meant for Latin based characters.
However, it might be worth a try to upload an illustration or screenshot of what you try to achieve.
Or upload a reduced version of your font, so we can go from there.
Erwin
Thanks for offering to help.
Ultimately, I want the font to look like the attached image. It’s Tom Gourdie’s “Simple Modern Hand”. (It’s for personal non-commercial use).
These letters: a c d e h i k l m n u
join to the next letter, a b c d f g h i …
by a diagonal join.
If I can achieve that, I feel I’ll be able to approach other joins and refinements.
These letters: b g j p q s x y
do not join to the next letter.
Regards
Bageder

There’s not much to my font as yet, so I’m attaching the project file.
DJC Font SMH.fcp (69.8 KB)
I removed some lookups from the calt feature and connected SingleSubstitution2 to ChainingContext1.

I regret, I have to ask you to make this much simpler for me. Could you please explain what you have done and why? Also, what has it achieved? I can see changes in the .fea file, but their significance escapes me.
This is a basic extract from your original. I hope this will help understand how it works.
OpenType Layout feature definitions
Generated by: FontCreator
Font name: DJC Font 1
languagesystem DFLT dflt;
languagesystem latn dflt; # Latin default
@diagonal = [a c-e h i k-n u];
@unjoined = [ b e g j p q s x y];
lookup SingleSubstitution2 { # GSUB lookup type SingleSubstitution
sub a by a.calt;
sub b by b.calt;
sub c by c.calt;
sub h by h.calt;
} SingleSubstitution2;
feature calt { # Contextual Alternates
sub @diagonal’ lookup SingleSubstitution2 @unjoined;
} calt;
Sorry, but it doesn’t clarify anything. I must call upon your patience and press you further on this. I admit I’m ignorant of fonts, and there’s no one to guide me. My background is in computer and network performance engineering and technical writing. Therefore, please explain as you would to a ten-year-old, although I’m actually 76, brain intact - er - yes, it is.
When I test the font, it doesn’t look any different.
Actually, I think I’m beginning to get it. Don’t reply just yet. I need to study this and try some things that might work.
I think I’m understanding better, but I think what I am trying to do cannot be achieved in any simple way.
This is what I’m trying to do…
Given classes:
@joinright = [a c-e h i k-n u z];
@joinleft = [e f i j m-p r-y];
@caltclass = [a.calt c.calt d.calt e.calt h.calt i.calt k.calt l.calt m.calt n.calt u.calt z.calt];
every time a glyph from @joinright is followed by a glyph from @joinleft, the “joinright” glyph is replaced by the corresponding glyph from @caltclass.
In a sort of pseudocode, it would look something like:
for each char as glyph in @joinright {
sub {char @joinleft.} by {@caltclass.char @joinleft.}
}
That would deal with the 192 (=12*16) glyph pairs.
=====
So, if that doesn’t exist, I’m thinking of listing all 192 pairs as ligatures, and I see two possible ways of doing it.
Firstly, simply using the glyphs from @caltclass linked to glyphs from @leftjoin, and …
alternatively, by abandoning @caltclass and defining a new glyph called join, that represents the actual join. Then, perhaps, I could make 192 three-glyph ligatures of the form “a join c”, “a join d” etc.
Please can you give me some advice, as I don’t want to launch myself into this mammoth task only to find it’s no good.
Regards
Bageder
I’m pleased to report that I have made some progress over the weekend by firing questions at an AI system. The following code works, but there is much more to do:
@lowdiagright = [a c-e h i k-n u z];
@lowdiagleft = [e f i j m-p r-y];
lookup SingleSubstitution1 { # GSUB lookup type SingleSubstitution
sub a by a.calt;
sub c by c.calt;
sub d by d.calt;
sub e by e.calt;
sub h by h.calt;
sub i by i.calt;
sub k by k.calt;
sub l by l.calt;
sub m by m.calt;
sub n by n.calt;
sub u by u.calt;
sub z by z.calt;
} SingleSubstitution1;
Feature definitions
feature calt { # Contextual Alternates
sub @lowdiagright’ lookup SingleSubstitution1 @lowdiagleft;
} calt;
Regards
Bageder
Great to know you have made progress!
Nothing to add right now, but let us know if you need more help from us.
I feel very happy at the moment. Thanks for your help.
I’ve got a problem with a huge number of glyph pairs (including contextual alternatives) that need to be spaced properly.
I have several classes of contextual alternatives working, except for spacing. These alternatives are wider than the glyphs they replace, but should take up the same amount of space. They overlap into the space of the following glyph.
For example, when a is followed by b, there is no join, but when a is followed by c, a is replaced by a.calt.
a.calt joins to c by an “extension” added to a. (See attached)
Because there are hundreds of these pairs, I’m looking for a swifter method of adjusting the space between…
What I want to try is to place a “joining glyph” of a consistent shape between glyphs of one class and glyphs of another. Is that possible in FontCreator 15 Professional?
