Proc pouzit encTeX

Petr Olsak olsak at math.feld.cvut.cz
Tue Dec 1 10:11:42 CET 1998


On Fri, 27 Nov 1998, Leo Hadacz wrote:

> ... Krom toho, jestli
> chcete diskutovat, tak by mozna bylo dobre aspon zhruba vysvetlit, k cemu je
> enc rozsireni dobre a naopak, proc se mu nekteri tak brani. Proc nestaci
> \usepackage[latin2]{inputenc}? Protoze v plainu nic takoveho neni? Pokud to
> ...
> 
> Leo

Ja se domnivam, ze zakladni chyba {inputenc} je v tom, ze tento balik
implicitne predpoklada, ze xord/xchr vektory v kodech nad 128 budou
nastaveny na identicke zobrazeni. Pritom tato vlastnost neni nikde
v TeXu standardizovana ci postulovana. V Knuthovych knihach nenajdeme 
o problematice kodu nad 128 zadnou zminku.

Dalsi chybou je podle meho nazoru neoddelovani problemu prenosu dokumentu
na mezinarodni urovni od dukladne lokalizace pro jeden konkretni jazyk. Da
se souhlasit, ze dokument by mel obsahovat tag o svem kodovani, aby pro
ucely mezinarodniho prenosu bylo zrejme, jak s nim dale nakladat. Takovym
tagem muze byt nekde nahore neco jako \documentencoding{CP1250} nebo neco
podobneho. Je ovsem nadbytecne, aby tam takovy tag byl, pokud clovek
pracuje lokalne na sve instalaci. Je ale velmi obtizne, pokud nepritomnost
takoveho tagu zpusobi, ze proste akcenty v cestine/slovenstine vubec
nefunguji. Pan Taylor, ktery propaguje pritomnost takoveho tagu v kazdem
dokumentu, asi nepomyslel na to, ze by mel v *kazdem* svem dokumentu psat
\documentencoding{ascii} nebo \documentencoding{ebcdic} a ze pokud to
nenapise, tak mu ta anglictina proste nebude fungovat. Asi by z tohoto
pohledu na vec mirne zmenil nazor a uznal by, ze v lokalnim prostredi,
pokud navic se konverze mezi kodovanim dokumentu pri jeho prenosu provadi
vne TeXu (napriklad v ramci ftp prenosu, e-mail prenosu), jsou tyto tagy
nadbytecne a dokonce mohou veci znacne komplikovat.

Protoze Knuth nespecifikoval, jak maji vypadat xord/xchr v kodech nad 128,
je to na lokalizatorech texu, jak budou s temito kody pracovat. Ja jako
autor lokalizace TeXu pro cestinu/slovenstinu jsem se rozhodl, ze
napriklad pri pouzivani formatu csplain musi byt treba pismeno \v z
(videno v blize nespecifikovanem operacnim systemu v editoru skutecne jako
z s hackem) mapovano do vnitrniho kodovani TeXu pomoci xord/xchr na pozici 
190. Jak je to udelano, zda je pouzit enctex, TPC tabulky emTeXu, tcx
tabulky nebo primo jsou xord/xchr takto pevne nastaveny pred kompilaci
TeXu ze zdrojoveho tex.web, to je implementacne zavisly problem a ten neni
zajimavy. Pravda, pokud bychom pouzili posledni alternativu (z pohledu
Knuthovych pozadavku zcela korektni), meli bychom binarni TeX jednou pro
vzdy s timto prekodovacim mechanismem a tezko by se dala implementovat
myslenka tagu pro dokumenty, urcene k mezinarodnimu prenosu. 

Proto je vhodne, podle meho nazoru, implementovat stav vektoru xord/xchr
do formatoveho souboru fmt. Pak muzeme pouzivat "mezinarodni latex", kde
cestina/slovenstina nepojede jinak, nez pomoci {inputenc} a
uzivatele to prinuti k vytvoreni odpovidajiciho tagu do sveho dokumentu.
Uzivatel tak vytvori dokument, ktery bude mezinarodne prenositelny.
Mimoto muze existovat "lokalizovany latex", pripadne jiny format,
kde je problematika kodovani implementovana do xord/xchr.

Na zaver uvedu jeste jeden priklad, ktery me jednoznacne odrazuje od
pouzivani {inputenc} pro lokalizovany TeX:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[latin2]{inputenc}
\begin{document}

Tady je čeština % tohle dopadne dobre,
                % pro pripad spatneho prenosu e-mailem konstatuji,
                % ze je zde napsano "tady je \v ce\v stina", ovsem bez
                % prepisu do sekvenci.

\newwrite\out  \immediate\openout\out=temp.tex
\immediate\write\out{\string\begin{verbatim}}
\immediate\write\out{Tady je čeština}
\immediate\write\out{\string\end{verbatim}}
\immediate\closeout\out

\input temp.tex

\end{document}

Pokud to vyzkousite, najdete v souboru temp.tex text kodovany podle Corku!
Pokud nemate vypnuty ^^zobakovy ^^vystup (to s xord/xchr blizce
souvisi a jiste vite, ze to mam v enctexu resene), pak uvidite po \input
temp.tex ty zobaky primo v dokumentu. Pokud mate ^^zobakovy ^^vystup
vypnuty, pak stejne budete v dokumentu misto textu "tady je \v ce\v stina"
videt neco jako "tady je \L e\ogonek tina". To nepotesi.

Pokud tento dopis dostanou do svych e-mailovych klientu uzivatele MS
Windows, a jejich klienti jsou spravne konfigurovani, je dost
pravdepodobne, ze uvedenou ukazku budou mit kodovanu v CP1250, ackoli ja
ji odesilam v ISO8859-2. Tito uzivatele pak budou muset pred
experimentovanim zamenit v tretim radku \usepackage[latin2]{inputenc}
za \usepackage[cp1250]{inputenc}. I toto je nazorny priklad, ze myslanka
tagu v dokumentu je ponekud na vode postavena.

Petr Olsak





More information about the csTeX mailing list