## Web2c

Web2c jest systemem do generowania kompletnego środowiska TeX-owego dla różnorodnych platform, nie tylko Unixowych, ale także Windows. Dostępne oprogramowanie to nie tylko TeX i MetaFont, ale także MetaPost, pdfTeX, eTeX, szereg sterowników (w tym `dvips`, `xdvi` lub `dviout`), łącza TeX-HTML, programy fontowe (szczególnie dotyczące PostScript-u), programy do reorganizacji plików DVI i PS a także wiele innych.

TeX i MetaFont zostały napisane w języku WEB, stworzonym specjalnie do tego celu przez Donalda E. Knutha. WEB pozwala na staranną modularyzację kodu oraz jednocześnie szczegółową dokumentację programu. Przeniesienie kodu napisanego w WEB do Pascala i kompilację programów zapewnia program `tangle`. Z kolei program `weave` umożliwia utworzenie z tych samych źródeł pliku TeX-owego gotowego do składu eleganckiej dokumentacji programu. Dostosowanie kodu pascalowego do konkretnej implementacji języka zależne jest jedynie od starannie przygotowanych tzw. plików wymiany (ang. change files). Zamianę kodu WEB do obecnie powszechnie stosowanego języka C zrealizował w 1987 r. Tomas Rokicki, tworząc system TeX-to-C. W roku 1990 systemem zajął się Karl Berry i wtedy to zmieniono jego nazwę na Web2c. Cały czas udoskonalane i optymalizowane są metody kompilacji, znacznie rozszerzyła się gama programów pomocniczych, przede wszystkim zaś rozszerzyła się liczba platform systemowych, na które w podobny sposób (i coraz łatwiej) można przenieść jednorodne środowisko TeX-owe. Od 1997 r. system jest pielęgnowany przez Olafa Webera. W marcu 1999 r. udostępniony został Web2c w wersji 7.3, która zawierała szereg nowości i udoskonaleń działania programów (m.in. po raz pierwszy programy Web2c pozwalają na swobodne przekodowanie znaków narodowych). Wersja 7.4, która powstała pod koniec 2002 r., to kolejny krok w optymalizacji oprogramowania (zmiany w bibliotece kpathsea, znaczne zmiany w pdftex itp.). Wersja 7.5 z 2004 r. wprowadza m.in. obsługę nazw plików zawierających spacje, rozszerzenie encTeX, uporządkowanie współpracy z różnymi terminalami, obsługę zmienionego układu TDS i wiele innych zmian.

Obecnie implementacje oparte na Web2c działają na wielu platformach Unix (w tym oczywiście Linux), Windows, DOS, Amiga i innych. Wykorzystując jednorodną strukturę katalogów, zgodną z TDS (TeX Directory Structure) pozwalają na współdzielenie zasobów przez różne systemy.

Programy wchodzące w skład Web2c wykorzystują zaawansowane metody wyszukiwania w rozległej instalacji plików wymaganych przez programy. Metody te udostępnia wspólnie użytkowana biblioteka `kpathsea` (dokumentacja w `kpathsea.html`). Opis systemu Web2c zawiera dokumentacja zawarta w `web2c.html`.

## Składniki systemu Web2c

System Web2c zawiera następujące podstawowe programy:

- `bibtex` -- program do tworzenia spisów bibliograficznych;
- `dmp` -- konwersja `troff` do `.mpx` (postaci MetaPost-owej niskiego poziomu);
- `dvicopy` -- program modyfikujący pliki DVI;
- `dvitomp` -- konwersja DVI do postaci MetaPost-owej niskiego poziomu (pliku `.mpx`);
- `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 materiału tekstowego zawartego w pliku MetaPost-owym i jego konwersja do poleceń niskiego poziomu umieszczanych w pliku `.mpx`; program uruchamia kolejno `mpto`, `tex` i `dvitomp`;
- `mf` -- MetaFont, system do generowania fontów bitmapowych w formacie GF;
- `mft` -- skład plików źródłowych MetaFont-a;
- `mpost` -- MetaPost, program do tworzenia rysunków oraz diagramów technicznych w formacie PostScript, oparty na języku podobnym do wykorzystywanego przez MetaFont;
- `mpto` -- ekstrakcja materiału tekstowego zawartego w pliku MetaPost-owym i konwersja do pliku TeX-owego (domyślnie) lub Troff;
- `newer` -- pomocniczy program do porównywania czasów modyfikacji plików;
- `patgen` -- program do tworzenia wzorców przenoszenia wyrazów (hyphenation patterns);
- `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 (metryki fontu TeX-owego);
- `pooltype` -- wyświetlanie WEB-owych plików `pool` z numeracją łańcuchów znakowych;
- `tangle` -- konwersja kodu WEB do języka Pascal;
- `tex` -- program do składu 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 (`.vf`);
- `weave` -- konwersja WEB do postaci TeX-owej gotowej do składu.

