Variableninhalt über mehrere Absätze

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


IrenaSekuta
Forum-Century
Forum-Century
Beiträge: 230
Registriert: Di 2. Dez 2008, 10:05

Variableninhalt über mehrere Absätze

Beitrag von IrenaSekuta »

Hallo zusammen,

ich möchte mir gerne Variablen generieren, die auch längere textpassagen enthalten können, eventuell sogar innerhalb dieser Textpassagen auch Bilder oder Tabellen.

Anbei ein einfaches Minimalbeispiel:

Code: Alles auswählen

\documentclass{scrreprt}
\usepackage[T1]{fontenc}
\usepackage[ansinew]{inputenc}
\usepackage[ngerman]{babel}


\newcommand{\varA}{Erste Zeile

Zweite Zeile...}

\begin{document}
\varA
\end{document}
Ist diese Vorgehensweise anzuraten oder gibt es da bessere Möglickeiten. Die Möglichkeit mit \input ist mir bekannt. Gibt es zu obiger vorgehensweise und der Vorgehensweise mit CVariablen einen gravierenden Unterschied?

Gruß,

Irena

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2641
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

noch 21

Beitrag von KOMA »

Etwas unbefriedigend ist das Verhalten von LaTeX, wenn in einer solchen Variablen ein Fehler enthalten ist. Du kannst das ja einmal ausprobieren, indem Du beispielsweise ein \endgroup oder sogar ein \DasIstEinBug irgendwo in der Variablen aus Deinem Beispiel einfügst.

Was Du da definierst, ist übrigens nicht wirklich eine Variable, sondern ein Makro. Das ist durchaus ein Unterschied. Die Unterschiede haben etwas damit zu tun, dass Makros expandiert werden, während Variablen Werte haben, die man setzen und abrufen kann. Ein Makro hat etwas von einer Funktion ist aber trotzdem auch keine Funktion. Wenn man wirklich wissen will, wie Makros funktionieren, sollte man sich etwas mit TeX selbst und der Expansion beschäftigen (→ »The TeX book« oder »TeX by Topic«).

Eine Alternative zu Makros sind übrigens Boxen. Hier sei dann ausdrücklich auf die im usrguide dokumentierte lrbox-Umgebung hingewiesen.

Eine weitere Alternative zu Makros sind Tokenregister. Das ist dann aber schon wieder etwas, bei dem na sich mit »The TeX book« oder »TeX by Topic« beschäftigen sollte.

Dass es so viele teilweise recht unterschiedliche Konzepte in TeX gibt, macht es übrigens nicht leichter TeX zu verstehen und oft auch nicht, es zu beherrschen.

Um zu Deinem Vergleich mit einer Variablen in C zurück zu kommen: Das sind zwei recht unterschiedliche Dinge. Nehmen wir das folgende Beispiel in C:

Code: Alles auswählen

Vara=1
Varb=a
Vara=2
dann ist Varb am Ende dieses Beispiels bei einem Zugriff »1«.
Machen wir das mit Makros in LaTeX:

Code: Alles auswählen

\newcommand*{\Vara}{1}
\newcommand*{\Varb}{\Vara}
\renewcommand*{\Vara}{2}
dann ergibt eine Expansion von \Varb nach diesem Beispiel »2«. Die Expansion kann sogar zu einem Fehler führen, wenn man beispielsweise ein \let\Vara\UnDeFined ergänzt.

Statt mit Makros zu arbeiten, kann man übrigens auch mit dem Paket filecontents und \input arbeiten. Das ist in vielen Fällen besser zu beherrschen und man bekommt Fehler wenigstens halbwegs gut gemeldet (wenn auch in der erzeugten Datei, statt in der Datei-erzeugenden Datei).
Zuletzt geändert von KOMA am Fr 5. Feb 2010, 10:36, insgesamt 1-mal geändert.

IrenaSekuta
Forum-Century
Forum-Century
Beiträge: 230
Registriert: Di 2. Dez 2008, 10:05

Danke schön !!!

Beitrag von IrenaSekuta »

Hallo KOMA,

recht herzlichen Dank für die tolle Erklärung. Ich werde mir dann erst einmal die von Dir aufgeführte Literatur zu Gemüte führen und erst einmal bei \input bleiben.

Gruß,

Irena

Antworten