5. TEX, czyli pan Kazio

Aby zrozumieć na czym polega praca TEX-a może być pomocne wyobrażenie sobie, że TEX, to taki bardzo posłuszny i skrupulatny pracownik firmy zajmującej się składaniem tekstów. Na nazwisko ma TEX, na imię Kazimierz; z zawodu zecer. Możemy czasem o nim mówić ,,pan Kazio''. Jego zaletą jest to, że zawsze wykonuje wszelkie polecenia szefa, jeśli tylko możliwe do spełnienia. Ma jednak taką cechę, że wykonuje te polecenia jedynie, jeśli przygotowane na piśmie w odpowiedni, z góry umówiony sposób.

Każdy z nas może zostać szefem pana Kazia. Wystarczy nauczyć się sposobu przygotowania mu na piśmie poleceń dotyczących sposobu składania.

Nie będziemy jednak zawracać panu Kaziowi głowy i przygotowywać poleceń dla niego w jego obecności. Przygotujemy je zawczasu i udamy się do niego z prośbą o realizację.

Tu właśnie zaczyna się pierwszy etap pracy.

Polecenia, które przygotujemy, to będą informacje o tym co i w jaki sposób należy złożyć. Do przygotowania zbioru poleceń użyjemy zwykłego edytora, który jest zwykle zainstalowany na każdym komputerze. Powinien to być tzw. edytor typu ASCII.

Napiszmy przykładowy plik tekstowy, zawierający następujące dwie linijki:

Ala ma psa.
\end

Oczywiście w momencie, kiedy piszemy ten tekst, TEX -- pan Kazio --  go nie widzi.

Po zakończeniu pisania (edycji), tworzymy w pamięci dyskowej komputera plik z tekstem. Nazwijmy przygotowany przez nas plik ala.mex. Zwyczajowo pliki zawierające dane dla TEX-a mają rozszerzenie .tex, a pliki z danymi dla polskiej wersji TEX-a mają rozszerzenie .mex.

Wkrótce wyjaśni się, co oznaczają polecenia napisane w tym tekście i jak zrozumie je pan Kazio. Na razie uwierzmy, że będą one dla niego zrozumiałe i prześledźmy dalszą drogę wiodącą ku ostatecznemu efektowi.

Teraz już nadeszła pora, żeby poprosić pana Kazia o wykonanie składu na podstawie naszych poleceń.

Na każdym komputerze, na którym zainstalowany jest system TEX, istnieje specyficzny sposób uruchamiania go. Nie będziemy tu wyjaśniać rozmaitych sposobów uruchamiania TEX-a.

TEX, czyli pan Kazio przystępuje do pracy i realizuje polecenia. Po pewnym czasie daje znać, że wszystko gotowe.

Wynik jego pracy zapisany jest na dysku w postaci pliku ala.dvi. Oznaczenie dvi jest skrótem od angielskich słów ,,device independent'' -- niezależny od urządzenia. Pan Kazio podjął wszystkie decyzje dotyczące położenia znaków na stronach, ale nie wie jeszcze na jakim urządzeniu zewnętrznym zdecydujemy się wydrukować lub wyświetlić wynik jego pracy. Z tego powodu przygotowuje wynik swojej pracy w  postaci niezależnej od urządzenia.

Dodatkowo, jako niezwykle skrupulatny pracownik, pan Kazio umieszcza na dysku jeszcze jeden plik, o nazwie ala.log, zawierający zapis tego, co podczas jego pracy wyświetlał ekran komputera.

Na tym kończy się rola TEX-a -- pana Kazia. Przyniósł nam zmontowane, gotowe strony tekstu (w postaci pliku dvi) i dalej musimy jakoś sobie radzić. Jak już wspomnieliśmy TEX nigdy nie działa samotnie. Pan Kazio byłby bezużyteczny w firmie, gdyby nie było w niej innych pracowników. W istocie użyteczność TEX-a w ogromnym stopniu zależy od jego powiązań z innymi programami.

