7. Instrukcja obsługi systemu Web2c
Web2c to zestaw programów związanych z TeX-em, tj. sam TeX, metafont, METAPOST, BibTeX itp.
Oryginalna implementacja wykonana została przez Tomasa Rokickiego, który w roku 1987 stworzył pierwszy
system TeX-to-C, adaptując pliki wymiany (change files) pod Unix-em (pierwotnie były one dziełem
Howarda Trickey’a oraz Pavela Curtisa). W czasie gdy Tim Morgan zajmował się systemem, jego
nazwa została zmieniona na Web-to-C. W 1990 roku prace nad projektem przejął Karl Berry
wraz z dziesiątkami współpracowników, a w roku 1997 pałeczkę przejął Olaf Weber. Ostatnim
rezultatem jest Web2c w wersji 7.3, udostępniony w marcu 1999 roku, stanowiący podstawę
niniejszej płyty CD-ROM TeX Live. Nasza wersja ma nieco uaktualnień i jest identyfikowana jako
7.3.7.
Web2c 7.3 działa na platformach systemowych takich jak Unix, Windows 3.1, 9x/NT/2K/XP, DOS, Amiga
i innych. System wykorzystuje oryginalne źródła TeX-owe autorstwa Donalda Knutha oraz inne programy
napisane w web i tłumaczy je na kod źródłowy C. Ponadto system udostępnia spory zestaw makr i funkcji
stworzonych dla zwiększenia funkcjonalności oryginalnych zasobów oprogramowania związanego z TeX-em.
Podstawowymi składnikami systemu są:
-
bibtex
- tworzenie spisów bibliograficznych;
-
dmp
- konwersja troff do MPX (rysunki METAPOST-owe);
-
dvicopy
- modyfikowanie pliku DVI;
-
dvitomp
- konwersja DVI do MPX (rysunki METAPOST-owe);
-
dvitype
- konwersja DVI na plik tekstowy (ASCII);
-
gftodvi
- zamiana fontu GF na plik DVI;
-
gftopk
- zamiana fontów w formacie GF na font spakowany PK;
-
gftype
- zamiana fontu GF na plik tekstowy (ASCII);
-
makempx
- skład etykiet METAPOST-owych;
-
mf
- generowanie fontów bitmapowych w formacie GF;
-
mft
- skład plików źródłowych metafont-a;
-
mpost
- tworzenie rysunków oraz diagramów technicznych;
-
mpto
- ekstrakcja etykiet METAPOST-owych;
-
newer
- porównywanie czasów modyfikacji;
-
patgen
- tworzenie wzorców przenoszenia wyrazów;
-
pktogf
- zamiana fontów w formacie PK na fonty GF;
-
pktype
- zamiana fontu PK na plik tekstowy (ASCII);
-
pltotf
- konwersja tekstowej listy właściwości do TFM;
-
pooltype
- wyświetlanie web-owych plików pool;
-
tangle
- konwersja web do języka Pascal;
-
tex
- skład tekstu;
-
tftopl
- konwersja TFM do tekstowej listy właściwości (PL);
-
vftovp
- konwersja fontów wirtualnych do wirtualnej listy właściwości (VPL);
-
vptovf
- konwersja wirtualnej listy właściwości do fontów wirtualnych;
-
weave
- konwersja web do TeX-a.
Dokładny opis funkcji oraz składni tych programów zawarty jest w dokumentacji poszczególnych pakietów
samego Web2c. Jednak do optymalnego wykorzystania instalacji Web2c pomocna będzie znajomość kilku
zasad rządzących całą rodziną programów.
Wszystkie programy obsługują standardowe opcje GNU:
-
--help
- podaje podstawowe zasady użytkowania;
-
--verbose
- podaje dokładny raport z działania programu;
-
--version
- podaje informację o wersji, po czym kończy działanie programu.
W celu lokalizacji plików programy Web2c używają biblioteki do przeszukiwania ścieżek zwanej
Kpathsea. Dla optymalizacji przeszukiwania TeX-owego drzewa podkatalogów biblioteka ta używa kombinacji
zmiennych środowiskowych oraz kilku plików konfiguracyjnych. Web2c potrafi obsługiwać jednocześnie
więcej niż jedno drzewo podkatalogów, co jest użyteczne w przypadku, gdy chce się przechowywać
standardową dystrybucję TeX-a jak i lokalne rozszerzenia w dwóch różnych drzewach katalogów.
Aby przyspieszyć poszukiwanie plików, katalog główny każdego drzewa ma swój plik ls-R,
zawierający pozycje określające nazwę i względną ścieżkę dla wszystkich plików zawartych w tym
katalogu.
7.1. Przeszukiwanie ścieżek przez Kpathsea
Opiszemy najpierw ogólny mechanizm przeszukiwania ścieżek przez bibliotekę Kpathsea.
Tym, co nazywamy ścieżką przeszukiwania jest, rozdzielona dwukropkami lub średnikami, lista elementów
ścieżki, które zasadniczo są nazwami podkatalogów. Ścieżka przeszukiwania może pochodzić z (kombinacji)
wielu źródeł. Aby odnaleźć plik „my-file” w ścieżce „.:/dir”, Kpathsea sprawdza każdy element ścieżki
w następującej kolejności: najpierw ./my-file, potem /dir/my-file, zwracając pierwszy odnaleziony (lub
możliwie wszystkie).
Aby optymalnie zaadaptować się do konwencji wszystkich systemów operacyjnych, na systemach
nieunixowych Kpathsea może używać jako separatorów nazw ścieżek znaków innych niż dwukropek („:”)
oraz „ciach” („/”).
W celu sprawdzenia konkretnego elementu p ścieżki, Kpathsea najpierw sprawdza, czy zbudowana
wcześniej baza danych (patrz „Baza nazw plików” na stronie 73) odnosi sie do p, tj. czy baza danych znajduje
się w podkatalogu z prefiksem p. Jeżeli tak, to specyfikacja ścieżki jest porównywana z zawartością
bazy.
Jeśli baza danych nie istnieje, lub nie odnosi się do danego elementu ścieżki, albo nie zawiera elementów
zgodnych, przeszukiwany jest system plików (jeżeli nie zostało to zabronione przez specyfikację
rozpoczynającą się od „!!” oraz jeżeli poszukiwany plik musi istnieć). Kpathsea konstruuje listę
podkatalogów, które korespondują z danym elementem ścieżki, a następnie sprawdza w każdym z nich, czy
nie ma tam poszukiwanego pliku.
Warunek mówiący, że „plik musi istnieć” dotyczy np. plików „.vf” i plików dołączanych TeX-owym
poleceniem \openin. Takiego pliku może nie być (np. cmr10.vf), błędne byłoby zatem poszukiwanie go na
dysku. Jeśli więc zapomnisz o aktualizacji ls-R po instalacji nowego pliku „.vf”, nie zostanie on
odnaleziony. Każdy element ścieżki sprawdzany jest w następującej kolejności: najpierw w bazie danych,
potem na dysku. Jeżeli plik się znajdzie, przeszukiwanie zostanie zatrzymane i zwrócony zostanie
wynik.
Ponieważ najprostszym i najbardziej powszechnym elementem ścieżki jest nazwa katalogu,
Kpathsea korzysta z dodatkowych możliwości w przeszukiwaniu ścieżek: wielowarstwowych
wartości domyślnych, zmiennych środowiskowych, wartości pliku konfiguracyjnego, lokalnych
podkatalogów użytkownika oraz rekursywnego przeszukiwanie podkatalogów. Można więc powiedzieć,
że Kpathsea rozwija element ścieżki, tzn. transformuje wszystkie specyfikacje do podstawowej
nazwy lub nazw katalogów. Jest to opisane w kolejnych akapitach, w kolejności, w jakiej ma to
miejsce.
Trzeba zauważyć, że jeżeli nazwa poszukiwanego pliku jest absolutna lub jawnie względna, tj.
zaczyna się od „/” lub „./” lub „../”, Kpathsea ogranicza się do sprawdzenia, czy ten plik
istnieje.
7.1.1. Źródła ścieżek
Nazwa przeszukiwanej ścieżki może pochodzić z wielu źródeł. Oto kolejność, w jakiej Kpathsea ich
używa:
- Zmienna środowiskowa ustawiana przez użytkownika, np. TEXINPUTS. Zmienne środowiskowe
z dołączoną kropką i nazwą programu zastępują inne, np. jeżeli „latex” jest nazwą
uruchomionego programu, wtedy zamiast TEXINPUTS wykorzystana zostanie zmienna
TEXINPUTS.latex.
- Plik konfiguracyjny konkretnego programu, np. linia „S /a:/b” w pliku config.ps programu
dvips.
- Plik konfiguracyjny Kpathsea texmf.cnf, zawierający taką linię, jak „TEXINPUTS=/c:/d” (patrz
poniżej).
- Wartości domyślne dla uruchamianych programów.
Każdą z tych wartości dla danej ścieżki przeszukiwania można zobaczyć, używając opcji diagnostyki błędów
(patrz „Diagnostyka błędów” na stronie 82).
7.1.2. Pliki konfiguracyjne
Kpathsea szuka ścieżek przeszukiwania i innych definicji w plikach konfiguracyjnych o nazwach
texmf.cnf. Ścieżka przeszukiwania używana do znajdowania tych plików określana jest zmienną
TEXMFCNF (domyślnie taki plik znajduje się w podkatalogu texmf/web2c). Czytane będą wszystkie
pliki texmf.cnf w ścieżce przeszukiwania, a definicje we wcześniejszych plikach zastąpią te
w późniejszych. Tak więc w ścieżce .:$TEXMF, wartości pochodzące z ./texmf.cnf zastąpią te
z $TEXMF/texmf.cnf.
Czytając zamieszczony poniżej opis formatu pliku texmf.cnf proszę także porównać treść załącznika 11,
który zaczyna się na stronie 93, i w którym przedstawiono zawartość pliku texmf.cnf niniejszej
dystrybucji.
- Komentarze zaczynają się od „%”, a kończą na końcu linii.
- Linie puste nie są brane pod uwagę.
- Znak \ na końcu linii działa jako znak kontynuacji, tzn. oznacza, że kolejna linia jest kontynuacją
bieżącej. Spacja na początku kolejnej linii nie jest ignorowana.
- Pozostałe linie mają postać:
zmienna[.program] [=] wartość
gdzie „=” i otaczające spacje są opcjonalne.
- „zmienna ” zawierać może dowolne znaki poza spacją, „=”, lub „.”, najbezpieczniej jest jednak używać
znaków z zakresu „A-Za-z_”.
- Zapis „.program ” ma zastosowanie w wypadku, gdy uruchamiany program nosi nazwę
program lub program.exe. Pozwala to różnym odmianom TeX-a posiadać różne ścieżki
przeszukiwania.
- „wartość ” zawierać może dowolne znaki poza „%” oraz „@”. Nie można używać konstrukcji
„$zmienna.program ” po prawej stronie. Zamiast tego trzeba zastosować dodatkową zmienną.
Średnik „;” użyty w „wartość ” zamieniany jest na „:” jeżeli systemem operacyjnym jest
Unix; umożliwia to posiadanie jednego pliku texmf.cnf dla systemów Unix, MSDOS oraz
Windows.
- Wszystkie definicje czytane są zanim cokolwiek zostanie rozwinięte, tak więc do zmiennych odwoływać
się można przed ich zdefiniowaniem.
Fragment pliku konfiguracyjnego ilustrujący większość powyższych cech pokazany jest poniżej:
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;}//
7.1.3. Rozwijanie ścieżek
Kpathsea rozpoznaje w ścieżkach przeszukiwania pewne specjalne znaki oraz konstrukcje, podobne do tych,
dostępnych w powłokach Unixa. Jako ogólny przykład: złożona ścieżka ~$USER/{foo,bar}//baz rozwija się
do wszystkich podkatalogów pod katalogami foo i bar w katalogu głównym $USER, które zawierają katalog
lub plik baz. Rozwinięcia te opisane są w poniższych podrozdziałach.
7.1.4. Rozwijanie domyślne
Jeżeli ścieżka przeszukiwania największego uprzywilejowania (patrz „Źródła ścieżek” na stronie 68) zawiera
dodatkowy dwukropek (np. na początku, na końcu lub podwójny) to Kpathsea wstawia w tym miejscu
następną zdefiniowaną w hierarchii uprzywilejowania ścieżkę przeszukiwania. Jeżeli ta wstawiona
ścieżka ma dodatkowy dwukropek, dzieje się dalej to samo. Przykładowo, jeżeli ustawić zmienną
środowiskową
>> setenv TEXINPUTS /home/karl:
oraz wartość TEXINPUTS pobraną z texmf.cnf
końcową wartością użytą w przeszukiwaniu będzie:
Ponieważ nieużytecznym byłoby wstawiać wartość domyślną w więcej niż jedno miejsce, Kpathsea
zmienia tylko jeden dodatkowy „:” i pozostawia inne bez zmian; najpierw szuka dwukropków na początku
linii, potem na końcu, a następnie podwójnych.
7.1.5. Rozwijanie nawiasów
Użyteczną cechą jest możliwość rozwijania nawiasów, co oznacza, że np. v{a,b}w rozwija się do vaw:vbw.
Możliwe jest zagnieżdżanie nawiasów. Funkcja ta może być użyta do zaimplementowania różnych hierarchii
TeX-owych przez przypisanie listy nawiasów do $TEXMF. Przykładowo, w pliku texmf.cnf znaleźć można
następującą definicję:
TEXMF = {$HOMETEXMF,$TEXMFLOCAL,!!$VARTEXMF,!!$TEXMFMAIN}
Używając jej można następnie napisać coś w rodzaju
TEXINPUTS = .;$TEXMF/tex//
co oznacza, że po szukaniu w katalogu bieżącym przeszukane będą kolejno tylko $HOMETEXMF/tex,
$TEXMFLOCAL/tex, $VARTEXMF/tex i $TEXMFMAIN/tex (dwie ostatnie ścieżki wyłącznie na podstawie
zawartości pliku ls-R). Jest to wygodny sposób dla uruchamiania dwóch równoległych struktur TeX-owych,
jednej „zamrożonej” (np. na CD-ROM-ie), a drugiej ciągle uaktualnianej nowymi, pojawiającymi się
wersjami. Używając zmiennej $TEXMF we wszystkich definicjach, jest się pewnym, że najpierw przeszukiwane
jest drzewo uaktualnione.
7.1.6. Rozwijanie podkatalogów
Dwa lub więcej kolejnych „ciachów” („/”) w elemencie ścieżki, występujących po nazwie katalogu d,
zastępowany jest przez wszystkie podkatalogi d: najpierw podkatalogi znajdujące się bezpośrednio pod d,
potem te pod powyższymi i tak dalej. Na każdym etapie kolejność, w jakiej przeszukiwane są katalogi, jest
nieokreślona.
Jeśli wyszczególni się człony nazwy pliku po „//”, uwzględnione zostaną tylko te podkatalogi, które
zawierają powyższe człony. Na przykład „/a//b” rozwija się do katalogów /a/1/b, /a/2/b, /a/1/1/b itd.,
ale nie do /a/b/c czy /a/1.
Możliwe jest wielokrotne użycie „//” w ścieżce, jednakże „//” występujące na początku ścieżki nie jest
brane pod uwagę.
7.1.7. Lista znaków specjalnych i ich znaczeń – podsumowanie
Poniższa lista podsumowuje znaczenie znaków specjalnych w plikach konfiguracyjnych.
-
:
- znak rozdzielający w specyfikacji ścieżki; umieszczony na początku lub na końcu ścieżki
zastępuje domyślne rozwinięcie ścieżki;
-
;
- znak rozdzielający dla systemów nieUnix-owych (działa tak jak :);
-
$
- rozwijanie zmiennej;
-
~
- oznacza katalog główny użytkownika;
-
{...}
- rozwijanie nawiasów, np. a{1,2}b zmieni się w a1b:a2b;
-
//
- rozwijanie podkatalogów (może wystąpić gdziekolwiek w ścieżce, poza jej początkiem);
-
%
- początek komentarza;
-
\
- znak kontynuacji (pozwala na przełamanie wiersza z wyrażeniem);
-
!!
- przeszukiwanie tylko bazy danych, a nie dysku.
7.2. Bazy nazw plików
Dla celów przeszukiwania Kpathsea stara się zminimalizować dostęp do dysku. Niemniej jednak,
w przypadku instalacji ze zbyt dużą liczbą katalogów, przeglądanie każdego możliwego katalogu
w poszukiwaniu danego pliku może zabierać sporo czasu (ma to miejsce zwłaszcza, jeżeli przeszukać trzeba
setki katalogów z fontami). Dlatego też Kpathsea może używać zewnętrznego pliku z „bazą danych”
o nazwie ls-R, który to zawiera przypisania plików do katalogów. Unika się w ten sposób potrzeby
wyczerpującego przeszukiwania dysku.
Drugi plik z bazą danych – aliases – pozwala na nadawanie dodatkowych nazw plikom zawartym
w ls-R. Może to być pomocne do adaptacji do DOS-owej konwencji „8.3” nazewnictwa plików w plikach
źródłowych.
7.2.1. Baza nazw plików
Jak to wytłumaczono powyżej, plik zawierający główną bazę nazw plików musi nosić nazwę ls-R.
W katalogu podstawowym każdej hierarchii TeX-owej (domyślnie $TEXMF), którą chcemy włączyć
w mechanizm przeszukiwania, umieszczać można po jednym pliku ls-R; w większości przypadków istnieje
tylko jedna hierarchia. Kpathsea szuka pliku ls-R w ścieżce TEXMFDBS.
Najlepszym sposobem stworzenia i utrzymywania pliku ls-R jest uruchomienie skryptu mktexlsr,
będącego składnikiem dystrybucji. Jest on wywoływany przez różne skrypty typu „mktex...”. W zasadzie
skrypt ten jedynie wykonuje polecenie
cd /your/texmf/root && ls -LAR ./ >ls-R
zakładając, że polecenie ls danego systemu utworzy właściwy format strumienia wyjściowego (GNU ls
działa prawidłowo). Aby mieć pewność, że baza danych jest zawsze aktualna, wygodnie jest przebudowywać ją
regularnie za pomocą demona cron.
Jeśli pliku nie ma w bazie danych, Kpathsea domyślnie przechodzi do przeszukiwania dysku. Jeżeli jednak
dany element ścieżki zaczyna sie od „!!”, w poszukiwaniu tego elementu sprawdzona zostanie jedynie baza
danych, a nigdy dysk.
7.2.2. kpsewhich – program do przeszukiwania ścieżek
Przeszukiwanie ścieżek przez program kpsewhich jest niezależne od jakiejkolwiek aplikacji. Może on być
przydatny jako rodzaj programu find, za pomocą którego lokalizować można pliki w hierarchiach TeX-owych
(jest on używany intensywnie w skryptach „mktex...” tej dystrybucji).
>> kpsewhich opcje... nazwa-pliku...
Parametry wyszczególnione w „opcje ” mogą zaczynać się zarówno od „-” jak i od „--”, i dozwolony jest
każdy jednoznaczny skrót.
Kpathsea traktuje każdy argument nie będący parametrem jako nazwę pliku i zwraca pierwszą odnalezioną
nazwę. Nie ma parametru nakazującego zwracanie wszystkich nazw plików o określonej nazwie (w tym celu
można wykorzystać Unix-owy program „find”).
Ważniejsze parametry opisane są poniżej.
-
--dpi=num
- Ustaw rozdzielczość na „num ”; ma to tylko wpływ na przeszukiwanie fontów „gf” i „pk”.
Dla zgodności z dvips parametr „-D” działa identycznie. Domyślną wartością jest 600.
-
--format=nazwa
-
Ustawienie formatu (typu pliku) przeszukiwania na „nazwa ”. Domyślnie format odgadywany
jest z nazwy pliku. Dla formatów, które nie mają przydzielonego jednoznacznego rozszerzenia,
takich jak niektóre pliki METAPOST-owe, czy pliki konfiguracyjne dvips-a, należy wyszczególnić
nazwę, którą znaleźć można w pierwszej kolumnie tabeli 1. Zawiera ona spis aktualnie
rozpoznawanych nazw, opis, przypisane zmienne środowiskowe4,
oraz możliwe rozszerzenia nazw.
Tabela 1: | Typy plików Kpathsea |
|
Nazwa | Opis | Zmienne | Rozszerzenia
|
|
|
|
|
|
|
|
| | | |
afm |
Metryki
czcionek
Adobe |
AFMFONTS |
.afm |
base |
Bazy
(formaty)
Metafonta |
MFBASES,
TEXMFINI |
.base |
bib |
Źródła
bibliograficzne
BibTeX-a |
BIBINPUTS,
TEXBIB |
.bib |
bst |
Pliki
stylu
BibTeX |
BSTINPUTS |
.bst |
|
fonty
bitmapowe |
GLYPHFONTS,
TEXFONTS |
|
cnf |
Pliki
konfiguracyjne |
TEXMFCNF |
.cnf |
dvips
config |
Pliki
konfiguracyjne
Dvips,
np.
config.ps
i psfonts.map |
TEXCONFIG |
.map |
fmt |
Formaty
TeX-a |
TEXFORMATS,
TEXMFINI |
.fmt,
.efmt,
.efm |
gf |
fonty
GF
(bitmapowe) |
GFFONTS |
.gf |
graphic/figure |
Rysunki
w formacie
EPS |
TEXPICTS,
TEXINPUTS |
.eps,
.epsi |
ist |
Pliki
stylów
makeindex |
TEXINDEXSTYLE,
INDEXSTYLE |
.ist |
ls-R |
Bazy
nazw
plików |
TEXMFDBS |
|
map |
Mapy
fontowe |
TEXFONTMAPS |
.map |
mem |
Bazy
METAPOST-owe |
MPMEMS,
TEXMFINI |
.mem |
mf |
Pliki
źródłowe
metafont-a |
MFINPUTS |
.mf |
mfpool |
pliki
napisów
metafont-a |
MFPOOL,
TEXMFINI |
.pool |
mft |
Pliki
stylu
MFT |
MFTINPUTS |
.mft |
|
fonty
inne |
MISCFONTS |
|
mp |
Pliki
źródłowe
METAPOST-a |
MPINPUTS |
.mp |
mppool |
pliki
napisów
METAPOST-a |
MPPOOL,
TEXMFINI |
.pool |
MetaPost
support |
pliki
pomocnicze
METAPOST-a,
wykorzystywane
przez
DMP |
MPSUPPORT |
|
ocp |
–
skompilowane
pliki
pomocnicze
|
OCPINPUTS |
.ocp |
ofm |
Metryki
fontów
|
OFMFONTS,
TEXFONTS |
.ofm,
.tfm |
opl |
–
listy
właściwości
|
OPLFONTS,
TEXFONTS |
.opl |
otp |
–
pliki
przekodowań
|
OTPINPUTS |
.otp |
ovf |
Fonty
wirtualne
|
OVFFONTS,
TEXFONTS |
.ovf |
ovp |
Wirtualne
listy
właściwości
|
OVPFONTS,
TEXFONTS |
.ovp |
pk |
Fonty
spakowane
(PK) |
programFONTS
(gdzie
program
to
XDVI,
etc.),
PKFONTS,
TEXPKS,
GLYPHFONTS,
TEXFONTS |
.pk |
PostScript
header |
Ładowalne
programy
PostScript-owe |
TEXPSHEADERS,
PSHEADERS |
.pro,
.enc |
tex |
Pliki
źródłowe
dla
TeX-a |
TEXINPUTS |
.tex,
.cls,
.sty,
.clo,
.def |
TeX
system
documentation |
Dokumentacja
systemu
TeX |
TEXDOCS |
|
TeX
system
sources |
Pliki
źródłowe
systemu
TeX |
TEXSOURCES |
|
texpool |
pliki
napisów
TeX-a |
TEXPOOL,
TEXMFINI |
.pool |
tfm |
Metryki
fontów
TeX-owych |
TFMFONTS,
TEXFONTS |
.tfm |
Troff
fonts |
Fonty
dla
Troff,
używane
przez
DMP |
TRFONTS |
|
truetype
fonts |
Fonty
TrueType |
TTFONTS |
.ttf,
.ttc |
type1
fonts |
Fonty
Type
1
(PostScript-owe) |
T1FONTS,
T1INPUTS,
TEXPSHEADERS,
DVIPSHEADERS |
.pfa,
.pfb |
type42
fonts |
Fonty
Type
42
(PostScript-owe) |
T42FONTS |
|
vf |
Fonty
wirtualne |
VFFONTS,
TEXFONTS |
.vf |
web2c
files |
Pomocnicze
pliki
Web2c |
WEB2C |
|
other
text
files |
Pliki
tekstowe
używane
przez
foo |
FOOINPUTS |
|
other
binary
files |
Pliki
binarne
używane
przez
foo |
FOOINPUTS |
|
|
|
|
|
|
-
- Ostatnie dwie pozycje w tabeli 1 to przypadki szczególne, gdzie ścieżki i zmienne środowiskowe
zależą od nazwy programu: nazwa zmiennej budowana jest poprzez zapisanie nazwy programu
wersalikami a następnie dodanie INPUTS.
Zmienne środowiskowe domyślnie ustawiane są w pliku konfiguracyjnym texmf.cnf.
W wypadku gdy chce się unieważnić wartości zmiennych wyszczególnione w tym pliku, można
narzucić ich ustawienie w środowisku, w którym uruchamiane są programy.
Zauważyć trzeba, że parametry „--format” oraz „--path” wzajemnie się wykluczają.
-
--mode=napis
-
Ustaw nazwę trybu na „napis ”; dotyczy to jedynie szukania fontów „gf” oraz „pk”. Brak jest
wartości domyślnej – odnaleziony zostanie dowolny wyszczególniony tryb.
-
--must-exist
-
Zrób wszystko co możliwe aby odnaleźć pliki, włączając w to przede wszystkim przeszukanie
dysku. Domyślnie, w celu zwiększeniu efektywności działania, sprawdzana jest tylko baza ls-R.
-
--path=napis
-
Szukaj w ścieżce „napis ” (rozdzielonej, jak zwykle, dwukropkami), zamiast zgadywać ścieżkę
przeszukiwania z nazwy pliku. „//” i wszystkie zwykłe rozszerzenia są możliwe. Parametry
„--path” oraz „--format” wzajemnie się wykluczają.
-
--progname=nazwa
-
Ustaw nazwę programu na „nazwa ”. Może to mieć wpływ na ścieżkę przeszukiwania poprzez
„.program ” w plikach konfiguracyjnych. Ustawieniem domyślnym jest „kpsewhich”.
-
--show-path=nazwa
-
Pokazuje ścieżkę używaną do poszukiwania plików typu „nazwa ”. Użyte może być zarówno
rozszerzenie („.pk”, „.vf”, etc.), jak i nazwa pliku, tak jak w przypadku parametru
„--format”.
-
--debug=num
-
ustawia parametry wykrywania błędów na „num ”.
7.2.3. Przykłady użycia
Przyjrzyjmy sie teraz jak działa Kpathsea.
>> kpsewhich article.cls
/usr/local/texmf/tex/latex/base/article.cls
Szukamy pliku article.cls. Ponieważ rozszerzenie „.cls” jest jednoznaczne, nie musimy
zaznaczać, że poszukujemy pliku typu „tex” (katalogi plików źródłowych TeX-a). Znajdujemy go
w podkatalogu tex/latex/base pod katalogiem nadrzędnym „TEXMF”. Podobnie wszystkie
poniższe pliki odnajdywane są bezproblemowo dzięki swoim jednoznacznym rozszerzeniom.
>> 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
Ostatni plik to BibTeX-owa baza bibliograficzna dla artykułów TUGBoat.
Pliki czcionek bitmapowych typu .pk używane są przez sterowniki takie jak dvips oraz xdvi. W tym
wypadku nie zostaną zwrócone żadne rezultaty przeszukiwania, ponieważ w systemie brak gotowych
wygenerowanych czcionek „.pk” Computer Modern (wynika to z faktu używania na CD-ROM-ie fontów
PostScript-owych Type1).
>> kpsewhich ecrm1000.pk
/usr/local/texmf/fonts/pk/ljfour/jknappen/ec/ecrm1000.600pk
Dla rozszerzonych plików Computer Modern musieliśmy wygenerować pliki „.pk”, a ponieważ domyślnym
metafont-owym trybem naszej instalacji jest ljfour z podstawową rozdzielczością 600dpi, zwracany jest taki
właśnie rezultat.
>> kpsewhich -dpi=300 ecrm1000.pk
W tym wypadku, kiedy zaznaczamy, że interesujemy się rozdzielczością 300dpi (-dpi=300) widzimy, że
taka czcionka nie jest dostępna w naszej instalacji. Program taki jak dvips czy xdvi zatrzymałby się aby
utworzyć pliki .pk w wymaganej rozdzielczości (używając skryptu mktexpk).
Zwrócimy teraz naszą uwagę na pliki nagłówkowe i konfiguracyjne programu dvips. Najpierw szukamy
pliku PostScript-owego prologu tex.pro, wykorzystywanego dla potrzeb TeX-a. Drugi przykład
pokazuje poszukiwanie pliku konfiguracyjnego config.ps, zaś trzeci – szukanie pliku mapy
czcionek PostScriptowych psfonts.map. Jako, że rozszerzenie „.ps” nie jest jednoznaczne,
musimy zaznaczyć wyraźnie jaki typ jest wymagany dla pliku config.ps („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 przyjrzyjmy się bliżej plikom pomocniczym URW Times PostScript. Ich nazwą w schemacie
nazewnictwa fontów (zaproponowanym przez K. Berry’ego) jest „utm”. Pierwszy plik, którego szukamy to
plik konfiguracyjny, zawierający nazwę pliku z przemapowaniem fontów:
>> kpsewhich --format=”dvips config” config.utm
/usr/local/texmf/dvips/psnfss/config.utm
W pliku tym znajduje się wiersz wskazujący na plik utm.map, który chcemy zlokalizować w następnej kolejności.
>> kpsewhich --format=”dvips config” utm.map
/usr/local/texmf/dvips/psnfss/utm.map
Ten plik z przemapowaniem definiuje nazwy czcionek PostScriptowych Type1 w zestawie URW, zaś jego
zawartość wygląda następująco (pokazane są tylko fragmenty linii):
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
Weźmy na przykład font Times Regular utmr8a.pfb i znajdźmy jego miejsce w drzewie katalogów texmf,
używając przeszukiwania plików z fontami Type1:
>> kpsewhich utmr8a.pfb
/usr/local/texmf/fonts/type1/urw/utm/utmr8a.pfb
Powyższe przykłady pokazują, jak łatwo można znajdować lokalizację danego pliku. Ważne jest to
zwłaszcza, gdy istnieje podejrzenie, że gdzieś zawieruszyła się zła wersja jakiegoś pliku; kpsewhich pokaże
tylko pierwszy napotkany plik.
7.2.4. Diagnostyka błędów
Czasami niezbędne są informacje o tym, jak program radzi sobie z odniesieniami do plików.
Aby dało się to wykonywać w wygodny sposób, Kpathsea oferuje różne poziomy diagnostyki
błędów:
- wywołania stat (testy pliku). Podczas uruchamiania z uaktualnioną bazą danych ls-R nie
powinno to przeważnie dawać żadnego wyniku.
- Zapis odwołań do tablic mieszających (hash tables), takich jak baza ls-R, pliki przemapowań,
pliki konfiguracyjne.
- Operacje otwarcia i zamknięcia pliku.
- Ogólne informacje o ścieżkach dla typów plików szukanych przez Kpathsea; użyteczne dla
znalezienia ścieżki zdefiniowanej dla danego pliku.
- Lista katalogów dla każdego z elementów ścieżki (odnosi się tylko do poszukiwań na dysku).
- Poszukiwania plików.
Wartość -1 ustawia wszystkie powyższe opcje: w praktyce, potrzebując wykryć przyczyny błędów,
prawdopodobnie zawsze używać będziesz tych poziomów.
Podobnie, w przypadku programu dvips, ustawiając kombinację przełączników wykrywania błędów, można
dokładnie śledzić skąd pochodzą pliki. W wypadku gdy plik nie zostanie odnaleziony, widać,
w których katalogach program szukał danego pliku, dzięki czemu można się zorientować w czym
problem.
Ogólnie mówiąc, ponieważ programy odwołują się wewnętrznie do biblioteki Kpathsea, opcje wykrywania
błędów wybrać można przy użyciu zmiennej środowiskowej KPATHSEA_DEBUG, ustawiając ją na opisaną
powyżej wartość (kombinację wartości).
Uwaga dla użytkowników Windows: w systemie tym niełatwo jest przekierować komunikaty programu
do pliku. Do celów diagnostycznych można w tym celu ustawić chwilowo zmienne (w oknie
DOS):
SET KPATHSEA_DEBUG_OUTPUT=err.log
SET KPATHSEA_DEBUG=-1
Rozważmy na przykład mały LaTeX-owy plik źródłowy hello-world.tex, który zawiera co
następuje:
\documentclass{article}
\begin{document}
Hello World!
\end{document}
Ten mały plik używa jedynie fontu cmr10. Przyjrzyjmy się jak dvips przygotowuje plik PostScript-owy
(chcemy użyć wersji Type1 fontu Computer Modern, stąd opcja -Pcms).
>> dvips -d4100 hello-world -Pcms -o
Mamy tu do czynienia jednocześnie z czwartą klasą wykrywania błędów programu dvips (ścieżki
fontowe) oraz z rozwijaniem elementu ścieżki przez Kpathsea (patrz Dvips Reference Manual,
texmf/doc/html/dvips/dvips_toc.html). Komunikaty z uruchomienia programu (lekko zmodyfikowane) znajdują
się na rys. 10.
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
Rysunek 10: | Szukanie pliku konfiguracyjnego |
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
Rysunek 11: | Szukanie pliku prologu |
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]
Rysunek 12: | Szukanie pliku fontu |
|
Program dvips zaczyna pracę od zlokalizowania potrzebnych mu plików. Najpierw znajduje plik texmf.cnf,
który zawiera ścieżki przeszukiwania dla innych plików. Potem znajduje bazę danych ls-R (dla optymalizacji
szukania plików), następnie plik aliases, który umożliwia deklarowanie różnych nazw (np.
krótkie DOS-owe „8.3” i bardziej naturalne dłuższe wersje) dla tych samych plików. Następnie
dvips znajduje podstawowy plik konfiguracyjny config.ps, zanim poszuka pliku z ustawieniami
użytkownika .dvipsrc (który w tym wypadku nie zostaje odnaleziony). W końcu dvips lokalizuje plik
konfiguracyjny config.cms dla fontów PostScript-owych Computer Modern (jest to inicjowane przez
dodanie parametru -Pcms przy uruchamianiu programu). Plik ten zawiera listę plików z „mapami”,
które definiują relacje pomiędzy TeX-owymi, PostScript-owymi i systemowymi nazwami fontów.
>> more /usr/local/texmf/dvips/cms/config.cms
p +ams.map
p +cms.map
p +cmbkm.map
p +amsbkm.map
W ten sposób dvips wyszukuje wszystkie te pliki oraz główny plik z przemapowaniem psfonts.map, który
ładowany jest zawsze (zawiera on deklaracje często używanych fontów PostScript-owych; więcej szczegółów
odnośnie PostScript-owych plików przemapowań fontów można znaleźć w ostatniej części rozdziału
7.2.3).
W tym miejscu dvips zgłasza się użytkownikowi:
This is dvips 5.86 Copyright 1999 Radical Eye Software (www.radicaleye.com)
. . . potem szuka pliku prologu 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 znalezieniu szukanego pliku, dvips podaje datę i czas oraz informuje o generowaniu pliku
hello-world.ps. Ponieważ potrzebuje pliku z fontem cmr10, a jest on zadeklarowany jako dostępny,
wyświetla komunikat:
TeX output 1998.02.26:1204’ -> hello-world.ps
Defining font () cmr10 at 10.0pt
Font cmr10 <CMR10> is resident.
Teraz trwa poszukiwanie pliku cmr10.tfm, który zostaje znaleziony, a następnie dvips powołuje się na kilka
innych plików startowych (nie pokazanych). W końcu przykładowy font Type1 cmr10.pfb zostaje
zlokalizowany i dołączony do pliku wynikowego (patrz ostatnia linia).
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]
7.3. Parametry kontrolujące działanie programów
Inną użyteczną cechą Web2c jest możliwość ustalania
wielu parametrów określających wielkość pamięci za pomocą pliku texmf.cnf. Załącznik 11 zaczynający się
na stronie 93 zawiera listing pliku texmf.cnf. Ustawienia wszystkich parametrów znajdują się w części
trzeciej pliku. Najważniejszymi zmiennymi są:
-
main_memory
- Całkowita wielkość pamięci dostępnej dla TeX-a, metafont-a i METAPOST-a. Dla
każdego nowego ustawienia tej zmiennej należy wykonać nowy format. Przykładowo, możesz
wygenerować „ogromną” wersję formatu TeX i nazwać taki plik hugetex.fmt. Dzięki
standardowemu sposobowi nazywania programów przez Kpathsea, określona wartość zmiennej
main_memory będzie przeczytana z pliku texmf.cnf (por. wartość standardową oraz wartość
„ogromną”, wykorzystywaną przez program hugetex, itd.).
-
extra_mem_bot
- Dodatkowa wielkość pamięci przeznaczona na „duże” struktury danych TeX-a, takie
jak: pudełka, kleje itd.; przydatna, zwłaszcza w przypadku korzystania z pakietu PICTeX.
-
font_mem_size
- Wielkość pamięci przeznaczona przez TeX-a na informacje o fontach. Jest to mniej
więcej ogólna wielkość wczytywanych przez TeX-a plików TFM.
-
hash_extra
- Dodatkowa wielkość pamięci przeznaczona na tablicę zawierającą nazwy instrukcji.
Tablica główna może zmieścić w przybliżeniu 10000 nazw; wielkość ta może okazać się zbyt
mała, np. w wypadku obszernej książki zawierającej liczne odsyłacze. Odpowiednie wiersze
pliku texmf.cnf pokazują, że uruchomienie programów hugetex i pdflatex wymaga dodatkowej
pamięci na 15000 nazw instrukcji.
Oczywiście, powyższa możliwość nie zastąpi prawdziwej, dynamicznej alokacji pamięci. Jest to jednak niezwykle
trudne do zaimplementowania w obecnej wersji TeX-a i dlatego powyższe parametry stanowią praktyczny
kompromis, pozwalając na pewną elastyczność.