summaryrefslogtreecommitdiff
path: root/fonts/utilities/a2ac/a2ac-cz.doc
blob: a8413d7435c490c852d1a75227148cc8a3be9adf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
       ****************************************************************
       *                        Program a2ac                          *
       ****************************************************************
       verze 1, Èerven 95                                    Petr Ol¹ák

Program a2ac (Afm To Afm add Composites) konvertuje afm soubory (Adobe
Font Metrics) na nové soubory rovnì¾ ve formátu afm. Program pøitom naèítá
tzv. definièní soubor, v nìm¾ je stanoveno, jaké zmìny se mají v afm
formátu provést. Program pøedev¹ím pøidává nové kompozitní znaky a
roz¹iøuje tabulku kernù o nové kerningové údaje podle jistých masek.

Program se volá se tøemi parametry:

   a2ac input.afm corr.tab output.afm

První parametr je název vstupního (afm) souboru, druhý parametr oznaèuje
definièní soubor obsahující definice zmìn, které se mají provést. Tøetí
parametr je název výstupního souboru. Pøípony souborù (.afm, .tab) je
nutno uvést, program si je nedomyslí.

Pokud chceme vytvoøit log a nechceme zaplnit terminál mno¾stvím informací,
mù¾eme napsat:

   a2ac input.afm corr.tab output.afm > logfile

Pøíkazový øádek volání programu bývá obvykle souèástí nìjakého scriptu nebo
dávkového souboru (viz té¾ soubor readme.txt v balíku programu a2ac).

K balíku programu je pøidán soubor cscorr.tab, který obsahuje definice
korekcí, pomocí nich¾ lze vytvoøit èeský a slovenský font (tj. font
obsahující znaky èeské a slovenské abecedy a vhodný kerning). Pøi pou¾ití
tohoto souboru se pouze vy¾aduje, aby vstupní afm soubor obsahoval v¹echny
akcenty pro èeské/slovenské znaky. To splòují napø. v¹echny standardní
Adobe fonty. Výstupem je afm, obsahující navíc kompozitní znaky z cs
abecedy a roz¹íøený kerning. Takto upravený font se dá pou¾ít napøíklad
v TeXu.

Pro zaøazení nového fontu do TeXu je mo¾no pou¾ít script "mkfnt".
Ruènì se zaøazení provede v následujících krocích: (pro ilustraci
výchozí standarní PostScriptový font má metriku s názvem font.afm).

1.  a2ac font.afm cscorr.tab cfont.afm
      ... vytvoøí se metrika cfont.afm se v¹emi akcentovanými znaky.
2.  afm2tfm cfont.afm -t xil2.enc -v cfont rfont
      ... vytvoøí se metrika rfont.tfm (potøebná pro dal¹í manipulace
          s programem dvips) a virtuální popis cfont.vpl kódovaný podle
          souboru xil2.enc.
3.  vptovf cfont.vpl cfont.vf cfont.tfm
      ... vytvoøí se metrika vhodná pro TeX (cfont.tfm) a virtuální popis
          cfont.vf pro ovladaè dvips.
4.  Obì tfm metriky (cfont, rfont) ulo¾íme do adresáøe s metrikami a
    soubor cfont.vf ulo¾íme do adresáøe, kde jej ète dvips.
    V konfiguraèním souboru pro dvips s názvem psfonts.map pøidáme øádek:
       rfont Uplny-Nazev-PostScriptoveho-Fontu
    Pokud font není rezidentnì v tiskárnì a máme tedy od nìj soubor typu
    pfb, pak nový øádek v psfonts.map bude mít tvar:
       rfont Uplny-Nazev-PostScriptoveho-Fontu </cesta/k/souboru.pfb
    nebo v DOSu:
       rfont Uplny-Nazev-PostScriptoveho-Fontu <disk:\cesta\k\souboru.pfb
5.  V souboru *.tex zavedeme font bì¾ným zpùsobem:
       \font\muj=cfont    {\muj tady je text v novém fontu}
    Po zpracování TeXem a ovladaèem dvips máme text vysázený pøíslu¹ným fontem.

