TeXové drobnosti CSTUG

DVI súbor (teda súbor, ktorý má príponu .dvi) je hlavný výstupný súbor TeXu (použijúc TeX v širšom zmysle, zahŕňajúc v tom aj LaTeX a ďalšie verzie a varianty TeXu). DVI znamená device independent, čo je nezávislý od zariadenia, a znamená to, že tento súbor by mal byť vytlačený rovnako, bez ohľadu na typ zariadenia, na ktorom bol vyhotovený. DVI súbor je čítaný ovládačom zariadenia (pozri Otázku Čo je to ovládač), ako je tlačiareň (napr. LaserJet), alebo je vstupom pre prehliadač na obrazovke monitora. V DVI súbore je použité TeXovské vnútorné kódovanie. Z TeXovského vstupného súboru by sme mali urobiť vždy ten istý DVI súbor bez ohľadu na implementáciu TeXu, ktorú použijeme.

DVI súbor obsahuje všetky informácie, ktoré sú potrebné pre tlač alebo prezeranie, ale nie konkrétne bitové mapy alebo iné popisy písma. Snáď ešte materiál, ktorý je uvedený v príkaze \special (pozri Otázku Příkazy typu \special).

Základný odkaz na štruktúru DVI súboru je zdrojový text dvitype, ktorý môžete nájsť na CTANe (CTANdvitype).


Čo je to ovládač

Ovládač (driver) je program, ktorý má za vstup DVI súbor (pozri Otázku Čo je to DVI súbor) a (obvykle) produkuje súbor, ktorý môže byť poslaný do typografického výstupného zariadenia, napríklad tlačiarne.

Ovládač je obvykle špecifický pre danú tlačiareň alebo triedu tlačiarní, aj keď každá PostScriptová tlačiareň by mala vytlačiť výstup PostScriptového ovládača.

Ovládač potrebuje DVI súbor, ako aj informáciu o písme. Písma môžu byť zadávané vo forme bitových máp alebo odkazom na písmo, ktoré je priamo obsiahnuté v tlačiarni. Každý ovládač očakáva informáciu o písme v špecifickej podobe. Viac informácií o formách písem môžete nájsť v Otázkach Čo sú to PK súbory, Čo sú to TFM súbory, Čo sú EC fonty?, Čo sú to kódovania? a Použití PostScriptových fontů v TeXu.


Čo sú to PK súbory

PK súbory (od slov packed raster) obsahujú bitmapy písiem. Výstup z METAFONTu (pozri Otázku Jak dostat z METAFONTu to, co chcete) obsahuje GF súbor (generic font). Tento konvertuje program gftopk do PK súboru. Existuje mnoho PK súborov, pretože pre každé písmo potrebujeme jeden. Dokonca pre každú bodovú veľkosť aj zväčšenie (magnification), každý typ každej rodiny písem. Navyše, PK súbor pre jednu tlačiareň nemusí nevyhnutne byť dobrý pre druhú tlačiareň. V takom prípade je treba mať celú množinu PK súborov aj pre túto ďalšiu tlačiareň. Výsledkom sú často komplikované adresárové štruktúry alebo FLI (font library file) súbory pre väčšiu usporiadanosť prístupu.


Čo sú to TFM súbory

TFM je skratka pre TeX font metric, čiže TFM súbor obsahuje informácie o rozmeroch charakterov (písmeniek), o ligatúrach (typografické spojenie dvoch alebo viacerých znakov) a o medziznakových medzerách v danom písme. Pre každé písmo je potrebný jeden TFM súbor, dokonca pre každú bodovú veľkosť. Ale jeden TFM súbor je pre všetky zväčšenia (magnifications), preto je vo všeobecnosti TFM súborov menej ako PK súborov. Dôležité je, že TFM súbory používajú programy TeX, LaTeX, ale nie sú vo všeobecnosti potrebné napríklad pre ovládače tlačiarní.


Virtuální fonty

