woher die Leerzeichen?

Fragen und Probleme, die nicht den obigen Kategorien zugeordnet werden können


MoonKid
Forum-Meister
Forum-Meister
Beiträge: 690
Registriert: Sa 30. Jun 2012, 11:56

woher die Leerzeichen?

Beitrag 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}
XeLaTeX, TeX Live, vim-latexsuite

Gast

Beitrag 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}

Benutzeravatar
cgnieder
Forum-Meister
Forum-Meister
Beiträge: 730
Registriert: Fr 22. Okt 2010, 18:37
Wohnort: Herrenberg
Kontaktdaten:

Beitrag 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
Clemens
Paketauthor

rais
Forum-Guru
Forum-Guru
Beiträge: 413
Registriert: Di 21. Sep 2010, 00:37

Beitrag 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.
One of the joys of travel is visiting new towns and meeting new people---G.Khan (Robert Asprin, Another Fine Myth)

MoonKid
Forum-Meister
Forum-Meister
Beiträge: 690
Registriert: Sa 30. Jun 2012, 11:56

Beitrag 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?
XeLaTeX, TeX Live, vim-latexsuite

Benutzeravatar
cgnieder
Forum-Meister
Forum-Meister
Beiträge: 730
Registriert: Fr 22. Okt 2010, 18:37
Wohnort: Herrenberg
Kontaktdaten:

Beitrag 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
Clemens
Paketauthor

Antworten