8 Používateľská príručka ku systému Web2C

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ú:

bibtex
Spravovanie bibliografií.
dmp
Konverzia troff do MPX (METAPOST obrázky).
dvicopy
Vytvára modifikovanú kópiu DVI súboru.
dvitomp
Konverzia DVI do MPX (METAPOST obrázky).
dvitype
Konverzia DVI do ľudsky-čitateľného textu.
gftodvi
Generovanie fontov pre náhľad.
gftopk
Konverzia gf formátu fontov do pakovaných fontov.
gftype
Konverzia gf formátu fontov do ľudsky čitateľného textu.
makempx
METAPOST značkové sádzanie.
mf
METAFONT – vytváranie rodín fontov.
mft
Preddefinované METAFONTové zdrojové súbory.
mpost
METAPOST – tvorba technických diagramov.
mpto
METAPOST značkový výber.
newer
Porovnanie modifikačných časov.
patgen
Vytvaránie vzorov rozdeľovania slov.
pktogf
Konverzia pakovaných formátov fontov do gf formátov.
pktype
Konverzia pakovaných písiem do ľudsky-čitateľného textu.
pltotf
Konverzia ‘Property list’ do TFM.
pooltype
Zobrazovanie ‘web pool’ súborov.
tangle
Konverzia web súborov do Pascalu.
tex
TeX – sadzba.
tftopl
Konverzia TFM do ‘property list’.
vftovp
Konverzia virtuálneho fontu do virtuálneho ‘property list’.
vptovf
Konverzia virtuálneho ‘property list’ do virtuálneho fontu.
weave
Konverzia web súborov do TeXu.

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:

–help
Vypisuje prehľad základného používania.
–verbose
Vypisuje detailnú správu spracovania.
–version
Vypisuje informáciu o verzii, potom skončí.

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.

8.1 Vyhľadávanie ciest knižnicou Kpathsea

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.

8.1.1 Zdroje cesty

Vyhľadávacia cesta môže byť vytvorená z rôznych zdrojov. Kpathsea ich používa v tomto poradí:

  1. Používateľom nastavená premenná prostredia, napríklad TEXINPUTS. Premenné prostredia s pridanou bodkou a menom programu majú prednosť pred premennými rovnakého mena, ale bez prípony. Napríklad, keď ‘latex’ je meno práve bežiaceho programu, potom premenná TEXINPUTS.latex prepíše TEXINPUTS.
  2. Programovo-špecifický konfiguračný súbor, napríklad riadok ‘S /a:/b’ v súbore config.ps dvips.
  3. Konfiguračný súbor Kpathsea — texmf.cnf, obsahujúci riadok ako ‘TEXINPUTS=/c:/d’ (pozri ďalej).
  4. Predvolené hodnoty počas kompilácie.

Všetky tieto hodnoty vyhľadávacej cesty môžete prezerať použitím debugovacích možností (pozri ‘Debuggovanie’ na strane 88).

8.1.2 Konfiguračné súbory

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:


  TEXMF              = {$TEXMFLOCAL;!!$TEXMFMAIN}
  TEXINPUTS.latex    = .;$TEXMF/tex/{latex;generic;}//
  TEXINPUTS.fontinst = .;$TEXMF/tex//;$TEXMF/fonts/afm//
  % e-TeX related files
  TEXINPUTS.elatex   = .;$TEXMF/{etex;tex}/{latex;generic;}//
  TEXINPUTS.etex     = .;$TEXMF/{etex;tex}/{eplain;plain;generic;}//

8.1.3 Expanzia cesty

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.

8.1.4 Predvolená expanzia

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


>> setenv TEXINPUTS /home/karl:
a hodnotu TEXINPUTS v súbore texmf.cnf

  .:$TEXMF//tex
potom konečná hodnota použitá na vyhľadávanie by bola:

  /home/karl:.:$TEXMF//tex
Keďže by bolo zbytočné vkladať predvolenú hodnotu na viac ako jedno miesto, Kpathsea mení iba nadbytočnú ‘:’ a všetko ostatné ponecháva na mieste: kontroluje najprv začiatočnú ‘:’, potom koncovú ‘:’ a potom zdvojenú ‘:’.

