****************************************************************
       *                        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).