[cstex] Plain: parametr se zpětným lomítkem

Zdenek Wagner zdenek.wagner at gmail.com
Fri Feb 8 11:09:54 CET 2013


Dne 8. února 2013 10:37 T.K. <motarecuk at seznam.cz> napsal(a):
> Dobrý den,
>            prosím o "nakopnutí", evidentně něco přehlížím.
>
> Potřebuji (v plainu), aby \mojemakro pracovalo s obsahem parametru,
> který může případně mít na konci zpětné lomítko (coby běžný znak).
> Myslel jsem, že to umožním tak, že \mojemakro (definované bez parametru)
> jen otevře skupinu, v ní změní kategorii zpětného lomítka na 12 a spustí
> \pomocnemakro, které načte parametr, zpracuje ho a uzavře skupinu.
> Jenže zpětné lomítko i tak očividně zneviditelňuje pravou složenou
> závorku jako konec čtení parametru. Kde je, prosím, zakopaný pes?
> Předem díky
> Tomáš Kučera
>
> Minimalizovaný soubor:
>
> \def\mojemakro{\bgroup\catcode`\\=12\pomocnemakro}

Chybí mezera za dvanáctkou. Ta mezera totiž ukončí syntaktické
pravidlo <číslo>. V této podobě se totiž začne expandovat \pomocne
makro ještě před změnou kategorie, tj. TeX dostane:

\catcode`\\=12{abc\}

Vše ve složených závorkách je načteno ještě před změnou kategorie. Pak
teprve má procesor šanci zjistit, ža číslo je 12, ale už dříve najde
problém se závorkami. Mezera způsobí, že se kategorie změní ještě před
expanzí makra \pomocnemakro.

> \def\pomocnemakro#1{#1\egroup}

Mimochoden, v této definici se dá otočit pořadí:

\def\pomocnemakro#1{\egroup#1}

Token se totiž načetl ještě před \egroup, tedy zpětné lomítko mělo
kategorii 12. Pak máte možnost v definici snadno použít kontrolní
sekvence, např. lze psát:

\def\pomocnemakro#1{\egroup{\tt #1}}

> \mojemakro{abc\}
> \bye
> _______________________________________________
> csTeX mailing list
> csTeX at cs.felk.cvut.cz
> http://lists.felk.cvut.cz/mailman/listinfo/cstex



-- 
Zdeněk Wagner
http://hroch486.icpf.cas.cz/wagner/
http://icebearsoft.euweb.cz




More information about the csTeX mailing list