Discussion:
Gleichungen und Text mischen (\intertext in \aligned)
(zu alt für eine Antwort)
Rolf Krahl
2004-01-14 16:30:46 UTC
Permalink
Folgendes Problem:

Ich habe ein System von Gleichungen, das eine inhaltliche Einheit
bildet und das ich deshalb aligned setzen will und mit einer einzigen
Gleichungsnummer versehen will.

Im Moment mache ich folgendes (vereinfachtes Beispiel, natürlich):

---------- *snip* ----------

\documentclass{scrartcl}
\usepackage{amsmath}

\begin{document}

Consider the following problem:

\begin{equation}
\label{eqn:model:waermeleit}
\begin{aligned}
\rho c_p \partial_t \vartheta - \lambda \Delta \vartheta &= 0
&\quad& \text{in \(\Omega\),} \\
\vartheta &= \vartheta_{D}
&\quad& \text{on \(\Gamma_D\),} \\
\partial_{\mathbf{n}} \vartheta &= 0
&\quad& \text{on \(\Gamma_N\).}
\end{aligned}
\end{equation}

\end{document}

---------- *snap* ----------

Im wesentlichen tut das auch das was es soll. Es hat nur einen
Nachteil, es ist hoffnungslos zu breit. (Zweispaltiger Satz, die
Gleichungen sind natürlich etwas komplizierter und die Gebiete in der
rechten Spalte ebenfalls.)

Um Platz zu sparen, will ich nun die Gebiete, in denen die Gleichungen
jeweils gelten als Textzeilen zwischen die Gleichungen schreiben,
anstatt rechts davon. Also so etwa

In \Omega we have:
\rho c_p \partial_t ...
On \Gamma_D:
\vartheta &= \vartheta_{D}
On \Gamma_N:
\partial_{\mathbf{n}} \vartheta &= 0

Die Gleichungen sollen aber immer noch ein gemeinsames Alignment um
das Gleichheitszeichen haben und es auch nur eine Gleichungsnummer für
das Gesammtsystem vergeben werden. Da kommt einem natürlich
\intertext{} in den Sinn. D.h., ich würde gerne folgendes schreiben:

---------- *snip* ----------

\documentclass{scrartcl}
\usepackage{amsmath}

\begin{document}

Consider the following problem:

\begin{equation}
\label{eqn:model:waermeleit}
\begin{aligned}
\intertext{In \(\Omega\) we have:}
\rho c_p \partial_t \vartheta - \lambda \Delta \vartheta &= 0 \\
\intertext{On \(\Gamma_D\) we have:}
\vartheta &= \vartheta_{D} \\
\intertext{On \(\Gamma_N\) we have:}
\partial_{\mathbf{n}} \vartheta &= 0.
\end{aligned}
\end{equation}

\end{document}

---------- *snap* ----------

Allein, das geht nicht:
"ERROR: Package amsmath Error: Invalid use of \intertext."

\intertext ist nicht erlaubt in aligned. Es geht in nur in align.

D.h. folgendes kommt meinen Vorstellungen schon halbwegs nahe:

---------- *snip* ----------

\documentclass{scrartcl}
\usepackage{amsmath}

\begin{document}

Consider the following problem:

\begin{subequations}
\begin{align}
\label{eqn:model:waermeleit}
\intertext{In \(\Omega\) we have:}
\rho c_p \partial_t \vartheta - \lambda \Delta \vartheta &= 0. \\
\intertext{On \(\Gamma_D\) we have:}
\vartheta &= \vartheta_{D}. \\
\intertext{On \(\Gamma_N\) we have:}
\partial_{\mathbf{n}} \vartheta &= 0.
\end{align}
\end{subequations}

\end{document}

---------- *snap* ----------

Probleme jetzt:

* Die einzelnen Gleichungen werden als Untergleichungen
durchnummeriert (1a, 1b, 1c, ...), statt einer einzigen Nummer
(1). Ok, damit könnte ich leben, weil ich das Gesammtsystem
immernoch als Gleichung (1) ansprechen kann und jeder weiß was
gemeint ist. Aber schön ist das nicht.