Virtuální fonty pro TeX jako první implementoval David Fuchs už na začátku jeho historie, ale pro většinu lidí začaly existovat, až když Knuth v roce 1989 změnil formát a napsal několik podpůrných programů (toho času napsal relevatní článek do CTANu - CTANvf-knuth). Použití virtuálních fontů je způsob, jak říci TeXu o něčem složitějším, než je vzájemně jednoznačné mapování znaků. Entity, které se definují ve virtuálním fontu, vypadají jako TeXovské znaky (objevují se s popisem jejich velikosti a souborem metriky fontu), ale dvi procesor je může expandovat do něčeho zcela odlišného. Tato schopnost se dá využít pro přeskládání znaků, pro vytvoření fontu poskládaného z glyfů pocházejících z různých zdrojových souborů, nebo obecně k vytváření různě složitých efektů — virtuální font může obsahovat cokoliv, co je přípustné v dvi souboru. Ve většině praktických případů se virtuální fonty používají k přeskládání postscriptových fontů (viz Soubory metrik TeXovských fontů pro PostScriptové fonty) nebo k vytváření „nepravých“ matematických fontů.

Je důležité si uvědomit, že samotný TeX virtuální fonty nevidí. Pro každý virtuální font, který čte dvi ovladač, existuje odpovídající tfm soubor, který čte TeX. Virtuální fonty jsou normálně vytvořeny v jednom ASCII souboru (vpl, Virtual Property List), který obsahuje oba druhy informace. Program vptovf pak vytvoří binární tfmvf soubory. Nejběžnějším způsobem (v dnešní době) jak vygenerovat vpl soubor, je použít programový balík fontinst, který je detailně popsán společně s diskusí o viz Soubory metrik TeXovských fontů pro PostScriptové fonty. Dalším prostředkem pro ad-hoc vytváření virtuálních fontů je CTANqdtexvpl od Eberharda Mattese.


Příkazy typu \special

TeX poskytuje prostředy k vyjádření věcí, které mohou dělat ovladače zařízení, ale o kterých TeX sám neví nic. Například TeX neví nic o tom, jak zařadit postscriptový obrázek do dokumentu, nebo jak nastavit barvu tisknutého textu. Ale některé ovladače zařízení to umějí.

Takové věci jsou umožněny prostřednictvím příkazů \special. Jediná věc, kterou s takovým příkazem TeX udělá, je, že expanduje jeho argumenty a pak příkaz přepíše do dvi souboru. Ve většině případů jsou k dispozici balíky (často i s ovladačem), které poskytují srozumitelné rozhraní k příkazům \special. Například při vkládání obrázku do textu je nutno vynechat patřičnou mezeru. Anebo změna barvy může být náročnější operace vyžadující znalost triků. LaTeX 2e má standardní balíky pro grafiku a barvu, s jejichž pomocí jsou vkládání souborů, rotace, změny měřítka a barvy prostřednictvím příkazů \special jednoduché.

Argumenty povolené pro příkaz \special jsou závislé na ovladači zařízení. Kromě předchozích příkladů existují příkazy \special pro ovladače z emTeXu (např. dvihplj, dviscr, atd., které kreslí přímky s libovolným sklonem, a příkazy pro ovladač dvitoln03, které umožňují, aby stránka byla vysázena naležato).


Dokumentované LaTeXovské zdroje (.dtx soubory)

LaTeX 2e a spousta podpůrných balíků maker jsou nyní psány metodou viz Co je dokumentované programování, se zdrojovým kódem i dokumentací ve stejném souboru. Autorem tohoto formátu, který je znám jako „doc“, je Frank Mittelbach. Dokumentované zdroje mají podle konvence koncovku .dtx a dokumentace by z nich měla být před používáním odstraněna. Případně lze soubor .dtx zpracovat LaTeXem, čímž vznikne pěkně zformátovaná verze dokumentovaného kódu. Většinou je k dispozici instalační dávka (s příponou .ins), která potřebuje standardní balík LaTeX 2e docstrip. Ten odstraňuje všechny poznámky, jejichž obsahem je právě ta dokumentace. V průběhu instalace se (kromě jiných věcí) odstraňuje ze souborů jejich dokumantace, aby se zvýšila rychlost čtení těchto souborů běžícím LaTeXem. Do jednoho .dtx souboru může být zahrnuto více balíků, s podmíněnými sekcemi a prostředky pro indexy maker atd. Soubory .dtx může psát každý. Jejich formát je popsán v The LaTeX Companion (viz Knihy o TeXu a příbuzná literatura). Zatím neexistují programy podporující psaní .dtx souborů.

