Seite 1 von 1

Schönere Implementierung von Informationen über "="

Verfasst: Di 24. Aug 2010, 16:22
von guy.brush™
Hallo,

da ich gerade beim Texen darauf gestoßen bin, wollte ich euch einmal fragen, welche schönere Implementierung oder Formatierung es für folgendes Problem gibt:

Und zwar ist es ja recht häufig so, dass insbesondere bei Beweisen in der Mathematik Informationen über dem Gleichheitszeichen dazu geschrieben werden. Wenn dieses wichtige Informationen sind, so gliedere ich sie in der Regel mit \intertext aus. Aber häufig sind es kleinere Bemerkungen, die einfach das Verständnis erleichtern sollen und würde ich da jedes Mal \intertext verwenden, würde ich den ganzen Beweis irgendwie zerstückeln.

Meine aktuelle Implementierung sieht wie folgt aus. Zwar nicht besonders schön, aber es erspart etwas Tipparbeit :).
\documentclass[a4paper,%
	       11pt,%
	       twoside,%
	       headings=openright]%
	      {scrreprt}

% --------------------- Einbinden benötigter Pakete ---------------------
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[a4paper,left=3.1cm,right=3.1cm,top=2.9cm,bottom=2.9cm]{geometry}
\usepackage[babel,german=quotes]{csquotes}
\usepackage[intlimits]{amsmath}
\usepackage{amssymb}
\usepackage{amsfonts}
\usepackage{amsopn}
\usepackage{mathtools}