8.1.5 Expanzia zátvoriek

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:


    TEXMF = {$HOMETEXMF,$TEXMFLOCAL,!!$VARTEXMF,!!$TEXMFMAIN}

Keď potom napíšete niečo podobné ako


    TEXINPUTS = .;$TEXMF/tex//

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.

8.1.6 Expanzia podadresárov

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é.

8.1.7 Typy špeciálnych znakov a ich význam: zhrnutie

Nasledujúci zoznam zahŕňa význam zvláštnych znakov v konfiguračných súboroch Kpathsea.

:
Oddeľovač v špecifikácii cesty; na začiatku alebo na konci cesty nahrádza predvolenú expanziu cesty.
;
Oddeľovač v neunixových systémoch (správa sa ako :).
$
Expanzia premennej.
~
Reprezentuje domovský adresár používateľa.
{..}
Expanzia zátvoriek, napr. z a{1,2}b sa stane a1b:a2b.
//
Expanzia podadresárov. (Môže sa vyskytnúť kdekoľvek v ceste, okrem jej začiatku).
%
Začiatok komentáru.
\
Znak pokračovania riadku (umožňuje viacriadkové vstupy).
!!
Povel na hľadanie súboru iba v databáze, neprehľadáva disk.

8.2 Súborové databázy

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.

8.2.1 Súborová databáza

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


cd /your/texmf/root && ls -LAR ./ >ls-R
predpokladajúc, že ls vášho systému vytvára správny výstup (výstup GNU ls je v poriadku). Aby ste sa ubezpečili, že databáza bude vždy aktuálna, najjednoduchšie je pravidelne ju prebudovávať cez cron, takže po zmenách v inštalovaných súboroch —  napríklad pri inštalácii alebo aktualizácii balíka LaTeXu bude súbor ls-R automaticky aktualizovaný.

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.

8.2.2 kpsewhich: Samostatné prehľadávanie cesty

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


>> kpsewhich option... filename...
Voľby špecifikované v ‘option ’ môžu začínať buď ‘-’ alebo ‘’ a každá skratka, ktorá nie je viacznačná, je akceptovaná.

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.

–dpi=num
Nastav rozlíšenie na ‘num ’; toto má vplyv iba na ‘gf’ a ‘pk’ vyhľadávanie. ‘-D’ je synonýmom, kvôli kompatibilite s dvips. Predvolená hodnota je 600.
–format=name
Nastav formát pre vyhľadávanie na ‘name ’. Podľa predvoleného nastavenia je formát uhádnutý z mena súboru. Pre formáty, ktoré nemajú asociovanú jednoznačnú príponu, ako napríklad podporné súbory METAPOSTu a konfiguračné súbory dvips, musíte špecifikovať meno nájdené v prvom stĺpci Tabuľky 3, v ktorej je zoznam rozpoznávaných mien, popis, asociované premenné prostredia a možné prípony súborov.
Tabuľka 3: Súborové typy Kpathsea

Meno

Popis
Premenné
Prípony

afm

Metriky písiem Adobe

AFMFONTS

.afm

base

Výpis pamäti METAFONTu

MFBASES, TEXMFINI

.base

bib

Zdrojové súbory BIBTeXu

BIBINPUTS, TEXBIB

.bib

bst

Súbory štýlov BIBTeX

BSTINPUTS

.bst

cnf

Konfiguračné súbory čítané za behu

TEXMFCNF

.cnf

dvips config

Konfiguračné súbory dvips, napr., config.ps a psfonts.map

TEXCONFIG

.map

fmt

Predkompilované formáty TeXu

TEXFORMATS, TEXMFINI

.fmt, .efmt, .efm

gf

Bitmapa generického fontu

FONTS, GFFONTS, GLYPHFONTS, TEXFONTS

.gf

graphic/figure

Zapúzdrené PostScript obrázky

TEXPICTS, TEXINPUTS

.eps, .epsi

ist

Súbory štýlov makeindex

TEXINDEXSTYLE, INDEXSTYLE