* \intertext mag offensichtlich garnicht vor der ersten Gleichung
stehen. Es wird vor dem ersten \intertext eine leere Gleichung
gesetzt. Ok, dem könnte man mit einem Evil-Hack abhelfen, indem
man die Gleichungsnummer der leeren Gleichung mit \notag
unterdrückt (geht, habe ich ausprobiert) und dann die leere Zeile
durch ein passendes negatives \vspace vor dem ganzen System
kompensiert. Aber das ist erstens Fummelei und erscheint mir
zweitens als *evil*.

Hat jemand bessere Ideen?
--
Rolf Krahl <***@gmx.net>
Herbert Voss
2004-01-14 16:42:10 UTC
Permalink
Post by Rolf Krahl
\begin{equation}
\label{eqn:model:waermeleit}
\begin{aligned}
intertext ist aus amsmath und deswegen kannst du hier
nicht equation nehmen -> align

Herbert
David Kastrup
2004-01-14 18:47:56 UTC
Permalink
Post by Herbert Voss
Post by Rolf Krahl
\begin{equation}
\label{eqn:model:waermeleit}
\begin{aligned}
intertext ist aus amsmath und deswegen kannst du hier
nicht equation nehmen -> align
Das ist nicht der Grund: equation ist auch in amsmath umdefiniert (im
Gegensatz zu eqnarray, was man dann in der Tat nicht mehr verwenden
sollte).

Der Grund ist, daß \intertext nur im Bereich einer äußeren
Gleichungsumgebung funktioniert und nicht noch geschachtelt in
aligned.

Deiner Empfehlung nach dem -> möchte ich mich allerdings anschließen.
--
David Kastrup, Kriemhildstr. 15, 44793 Bochum
de.comp.text.tex FAQ: <URL:http://www.dante.de/faq/de-tex-faq>
Herbert Voss
2004-01-14 18:59:16 UTC
Permalink
Post by David Kastrup
Das ist nicht der Grund: equation ist auch in amsmath umdefiniert (im
Gegensatz zu eqnarray, was man dann in der Tat nicht mehr verwenden
sollte).
Der Grund ist, daß \intertext nur im Bereich einer äußeren
Gleichungsumgebung funktioniert und nicht noch geschachtelt in
aligned.
du meinst, dass dies nicht geht???

\begin{align}
\label{eqn:model:waermeleit}
\begin{aligned}
\intertext{In \(\Omega\) we have:}
\rho c_p \partial_t \vartheta - \lambda \Delta \vartheta &= 0 \\
\intertext{On \(\Gamma_D\) we have:}
\vartheta &= \vartheta_{D} \\
\intertext{On \(\Gamma_N\) we have:}
\partial_{\mathbf{n}} \vartheta &= 0.
\end{aligned}
\end{align}


Herbert
Rolf Krahl
2004-01-14 19:31:58 UTC
Permalink
Post by Herbert Voss
du meinst, dass dies nicht geht???
\begin{align}
\label{eqn:model:waermeleit}
\begin{aligned}
\intertext{In \(\Omega\) we have:}
[...]
Post by Herbert Voss
\end{aligned}
\end{align}
"Gehen" scheint relativ. Es kompiliert ohne Fehler durch, liefert nur
eine Warnung "Overfull \hbox (1.82497pt too wide)". Die Gleichungen
sind nicht horizental zentriert, sondern der ganze Block wird
linksbündig gesetzt. Die Gleichungsnummer erscheint unterhalb des
Blocks und nicht vertikal zentriert. (Für letzteres würde ich mal
darauf spekulieren, daß das innere aligned den ganzen horizontalen
Platz einnehmen will und die Gleichungsnummer deshalb nicht mehr
rechts daneben paßt. Deshalb auch die Overfull \hbox.)

gather statt dem äußeren align liefert dasselbe Ergebnis. multline
liefert wieder den Fehler "Invalid use of \intertext."


