\newenvironment Wiki .:. goLaTeX - Mein LaTeX-Forum


goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum

goLaTeX.de - Wiki
 


\newenvironment

Eine neue Umgebung definieren.

Inhaltsverzeichnis

[bearbeiten] Verwendung

Syntax:

\newenvironment{UMGEBUNGSNAME}[ANZAHL][OPTIONAL]{BEGIN}{END}

Mittels dieses Konstrukts lassen sich neue Umgebungen in LaTeX definieren. Diese im Header vorgenommene Definition kann von Benutzer dann im eigentlichen Dokument wie jeder andere LaTeX-Befehl verwendet werden. Er ist allerdings nur für das Dokument gültig in dem er definiert ist.

Genau wie \renewcommand bietet auch \renewenvironment zwei optionale Argumente. Hier können wiederum Argumente für die Umgebung definiert werden. Ähnlich wie die table-Umgebung können dann frei gewählte Argumente genutzt werden. Allerdings können die üblichen Argumente der Form #1, #2, wie wir sie aus anderen Befehlsdefinitionen kennen, nur im BEGIN-Bereich der Umgebung verwendet werden. Dies kann aber mit einem einfachen Trick umgangen werden. Mehr dazu im Beispiel.

[bearbeiten] Parameter

UMGEBUNGSNAME
Der Name der zu definierenden Umgebung
ANZAHL
Dieser Parameter ist optional und definiert die Anzahl der Argumente zwischen 1 und 9
OPTIONAL
Soll das vorgesehenen Argumente optional sein, so kann der Defaultwert für dieses hier angegeben werden. Wird dieses optionale Argument einschließlich der eckigen Klammern bei Verwendung der neu definierten Umgebung nicht angegeben, so wird dann stattdessen der Defaultwert verwendet.
BEGIN
Eine Befehlsdefinition. Verwendung der übergebenen Argumente nur hier.
END
Eine Befehlsdefinition

[bearbeiten] Beispiel

In folgendem Beispiel werden verschiedene Möglichkeiten einer Umgebungsdefinition gezeigt. Am Beispiel der dritten Umgebungsdefinition wird nun das Vorgehen Schritt für Schritt erläutert.

Zunächst führen wir einen neuen Befehl ein.

\newcommand*{\ObligAbstand}{}

Dies ist wichtig denn wir wollen später das obligatorische Argument in der Definition des END-Bereichs ebenfalls benutzen. Standardmäßig über die Argumentenbezeichner #1, #2 usw, geht dies nicht. Diese sind nach der Definition des BEGIN-Bereichs nicht mehr verfügbar. Indem wir später im BEGIN-Bereich das obligatorische Argument als Wert einem Befehl zuweisen, speichern wir Ihn sozusagen zwischen. Nun beginnt die eigentliche Definition der Umgebung.

\newenvironment{KleinerAbsatzmitAbstand}

Nach der Namensdefinition folgt die Anzahl der Argumente, sowie der Defaultwert des einen Arguments, dass optional sein soll. Wird hier nichts angegeben sind beide Argumente obligatorisch und keines optional. Wir setzen hier als Defaultwert den neuen Befehl ein und damit den Wert der sich hinter diesem Befehl verbirgt bzw. verbergen wird.

[2][\ObligAbstand]

Nun sind sowohl der Umgebungsname und die Argumente festgelegt. Fehlt nur noch die eigentliche Umgebung. Kümmern wir uns zunächst um den Anfang der Umgebung der BEGIN-Bereich. Als erstes belegen wir unseren neuen Befehl mit dem Wert des obligatorischen Arguments.

