2008-08-26 Dlaczego nie lubię LaTeXa

Oczywiście, tytuł tego wpisu jest troszkę prowokacją – szczególnie dla tych, którzy mnie znają i wiedzą, jak wielkim jestem fanem TeXa.

No właśnie, TeXa – a nie LaTeXa. I tu jest pogrzebany przysłowiowy pies. Bo dla wielu osób TeX i LaTeX to synonimy; nic bardziej błędnego!

Dawno temu, mniej więcej w połowie lat dziewięćdziesiątych ubiegłego stulecia;), zaczynałem moją przygodę z TeXem od plaina. Aż do około 2000 roku uparcie i konsekwentnie gardziłem LaTeXem, uważając, że jest to narzędzie dla mięczaków, bo prawdziwi mężczyźni piszą w plejnie. Potem dojrzałem nieco (a także zacząłem używać TeXa nie tylko dla siebie, ale również wysyłać swoje pliki po świecie!) i przestawiłem się na LaTeXa2e. Oczywiście, spodobało mi się parę rzeczy (na wszystko jest przecież pakiet LaTeXowy), choć pewne rzeczy jakoś źle mi się robiło (np. pisma urzędowe do dziś piszę czasem w plainie!).

Gdy zacząłem czytać o systemie ConTeXt, od razu mi się spodobał. Niestety, kilka kolejnych podejść do jego używania skończyło się fiaskiem (głównie z powodu problemów z dokumentacją – w zasadzie nie ma sensu używać ConTeXta (będącego od kilkunastu lat w stadium beta – co nie przeszkadza wielu ludziom używać go w profesjonalnych zastosowaniach, po prostu “beta” dla Hansa Hagena to szczyt marzeń o świetnie dopracowanej wersji v100.0 dla większości programistów…) bez stałego łącza internetowego, w szczególności dostępu do listy mailingowej i ConTeXtgarden, czyli wiki ConTeXta). Teraz mam łącze, troszkę wolnego czasu i coraz więcej determinacji do odwrócenia się plecami do LaTeXa (no, niezupełnie – prace matematyczne nadal będę oczywiście pisał w LaTeXu, z oczywistych powodów).

Teraz, gdy wstęp osiągnął już grubo przesadzony rozmiar, a niecierpliwość czytelnika sięga zenitu, czas odpowiedzieć na tytułowe pytanie: dlaczego nie lubię LaTeXa?

Podobnie jak we wczorajszym wpisie, powodem nie jest to, że LaTeX jest zły. Nie jest – choć daleko mu do ideału. Powodem jest to, że wiele ludzi (w tym i ja) zaczęło go używać nie do tego, do czego służy (a także, że dokumentacje i podręczniki LaTeXa uprawiają brzydką propagandę na temat właściwego przeznaczenia LaTeXa).

Do czego bowiem służy LaTeX? Do pisania prac naukowych. Koniec i kropka. LaTeX nie służy do pisania książek, ani nie jest wcale (jak głosi tytuł pierwszej książki o nim) “systemem przygotowywania dokumentów”. LaTeX jest systemem przygotowywania prac naukowych. I tyle.

Oczywiście, powyższy akapit to pewne (dość mocne) uproszczenie. Oczywiście, że w LaTeXu da się napisać książkę – i to nawet ładnie wyglądającą książkę. Tak samo list czy sprawdzian/kolokwium. Ale takie rzeczy w LaTeXu źle się pisze.

Popatrzmy choćby na podstawowe klasy dokumentów LaTeXa: article, report i book. Wszystkie zostały napisane z myślą o pracach naukowych (artykułach, raportach i monografiach). Klasa book oczywiście nadaje się jedynie do pisania wstępnych wersji – potem i tak trzeba pozmieniać masę ustawień.

