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