Kerning. Where to begin?

Symn's picture

So,

My first font. So far I made all the glyphs of all the 6 families of my font and spaced them as best as I could. Created oldstyle-, ornament-, smallcaps-, ligatures- and discretionary ligature features.

Now come the tidious part I understand. Kerning. What is the best way to go about it??
I was thinking about beginning to kern the Capital A next to lowercase glyphs with classes.
then B, C, etc. etc.

Question 1:
If I do it this way, can I work with classes in the kerning panel? Like this:

_kern1: A' @_lc @_sc

Question 2:

If I want to kern the lowercase a next to the capital A, do I have to drag in all of the a-diacretics symbols as well? Or do those composite glyphs just follow a when it is kerned

Symn's picture

some examples of glyphs that I will remove soon due to an irrational fear of plagurists:

Robert Trogman's picture

The conventional way is to set Ab Ac Ab etc. and use these a working guide

Thomas Phinney's picture

My first piece of advice is, go back and work on the spacing some more first. Seriously. If you think you're done, wait a few days or a couple weeks and then go back to it, or get third-party input. Because the worst mistake one can make is to get well into kerning and then make a few corrections to spacing....

Of course, maybe you've already done this more than once, and you're really ready for kerning. In which case, put some real-world words that demonstrate specific problem combinations next to words that do not have any issues to speak of, and go to work.... Several folks have posted lists of words to use in kerning, as I recall.

Regards,

T

Symn's picture

OK.. to be accurate, spacing is putting the sidebearings right, right?

Symn's picture

I mean... is it really necissary to kern every lettercombination? Or is it OK to just adjust the problematic ones?

blank's picture

You only need to kern the problems, but you need to cycle through most combinations to find the problem. If you assemble text files of kerning pairs correctly this can be faster than it sounds, especially if you use Metrics Machine to build your pair lists and cycle through them.

But Listen to Thomas. Just put this font away for a while. Design another font, space it, learn more, and then go back to the first one. You don’t have to release your first font right away.

Symn's picture

yeah... I was going to make it just for myself but now i've put quite a lot of effort in it and it would be a waste not to release it...

Offtopic; is there a way I can take my pictures off? I can't find the edit button anywhere...

hrant's picture

The basic method:
Once you have the base spacing done* make two lists: a "Left" list where the right side of the glyph is irregular**, and a "Right" list where the left side is. Then you check (and probably kern) every combination of Left+Right. What you shouldn't kern from that list is stuff that's less errant than your most errant pair that's not on the list.

* Which does not equate to "once it looks as good as possible without kerning".

** You'll have to nail down what this means for you and the font at hand.

hhp

Symn's picture

cool... thanx. But what can one do, once the spacing looks as good as possible without kerning?

hrant's picture

I don't get the question...
Kern? :-/

Plus like I just said (or at least implied):
Optimal basic spacing does not assume kerning will be absent.

hhp

.00's picture

The longer you look at these glyph strings, the more obvious kerning and spacing will become.

There is more to look at than this, but I suggest you start here:

AABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA
BABBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB
CACBCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC
DADBDCDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD
EAEBECEDEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE
FAFBFCFDFEFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF
GAGBGCGDGEGFGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG
HAHBHCHDHEHFHGHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH
IAIBICIDIEIFIGIHIIJIKILIMINIOIPIQIRISITIUIVIWIXIYIZI
JAJBJCJDJEJFJGJHJIJJKJLJMJNJOJPJRJSJTJUJVJWJXJYJZJ
KAKBKCKDKEKFKGKHKIKJKKLKMKNKOKPKQKRKSKTKUKVKWKXKYKZK
LALBLCLDLELFLGLHLILJLKLLMLNLOLPLQLRLSLTLULVLWLXLYLZL
MAMBMCMDMEMFMGMHMIMJMKMLMMNMOMPMQMRMSMTMUMVMWMXMYMZM
NANBNCNDNENFNGNHNINJNKNLNMNNONPNQNRNSNTNUNVNWNXNYNZN
OAOBOCODOEOFOGOHOIOJOKOLOMONOOPOQOROSOTOUOVOWOXOYOZO
PAPBPCPDPEPFPGPHPIPJPKPLPMPNPOPPQPRPSPTPUPVPWPXPYPZP
QAQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQQRQSQTQUQVQWQXQYQZQ
RARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRSRTRURVRWRXRYRZR
SASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRSSTSUSVSWSXSYSZS
TATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTTUTVTWTXTYTZT
UAUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTUUVUWUXUYUZU
VAVBVCVDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVSVTVUVVWVXVYVZV
WAWBWCWDWEWFWGWHWIWJWKWLWMWNWOWPWQWRWSWTWUWVWWXWYWZW
XAXBXCXDXEXFXGXHXIXJXKXLXMXNXOXPXQXRXSXTXUXVXWXXYXZX
YAYBYCYDYEYFYGYHYIYJYKYLYMYNYOYPYQYRYSYTYUYVYWYYZY
ZAZBZCZDZEZFZGZHZIZJZKZLZMZNZOZPZQZRZSZTZUZVZWZXZYZZ

