Kodowanie QX

Wiosną 1998 roku pojawiła się w archiwum GUST-u polonizacja fontu Palatino, pochodzącego z kolekcji fontów URW, dystrybuowanej od jakiegoś czasu z Ghostscriptem. Znaki w spolonizowanym foncie mają kodowanie zgodne z tzw. układem QX. Co to takiego, ten układ QX?

Otóż fonty w postaci elektronicznej przybywają na rynek polski głównie ze Stanów Zjednoczonych i są dostosowane do potrzeb tamtejszego rynku, zarówno jeśli chodzi o zestaw znaków jak i kodowanie znaków. W związku z tym w układzie dystrybuowanych fontów nie znajdują odbicia ani potrzeby Polaków, ani TeX-owców.

Problem ten od paru lat był przedmiotem prac nieformalnej grupy członków GUST-u. W pracach brali udział: Włodek Bzyl, Bogusław Jackowski, Janusz M. Nowacki, Andrzej Odyniec, Piotr Pianowski, Marek Ryćko, Andrzej Tomaszewski, Staszek Wawrykiewicz oraz wielu innych, którzy dobrym lub krytycznym słowem pomagali popychać sprawę do przodu.

Efektem prac jest właśnie układ QX określający dla fontów PostScriptowych-owych zarówno zestaw znaków, jak i tabele kodów do zastosowań okienkowych oraz do zastosowań TeX-owych, gdyż w zamierzeniu układ QX ma zaspokajać potrzeby składu TeXnicznego, z możliwością (ograniczonego) wykorzystywania fontów w środowisku okienkowym.

Założenia

Układ QX nie wziął się ,,z głowy czyli z niczego'' -- przeciwnie, wynikł z przyjętych zasad. Zasady mogą się okazać chybione, to pokaże czas, niemniej jednak najpierw sformułowane zostały zasady, a na ich podstawie konstruowany był układ QX.

Oto najważniejsze z tych zasad:

Ad 1

Oczywiście nie można oczekiwać stuprocentowej zgodności, na przykład niektóre fonty są zaprojektowane bez ligatur związanych z literą ,,f''. Wydaje się, że brak niektórych znaków jest stosunkowo niegroźny.

Nieprzyjemne konsekwencje może mieć natomiast decyzja zastępowania pewnych znaków innymi. Mimo to taki pomysł przyszedł do głowy nawet samemu Donaldowi E. Knuthowi: w fontach rodziny Computer Modern font cmr5 ma nieco inny zestaw znaków niż pozostałe fonty szeregu CMR -- przykra niespodzianka wydaje się wcześniej czy później nieunikniona. Jednak i takie sytuacje mogą być nie do uniknięcia, np. pisanki z reguły mają więcej ligatur niż zwykłe fonty drukarskie. Należy zatem dbać o to, by przynajmniej podstawowe znaki (litery) miały przypisane zawsze te same kody.

Spis założeń

Ad 2

TeX operuje jedynie na fontach co najwyżej 256-znakowych -- to poważne ograniczenie. Zostało ono oczywiście uwzględnione przy projektowaniu układu QX. Kolejnym ograniczeniem jest limit różnych wysokości i głębokości znaków w foncie (16), w związku z czym znaki w danym foncie nie powinny się zbyt różnić rozmiarami.

Ze względu na powszechność fontów CM zestaw znaków powinien być możliwe zgodny z zestawem znaków fontów tekstowych rodziny CM (fonty matematyczne, jako używalne wyłącznie w kontekście TeX-a, pozostają poza zakresem zainteresowań).

Podobna zasada była ściśle przestrzegana przy projektowaniu pakietu MeX: fonty PL i fonty CM różnią się jedynie znakami o kodach 128--255 (polskie znaki diakrytyczne i cudzysłowy). Dzięki temu każde oprogramowanie TeX-owe przeznaczone do pracy z fontami CM działa również z fontami PL, co okazało się w praktyce bardzo korzystne.

