Im Internet taucht immer wieder LaTeX-Code auf, bei dem beispielsweise Schriftgrößenbefehle wie gefragt 11 Okt '13, 08:42 saputello |
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 Daraus ergeben sich einige Seiteneffekte:
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 Open in Online-Editor
\newcommand*{\endfoo}{} ergibt: Open in Online-Editor
! 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 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 Open in Online-Editor
\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 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?« 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 Open in Online-Editor
\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} Wie zu sehen ist, ist nicht nur die zweite Referenz falsch – sie bezieht sich noch auf den zweiten Eintrag der Open in Online-Editor
\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 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. @saputello - Ich habe gerade bemerkt dass Du Deine eigene Frage bereits beantwortet (und auch akzeptiert) hast, während ich noch dabei war eine separate Antwort zu schreiben. Soll ich meine Antwort löschen?
(11 Okt '13, 10:13)
Mico
|
LaTeX-intern sind Umgebungen als Befehlspaare definiert. Siehe z.B. die Umgebung
definiert ist; und beim Auffinden der Anweisung
definiert ist. Man beachte dass die Umgebung Man kann diese Situation auch umkehren und einen einfachen Befehl, z.B. Man kann also in den meisten Fällen (aber schon nicht ganz beliebig!) eine Umgebung mit dem Namen eines normalen Befehls (aber ohne dem backslash Zeichen Ein separates Anliegen ist: Warum gibt es in LaTeX sowohl einfache Befehle, z.B. beantwortet 11 Okt '13, 10:10 Mico 1
Soweit ich weiß, erlaubt übrigens ConTeXt die Syntax
(11 Okt '13, 11:57)
cgnieder
@Clemens: In MkIV wird das eigentlich durchaus propagiert, jedenfalls werden die Vorteile gegenüber
(11 Okt '13, 17:58)
saputello
|