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


goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum

goLaTeX.de - Wiki
 


\newenvironment

(Unterschied zwischen Versionen)
Version vom 16:25, 25. Mär. 2010 (bearbeiten)
Johannes (Diskussion | Beiträge)
(Beispiel)
← Zum vorherigen Versionsunterschied
Version vom 17:46, 25. Mär. 2010 (bearbeiten) (rückgängig)
Johannes (Diskussion | Beiträge)

Zum nächsten Versionsunterschied →
Zeile 10: Zeile 10:
Mittels dieses Konstrukts lassen sich neue Umgebungen in LaTeX definieren. Diese im [[Header]] vorgenommene Definition kann von Benutzer dann 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. 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.
== Parameter == == Parameter ==
Zeile 19: Zeile 21:
: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. :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'' ;''BEGIN''
-:Eine Befehlsdefinition+:Eine Befehlsdefinition. Verwendung der übergebenen Argumente nur hier.
;''END'' ;''END''
:Eine Befehlsdefinition :Eine Befehlsdefinition
== Beispiel == == Beispiel ==
-In folgendem Beispiel werden verschiedene Möglichkeiten einer Umgebungsdefinition gezeigt. +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 wird der Name der Umgebung definiert:
- +<source lang=latex>
 +\newenvironment{KleinerAbsatzmitAbstand}
 +</source>
 +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.
 +<source lang=latex>
 +[2][\OptionalerAbstand]
 +</source>
 +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. Zunächst führen wir einen neuen Befehl ein.
 +<source lang=latex>
 +\newcommand*{\OptionalerAbstand}{}
 +</source>
 +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 nun das obligatorische Argument als Wert einem Befehl zuweisen, speichern wir Ihn sozusagen zwischen.
 +<source lang=latex>
 + \renewcommand*{\ObligAbstand}{#2}
 +</source>
 +Nachdem wir das obligatorische Argument gespeichert haben, verwenden wir nun das optionale Argument zum Einfügen eines vertikalen Abstandes.
 +<source lang=latex>
 + \par\vspace{#1}
 +</source>
 +Sollte auf die Eingabe des optionalen Arguments verzichtet werden, so ist nach unserer Definition der Wert des optionalen Arguments gleich dem \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 die Zeilenhöhe sich nicht automatisch mit der Schriftgröße ändert. Da besteht keine automatische Abhängigkeit zwischen Schriftgröße und Zeilenabstand. Daher fügen wir noch eine Group ein. Die sorgt dafür, dass nun die Zeilenhöhe an die schriftgröße angepasst wird. Dann können wir danach problemlos die Schriftgröße ändern.
 +<source lang=latex>
 + \begingroup
 + \tiny
 +</source>
 +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. Sonst steht nachher die große Schrift in einer kleinen Zeile. Mit \endgroup beenden wir die lokale Gruppe.
 +<source lang=latex>
 + \par
 + \endgroup
 +</source>
 +Nach Beendigung der Gruppe können wir nun unseren optionalen Abstand, den wir zuvor im Befehl \OptionalerAbstand gespeichert haben, einfügen.
 +<source lang=latex>
 + \vspace{\OptionalerAbstand}
 +</source>
 +Nun ist unsere Umgebung fertig definiert und wir können Sie einsetzen. Im nachfolgenden Beispiel ist genau diese Definition verwendet worden.
{| class="prettytable" {| class="prettytable"
Zeile 33: Zeile 68:
| style="background-color: #fff;" | | style="background-color: #fff;" |
<source lang=latex> <source lang=latex>
-\documentclass{scrartcl} 
\documentclass{scrartcl} \documentclass{scrartcl}
\usepackage[ngerman]{babel} \usepackage[ngerman]{babel}
Zeile 39: Zeile 73:
\usepackage{lmodern} \usepackage{lmodern}
\usepackage{blindtext} \usepackage{blindtext}
- +
%Umgebung ohne ein Argument %Umgebung ohne ein Argument
\newenvironment{KleinerAbsatz}{\par\tiny}{\par} \newenvironment{KleinerAbsatz}{\par\tiny}{\par}
- +
%Umgebung mit Argument %Umgebung mit Argument
\newenvironment{KleinerAbsatzmitAbstandDavor}[1]{\par\vspace{#1}\tiny}{\par} \newenvironment{KleinerAbsatzmitAbstandDavor}[1]{\par\vspace{#1}\tiny}{\par}
- +
%Umgebung mit zwei Argumenten. Davon eines obligatorisch und eines optional. %Umgebung mit zwei Argumenten. Davon eines obligatorisch und eines optional.
-\newcommand*{\OptionalerAbstand}{} %Befehlsdefinition des optionalen Arguments+\newcommand*{\OptionalerAbstand}{} %Befehlsdefinition
- +
%Etwas kompliziertere Umgebungsdefinition %Etwas kompliziertere Umgebungsdefinition
%\newenvironment{NAME}[ANAZHL][OPTIONAL]{BEGIN}{END} %\newenvironment{NAME}[ANAZHL][OPTIONAL]{BEGIN}{END}
Zeile 54: Zeile 88:
%BEGIN Bereich %BEGIN Bereich
{% {%
- \renewcommand*{\OptionalerAbstand}{#2}%Übergabe des opt. Arguments (zweites Argument => #2)+ \renewcommand*{\OptionalerAbstand}{#2}
- \par\vspace{#1}%vertikalen Abstand einfügen mit oblig. Argument (erstes Argument => #1)+ \par\vspace{#1}
- \begingroup% Eine Gruppe, damit schriftgrößenabhängige Zeilenabstände einghalten werden ...+ \begingroup% Eine Gruppe, damit schriftgrößenabhängige
 +%Zeilenabstände einghalten werden ...
\tiny \tiny
}% }%
Zeile 62: Zeile 97:
{% {%
\par \par
- \endgroup% ... und ab hier wieder gleich sind (und nicht von \tiny bestimmt werden).+ \endgroup% ... und ab hier wieder gleich sind (und nicht von \tiny
 +%bestimmt werden).
\vspace{\OptionalerAbstand} \vspace{\OptionalerAbstand}
} }
- +
\begin{document} \begin{document}
- +
Dieses Beispiel zeigt verschiedene Umgebungen die mit dem Dieses Beispiel zeigt verschiedene Umgebungen die mit dem
hier erklärten Befehl neu definiert wurden. hier erklärten Befehl neu definiert wurden.
- +
\begin{KleinerAbsatz} \begin{KleinerAbsatz}
\blindtext \blindtext
\end{KleinerAbsatz} \end{KleinerAbsatz}
- +
\blindtext \blindtext
- +
\begin{KleinerAbsatzmitAbstandDavor}{1cm}%{Abstand-davor} \begin{KleinerAbsatzmitAbstandDavor}{1cm}%{Abstand-davor}
\blindtext \blindtext
\end{KleinerAbsatzmitAbstandDavor} \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}
- \blindtext+ Nun wieder eine Zwischenzeile und dann dass dritte Makro
 +OHNE optionalem Argument in der Verwendung.
- \begin{KleinerAbsatzmitAbstand}[0,5cm]{1,5cm}%[Abstand-davor]{Abstand-dahinter}+ \begin{KleinerAbsatzmitAbstand}{1,5cm}%{Abstand-davor-dahinter}
\blindtext \blindtext
\end{KleinerAbsatzmitAbstand} \end{KleinerAbsatzmitAbstand}
- +
- \blindtext+ Nun wieder eine Zwischenzeile zum Ende des dritten Makros
- +OHNE optionalem Argument in der Verwendung.
 +
\end{document}</source> \end{document}</source>
| style="background-color: #fff;" valign="top"| | style="background-color: #fff;" valign="top"|

Version vom 17:46, 25. Mär. 2010

Eine neue Umgebung definieren.

Inhaltsverzeichnis

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.

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

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 wird der Name der Umgebung definiert:

\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][\OptionalerAbstand]

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. Zunächst führen wir einen neuen Befehl ein.

\newcommand*{\OptionalerAbstand}{}

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 nun das obligatorische Argument als Wert einem Befehl zuweisen, speichern wir Ihn sozusagen zwischen.

\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 gleich dem \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 die Zeilenhöhe sich nicht automatisch mit der Schriftgröße ändert. Da besteht keine automatische Abhängigkeit zwischen Schriftgröße und Zeilenabstand. Daher fügen wir noch eine Group ein. Die sorgt dafür, dass nun die Zeilenhöhe an die schriftgröße angepasst wird. 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. Sonst steht nachher die große Schrift in einer kleinen Zeile. Mit \endgroup beenden wir die lokale Gruppe.

\par
 \endgroup

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

\vspace{\OptionalerAbstand}

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*{\OptionalerAbstand}{} %Befehlsdefinition
 
%Etwas kompliziertere Umgebungsdefinition 
%\newenvironment{NAME}[ANAZHL][OPTIONAL]{BEGIN}{END}
\newenvironment{KleinerAbsatzmitAbstand}[2][\OptionalerAbstand]
%BEGIN Bereich
{%
 \renewcommand*{\OptionalerAbstand}{#2}
 \par\vspace{#1}
 \begingroup% Eine Gruppe, damit schriftgrößenabhängige 
%Zeilenabstände einghalten werden ...
   \tiny
}%
%END Bereich
{%
 \par
 \endgroup% ... und ab hier wieder gleich sind (und nicht von \tiny 
%bestimmt werden).
 \vspace{\OptionalerAbstand}
}
 
\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}

Bild:newenvironment.png

Verwandte Befehle

Umgebungen in TeX/LaTeX




Datenschutzerklärung | Impressum | FAQ | goLaTeX RSS Button RSS-Feed

Copyright © 2008 - 2015 goLaTeX.de