aabacadaeafagahaiajakalamanaoapaqarasatauavawaxayaza
babbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzb
cacbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc
dadbdcddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd
eaebecedeefegeheiejekelemeneoepeqereseteuevewexeyeze
fafbfcfdfeffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzf
gagbgcgdgegfgghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg
hahbhchdhehfhghhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzh
iaibicidieifigihiijikiliminioipiqirisitiuiviwixiyizi
jajbjcjdjejfjgjhjijjkjljmjnjojpjrjsjtjujvjwjxjyjzj
kakbkckdkekfkgkhkikjkklkmknkokpkqkrksktkukvkwkxkykzk
lalblcldlelflglhliljlkllmlnlolplqlrlsltlulvlwlxlylzl
mambmcmdmemfmgmhmimjmkmlmmnmompmqmrmsmtmumvmwmxmymzm
nanbncndnenfngnhninjnknlnmnnonpnqnrnsntnunvnwnxnynzn
oaobocodoeofogohoiojokolomonoopoqorosotouovowoxoyozo
papbpcpdpepfpgphpipjpkplpmpnpoppqprpsptpupvpwpxpypzp
qaqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqrqsqtquqvqwqxqyqzq
rarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrsrtrurvrwrxryrzr
sasbscsdsesfsgshsisjskslsmsnsospsqsrsstsusvswsxsyszs
tatbtctdtetftgthtitjtktltmtntotptqtrtsttutvtwtxtytzt
uaubucudueufuguhuiujukulumunuoupuqurusutuuvuwuxuyuzu
vavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvwvxvyvzv
wawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwxwywzw
xaxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxyxzx
yaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyyzy
zazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzz

Aar Abo Act Adj Aer Aft Aga Ahe Aie Aji Ake Alm Amo Ano Aoa App Aqu Art Ass Att Aug Ave Awa Axe Aye Azo
Bal Bbn Bcc Bdj Ber Bfd Bga Bhu Bie Bji Bkl Bli Bmo Bni Boa Bpi Bqu Brt Bss Btl But Bve Bwa Bxl Bye Bzo
Cal Cbn Ccn Cdj Cer Cfi Cga Che Cie Cjn Ckl Cle Cmo Cnl Coa Cpl Cqu Crl Css Ctl Cul Cvl Cwl Cxl Cyi Czo
Dal Dbn Dci Ddj Der Dfl Dga Dhr Die Dji Dkl Dli Dmo Dnu Don Dpi Dqu Dri Dsl Dtl Dul Dvl Dwl Dxl Dya Dzn
Ear Ebe Ech Edw Een Efo Ega Ehr Eit Ejo Ekn Eld Emp Ens Eob Epa Equ Ero Est Eth Euc Eva Ewa Exe Eyo Eze
Fal Fbo Fci Fdj Fer Ffu Fgn Fhi Fil Fjo Fkl Fli Fmi Fnl Fol Fpi Fqu Fra Fst Fto Ful Fvl Fwl Fxi Fyi Fzi
Gal Gbo Gch Gdj Ger Gfl Ggl Ghi Gil Gjl Gke Gli Gmo Gnl Gol Gpi Gqu Gra Gst Gto Gut Gve Gwl Gxi Gyn Gzn
Har Hbo Hct Hdj Her Hfl Hga Hhe Hie Hji Hke Hlm Hmo Hno Hon Hpl Hqu Hrt Hss Htt Hue Hve Hwa Hxe Hyu Hzi
Ian Ibo Ict Idj Ier Ift Iga Ihe Iie Ijo Ike Ilm Imo Ino Ion Ipl Iqu Irt Iss Ita Iut Ive Iwa Ixe Iyo Izo
Jap Jbo Jct Jdj Jer Jfn Jgu Jhe Jie Jjl Jkl Jlm Jmo Jno Jon Jpl Jqu Jrt Jss Jtt Jut Jve Jwa Jxe Jyn Jzt
Kan Kbo Kci Kdj Ker Kfn Kga Khe Kie Kjl Kkn Klm Kmo Kno Kon Kpl Kqu Krt Kss Kti Kui Kve Kwa Kxe Kye Kzo
Lam Lbo Lct Ldj Len Lft Lga Lhe Lie Lju Lke Llm Lmo Lno Lon Lpl Lqu Lrt Lss Ltt Luc Lve Lwa Lxe Lye Lzt
Mar Mbu Mct Mdj Mer Mfl Mga Mhe Mie Mji Mke Mlf Mmi Mnu Mon Mpl Mqu Mrt Mss Mtt Mut Mvl Mwa Mxe Myu Mzi
Nam Nbu Nct Ndj Nel Nfl Nga Nhi Nie Njn Nke Nlo Nmi Nnu Non Npr Nqu Nrt Nst Ntu Nul Nvd Nwa Nxe Nyi Nzu
Oan Obu Oct Odj Oer Ofa Oga Ohe Oie Oja Oke Olf Omi Onu Oon Opl Oqu Ort Oss Ott Out Ovl Owa Oxe Oye Ozo
Par Pbl Pct Pdj Per Pfe Pgs Phi Pie Pji Pki Pla Pml Pnu Pon Ppl Pqu Prt Psa Pts Pul Pvc Pwi Pxl Pyn Pzl
Qal Qbo Qct Qdj Qer Qfi Qga Qhe Qie Qji Qke Qlm Qmo Qno Qoa Qpp Qqu Qrt Qss Qtt Qui Qve Qwa Qxe Qyo Qzo
Rad Rbi Rct Rdj Ren Rfe Rgs Rha Ria Rji Rkl Rli Rms Rni Roa Rpi Rqu Rrt Rsi Rtd Rut Rvi Rwl Rxi Ryn Rzi
Sar Sbo Sct Sdl Ser Sfo Sgi She Sie Sja Ski Slo Smi Sno Sol Spe Squ Srt Sst Stt Sut Sve Swa Sxe Syl Szo
Tar Tba Tcm Tdi Ter Tfl Tgi The Tie Tji Tke Tlm Tmo Tno Tol Tpi Tqu Trt Tsi Tti Tut Tvl Twl Txl Tyl Tzo
Ual Ubi Uct Udj Uer Ufc Uga Uhi Uie Uji Uke Ulm Umo Uno Uol Upp Uqu Urt Uss Utl Uui Uvl Uwl Uxe Uye Uzo
Val Vbo Vct Vdj Ver Vft Vga Vhe Vie Vjl Vki Vlm Vmo Vno Vol Vpi Vqu Vrl Vsi Vtt Vut Vvl Vwl Vxl Vyl Vzi
Wal Wbo Wcl Wdj Wer Wfi Wga Whe Wie Wjl Wke Wlm Wmo Wno Wol Wpi Wqu Wrl Wsi Wtt Wut Wvl Wwl Wxl Wya Wzl
Xal Xbo Xce Xdj Xer Xft Xga Xhe Xie Xjl Xki Xlm Xmo Xno Xol Xpi Xqu Xrl Xsi Xtt Xut Xvl Xwl Xxl Xye Xzi
Yal Ybo Yci Ydj Yer Yfl Yga Yhe Yie Yjo Ykl Yli Ymo Yno Yol Ypi Yqu Yrl Ysi Ytt Yut Yvl Ywl Yxl Yyl Yzi
Zan Zbr Zco Zdj Zer Zfl Zga Zhe Zie Zji Zke Zlm Zmo Zno Zol Zpi Zqu Zro Zsn Zti Zut Zvl Zwl Zxl Zyl Zzl

