PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Leerzeichen aus Text entfernen



pantsula
26-04-2011, 13:04
Hallo allesamt,

ich bastel an einem macro, das die Leerzeichen aus einem Text entfernt. Dazu habe ich hier:
http://www.tug.org/TUGboat/Articles/tb28-1/tb88glister.pdf
ein Codebeispiel gefunden, welches auch wunderbar funktioniert, so lange ich den zu schneidenden Text direkt als Argument des Macros eingebe.
Jetzt möchte ich den Text aber nicht direkt eingeben, sondern dieser Text soll als Macro hinterlegt sein. In diesem Fall werden die Leerzeichen nicht entfernt.

Hier mal mein Minimalbeispiel:



\documentclass{article}

\makeatletter

\catcode`\^^G=12
\newcommand*{\allchars}[1]{%
\def\stuff{#1}\ifx\stuff\@empty\else
\@llchars#1^^G\fi}
\def\@llchars#1#2^^G{%
\def\letter{#1}\def\others{#2}%
\ifx\letter\@empty\let\next\@gobble
\else
#1%
\ifx\others\@empty \let\next\@gobble
\else \let\next\@llchars \fi
\fi
\next#2^^G}
\catcode`\^^G=15

\newcommand{\mytext}{durch Leerzeichen getrennter Text}

\makeatother

\begin{document}

\allchars{durch Leerzeichen getrennter Text}

\allchars{\mytext}

\end{document}


Woran liegt das, und wie kann ich trotzdem ein Macro 'beschneiden'? Einfach ein \expandafter vor das \allchars setzen, so dass \mytext zuerst expandiert wird funktioniert nicht.

Vielen Dank schonmal!

u_fischer
26-04-2011, 13:21
Ein \expandafter reicht nicht. \expandafter expandiert ja das zweite Token. Das erste Token ist \allchars, das zweite ist die Klammer "{". Um das dritte Token zu erreichen brauchst du zwei \expandafter:


\expandafter\allchars\expandafter{\mytext}

pantsula
26-04-2011, 15:24
Super! Das klappt. Und ich habe mal wieder was gelernt.

Vielen Dank!