Ośmiobitowe wprowadzanie polskich znaków w TeXu (w implementacjach opartych na web2c)

Istnieje kilka sposobów kodowania polskich znaków w dokumencie TeXowym. Najbardziej komfortowa jest notacja ,,naturalna'' ośmiobitowa, tzn. zastosowanie jakiejś strony kodowej (np. cp852, cp1250, ISO 8859-2 (Latin 2), itp.). Są dwa zasadnicze sposoby nauczenia TeXa przetwarzania tak zapisanego tekstu. Jeden polega na zastosowaniu znaków aktywnych. Drugi wymaga wsparcia ze strony samej implementacji TeXa polegającego na przekodowywaniu znaków z wejścia na odpowiednie pozycje znaków w stosowanych fontach. Każdy z wymienionych sposobów ma swoje wady i zalety.

Przekodowywanie znaków narodowych przez samego TeXa jest dostępne od dawna w emTeXu i sbTeXu (MS DOG), natomiast w popularnych dystrybucjach UNIXowych opartych na web2c pojawiło się dosłownie przed chwilą (jeśli pamiętać, że chwila w TeXu może trwać pół roku; w porównaniu z wiekiem TeXa jest to czas zaniedbywalny). W związku z tym przekodowanie stało się dostępne również w fpTeXu --- opartej na web2c dystrybucji TeXa dla Windows 95/98/NT. A ponieważ MikTeX (też Windows) nie zamierza być w tej kwestii w tyle, można mieć nadzieję, że wkrótce praktycznie każdy liczący się TeX będzie mógł przekodowywać.

Implementacja przekodowywania, pod tajemniczą nazwą TCX została wprowadzona do dystrybucji web2c już jakiś czas temu. Wkrótce jednak przeciwnicy tego rozwiązania (związani z ekipą LaTeXa 2e) wymogli jego unieczynnienie w źródłach (`#ifdef 0` z podejrzanym komentarzem). Praca z ośmiobitowym tekstem jest dla polskich użytkowników czymś zupełnie podstawowym. Dlatego też niewielka ekipa polskich użytkowników (Staszek Wawrykiewicz, Włodek Bzyl i niżej podpisany) podjęła próbę przeforsowania wprowadzenia na nowo do web2c procedur przekodowujących. Przedsięwzięcie to powiodło się (głównie dzięki zapałowi i energii Staszka).

Warto tu jeszcze zaznaczyć, że wprowadzenie przekodowywania nie narusza licencji TeXa. Jak wiadomo, jedyną osobą władną aby wprowadzać zmiany w TeXu jest Don Knuth. Nie dotyczy to wszakże drobnych szczegółów związanych ze specyfiką danego systemu operacyjnego (środowiska obliczeniowego), w którym dana implementacja TeXa ma działać. W istocie TeX ma mechanizm zamiany dowolnego (jednobajtowego) kodu używanego w dokumentach na reprezentację opartą na ASCII i używaną w pliku .dvi (reprezentacja ta odzwierciedla układ znaków w fontach). Mechanizm przekodowywania został przewidziany z myślą o komputerach pracujących w EBCDICu (który jest istotnie odmienny od ASCII). Wierzymy, że środowisko obliczeniowe posługujące się kodem (na przykład) ISO 8859-2 też jest środowiskiem ,,nie-ASCII'' i że w związku z tym pracująca w nim implementacja TeXa może mieć w odpowiednie tablice w programie włożone odwzorowanie ISO 8859-2 w układ fontów. W związku z mnogością stosowanych ,,stron kodowych'' zaszycie odwzorowania w kompilat TeXa jest niepraktyczne. Dlatego web2c oferuje rewelacyjne uproszczenie: tabelę opisującą przekodowanie można zadać przy pomocy opcji polecenia uruchamiającego TeXa.

Jak się tego używa?

W nowej wersji web2c (7.3) i w konsekwencji teTeXa (1.0) TeX reaguje na dodatkową opcję `--translate-file` wskazującą plik z tablicą konwersji. Opcji tej używa się przy normalnym wywołaniu TeXa (a nie jak w emTeXu przy generowaniu formatu).
Pokaźna kolekcja tablic konwersji jest dystrybuowana z samym web2c (i w konsekwencji powinna być dostępna w dystrybucjach pochodnych). Są tu w szczególności tablice przekodowujące do układu fontów PL (tylko polskie znaki): il2-pl.tcx -- dla ISO 8859-2 (Latin-2), cp1250-pl.tcx -- Code Page 1250 (Windows), cp852-pl.tcx -- tzw. IBM Latin 2, maz-pl.tcx -- Mazowia, a jakże, oraz amiga-pl.tcx -- dla kodu AmigaPL.

Przykład: pod Linuksem poniższe wywołanie przetwarza dokument MeXowy z polskimi znakami w notacji ,,naturalnej'':

    mex -translate-file=il2-pl mojdokument.tex

Istnieje alternatywny sposób informowania TeXa o sposobie kodowania danego pliku. Web2c ,,od zawsze'' reagowało na pierwszą linię pliku zaczynającą się w taki sposób

    %&mex

załadowaniem odpowiedniego formatu (tutaj MeXa). W nowej wersji ten mechanizm został rozszerzony. Następująca linia

    %&mex --translate-file=il2-pl

oprócz formatu zadaje również kodowanie pliku. Można również pominąć nazwę formatu:

    %& --translate-file=il2-pl

Użycie opcji `--translate-file` w pierwszej linii pliku sprawia, że dokument zawiera jawną informację o kodzie, który został w nim użyty. Dzięki temu nie trzeba zgadywać, w jakim kodzie kolega przysłał nam plik (zmora emTeXa). Dzięki zaś obecności kompletu plików .tcx w dystrybucji wystarczy uruchomić na dokumencie TeXa bez żadnych dodatkowych opcji, aby uzyskać poprawny wydruk.

TeX poszukuje pliku opisującego przekodowanie w bieżącym katalogu oraz w miejscu właściwym dla plików `.pool` czyli domyślnie `texmf/web2c`.

Opcji -translate-file można używać również w wywołaniu initexa, ale będzie ona w mocy tylko w czasie jego pracy. Po co to komu? Można wyobrazić sobie format oparty na MeXu definiujący makra o nazwach zawierających polskie znaki. W pliku takiego formatu nazwy makr byłyby zakodowane w notacji wewnętrznej. A zatem format byłby nadal niezależny od notacji wejściowej! Przy przetwarzaniu dokumentu możnaby nadal wskazać dowolną stronę kodową dla wejścia i dawałaby ona dostęp do makr o polskich nazwach. Jak się zdaje web2c jest pierwszą na świecie implementację TeXa o takich możliwościach.

Marcin Woliński