Poznámka 1: V nìkterých instalacích DOSu je potøeba pøed provedením tøetího
kroku soubor *.vpl naèíst do editoru a ulo¾it, èím¾ se upraví správnì konce
øádkù (provede se transformace unix2dos).

Poznámka 2: Program afm2tfm dodávaný v balíku CSTeX94 (19.disketa) je
nepou¾itelný, proto¾e se jedná o starou verzi navíc pravdìpodobnì vùbec
nechodivou. Je potøeba pou¾ít afm2tfm z nového balíku programu dvips.

Poznámka 3: Pro prohlí¾eè a tiskárny nevybavené PostScriptem je
vìt¹inou potøeba provést nìjaké opatøení. Nabízí se tyto tøi
nejbì¾nìj¹í mo¾nosti:

1. Pou¾ít Ghostscript pro konverzi z PostScriptu do jazyka tiskárny.
2. Pou¾ít ps2pk pro konverzi PostScriptového fontu do formátu pk
3. Pou¾ít náhradní font.

První dvì mo¾nosti se mohou pou¾ít v pøípadì, ¾e font je v poèítaèi
instalován (ve formátu pfb nebo pfa). Tøetí mo¾nost je jen náhradním
øe¹ením pro úèely koreturních tiskù, nikoli pro finální tisk. Na druhé
stranì nelze tøetí mo¾nost pøehlí¾et, proto¾e se èasto stává, ¾e font
je instalován jen v RIPu finálního zaøízení a odtud jej nelze "vydolovat".
Uvedeme proto postup, jak v pøípadì 3 postupovat.  Pøíklad je pro
nahrazení fontu cptmr fontem csr10:

- tftopl csr10.tfm csr10.pl  ... konverze metriky do .pl formátu,

- editace csr10.pl           ... doplnìní pøíkazu MAPFONT a VTITLE (viz [1])
                                 Na zaèátek souboru pøidáme tyto øádky:
   (VTITLE Substitute font cfont -> csr10)
   (MAPFONT D 0
     (FONTNAME csr10)
     (FONTCHECKSUM D 0)
     (FONTAT R 1.0)
     )

- mv csr10.pl cptrm.vpl       ... pøejmenuj csr10.pl na cptrm.vpl (v DOSu: ren)

- vptovf cptmr.vpl cptmr.vf cptmr.tfm  ... soubor tfm zahodíme a soubor vf
                                 pøedlo¾íme ovladaèi, který má pou¾ít náhradní
                                 font. Pozor! Nikoli pro ovladaè dvips.

Kutání do hloubky
=================

Z pøedchozího odstavce je patrné, ¾e byly pou¾ity dva soubory, jejich¾
zmìnou mù¾eme vìc více pøizùsobit obrazu svému. Za prvé se jedná o soubor
cscorr.tab a za druhé jde o soubor xil2.enc. O jejich významu bude øeè
v následujícím textu.

AFM metrika obsahuje informace o symbolických názvech znakù (napø. Scaron
znamená ©, Uring je Ù a eacute je é). Ka¾dý pou¾itý název mù¾e být
podchycen v metrice dvìma zpùsoby. Buï je vázán na konkrétní pozici ve
fontu (kód), nebo má kód oznaèen hodnotou -1 a je popsán v metrice jako
slo¾enina jiných znakù. Popis slo¾ených (kompozitních) znakù se pøitom
opírá o symbolické názvy, tak¾e není závislý na kódování fontu.

Základní my¹lenka programu a2ac je zalo¾ena na tom, ¾e v definièním souboru
(napøíklad cscorr.tab) popí¹eme v¹echny potøebné slo¾eniny pomocí
symbolických znakù a program a2ac je do metriky doplní. Výstupní afm soubor
programu a2ac tedy vìt¹inou obsahuje vìt¹í mno¾ství kompozitních znakù a
navíc v nìm mohou být doplnìny kerningové vztahy s tìmito novými znaky.

Proto¾e program pracuje na úrovni symbolických názvù znakù, jeho èinnost je
naprosto nezávislá na kódování jak PostScriptového fontu, tak vnitøního
kódování sázecího systému, pro který se font pøipravuje.