Podjęcie takiej decyzji stało niestety w sprzeczności z ustaleniami konferencji EuroTeX'90 w Cork (Irlandia), gdzie przyjęty został jako ,,nowy standard'' tzw. układ EC. Z grubsza rzecz biorąc w układzie EC znaki diakrytyczne umieszczone są w pozycjach o kodach 0--32, a narodowe znaki diakrytyczne w pozycjach o kodach 128--256 (w układzie PL pozycje polskich znaków diakrytycznych są takie same jak w układzie EC). Niezależnie od zalet takiego systemu kodowania użycie fontów EC z formatem plain jest po prostu niemożliwe. Ponadto pula stu dwudziestu ośmiu pozycji na znaki diakrytyczne okazała się zbyt mała. Nie zmieściły się na przykład litewskie litery ,,iogonek'', ,,Iogonek'', ,,uogonek'' oraz ,,Uogonek''.

Spis założeń

Ad 3

Wolno sądzić, że pakiet MeX zadomowił się w środowisku polskich użytkowników TeX-a. Ze względu na istnienie pakietu MeX jest wskazane, by font był rozszerzeniem układu PL, możliwie mało różniącym się od układu EC. W szczególności oznacza to, że wszystkie polskie znaki diakrytyczne powinny się w foncie znaleźć.

W związku ze składaniem polskich tekstów technicznych przydatne są znaki specyficzne dla polskiej literatury technicznej. Zagadnienie to omówione jest przy okazji analizowania konsekwencji zasady 4.

W fontach anglosaskich powszechnie obecna jest ligatura ,,fl'' (czasem także ,,ffl''). Nie widać żadnego powodu, dla którego w polskich fontach nie miałoby być ligatury ,,fk'' (poprawna nazwa w wektorze kodowania to f_k). W polskim języku jest wprawdzie znacznie więcej słów zawierających digram ,,fl'' niż słów zawierających digram ,,fk'', niemniej jednak są takie słowa: agrafka, cofka, dryfkotwa, fifka, Kafka, karafka, lufka, mufka, sofka, szafka. Bez ligatury ,,fk'' wyglądają one niezbyt ładnie ze względu na kolizję liter ,,f'' i ,,k'', analogiczną do kolizji liter ,,f'' i ,,l''. Stąd obecność ligatury ,,fk'' w układzie QX.

Spis założeń

Ad 4

Zastosowanie TeX-a do składania tekstów sugeruje pewien zakres zastosowań, mianowicie skład tekstów technicznych. Fonty zatem powinny posiadać znaki przydatne do takich zastosowań. Pośród wielu znaków specyficznych dla polskich zwyczajów typograficznych dwa wydają się szczególnie ważne: symbol kąta ,,anglearc'', oraz symbol średnicy ,,diameter''. Znaków tych, o ile nam wiadomo, nie posiada żaden font pochodzenia zagranicznego. Również polskie znaki mniejsze-równe i większe-równe, ,,lessequal'' ,,greaterequal'', różnią się od symboli stosowanych za granicą.

W tekstach technicznych często pojawia się promil ,,perthousand''. Rzecz dziwna, Donald E. Knuth nie przyjął do wiadomości istnienia tego znaku -- w fontach CM po prostu go nie ma.

Z punktu widzenia tekstów technicznych pożądana jest obecność niektórych małych greckich liter w foncie. Np. litera mu pojawia się w oznaczeniach jednostek (przedrostek mikro). Litera pi wydaje się również warta uwzględnienia. Najlepiej byłoby móc zawrzeć w foncie cały alfabet grecki. Niestety, szczupłość miejsca i obszerność potrzeb wykluczają taką możliwość.

Jako jednostki używane są czasem symbole quotesingle (minuta), quotedbl (sekunda lub cal), degree (stopień) -- ich brak wcześniej czy później zaczyna dokuczać.

Określenie ,,teksty techniczne'' niekoniecznie musi oznaczać teksty o profilu matematycznym lub inżynierskim. Teksty prawne również można zaliczyć do tekstów technicznych. Brak symbolu section w standardowych fontach CM (symbol ten występuje jedynie w fontach szeregu CMSY) dawał się dotkliwie odczuć w praktyce.

Spis założeń

Ad 5