Jeden z możliwych sposobów współpracy, to wykorzystanie, po zakończeniu pracy TEX-a, jednego z wielu programów, które umożliwiają zobaczenie tego, co TEX przygotował. Takie programy, zwane sterownikami, służą do wyświetlania, drukowania, naświetlania lub jeszcze innych możliwych sposobów uwidocznienia wyniku pracy TEX-a.

Użycie TEX-a, a następnie sterownika jest najbardziej popularnym, choć nie jedynym sposobem uzyskania wyniku składu.

W przypadku przetwarzania pliku poleceń ala.mex, jeśli na naszym komputerze zainstalowany jest sterownik ekranowy, to możemy obejrzeć wynik składu na ekranie.

Jak mamy postępować dalej, jeśli nie będziemy usatysfakcjonowani tym co zobaczymy? Oczywiście jedynym sposobem poprawienia czegokolwiek w końcowym efekcie jest przygotowanie zmienionej wersji poleceń dla naszego pana Kazia i powtórzenie całego cyklu przetwarzania.

Każdy chyba zdaje sobie sprawę, jak wiele zależy od organizacji pracy w firmie: od zatrudnienia właściwych pracowników i utworzenia odpowiednich mechanizmów ich współpracy. Podobnie jest z cyklem przetwarzania, którego częścią jest zecer, pan Kazio. Powiązanie jego działalności z odpowiednimi programami może dać czasem zdumiewające efekty. Ale to jest już temat na osobną pogadankę.

5.1. Komendy czyli polecenia

Kontynuujemy tu porównywanie TEX-a do pana Kazia, zecera, który realizuje polecenia swojego szefa, przygotowane mu na piśmie. Ten szef, to oczywiście użytkownik systemu.

Przyjrzyjmy się obecnie uważniej plikowi przygotowanemu w poprzednim rozdziale. Z punktu widzenia TEX-a/pana Kazia plik ten składa się jedynie z komend, czyli poleceń. Przypomnijmy, że treścią pliku było:

Ala ma psa.
\end
Plik ten zawiera 13 komend.

Pierwsze trzy z nich, to trzy pierwsze litery. Każda z nich to polecenie:
,,Umieść w składzie literkę <<A>>'',
,,Umieść w składzie literkę <<l>>'',
,,Umieść w składzie literkę <<a>>''.

Następna komenda, to odstęp. Oznacza ona polecenie
,,zrób zwykły odstęp międzywyrazowy''.

Podobnie rzecz się ma z kolejnymi dwoma literami, odstępem i dalszymi czterema literami. Również kropka, to po prostu polecenie
,,Umieść w składzie kropkę''.

Dwunaste polecenie w tym pliku jest najmniej widoczne. Zmiana wiersza (przejście do nowej linii) następująca po kropce traktowana jest przez TEX-a jak odstęp i w związku z tym oznacza to samo, co zwykły odstęp. (W składzie ten odstęp nie będzie widoczny, ponieważ po nim nie następuje już żaden tekst.)

Ostatnie, trzynaste polecenie znacznie różni się od pozostałych. Jest ono zapisane nie w postaci pojedynczego znaku, ale w postaci trzech liter poprzedzonych znakiem \ (wtyłciach, po angielsku backslash). Większość komend systemu TEX, które oznaczają coś innego niż ,,umieść w składzie...'' zapisuje się właśnie w postaci znaku w-tył-ciach i następującego po nim ciągu liter. Istnieje jeszcze trzecia kategoria komend, którą wkrótce poznamy, zapisywana w postaci znaku w-tył-ciach i następującego po nim pojedynczego znaku nie będącego literą.

Komenda \end oznacza ,,zakończ pracę''. Jest to jedyne polecenie, które musi znaleźć się w każdym pliku danych (zestawie poleceń) dla TEX-a.

Uważny czytelnik może zadać pytanie: ,,Skąd pan Kazio wiedział jakimi wielkościami liter ma wykonać skład, jaki ma być krój pisma itp.?'' To bardzo ważne pytanie. Otóż w bardzo wielu sprawach szef umówił się z panem Kaziem: ,,jeśli nie napiszę ci tego-i-tego, to postępuj tak-i-tak''. W szczególności umówieni: ,,jeśli nie napiszę ci jakim krojem pisma masz wykonywać skład, to ma to być Computer Modern Roman''.

