Seite 1 von 1
woher die Leerzeichen?
Verfasst: So 2. Feb 2014, 18:45
von MoonKid
Das Thema der mysteriösen Leerzeichen hatte ich schon. Scheinbar habe ich es aber nicht verstanden. Den in diesem Beispiel ist zwischen den X in der ersten Zeile, immer noch ein Leerzeichen.
\documentclass{scrartcl}
\usepackage{xltxtra}
\usepackage{polyglossia}
\setdefaultlanguage[spelling=new]{german}
\usepackage{ifthen}
\newcommand{\machs}[1] {%
\newcounter{paperandpencil2machs}
\setcounter{paperandpencil2machs}{#1}
\whiledo {\value{paperandpencil2machs} > 0}
{ %
X\ignorespaces
\addtocounter{paperandpencil2machs}{-1} %
} %
} %
\begin{document}
\machs{7}
XXXXXXX
\end{document}
Verfasst: So 2. Feb 2014, 19:22
von Gast
Du hast zwar schon richtig die restliche Zeile auskommentiert, aber leider war da immer noch ein Leerzeichen mit enthalten und dieses wird dann natürlich mit gezählt. Fügt dein Editor zufällig vor dem Prozentzeichen ein Leerzeichen mit ein?
\documentclass{scrartcl}
\usepackage{xltxtra}
\usepackage{polyglossia}
\setdefaultlanguage[spelling=new]{german}
\usepackage{ifthen}
\newcommand{\machs}[1]{%
\newcounter{paperandpencil2machs}
\setcounter{paperandpencil2machs}{#1}
\whiledo{\value{paperandpencil2machs} > 0}
{%
X%
\addtocounter{paperandpencil2machs}{-1}%
}%
} %
\begin{document}
\machs{7}
XXXXXXX
\end{document}
Verfasst: So 2. Feb 2014, 21:56
von cgnieder
Du hast ein paar Stellen, an denen Du das auskommentieren vergessen hast bzw. falsch gemacht hast:
\documentclass{scrartcl}
\usepackage{ifthen}
\newcommand{\machs}[1]{%
\newcounter{paperandpencil2machs}% <= hier nicht nötig aber empfohlen
\setcounter{paperandpencil2machs}{#1}% <= hier nötig
\whiledo{\value{paperandpencil2machs} > 0}
{% <= ganz heran rutschen
X% hier auch das Zeilenende verstecken
\addtocounter{paperandpencil2machs}{-1}% <= ganz heran rutschen
}% <= ganz heran rutschen
} % <= hier ist es nutzlos
\begin{document}
x\machs{7}x
\end{document}
Grüße
Verfasst: Mo 3. Feb 2014, 09:54
von 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.
Verfasst: Mo 3. Feb 2014, 10:01
von MoonKid
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?
Verfasst: Mo 3. Feb 2014, 10:29
von cgnieder
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