Poté, co byly z .dtx souborů vytvořeny .sty nebo .cls (a další) soubory, nejsou už soubory .dtx LaTeXem používány. Nemusí být uchovávány s fungujícím systémem. Nicméně pro mnoho balíků jsou primárním zdrojem dokumentace, takže je někdy dobré si je ponechat.

Zajímavým je také balík docmfp, který rozširuje model balíku doc do METAFONTu a METAPOSTu (viz Otázku Co to je METAFONT a viz Čo je to METAPOST), čímž umožnil distribuci dokumentovaných balíků obsahujících kód pro METAFONT a METAPOST společně s LaTeXovským kódem.


Čo sú to kódovania?

Začneme definíciou dvoch pojmov: znak (character) a glyf (glyph). Znak je abstraktný pojem pre „atóm“ nejakého jazyka alebo iného dialógu (môže to teda byť písmeno abecedy pre jazyk založený na abecede, slabika pre jazyk založený na slabikách alebo ideogram pre jazyk ideogramov). Glyf je značka na obrazovke alebo papieri reprezentujúca znak. Aby bolo možné čítanie daného jazyka, musí byť dohodnutý vzťah medzi glyfom a znakom, takže kým presný tvar glyfu môže byť ovplyvnený mnohými faktormi (možnosti média, štýl, ...), podstata konkrétneho znaku musí byť zachovaná.

Vždy, keď má počítač zobrazovať nejaké znaky, niekto musí zaviesť vzťah medzi množinou čísel a znakmi, ktoré reprezentujú. Toto je podstata kódovania (mapovanie množiny čísel na to, čo majú reprezentovať, a opačne).

TeX pracuje s kódovanými znakmi stále. Znaky na vstupe sú v nejakom kódovaní a TeX sám produkuje kódované znaky vo svojom DVI alebo PDF výstupe. Tieto kódovania môžu mať rôzne vlastnosti.

V čase, keď Knuth prvýkrát implementoval TeX, bol jeho vstupný prúd dosť spurný. Knuth pripravoval dokumenty na termináloch, ktoré produkovali divné znaky, čo malo za následok, že TeX obsahoval opatrenia na preklad vstupného kódovania do niečoho poriadneho. Dnes sa o preklad stlačenia klávesu do kódovania zodpovedajúceho používateľovmu jazyku stará operačný systém. Použité kódovanie je často národný alebo medzinárodný štandard (aj keď mnoho operačných systémov používa „kódové stránky“ definované MicroSoftom). Tieto štandardy a kódové stránky obsahujú znaky, ktoré nie sú vo vstupnom prúde TeXu povolené. S týmito znakmi sa treba nejako vysporiadať. Znak ako „'e“ musí byť TeXom interpretovaný tak, aby aspoň pripomínal spôsob, ako je interpretované „\'e“.

Výstupný prúd TeXu je v inej situácii. Znaky v ňom budú použité na výber glyfov z použitých fontov. Takže kódovanie výstupného prúdu predstavuje kódovanie fontu (aj keď použitý font môže byť virtuálny – viď Otázku Virtuální fonty). Časť výstupného prúdu môže byť priamym prepisom vstupu, ale môže obsahovať aj výsledok použitia príkazov alebo preklad vstupov ako napríklad ligatúry (fi ).

