Aus der Frage »Kann ich Schriftgrößenumschaltungen auch als Umgebungen verwenden?« formuliere ich eine neue:

Wieso kann ich Schriftauszeichnungen nicht als Umgebung nutzen?

Die Antwort ist: Weil es bislang niemand geschafft hat, die drei Ansätze zu vereinen. Offensichtlich funktionieren Konstrukte wie:

Open in writeLaTeX
\begin{document}
  \begin{small}
    Der ganze Text
  \end{small}
\end{document}

Da mag es die eine oder anderen Fehleranfälligkeit geben, aber warum räumt man diese nicht aus? Es gibt lokale Auszeichnungen wie {\bf Text}, gruppierte Auszeichnungen wie \textbf{Text} oder globale Auszeichnungen wie \bfseries. Diese sind nur unterschiedliche Formulierungen des gleichen Sachverhalts. Man gibt eine Schriftauszeichnung vor, die bis zum Ende der Gruppe gilt. Da es eine leicht verständliche und nachgefragte Methode ist, solche Auszeichnungen in Umgebungen zu fassen und als solche zu nutzen, schlage ich vor, die drei Möglichkeiten zusammenzufassen und eine einheitliche Umgebung mit Parametern zu schaffen, die alle drei Anforderungen vereint.

Ich stelle hier noch keinen Vorschlag ein, weil ich gespannt auf die kreativen Vorschläge anderer Teilnehmer bin, aber ich bin sicher, daß dies möglich ist.

\begin{games} \end{games} :-)

gefragt 10 Okt '13, 00:46

ctansearch's gravatar image

ctansearch
(ausgesetzt)
Akzeptiert-Rate: 18%

bearbeitet 11 Jan '14, 14:41

cgnieder's gravatar image

cgnieder
22.1k243463

4

\bfseries ist genauso lokal/global wie \bf, da es genauso gruppiert werden kann: {\bfseries Text}. Übrigens, nicht immer sind die gruppierten und ungruppierten gleich: \textit{hal}lo {\itshape hal}lo. Was ist jetzt eigentlich deine Frage? „Wieso kann ich Schriftauszeichnungen nicht als Umgebung nutzen?“ scheint es irgendwie nicht zu sein.