Zu den im OP beschriebenen Problemen der "align in subequations"-
Lösung (die IMHO - bis auf die Gleichungsnummern - äquivalent zum
vorgeschlagenen einfachen align sein müßte) poste ich morgen früh noch
mal ein Update. Da will ich mit klarem Kopf noch ein bißchen
experimentieren.
--
Rolf Krahl <***@gmx.net>
Herbert Voss
2004-01-14 19:36:31 UTC
Permalink
Post by Rolf Krahl
Post by Herbert Voss
du meinst, dass dies nicht geht???
\begin{align}
\label{eqn:model:waermeleit}
\begin{aligned}
\intertext{In \(\Omega\) we have:}
[...]
Post by Herbert Voss
\end{aligned}
\end{align}
"Gehen" scheint relativ. Es kompiliert ohne Fehler durch, liefert nur
natürlich ...
Post by Rolf Krahl
gather statt dem äußeren align liefert dasselbe Ergebnis. multline
liefert wieder den Fehler "Invalid use of \intertext."
warum reicht dir denn nicht align alleine??

Herbert

\begin{align}
\intertext{In \(\Omega\) we have:}\nonumber
\rho c_p \partial_t \vartheta - \lambda \Delta \vartheta &= 0 \\
\intertext{On \(\Gamma_D\) we have:}
\vartheta &= \vartheta_{D} \\
\intertext{On \(\Gamma_N\) we have:}
\partial_{\mathbf{n}} \vartheta &= 0.\nonumber
\end{align}
Rolf Krahl
2004-01-15 18:57:28 UTC
Permalink
Post by Herbert Voss
warum reicht dir denn nicht align alleine??
\begin{align}
\intertext{In \(\Omega\) we have:}\nonumber
\rho c_p \partial_t \vartheta - \lambda \Delta \vartheta &= 0 \\
\intertext{On \(\Gamma_D\) we have:}
\vartheta &= \vartheta_{D} \\
\intertext{On \(\Gamma_N\) we have:}
\partial_{\mathbf{n}} \vartheta &= 0.\nonumber
\end{align}
Dann wird die Gleichungsnummer nicht dem ganzen Block, sondern der
einzelnen mittleren Gleichung zugeordnet. Der Unterschied mag optisch
gering sein, aber die Gleichungsnummer wird eben vertikal nicht exakt
mit dem ganzen Block zentriert, sondern exakt mit der mittleren
Gleichung aligniert. Deshalb wird man sie wohl auch optisch eher der
Einzelgleichung zuordnen. Das ist mindestens verwirrend.

Außerdem: Siehe <bu6na2$8q$***@kohl.informatik.uni-bremen.de>. Der
Wunsch nach der einzelnen Gleichungsnummer wird sich wohl nicht
sinnvoll realisieren lassen.
--
Rolf Krahl <***@gmx.net>
Herbert Voss
2004-01-15 19:08:59 UTC
Permalink
Post by Rolf Krahl
Post by Herbert Voss
warum reicht dir denn nicht align alleine??
\begin{align}
\intertext{In \(\Omega\) we have:}\nonumber
\rho c_p \partial_t \vartheta - \lambda \Delta \vartheta &= 0 \\
\intertext{On \(\Gamma_D\) we have:}
\vartheta &= \vartheta_{D} \\
\intertext{On \(\Gamma_N\) we have:}
\partial_{\mathbf{n}} \vartheta &= 0.\nonumber
\end{align}
Dann wird die Gleichungsnummer nicht dem ganzen Block, sondern der
einzelnen mittleren Gleichung zugeordnet. Der Unterschied mag optisch
gering sein, aber die Gleichungsnummer wird eben vertikal nicht exakt
mit dem ganzen Block zentriert, sondern exakt mit der mittleren
Gleichung aligniert. Deshalb wird man sie wohl auch optisch eher der
Einzelgleichung zuordnen. Das ist mindestens verwirrend.
Wunsch nach der einzelnen Gleichungsnummer wird sich wohl nicht
sinnvoll realisieren lassen.
Da muss man schon lange suchen, um etwas zu finden, was
im Mathemodus nicht gehen soll ...

\begin{equation}
\def\arraystretch{1.5}
\begin{array}{ll}
\textrm{In $\Omega$ we have:}\\
\rho c_p \partial_t \vartheta - \lambda \Delta \vartheta &= 0 \\
\textrm{On $\Gamma_D$ we have:}\\
\vartheta &= \vartheta_{D} \\
\textrm{On $\Gamma_N$ we have:}\\
\partial_{\mathbf{n}} \vartheta &= 0.
\end{array}
\end{equation}


