Hintergrund:
------------
TeX selbst, also die Makrosprache hinter LaTeX, kennt keine Umgebungen. Umgebungen werden daher intern als zwei Befehle repräsentiert: einem Befehl für den bei `\begin` auszuführenden *Start-Code* und einen weiteren Befehl für den bei `\end` auszuführenden *Ende-Code*. Bei LaTeX 2.09, dem Vorläufer des heute als LaTeX bezeichneten LaTeX2e, hat Leslie Lamport, der Erfinder von LaTeX, entschieden, diese beiden Befehle für eine Umgebung `foo` einfach als `\foo` und `\endfoo` zu definieren. Gleichzeitig wird zwar in `\begin{foo}` von `\begin` getestet, ob der Befehl `\foo` definiert ist, und anderenfalls ein Fehler wegen einer nicht definierten Umgebung ausgegeben. Aber weder in `\begin{foo}` noch in `\end{foo}` findet ein Test statt, ob auch ein `\endfoo` definiert ist. Aus Gründen der Kompatibilität wurde diese Designentscheidung bei der Implementierung von LaTeX2e übernommen.
Daraus ergeben sich einige Seiteneffekte:
- Man kann eine Umgebung `foo`, die keinen Ende-Code benötigen, auch einfach als Anweisung `\foo` definieren.
- Man kann eine Umgebung `foo` auch als Anweisungen `\foo` und `\endfoo` implementieren.
- Anwender können als Argument bei `\begin` den Namen jeder Anweisung angeben, ohne dass LaTeX deshalb eine nicht definierte Umgebung meldet.
- Anwender können den Start-Code von Umgebungen auch als Anweisung aufrufen, ohne dass deshalb eine nicht definierte Anweisung gemeldet wird.
Allerdings stellt sich die Frage nach ungünstigen Nebenwirkungen.
Definition als Anweisungen statt als Umgebung:
----------------------------------------------
Bei der Definition von Umgebungen als Anweisungen ergibt sich im ersten Fall kein Problem. Im zweiten Fall hat man aber bereits das Problem, dass eine Anweisung, die mit `\end` beginnt über `\newcommand` gar nicht definiert werden kann. LaTeX meldet hier einen Fehler:
\newcommad*{\endfoo}{}
ergibt:
! LaTeX Error: Command \endfoo already defined.
Or name \end... illegal, see p.192 of the manual.
Man müsste zur Definition also die LaTeX-Ebene verlassen und sich mit `\def` auf die TeX-Ebene hinab begeben. Daraus ergibt sich für mich: *Man sollte zur Implementierung einer Umgebung nach Möglichkeit immer die dafür vorgesehenen LaTeX-Anweisungen, beispielsweise `\\newenvironment`, verwenden.*
Verwendung einer Anweisung als Umgebung:
----------------------------------------
Bei der Verwendung einer Anweisung als Umgebung ergeben sich ebenfalls Probleme. Normalerweise sind Umgebungen gleichzeitig Gruppen. Ein zentrales Kennzeichen einer Gruppe ist, dass Änderungen innerhalb der Gruppe am Ende der Gruppe wieder aufgehoben sind. Das sollte daher auch für Umgebungen gelten. So verändern beispielsweise Listenumgebungen den Einzug, der aber am Ende der Umgebung wieder zurückgesetzt ist, Umgebungen für Theoreme ändern möglicherweise die Schrift, die aber nach dem Ende der Umgebung wieder die vorherige Einstellung hat. Es gibt aber beispielsweise Anweisungen, deren Wirkung global ist. So definiert, beispielsweise die in der Frage erwähnte Anweisung `\appendix` bei den meisten Klassen die Darstellung des Kapitelzählers global um. Missbraucht man die Anweisung als Umgebung, so endet ihre Wirkung daher nicht mit den Ende der Umgebung. Beispielsweise wird bei:
\documentclass{article}
\begin{document}
\section{Erster Abschnitt}
\begin{appendix}% ACHTUNG, DAS IST FALSCH!!!
\section{Erster Anhang}
\section{Zweiter Anhang}
\end{appendix}
\section{Zweiter Abschnitt}
\end{document}
Der zweite Abschnitt keineswegs mit einer `2` nummeriert, wie man das nach Verlassen der *Umgebung* `appendix` erwarten würde. Stattdessen bekommt man:
![unerwartetes Ergebnis][1]
Der zweite Abschnitt ist also in Wirklichkeit Anhang C.
Darüber hinaus gibt es ggf. weitere Auswirkungen zu beachten, wie sie beispielsweise bei der Frage »[Kann ich Schriftgrößenumschaltungen auch als Umgebungen verwenden?][2]« behandelt werden. Daraus ergibt sich für mich: *Man sollte einen Befehl nicht als Umgebung missbrauchen.*
Verwendung einer Umgebung als Anweisung(en):
--------------------------------------------
Bei der Verwendung einer Umgebung als Anweisung ohne Ende-Anweisung ergeben sich zwangsläufig Probleme. So würde eine mit `\enumerate` begonnene Listenumgebung ohne Ende-Anweisung natürlich niemals enden und der gesamte weitere Text als Teil der Listenumgebung formatiert. Aber auch mit Ende-Anweisung können sich Probleme ergeben. Wie bereits erwähnt beinhaltet eine Umgebung normalerweise auch eine Gruppe. Zwar enthalten die Start- und Ende-Anweisungen einiger Umgebungen auch noch zusätzliche explizite Gruppen, die eigentliche Gruppe wird aber von `\begin` und `\end` selbst aufgespannt. Verwendet man eine Umgebung nun also nur in Form ihrer Start- und Ende-Anweisung statt mit `\begin` und `\end` bleibt die Wirkung wie im folgenden Beispiel teilweise nach der Ende-Anweisung erhalten:
\documentclass{article}
\begin{document}
\section{Erster Abschnitt}
\begin{enumerate}
\item erster Eintrag
\item zweiter Eintrag
\end{enumerate}
\label{sec:erster}
Dies ist Abschnitt~\ref{sec:erster}.
\enumerate
\item erster Eintrag
\item zweiter Eintrag
\endenumerate
\label{sec:nocherster}
Dies ist Abschnitt~\ref{sec:nocherster}.
\end{document}
![falsche Formatierung und Referenz][3]
Wie zu sehen ist, ist nicht nur die zweite Referenz falsch – sie bezieht sich noch auf den zweiten Eintrag der `\enumerate…\endenumerate`-Liste – auch der Einzug des zweiten Satzes orientiert sich noch an `\item`. Im Übrigen werden so Schachtelfehler bei Umgebungen nicht mehr erkennt, erkannt, wie das beispielsweise bei:
\begin{figure}
\begin{enlighted}
\end{figure}
\end{enlighted}
der Fall wäre. Daraus ergibt sich für mich: *Man kann und sollte auf Anwenderebene eine Umgebung nicht einfach nur durch ihre Start-Anweisung und ihre End-Anweisung ersetzen.*
Geplante Änderungen bei LaTeX3:
-------------------------------
Mit LaTeX3 wird sich diesbezüglich übrigens eine wichtige Änderung ergeben. Bei LaTeX3 wird intern einer Umgebung `foo` nicht mehr durch die Befehle `\foo` und `\endfoo`, sondern durch die Befehle `\environment foo`, `\environment foo end` und das zusätzliche, in `\environment foo end` verwendete `\environment foo end aux` (als interne Anweisungen der Implementierungsebene haben sie tatsächlich Leerzeichen in den Befehlsnamen) repräsentiert. Dadurch ist es dann auch nicht mehr möglich, Befehle als Umgebungen zu missbrauchen oder versehentlich den Anfang einer Umgebung als Befehl zu verwenden, wie wir das bei `center` häufiger erleben. Bereits heute werden diese neuen Anweisungen von den [`xparse`][7]-Anweisungen zur Definition von Umgebungen: `\DeclareDocumentEnvironment`, `\NewDocumentEnvironment`, `\RenewDocumentEnvironment` und `\ProvideDocumentEnvironment`, entsprechend definiert. Da [`xparse`][7] derzeit aber nicht nur die LaTeX3-Schnittstelle zur Definition von Anwenderanweisungen und Umgebungen bereitstellt, sondern auch noch für die Kompatibilität zu LaTeX2e sorgen muss, werden derzeit auch weiterhin `\foo` und `\endfoo` definiert.
Fazit:
------
Aufgrund der Implementierung von Umgebungen ist es in LaTeX2e zwar syntaktisch möglich, Anweisungen als Umgebung zu verwenden oder die Start- oder Endeanweisungen einiger Umgebungen auch auf Anwenderebene zu verwenden, aufgrund des dadurch eröffneten Fehlerpotentials sollte man dies jedoch vermeiden.
[1]: http://texwelt.de/wissen/upfiles/example40.png
[2]: http://texwelt.de/wissen/fragen/1852/kann-ich-schriftgroenumschaltungen-auch-als-umgebungen-verwenden
[3]: http://texwelt.de/wissen/upfiles/example42.png
[7]: http://www.ctan.org/pkg/xparse