% --------------------- Definition neuer Befehle ---------------------
% Definition neuer Befehle (allgemein)
\newcommand{\overunderset}[3]{\overset{#1}{\underset{#2}{#3}}}	% Verknüpfung der Befehle \overset und \underset
\newcommand{\anf}[1]{\textmd{\glqq}#1\textmd{\grqq:}}	% Formatierung und Ausgabe von "#1" für Beweise (z.B. für Inklusionen)
\newcommand{\oset}[2]{\overset{\mathclap{#1}}{#2}}	% Verknüpfung der Befehle \overset und \mathclap für Gleichungen
\newcommand{\uset}[2]{\underset{\mathclap{#1}}{#2}}	% Verknüpfung der Befehle \underset und \mathclap für Gleichungen
\newcommand{\ouset}[3]{\overset{\mathclap{#1}}{\underset{\mathclap{#2}}{#3}}}	% Verknüpfung der Befehle \overset, \underset und \mathclap für Gleichungen

\newcommand{\iquad}{\quad}			% Fügt 1x \quad Abstand ein
\newcommand{\iiquad}{\qquad}			% Fügt 2x \quad Abstand ein
\newcommand{\iiiquad}{\qquad\quad}		% Fügt 3x \quad Abstand ein
\newcommand{\ivquad}{\qquad\qquad}		% Fügt 4x \quad Abstand ein
\newcommand{\vquad}{\qquad\qquad\quad}		% Fügt 5x \quad Abstand ein
\newcommand{\viquad}{\qquad\qquad\qquad}	% Fügt 6x \quad Abstand ein
\newcommand{\viiquad}{\qquad\qquad\qquad\quad}	% Fügt 7x \quad Abstand ein

\begin{document}

Gleichheitszeichen untereinander formatiert:

\begin{align*}
  P[A \cup B] \iquad&=\iquad P[A \uplus (B \setminus A)]\\
  &\oset{\sigma\text{-Add.}}{=}\iquad P[A] + P[A \setminus A]
     + P[A \cap B] - P[A \cap B]\\
  &\oset{\sigma\text{-Add.}}{=}\iquad P[A] + P[\underbrace{(B \setminus A) \uplus
    (A \cap B)}_{= B}] - P[A \cap B].
\end{align*}


Gleichheitszeichen verrutscht:

\begin{align*}
  P[A \cup B] &= P[A \uplus (B \setminus A)]\\
  &\overset{\sigma\text{-Add.}}{=} P[A] + P[A \setminus A]
     + P[A \cap B] - P[A \cap B]\\
  &\overset{\text{anderer Text}}{=} P[A] + P[\underbrace{(B \setminus A) \uplus
    (A \cap B)}_{= B}] - P[A \cap B]\\
  &= 42.
\end{align*}
\end{document}

Hmm...ich hoffe, dass meine Vorgehensweise verständlich ist :).


Viele Grüße,

guy.brush™

Verfasst: Di 24. Aug 2010, 16:39
von KOMA
Ohne zusätzliches mathtools bekomme ich eine Fehlermeldung wegen \mathclap. Außerdem frage ich mich, warum Du nicht \stackrel verwendest, und warum Du erst mit \mathclap die Breite des Materials über dem Gleichheitszeichen entfernst, um dann mit \iquad künstlich wieder Abstand hinzu zu fügen. Mir ist also ehrlich gesagt nicht ganz klar, was Du vor hast.

Verfasst: Di 24. Aug 2010, 17:26
von guy.brush™
Hallo KOMA,

oh Entschuldigung, habe da wohl das "mathtools" package zu viel herausgelöscht :).

Ich habe das oben einmal korrigiert und den Beispiel-Code auch etwas noch ergänzt.


Ich nutze \underset bzw. \overset, weil ich damit sowohl darunter als auch darüber Text schreiben kann. Außerdem stammt das, wenn ich mich nicht irre, aus den AMS-Paketen. Aber \overset sollte fast dasselbe Ergebnis liefern wie \stackrel. Ich glaube, \stackrel verkleinert den Text darüber geringfügig.

Ich hatte es auch so verstanden, dass \stackrel eher dazu gedacht ist, sich neue Zeichen zu basteln (wie z.B. \stackrel{^}{=}) und die anderen beiden für beliebigen Inhalt.


Das Problem, weshalb ich das so kompliziert mache, ist folgendes:

Wenn ich Text über oder unter ein Gleichheitszeichen schreibe, wird die Ausrichtung in einer align-Umgebung mittels & verpfuscht. Scheinbar richtet sich das nämlich immer nach dem am weitesten sich links befindenden Punkt des Zeichens. Und da wir hier nun Text über dem Gleichheitszeichen haben, ist nicht mehr der linke Anfang des Gleichheitszeichen der sich am weitesten links befindende Punkt, sondern der erste Buchstabe des Textes über dem Gleichheitszeichen. Und danach wird das ganze dann ausgerichtet, weshalb sich die ganzen Gleichheitszeichen verschieben (siehe 2. align*-Umgebung, die ich oben noch hinzugefügt habe).

Deshalb habe ich das ganze mit einem \mathclap zu einem 0x0 Pixel großen Kästchen zusammengeschrumpft und danach gleichmäßigen Abstand mit den \quads eingefügt.

Es ist etwas umständlich, aber so immerhin machbar. Deshalb interessiere ich mich dafür, ob es eine schönere Implementierung dafür gäbe.


Ich hoffe, ich habe das jetzt etwas besser erklärt und/oder das erweiterte Minimalbeispiel macht es etwas besser deutlich :). Falls nicht, male ich mal noch ein kleines Bildchen :).


Viele liebe Grüße,

guy.brush™

Verfasst: Di 24. Aug 2010, 17:57
von KOMA
Achso. Dann kann man das natürlich so machen, wie Du das gemacht hast.
\documentclass[a4paper,%
          11pt,%
          twoside,%
          headings=openright]%
         {scrreprt}

% --------------------- Einbinden benötigter Pakete ---------------------
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[a4paper,left=3.1cm,right=3.1cm,top=2.9cm,bottom=2.9cm]{geometry}
\usepackage[intlimits]{amsmath}

\begin{document}

Gleichheitszeichen untereinander formatiert:

\[\begin{array}{l@{}c@{}l}
  P[A \cup B] &=& P[A \uplus (B \setminus A)]\\
  &\overset{\sigma\text{-Add.}}{=}& P[A] + P[A \setminus A]
     + P[A \cap B] - P[A \cap B]\\
  &\overset{\text{anderer Text}}{=}& P[A] + P[\underbrace{(B \setminus A) \uplus
    (A \cap B)}_{= B}] - P[A \cap B]\\
  &=& 42.
\end{array}\]
\end{document}
Wenn man weiß, in welcher Reihenfolge amsmath bei align etc. die Spaltentypen vergibt, geht das vermutlich auch mit der richtigen Anzahl an & und einer solchen Umgebung. Das überlasse ich den Experten wie Herbert. Bei eqnarray (das man mit amsmath nicht verwenden sollte) ging das noch einfach:
documentclass[a4paper,%
          11pt,%
          twoside,%
          headings=openright]%
         {scrreprt}

% --------------------- Einbinden benötigter Pakete ---------------------
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[a4paper,left=3.1cm,right=3.1cm,top=2.9cm,bottom=2.9cm]{geometry}

\begin{document}

Gleichheitszeichen untereinander formatiert:

\begin{eqnarray*}
  P[A \cup B] &=& P[A \uplus (B \setminus A)]\\
  &\stackrel{\sigma\mathrm{-Add.}}{=}& P[A] + P[A \setminus A]
     + P[A \cap B] - P[A \cap B]\\
  &\stackrel{\mathrm{anderer Text}}{=}& P[A] + P[\underbrace{(B \setminus A) \uplus
    (A \cap B)}_{= B}] - P[A \cap B]\\
  &=& 42.
\end{eqnarray*}
\end{document}

Verfasst: Do 2. Sep 2010, 01:24
von guy.brush™
Sorry für die späte Rückmeldung.


eqnarray verwende ich gar nicht. Damit habe ich gar nicht erst angefangen, sondern habe seit Beginn meiner "LaTeX-Zeit" direkt align verwendet :).

Die array Variante ist natürlich auch möglich. Allerdings etwas umständlicher, wenn man sie im Nachhinein noch einfügen muss als meine Variante, oder nicht?

Ich wundere mich auch ein bisschen, dass da noch niemand etwas zu implementiert hat, denn zumindest bei uns ist diese Variante der Informationen in Beweisen relativ stark üblich (handschriftlich) und jedes Mal ein \intertext dürfte die Gleichung wohl etwas zerstückeln (meine laienhafte Einschätzung).

Verfasst: Do 2. Sep 2010, 11:01
von KOMA
Ich kenne das mit den Informationen über dem Gleichheitszeichen gar nicht, sondern eher mit Text rechts neben der entsprechenden Zeile der Gleichung. AFAIR wird diese Lösung auch in der amsmath-Anleitung vorgeführt.

Warum Du das mit array umständlicher findest, kann ich nicht nachvollziehen. Es hat auf jeden Fall den Vorteil, dass man nicht sämtliche Abstände von Hand ändern muss, nur weil der längste Text gekürzt wurde oder ein noch längerer Text eingefügt werden musste.

Verfasst: Do 2. Sep 2010, 15:24
von guy.brush™
Das mit dem "umständlicher empfinden" war rein ein erstes Gefühl :). Vielleicht ist es auch eher eine Frage der Gewohnheit :).

Verfasst: Do 2. Sep 2010, 15:52
von KOMA
Ach, ich sollte vielleicht noch erwähnen, das ich kein Mathematiker, sondern als Informatiker nur so eine Art Hilfsmathematiker bin. Dafür habe ich schon für diverse Verlage verschiedene Bücher und Proceedings etc. gesetzt. Darunter waren auch diverse mathematische. Ich kann also nicht sagen, ob nicht irgendwelche Mathematiker das üblicherweise genauso machen wie Du. Nur erinnern kann ich mich nur an die Methode mit der Erklärung neben der Gleichungszeile (teilweise sogar im Rand, was mit amsmath eine Qual ist).