Web2C obsahuje množinu TeX-príbuzných programov, t.j. samotný TeX, METAFONT, METAPOST, BIBTeX, atď. Originálna implementácia pochádza od Tomáša Rokického, ktorý v roku 1987 vyvinul prvý TeX-to-C systém adaptujúci zmenové súbory systému pre Unix, ktoré boli v prvom rade prácou Howarda Trickeya a Pavla Curtisa. Tim Morgan sa stal spravovateľom systému a počas jeho obdobia sa meno zmenilo na Web-to-C. V roku 1990 Karl Berry prebral túto prácu, asistoval pri tuctoch dodatočných príspevkov a v roku 1997 podal taktovku Olafovi Weberovi.
Web2C systém beží pod Unixom, 32-bitovými Windows, MacOSX a inými operačnými systémami. Používa originálne TeX zdrojové súbory od Knutha a ostatné základné programy napísané vo web, ktoré sú preložené do C zdrojového kódu. Navyše, systém ponúka veľkú množinu makier a funkcií vyvinutých na rozšírenie originálneho TeX software. Základné komponenty rodiny TeXu sú:
Presné funkcie a syntax týchto programov sú popísané v dokumentáciách jednotlivých balíkov alebo dokumentácii Web2C. Napriek tomu, poznanie niekoľkých princípov, ktoré platia pre celý balík programov vám pomôže vyťažiť čo najviac z vašej Web2C inštalácie.
Všetky programy dodržiavajú štandardné GNU voľby:
Na vyhľadávanie súborov používajú Web2C programy prehľadávaciu knižnicu Kpathsea. Táto knižnica používa kombináciu premenných prostredia a niekoľkých konfiguračných súborov na optimalizáciu prehľadávania adresárového stromu TeXu. Web2C zvládne prácu s viacerými adresárovými stromami súčasne, čo je užitočné, keď niekto chce udržiavať štandardnú distribúciu TeXu a jeho lokálne rozšírenia v dvoch rozličných stromoch. Na urýchlenie vyhľadávania súborov, koreň každého stromu obsahuje súbor ls-R so záznamom obsahujúcim meno a relatívnu cestu ku všetkým súborom umiestneným pod týmto koreňom.
Najprv popíšeme všeobecný mechanizmus vyhľadávania ciest knižnicou Kpathsea.
Vyhľadávacou cestou nazveme zoznam elementov cesty, ktorými sú v prvom rade mená adresárov oddelené dvojbodkou alebo bodkočiarkou. Vyhľadávacia cesta môže pochádzať z viacerých zdrojov. Pri vyhľadávaní súboru ‘my-file’ podľa cesty ‘.:/dir’, Kpathsea skontroluje každý element cesty: najprv ./my-file, potom /dir/my-file, vracajúc prvý zodpovedajúci nájdený prvok (alebo prípadne všetky zodpovedajúce prvky).
Aby bolo dosiahnuté prispôsobenie sa konvenciám čo možno najviac operačných systémov, na neunixových systémoch Kpathsea môže používať oddeľovače názvov súborov rôzne od dvojbodky (‘:’) a lomítka (‘/’).
Pri kontrolovaní určitého elementu cesty p Kpathsea najprv overí, či sa na naň nevzťahuje vopred vybudovaná databáza (pozri ‘Databáza názvov súborov’ na strane 78), t.j., či sa databáza nachádza v adresári, ktorý je prefixom p. Ak tomu tak je, špecifikácia cesty sa porovnáva s obsahom databázy.
Ak databáza neexistuje, alebo sa nevzťahuje na tento element cesty, alebo sa v nej hľadaný súbor nevyskytuje, celý systém súborov je prehľadaný (pokiaľ to nebolo zakázané špecifikáciou začínajúcou ‘!!’ a hľadaný súbor musí existovať). Kpathsea zostrojí zoznam adresárov zodpovedajúcich tomuto elementu cesty a potom skontroluje každý z nich, či sa v ňom nenachádza hľadaný súbor.
Podmienka ‘súbor musí existovať’ sa týka napr. súborov typu ‘.vf’ a vstupných súborov čítaných príkazom TeXu \openin. Takéto súbory nemusia existovať (napr. cmr10.vf) a nebolo by dobré prehľadávať kvôli nim celý disk. Preto, keď zabudnete aktualizovať ls-R pri inštalácii nového ‘.vf’ súboru, súbor nebude nikdy nájdený. Každý element cesty sa prekontroluje: najprv databáza, potom disk. Keď je súbor nájdený, vyhľadávanie sa zastaví a výsledok je vrátený.
Hoci najjednoduchší a najbežnejší element cesty je meno adresáru, Kpathsea podporuje aj iné zdroje vo vyhľadávacích cestách: dedičné (layered) štandardné hodnoty, mená premenných prostredia, hodnoty súboru config, domáce adresáre používateľov a rekurzívne prehľadávanie podadresárov. Preto, keď hovoríme, že Kpathsea rozbalí element cesty, znamená to, že pretransformuje všetky špecifikácie do základného mena alebo mien adresárov. Toto je popísané v nasledujúcich odsekoch.
Všimnite si, že keď je meno hľadaného súboru vyjadrené absolútne alebo explicitne relatívne, t.j. začína ‘/’ alebo ‘./’ alebo ‘../’, Kpathsea jednoducho skontroluje, či taký súbor existuje.
Vyhľadávacia cesta môže byť vytvorená z rôznych zdrojov. Kpathsea ich používa v tomto poradí:
Všetky tieto hodnoty vyhľadávacej cesty môžete prezerať použitím debugovacích možností (pozri ‘Debuggovanie’ na strane 88).
Kpathsea číta počas behu z konfiguračných súborov s menom texmf.cnf vyhľadávaciu cestu a ďalšie definície. Vyhľadávacia cesta používaná na hľadanie týchto súborov sa volá TEXMFCNF (v predvolenom nastavení sa tento súbor nachádza v podadresári texmf/web2c). Všetky súbory texmf.cnf vo vyhľadávacej ceste budú prečítané a definície v posledných načítaných súborov majú prednosť pred definíciami čítanými predtým. Preto pri vyhľadávacej ceste .:$TEXMF, hodnoty z ./texmf.cnf prepíšu hodnoty z $TEXMF/texmf.cnf.
Ukážkový úsek konfiguračného súboru, ilustrujúci väčšinu týchto bodov nasleduje pod textom:
Kpathsea rozpoznáva určité zvláštne znaky a konštrukcie vo vyhľadávacích cestách podobné tým, čo existujú v prostrediach unixovských interprétov príkazového riadku (shells). Ako všeobecný príklad uvedieme komplexnú cestu ~$USER/{foo,bar}//baz, ktorá sa expanduje do všetkých podadresárov pod adresármi foo a bar v domovskom adresári používateľa $USER, ktorý obsahuje adresár alebo súbor baz. Tieto konštrukcie sú popísané v ďalších odsekoch.
Ak vyhľadávacia cesta s najväčšou prioritou (pozri ‘Zdroje cesty’ na strane 72) obsahuje dvojbodku navyše (t.j. začiatočnú, koncovú, alebo zdvojenú), Kpathsea vloží na toto miesto vyhľadávaciu cestu s druhou najvyššou prioritou, ktorá je definovaná. Ak táto vložená cesta obsahuje dvojbodku navyše, to isté sa stane s ďalšou najvýznamnejšou cestou. Keby sme mali napríklad dané takéto nastavenie premennej prostredia
Užitočná črta je expanzia zátvoriek, ktorá funguje tak, že napríklad v{a,b}w sa expanduje na vaw:vbw. Vnáranie je povolené. Toto môže byť použité na implementáciu viacnásobných TeXovských hierarchií, priradením hodnoty $TEXMF s použitím zátvoriek. Napríklad v súbore texmf.cnf nájdete nasledujúcu definíciu:
Keď potom napíšete niečo podobné ako
bude to znamenať, že po hľadaní v aktuálnom adresári sa najprv prehľadá celý strom $HOMETEXMF/tex, $TEXMFLOCAL/tex, $VARTEXMF/tex a $TEXMFMAIN/tex (posledné dva s použitím databázových súborov ls-R). Je to vhodný spôsob ako spúšťať dve paralelné TeX štruktúry, jednu nemennú (napríklad na CD e) a druhú neustále aktualizovanú novými verziami, akonáhle sú dostupné. Použitím premennej $TEXMF vo všetkých definíciách máme istotu, že sa vždy ako prvý prehľadá aktuálny strom.
Dva alebo viac za sebou nasledujúcich znakov ‘/’ v elemente cesty nasledujúcom za adresárom d je nahradený všetkými podadresármi d: najprv podadresármi priamo pod d, potom podadresármi pod nimi, atď. Poradie, v akom sú prehľadávané podadresáre na každej úrovni nie je špecifikované.
Ak po ‘//’, špecifikujete akékoľvek komponenty mena súboru, pridajú sa iba podadresáre so zodpovedajúcimi komponentami. Napríklad, ‘/a//b’ sa expanduje do adresárov /a/1/b, /a/2/b, /a/1/1/b, atď, ale nie do /a/b/c alebo /a/1.
Viacnásobné ‘//’ konštrukcie v ceste sú možné, ale ‘//’ na začiatku cesty je ignorované.
Nasledujúci zoznam zahŕňa význam zvláštnych znakov v konfiguračných súboroch Kpathsea.
Kpathsea minimalizuje prístupy na disk pri vyhľadávaní. Predsa však pri inštaláciách s dostatočným množstvom adresárov hľadanie súboru v každom možnom adresári môže zabrať prehnane veľa času (toto platí zvlášť vtedy, keď musia byť prejdené stovky adresárov s fontami). Kpathsea preto používa externe vytvorený ‘databázový’ súbor nazývaný ls-R, ktorý mapuje súbory v adresároch a pomáha tak vyhnúť sa vyčerpávajúcemu prehľadávaniu disku.
Skratky mien (aliases) v druhom databázovom súbore vám umožňujú dať dodatočné mená súborom nachádzajúcim sa v zozname ls-R. Toto môže byť užitočné pri prispôsobovaní sa 8.3-súborovým konvenciám DOSu v zdrojových súboroch.
Ako bolo vysvetlené hore, meno hlavnej databázy súborov musí byť ls-R. Môžete umiestniť jednu do koreňa každej hierarchie TeXu vo vašej inštalácii ktorú chcete, aby bola prehľadávaná (predvolená je $TEXMF); väčšinou sa jedná iba o jednu hierarchiu. Kpathsea hľadá ls-R súbory podľa cesty v TEXMFDBS.
Odporúčaný spôsob ako vytvoriť a udržiavať ‘ls-R’ je spustiť skript mktexlsr zahrnutý v distribúcii. Je vyvolávaný rôznymi ‘mktex’. . . skriptami. Tento skript v princípe iba spúšťa príkaz
Ak súbor nie je v databáze nájdený, podľa predvoleného nastavenia Kpathsea začne vyhľadávať na disku. Ak však určitý element cesty začína ‘!!’, bude prehľadávaná iba databáza, nikdy nie disk.
Program kpsewhich vykonáva prehľadávanie cesty nezávislé od každej aplikácie. Môže byť užitočný ako vyhľadávací find program na nájdenie súborov v hierarchiách TeXu (veľmi sa využíva v distribuovaných ‘mktex’. . . skriptoch).
Kpathsea považuje každý element vstupného riadku, ktorý nie je argumentom nejakej voľby, za meno súboru, ktorý hľadá a vracia prvý súbor, ktorý nájde. Neexistuje voľba umožňujúca vrátiť všetky súbory s určitým menom (na to môžete použiť nástroj Unixu ‘find’).
Ďalšie dôležitejšie voľby sú popísané nižšie.
Premenné prostredia sa obyčajne nastavujú z konfiguračného súboru texmf.cnf. Explicitne ich nastavujte pri spúšťaní jedine vtedy, keď chcete prepísať jednu alebo viac hodnôt špecifikovaných v tomto súbore.
Všimnite si, že voľby ‘–format’ a ‘–path’ sa vzájomne vylučujú.
Pozrime sa na Kpathsea v akcii.
Posledným súborom je bibliografická databáza BIBTeXu pre články TUGBoatu.
Teraz obráťme našu pozornosť na hlavičkové a konfiguračné súbory dvips. Najprv sa pozrieme na jeden z bežne používaných súborov, všeobecný prológový tex.pro na podporu TeXu, potom pohľadáme konfiguračný súbor (config.ps) a PostScriptovú mapu fontov psfonts.map. Keďže prípona ‘.ps’ je nejednoznačná, musíme pre súbor config.psšpecifikovať explicitne, o ktorý typ sa zaujímame (‘dvips config’).
Teraz sa pozrieme na podporné súbory URW Times PostScript. V Berryho schéme meno pre tieto pomenovania fontov je ,,utm‘‘. Prvý súbor, ktorý hľadáme, je konfiguračný súbor, ktorý obsahuje meno mapového súboru:
Z týchto príkladov by malo byť zrejmé, ako ľahko môžete nájsť umiestnenie daného súboru. Toto je zvlášť dôležité keď máte podozrenie, že ste narazili na zlú verziu súboru, pretože kpsewhich emuluje vyhľadávanie úplne rovnakým spôsobom ako skutočný program (TeX, dvips a pod).
Niekedy je potrebné vyšetriť ako program rozpoznáva referencie na súbory. Aby toto bolo možné vhodne uskutočniť, Kpathsea ponúka rôzne stupne debugovania:
Hodnota -1 nastaví všetky horeuvedené voľby, v praxi pravdepodobne vždy použijete tieto úrovne ak budete potrebovať akékoľvek debugovanie.
Podobne s programom dvips nastavením kombinácie debugovacích prepínačov môžete detailne sledovať, odkiaľ sa berú používané súbory. (Aktuálny popis parametrov je možné nájsť v ../texmf/doc/html/dvips/dvips_2.html.) Alternatívne, keď súbor nie je nájdený, debugovacia cesta ukazuje, v ktorých adresároch program daný súbor hľadal, čo môže naznačovať, v čom sa asi vyskytol problém.
Všeobecne povedané, keďže väčšina programov volá knižnicu Kpathsea vnútorne, debugovacie voľby je možné nastaviť pomocou premennej prostredia KPATHSEA_DEBUG na potrebnú kombináciu, ako je to popísané v horeuvedenom zozname.
(Poznámka pre používateľov Windows: nie je jednoduché presmerovať všetky hlášky
v tomto systéme do súboru. Pre diagnostikovacie účely môžte dočasne priradiť
SET KPATHSEA_DEBUG_OUTPUT=err.log).
Uvažujme ako príklad malý zdrojový súbor LaTeXu, hello-world.tex, ktorý obsahuje nasledujúci vstup.
Tento malý súbor používa iba font cmr10, takže pozrime sa, ako dvips pripravuje PostScriptový súbor (chceme použiť Type1 verziu písiem Computer Modern, preto je nastavená voľba -Pcms4.
debug:start search(file=texmf.cnf, must_exist=1, find_all=1,
path=.:/usr/local/bin/texlive:/usr/local/bin: /usr/local/bin/texmf/web2c:/usr/local: /usr/local/texmf/web2c:/.:/./teTeX/TeX/texmf/web2c:). kdebug:start search(file=ls-R, must_exist=1, find_all=1, path=~/tex:/usr/local/texmf). kdebug:search(ls-R) =>/usr/local/texmf/ls-R kdebug:start search(file=aliases, must_exist=1, find_all=1, path=~/tex:/usr/local/texmf). kdebug:search(aliases) => /usr/local/texmf/aliases kdebug:start search(file=config.ps, must_exist=0, find_all=0, path=.:~/tex:!!/usr/local/texmf/dvips//). kdebug:search(config.ps) => /usr/local/texmf/dvips/config/config.ps kdebug:start search(file=/root/.dvipsrc, must_exist=0, find_all=0, path=.:~/tex:!!/usr/local/texmf/dvips//). search(file=/home/goossens/.dvipsrc, must_exist=1, find_all=0, path=.:~/tex/dvips//:!!/usr/local/texmf/dvips//). kdebug:search($HOME/.dvipsrc) => kdebug:start search(file=config.cms, must_exist=0, find_all=0, path=.:~/tex/dvips//:!!/usr/local/texmf/dvips//). kdebug:search(config.cms) =>/usr/local/texmf/dvips/cms/config.cms
kdebug:start search(file=texc.pro, must_exist=0, find_all=0,
path=.:~/tex/dvips//:!!/usr/local/texmf/dvips//: ~/tex/fonts/type1//:!!/usr/local/texmf/fonts/type1//). kdebug:search(texc.pro) => /usr/local/texmf/dvips/base/texc.pro
kdebug:start search(file=cmr10.tfm, must_exist=1, find_all=0,
path=.:~/tex/fonts/tfm//:!!/usr/local/texmf/fonts/tfm//: /var/tex/fonts/tfm//). kdebug:search(cmr10.tfm) => /usr/local/texmf/fonts/tfm/public/cm/cmr10.tfm kdebug:start search(file=texps.pro, must_exist=0, find_all=0, ... <texps.pro> kdebug:start search(file=cmr10.pfb, must_exist=0, find_all=0, path=.:~/tex/dvips//:!!/usr/local/texmf/dvips//: ~/tex/fonts/type1//:!!/usr/local/texmf/fonts/type1//). kdebug:search(cmr10.pfb) => /usr/local/texmf/fonts/type1/public/cm/cmr10.pfb <cmr10.pfb>[1]
|
dvips začne lokáciou svojich pracovných súborov. Najprv je nájdený texmf.cnf ktorý obsahuje definície vyhľadávacích ciest ostatných súborov, potom databáza súborov ls-R (na optimalizáciu vyhľadávania súborov) a skratky mien súborov (aliases), čo robí možným deklarovať viacero mien (napr. krátke meno typu ‘8.3’ ako v DOSe a viac prirodzenú dlhšiu verziu) pre ten istý súbor. Potom dvips pokračuje v hľadaní všeobecného konfiguračného súboru config.ps skôr, ako začne hľadať súbor nastavení .dvipsrc (ktorý, v tomto prípade, nie je nájdený). Nakoniec, dvips nájde konfiguračný súbor pre font Computer Modern PostScript, config.cms (toto bolo iniciované voľbou-Pcms v príkaze dvips). Tento súbor obsahuje zoznam ,,mapových‘‘ súborov, ktoré definujú vzťah medzi menami fontov v TeXu, PostScripte a systéme súborov.
V tomto bode sa dvips identifikuje používateľovi. . .
. . . potom pokračuje v hľadaní prológového súboru texc.pro:
Ďalšou z pekných čŕt distribúcie Web2C je možnosť kontroly množstva pamäťových parametrov (najmä veľkosti polí) za behu prostredníctvom súboru texmf.cnf, ktorý číta knižnica Kpathsea. Nastavenia všetkých parametrov môžete nájsť v časti 3 tohto súboru. Najdôležitejšie riadiace premenné (čísla riadkov sa vzťahujú na súbor texmf.cnf):
Samozrejme, tento prvok nemôže nahradiť naozajstné dynamické polia a alokácie pamäte, ale keďže tieto sa veľmi ťažko implementujú v súčasnej verzii TeXu, tieto parametre počas behu programu poskytujú praktický kompromis, ktorý dovoľuje aspoň nejakú flexibilitu.