Kódovania fontov sa stali horúcou témou, keď sa objavilo corkovské kódovanie (viď Čo sú EC fonty?), pre možnosť potlačenia príkazov \accent vo výstupnom prúde (a tým zvýšenie kvality rozdeľovania slov, ktoré je prerušené príkazmi \accent  — viď Otázku Ako funguje v TeXu rozdeľovanie slov?). Na využitie znakov s diakritikou vo fontoch je potrebné zaistiť, že pri každom vložení sekvencie príkazov „\'e“ (explicitne alebo implicitne prostredníctvom spomenutého mapovania vstupu) bude použitý znak kódujúci pozíciu glyfu „'e“.

Takže znak s diakritikou vo vstupnom prúde TeXu je preložený do TeXovských príkazov generujúcich niečo vyzerajúce ako vstupný znak. Táto sekvencia TeXovských príkazov je pri vytváraní výstupu následne preložená späť do jediného glyfu s diakritikou. Práve o tieto veci sa starajú LaTeXovské balíky inputenc a fontenc (ak pracujú v tandeme na (väčšine) znakov vo vstupnom kódovaní ISO Latin-1 alebo ISO Latin-2 a T1 kódovania fontu). Na prvý pohľad vyzerá zvláštne nechať prvý balík niečo spraviť a druhý nechať zmeny vrátiť späť. Nie vždy sa to však deje takto. Väčšina kódovaní fontov nesedí so zodpovedajúcim vstupným kódovaním úplne presne a práve tieto dva balíky poskytujú potrebnú mieru symetrie pre LaTeX.


Ako funguje v TeXu rozdeľovanie slov?

Každý vie, čo je rozdeľovanie slov. Vidíme to vo väčšine kníh, ktoré čítame, a (ak sme pozorní) často môžeme zbadať smiešne, nesprávne rozdelenia (istý čas boli britské noviny celkom plodným zdrojom).

Štýly rozdeľovania slov sú regionálne závislé (jeden jazyk môže byť rozdielne rozdeľovaný v rôznych krajinách — napríklad britská a americká angličtina). Dôsledkom toho musí sádzací systém, ktorý nie je pri použití jedného regionálneho nastavenia obmedzený na jeden jazyk, byť schopný z času na čas zmeniť parvidlá pre delenie slov.

TeX má celkom dobrý systém delenia slov (pôvodne vytvorený Frankom Liangom). Aj keď sa mu občas podarí minúť zjavné miesta rozdelenia, málokedy vyberie úplne zlé. Algoritmus kontroluje kandidátov na rozdelenie voči množine rozdeľovacích vzorov. Kandidátmi na rozdelenie musia byť postupnosti písmen (alebo iné jednotlivé znaky, ktoré bude TeX považovať za písmená) — veci ako TeXovské primitivum \accent zabraňujú rozdelovaniu.

Množiny rozdeľovacích vzorov sú zvyčajne odvodené z analýzy zoznamu správnych rozdelení (odvodzovanie, vykonávané pomocou balíku patgen, nie je obvykle participačný šport).

Vzory pre jazyky, s ktorými sa TeXovský systém stretne, môžu byť nahraté pri jeho inštalácii. Pre zmenu množiny jazykov je nutná čiastočná reinštalácia (viď Používání nových jazyků v babelu).

TeX poskytuje dva príkazy na „používateľskej úrovni“ pre kontrolu rozdeľovania slov: \language (vyberá štýl rozdeľovania) a \hyphenation (dáva rozdeľovaciemu stroju explicitné inštrukcie, ktoré majú vyššiu prioritu ako vzory).

Bežný používateľ LaTeXu si nemusí lámať hlavu s \language, kedže je veľmi dobre spravovaný balíkom babel. Použitie \hyphenation je preberané v Otázke Moje slová sa nerozdeľujú.


Čo sú EC fonty?

Font pozostáva z množstva glyfov. Aby sme ich mohli tlačiť, musia byť kódované (viď Otázku Čo sú to kódovania?). Kódovanie sa používa ako index do tabuliek vo fonte. Knuth si z rôznych príčin pre rodinu svojich fontov Computer Modern vybral veľmi zvláštne kódovanie (vybral si rôzne kódovania pre rôzne fonty, takže aplikácia, ktorá ich používa, musí pred výberom konkrétneho glyfu vedieť, ktorý font používa).

