[cstex] test na prázdný soubor?

petr-brezina at volny.cz petr-brezina at volny.cz
Fri Sep 4 02:14:17 CEST 2009


Petr Olsak 27. srpna 2009 napsal:

> Pak bude makro temer dokonale. Jen nebude umet rozlisit mezi prazdnym
> 
> > souborem a souborem obsahujicim jen libovolne mnozstvi mezer a tabelatoru.
> > I to muzete doresit prechodnym prenastavenim \catcode, pak bude snad
> makro
> > pracovat podle zadani spolehlive.
>
> Co si o tom kdo pomysli necham na kazdem z vas.


Zaprve jsem si pomyslel, ze k dokonalosti makra bych vyhodil ty tri prikazy
immediate a ze stejny nesmysl bych vyhodil v dodatku A Olsakova TST
pod heslem read a taky v dodatku E (tusim, ze je to tam v souvislosti
s prikazem softinput).

Zadruhe jsem si pomyslel, ze kdyby si Petr Sojka precetl pozorne muj
clanek ve Zpravodaji 4/2008 nebo Knuthuv TeXbook, usetril by si pouziti
prikazu message. Ve zminenem clanku by Petr Tomasek nasel jedno z moznych
vyuziti tohoto chovani TeXu; pravdepodobne to ale neni to, co vedlo
Knutha, aby se TeX takto choval.

Zatreti jsem si pomyslel, ze nechapu ten tanec s temi mezerami a tabelatory,
a ze bych se proto rad zeptal Petra Olsaka, jak to minil. Podle meho
predpokladu neni zapotrebi menit catcode k tomu, aby zde TeX rozlisoval
mezi prazdnym souborem (tj. s velikosti 0 bajtu) a souborem obsahujicim
jen radu mezer a tabelatoru (treba ani neukoncenou obvyklym eol). Svuj
predpoklad jsem experimentalne overil s kladnym vysledkem. Me soukrome
vysvetleni je toto: V pripade prazdneho souboru (velikost 0 bajtu) TeX
jen pripoji prazdny radek, ktery se pri obvyklem nastaveni promeni v
token par. V pripade souboru obsahujiciho pouze mezery a tabelatory
se TeX svyma ocima podiva na tento soubor, uvidi, ze tam neco je, a
zacne tedy zpracovavat radek (i kdyz neni ukonceny obvyklym eol), na
urovni input procesoru predevsim pripoji endlinechar; nasledne bude
tokenprocesor ignorovat pripadne mezery a tabelatory a ve stavu N promeni
endlinechar na token par; dalsim radkem je prazdny radek, ktery TeX
automaticky pripojil na konec souboru, ten take vyprodukuje token par.
Takze je zrejme, ze makro spolehlive rozlisi prazdny soubor od souboru
obsahujiciho jen libovolne mnozstvi mezer a tabelatoru, aniz by se muselo
hybat s catcode (samozrejme je ale zapotrebi toho vnoreneho ifeof).
Naopak makro nebude spravne fungovat, pokud by byl endlinechar nastaven
treba na minus jedna. V takovem pripade by ten automaticky prazdny radek
ani ten radek ze samych mezer a tabelatoru nevyprodukovaly zhola nic,
a proto by se v makru muselo testovat misto emptyfile pomoci empty,
anebo emptyfile definovat jako prazdne makro.

S pozdravem

Petr Brezina





More information about the csTeX mailing list