Program a2ac je pøi ètení definièního souboru vybaven nenulovou
inteligencí. Umo¾òuje deklarovat a pou¾ívat promìnné, psát metrické a
kompozitní informace pomocí jednoduchých výrazù a pomocí masky kernù
doplòovat rozsáhlé mno¾ství nových kerningových informací pro nové znaky.

Po transformaci afm metriky programem a2ac se pro TeX mù¾e pou¾ít program
afm2tfm, který ète upravený soubor afm a dále soubor *.enc, podle nìho¾
provádí pøekódování fontu do kódování pou¾itém v TeXu. Výsledkem je
virtuální font, který obsahuje nejen pøekódování fontu podle souboru *.enc,
ale obsahuje té¾ mechanismy na sestavení v¹ech kompozitních znakù. Tyto
mechanismy byly pøitom sázecímu systému vnuceny pomocí popisu kompozitních
znakù v souboru afm. O to se postaral program a2ac prostøednictvím souboru
typu cscorr.tab.


Popis chování programu
======================

Program pracuje ve tøech krocích.
1. Naète vstupní soubor afm a informace ulo¾í do pamìti.
2. Provede v pamìti zmìny podle definièního souboru.
3. Ulo¾í obsah pamìti do výstupního afm souboru.

V druhém kroku se provádìjí tyto operace:
a) Definují se pracovní promìnné a ukládají se do nich hodnoty.
b) Sestavují se nové kompozitní znaky.
c) Provádí se korekce nìkterých metrických informací.
d) Provádí se pøípadná redukce mno¾ství kerningových informací.
e) Definují se kerny nové.

Operace se provádìjí v poøadí daném obsahem definièního souboru.
Pokyny pro provedení operací c) a¾ e) jsou ignorovány, pokud má font
parametr IsFixedPitch roven hodnotì "true", tj. jedná se o font s pevnou
¹íøkou písmen -- napø. font psacího stroje.

Formát definièního souboru
==========================

Doporuèuje se pøi vytváøení nových definièních souborù vyjít z dodávaného
souboru cscorr.tab. Jedná se o textový soubor. Øádky souboru se dìlí na
výkonné a komentáøové.

Výkonné øádky jsou z kraje (bez mezer) uvedeny tzv. prefixem. Jedná se
zpravidla o dva a¾ tøi znaky na zaèátku øádku, viz ní¾e.
Komentáøové øádky jsou v¹echny ostatní øádky, které nemají ¾ádný z ní¾e
stanovených prefixù. Doporuèuje se uvést ka¾dý komentáøový øádek nìjakým
symbolem tak, aby nikdy nedo¹lo ke krytí s prefixem. Staèí mezera, ale
vhodnìj¹í asi je pou¾ít znak % nebo #. Komentáøe se nesmí vyskytovat uvnitø
výkonného øádku.

Pøehled prefixù:
>>  .......... definice promìnných (viz a)
NC, RC, !C ... definice nového kompozitního znaku (viz b)
RWX .......... korekce parametru WX (viz c)
ReduceKerns .. sní¾ení poètu kerningových informací (viz d)
NK, RK ....... vytváøení nových kerningových informací (viz e).

Poøadí výkonných øádkù není pevnì stanoveno. Podle tohoto poøadí se budou
jednotlivé operace provádìt. Operace, které vycházejí z existence
symbolického jména nìjakého znaku, musejí být uvedeny pozdìji, ne¾ je
symbolické jméno definováno. Napøíklad pomocí definice kompozitního znaku
zavedeme jméno Rcaron a teprve pak mù¾eme vytváøet nové kerningové páry se
znakem Rcaron. Nedodr¾íme-li tento po¾adavek, doèkáme se chybového hlá¹ení
"Undefined identifier".

a) Definice promìnných.
-----------------------
Øádek, který definuje promìnnou, má tento formát:

>> NazevPromenne = výraz

kde ">>" je prefix, "NazevPromenne" je identifikátor promìnné a "výraz" je
ve srovnání s bì¾nými výrazy syntakticky omezený. Výraz je souètem
sèítancù, z nich¾ ka¾dý sèítanec mù¾e být tímto syntaktickým celkem:

- èíslo,
- døíve definovaná promìnná,
- volání funkce b, w, h nebo W,
- souèin èísla a promìnné,
- souèin èísla a funkce.

Hodnoty jednotlivých sèítancù jsou celá èísla a sèítá se na úrovni celých
èísel. Do promìnných je tedy mo¾no ulo¾it pouze celé èíslo.

Identifikátor mù¾e sestávat z alfanumerických znakù nebo znaku _. První
znak musí být písmeno. Délka identifikátoru není omezena. Velká a
malá písmena se v¹ude rozli¹ují.

Desetinné èíslo je mo¾né pou¾ít pouze jako konstantu a má smysl pouze
v pøípadì souèinu èísla s promìnnou nebo funkcí. Výsledek souèinu se hned
konvertuje do celého èísla, pøièem¾ se provede zaokrouhlení. Èísla tedy
mohou obsahovat desetinnou teèku. V zápisu souèinu mezi èíslem a promìnnou
nebo funkcí se nesmí pou¾ít mezi tìmito objekty ¾ádný znak, tj. bì¾né
násobítko ve tvaru * není povoleno. Závorky (s vyjímkou pou¾ití u funkcí),
vnoøení operací, násobení dvou promìnných a dìlení není povoleno.

Funkce b, w, h, W nebo k musí mít hned za svým identifikátorem v kulatých
závorkách napsaný jeden parametr. V pøípadì funkce b nebo k se jedná o dva
parametry oddìlené èárkou. Parametrem je symbolický název znaku a u funkce
b je¹tì následuje èíslo od 1 do 4. Funkce vracejí do výrazu tyto hodnoty:

b(znak,i)    ... i tá hodnota parametru BoudingBox pro znak. Pøesnìji:
   b(znak,1) ... levý prùmìt znaku (souøadnice x),
   b(znak,2) ... dolní prùmìt znaku (souøadnice y),
   b(znak,3) ... pravý prùmìt znaku (souøadnice x),
   b(znak,4) ... horní prùmìt znaku (souøadnice y).
w(znak)      ... ¹íøka znaku = b(znak,3) - b(znak,1).
h(znak)      ... celková vý¹ka znaku = b(znak,4) - b(znak,2).
W(znak)      ... hodnota WX pro daný znak.
k(znak1,znak2) . hodnota kernu pro dvojici  znak1 znak2
                 (nula, pokud kern pro dvojici neexistuje).

Pøíklady výrazù najdete v souboru cscorr.tab.

Pøi zahájení zpracování pole definic promìnných jsou známy hodnoty tìchto
promìnných: CapHeight, XHeight, Ascender, Descender
(pouze ov¹em za pøedpokladu, ¾e jsou o nich vyplnìny údaje ve
vstupní afm metrice).

V prùbìhu "výpoètu" je mo¾né mìnit hodnotu stejné promìnné tím, ¾e se øádek
deklarující promìnnou napí¹e znova s jiným výrazem. V takovém pøípadì je
mo¾né ve výrazu vyu¾ít starou hodnotu této promìnné. Napøíklad:

>> Acutetop = Acutetop + 7

!! Dùle¾itá poznámka: Mezery je mo¾no vkládat do výrazu (kamkoli)
pouze v øádcích definic pracovních promìnných. Ve v¹ech ostatních výkonných
øádcích tento výraz NESMÍ obsahovat jedinou mezeru! Mezera má v tìchto
øádcích význam delimitaèní a ukonèuje naèítání výrazu.

b) Definice nového kompozitního znaku
-------------------------------------
Øádek definuje jeden kompozitní znak podobnì jako ve formátu afm.
Øádek mù¾e být uveden tøemi prefixy:

NC ... New Composite -- Sestavení nového kompozitního znaku. Pokud ve
       vstupní metrice znak existuje (definovaný jako kompozitní nebo
       fyzický), originální definice se nepøepisuje.
RC ... Rewrite Composite -- Sestaví nový znak. Pokud je znak v pùvodní
       metrice definován jako kompozitní, tato definice je pøepsána.
!C ... Sestaví nový znak jako kompozitní, a pøípadnì pøepí¹e pùvodní
       definici znaku, tøeba¾e je pùvodní znak fyzickým znakem fontu.