Herbert
Herbert Voss
2004-01-15 19:11:04 UTC
Permalink
Post by Rolf Krahl
\begin{equation}
\def\arraystretch{1.5}
....
sorry, das war die falsche Variante.

HErbert

\begin{equation}
\def\arraystretch{1.5}
\begin{array}{ll}
\rlap{In $\Omega$ we have:}\\
\rho c_p \partial_t \vartheta - \lambda \Delta \vartheta &= 0 \\
\rlap{On $\Gamma_D$ we have:}\\
\vartheta &= \vartheta_{D} \\
\rlap{On $\Gamma_N$ we have:}\\
\partial_{\mathbf{n}} \vartheta &= 0.
\end{array}
\end{equation}
Rolf Krahl
2004-01-17 16:17:52 UTC
Permalink
Post by Herbert Voss
Post by Rolf Krahl
Wunsch nach der einzelnen Gleichungsnummer wird sich wohl nicht
sinnvoll realisieren lassen.
Da muss man schon lange suchen, um etwas zu finden, was
im Mathemodus nicht gehen soll ...
Du scheinst in die Realisierung meines ursprünglichen Wunsches mehr
Engagement investieren zu wollen, als ich selbst. Danke für Deine
Bemühungen!


Aber ich habe mich vielleicht unklar ausgedrückt: Ich habe nicht daran
gezweifelt, daß es irgendwie möglich ist, nur eine Gleichungsnummer zu
bekommen, sondern daran, daß das damit verfolgte Ziel - das
Gleichungssystem wirkt als eine abgeschlossene Einheit - erreicht
wird. In dem anderen Artikel hatte ich geschrieben:

| Der vollen Satz an Gleichungen zerfällt durch die Texteinschübe
| optisch in einzelne Blöcke, so daß eine einzige Gleichungsnummer eh'
| nicht dem ganzen System, sondern mehr oder weniger zufällig einem
| der Blöcke zugeordnet werden würde.

Der von mir gepostete LaTeX-Code war natürlich nur ein vereinfachtes
Beispiel. Wenn Du Dir das volle System anschaust, dann wird sicher
klar, was ich meine:

---------- *snip* ----------

\documentclass{scrartcl}
\usepackage{amsmath}

\begin{document}

Now, we are in a state to formulate the fully coupled model.
\vspace{-\belowdisplayskip}
\begin{subequations}
\label{eqn:model:system}
\begin{align}
\intertext{In the bulk of both phases \(\Omega_l \cup \Omega_g\) the
following equations hold:}
\rho (\partial_t \mathbf{u} + \mathbf{u} \cdot \nabla \mathbf{u})
- \mu \Delta \mathbf{u} + \nabla p
&= \rho \mathbf{g}
- \rho \beta_T (\vartheta - \vartheta_0) \mathbf{g}, \\
\nabla \cdot \mathbf{u} &= 0, \\
\rho c_p (\partial_t \vartheta + \mathbf{u} \cdot \nabla \vartheta)
- \lambda \Delta \vartheta
&= \boldsymbol{\tau} : (\nabla \mathbf{u}). \\
\intertext{In \(\Omega_g\) the vapor density \(\rho_v\) fulfills}
\partial_t \rho_v + \mathbf{u} \cdot \nabla \rho_v
- \varsigma \Delta \rho_v
&= 0.
\intertext{The boundary conditions on \(\Gamma_S\) are}
\frac{\rho_l - \rho_g}{\rho_l \rho_g} j^2 \mathbf{n}
+ [ \mathbf{T} \mathbf{n} ]
&= \sigma (\nabla_S \cdot \mathbf{n}) \mathbf{n}
- \sigma_T \nabla_S \vartheta,\\
[\mathbf{u} ] &= - \frac{\rho_l - \rho_g}{\rho_l \rho_g} j \mathbf{n},\\
\mathbf{u}_l \cdot \mathbf{n} - \frac{1}{\rho_l} j &= u_\Gamma, \\
\vartheta &= \vartheta_{eq}(\psi(\rho_v, \vartheta)), \\
\varsigma \partial_{-\mathbf{n}} \rho_v
&= \Bigl( 1 - \frac{\rho_v}{\rho_g} \Bigr) j, \\
j &= \frac{[ -\lambda \partial_{\mathbf{n}} \vartheta ]}%
{\Lambda - [ c_p ] \vartheta}.
\end{align}
\end{subequations}