Większość znaków diakrytycznych daje się uzyskać za pomocą operacji TeX-owych, na ogół za pomocą polecenia \accent. Jeżeli akcent nie styka się z literą (akcenty ,,acute'', ,,grave'', ,,dieresis'' itp.) zabieg taki jest dopuszczalny. Można też skorzystać z bardzo ogólnego mechanizmu konstruowania znaków złożonych, mianowicie z fontów wirtualnych. Dzięki fontom wirtualnym znaki złożone są widziane przez TeX-a jako zwykłe, pojedyncze znaki. Tworzenie fontów wirtualnych jest jednak pracochłonne (brak póki co wygodnych narzędzi) i wymaga sporej wiedzy, tak TeX-owej, jak i typograficznej.

Niestety, niektóre znaki tworzą z elementem diakrytycznym jedną całość. Wymienić tu należy w pierwszym rzędzie polskie i litewskie litery z ogonkiem (,,ą'', ,,ę'', iogonek, uogonek i odpowiednie majuskuły) oraz litery z cedillą (ccedilla, scedilla, tcedilla i odpowiednie majuskuły). Inne znaki diakrytyczne tego rodzaju to islandzkie thorn, Thorn czy eth. W dobrze zaprojektowanych fontach takie znaki nie mogą być ,,składanką'' -- muszą stanowić spójnie zaprojektowaną całość.

Spis założeń

Ad 6

Font powinien zawierać pewne ,,uświęcone tradycją'' znaki dodatkowe. Takie symbole jak ,,copyright'' czy ,,registered'' powinny być zgodne z bieżącym fontem. Teoretycznie wystarczyłoby kółko, w które za pomocą makra TeX-owego wstawiało by się odpowiednie litery. Każdy, kto próbował używać plain-owego makra \copyright, wie, że nie jest to pomysł najszczęśliwszy -- pozycjonowanie liter wewnątrz koła musi być przeprowadzone dla każdego fontu (a nawet dla każdej odmiany) osobno, co wyklucza możliwość automatyzacji.

Symbole ,,dagger'' i ,,daggerdbl'' są wprawdzie stosunkowo rzadko używane (ich używanie to w zasadzie zwyczaj anglosaski), jednakże kształt tych symboli jest specyficzny dla danego fontu, tym samym -- dla pełności -- font powinien je zawierać.

Inne symbole potrzebne sporadycznie to ,,bullet'' i ,,periodcentered''. Na pierwszy rzut oka mogłoby się wydawać, że znaki te nie są w żaden sposób z konkretnym fontem związane. To oczywiście nieprawda, na przykład kształt kropki zależy od fontu. Sięganie do innego fontu po te znaki lub przesuwanie kropki w celu uzyskania drugiego z nich jest zabiegiem niezwykle uciążliwym ze względu na trudności w wyważeniu położenia obu znaków.

Spis założeń

Ad 7

Rozpowszechniona obecnie wersja środowiska Windows nakłada dodatkowe ograniczenia na liczbę znaków w foncie: znakom nie można przypisać kodów większych niż 255 i mniejszych niż 32. Redukuje to maksymalną liczbę znaków w foncie dających się równocześnie wykorzystać do 224. W układzie QX przeznaczonym do zastosowań okienkowych kody mniejsze-równe od 32 otrzymały znaki, co do których można ze sporym prawdopodobieństwem założyć, że nie będą potrzebne w tych zastosowaniach (głównie akcenty, symbole i ligatury -- p. tabela 2).

Dalsze zmniejszenie puli wolnych miejsc wiąże się ze znakami o niewielkiej użyteczności z punktu widzenia TeX-a, ale niezbędnymi ze względu na pewne tradycje w ich stosowaniu. Takim znakiem jest np. ,,paragraph'', używany jako znak końca akapitu w niektórych edytorach tekstu pracujących w środowisku MS Windows. Do podobnego celu wykorzystywany bywa znak ,,currency''.

Pewne aplikacje windowsowe spodziewają się znaleźć pod kodami 32 i 160 odpowiednio odstęp (space) i niełamliwy odstęp (nbspace). Są to znaki absolutnie bezużyteczne z punktu widzenia TeX-a, ale nieusuwalne ze względu na windowsowe tradycje.

Spis założeń

Ligatury i kerny

Specyfikacja układu QX w kontekście zastosowań TeX-owych obejmuje także ligatury. Ligatury to ważny choć praktycznie pomijany (z nie do końca jasnych przyczyn) w świecie nieTeX-owym element definicji fontu.

Od wersji 0.03 układ QX uwzględnia następujące ligatury:

