csplain na TeXlive 2003 neni csplain

Petr Olsak petr at olsak.net
Fri Mar 12 10:34:46 CET 2004


Vazeni kolegove,

omlouvam se za mystifikaci a rozsevani zbytecnych obav, ze csplain na
TeXlive neni csplain. Prozkoumal jsem tu binarku TeXku podrobneji a
shledal, ze situace neni tak kriticka, jak jsem puvodne myslel.
V soucasne dobe jsem sam na pochybach, zda csplain na TeXlive uznat
jako csplain ci nikoli.

Kdyz totiz pouziju pokus.tex:

\newwrite\fout
\immediate\write\fout {český text}
\immediate\openout\fout=out.tex
\immediate\write\fout {český text}
\end

a spustim:

export LC_ALL=POSIX
csplain pokus
This is TeXk, Version 3.141592 (Web2C 7.5.2)
 %&-line parsing enabled.
 (/usr/local/texlive/texmf/web2c/il2-cs.tcx)
(./pokus.tex The format: csplain <Feb. 2000>.
The cs-fonts are preloaded and A4 size implicitly defined.
^^e8esk^^fd text
 )
No pages of output.
Transcript written on pokus.log.

a podivam se do logu:

cat pokus.log
This is TeXk, Version 3.141592 (Web2C 7.5.2) (format=csplain 2004.3.8)  12
MAR 2004 10:35
 %&-line parsing enabled.
 (/usr/local/texlive/texmf/web2c/il2-cs.tcx)
**pokus
(./pokus.tex The format: csplain <Feb. 2000>.
The cs-fonts are preloaded and A4 size implicitly defined.
\fout=\write0
^^e8esk^^fd text
\openout0 = `out.tex'.
 )
No pages of output.

a podivam se do out.tex:

cat out.tex
český text

shledavam, ze \immediate\write\fout se chova odlisne pri vystupu do
souboru nez pri lautr stejnem vystupu na terminal a do logu. Knuth by
se asi divil, co mu s TeXem udelali, ale vzdyt to vlastne neni TeX ale
TeXk. V TeXbooku jsem samozrejme nenasel explicitni zminku o tom, ze
\write\fout musi davat absolutne stejne vysledky do logu i do otevreneho
souboru. Clovek totiz veci, ktere povazuje za samozrejme, vetsinou moc
explicitne nezminuje.

Pokusim se dokumentovat, co ta binarka TeXku pro linux vlastne dela
(tu dokumentaci ovsem meli napsat autori TeXlive, bohuzel jsem ji
nikde nenasel a to byl hlavni duvod, proc me to zmatlo a rozseval jsem
mystifikace):

* TeXk rozlisuje vystupy do otevrenych \write souboru od vystupu na
  terminal a do logu (trebaze provedenych stejnym primitivem \write).
* Vystup do otevreneho \write souboru neni zavisly na locales ale jen
  na TCX tabulce.
* Vystup do otevreneho \write souboru bez pouziti TCX tabulky pouziva
  format ^^ab resp. ^^I pro vsechny znaky mimo obvyklych 96 tisknutelnych
  ASCII znaku.
* Zaznam v TCX tabulce pro dany znak zaruci, ze znak bude pri vystupu
  do otevreneho \write souboru tisten v nativni podobe (samozrejme po
  transformaci xchr vektorem).
* Vystup na terminal a do logu podleha nastaveni locales. Znaky jsou
  tisteny v nativni podobe (po transformaci xchr vektorem), pokud
  takto transformovane znaky jsou nastavenymi locales uznany jako
  povolene znaky. Pokud nejsou, je pouzit format ^^ab (hexa cislo
  samozrejme udava kod znaku pred tranformaci xchr vektorem).

Je obtizne tento krok programatoru TeXlive hodnotit. Asi je
akceptovatelne, ze vystup na terminal podleha locales, protoze zde TeXk
vyuziva sluzeb aplikace (v tomto pripade terminalu), ktera podleha urcitym
pravidlum a temto pravidlum by se mel i TeXk nejak podridit. Ja osobne bych
ale na locales pri vystupu na terminal netrval, ale budiz...

Na druhe strane uz neni moc omluvitelne, ze locales ovlivnuje vystup
do logu, protoze logy mohou byt cteny dalsimi programy, ktere
predpokladaji na systemu nezavisle chovani TeXu. Prikladem muze byt
TRIP nebo cstrip test, ale mozna by se nasly dalsi priklady. Pokud
neexistuji a nebudou existovat jine pripady pouziti logu pro opakovane
cteni, pak selhani cstrip testu bychom mohli povazovat za nepodstatne
a csplain na TeXlive2003 uznat csplainem. Bohuzel, tady si nejsem prave
tak uplne jist tou podminkou z predchozi vety.

Jeste z jineho soudku: cstrip test mi na TeXlive2003 havaroval jeste
na uplne jinem miste: udaje v dvi se lisi v posledni desetinne
cislici, tj. na urovni nanometru. Tento fenomen jsem jeste nikdy
nevidel (pritom testy tohoto druhu delam docela casto). Mohl by se
na to nekdo podivat a zjistit pricinu? Ja na to momentalne nemam cas
(osobne totiz TeXlive2003 zatim nepouzivam, takze me to tolik nepali).
Pokud si TeXk na poslednim desetinnem miste dela s rozmery co chce,
pak nemuze prece projit ani TRIPem. Nebo mi zase neco uniklo?

Zdravim

Petr Olsak







More information about the csTeX mailing list