.ist

ls-R

Súborové databázy

TEXMFDBS

map

Mapy písiem

TEXFONTMAPS

.map

mem

Predkompilované formáty METAPOSTu

MPMEMS, TEXMFINI

.mem

mf

Zdrojové súbory METAFONTu

MFINPUTS

.mf

mfpool

Programové súboru k METAFONTu

MFPOOL, TEXMFINI

.pool

mft

Súbor štýlov MFT

MFTINPUTS

.mft

mp

Zdrojové súbory METAPOSTu

MPINPUTS

.mp

mppool

Programové súbory k METAFONT

MPPOOL, TEXMFINI

.pool

METAPOST support

Podporné súbory pre METAPOST, používané DMP (ditroff-to-mpx)

MPSUPPORT

ocp

Skompilované _O_ súbory

OCPINPUTS

.ocp

ofm

Metriky písiem _O_

OFMFONTS, TEXFONTS

.ofm, .tfm

opl

Zoznamy vlastností _O_

OPLFONTS, TEXFONTS

.opl

otp

Translačné procesné _O_ súbory

OTPINPUTS

.otp

ovf

Virtuálne fonty _O_

OVFFONTS, TEXFONTS

.ovf

ovp

Virtuálne zoznamy vlastností _O_

OVPFONTS, TEXFONTS

.ovp

pk

spakované bitmapové fonty

programFONTS (program being XDVI, etc.), PKFONTS, TEXPKS, GLYPHFONTS, TEXFONTS

.pk

PostScript header

Preddefinované PostScriptové headre

TEXPSHEADERS, PSHEADERS

.pro, .enc

tex

Zdrojový súbor TeXu

TEXINPUTS

.tex, .cls, .sty, .clo, .def

TeX system documentation

Súborová dokumentácia pre systém TeX

TEXDOCS

TeX system sources

Zdrojové súbory pre systém TeX

TEXSOURCES

texpool

Programové súbory k TeXu

TEXPOOL, TEXMFINI

.pool

tfm

Metriky písiem TeXu

TFMFONTS, TEXFONTS

.tfm

Troff fonts

Fonty Troff, používané konvertorem DMP

TRFONTS

truetype fonts

Obrysové fonty TrueType

TTFONTS

.ttf, .ttc

type1 fonts

Obrysové fonty Type 1 PostScript

T1FONTS, T1INPUTS, TEXPSHEADERS, DVIPSHEADERS

.pfa, .pfb

type42 fonts

Obrysové fonty Type 42 PostScript

T42FONTS

vf

Virtuálne fonty

VFFONTS, TEXFONTS

.vf

web2c files

Podporné súbory Web2C

WEB2C

other text files

textové súbory používané foo

FOOINPUTS

other binary files

binárne súbory používané foo

FOOINPUTS

Posledné dve položky v Tabuľke 3 sú špeciálne prípady, kedy cesta a premenné prostredia závisia na mene programu: meno premennej sa vytvorí tak, že meno programu prepíšeme veľkými písmenami a pridáme INPUTS.

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ú.

–mode=string

Nastav meno módu na ‘string ’; toto má vplyv iba na ‘gf’ a ‘pk’ vyhľadávanie. Žiadna predvolená hodnota: každý mód bude nájdený.
–must-exist

Urob všetko preto, aby si našiel súbory. Ak je to potrebné, vrátane hľadania na disku. Normálne je v záujme efektívnosti prehľadávaná iba databáza ls-R.
–path=string

Vyhľadávaj podľa cesty ‘string ’ (oddeľovaná dvojbodkou ako zvyčajne) namiesto hádania vyhľadávacej cesty z mena súboru. Podporované sú ‘//’ a všetky bežné expanzie. Voľby ‘–path’ a ‘–format’ sa vzájomne vylučujú.
–progname=name

Nastav meno programu na ‘name ’. Toto nastavenie ovplyvňuje použitie vyhľadávacej cesty cez nastavenie ‘.progname ’ v konfiguračných súboroch. Predvolená hodnota je ‘kpsewhich’.
–show-path=name