Následuje název znaku a poèet èástí (dílkù), ze kterých se kompozitní znak
skládá (maximálnì 10). Pak je za støedníkem premisa PCC následovaná názvem
prvního dílku znaku se dvìma parametry oddìlenými mezerami. Parametry udávají
posun dílku vùèi poèátku v souøadnici x a y. Pak za støedníkem je toté¾ pro
druhý a dal¹í dílek.

V¹echny èíselné parametry (kromì èísla udávajícího poèet dílkù) mohou být
výrazy (viz vý¹e). Výrazy jsou oddìleny od sebe mezerami.

Kromì premisy PCC se mohou pou¾ít je¹tì následující premisy: PAC, PCT, PAT.
Premisy deklarují interpretaci následných èíselných parametrù, které pøi
standardním pou¾ití (písmeno C) udávají posun dílku vùèi poèátku.

Premisa s písmenem A (axis) v druhé pozici øíká, ¾e údaj pro x-ovou
souøadnici posunu dílku vyjadøuje posun osy dílku vzhledem k ose základního
(tj. prvního) dílku v kompozitním znaku. Napøíklad "PAC caron 0 cosi"
znamená, ¾e osa znaku caron bude od osy základního znaku kompozitu
vychýlena o 0, tj. osy se budou krýt. Kladná hodnota posunuje doprava,
záporná doleva. Abychom definovali pøesnì osu znaku, uva¾ujme
vodorovnou úseèku o délce WX daného znaku. První konec této úseèky je
v poèátku a druhý smìøuje doprava. Osa znaku prochází støedem této úseèky a
svírá s ní úhel 90+ItalicAngle stupòù.

Premisa s písmenem T (top) na tøetí pozici øíká, ¾e y-ová souøadnice posunu
dílku se poèítá z parametru, který oznaèuje hodnotu horního okraje dílku.
Napøíklad v souboru cscorr.tab je napoèítána hodnota Acutetop jako vý¹ka
velkého písmene s akcentem. Pak jsou v¹echny akcenty pový¹eny na tuto vý¹ku
jednodu¹e pomocí zápisu P?T cosi Acutetop. Tím je dosa¾eno toho, ¾e v¹echny
akcenty mají stejnou vý¹ku, aèkoli velikosti písmen se nepatrnì li¹í (napø,
O kvùli optickému klamu pøesahuje horní i dolní okraj.

Je-li pou¾ita jiná premisa, ne¾ PCC, program údaje pøepoèítá a na výstupu
pou¾ije pouze premisy PCC.

!! Dùle¾itá poznámka: Mezery jsou v celém øádku významné, tj. tøeba mezery
pøed a za støedníkem tam nejsou jenom pro okrasu. ®ádnou mezeru nelze
bezstarostnì vynechat. Jedna mezera a více mezer toté¾ jsou, tj. mù¾e se
vkládáním vìt¹ího poètu mezer docílit jisté pøehlednosti tím, ¾e budou
v¹echny údaje zarovnány pod sebou.

c) Korekce parametru WX
-----------------------
Sázecí systémy pou¾ívají pøi sazbì znakù z fontu parametr posunu sázecího
bodu ka¾dého znaku, který s BoudingBoxy nemusí mít mnoho spoleèného.
Posun sázecího bodu ve smìru osy x je dán parametrem WX pro ka¾dý znak.
(Pro evropské jazyky je posun ve smìru osy y nulový). Tento údaj se napø. do
TeXu promítne jako ¹íøka boxu pro znak (vý¹ka a hloubka se poèítá
z BoudingBoxù).

Pøi poèítání nových kompozitních znakù program napoèítá pro ka¾dý znak nové
hodnoty BoudingBoxù a pro parametr WX pou¾ije hodnotu WX z prvního
(základního) dílku kompozitu. To nemusí být v¾dy vyhovující
(viz znaky », ï).
Proto lze pou¾ít øádky definující novou hodnotu WX.
Ka¾dý øádek má tvar:

RWX nazev vyraz