S príchodom TeXu verzie 3 sa vytratila väčšina dôvodov ospravedlňujúcich Knuthove kódovanie a na corkovskom stretnutí TUGu bolo definované kódovanie množiny 256 glyfov pre TeXovské texty. Zámer bol, aby kódovanie pokrylo „väčšinu“ európskych jazykov používajúcich latinku (v zmysle zahrnutia všetkých potrebných znakov s diakritikou). Knuthove CMR fonty neobsahovali napríklad veci potrebné pre polštinu (medzi nešťastlivcov patrili ale aj obyvatelia Islandu), corkovské kódovanie ich už obsahovalo. Ani corkovské kódovanie však nepokrývalo všetko (smolu mali minimálne Rumuni, Welšania a Laponci; corkovské kódovanie situáciu severných Laponcov zlepšuje). LaTeX sa na corkovské kódovanie odkazuje ako na T1 kódovanie a poskytuje prostriedky na použitie takto kódovaných fontov (čím sa vyhýba problémom s diakritikou a rozdeľovaním slov — viď Otázku Akcentovaná slova se nedělí).

Jediné METAFONTovské fonty vyhovujúce corkovskému kódovaniu sú EC fonty. Vyzerajú ako CM, aj keď ich metriky sa od metrík CM fontov líšia. Fonty sú považované za „stabilné“ (v rovnakom zmysle ako CM fonty: ich metriky sa zrejme už meniť nebudú). Vážnymi problémami pre bežného používateľa sú ich veľkosti (každý EC font je približne dvojnásobný oproti zodpovedajúcemu CM fontu) a ich počet (je ich oveľa viac než CM fontov). Počet fontov býval demotiváciou pre tvorbu Adobe Type 1 verzií fontov, no mnoho komerčných dodávateľov poskytuje EC alebo EC-ekvivalentné fonty v type 1 alebo TrueType formáte — viď Otázku Komerční implementace TeXu (voľne dostupné verzie sa tiež dajú získať — viď Projekt TeXtrace). Kým sa nevyrobia zodpovedajúce fonty pre matematiku, CM fonty musia zostať zachované, pretože niektoré matematické symboly sú vykresľované z fontov v CM kódovaniach.

EC fonty sú distribuované so sadou „Text Companion“ (TC) fontov poskytujúcich glyfy bežne používané v texte. TC fonty sú kódované podľa LaTeX TS1 kódovania a nie sú považované za stabilné.

Corkovské kódovanie je implementované virtuálnymi fontami viz Použití PostScriptových fontů v TeXu, pre PostScriptové fonty a tiež balíkmi fontov txfonts a pxfonts (viď Otázku Výběr zvětšovatelných obrysových fontů).

CTAN: CTANec.


Co je to TDS?

TDS je zkratka pro TeX Directory Structure, což je standardní způsob organizace TeXových souborů ve vašem sytému. Specifikace TDS je k dispozici v archívu CTAN v adresáři CTANtds.

Moderní distribuce se většinou přizpůsobují TDS, které stanuvuje standardní i lokální hierarchii. TDS si vyhrazuje jméno texmf pro kořenový adresář hierarchie. Soubory nabízené jako součást hierarchie jsou uspořádány do adresářů podle této standardní hierarchie. Umístění kořenového adresáře je závislé na systému – na UNIXech to však standardně bývá jeden z adresářů /usr/local/texmf, /usr/local/share/texmf nebo /opt/texmf nebo jiná podobná cesta, v každém případě jsou však všechny soubory umístěny v podadresáři texmf. Mohou zde však být mnohonásobné lokální hierarchie, v nichž mohou být uloženy další soubory. V extrémním případě může mít TeXová instalace jednu lokální hierarchii, ale každý uživatel může mít také svoji individuální lokální hierarchii. Jejich umístění není pouze závislé na systému, ale na jednotlivých uživatelích. Avšak přesto platí, že všechny soubory jsou umístěny v lokálním adresáři texmf.

