PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schriftgrößen als Environment



ctansearch
13-03-2012, 22:38
Hallo,
weiß jemand, warum Huge huge, Large large, tiny und small als Environment, also mit
\begin{} \end{} definiert sind, andere Größen aber nicht?

Wo sind diese definiert und wie könnte man beliebige neue Größen ebenso definieren?

u_fischer
14-03-2012, 09:36
weiß jemand, warum Huge huge, Large large, tiny und small als Environment, also mit \begin{} \end{} definiert sind, andere Größen aber nicht?

Sind sie nicht.


Wo sind diese definiert

Hängt von der Klasse ab. Z.b. in size10.clo.

ctansearch
14-03-2012, 13:21
Das dachte ich auch ,aber wieso funktioniert dann das :



\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
%\usepackage{array,tabularx,verbatim,graphicx,colo r,amsmath}
\usepackage[ngerman]{babel}
\begin{document}
\begin{Huge} Huge \end{Huge} \Huge{Huge} \\
\begin{Large} Large \end{Large}\Large{Large}\\
\begin{large} large \end{large}\large{large}\\
\begin{small} small \end{small} \small{small}\\
\begin{tiny} tiny \end{tiny}\tiny{tiny} \\
\normalsize
Und warum geht das ?
\end{document}

u_fischer
14-03-2012, 13:29
Weil sowas mit jedem Befehl (mehr oder weniger) funktioniert:


\documentclass{article}

\begin{document}
\begin{section}{abc}
blub
\end{section}

\newcommand\test{upps}

\begin{test}
\bfseries abc
\end{test}

abc

\end{document}


Wenn es keine "wirkliche" Umgebung gibt, führt \begin{blub} \begingroup\blub aus, und \end{blub} ein \endgroup.

cgnieder
14-03-2012, 13:38
Das hier funktioniert auch:

\documentclass{scrartcl}
\usepackage{xcolor}
\def\mycmd{\color{red}}
\begin{document}

\begin{mycmd}
bla
\end{mycmd}

\end{document}
Grob gesagt öffnet der \begin{sache} Befehl eine Gruppe, prüft, ob der Befehl \sache existiert, führt ihn aus und speichert den Namen als aktuelle Umgebung zwischen. Der Befehl \end{sache} ruft

\csname endsache\endcsname
auf, schaut nach, ob die aktuelle Umgebung »sache« ist (der von \begin gespeicherte Wert) und beendet die Gruppe.

Da ein solcher Aufruf:

\documentclass{article}
\begin{document}

\csname endmycmd\endcsname
\csname bla\endcsname

\end{document}
keinen Fehler verursacht, funktioniert \begin{sache}\end{sache}, solange \sache definiert ist, auch wenn »sache« nicht als Umgebung definiert ist.

Gruß

PS: Hoppla, war zu langsam...

ctansearch
14-03-2012, 13:56
Böse Falle..

ctansearch
16-03-2012, 00:08
Na, da scheint mir doch so einiges im Argen zu liegen

Die \begin{} \end{} Scheinenvironments sorgen wenigstens dafür, daß die Schriftart gruppiert und danach verlassen wird, während \large{} \Large etc nur dazu führen, daß die Schirftart umgestellt wird, nachher aber nicht wieder verlassen wird.

Da hilft zwar die alte Aussenklammerung von Tex, aber ein grober Programmfehler bleibt es dennoch.

cgnieder
16-03-2012, 01:27
Die \begin{} \end{} Scheinenvironments sorgen wenigstens dafür, daß die Schriftart gruppiert und danach verlassen wird, während \large{} \Large etc nur dazu führen, daß die Schirftart umgestellt wird, nachher aber nicht wieder verlassen wird.

Das lässt sich doch m.E. durch Setzen von { } oder eines \normalsize an der richtigen Stelle leicht im Griff halten. Die Schriftart wird übrigens nicht umgestellt.


aber ein grober Programmfehler bleibt es dennoch.
Ich glaube nicht, dass das ein Fehler sondern eine bewusste Entscheidung war. Ich mag mich allerdings täuschen. Nur zum Beispiel: es ist praktisch, wenn man beispielsweise selbst eine neue Umgebung definiert, innerhalb derer alles \small sein soll. Dann reicht der einmalige Aufruf am Anfang und man muss nicht mehr darauf achten, dass man die Umstellung rückgängig macht oder falsch verschachtelte Umgebungen erzeugt.

Gruß

ctansearch
16-03-2012, 02:04
@cgnieder

Klar, ich meinte die Schriftgröße, nicht die Schriftart, danke für die Korrektur.

Aber so ganz zufrieden bin ich mit den Defintionen der Schriftgrößen nicht, ich werkele mich gerade durch die Basics von TeX und dort scheint mir die Defintion der Schriftgrößen doch logischer und einfacher zu sein.

Ich stelle demnächst meine Lösung hier ein, würde mich freuen, Kritik dazu zu erhalten.
Ich denke es ist besser, wenn eine Schriftdefinition geklammert wird und sich selbst bendet, also geklammert bleibt oder \normalsize etc selbst am Ende aufruft.

u_fischer
16-03-2012, 11:22
Ich gebe zu, ich verstehe überhaupt nicht, wo eigentlich dein Problem ist.

Wenn du unbedingt eine "Schriftgrößen-Umgebung" brauchst, kannst du doch \begin{large}...\end{large} benutzen. Oder du definierst dir eine andere Umgebung.

Und wenn du unbedingt einen zu \textit{argument} analogen \textlarge{argument}-Befehl brauchst, kannst du in dir definieren.

Aber normalerweise werden die Befehle an Orten benutzt (z.B. zu Beginn einer Tabellezelle, in einer Fußnote, in einer Quote-Umgebung), wo es weder nötig noch sinnvoll ist, einen weiteren \endgroup-Befehl einzufügen, weil man sich sowieso schon in einer Gruppe befindet. Da sind Switche wie \large und \bfseries viel sinnvoller.

ctansearch
17-03-2012, 02:28
Problem gibt es da kein so dringendes, ich finde die derzeitige Definition halt nicht gut genug und suche eine bessere.

In den Foren wird man ständig davor gewarnt, die environment Struktur zu nutzen, wo sie nicht definiert ist, jetzt bekomme ich die Empfehlung, es doch einfach zu tun.

Vielleicht gehts ja besser? Mal sehen..