gather - links und zentriert in einer Zeile Thema ist als GELÖST markiert

Formelsatz für Mathematik, Naturwissenschaften und Technik


markusinf

gather - links und zentriert in einer Zeile

Beitrag von markusinf »

Hallo zusammen,

ich möchte einen Block voll (zentrierter) Formeln einleiten, die Formeln sollten möglichst zentriert und mit label (rechts) erscheinen, vor der ersten hätte ich aber gern einen Pfiel linksbündig (oder einen kurzen Text. Das Ergebnis soll so aussehen (man verzeihe die Menge Punkte hier, Ausrichtung im Endergebnis natürlich 'sauber' und ohne Punkte):

===>..............a+b.........(2.1)
..................d+c+e=f......(2.2)
.....................d-e..........(2.3)

Gibt es dafür eine schöne Möglichkeit?! Die Formeln sollten möglichst zentriert auf die Seitenmitte, und nicht nur 'ihrer eigenen Spalte' sein. Zur Not nehme ich aber auch dafür Lösungen an, so lange die Nummerierung automatisch erfolgt.

Viele Grüße und vielen Dank
Markus

phi
Moderator
Moderator
Beiträge: 420
Registriert: Fr 6. Feb 2009, 21:28

Beitrag von phi »

Hallo,

dies scheint derzeit nur mit einem Hack vernünftig möglich zu sein:
\documentclass{minimal}

\usepackage{amsmath}
\usepackage{etoolbox}

\makeatletter
\newif\if@gather@prefix
\preto\gather{\global\@gather@prefixtrue}
\preto\place@tag@gather{%
  \if@gather@prefix\iftagsleft@
  \kern-\gdisplaywidth@
  \rlap{\gather@prefix}%
  \kern\gdisplaywidth@
  \fi\fi
}
\appto\place@tag@gather{%
  \if@gather@prefix\iftagsleft@\else
  \kern-\displaywidth
  \rlap{\gather@prefix}%
  \kern\displaywidth
  \fi\fi
  \global\@gather@prefixfalse
}
\newcommand*{\setgatherprefix}[1]{%
  \def\gather@prefix{#1}%
}
\makeatother


\begin{document}

\setgatherprefix{text}

\begin{gather}
  a + b + \frac12 \\
  d + c + e + f \\
  d - e
\end{gather}

\end{document}
Du könntest Morten Høgholm fragen, ob er vielleicht eine entsprechende Funktionalität in das mathtools-Paket einbauen könnte.

markusinf

Beitrag von markusinf »

Hallo,

erst mal super vielen Dank!! Das ist bisher mit abstand die beste Lösung!

Ich hab sie an einer Stelle leicht optimiert, damit er bei mehreren gather nacheinander den Prefix nicht jedes mal anzeigt (ohne \setgatherprefix{} natürlich):
\makeatletter
\newif\if@gather@prefix
%\preto\gather{\global\@gather@prefixtrue} %die Zeile raus
\preto\place@tag@gather{%
 [...]
}
\appto\place@tag@gather{%
 [...]
}
\newcommand*{\setgatherprefix}[1]{%
  \def\gather@prefix{#1}%
  \global\@gather@prefixtrue% die dafür rein
}
\makeatother 
Leider schaffe ich es bisher nicht, dass auch auf die Umgebung
gather*
an zu wenden, das wäre aber sehr schön, da ich diese für folgenden 'Hack' verwende:
% Igather -- intelligent gather
%
% igather behaves like the gather* environment, exception that every
% line with a \label command gets an equation number.
%
\makeatletter
\newenvironment{Igather}{\collect@body\@igather}{\global\@ignoretrue}

\newcommand\@igather[1]{{%
% store the current value of \label@in@display 
\let\old@label@in@display\label@in@display%
% redefine \label@in@display so that in \tag command is issued as well
\renewcommand\label@in@display[1]{\stepcounter{equation}\tag{\theequation}\old@label@in@display{##1}}%
\begin{gather*}
#1
\end{gather*}
}}
\makeatother
Wie kann ich die schöne Lösung (Hack hin oder her, sie tut) auf gather* erweitern?

Viele Grüße und vielen Dank
Markus

P.S.: Sobald das voll funktioniert, werde ich wohl eine Anfrage an Morten Høgholm (mit Verweis auf das Forum und damit Deine Lösung) schreiben.

markusinf

Beitrag von markusinf »

Bevor Mißverständnisse entstehen: der Igather Hack ist auch nicht von mir! Ich weiß allerdings nicht, woher er kommt, den verwenden hier einige ...

Gruß
Markus

phi
Moderator
Moderator
Beiträge: 420
Registriert: Fr 6. Feb 2009, 21:28

Beitrag von phi »

Hier ist eine etwas andere Implementierung von igather, die eine ähnliche Funktionalität im mathtools-Paket missbraucht:
\documentclass{minimal}

\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{etoolbox}

\makeatletter
\newif\if@gather@prefix
\preto\place@tag@gather{%
  \if@gather@prefix\iftagsleft@
  \kern-\gdisplaywidth@
  \rlap{\gather@prefix}%
  \kern\gdisplaywidth@
  \fi\fi
}
\appto\place@tag@gather{%
  \if@gather@prefix\iftagsleft@\else
  \kern-\displaywidth
  \rlap{\gather@prefix}%
  \kern\displaywidth
  \fi\fi
  \global\@gather@prefixfalse
}
\newcommand*{\setgatherprefix}[1]{%
  \def\gather@prefix{#1}%
  \@gather@prefixtrue
}
\let\orig@label@in@display\label@in@display
\def\label@in@igather#1{%
  \orig@label@in@display{#1}%
  \MT@newlabel{#1}%
}
\newenvironment*{igather}{%
  \mathtoolsset{showonlyrefs}%
  \let\label@in@display\label@in@igather
  \gather
}{%
  \endgather
}
\makeatother


\begin{document}

\setgatherprefix{text}

\begin{igather}
  a + b + \frac12 \\
  d + c + e + f \label{test} \\
  d - e
\end{igather}

\setgatherprefix{text2}

\begin{gather}
  a + b + \frac12 \\
  d + c + e + f \\
  d - e
\end{gather}

\end{document}
Derartige Hacks sollten eigentlich alle irgendwann ins mathtools-Paket aufgenommen werden.

markusinf

Beitrag von markusinf »

Hallo,

super, vielen Dank! (Bin gestern leider nicht dazu gekommen, das aus zu probieren)

Vielleicht hilft es ja auch ein paar anderen weiter. Ist die Sache nun schon bei den entsprechenden Leuten für die mathtools angekommen, oder soll ich da noch eine Mail versuchen zu schreiben?

Viele Grüße und erfolgreiches LaTex-en
Markus

phi
Moderator
Moderator
Beiträge: 420
Registriert: Fr 6. Feb 2009, 21:28

Beitrag von phi »

markusinf hat geschrieben: Vielleicht hilft es ja auch ein paar anderen weiter. Ist die Sache nun schon bei den entsprechenden Leuten für die mathtools angekommen, oder soll ich da noch eine Mail versuchen zu schreiben?
Ich habe bis jetzt nichts gemacht. Ich habe aber gehört, dass Morten Høgholm derzeit viel zu tun hat. Aber wenn du willst, kannst du gerne mal bei ihm nachfragen (auf Englisch), vielleicht bindet er ja entsprechende Funktionen ein. Ich habe aber keinen Überblick, wie oft so etwas gebraucht wird.

Antworten