Zobrazí cestu použitú na vyhľadávanie súboru s typom ‘name ’. Môže byť použitá buď súborová prípona (‘.pk’, ‘.vf’ a pod.) alebo meno, podobne ako vo voľbe ‘–format’.
–debug=num

Nastaví počet debugovacích možností na ‘num ’.

8.2.3 Príklady použitia

Pozrime sa na Kpathsea v akcii.


>> kpsewhich  article.cls
/usr/local/texmf/tex/latex/base/article.cls
Hľadáme súbor article.cls. Keďže prípona ‘.cls’ je jednoznačná, nemusíme špecifikovať, že hľadáme súbor typu ‘tex’ (zdrojový súbor TeX). Nájdeme ho v podadresári tex/latex/base pod koreňovým adresárom ‘TEXMF’. Podobne, všetky nasledujúce súbory budú nájdené bez problémov vďaka ich jednoznačnej prípone.

>> kpsewhich array.sty
   /usr/local/texmf/tex/latex/tools/array.sty
>> kpsewhich latin1.def
   /usr/local/texmf/tex/latex/base/latin1.def
>> kpsewhich size10.clo
   /usr/local/texmf/tex/latex/base/size10.clo
>> kpsewhich small2e.tex
   /usr/local/texmf/tex/latex/base/small2e.tex
>> kpsewhich tugboat.bib
   /usr/local/texmf/bibtex/bib/beebe/tugboat.bib

Posledným súborom je bibliografická databáza BIBTeXu pre články TUGBoatu.


>> kpsewhich cmr10.pk
Bitmapové súbory fontov typu .pk sa používajú zobrazovacími programami ako dvips a xdvi. V tomto prípade je vrátený prázdny výsledok, keďže neexistujú žiadne vopred generované Computer Modern ‘.pk’ súbory v našom systéme (vzhľadom na to, že používame verzie Type1 na CD e).

>> kpsewhich ecrm1000.pk
   /usr/local/texmf/fonts/pk/ljfour/jknappen/ec/ecrm1000.600pk
Kvôli rozšíreným Computer Modern súborom sme museli vygenerovať ‘.pk’ súbory. Keďže predvolený mód METAFONT v našej inštalácii je ljfour so základným rozlíšením 600 dpi (dots per inch), je vrátená táto inštancia.

>> kpsewhich -dpi=300 ecrm1000.pk
V tomto prípade po špecifikovaní, že nás zaujíma rozlíšenie 300dpi (-dpi=300) vidíme, že taký font nie je v systéme k dispozícii. Program ako dvips alebo xdvi by v tomto prípade vytvorili .pk súbory požadovaného rozlíšenia, použijúc skript mktexpk.

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


>> kpsewhich tex.pro
   /usr/local/texmf/dvips/base/tex.pro
>> kpsewhich --format=‘dvips config’ config.ps
   /usr/local/texmf/config/config.ps
>> kpsewhich psfonts.map
   /usr/local/texmf/dvips/base/psfonts.map

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:


>> kpsewhich --format="dvips config" config.utm
/usr/local/texmf/dvips/psnfss/config.utm
Obsah tohoto súboru je

  p +utm.map
čo odkazuje na súbor utm.map, ktorý ideme ďalej hľadať.

>> kpsewhich --format="dvips config" utm.map
   /usr/local/texmf/dvips/psnfss/utm.map
Tento mapový súbor definuje mená súborov fontov typu Type1 PostScript v kolekcii URW. Jeho obsah vyzerá takto (zobrazili sme iba jeho časť):

  utmb8r  NimbusRomNo9L-Medi    ... <utmb8a.pfb
  utmbi8r NimbusRomNo9L-MediItal... <utmbi8a.pfb
  utmr8r  NimbusRomNo9L-Regu    ... <utmr8a.pfb
  utmri8r NimbusRomNo9L-ReguItal... <utmri8a.pfb
  utmbo8r NimbusRomNo9L-Medi    ... <utmb8a.pfb
  utmro8r NimbusRomNo9L-Regu    ... <utmr8a.pfb