01020304050607080900
91929394959697989909
81828384858687889808
71727374757677879707
61626364656676869606
51525354556575859505
41424344546474849404
31323343536373839303
21223242526272829202
11213141516171819101
WOW.” ,’ ,” .’ ?” ?’ !” !’
.1.2.3.4.5.6.7.8.9.0.
,1,2,3,4,5,6,7,8,9,0,
-1-2-3-4-5-6-7-8-9-0-
–1–2–3–4–5–6–7–8–9–0–
-a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-
-A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z-
—a—b—c—d—e—f—g—h—i—j—k—l—m—n—o—p—q—r—s—t—u—v—w—x—y—z—
–a–b–c–d–e–f–g–h–i–j–k–l–m–n–o–p–q–r–s–t–u–v–w–x–y–z–
–A–B–C–D–E–F–G–H–I–J–K–L–M–N–O–P–Q–R–S–T–U–V–W–X–Y–Z–
—A—B—C—D—E—F—G—H—I—J—K—L—M—N—O—P—Q—R—S—T—U—V—W—X—Y—Z—
.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.
,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,
.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.
,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,
a; b; c; d; e; f; g; h; i; j; k; l; m; n; o; p; q; r; s; t; u; v; w; x; y; z;
a: b: c: d: e: f: g: h: i: j: k: l: m: n: o: p: q: r: s: t: u: v: w: x: y: z:
A; B; C; D; E; F; G; H; I; J; K; L; M; N; O; P; Q; R; S; T; U; V; W; X; Y; Z;
A: B: C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z:
//a//b//c//d//e//f//g//h//i//j//k//l//m//n//o//p//q//r//s//t//u//v//w//y//z//
//A//B//C//D//E//F//G//H//I//J//K//L//M//N//O//P//Q//R//S//T//U//V//W//X//Y//Z//
A?B?C?D?E?F?G?H?I?J?K?L?M?N?O?P?Q?R?S?T?U?V?W?X?Y?Z?
a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t?u?v?w?x?y?z?
a! b! c! d! e! f! g! h! i! j! k! l! m! n! o! p! q! r! s! t! u! v! w! x! y! z!
A! B! C! D! E! F! G! H! I! J! K! L! M! N! O! P! Q! R! S! T! U! V! W! X! Y! Z!
“A” “B” “C” “D” “E” “F” “G” “H” “I” “J” “K” “L” “M” “N” “O” “P” “Q” “R” “S” “T” “U” “V” “W” “X” “Y” “Z”
“a” “b” “c” “d” “e” “f” “g” “h” “i” “j” “k” “l” “m” “n” “o” “p” “q” “r” “s” “t” “u” “v” “w” “x” “y” “z”
‘A’ ‘B’ ‘C’ ‘D’ ‘E’ ‘F’ ‘G’ ‘H’ ‘I’ ‘J’ ‘K’ ‘L’ ‘M’ ‘N’ ‘O’ ‘P’ ‘Q’ ‘R’ ‘S’ ‘T’ ‘U’ ‘V’ ‘W’ ‘X’ ‘Y’ ‘Z’
‘a’ ‘b’ ‘c’ ‘d’ ‘e’ ‘f’ ‘g’ ‘h’ ‘i’ ‘j’ ‘k’ ‘l’ ‘m’ ‘n’ ‘o’ ‘p’ ‘q’ ‘r’ ‘s’ ‘t’ ‘u’ ‘v’ ‘w’ ‘x’ ‘y’ ‘z’
’a’b’c’d’e’f’g’h’i’j’k’l’m’n’o’p’q’r’s’t’u’v’w’x’y’z’
’A’B’C’D’E’F’G’H’I’J’K’L’M’N’O’P’Q’R’S’T’U’V’W’X’Y’Z’
$12 $23 $34 $45 $56 $67 $78 $89 $90 $01
€12 €23 €34 €45 €56 €67 €78 €89 €90 €01
£12 £23 £34 £45 £56 £67 £78 £89 £90 £01
¥12 ¥23 ¥34 ¥45 ¥56 ¥67 ¥78 ¥89 ¥90 ¥01
12¢ 23¢ 34¢ 45¢ 56¢ 67¢ 78¢ 89¢ 90¢ 01¢
(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)(q)(r)(s)(t)(u)(v)(w)(x)(y)(z)
(A)(B)(C)(D)(E)(F)(G)(H)(I)(J)(K)(L)(M)(N)(O)(P)(Q)(R)(S)(T)(U)(V)(W)(X)(Y)(Z)
{a}{b}{c}{d}{e}{f}{g}{h}{i}{j}{k}{l}{m}{n}{o}{p}{q}{r}{s}{t}{u}{v}{w}{x}{y}{z}
{A}{B}{C}{D}{E}{F}{G}{H}{I}{J}{K}{L}{M}{N}{O}{P}{Q}{R}{S}{T}{U}{V}{W}{X}{Y}{Z}
[a][b][c][d][e][f][g][h][i][j][k][l][m][n][o][p][q][r][s][t][u][v][w][x][y][z]
[A][B][C][D][E][F][G][H][I][J][K][L][M][N][O][P][Q][R][S][T][U][V][W][X][Y][Z]

