von cgnieder » Mo 3. Feb 2014, 10:29
MoonKid hat geschrieben:rais hat geschrieben:das hat zwar mit dem Problem nichts mehr zu tun, aber ich würde die Zählerdefinition vor die Definition von \machs ziehen: spätestens beim zweiten \machs-Aufruf bekommst Du sonst das Problem, dass Dein Zähler erneut definiert werden will.
Verstehe. Aber dann existiert der Zähler ja global in jedem Code und jedem verwendeten Packet. Das will ich eigentlich vermeiden. Ich möchte (C++-denkend) den Zähler nur in dem Makro gültig haben.
Beim Beenden wird er zerstört - dachte ich.
Wie wäre es einfach mit einer Art undef am Ende des Makros?
Denk daran, dass Makros lediglich Hüllen sind, die mit ihrem Ersetzungstext ausgetauscht werden. Mit der Definition
\newcommand{\machs}[1]{%
\newcounter{paperandpencil2machs}%
\setcounter{paperandpencil2machs}{#1}%
\whiledo{\value{paperandpencil2machs} > 0}
{%
X%
\addtocounter{paperandpencil2machs}{-1}%
}%
}
hat das verwenden von \machs{7} den Effekt als hättest Du direkt
\newcounter{paperandpencil2machs}%
\setcounter{paperandpencil2machs}{7}%
\whiledo{\value{paperandpencil2machs} > 0}
{%
X%
\addtocounter{paperandpencil2machs}{-1}%
}%
geschrieben. Ich würde einfach Rainers Vorschlag folgen. Selbst eine Gruppe würde Dir in diesem Fall nicht helfen, da Zähler global definiert werden. Einen Zähler (und alle damit assoziierten Makros zu löschen ist ersten aufwendiger und zweitens eigentlich gar nicht möglich. Man könnte die Makros lediglich gleich \relax oder gleich einem undefinierten Makro setzen.)
Grüße
[quote="MoonKid"][quote="rais"]das hat zwar mit dem Problem nichts mehr zu tun, aber ich würde die Zählerdefinition vor die Definition von \machs ziehen: spätestens beim zweiten \machs-Aufruf bekommst Du sonst das Problem, dass Dein Zähler erneut definiert werden will.[/quote]
Verstehe. Aber dann existiert der Zähler ja global in jedem Code und jedem verwendeten Packet. Das will ich eigentlich vermeiden. Ich möchte (C++-denkend) den Zähler nur in dem Makro gültig haben.
Beim Beenden wird er zerstört - dachte ich.
Wie wäre es einfach mit einer Art undef am Ende des Makros?[/quote]
Denk daran, dass Makros lediglich Hüllen sind, die mit ihrem Ersetzungstext ausgetauscht werden. Mit der Definition
[code]\newcommand{\machs}[1]{%
\newcounter{paperandpencil2machs}%
\setcounter{paperandpencil2machs}{#1}%
\whiledo{\value{paperandpencil2machs} > 0}
{%
X%
\addtocounter{paperandpencil2machs}{-1}%
}%
}[/code]
hat das verwenden von \machs{7} den Effekt als hättest Du direkt
[code]
\newcounter{paperandpencil2machs}%
\setcounter{paperandpencil2machs}{7}%
\whiledo{\value{paperandpencil2machs} > 0}
{%
X%
\addtocounter{paperandpencil2machs}{-1}%
}%[/code]
geschrieben. Ich würde einfach Rainers Vorschlag folgen. Selbst eine Gruppe würde Dir in diesem Fall nicht helfen, da Zähler global definiert werden. Einen Zähler (und alle damit assoziierten Makros zu löschen ist ersten aufwendiger und zweitens eigentlich gar nicht möglich. Man könnte die Makros lediglich gleich \relax oder gleich einem undefinierten Makro setzen.)
Grüße