\catcode...=\active v \newenvironment

Rylek Tomas RYLEK at cslab.felk.cvut.cz
Fri Jan 10 14:21:57 CET 1997


    Vazeny pane kolego!

> Potreboval bych na zacatku prostredi definovaneho pomoci
> \newenvironment priradit znakum @ a | makro:
>
> \newenvironment{zkouska}[1]
>       {\catcode`\@=\active
>        \def@{\makro1}
>        \catcode`\|=\active
>        \def|{\makro2}
>        ....
>       }
> a na konci vratit znaky zpet
>       {
>        \catcode`\@= 12
>        \catcode`\|= 12
>        ....
>       }
> LaTeXu se to ale nelibi. Lze to vubec nejak udelat?

Tohle je problem, ktery se tu resil asi pred ctvrt rokem; pritrz vice
ci mene presnym spekulacim ze strany ruznych prispevatelu ucinil
vycerpavajici popis celeho problemu od pana Olsaka; takze nejlepsi by
bylo vyhledat si ho v archivu teto konference, ktery - pokud vim -
existuje a je pristupny bud pres WWW, nebo pres gopher, presne
bohuzel nevim. Dalsi moznost je kniha o TeXu od pana Olsaka, ktera
ovsem zrejme jeste nevysla ;-(.

Jenom strucne vylicim problem: vstupni soubor se v jinou chvili `cte'
a v jinou chvili `zpracovava'; takze v tu chvili, kdy TeX dorazi na
misto prikazu \def@{...}, nerozpozna znak `@' jako makro, protoze
tento znak byl ze vstupu nacten pred tim, nez se provedla zmena jeho
catcode.

Problem je treba resit tak, ze ve VNEJSI UROVNI je treba ten \catcode
zmenit pred definici \newenvironment. Tedy napr. (trochu to zkracuji):

\catcode`@=\active % pro cteni prikazu \newenvironment
\newenvironment{zkouska}%
{\catcode`@=\active % tohle se provede pri aktivaci prostredi
\def@{\makro}}%
{\catcode`@=12} % tohle se provede pri deaktivaci prostredi
\catcode`@=12 % koncime pomocne predefinovani vyznamu znaku @

                                                 S pozdravem

                                                        Tomas Rylek



More information about the csTeX mailing list