nina's picture

Also, at least if you're doing this for the first time, accept that it will be an iterative process. Meaning that, even if your spacing looks «as good as it can without kerning», once you add kerning you may well have to go back and revise the spacing. In my case I've even had to go back and make some (tiny, but what isn't tiny in type design) changes to the black shapes in order to get the white to click. – On the other hand of course you need a system and some sort of plan/direction; otherwise this can seriously take forever.
Look; learn to see; be slow. Put stuff upside down. Squint at your screen, print stuff, whatever makes it easier for you to see the white. Go back and forth.
I've found kerning to be a long-winded, sometimes tedious, but amazingly instructive process.

Frank ADEBIAYE's picture

at some points, you'll need to drink an heinekern, and then go on :-)

Symn's picture

:D thnx guys... I did learn some tricks from good ole mr. Blokland in class. Like squinting, printing & turning things upside down.

The thing is, I could keep myself busy editing glyphs forever but I want this thing finished so I can start on something completely different, or it will never get finished at all... oh well, i've come a long way already, I guess once it is kerned it is ready!

Bert Vanderveen's picture

Or you could use the kerning service used by — amongst others — Jos Buivenga: iKern.

Link:
http://ikern.com/k1/

dberlow's picture

Symn> OK.. to be accurate, spacing is putting the sidebearings right, right?

Correct. And to be realistic and echo what others have said, others have said the spacing is not always complete when the kerning is begun. My pair kerning process often discovers changes needed in the spacing.

For this reason:
>...thinking about beginning to kern the Capital A next to lowercase glyphs with classes...

— is not a good idea for a beginning kerner, (and perhaps even more so for a beginning Heinekerner), to start Aa.

My process has always been to solve the last details of spacing and the kerning, by the case, as I do in the letter design and spacing. This means, pair kerning the Aa later, with correctly spaced and pair kerned cases. The advantages, for a beginner:

a. you have whole words, like Avarice or Woonsocket, properly spaced and kerned, to look at, e.g. for the Av and Wo combinations.
b. you have no spacing corrections left in the cases perturbing the kern field.

>...is it really necessary to kern every letter combination?

Most letter combinations in a well spaced font have no kerns, so you don't have to kern them. You have a choice of kerning everything that's left, a random pair that needs it, some pairs, or kerning according to some sort of frequency-of-use consideration, and/or according to the size of a required kern.

>is there a way I can take my pictures off?

Too late, I finished the Cyrillic and Greek versions last night. Am 1/2 way through the Kanji and am renaming MY NEW FONT Angel of Heaven. And now off to work.;)

Frank ADEBIAYE's picture

“— is not a good idea for a beginning kerner, (and perhaps even more so for a beginning Heinekerner), to start Aa.”
the term “heinekern” was forged by jean-baptiste levée (www.opto.fr)
and here comes the term “heinekerner” forged by david berlow... :-)

greyletter's picture

To simplify things take a moment to strategize your kerning classes. This minimize will the number of pairs you have to manage, particularly when you go back and make and adjustment. The obvious classes are composed of glyphs and their related diacritics, but depending on your design you may be able to combine, for example, glyphs with ascenders on the left. This doesn't eliminate the review all combinations but you'll save a lot of time in entering the kerning values.

Also, as a caveat, sometimes, when you modify an existing kerning class in the glyph panel of Fontlab, it doesn't always apply the changes when you compile the kern feature. It's a little buggy and frustrating the when you test the font in the page layout program and realize your fixes did not take. I find it best to double check(or just edit) your classes in the opentype code pane.

Max Phillips's picture

Coming a bit late to this very helpful thread (and thank you, James Montalbano, for generously sharing your kerning strings). A further question: how do you kern small caps in FontLab? Specifically, how do you paste text containing small caps into the metrics window?

blank's picture

…how do you kern small caps in FontLab?

