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

T.K. motarecuk at seznam.cz
Fri Feb 8 13:15:55 CET 2013


Děkuji všem za odpovědi, pomohly mi odhalit pravou příčinu, která ale
byla někde jinde. Po doplnění \relax za dvanáctku minimální příklad
fungoval, v mém původním souboru ale ten \relax už byl! Jen kvůli tomu
zapomenutému \relaxu končil i min. příklad stejnou chybou, jako původní
makro. Takže skutečnou příčinu jsem při tvorbě minimálního příkladu ze
souboru „vyminimalizoval“. Už jsem ji našel, ale radši se tu nebudu
přiznávat, co to bylo… Přínos pro ostatní by byl stejně nulový.

Ještě jednou díky!

Tomáš Kučera





Dne 8.2.2013 11:09, Zdenek Wagner napsal(a):
> 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
> 
> 
> 



More information about the csTeX mailing list