W istocie liczba tego rodzaju ,,umów'' z panem Kaziem jest ogromna i sięga kilkuset. Pozwala to na stosowanie stosunkowo zwartej i skrótowej notacji. Dzięki temu, że TEX jest systemem programowalnym, możemy zawierać z panem Kaziem własne umowy, specyficzne dla konkretnego zastosowania, do którego go wykorzystujemy.

5.2. Pudełka i kleje

System TEX składając tekst (wykonując polecenia) pracuje podobnie do tego jak pracowali dawniej zecerzy. Jeśli zecer otrzymywał polecenie (np. czytał je z przygotowanego maszynopisu): ,,umieść w składzie literę <>'', to sięgał ręką do tzw. kaszty, czyli skrzynki, gdzie znajdowały się metalowe czcionki, wyjmował czcionkę z literką ,,A'' i ustawiał w odpowiednim miejscu komponowanej strony. Podobnie, gdy trzeba było zrobić odstęp, umieszczał w montowanej stronie odpowiedni kawałek metalu, który służył do odsuniecia następnych czcionek.

System TEX montuje stronę z podobnych elementów, tylko metalowe czcionki zostały zastąpione ich obrazem komputerowym i nazywają się w TEX-u pudełkami, a odstępy nazywają się klejem. Można sobie wyobrazić, że każda strona montowana jest z pudełek, zawierających litery i inne znaki, połączonych ze sobą różnymi ilościami elastycznego kleju, i dzięki niemu utrzymywanych w odpowiednich odległościach od siebie.

Opracowanie przez autora systemu TEX matemetycznego modelu składu drukarskiego jest prawdopodobnie jednym z jego najważniejszych osiągnięć związanych ze stworzeniem TEX-a. Podstawowym elementem tego modelu jest stwierdzenie, że budowane przez system strony są pudełkami o hierarchicznej budowie. Każdy pojedynczy znak jest pudełkiem. Z takich znaków można tworzyć pudełka bardziej skomplikowane. Na każdym etapie tworzenia pudełek dowolonie skomplikowane pudełko może być użyte w takiej samej roli jak pojedynczy znak. Pozwala to wyrazić bardzo złożone konstrukcje za pomocą prostych środków.

Poniżej opisujemy podstawowe narzędzia, jakich dostarcza system TEX, do konstruowania pudełek.

5.3. Nastroje pana Kazia

TEX zna dwa podstawowe sposoby montowania większych pudełek z mniejszych pudełek i kleju. Stosuje jeden z tych sposobów, zależnie od nastroju (lub inaczej mówiąc ,,trybu'', w jakim się w danej chwili znajduje). Angielskie słowo mode oznaczające tryb (rodzaj) wykonywanej pracy jest podobne do słowa mood oznaczającego nastrój. Wydaje się, że właściwe jest wyobrażanie sobie TEX-a (pana Kazia z poprzednich rozdziałów) jako istoty poddającej się nastrojom.

Podstawowe dwa nastroje, w jakich bywa TEX -- pan Kazio --  to nastrój pionowy i poziomy. Zależnie od tego nastroju ma zwyczaj umieszczać napotykane przez siebie (w tekście z poleceniami) pudełka albo pionowo -- jedno pod drugim, albo poziomo -- jedno obok drugiego.

Na początku pracy, przed przeczytaniem pierwszego polecenia z pliku wejściowego, TEX znajduje się w nastroju pionowym. Pewne wydarzenia mogą jednak wpłynąć na zmianę jego nastroju na poziomy.

TEX jest w nastroju poziomym w dwóch rodzajach sytuacji: podczas składania akapitu i podczas tworzenia pudełka poziomego. Jest to podstawowy nastrój, w którym następuje składanie tekstów. Nastrój pionowy służy do montowania w strony elementów utworzonych w nastroju poziomym.