Don’t kern small caps. Use Metrics Machine to copy over the values, rename them, and proportionally adjust them. Tal demonstrated this in one of the Robothon 2009 videos.

Max Phillips's picture

Thanks, James. But is there a way to handle this without buying a separate software package?

frankrolf's picture

Max,
to kern small caps in FontLab, you’ll need to insert the glyph names into the FL metrics window, preceded by a slash (as you’d do with any glyph not accessible directly with the keyboard.)

Typical example:
/a.sc/v.sc/a.sc/t.sc/a.sc/r.sc
(or, alternatively:)
/A.sc/V.sc/A.sc/T.sc/A.sc/R.sc

Max Phillips's picture

Well, I was hoping there was some quicker way to create long strings of small caps than to type out the name of each glyph individually. But I guess a little typing won't hurt me. Thanks, Frank.

nina's picture

You can always type the «base» strings ("ata") into the OT panel, switch on the smallcaps feature, and copy-paste the resulting «output» string ("/a.sc/t.sc/a.sc") from there into the metrics window. At least that saves some typing...

blank's picture

Well, I was hoping there was some quicker way to create long strings of small caps than to type out the name of each glyph individually.

# !/usr/bin/python
# Mixer v.0.02
# Mixer originated by James Puckett, jp@dunwichtype.com

# Codecs module is needed to generate working text files on Mac OS X
import codecs

# Declare my lists
# Spam and eggs are just short lists for testing
spam = [ '1', '2', '3']
eggs = [ 'a', 'b', 'c']

majbasic = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']

minbasic = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

allbasic = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

lc_control = ['anon ', 'bnon ', 'cnon ', 'dnon ', 'enon ', 'fnon ', 'gnon ', 'hnon ', 'inon ', 'jnon ', 'knon ', 'lnon ', 'mnon ', 'nnon ', 'onon ', 'pnon ', 'qnon ', 'rnon ', 'snon ', 'tnon ', 'unon ', 'vnon ', 'wnon ', 'xnon ', 'ynon ', 'znon ']

controls = ['H', 'O', 'h', 'n', 'o']
majcontrols = ['H', 'O']
mincontrols = ['h', 'o', 'n']
figcontrols = ['0', '1']

majuscules = ['A', 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ā', 'Ă', 'Ą', 'Æ', 'Ǽ', 'Z', 'B', 'C', 'Ç', 'Ć', 'Ĉ', 'Ċ', 'Č', 'D', 'Ď', 'Đ', 'E', 'È', 'É', 'Ê', 'Ë', 'Ē', 'Ĕ', 'Ė', 'Ę', 'Ě', 'F', 'G', 'Ĝ', 'Ğ', 'Ġ', 'Ģ', 'H', 'Ĥ', 'Ħ', 'I', 'Ì', 'Í', 'Î', 'Ï', 'Ĩ', 'Ī', 'Ĭ', 'Į', 'J', 'Ĵ', 'K', 'Ķ', 'L', 'Ĺ', 'Ļ', 'Ľ', 'Ł', 'Ŀ', 'M', 'N', 'Ń', 'Ņ', 'Ň', 'Ŋ', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ō', 'Ŏ', 'Ő', 'Ø', 'Ǿ', 'Œ', 'P', 'Q', 'Þ', 'R', 'Ŕ', 'Ř', 'Ŗ', 'S', 'Ś', 'Ŝ', 'Ş', 'Š', 'Ș', 'T', 'Ţ', 'Ť', 'Ŧ', 'Ț', 'U', 'Ù', 'Ú', 'Û', 'Ü', 'Ũ', 'Ū', 'Ŭ', 'Ů', 'Ű', 'Ų', 'V', 'W', 'Ŵ', 'Ẁ', 'Ẃ', 'Ẅ', 'X', 'Y', 'Ý', 'Ŷ', 'Ÿ', 'Z', 'Ź', 'Ż', 'Ž']

