[cstex] Dirty trick s countery

Zdenek Wagner zdenek.wagner at gmail.com
Mon Sep 17 12:00:21 CEST 2012


Dne 17. září 2012 11:38 hajtmar <hajtmar at gyza.cz> napsal(a):
> Dobrý den.
> Díky pane Wagnere za reakci a tip. V lua by to šlo udělat docela dobře, ale
> v tuto chvíli mám bohužel důvod řešit to na úrovni TeXu ... navíc mne to
> zaujalo principielně :-)
> Pokud by Vás napadlo, v kterém "šuplíku" vám to skončilo, bylo by to moc
> príma :-)
> V tuto chvíli díky a jsem s pozdravem
>
Už jsem si vzpomně, je třeba rozebrat výstup \meaning. Teď jsem hodně
zaměstnán vlastní prací, ale jako inspiraci je vhodné začít s tímto
souborem, který nemá žádný výstup, jenom výsledky z \meaning zapíše do
logu:

\def\a{makro}
\newcount\cislo \cislo=5
\newdimen\rozmer
\newbox\krabice

\message{\meaning\a \meaning\cislo \meaning\rozmer \meaning\krabice
\meaning\nic}

\bye

Důležité je, že výstup z \meaning obsahuje mezery s kategorií 10 a
všechny ostatní znaky s kategorií 12. Nelze tedy při odchytávání
pomocným makrem s definovaným oddělovačem napsat slovo count, protože
znaky budou mít kategorii 11. Nelze při definici dočasně změnit
\catcode písmen, protože jméno makra je buď posloupnost písmen s
kategorií 11, nebo jeden znak jiné kategorie. Musí se tedy použít trik
s \lccode a \lowercase.

Teď mě napadá, že jsou podobné podmínky v balíčku microtype. Jsou tam
ovšem komplikovanější texty, protože se zkouší, jestli by to nešlo
řešit v lua nebo pomocí eTeXu.

> J.Hajtmar
>
>
> Od: cstex-bounces+hajtmar=gyza.cz at cs.felk.cvut.cz
> Komu: "Czech and Slovak TeX-related mailing list" cstex at cs.felk.cvut.cz
> Kopie:
> Datum: Mon, 17 Sep 2012 11:23:51 +0200
> Předmet: Re: [cstex] Dirty trick s countery
>
>> Dne 17. září 2012 6:54 Jaroslav Hajtmar napsal(a):
>> > Dobrý den.
>> > Nějak v poslední době nezaznamenávám v této konfeře život, a tak
>> > přicházím s
>> > nabídkou konečně veskrze kvalitního problému :-) ....
>> >
>> > Rád bych se zeptal, zda lze pomocí nějakého špinavého triku v TeXu
>> > vytvořit
>> > makro, které bude testovat existenci nějakého counteru, a které v
>> > případě
>> > jeho neexistence jej vytvoří a přiřadí mu jedničku, zatímco v případě
>> > jeho
>> > existence jej zvýší o jedničku?
>> >
>> > Mám na mysli něco takového (zapsáno symbolicky a naprosto šíleně):
>> >
>> > \def\createorincrementcounter#1{
>> > \if#1\isdefined\newcount#1 #1=1\else\advance#1 by1\fi
>> > }
>> >
>> > Nouzově připouštím i o něco méně šílenou variantu, která bude spočívat v
>> > tom, že předem vytvořím sadu několika counterů a následně bych je rád
>> > makrem
>> > incrementoval v tomto duchu:
>> >
>> > \newcount\myfirstcounter
>> > \newcount\mysecondcounter
>> > \newcount\mythirdcounter
>> >
>> > \def\advancecounter#1{\advance#1 by1}
>> >
>> > Tato konstrukce by měla umožnit makrem \advancecounter incrementovat
>> > hodnotu
>> > některého z čítačů tj. volání
>> > makra \advancecounter{myfirstcounter} zvýší čítač \myfirstcounter o
>> > jedničku, zatímco \advancecounter{mysecondcounter} incrementuje counter
>> > ´\mysecondcounter atd.
>> >
>> > Pokud by něco takového šlo, napsal bych následně k čemu to potřebuju
>> > :-)...
>> >
>> > Díky za případný zájem expertů typu pana Wagnera či pana Šustka ;-) ...
>> > ale
>> > i dalších abych někoho neurazil :-)
>> >
>> Já jsem kdysi něco podobného dělal, ale nevím, kde bych to teď našel.
>> Napíšu tedy jenom ideu. Testovat, zda řídící sekvence existuje, je
>> snadné. Pokud existuje, je nutno ještě zjistit, jestli je to counter.
>> Musel bych zapátrat v primitivech, jak se to přesně dělá, \show vypíše
>> informace do logu, ale nějak jsem to dokázal dostat do TeXu. A
>> rozborem textu jsem zjišťoval, jestli je to counter.
>>
>> BTW: asi by to šlo zjistit pomocí lua.
>>
>> > Pěkný den s mým červíkem v hlavě přeje
>> > Jarda Hajtmar
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> > _______________________________________________
>> > 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
>>
>> _______________________________________________
>> csTeX mailing list
>> csTeX at cs.felk.cvut.cz
>> http://lists.felk.cvut.cz/mailman/listinfo/cstex
>
> _______________________________________________
> 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