kde "RWX" je pevná premisa, "nazev" je názem znaku, u kterého mìníme
hodnotu WX a "vyraz" vrací novou hodnotu WX. "vyraz" musí splòovat vý¹e uvedená
syntaktická omezení a nesmí obsahovat mezeru. Hodnota výrazu se mù¾e opírat
o pùvodní hodnotu WX znaku (pou¾itím funkce W).

d) Sní¾ení poètu kerningových informací
---------------------------------------
Øádek má tvar

ReduceKerns vyraz

a zpùsobí vymazání v¹ech kerningových informací, které definují kern
mezi dvìma písmeny v absolutní hodnotì men¹í nebo roven hodnotì "vyraz".
"vyraz" má vý¹e uvedená syntaktická omezení a pí¹e se bez mezer.

Tento øádek je u¾iteèný pro vymazání kernù s nulovou nebo nepatrnou
velikostí. Tyto kerny zbyteènì zabírají místo v metrice fontu sázecího
systému.

Øádek je u¾iteèné pou¾ít dvakrát. Nejprve na zaèátku definièního souboru
(zpùsobí vymazání zbyteèných kerningových informací získaných pøímo ze
vstupního souboru) a podruhé na konci (vyma¾e novì vzniklé informace
s malou absolutní hodnotou kernu). Chceme-li být èistotní, je rozumné
pou¾ít aspoò "ReduceKerns 0" na konci souboru.

e) Vytváøení nových kerningových informací
------------------------------------------
Øádek definující nové kerningové páry mù¾e mít jeden ze dvou prefixù:

NK ... (New Kern), nový kern, pokud kern pro danou dvojici existuje,
       zùstane zachován.
RK ... (Rewrite Kern), nový kern, pokud kern pro danou dvojici existuje,
       bude pøepsán.

Dal¹í pokraèování øádku mù¾e být rùzné, viz následující body (i) a¾ (v):

(i) Pevná definice kernu jediného páru je ve tvaru:
---------------------------------------------------
prefix prvni druhy vyraz

kde "prefix" je NK nebo RK, "prvni" je název prvního znaku, "druhy" je název
druhého znaku a "vyraz" (bez mezer) vrací hodnotu kernu.

(ii) Definice kernu jediného páru podle hodnoty jiného páru
-----------------------------------------------------------
Øádek má tvar

prefix prvni druhy : treti ctvrty vyraz

kde dvojice znakù se jmény "prvni" "druhy" dostane stejný kern, jako dvojice
"treti" "ctvrty" zvìt¹ený o hodnotu "vyraz". Parametr "vyraz" (bez mezer) je
nepovinný a není-li uveden, je poèítáno, ¾e má hodnotu 0.

Místo znaku "treti" anebo "ctvrty" mù¾e být uveden symbol "*".
Vynechaný znak "treti" se doplní znakem "prvni" a vynechaný znak "ctvrty" se
doplní znakem "druhy". Napøíklad:

NK Anew B : A *

je toté¾ jako

NK Anew B : A B

Chceme-li zvìt¹it kern mezi A a B o hodnotu c, napí¹eme:

RK A B : * * +c

(iii) Definice skupiny kernù podle masky:
-----------------------------------------
Øádek má stejný tvar, jako v pøedchozím pøípadì, ov¹em symbol "*"
je uveden nejen za dvojteèkou ale i pøed ní. Tyto symboly se musí krýt, tj.
pokud je znak "prvni" nahrazen, musí být nahrazen té¾ znak "tøetí".
Symboly nahrazení jsou dva -- teèka nebo hvìzdièka -- a musí být
v obou pøípadech stejné. Øádek definuje kerny podle hodnot kernù v¹ech
dvojic, které lze sestavit vpravo od dvojteèky a jsou v pamìti, doplnìním
postupnì v¹ech znakù za vynechaný znak. Je-li symbol nahrazení "*",
doplòují se v¹echny znaky, je-li pou¾ita teèka, doplòují se jen malá
písmena (názvy znakù, které zaèínají malými písmeny). V¹e osvìtlí pøíklad.

Nech» máme v pamìti kern hodnoty 1 pro A B, hodnoty 2 pro A C a hodnoty 3
pro A D. Nech» jiné kerny s písmenem A na zaèátku dvojice neexistují. Pak
øádek