Zoberme napríklad, inštanciu Times Regular utmr8a.pfb a nájdime jej pozíciu v adresárovom strome texmf použitím vyhľadávania fontových súborov Type1:

>> kpsewhich utmr8a.pfb
   /usr/local/texmf/fonts/type1/urw/utm/utmr8a.pfb

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

8.2.4 Debugovanie

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.


    \documentclass{article}
    \begin{document}
    Hello World!
    \end{document}

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.


>> dvips -d4100 hello-world -Pcms -o
V tomto prípade sme skombinovali dvips debugovaciu triedu 4 (cesty k fontom) s expanziou elementu cesty Kpathsea (pozri Referenčný Manuál dvips,texmf/doc/html/dvips/dvips_toc.html). Výstup, trochu preusporiadaný, je zobrazený na obrázku 7.


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
Obrázok 7: Hľadanie konfiguračných súborov
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
Obrázok 8: Hľadanie prológového súboru
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]
Obrázok 9: Hľadanie fontového súboru

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.


>> more /usr/local/texmf/dvips/cms/config.cms
   p +ams.map
   p +cms.map
   p +cmbkm.map
   p +amsbkm.map
dvips preto pokračuje v hľadaní všetkých týchto súborov plus všeobecného mapového súboru psfonts.map, ktorý sa načítava vždy (obsahuje deklarácie bežne používaných PostScriptových fontov; pozri poslednú časť sekcie 8.2.3 kde sa nachádza viac detailov o narábaní s mapovými súbormi PostScriptu).

V tomto bode sa dvips identifikuje používateľovi. . .


This is dvips 5.78 Copyright 1998 Radical Eye Software
  (www.radicaleye.com)

. . . potom pokračuje v hľadaní prológového súboru texc.pro:


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
Po nájdení tohoto súboru, dvips napíše na výstup dátum a čas a informuje nás, že vygeneruje súbor hello-world.ps, že potrebuje súbor s fontom cmr10, ktorý bude deklarovaný ako ,,rezidentný‘‘:

TeX output 1998.02.26:1204’ -> hello-world.ps
Defining font () cmr10 at 10.0pt
Font cmr10 <CMR10> is resident.
Teraz sa rozbehne hľadanie súboru cmr10.tfm, ktorý je nájdený, potom je referencovaných ešte niekoľko prológových súborov (nezobrazené) a nakoniec je nájdená inštancia fontu Type1, cmr10.pfb , ktorá je pridaná do výstupného súboru (pozri posledný riadok).

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]

8.3 Možnosti nastavenia za behu programu

Ď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):

main_memory
Celkový počet dostupných slov v pamäti pre TeX, METAFONT a METAPOST. Musíte vytvoriť nový formátový súbor pre každé odlišné nastavenie. Napríklad môžete vygenerovať ,,obrovskú‘‘ verziu TeXu a zavolať súbor s formátom hugetex.fmt. S použítím štandardnej špecifikácie mena programu používaného knižnicou Kpathsea, konkrétna hodnota premennej main_memory sa načíta zo súboru texmf.cnf (porovnaj všeobecnú hodnotu a ,,obrovskú‘‘ hodnotu, ktorá sa inštancuje cez hugetex, atď.).
extra_mem_bot
Dodatočný priestor pre ,,veľké‘‘ dátové štruktúry TeXu: ,,boxy‘‘, ,,glue‘‘, ,,breakpoint(y)‘‘ a podobne. Je to užitočné hlavne ak používate PI CTeX.
font_mem_size
Počet dostupných slov pre informáciu o fontoch v TeXu. Toto je viac-menej celková veľkosť všetkých prečítaných TFM súborov.
hash_extra
Dodatočný priestor pre hašovaciu tabuľku mien riadiacej sekvencie. Približne 10 000 riadiacich sekvencií môže byť uložených v hlavnej hašovacej tabuľke; ak máte veľkú knihu s mnohými krížovými odkazmi, toto nemusí stačiť. Vidíte, že obidva volania programov hugetex a pdftex požadujú dodatočných 15 000 riadiacich sekvencií (preddefinovaná hodnota hash_extra je nula).

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.