TDS je publikováno jako výstup TUG Technical Working Group (viz Technické pracovní skupiny TUGu). Můžete si projít online verzi na http://tug.org/tds/ standardu a získat kopie v různých formátech (včetně zdrojového kódu) na CTANu.


Čo je to Encapsulated PostScript

PostScript sa stal štandardným jazykom výkonných tlačiarní. Kedže PostScript je tiež mocným grafickým programovacím jazykom, je často používaný ako výstup pre kresliace (a iné) balíky.

Keďže je však PostScript silným jazykom, musia byť niektoré pravidlá podvrhnuté, aby mohla byť výstupná kresba vložená v dokumente ako obrázok bez „pretekania“ (teda bez zničenia okolitých prvkov dokumentu, prípadne neschopnosti vykreslenia).

Príloha H PostScript Language Reference Manual (referenčný manuál k PostScriptu; druhé a nasledovné vydania) špecifikuje pravidlá pre použitie PostScriptu pre obrázky týmto spôsobom. Dôležité vlastnosti sú:

  • sú vyžadované určité „štruktúrované komentáre“; dôležité sú komentáre identifikujúce typ súboru a informáciu o minimálnom boxe uzatvárajúcom obrázok (tzv. bounding box);
  • niektoré príkazy sú zakázané — napríklad príkaz showpage zapríčiní zmiznutie obrázku vo väčšine prostredí TeXovského výstupu;
  • je povolená informácia o náhľade (napríklad pre textové procesory, ktoré nevedia samy správne vykresliť PostScript) — táto informácia môže byť v ľubovolnom systémovo špecifickom formáte (každý prehliadací program sa môže rozhodnúť ignorovať ju).
O postscriptovom obrázku splňujúcom tieto pravidlá sa hovorí, že je vo formáte Encapsulated PostScript (zapuzdrený PostScript). TeXovské/LaTeXovské balíky na vkladanie PostScriptu sú štruktúrované na použitie zapuzdreného PostScriptu, čo samozrejme vedie k humorným situáciam, pri ktorých nahnevaní používatelia TeXu/LaTeXu priam bojujú s výstupom kresliaceho softvéru, ktorého autori tieto pravidlá nepoznajú.


Čo je to schéma názvov „Berry“

V starých časoch boli distribúcie TeXu obmedzovaný slabou schopnosťou súborových systémov reprezentovať dlhé názvy. (Súborový systém MSDOS bol pekným strašiakom, no našťastie všetky aktuálne Microsoft systémy dovoľujú pri špecifikácii názvov súborov väčšiu slobodu. Štandard ISO 9660 pre štruktúru CDROMov má bohužiaľ podobné nedostatky, ktoré ale takisto boli modifikované rôznymi rozšíreniami.)

Jednou z oblastí, v ktorých toto pôsobilo problémy, boli názvy súborov Type 1 fontov. Tieto fonty sú distribuované ich dodávateľmi s nezmyselnými krátkymi názvami a existujú prirodzené ambície zmeniť názov na niečo, čo font identifikuje presnejšie. Bohužiaľ, názvy ako „BaskervilleMT“ už sú ďaleko za schopnosťami typických slabších súborových systémov, pridajte špecifikáciu tvaru alebo varainty fontu a ťažkosti sa začnú vymykať kontrole.

Takže vznikla schéma názvov Berry.

Základom schémy je kódovanie rozličných častí špecifikácie súboru extrémne stručným spôsobom, aby mohlo byť vyjadrené dostatočné množstvo názvov fontov dokonca aj v chudobnejšom priestore názvov súborov. Kódovanie používa jedno písmeno pre „zlieváreň“ (foundry) fontu, dve pre názov typu písma, jedno pre duktus atď. Celá schéma je vykreslená v distribúcii balíku fontname, ktorá zahŕňa rozsiahlu dokumentáciu a sadu tabuliek fontov, ktorých názvy boli upravené.
fontname: CTANfontname


CSTUG
(c) 1997, 1998, 2003 Tomáš Hudec, Libor Škarvada
Poslední aktualizace: 13.11.2004 23:15