Instalacje oparte na Web2c zawierają ponadto programy:

- `etex` -- eTeX czyli TeX rozszerzony o szereg poleceń pierwotnych;
- `pdftex` -- pdfTeX, rozszerzenie TeX-a pozwalające tworzyć bezpośrednio pliki w formacie `PDF`, łączy też rozszerzenia `etex`;
- XeTeX -- intensywnie rozwijana wersja, pracująca w Unikodzie i korzystająca z fontów systemowych, także OpenType; pozwala na skład w wielu językach;
- `dvips` -- sterownik DVI do PostScript;
- `dvilj` -- sterownik DVI dla drukarek zgodnych ze standardem Hewlett-Packard; dla poszczególnych modeli drukarek istnieje kilka odmian programu np. `dvilj2`, `dvilj4`, `dvilj6`;
- `xdvi` -- sterownik ekranowy (wyświetlający pliki DVI) dla X Window (systemy Unix);
- `dviout` -- sterownik ekranowy dla Windows;

Zarówno `xdvi`, jak i `dviout` potrafią obecnie wyświetlać włączane to tekstu elementy graficzne w formacie EPS, jak i obsługiwać fonty w formacie Type1.

Wymienione wyżej programy wykorzystują wspólne biblioteki i korzystają ze wspólnych plików konfiguracyjnych. Całość oprogramowania tworzy zatem jednorodne środowisko. Ponadto dostępne są skrypty bądź programy, m.in.:

- `texconfig` -- skrypt do konfiguracji całego środowiska (dostępny jedynie dla systemów Unix/Linux);
- `fmtutil` -- skrypt do generowania formatów;
- `updmap` -- skrypt aktualizujący mapy fontowe dla programów `dvips`, `pdftex` oraz `dvipdfm`;
- `mktexmf` -- skrypt tworzy, w miarę możliwości, plik MetaFont-owy dla nowego fontu (np. cmr11), dla którego istnieje plik źródłowy o zbliżonym stopniu pisma;
- `mktextfm` -- skrypt uruchamia program `mf` i generuje potrzebny plik TFM;
- `mktexpk` -- skrypt generuje potrzebny font bitmapowy w formacie PK;
- `mktexnam` -- skrypt wyświetla nazwy i położenie plików MF, TFM i PK dla danego fontu;
- `mktexupd` -- skrypt uzupełnia bazę danych instalacji (`ls-R`) o nazwę katalogu i nowo powstałego pliku;
- `mktexlsr` (`texhash`) -- skrypt tworzy lub aktualizuje bazy danych instalacji (pliki `ls-R`);
- `gsftopk` -- skrypt służący do konwersji fontów PostScript-owych (ostatnio także fontów TTF) na pliki PK, zwykle uruchamiany przez sterownik `Xdvi` lub `dviout`; skrypt steruje wywołaniem programu GhostScript, który dokonuje rasteryzacji fontów obwiedniowych;
- `kpsewhich` -- program do przeszukiwania ścieżek w instalacji TeX-owej, używany intensywnie przez skrypty ,,`mktex...`''; program może być także wykorzystany do diagnostyki problemów.

Większość powyższych skryptów uruchamiana jest automatycznie. Wymienione dotychczas programy i skrypty mają wspólną cechę, polegającą na wyświetlaniu tekstu pomocniczego po uruchomieniu ich z parametrem `--help`. Wszystkie omówione powyżej programy i skrypty mają dokumentację dostępną w `man`, `info` a także w formacie HTML.

Stanisław Wawrykiewicz (`staw at gust.org.pl`); modyfikacja: 15.05.2014