Po zakończeniu składania akapitu i po zakończeniu tworzenia pudełka poziomego TEX wraca do nastroju, w jakim znajdował się poprzednio.

5.4. Składanie akapitu

Początek akapitu TEX rozpoznaje po pewnych typach elementów, które stanowią zwykle część akapitu. W szczególności, jeśli będąc w trybie pionowym TEX napotka w pliku pojedynczą literę, to stwierdzi, że chcemy rozpocząć składanie akapitu i zmieni nastrój na poziomy.

Podczas składania akapitu TEX tworzy długą poziomą listę, złożoną z pudełek i poziomego kleju. Kolejno napotkane litery traktuje jako pudełka, a odstępy między literami zamienia na klej i oddziela nim pudełka

W przykładzie cytowanym w poprzednich rozdziałach akapit zawierający napis ,,Ala ma psa.'' zostanie przez TEX-a zamieniony na następującą konstrukcję złożoną z pudełek i kleju:

Ala ma psa.
(jest to dziewięć pudełek i dwa kawałki kleju między nimi).

Po zakończeniu czytania akapitu (TEX w tym wypadku rozpozna koniec akapitu po komendzie \end) system dokona połamania akapitu na linijki o szerokości takiej jak zadana szerokość kolumny tekstu, zaczynając pierwszą z nich wcięciem akapitowym odpowiedniej wielkości oraz kończąc ostatnią z nich odpowiednią ilością poziomego kleju, wypełniającą prawą stronę ostatniego pudełka.

Każda linijka, która powstaje w wyniku połamania akapitu, jest pudełkiem o szerokości takiej jak szerokość kolumny tekstu.

W naszym przykładzie TEX utworzy akapit jednolinijkowy, a zatem powstanie linijka zaczynająca się od wcięcia akapitowego i kończąca się klejem dopełniającym do prawej strony.

Nie zachowując proporcji wymiarów, bo litery rysujemy tu w powiekszeniu można by narysować linijkę jako:

Ala ma psa.
\end

5.4. Składanie pudełka poziomego

Drugim możliwym sposobem umieszczania poziomo obok siebie pudełek jest jawne utworzenie tzw. pudełka poziomego. Podstawową komendą służącą w TEX-u do tego celu jest komenda \hbox (h, to skrót od angielskiego horizontal -- poziomy, box, to po angielsku pudełko).

Aby utworzyć w TEX-u poziome pudełko o określonej zawartości należy napisać komendę \hbox i po niej w nawiasach klamrowych napisać zawartość tego pudełka.

Na przykład, jeśli chcemy utworzyć pudełko zawierające napis: ,,Od rana jestem dziś w poziomym nastroju.'', to musimy w pliku poleceń dla TEX-a napisać:

Od rana jestem dziś w poziomym nastroju.

Pudełko takie może być użyte jako element konstrukcujny innych pudełek. Na przykład, jeśli przed przeczytaniem tego pudełka TEX znajdował się w nastroju pionowym, to potraktuje to pudełko jako element konstrukcyjny strony i umieści w obrębie strony pod innymi pudełkami. Jeśli znajdował się w nastroju poziomym i był w trakcie składania akapitu, to potraktuje to pudełko tak jak inne znaki znajdujące się w akapicie i umieści je na liście poziomej przeznaczonej do łamania na linijki.

Należy zwrócić uwagę na różnicę pomiędzy umieszczeniem w akapicie zdania ,,Od rana jestem dziś w poziomym nastroju.'' od umieszczenia w akapicie pudełka poziomego zawierającego takie zdanie. W pierwszym przypadku w różnych miejscach zdania TEX ma prawo dokonać łamania listy poziomej na linijki, w tym również z uwzględnieniem przenoszenia wyrazów. W drugim przypadku całe pudełko traktowane jest jako jeden znak i żadne łamanie wewnątrz niego nie może mieć miejsca. Może to być w szczególności użyteczne do wprowadzenia lokalnego zakazu łamania na linijki.