minuscules = ['a', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ā', 'ă', 'ą', 'æ', 'ǽ', 'b', 'v', 'ç', 'ć', 'ĉ', 'ċ', 'č', 'd', 'ď', 'đ', 'e', 'è', 'é', 'ê', 'ë', 'ē', 'ĕ', 'ė', 'ę', 'ě', 'f', 'g', 'ĝ', 'ğ', 'ġ', 'ģ', 'h', 'ĥ', 'ħ', 'i', 'ì', 'í', 'î', 'ï', 'ĩ', 'ī', 'ĭ', 'į', 'j', 'ĵ', 'k', 'ķ', 'l', 'ĺ', 'ļ', 'ľ', 'ł', 'ŀ', 'm', 'n', 'ń', 'ņ', 'ň', 'ŋ', 'ñ', 'o', 'ò', 'ó', 'ô', 'õ', 'ö', 'ō', 'ŏ', 'ő', 'ø', 'ǿ', 'œ', 'p', 'þ', 'q', 'r', 'ŕ', 'ř', 'ŗ', 's', 'ś', 'ŝ', 'ş', 'š', 'ș', 'ß', 't', 'ţ', 'ť', 'ŧ', 'ț', 'u', 'ù', 'ú', 'û', 'ü', 'ũ', 'ū', 'ŭ', 'ů', 'ű', 'ų', 'v', 'w', 'ŵ', 'ẁ', 'ẃ', 'ẅ', 'x', 'y', 'ý', 'ŷ', 'ÿ', 'z', 'ź', 'ż', 'ž']

punct = ['.', '…', ',', ':', ';', '?', '¿', '!', '¡', '\'', '\"', '‘', '’', '‚', '“', '”', '„', '‹', '›', '«', '»', '-', '–', '—', '_', '†', '‡', '•', '*', '©', '®', '™', '@', '¶', '(', ')', '[', ']', '{', '}', '/', '\\', '|',]

currency = ['#', '%', '&', '¢', '$', '£', '¥', 'ƒ', '€']

figures = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

prebuilt = ['½', '¼', '¾', '⅓', '⅔', '⅛', '⅜', '⅝']

math = ['<', '+', '−', '=', '÷', '×', '>', '±', '^', '~', '|', '¦', '§', '°', 'ª', 'º', '%']

numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '½', '¼', '¾', '⅓', '⅔', '⅛', '⅜', '⅝', '#', '%', '&', '¢', '$', '£', '¥', 'ƒ', '€', '<', '+', '−', '=', '÷', '×', '>', '±', '^', '~', '|', '¦', '§', '°', 'ª', 'º', '%']

# mixer is the function that iterates through the lists, combining them

def mixer (dough, chips, title):

# Prepare output file for writing
output = open( title+'.txt', 'w')
output.write( codecs.BOM_UTF8 )

output.write ( title.encode( "utf-8" ))
output.write( '\n')
for i in dough:
mix = ''
for z in chips:
mix += i
mix += z
output.write( mix.encode( "utf-8" ))
output.write( '\n')
output.close()

# make the mixes!
#mixer(spam, eggs, 'Test')
#mixer(majbasic, majbasic, 'Basic_Caps')
#mixer(majbasic, minbasic, 'Basic_Mixed')
#mixer(minbasic, minbasic, 'Basic_Lowercase')
#mixer(majuscules, majuscules, 'All_Caps')
#mixer(majuscules, minuscules, 'All_Mixed')
#mixer(minuscules, minuscules, 'All_Lowercase')
#mixer(majuscules, punct, 'All_UC_Punct')
#mixer(minuscules, punct, 'All_LC_Punct')
#mixer(figures, figures, 'Numbers')
#mixer(figures, math, 'Numbers_Math')
#mixer(figures, currency, 'Numbers_Currency')
#mixer(figures, prebuilt, 'Numbers_Prebuilts')
#mixer(prebuilt, math, 'Math_Prebuilts')
#mixer(numbers, numbers, 'All_Numbers')
#mixer(allbasic, figures, 'Numbers_Alpha')
#mixer (majbasic, lc_control, 'CapsLCtest')

# close the output file.

Max Phillips's picture

This is terrific. Thanks so much, Nina and James.

brianskywalker's picture

> some examples of glyphs that I will remove soon due to an irrational fear of plagurists

I've already saved the images to disk and now have the basis for my new italic. I will make sure and include the r_a, g_r, and a_p_h ligatures.

frankrolf's picture

Hey James,
that’s a very useful script; although it contains a syntax error which might confuse some people here:
When doing the proper work (mixing); the script flushes the mix for every 'i in dough'.

So here’s the corrected bit:

mix = ''
for i in one:

for z in two:

mix += i
mix += z

(So sad that proper code formatting is not possible here — not even with the 'code' tag!)

Syndicate content Syndicate content