Witajcie!

Sposrzeżenie problemu, o którym dalej, zawdzięczamy Markowi Bodnarowi,
któremu niniejszym bardzo dziękuję, a który zapytał mnie wczoraj,
dlaczego texowanie jego dokumentu pod Unixem/Linuxem powoduje, że
terminal przestaje się nadawać do użytku.  Mówiąc ściślej, od pewnego
miejsca, komunikaty TeXa zamieniają się w nieczytelne ,,krzaczki'' i
stan ten się utrzymuje, to znaczy po zakończeniu programu tex, znaki
pisane z klawiatury też występują w postaci ,,krzaków''.  Pomaga
jedynie wpisanie w ciemno polecenia 'reset' (które doprowadza terminal
do przytomności, bynajmniej nie restartując komputera).

Oto krótki plik pozwalający uzyskać to zjawisko:
----------------------------------------------------------------------
%&mex --translate-file=il2-pl
\hbox to0pt{$\delta$}
\bye
----------------------------------------------------------------------

Ten przykład można dalej rozwinąć.  Na przykład poniższy plik
----------------------------------------------------------------------
%&mex --translate-file=il2-pl
\hbox to0pt{\oe[32mzielone\oe[30m}
\bye
----------------------------------------------------------------------
przetexowany, daje na terminalu w m.in. komuniat

        Overfull \hbox (87.77802pt too wide) detected at line 2
        \tenrm zielone|

gdzie słowo zielone jest, jako żywo, zielone (o ile tylko jest to
kolorowy terminal, np. xterm).  Użytkownicy niby-DOS-u zapewne mogą
uzyskać podobny efekt, jeżeli mają załadowany w config.sys sterownik
ansi.sys (użytkownicy podglądnika ps_view zapewne mają załadowany).

Rozwijając temat: 
----------------------------------------------------------------------
%&mex --translate-file=il2-pl

\bgroup \uccode`\!=27
\uppercase{\egroup \def\esc{!}}
\bgroup \uccode`\!=7
\uppercase{\egroup \def\bell{!}}
\def\fb#1#2{\esc[3#1m\esc[4#2m}

\message{\bell}
\message{\esc[H\esc[J}
\message{\esc[10;30H}
\message{\fb31\esc[4m\esc[7mHello,\esc[m \fb47\esc[4m\esc[1mworld!\esc[0m}
\message{\esc[39;49m\esc[21;0H}
\bye
----------------------------------------------------------------------
Uruchomienie TeXa na tym pliku powoduje wydobycie bipnięcia z
głośniczka, wyczyszczenie ekranu, następnie na środku ekranu
wypisywany jest napis Hello, world!, przy czym Hello jest podkreślone,
czerwone na żółtym tle, natomiast world! jest podkreślony, półgruby i
niebieski. 

                                 ----

Teraz diagnoza.  Zapewne wszyscy, którzy słyszeli o znakach
sterujących terminalem, domyślili się już, że w powyższych przykładach
udało się nakłonić TeXa do wyplucia z siebie takich znaków.

Normalnie TeX wypisuje znaki sterujące w postaci widzialnych znaków
ASCII, np. ^^N, ^^@, ^^[, itd.

Co zmieniają pliki TCX?  Otóż skucha polega na tym, że polskie pliki
TCX, znajdujące się obecnie w dystrybucji web2c, mapują wszystkie 256
znaków, niektóre z nich trywialnie, w ten sam znak.  Tymczasem
umieszczenie w pliku TCX informacji, że jakiś znak ma być zamieniany
na samego siebie nie jest semantycznie puste.  Taki zapis informuje
texa, że dany znak można wypisywać na ekranie i w logu w postaci
jednego bajtu, a nie ^^N.

Polskie pliki TCX powodują, że TeX *wszystkie* znaki wypisuje na
żywca.  Nawet bajt zerowy!

Z jednej strony cieszy mnie, że wreszcie mogę napisać makra texowe
generujące kod maszynowy dla peceta.  I wreszcie TeX może generować
dokumenty w formacie M$ Word.  I wiele innych fajnych formatów
binarnych.  Ale to chyba nie o to chodzi.

Pod DOS-em to zachowanie zapewne nie może powodować problemów (chyba
że z ansi.sys).  Pod Uniksem jest to prosta droga do katastrofy.

Więc postuluję natychmiastowe usunięcie z plików TCX przekodowań dla
kodów 0-31 i 127 (a chyba jeszcze rozsądniej w ogóle nie tykać <128).

Dziwne, że ten problem nie objawił się wcześniej.  Widocznie żaden
TeXowiec używający Linuxa nie używa litery \delta.


^[[1mPozdrawiam,^[[0m
Marcin

----------------------------------------------------------------------
 Marcin Woli\'nski                        mailto:[EMAIL PROTECTED]
                                     http://www.mimuw.edu.pl/~wolinski
----------------------------------------------------------------------
Zobacz http://www.mimuw.edu.pl/~wolinski/mwcls.html  (2001/03/23)

Odpowiedź listem elektroniczym