\end{document}

---------- *snap* ----------

(So ungefähr steht das jetzt in dem Paper, das ich am Donnerstag
eingereicht habe.)

Eine einzige Gleichungsnummer wäre vielleicht gegangen, wenn man einen
Rahmen drumrum gezogen hätte. Aber der hätte dann wieder mehr Platz
gefressen. Die Schwierigkeit, das alles in die vorgegebene
Zeilenlänge zu packen, war aber gerade der Ausgangspunkt des Problems.

Das Ergebnis ist nicht ideal - am meisten stört mich, daß die vielen
Untergleichungsnummern von den eigentlichen Gleichungen ablenken -
aber ein Kompromiß, mit dem ich leben kann.
--
Rolf Krahl <***@gmx.net>
Herbert Voss
2004-01-17 16:49:53 UTC
Permalink
Post by Rolf Krahl
Der von mir gepostete LaTeX-Code war natürlich nur ein vereinfachtes
Beispiel. Wenn Du Dir das volle System anschaust, dann wird sicher
eben, so wie mein letzter Vorschlag ... und dann sieht
es auch entsprechend aus. Text kann man natürlich auch ganz
nach links schieben, usw...

Herbert

\documentclass{scrartcl}
\usepackage{amsmath}

\begin{document}

Now, we are in a state to formulate the fully coupled model.

\vspace{-\belowdisplayskip}
\begin{flalign}\label{eqn:model:system}
\def\arraystretch{1.5}
\begin{array}{lrl}
\rlap{In the bulk of both phases \(\Omega_l \cup \Omega_g\) the
following equations hold:}\\
& \rho (\partial_t \mathbf{u} + \mathbf{u} \cdot \nabla \mathbf{u})
- \mu \Delta \mathbf{u} + \nabla p
&= \rho \mathbf{g}
- \rho \beta_T (\vartheta - \vartheta_0) \mathbf{g}, \\
& \nabla \cdot \mathbf{u} &= 0, \\
& \rho c_p (\partial_t \vartheta + \mathbf{u} \cdot \nabla \vartheta)
- \lambda \Delta \vartheta
&= \boldsymbol{\tau} : (\nabla \mathbf{u}). \\
\rlap{In \(\Omega_g\) the vapor density \(\rho_v\) fulfills}\\
& \partial_t \rho_v + \mathbf{u} \cdot \nabla \rho_v
- \varsigma \Delta \rho_v
&= 0.\\
\rlap{The boundary conditions on \(\Gamma_S\) are}\\
& \dfrac{\rho_l - \rho_g}{\rho_l \rho_g} j2 \mathbf{n}
+ [ \mathbf{T} \mathbf{n} ]
&= \sigma (\nabla_S \cdot \mathbf{n}) \mathbf{n}
- \sigma_T \nabla_S \vartheta,\\\relax
& [\mathbf{u} ] &= - \dfrac{\rho_l - \rho_g}{\rho_l \rho_g} j
\mathbf{n},\\
& \mathbf{u}_l \cdot \mathbf{n} - \dfrac{1}{\rho_l} j &= u_\Gamma, \\
& \vartheta &= \vartheta_{eq}(\psi(\rho_v, \vartheta)), \\[10pt]
& \varsigma \partial_{-\mathbf{n}} \rho_v
&= \Bigl( 1 - \dfrac{\rho_v}{\rho_g} \Bigr) j, \\[10pt]
& j &= \dfrac{[ -\lambda \partial_{\mathbf{n}} \vartheta ]}%
{\Lambda - [ c_p ] \vartheta}.
\end{array}
\end{flalign}

\end{document}

