[cstex] Dirty trick s countery
Tomas Hala
thala at pef.mendelu.cz
Mon Sep 17 12:40:35 CEST 2012
A taky nefunguje, špatně jsem testoval, pardon.
Ale toto by mohlo jít:
\def\zkusmebez#1{
\expandafter\newcount\csname#1\endcsname
\advance\csname#1\endcsname by 1
\the\abc % pro kontrolu
}
A je to i s tím špinavým trikem, protože se mi zdá, že druhé a další
\newcount na stejný identifikátor nejenže nehlásí chybu, ale také nezničí
již uloženou hodnotu.
Tomáš Hála
# >
# > A ještě jsem to preventivně vyřešil i pro ten případ bez lomítka:
# >
# > \def\zkusmebez#1{
# > \ifx\csname#1\endcsname\undefined
#
# Tohle nemůže fungovat, protože se bude testovat shoda \csname s prvním
# tokenem expandovaného parametru, což asi nikdy \csname nebude. Před
# \ifx chybí \expandafter. Stále však není ošetřen případ, kdy je
# kontrolní sekvence definována, ale není to counter.
#
# > \newcount\csname#1\endcsname \csname#1\endcsname=1
# > \else
# > \advance\csname#1\endcsname by 1
# > \fi
# >
# > \the\abc % pro kontrolu
# > }
# >
# > Vyhovuje?
# >
# > Tom
# >
# >
# >
# > Mon, Sep 17, 2012 ve 11:41:53AM +0200 Tomas Hala napsal(a):
# > #
# > # Ahoj,
# > #
# > # právě takto to funguje (vyzkoušeno):
# > #
# > # \def\zkusme#1{
# > # \ifx#1\undefined
# > # \newcount#1 #1=1
# > # \else
# > # \advance#1 by 1
# > # \fi
# > # \the\abc % pro kontrolu
# > # }
# > # \zkusme{\abc}
# > # \zkusme{\abc}
# > # \zkusme{\abc}
# > #
# > # Lišíme se akorát v lomítku (\abc vs. abc).
# > # Je to lomítko problém, nebo ne?
# > #
# > # Tom
# > #
# > # ------------------------
# > #
# > # Mon, Sep 17, 2012 ve 11:32:04AM +0200 Jaroslav Hajtmar napsal(a):
# > # # Dobrý den.
# > # # Díky za reakci a za čistý trik :-) , ale bohužel potřebuju tento test
# > # # a tuto věc udělat uvnitř makra.
# > # #
# > # # tj. něco takového
# > # #
# > # # \def\mymacro#1{
# > # # \ifx#1\undefined \newcount#1 #1=1
# > # # \else \advance#1 by1
# > # # \fi
# > # # }
# > # #
# > # # takže po volání makra by to mělo vracet výsledky takto :
# > # #
# > # # \newcount\ahoj
# > # #
# > # # \mymacro{ahoj}
# > # # \the\ahoj % -----> 1
# > # # \mymacro{ahoj}
# > # # \the\ahoj % -----> 2
# > # # \mymacro{ahoj}
# > # # \the\ahoj % -----> 3
# > # # \mymacro{ahoj}
# > # # \the\ahoj % -----> 4
# > # #
# > # #
# > # # Díky Jarda Hajtmar
# > # #
# > # #
# > # #
# > # # Dne 17. září 2012 9:16 Tomas Hala <thala at pef.mendelu.cz> napsal(a):
# > # # >
# > # # > Ahoj,
# > # # >
# > # # > nastačil by Ti čistý trik?:-)
# > # # >
# > # # > \newcount\abc \abc=66
# > # # > %\newcount\xyz
# > # # >
# > # # > \ifx\xyz\undefined \newcount\xyz \xyz=1
# > # # > \else \advance\abc by 1 N
# > # # > \fi
# > # # >
# > # # > Tom H.
# > # # >
# > # # > -------
# > # # >
# > # # > Mon, Sep 17, 2012 ve 06:54:48AM +0200 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 :-)
# > # # > #
# > # # > # Pěkný den s mým červíkem v hlavě přeje
# > # # > # Jarda Hajtmar
# > # # > #
# > # # > #
More information about the csTeX
mailing list