NK Anew * : A *

definuje kern hodnoty 1 pro Anew B, dále kern hodnoty 2 pro Anew C a
koneènì kern hodnoty 3 pro Anew D. Definují se tedy celkem tøi kerny.

V levo od dvojteèky je mo¾no nahradit (hvìzdièkou nebo teèkou) jen jediné
jméno z dvojice. Na druhé stranì vpravo od dvojteèky je mo¾né napsat
hvìzdièku i na místo proti jménu. Napøíklad:

RK Anew * : * * +c

je toté¾ jako

RK Anew * : Anew * +c

tj. v¹echny kerny typu Anew * se zvìt¹í o c.

(iv) Jeden øádek je zkratkou za dva:
------------------------------------
Øádek má tvar:

prefix prvni : druhy

a nahrazuje dva øádky:

prefix prvni * : druhy *
prefix * prvni : * druhy

(v) Výèty v øádcích definujících kerny:
---------------------------------------
Symbolické jméno je mo¾né nahradit výètem symbolických jmen
oddìlených èárkami. Výèet je uzavøen do závorek a nesmí obsahovat mezery a
dal¹í výèty. Jméno je mo¾né nahradit výètem v pøípadech, které jsou
shrnuty v následující tabulce. Slovo "vycet" znamená jedno jméno nebo
výèet jmen, zatímco "single" je jedno jméno, které nesmí být nahrazeno
výètem. Slovo "vyraz" je nepovinný výraz. Tabulka zároveò shrnuje v¹echny
syntaktické mo¾nosti definování nových kernù.

(i)    prefix vycet vycet vyraz

(ii)   prefix vycet vycet : single single vyraz
       prefix vycet vycet : single * vyraz
       prefix vycet vycet : * single vyraz
       prefix vycet vycet : * * vyraz

(iii)  prefix vycet * : single * vyraz
       prefix vycet * : * * vyraz
       prefix * vycet : * single vyraz
       prefix * vycet : * * vyraz

(iv)   prefix vycet : single

Hvìzdièky v tabulce (iii) lze nahradit teèkami. Vidíme, ¾e není dovoleno
zapsat výèet za dvojteèku. Výèty se expandují do více øádkù s postupnì
v¹emi jmény z výètu. To se dìje pøed spu¹tìním algoritmù podle (ii), (iii)
a (iv). Jsou-li v jednom øádku dva výèty, pak se pøíkaz rozvine køí¾ovým
zpùsobem. Napøíklad:

NK (A,B,C) (x,y) : * one

se expanduje do ¹esti øádkù:

NK A x : * one                                          NK A x : A one
NK A y : * one                                          NK A y : A one
NK B x : * one   co¾ se interpretuje podle (ii) jako:   NK B x : B one
NK B y : * one                                          NK B y : B one
NK C x : * one                                          NK C x : C one
NK C y : * one                                          NK C y : C one


Ligatury
========

Informace o ligaturách bývá uvedena na konci øádkù s prefixem C ve vstupním
afm souboru. Napøíklad:

C 102 ; WX 333 ; N f ; B 20 0 383 683 ; L i fi ; L l fl ;

Tato informace se pøepí¹e do výstupního afm souboru a pro vytvoøení záznamu
v tabulce ligatur pro sázecí systémy je dostaèující. Skuteènì, napø.
program afm2tfm ète tyto údaje a vytváøí odpovídající záznam v ligaèní
tabulce pro formát tfm. Navíc se dají prostøednictvím souborù typu *.enc
definovat nové, speciálnì TeXovské, ligatury. Napøíklad øádek v souboru
xl2.enc:

% LIGKERN hyphen hyphen =: endash ; endash hyphen =: emdash ;

definuje ligatury pro "--" a  "---".


Poznámka k souboru cscorr.tab
=============================