David Kastrup
2004-01-14 19:34:31 UTC
Permalink
Post by Herbert Voss
Post by David Kastrup
Das ist nicht der Grund: equation ist auch in amsmath umdefiniert
(im Gegensatz zu eqnarray, was man dann in der Tat nicht mehr
verwenden sollte). Der Grund ist, daß \intertext nur im Bereich
einer äußeren Gleichungsumgebung funktioniert und nicht noch
geschachtelt in aligned.
du meinst, dass dies nicht geht???
\begin{align}
\label{eqn:model:waermeleit}
\begin{aligned}
\intertext{In \(\Omega\) we have:}
\rho c_p \partial_t \vartheta - \lambda \Delta \vartheta &= 0 \\
\intertext{On \(\Gamma_D\) we have:}
\vartheta &= \vartheta_{D} \\
\intertext{On \(\Gamma_N\) we have:}
\partial_{\mathbf{n}} \vartheta &= 0.
\end{aligned}
\end{align}
Ja, genau das meinte ich. Schade, daß es nicht stimmt. Na schön,
dann war meine Erklärung auch nicht besser. Es bleibt aber dabei, daß
equation mit Sicherheit eine amsmath-definierte Umgebung ist, die sich
auch an die Spacingkonventionen von amsmath hält (und es gibt auch
noch ein equation* dazu) und mit \tag und ähnlichem umgehen kann.
Gleiches gilt für \[ und \]: auch das wird von amsmath umdefiniert.

Hingegen sind displaymath, eqnarray und eqnarray* _nicht_ mehr zu
verwenden, wenn man amsmath benutzt, weil die nicht zurechtfrisiert
werden.
--
David Kastrup, Kriemhildstr. 15, 44793 Bochum
de.comp.text.tex FAQ: <URL:http://www.dante.de/faq/de-tex-faq>
Herbert Voss
2004-01-14 20:00:46 UTC
Permalink
Post by David Kastrup
Ja, genau das meinte ich. Schade, daß es nicht stimmt. Na schön,
dann war meine Erklärung auch nicht besser. Es bleibt aber dabei, daß
equation mit Sicherheit eine amsmath-definierte Umgebung ist, die sich
das ist natürlich richtig. Nur aktiviert diese Neudefinition
nicht \intertext@, so dass es besagte Fehlermeldung gibt.

Herbert
Rolf Krahl
2004-01-15 18:48:34 UTC
Permalink
Post by Rolf Krahl
* Die einzelnen Gleichungen werden als Untergleichungen
durchnummeriert (1a, 1b, 1c, ...), statt einer einzigen Nummer
(1). Ok, damit könnte ich leben, weil ich das Gesammtsystem
immernoch als Gleichung (1) ansprechen kann und jeder weiß was
gemeint ist. Aber schön ist das nicht.
Ich bin mittlerweile zu dem Schluß gekommen, daß es hier wohl keine
optimale Lösung gibt. Der vollen Satz an Gleichungen zerfällt durch
die Texteinschübe optisch in einzelne Blöcke, so daß eine einzige
Gleichungsnummer eh' nicht dem ganzen System, sondern mehr oder
weniger zufällig einem der Blöcke zugeordnet werden würde. Ich werde
also mit den subequations leben, auch wenn es wirklich nicht schön
ist.
Post by Rolf Krahl
* [...] Es wird vor dem ersten \intertext eine leere Gleichung
gesetzt.
Das liegt offensichtlich an dem \label{}. Wenn man folgendes schreibt ...

---------- *snip* ----------

\begin{subequations}
\label{eqn:model:waermeleit}
\begin{align}
\intertext{In \(\Omega\) we have:}
\rho c_p \partial_t \vartheta - \lambda \Delta \vartheta &= 0. \\
...
\end{align}
\end{subequations}

\end{document}

---------- *snap* ----------

... dann wird keine leere Gleichung gesetzt. (Dort gehört der \label
eigentlich auch hin. Den in das align zu setzen, war ein Fehler der
aus dem diversen hin- und herprobieren stehengeblieben war.)


Allerdings setzt \intertext noch einen zusätzlichen \vspace, so daß
der Abstand zu dem vorhergehenden Text zu groß wird. Dies kann man
mit einem

\vspace{-\belowdisplayskip}

vor dem subequations kompensieren.
--
Rolf Krahl <***@gmx.net>
Loading...