(10 Okt '13, 05:28) Qrrbrbirlbel
2

Die Frage ist so nicht korrekt, denn man kann Schriftauszeichnungen durchaus als Umgebung verwenden. Außer bei den Schriftgrößen ist dabei das einzige Problem, dass es vom LaTeX-Team nicht wirklich dokumentiert und eher ein Nebenprodukt der Implementierung von Umgebungen als des Designs und der Implementierung der Schriftauszeichnungsbefehle ist. Das andere Problem ist, dass Du noch immer veraltete Befehle verwendest.

(10 Okt '13, 08:54) saputello

@saputello

Wenn die veralteten Befehle funktionieren. kann man sie auch verwenden, wenn man weiß, was man von diesen erwarten oder nicht erwarten kann. Im übrigen, wie andererwärts gesagt, erwarte ich schon, daß die Kompatibilität zu TeX erhalten bleibt. Das bedeutet für mich, daß alle Folgeversionen sicherstellen müssen, daß alle TeX-Primitive in jedem Dokument nutzbar bleiben sollten, notfalls mit einem Kompatibilitätskompromiß.

(12 Okt '13, 00:27) ctansearch
2

@ctansearch Probier doch mal \bf mit der memoir-Klasse. Vielleicht glaubst Du dann, dass es eine schlechte Idee ist, diese Befehle zu verwenden.

(12 Okt '13, 09:10) cgnieder

@ctansearch: Du schmeißt hier wild mit Begriffen umher ohne zu wissen, wo die eigentlich herkommen. \bf ist jedenfalls kein Primitiv und existiert auch nur in plainTeX

@Clemens: Wir haben ja die Diskussion nun schoin länger, aber dass \bf in Memoir auf \relax gesetzt ist, besagt ja erstmal gar nichts. Außerdem kann man es einfach durch ein optionales Argument reaktivieren.

\bf und \bfseries sind einfach verschieden! In vielen Anwendungsfällen merkt man das aber nicht.

(15 Okt '13, 18:11) Herbert
1

@Herbert Meiner Meinung nach ist es schlicht falsch, in einem LaTeX2e-Dokument \bf und Freunde zu verwenden. memoir ist nur mein Standardbeispiel dafür, dass die Befehle nicht einfach so verfügbar sein müssen. (Dass die Standardklassen sie aus Kompatibilitätsgründen definieren, ist eine andere Sache.). Meiner Meinung nach wäre es auch zu begrüßen, wenn die KOMA-Script Klassen und memoir die Befehle gar nicht mehr zur Verfügung stellten. Dann wäre ihre Verwendung vielleicht auch nicht mehr so verbreitet.

(29 Okt '13, 21:20) cgnieder
Ergebnis 5 von 6 show 1 more comments

Update mit ifcase(2013-10-14)

Hier nun ein Vorschlag, wie man die unterschiedlichen Schriftauszeichnungen in eine Umgebung mit Parametern zusammenfassen könnte. Ist ein Kompromiß (oder eine Erweiterung?) aus Markup und im Text verwendeten Schriftumgebungen.

\documentclass[a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{longtable}
\def\fntcommands[#1,#2,#3,#4]{%
\def\fntsize{#1}%
\def\fntbf{#2}%
\def\fntshape{#3}%
\def\fntx{#4}%platzhalter
\def\fntempty{}%Befehl der auf alle fnt-Textteile wirkt
%\def\fntempty{\normalfont}%Befehl der auf alle fnt-Textteile wirkt
}
\newenvironment{fnt}[2]{

\ifcase #1
\or  \fntcommands[\normalsize,\bfseries,\textsl,\fntempty]{}%Zitat
\or   \fntcommands[\small,\mdseries,\textit,\fntempty]{}%Kommentar zum Zitat
\or   \fntcommands[\tiny,\mdseries,\texttt,\fntempty]{}%
\or   \fntcommands[\normalsize,\normalfont,\normalsize,\fntempty]{} %
\or   \fntcommands[\normalsize,\normalfont,\normalsize,\fntempty]{} %
\or  \fntcommands[\normalsize,\mdseries,\normalfont,\fntempty]{} %
\or   \fntcommands[\normalsize,\normalfont,\normalsize,\fntempty]{}%
\or   \fntcommands[\small,\textit,\textsl,\fntempty]{}%longtable
 \fi%
\par \fntsize{\fntbf{\fntshape{\fntx{#2} \relax}}}\par \normalsize}{\par \normalsize }
\begin{document}
\begin{fnt}{1}{\glqq Never laugh at live dragons, Bilbo you fool!' he said to himself, and it became a favourite saying of his later, and passed into a proverb." \grqq }
\end{fnt}
\begin{fnt}{2}{(And he was right, as you can see.)}
\end{fnt}
\begin{fnt}{8}{\begin{longtable}{p{4cm}p{4cm}}
Testtext&Testtext\\
Testtext&Testtext\\
Testtext&Testtext\\
\end{longtable}}
\end{fnt}
Berge von Text
\end{document}
Permanenter link

beantwortet 11 Okt '13, 23:41

ctansearch's gravatar image

ctansearch
(ausgesetzt)
Akzeptiert-Rate: 18%

bearbeitet 29 Okt '13, 14:54

stefan's gravatar image

stefan ♦♦
18.1k143048

Ach übrigens: Wanted alive: Reward 50 Points. Für eine gute Lösung vergebe ich 50 meiner Punkte!

(11 Okt '13, 23:45) ctansearch
2

Wenn man genau weiß, warum eine Lösung Nachteile gegenüber einer anderen hat, dann kann man sie gezielt einsetzen, wenn man dafür gute Gründe hat. »Es geht aber auch« und »Leute verwenden das aber« sind meines Erachtens keine guten Gründe.

(12 Okt '13, 10:04) cgnieder

@Clemens Ich habe bei vielen Gelegenheiten die Erfahrung gemacht, daß es zwar sinnvoll ist, auf die beste Methode hinzuarbeiten, es aber schädlich ist, das Experimentieren auf dem Wege dorthin zu bremsen. Die beste Methode wäre, das gesamte Latex-Programm in ein C++-Programm umzuschreiben, dann würde es allerdings bald kein LaTeX mehr geben. In Wahrheit geht es nicht um die beste Lösung, sondern um den Spaß am Basteln. Ich bin ein erklärter Gegner vorgefertigter Lösungen. Den größten Spaß hat man, wenn es Lösungen zu finden gilt. Das ist das Prinzip dieser Seite, jedenfalls für mich.

(13 Okt '13, 00:00) ctansearch

@ctansearch Kannst Du mal erklären, warum Du bei der Umgebung fnt die Schriftumschaltung auf das zweite Argument anwendest, statt auf den Inhalt der Umgebung? Für mich konterkariert das die Verwendung einer Umgebung an Stelle eines Befehls. Aber vielleicht habe ich den tieferen Sinn ja nicht verstanden.

Der Absatz mit \par nach dem \fi der \ifcase-Anweisung ist übrigens überflüssig, da der Absatz bereits mit der Leerzeile vor \ifcase erreicht wird.

(14 Okt '13, 10:07) saputello
2

@ctansearch Experimente, die Du für Dich durchführst, sind eine Sache. Die sind mit großer Sicherheit nützlich. Eine andere Frage ist aber, was man anderen als (implizit gute) Lösung präsentieren sollte. Es gibt im Internet schon so viele schlechte Ratschläge zu LaTeX, die sich leider immer wieder hartnäckig weiter verbreite. Das ist es schon gut, wenn zumindest bei best-practice-Antworten auf mögliche Nebenwirkungen auch hingewiesen und seltsame Ansätze nicht unbedingt propagiert werden.

(14 Okt '13, 10:17) saputello

Ich bin übrigens auch bereit zu wetten, dass @saputellos Kommentare und Kritiken immer konstruktiv zu verstehen sind. Ich denke da auch an Leser Deines Posts, die nicht @saputellos Wissen haben, und nicht einschätzen können, was best-practice ist, oder wofür es »offizielle« Alternativen gibt... Viel Spaß beim weiterbasteln :)

(14 Okt '13, 20:00) cgnieder

@saputello Warum ich bei der Umgebung fnt die Schriftumschaltung auf das zweite Argument anwende: Weil ich eine gleichmäßige Gruppierung aller Schriftbefehle haben wollte und die Möglichkeit, das zweite Argument auch als Überschriften etc einzusetzen. Noch eine Anmerkung zu meinem Vorgehen: Ich betrachte die Fragen und Lösungen jeweils aus der Sicht eines einzelnen Dokuments, für das es noch keine Vorlagen gibt und gehe das Problem "primitiv" an, während sap und andere "entwickelt" herangehen. Ich finde das ergänzt sich ganz gut.

(14 Okt '13, 21:13) ctansearch
2

@ctansearch saputello erklärt ja auch enorm viel und umfassend. Klar kann man als Anwender selbst frei experimentieren. Das ist so schön an Open Source. Sobald man etwas veröffentlicht, sei es auch nur als Vorschlag in einem Forum, gibt man es Kritik und Meinungen gegenüber frei. Ist auch eine Form von Learning by Doing, wenn man sich dann mit Feedback auseinandersetzt.

(14 Okt '13, 22:51) stefan ♦♦

@ctansearch Wenn die Umgebung gar keine Umgebung sein soll, in der die Schrift umgeschaltet wird, sondern die lediglich mit einer Art Überschrift in anderer Schrift versehen werden soll, dann solltest Du Seitenumbrüche zwischen Überschrift und Inhalt der Umgebung verhindern. Außerdem passt das dann IMHO irgendwie nicht so recht zu Frage. Umgebungen mit einer Überschrift in anderer Schrift gibt es ja längst. Siehe beispielsweise Theoreme mit einem der vielen Theorem-Pakete.

(15 Okt '13, 10:20) saputello
2

Danke für den sachlichen Disput, erklärt natürlich jeder, was er meint. Ich räum dann demnächst die Kommentare auf, dass rein das Thema-bezogene verbleibt.

(15 Okt '13, 21:44) stefan ♦♦
Ergebnis 5 von 10 show 5 more comments

Man kann Schriftauszeichnungen theoretisch durchaus als Gruppe nutzen. Es gibt allerdings einige Dinge zu beachten. So sollte man \rm, \sf, \tt, \bf, \it, \sl und \sc in LaTeX besser gar nicht verwenden, wie in »Macht es einen Unterschied, ob ich \it oder \itshape verwende?« ausführlich erklärt wurde. Diese Anweisungen existieren in LaTeX2e selbst überhaupt nicht. In verschiedenen Klassen sind sie lediglich aus Gründen der Kompatibilität mit LaTeX 2.09 und plainTeX definiert. Sie erlauben jedoch im Gegensatz zu den NFSS2-Fontbefehlen von LaTeX2e keine Kombination von Schriftattributen. Daher sind als Umschalter \rmfamily, \sffamily, \ttfamily, \bfseries, \itshape, \slshape, \scshape und die von den alten LaTeX-2.09-Befehlen nicht abgedeckten \upshape und \mdseries vorzuziehen.

Diese Umschalter könnte man wie alle lokal arbeitenden Umschalter auch als Umgebungen missbrauchen, also \begin{bfseries}…\end{bfseries} etc. Wie ich in meinen Antwort auf die Frage »Kann ich Schriftgrößenumschaltungen auch als Umgebungen verwenden?« und ausführlicher bei »Kann man eigentlich alle Befehle auch als Umgebung verwenden und umgekehrt?« bereits erklärt habe, liegt das weniger an den Umschaltbefehlen, sondern eher daran, wie Umgebungen in LaTeX definiert sind. Intern wird der \begin-Code einer Umgebung foo nämlich in der Anweisung \foo definiert und der \end-Code in der Anweisung \endfoo. Gleichzeitig muss für \begin{foo}…\end{foo} die Anweisung \endfoo nicht definiert sein. Nützt man dieses interne Wissen aus, so kann man also viele Anweisungen (nicht nur Umschalter) auch als Umgebung verwenden. Puristen vertreten meist den Standpunkt, dass diese interne Implementierung von Umgebungen eher eine Schwachstelle ist und man daher so wenig \begin{bfseries}…\end{bfseries} schreiben sollte, wie man \begin{footnote}{Fußnotentext}\end{footnote} schreiben würde. Darüber hinaus zeichnen sich bei LaTeX3-Änderungen ab, mit denen das auch gar nicht mehr funktionieren würde.

Eine entscheidende Frage ist eigentlich, warum man überhaupt auf die Idee kommen sollte, die Schriftumschaltbefehle als Umgebung zu verwenden. Normalerweise verwendet man diese Befehle nämlich nur dann, wenn man gerade will, dass ihre Wirkung bis zum Ende der aktuellen Gruppe reicht. Dabei werden diese Anweisungen nicht innerhalb eines Dokuments, sondern eher zur Definition von Umgebungen und Befehlen in der Dokumentpräambel verwendet. Für kurzzeitige Umschaltungen beispielsweise für eine Passage innerhalb eines Absatzes stehen hingegen seit LaTeX2e die Befehle \textrm{…}, \textsf{…}, \texttt{…}, \textmd{…}, \textbf{…}, \textup{…}, \textit{…}, \textsl{…} und \textsc{…} zur Verfügung. Diese erwarten alle ein Argument und entsprechen damit meist auch den Erwartungen von Anfängern.

Allerdings sollte man auch diese Befehle im Sinne der Trennung von Form und Inhalt in der Regel nicht innerhalb eines Dokuments verwenden. Jede Schriftumschaltung – wir sprechen auch von Textauszeichnung – geschieht immer aus einem bestimmten Grund. Der scheinbare Grund: »ich will das fett haben«, ist dabei nicht entscheidend. Entscheiden ist der tiefere Grund, also die Frage: »Warum will ich das fett haben?«, die beispielsweise lauten könnte: »Ich will Paketnamen auf einen Blick als solche kenntlich machen.« Nachdem die Textauszeichnung aus einem bestimmten Grund erfolgt, sollte man sich einen Befehl definieren, der diesen Grund abbildet, also beispielsweise:

\newcommand*{\PaketName}[1]{\textbf{#1}}

Eine solche Definition kann in der Dokumentpräambel erfolgen, aber auch in einem eigenen Paket oder einer Wrapper-Klasse. So vorzugehen, hat darüber hinaus den Vorteil, dass man bei konsequenter Anwendung des Prinzips, die Textauszeichnung für einen bestimmten Grund später leicht ändern kann, ohne alle mit den entsprechenden Schriftumschaltungen versehene Passagen im Text durchgehen zu müssen, um zu sehen, ob diese Textauszeichnung aus demselben Grund vorgenommen wurde oder nicht. Stattdessen ist lediglich die Definition der einen Anweisung zu ändern. Siehe dazu auch: »Wie sollte ich vorgehen, wenn ich bestimmte Arten von Begriffen, beispielsweise Namen hervorheben will?«.

Kommen wir zu den Schriftgrößenumschaltungen. Auch diese kann man als Umgebung missbrauchen, allerdings ist dort im Gegensatz zu den bisher behandelten Schriftattributen Zusätzliches zu beachten. Dies wurde in meiner Antwort zur Frage »Was ist an \Huge{Text}, \Large{Text}, \footnotesize{Text} etc. falsch?« bereits ausführlich besprochen, so dass ich mir hier eine Wiederholung sparen kann. Wichtig ist über obige Erklärungen für Schriftauszeichnungen hinaus bei Schriftgrößenumschaltungen vor allem, dass man berücksichtigen muss, dass TeX einen Absatzumbruch insgesamt immer mit den Einstellungen durchführt, die am Absatzende gelten. Deshalb muss dafür gesorgt werden, dass zum Zeitpunkt des Absatzumbruchs, die richtige Schriftgröße aktiv ist. Im Rahmen der Definition von speziellen Absatzumgebungen oder Befehlen wie Überschriften ist dies jedoch normalerweise einfach zu erreichen, beispielsweise mit einem gezielten \par vor dem Ende der entsprechenden Umgebung oder Gruppen.

Man kann also zwar in LaTeX 2.09 und LaTeX2e manche Befehle als Umgebung missbrauchen, man sollte das aber spätestens im Hinblick auf LaTeX3 besser vermeiden.

Permanenter link

beantwortet 10 Okt '13, 08:51

saputello's gravatar image

saputello
11.1k154365
Akzeptiert-Rate: 51%

bearbeitet 11 Okt '13, 09:51

Die Trennung von Form und Inhalt, also Markup wurde jetzt in verschiedenen Fragen thematisiert. Wäre es vielleicht sinnvoll, eine eigene Frage zu erstellen? Bzw. gibt es die ja schon: emph vs. textit. Dann könnte man aus anderen Foren leicht hierher (Texwelt) verlinken. Ich sehe viel zu häufig Schriftumschaltungen im Dokument. Das sollte sich endlich ändern.

(10 Okt '13, 10:49) Johannes

Ich meine mich übrigens dunkel daran zu erinnern, dass für LaTeX3 eine andere Implementierung für Umgebungen geplant ist, in der der Umgebungsname name zum einen nicht einfach auf ein Makro gleichen Namens \name abgebildet wird und außerdem ein entsprechendes \endname nicht mehr nötig wird. (Ich meine, Joseph Wright hätte das mal gesagt, ich kann mich aber nicht mehr erinnern, wo oder wann...)

(10 Okt '13, 23:51) cgnieder
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×76
×48
×31

gestellte Frage: 10 Okt '13, 00:46

Frage wurde gesehen: 12,997 Mal

zuletzt geändert: 11 Jan '14, 14:41