f + f ff
f + i  fi
f + l fl
f + k f_k
ff + i  ffi
ff + l ffl
hyphen + hyphen endash
endash + hyphen emdash
quoteleft + quoteleft quotedblleft
quoteright + quoteright quotedblright
comma + comma quotedblbase
exclam + quoteleft exclamdown
question + quoteleft questiondown
exclamdown + exclamdown guillemotleft
questiondown + questiondown guillemotright

Z dokładnością do ligatury ,,fk'' jest to ten sam zestaw ligatur co w fontach PL, natomiast różni się on od zestawu ligatur zaproponowanego dla układu EC, który obejmował m.in.:

space + l lslash
space + L Lslash
percent + percent perthousand
less + less guillemotleft
greater + greater guillemotright

Pierwsze trzy z tych ligatur wydają się nieuzasadnione, dwie pozostałe są nieadekwatne, ze względu na zachowanie w układzie QX konwencji fontów CM umieszczającej hiszpańskie znaki interpunkcyjne w pozycji znaku less (znak ,,<'') oraz greater (znak ,,>'').

W definicji układu QX zestaw par kernowych nie jest w żaden sposób specyfikowany, w szczególności dopuszczalne są -- nieobecne w układzie EC -- kerny między cyframi.

Zmiany wprowadzone do układu QX wer. 0.05 (14.01.2002)

Po długiej debacie znaki [tT]cedilla (niewykorzystywane w żadnym z europejskich języków, ale z niezrozumiałych przyczyn obecne w wielu fontach) zostały w wersji 0.04 układu QX zastąpione przez rumuńskie znaki [tT]commaaccent. Konsekwentnie tureckie znaki [sS]cedilla zostały zastąpione przez rumuńskie znaki [sS]commaaccent, aczkolwiek zalecane jest pozostawienie definicji obwiedni znaków [sS]cedilla w foncie. Wprowadzenie waluty euro spowodowało dodanie symbolu Euro do układu QX (wer. 0.05). Symbolowi temu został przypisany kod 128 zarówno w kodowaniu dla systemu TeX, jak i Windows, co jest zgodne z zaleceniem Microsoftu (patrz faq12.htm):

The symbol has been added to the following codepages at position '0x80'; 1250 Eastern European, 1252 Western, 1253 Greek, 1254 Turkish, 1257 Baltic, 1255 Hebrew, 1256 Arabic, 1258 Vietnamese, 874 Thai. In 1251 Cyrillic the symbol will be added at position '0x88'.

Niestety skutkiem tego rozszerzenia była konieczność wprowadzenia dalszych zmian w kodowaniu QX dla systemu Windows: litewskie znaki [Ii]ogonek otrzymały kody 222 i 254 (uprzednio 128 i 144); znaki [Tt]horn, mające przedtem te kody, zostały usunięte. Zalecane jest pozostawienie definicji kształtów znaków [Tt]horn w foncie. Przy okazji zmian wprowadzona została nazwa f_k dla (niestandardowej) ligatury ,,fk'', zgodnie z zaleceniem Adobe: unicodegn.html

Zmiany wprowadzone do układu QX wer. 0.06 (24.08.2003)

Dodano ligatury ij, IJ (dostępne tylko w TeX-owym kodowaniu) oraz znak interpunkcyjny threequartersemdash.

Tabele układu QX

Na dwóch kolejnych stronach zamieszczamy porównanie aktualnego układu QX (wer. 0.06) z innymi szeroko używanymi układami znaków. Tabela 1 przedstawia porównanie TeX-owych układów -- układu PL (przypomnijmy, że znaki o kodach mniejszych-równych od 127 są identyczne w układzie PL i w układzie CM), układu EC oraz układu QX. Z kolei tabela 2 przedstawia porównanie układu QX przeznaczonego do zastosowań windowsowych z układem CP 1250 oraz macintoshowym PLEURO. Jeżeli chodzi o układ QX to -- rzecz jasna -- w obu tabelach występuje ten sam zestaw znaków, różnice dotyczą jedynie kodów przypisanych poszczególnym znakom.

Tekst jest zaktualizowaną wersją artykułu z Biuletynu GUST, nr 9/1997, s. 28--30.
Ostatnia modyfikacja 13.09.2004 (StaW)


Powrót