heinzi
16-02-2011, 17:08
Hallo,
ich möchte einen LaTeX-Befehl definieren, mit dem ich an eine im Hintergrund existierende Variable Text anhängen kann. Ein anderer Befehl soll den Inhalt der Variable ausgeben.
Beispiel:
\insert{text1}
\insert{text2}
\print
Die \insert-Befehle sollten gar nichts ausgeben, der \print-Befehl dann "text1text2".
Mein erster Versuch sah folgendermaßen aus:
\documentclass[a4paper,10pt]{scrartcl}
\usepackage[utf8x]{inputenc}
\usepackage{ngerman}
\begin{document}
\newcommand{\insertdata}[1]
{
\let\origdata\listdata
\renewcommand*{\listdata}{\origdata #1}
}
\newcommand*\origdata{}
\newcommand*\listdata{}
\insertdata{bla}
\insertdata{test}
\listdata
\end{document}
Hier bekomme ich die Fehlermeldung "TeX capacity exceeded, sorry [input stack size=5000]".
Ich weiß ehrlich gesagt nicht, was \noexpand macht, aber mit folgender Änderung scheint es zumindest keinen Stackoverflow mehr zu geben:
\newcommand{\insertdata}[1]
{
\let\origdata\listdata
\renewcommand*{\listdata}{\noexpand\origdata #1}
}
\newcommand*\origdata{}
\newcommand*\listdata{}
Dafür gibt er aber nur "test" aus und vergisst den Text des ersten \insertdata-Aufrufes.
Ein anderer Ansatz war folgender:
\newcommand{\insertdata}[1]
{
\makeatletter
\g@addto@macro{\listdata}{#1}
\makeatother
}
\newcommand*\origdata{}
\newcommand*\listdata{}
Hier behauptet er nun "Undefined control sequence \insertdata".
Gibt es einen Weg, die von mir gewünschte Funktionalität zu erhalten?
ich möchte einen LaTeX-Befehl definieren, mit dem ich an eine im Hintergrund existierende Variable Text anhängen kann. Ein anderer Befehl soll den Inhalt der Variable ausgeben.
Beispiel:
\insert{text1}
\insert{text2}
Die \insert-Befehle sollten gar nichts ausgeben, der \print-Befehl dann "text1text2".
Mein erster Versuch sah folgendermaßen aus:
\documentclass[a4paper,10pt]{scrartcl}
\usepackage[utf8x]{inputenc}
\usepackage{ngerman}
\begin{document}
\newcommand{\insertdata}[1]
{
\let\origdata\listdata
\renewcommand*{\listdata}{\origdata #1}
}
\newcommand*\origdata{}
\newcommand*\listdata{}
\insertdata{bla}
\insertdata{test}
\listdata
\end{document}
Hier bekomme ich die Fehlermeldung "TeX capacity exceeded, sorry [input stack size=5000]".
Ich weiß ehrlich gesagt nicht, was \noexpand macht, aber mit folgender Änderung scheint es zumindest keinen Stackoverflow mehr zu geben:
\newcommand{\insertdata}[1]
{
\let\origdata\listdata
\renewcommand*{\listdata}{\noexpand\origdata #1}
}
\newcommand*\origdata{}
\newcommand*\listdata{}
Dafür gibt er aber nur "test" aus und vergisst den Text des ersten \insertdata-Aufrufes.
Ein anderer Ansatz war folgender:
\newcommand{\insertdata}[1]
{
\makeatletter
\g@addto@macro{\listdata}{#1}
\makeatother
}
\newcommand*\origdata{}
\newcommand*\listdata{}
Hier behauptet er nun "Undefined control sequence \insertdata".
Gibt es einen Weg, die von mir gewünschte Funktionalität zu erhalten?