In many scripts characters have several variant glyphs. In latin the most obvious example is that every letter has both an upper case and a lower case variant. A more esoteric example would be that in renaissance times the long-s variant (of s) was used initially and medially in a word, while the short-s was only used at the end of a word.
Most Arabic characters have four variants (initial, medial, final and isolated).
The digits often have several variants: tabular digits (where all digits
have the same advance width so that tables of numbers don't look ragged),
proportional digits (where each digit has a width appropriate to its shape)
and old-style or lower case digits
().
Some of these variants are built into the encodings (the upper and lower case distinction is), but in other cases you should provide extra information in the font so that the word processor can be aware of the variants (Arabic is midway between the two, the various forms are in the encoding, but you need to provide extra information as well).
Let us consider the case of the digits mentioned above. Assume that the glyph
called "one" contains the tabular variant of one, the glyph "one.prop" contains
the proportional variant and "one.oldstyle" contains the lower-case variant.
Then select "one" from the fontview, Edit->Char Info
, select
the Subs
tab and press the [New]
button. You should
get another dialog. In the Components field, enter "one.prop", select
"Proportional Numbers" from the pull down list (it will turn into "pnum"),
and select the script set you are interested in (a script of 'latn' and a
language of 'dflt' will cover many cases). Then press [OK]
.
Some variant forms are built in to PfaEdit, and if you use
Element->Default ATT->(variant name)
, PfaEdit may be able
to automate this process for you.
(Note: Type0, Type1 and Type3 PostScript fonts have no notation to handle this. You need to be creating an OpenType or TrueType font for these varients to be output).
PfaEdit supports OpenType's Contextual Substitution and Chaining Contextual Substitution sub-tables, and to a lesser extent, Apple's contextual glyph substitution sub-table. This means that you can insert conditional variants into your font.
For instance suppose you want to create a latin script font where most letter combinations join at the baseline, but some join near the x-height. I was taught that the characters "b", "o", "v" and "w" join on the left at the x-height. So you need a variant form of all the lower case letters that will join on the left at the x-height and you need to use this form of the character after either a "b", "o", "v" or "w".
See the Element->Font Info->Contextual dialog for more information
Some scripts (Arabic, Hebrew) need vowel marks placed around the main text characters. Other scripts (some varients of Latin and Greek) have so many possible accent combinations that having preassembled glyphs for all combinations is unwieldy.
In OpenType (which includes MicroSoft's TrueType fonts) it is possible to indicate on all base glyphs where marks should attach, and on all marks where the base glyphs should attach. Thus one could put an anchor centered above a capital-A indicating that all accents (accute, grave, umlaut, circumflex, tilde, macron, ring, caron, ...) should attach there, and underneath all the accents one could put another anchor below so that when the two glyphs are adjacent in the text the word-processor will know where to place the accent so that it rides above the "A".
![]() |
+ | ![]() |
=> | ![]() |
Not all accents ride centered above the letter (the dot and ogonek ride below the letter), so you may need more than one anchor for different styles of attachment.
Finally some letters can have multiple attachments, unicode U+1EA4, for example, is an A with a circumflex and an acute. Normally the circumflex and the accute will attach at the same point, which would be ugly and confusing. Instead we create a different kind of anchor, a mark to mark anchor, on the circumflex and allow the accute accent to attach to that.
Before one can create an anchor in a character one must notify PfaEdit that
this font will have anchors. You must create an
anchor class for each type of attachment
(thus in the case of A above with two types of attachments (one above and
one below) you would create two anchor classes. The
Element->Font Info->Anchor
Classes
dialog will allow you to do that.
Then for each character in which an attachment will be made, you should first
click at the point where the anchor is to be created and then bring up the
Point->Add Anchor
dialog.