PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wort zu einer Liste hinzufügen



pantsula
12-08-2009, 18:10
Hallo allesamt,

ich versuche gerade einen Befehl zu schreiben, komme aber leider nicht weiter.
Ich möchte eine Liste mit Einträgen erstellen, welche durch Kommas getrennt sind (wort1,wort2,wort3,...). Diese Liste soll durch den Befehl \dazu{wort4} erweiterbar sein, so dass das 'wort4' an die alte Liste angehängt wird.

Mein Versuch dazu war folgender:



\documentclass{scrartcl}

\newcommand{\Liste}{}
\newcommand{\alteListe}{}
\newcommand{\neuListe}{}

\newcommand{\dazu}[1]{%
\renewcommand{\neuListe}{#1}%
\renewcommand{\Liste}{\expandafter\expandafter\exp andafter%
{\expandafter\alteListe \expandafter\neuListe}}%
\let\alteListe\Liste%
}%

\begin{document}

\dazu{eins}
\dazu{zwei}
Das ergibt: \Liste

\end{document}


Leider hängt sich Tex dabei auf, da das ganze dann in einer Schleife endet und die TeX capacity exceeded.
Und das, obwohl ich doch schon so viele \expandafter eingebaut habe, um das \let\alteListe\Liste zu überbrücken :-(

Habt ihr eine Idee, wo es da hakt?

mechanicus
12-08-2009, 18:52
Hallo,


\documentclass{scrartcl}
\usepackage{amsmath}

\makeatletter
\def\Liste{}
\newcommand{\dazu}[1]{%
\let\TempA=\Liste
\ifx\Liste\@empty
\def\Liste{#1}
\else
\def\Liste{\TempA, #1}
\fi
}
\makeatother
\begin{document}
\dazu{eins}\verb+\dazu{eins}+
Das Ergibt \Liste

\dazu{zwei}\verb+\dazu{zwei}+
Das ergibt: \Liste
\end{document}

So?

Gruß
Marco

BeniBela
12-08-2009, 18:52
So vielleicht?
Dann hast du die Liste in einer Box



\newsavebox{\Liste}
\newcommand{\dazu}[1]{\savebox{\Liste}{\usebox{\Liste} #1}}

\begin{document}
\dazu{abc}
\dazu{def}
\dazu{xyz}
\dazu{123}


\usebox{\Liste}

\end{document}

u_fischer
12-08-2009, 18:55
In den meisten Fällen reicht sowas:

\documentclass[oneside]{book}
\newcommand\Liste{}
\newcommand\Komma{}
\newcommand\dazu[1]{%
\edef\Liste{\Liste\Komma#1}%
\renewcommand\Komma{,}}

\begin{document}
\dazu{eins}
\dazu{zwei}
\Liste
\end{document}[CODE]

Oder du nimmst \g@addto@macro:

[CODE]\documentclass[oneside]{book}
\newcommand\Liste{}
\newcommand\Komma{}
\makeatletter
\newcommand\dazu[1]{%
\g@addto@macro\Liste{\Komma\renewcommand\Komma{,}# 1}%
}

\begin{document}
\dazu{eins}
\dazu{zwei}
\Liste
\end{document}

pantsula
12-08-2009, 20:10
Oh, super, das \g@addto@macro kannte ich nicht. Das macht es natürlich einfach!

Vielen Dank für die schnellen Antworten