Spójrzmy, jaką funkcjonalność oferuje “podstawowy” LaTeX, a jaka jest dostępna jedynie w pakietach. Numeracja wzorów; spisy treści; środowiska takie, jak abstract czy bibliography. Jaki autor materiałów edukacyjnych, składacz gazet czy ulotek reklamowych potrzebuje takich rzeczy? Oczywiście, są dostępne pakiety robiące masę innych rzeczy. Ale zasada jest taka: LaTeX został napisany z myślą o pracach naukowych, inne zastosowania to późniejsze naleciałości, które zostały nałożone na obowiązujący w LaTeXu model.

Jest na przykład symptomatyczne, że w niejednym podręczniku LaTeXa jest napisane, że “używanie różnych czcionek w jednym dokumencie jest złe, i nie należy tego robić”. Konsekwentnie, LaTeX nie ma łatwych mechanizmów przełączania się między różnymi krojami pisma. Ja rozumiem, że tego się nie robi w pracach naukowych. Ale popatrzmy na gazety lub podręczniki. (To, czy ten trend mi się podoba, czy nie, to już inna sprawa; faktem jest, że ludziom, którzy świadomie chcą używać różnych czcionek, LaTeX chyba za bardzo nie pomaga).

Albo drugi, klasyczny problem: wyliczenia wielołamowe. Składanie w więcej niż jednym łamie to ogólny problem w LaTeXu (jest wprawdzie pakiet multicol, ale jego licencja generuje pewne problemy w zastosowaniach komercyjnych!). Zrobienie automatycznie czegoś takiego:
[Error: dvipng binary and convert binary not found at /usr/bin/dvipng or ]
nie jest takie proste (przynajmniej bez multicola; a może jest do tego jakiś pakiet…?). A gdy piszę podręcznik (ba, nawet jednostronicowy sprawdzianik), jest to naprawdę dość podstawowa funkcjonalność…

Albo już zupełny drobiazg, czyli ustawienia parametrów strony (marginesy etc.): standardowy LaTeX oczywiście pozwala to robić, ale w sposób, o którym aż żal myśleć. Tak, wiem, że jest pakiet geometry – ale to jest właśnie dodatek, i to napisany przez osobę spoza LaTeX teamu! Oczywiście, motywacja autorów LaTeXa jest zrozumiała – autor publikacji naukowej nie ma grzebać w marginesach itp. (a co, jeszcze sobie stron nabije;)!), to jest praca dla typografa w redakcji – ale co z ludźmi, którzy chcą po prostu napisać list – i domyślne marginesy LaTeXa są totalnie bez sensu?

Wracając do wstępu – filozofia plaina i ConTeXta jest zupełnie inna.

W plainie (jak sama nazwa wskazuje) jest prosto: nie ma w zasadzie (prawie) nic. Ani spisów treści, ani zaawansowanego przełączania fontów, ani numerowania wzorów (ba, nawet przypisów!). To, co jest, jest wprawdzie znów nieco zorientowane na prace naukowe – ale są to raczej przykłady, jak pisać makra TeXowe, niż faktycznie przydatne rzeczy. A więc i tak trzeba wszystko zrobić samemu.

Wreszcie, ConTeXt to zupełnie inna bajka. Mam wszystko (no, może prawie;)), żadnego ładowania stu tysięcy pakietów – a poza tym, wreszcie nie jestem przymuszany do suchego stylu “poważnych” publikacji. ConTeXt został napisany z myślą o materiałach edukacyjnych i publikacjach elektronicznych – ale czy te design goals nie są dużo szersze od LaTeXowych? A przede wszystkim – o ile w LaTeXu obowiązuje niemal dogmat “autor pisze treść (content), i to należy ułatwić; typograf określa wygląd (presentation), i jest zawodowcem, więc nie trzeba tego zbytnio ułatwiać” (LaTeX3 ma to zmienić – ale kiedyż on będzie?) – to ConTeXt przyjmuje zasadę “autor jednego dnia pisze treść, innego dnia (i w innym miejscu dokumentu!) określa wygląd – ale jedno i drugie jest dla ludzi i powinno być tak proste, jak to możliwe”.

Czas pokaże, na ile miałem rację – zaczynam pisać przy użyciu ConTeXta…

KategoriaTeX, KategoriaPlainTeX, KategoriaLaTeX, KategoriaConTeXt