\renewcommand*{\ObligAbstand}{#2}

Nachdem wir das obligatorische Argument gespeichert haben, verwenden wir nun das optionale Argument zum Einfügen eines vertikalen Abstandes.

\par\vspace{#1}

Sollte auf die Eingabe des optionalen Arguments verzichtet werden, so ist nach unserer Definition der Wert des optionalen Arguments #1=\ObligAbstand also dem zwischengespeicherten obligatorischen Arguments. Nun sind wir eigentlich fertig. Aber halt. Wer die Schriftgröße ändert muss sich bewusst sein, das Dinge wie 1em, 1ex, \baselineskip oder \parskip von der Schriftgröße abhängen. Da sich diese von der Schriftgröße abhängigen Längen vor dem kleinen Absatz und nach dem kleinen Absatz gleich verhalten sollen, fügen wir noch eine Group ein. Dann können wir danach problemlos die Schriftgröße ändern.

\begingroup
   \tiny

Damit ist der BEGIN-Bereich definiert. Fehlt nur noch der END-Bereich zum sauberen beenden unserer Sonderregeln. Zunächsteinmal fügen wir nach der letzten Zeilen einen Absatz ein mit \par. Da ein Absatz immer mit dem Zeilenabstand gesetzt wird, der am Ende des Absatzes gilt, erreichen wir so, dass der Absatz auch mit dem zu \tiny passenden Zeilenabstand gesetzt wird. Mit \endgroup beenden wir die lokale Gruppe und damit die Wirkung von \tiny.

\par
 \endgroup

Nach Beendigung der Gruppe können wir nun unseren obligatorischen Abstand, den wir zuvor im Befehl \ObligAbstand gespeichert haben, einfügen.

\vspace{\ObligAbstand}

Nun ist unsere Umgebung fertig definiert und wir können Sie einsetzen. Im nachfolgenden Beispiel ist genau diese Definition verwendet worden.

Minimalbeispiel Ausgabe des Dokumentes
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{blindtext}
 
%Umgebung ohne ein Argument
\newenvironment{KleinerAbsatz}{\par\tiny}{\par}
 
%Umgebung mit Argument
\newenvironment{KleinerAbsatzmitAbstandDavor}[1]{\par\vspace{#1}\tiny}{\par}
 
%Umgebung mit zwei Argumenten. Davon eines obligatorisch und eines optional.
\newcommand*{\ObligAbstand}{} %Befehlsdefinition
 
%Etwas kompliziertere Umgebungsdefinition 
%\newenvironment{NAME}[ANAZHL][OPTIONAL]{BEGIN}{END}
\newenvironment{KleinerAbsatzmitAbstand}[2][\ObligAbstand]
%BEGIN Bereich
{%
 \renewcommand*{\ObligAbstand}{#2}
 \par\vspace{#1}
 \begingroup% Eine Gruppe, damit die Wirkung von \tiny 
            % begrenzt werden kann und Angaben wie 1em ...
   \tiny
}%
%END Bereich
{%
   \par
 \endgroup% ... ab hier wieder gleich groß wie bei der 
          % \vspace-Anweisung im BEGIN-Bereich sind 
          % (und nicht von \tiny bestimmt werden).
 \vspace{\ObligAbstand}
}
 
\begin{document}
 
	Dieses Beispiel zeigt verschiedene Umgebungen die mit dem
	hier erklärten Befehl neu definiert wurden.
 
	\begin{KleinerAbsatz}	
		\blindtext
	\end{KleinerAbsatz}
 
	\blindtext
 
	\begin{KleinerAbsatzmitAbstandDavor}{1cm}%{Abstand-davor}
		\blindtext
	\end{KleinerAbsatzmitAbstandDavor}
 
	Nun wieder eine Zwischenzeile und dann dass dritte Makro 
MIT optionalem Argument 0,5cm Vorabstand in der Verwendung.
 
	\begin{KleinerAbsatzmitAbstand}[0,5cm]{1,5cm}
		\blindtext
	\end{KleinerAbsatzmitAbstand}
 
	Nun wieder eine Zwischenzeile und dann dass dritte Makro 
OHNE optionalem Argument in der Verwendung.
 
	\begin{KleinerAbsatzmitAbstand}{1,5cm}%{Abstand-davor-dahinter}
		\blindtext
	\end{KleinerAbsatzmitAbstand}
 
	Nun wieder eine Zwischenzeile zum Ende des dritten Makros 
OHNE optionalem Argument in der Verwendung.
 
\end{document}

[bearbeiten] Verwandte Befehle

[bearbeiten] Umgebungen in TeX/LaTeX




Impressum | FAQ | goLaTeX RSS Button RSS-Feed

Copyright © 2008 - 2015 goLaTeX.de