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 TeXa jest dostępne w emTeXu i sbTeXu (MS DOG), brak go natomiast w popularnych dystrybucjach UNIXowych. Implementacja przekodowywania, pod tajemniczą nazwą TCX została wprowadzona na pewien czas do dystrybucji web2c --- matki wszystkich UNIXowych dystrybucji TeXa. Wkrótce jednak przeciwnicy tego rozwiązania (związani z ekipą LaTeXa 2e) wymogli na autorze web2c jego unieczynnienie.

Przekodowywanie wydaje się być bardzo użyteczne w kontekście potrzeb polskich użytkowników --- zwłaszcza formatu MeX. Dlatego też podjąłem próbę wprowadzenia na nowo do web2c procedur przekodowujących.

Obserwując sposób rozwoju Linuksa oraz programów takich jak GIMP, KDE czy GNOME dochodzę do wniosku, że wczesne udostępnianie programów jest dobrym pomysłem. Dlatego poniżej znajduje się wstępna wersja implementacji przekodowywania w web2c. Jest ona przeznaczona dla ofiarnych testerów a nie dla zwykłych użytkowników. Wszelkie informacje o (nie)działaniu należy wysyłać do mnie. W szczególności jestem bardzo zainteresowany informacją jak ,,to'' się sprawuje w Luftach. Wydaje mi się, że w chwili obecnej został osiągnięty właściwy zakres funkcjonalności TCX, więc szczególnie zachęcam do oceny ,,czy to jest to'', czy może potrzeba czegoś więcej/mniej.

Pliki
web2c-tcx.tgz - kod źródłowy dla web2c 7.2
web2c-tcx.diff.gz - kod źródłowy w postaci łaty, można spróbować nałożyć na inną wersję web2c; nie zawiera testów i plików .tcx. Łatę należy nałożyć przez (cd texk; patch -p1 <web2c-tcx.diff)
web2c-tcx_linux_i386_libc6.tgz - wersja binarna dla systemu GNU/Linux dla procesorów Intela (uwaga: skompilowane przy użyciu wersji 2 bibliotek GNU C, wymaga stosunkowo świeżego systemu linuksowego)

Jak tego użyć
Plik z binariami zawiera skompilowane programy tex, etex i pdftex oraz przykładowe tabele konwersji: iso2-pl.tcx opisujący przekodowanie polskich znaków z pozycji kodu ISO Latin-2 na pozycje fontów PL (lub EC) i cp1250-pl.tcx opisujący to samo dla strony kodowej cp1250 (Lufty).
Jeżeli w systemie zainstalowane są programy z płyty TeXlive 3 lub teTeX 0.9 to binaria te powinny po prostu działać, nawet bez konieczności generowania na nowo formatów (ale oczywiście nie może to być MeX z pakietu pltexmf z polskimi znakami uzyskiwanymi przy pomocy znaków aktywnych). Jeżeli ujawnią się problemy ze ścieżkami może pomóc ustawienie zmiennej środowiskowej TEXMFCNF tak, aby wskazywała katalog z systemowym plikiem texmf.cnf.
Programy reagują na dodatkową opcję -translate-file wskazującą tablicę przekodowań. Opcji tej używa się przy normalnym wywołaniu TeXa (a nie jak w emTeXu przy generowaniu formatu). Poniższe wywołanie powinno dawać MeXa czytającego ośmiobitowe polskie znaki:

./tex -fmt=mex -translate-file=iso2-pl mojdokument.tex

TeX poszukuje pliku opisującego przekodowanie w bieżącym katalogu oraz w miejscu właściwym dla plików .pool.

Opcji -translate-file można używać również w wywołaniu initexa (nowość!), ale będzie ona w mocy tylko w czasie jego pracy. Po co? 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 taki 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 prezentujemy tu pierwszą na świecie implementację TeXa z taką funkcjonalnością. Paczka z kodem źródłowym zawiera kilka plików testujących te możliwości. Plik testtcx.ini zapisany w cp1250 służy do wygenerowania formatu MeX rozszerzonego o makro \ąźś. Pliki test-win.tex i test-il2.tex zapisane w kodach cp1250 i ISO 8859-2 odpowiednio powinny dać się przetworzyć przy pomocy tego formatu.

Tablicę konwersji można również zadać przypisując zmiennej środowiskowej TEXCHARTRANSLATE nazwę pliku z tabelą. (Jak się okazuje ta funkcjonalność istniała w dotychczasowym kodzie.) Można wreszcie wartość tę ustanowić w pliku konfiguracyjnym texmf.cnf, również selektywnie dla formatu. Oto fragment texmf.cnf sensowny dla MeXa pod Linuksem:

% translation files
TEXCHARTRANSLATE.mex = iso2-pl

Jak to skompilować
Osobiście używam źródeł web2c 7.2 z płyty TeXlive 3. Po skopiowaniu źródeł TeXa należy plikami z mojej paczki z katalogu changed/ zastąpić odpowiednie oryginalne. Katalog changed/ odpowiada głównemu katalogowi texk/. Następnie wykonujemy:

./configure --enable-tcx
make
	    

Bez opcji --enable-tcx wynikiem kompilacji będą binaria bajt w bajt zgodne z tymi z web2c. Z tą opcją dostaje się przekodowującego TeXa, który stanowi Nową Jakość (tm). Aby skompilować tylko niektóre programy wystarczy wejść do katalogu web2c i wykonać np. make tex etex pdftex.

Send mail to Marcin Woliński Strona wiodąca Kącik TeXnika Color Free Zone certified page