PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Befehle erweitern ohne Rekusion



rafael
17-03-2010, 19:26
Hallo,
ich möchte im Laufe meines Dokuments Daten in einem Befehl sammeln (und keine externe Datei eröffnen), den ich zwischendurch oder am Ende aufrufe. Dazu habe ich mich einer Lösung aus dem Forum bedient, die leider eine Rekusion erzeugt. Ich habe keine Ahnung, wie der Fehler beseitigt werden kann


\documentclass{scrartcl}

\newcommand{\enclContent}{}
\newcommand{\Anlage}[1]{%
\let\enclTemp\enclContent
\def\enclContent{\enclTemp\ #1}
}

\begin{document}

\Anlage{Eins}
\enclContent%noch ist alles gut

\Anlage{Zwei}
\enclContent%das klappt schon nicht mehr
\end{document}

sommerfee
17-03-2010, 20:00
\makeatletter
\newcommand{\enclContent}{}
\newcommand{\Anlage}[1]{%
\g@addto@macro\enclContent{\ #1}%
}
\makeatother


HTH,
Axel

rafael
17-03-2010, 20:05
HTH,
Axel
danke Axel, funzt wie gewünscht. Über den Befehl

\g@addto@macro
haben sich die Experten Stefan_K, voss und rais schon mal an anderer Stelle ausgelassen. Scheinbar funktioniert er nicht immer. Was sollte ich mir denn bezüglich seiner Anwendbarkeit und Funktionsweise merken?
Grüße
Rafael

mechanicus
17-03-2010, 20:20
Hi,

es geht auch

\documentclass{scrartcl}

\newcommand{\enclContent}{}
\newcommand{\Anlage}[1]{%
\let\enclTemp\enclContent
\edef\enclContent{\enclTemp\ #1}
}

\begin{document}

\Anlage{Eins}
\enclContent%noch ist alles gut

\Anlage{Zwei}
\enclContent%das klappt schon nicht mehr

\Anlage{Drei}
\enclContent

\Anlage{Vier}
\enclContent
\end{document}

Gruß
Marco

EDIT oder:

\documentclass{scrartcl}

\newcommand{\enclContent}{}
\newcommand{\Anlage}[1]{%
\edef\enclContent{\enclContent\ #1}
}

\begin{document}

\Anlage{Eins}
\enclContent%noch ist alles gut

\Anlage{Zwei}
\enclContent%das klappt schon nicht mehr

\Anlage{Drei}
\enclContent

\Anlage{Vier}
\enclContent
\end{document}

mechanicus
17-03-2010, 20:31
Was sollte ich mir denn bezüglich seiner Anwendbarkeit und Funktionsweise merken?
scrguide:


\g@addto@macro{Anweisung }{Erweiterung }

Der LATEX-Kern bietet mit \g@addto@macro eine interne Anweisung, um
die Definition eines Makro Anweisung global um den Code Erweiterung
zu erweitern. Dies funktioniert in dieser Form nur für Makros ohne Ar-
gumente


Gruß
Marco

rafael
17-03-2010, 21:14
Vielen Dank mechanicus,
dann gefällt mir

\newcommand{\enclContent}{}
\newcommand{\Anlage}[1]{%
\edef\enclContent{\enclContent\ #1}
}

am besten. Jetzt verstehe ich auch die Funktion von \edef.

lockstep
18-03-2010, 00:57
Wenn man ein Makro mit Argument um einen bestimmten Code erweitern möchte - am Ende, aber auch am Beginn des ursprünglichen Makros -, gibt es \apptocmd und \pretocmd aus dem Paket etoolbox (http://www.ctan.org/tex-archive/help/Catalogue/entries/etoolbox.html).

lockstep