Pro znaky ï, » by se správnì mìly pou¾ít symbolické názvy dquoteright a
tquoteright. Místo nich byly ale pou¾ity symbolické názvy dcaron a tcaron.
Dùvod je ten, ¾e tyto znaky mají svùj protìj¹ek v kapitálkách nazvaný
správnì Dcaron a Tcaron. Kdybychom nazvali písmeno ï jako dquoteright, pak
by pou¾ití parametru -V v programu afm2tfm pro vytvoøení fontu "Capitals
and Small Capitals" nedalo správný výsledek. Abychom nezavádìli nová
symbolická oznaèení pro ¥ a µ, zùstali jsme i zde u názvu Lcaron a lcaron.


Poznámka k souboru xil2.enc
===========================

Kódovací soubor definuje tzv. CSencoding vector, tj. kódování CS-fontù.
Kódování CS-fontù je patrné z tabulky na str. 3 po zpracování souboru
ctimne.tex v CSTeXu. Pøesnìj¹í tabulka je v dodatku F v [2].

Soubor xil2.enc je návrhem na standard kódování PostScriptových fontù
v CSTeXu. Dolní polovina tabulky se pøesnì kryje s CM kódováním a horní
polovina tabulky odpovídá normì ISO-8859 Latin2 kódování a¾ na dvì výjimky
(umístìní èeských uvozovek v posledních dvou pozicích). Toto kódování je
nadmno¾inou kódování CS-fontù. Znamená to, ¾e pokud výchozí PostScriptový
font definuje v¹echny znaky, které jsou pou¾ity v CS-fontech, pak se
v¹echny znaky z CS-fontu budou krýt se znaky v sestaveném PostScriptovém
virtuálním fontu. Navíc jsou definovány pozice podle ISO-8859 pro dal¹í
znaky, které se mohou vyskytovat ve výchozím fontu ale nejsou v CS-fontech
(napø. pøe¹krtnuté l).

V CSencoding vektoru je jedna výjimka proti kódování CS-fontù. V tabulkách
Adobe Encoding vektorù neexistuje samostatnì ¹krtátko pro
polské l (CM: Cross for Polish l and L, kód 32), tak¾e zùstalo
v CSencoding vektoru nedefinováno.

Podrobnìji o problematice kódování fontù -- viz [3].

Poznamenejme, ¾e vìt¹inou nejsou výchozím fontem pokryty první pozice CM
kódování odpovídající øeckým znakùm a trojnásobným ligaturám.
Pro speciální aplikace -- pou¾ití TeXovské sazby matematiky
PostScriptovým fontem je tedy vhodné editovat soubor *.vpl tak, aby se
pokryly aspoò øecké znaky z fontu Symbol.


Historie
========
Verze 0 <Záøí 1994>
  - Vznik programu a èeské dokumentace. Program byl vystaven na ftp pro
    èeské a slovenské TeX-kouzelníky.
Verze 1 <Èerven 1995>
  - Nový formát definièních souborù umo¾òuje libovolné poøadí operací.
    Starý definièní soubor bude fungovat právì tehdy, kdy¾ se pøidá
    pøed ka¾dý øádek, definující promìnnou, prefix ve tvaru ">>".
  - Jsou mo¾né zkratky jednoho øádku za dva (viz odst. e, (iv))
    a výèty jmen, které uspoøí je¹tì více øádkù (viz odst. e, (v)).
  - Zavedena nová funkce "k" vracející hodnotu kerningového páru.
  - Opraveny nìkteré chyby:
    . Opravena nestabilita UNIXového a2ac na DOSosvkém formátu vstupních
      souborù (ne¹»astné ^M na konci ka¾dého øádku).
    . Chybí-li pole "Composites" ve vstupní metrice, ve výstupní se u¾
      objeví.
    . Výstupní soubor se nevytvoøí, pokud se narazí na chybu ve vstupu.
    . Opravena èeská dokumentace a pøidána (pseudo)anglická.
    . Pøeuspoøádán soubor cscorr.tab a pøidány nìkteré chybìjící údaje.


Reference
=========
[1]  Donald Knuth: Virtual fonts, a more fun for grand wizards.
     TUGboat 11/89
[2]  Petr Ol¹ák: Typografický sytém TeX.  CSTUG 1995, 270 stran.
     ISBN 80-901950-0-8.
[3]  Petr Ol¹ák: Úvaha o fontech v CSTeXu, TeXbulletin 3/93 (121--131).