Ich muss ein mathematisches Programmiermodell schreiben, das aus mehreren Einschränkungen besteht. Einschränkungen werden als Zeilen mit zwei Spalten dargestellt: Die erste Spalte ist die Gleichung und die zweite ihre Domäne, z. B.
x_i > l_i & \forall i \in S
Beide Spalten können jedoch recht lang sein. Wenn es also einerseits wünschenswert wäre, sie alle irgendwie horizontal auszurichten, kann es andererseits dazu kommen, dass die Spalten vertikal geteilt werden oder so gedruckt werden, dass sie über andere Elemente der Seite hinausragen.
Ich dachte damals, dass eine gute Lösung darin bestehen würde, eine align-ähnliche Umgebung zu verwenden, sodass jede erste Spalte an den anderen ausgerichtet ist und jede zweite Spalte ebenfalls an den anderen ausgerichtet ist. Wenn jedoch in der Zeile kein Platz für die Gleichungsnummer mehr übrig ist, möchte ich, dass die zweite Spalte, also die Domäne, rechtsbündig ausgerichtet ist, um den Platz nach der ersten Spalte auszufüllen und zu vermeiden, dass die Gleichungsnummer in der neuen Zeile gedruckt wird.
Folgendes berücksichtigen
\documentclass[a4,13pt,reqno,twoside, openright]{article}
\usepackage[utf8x]{inputenc}
\usepackage{float}
\usepackage{subfig}
\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{amsthm}
\usepackage{amsfonts}
\usepackage{amssymb}
\allowdisplaybreaks
\textwidth = 14cm
\hoffset = -1.5cm
\voffset = -2.0cm
\begin{document}
\begin{subequations}
\begin{align}
& y^D_{tzgm} \le y_{tzgm} & \forall t \in T, z \in Z, g \in G_z, m \in \overline{M}_{zg}
\\
& x_{tzg} \leq \sum_{m \in M_{zg}} P_{zgm} \cdot y_{tzgm} + \sum_{m \in \bar M_{zg}} (P^D_{zgm} - P_{zgm}) \cdot y^D_{tzgm} & \forall t \in T, z \in Z, g \in G_z\\
&x_{tzg} \geq \sum_{m \in M_{zg}} p_{zgm} \cdot y_{tzgm} + \sum_{m \in \bar M_{zg}} (p^D_{zgm} - p_{zgm}) \cdot y^D_{tzgm} & \forall t \in T, z \in Z, g \in G_z\\
& o_{1zh} = v_{0h} &\forall z \in Z, h \in H_z\\
& o_{(|T|+1)zh} = v_{(|T|+1)h} & \forall z \in Z, h \in H_z\\
& o_{tzh} + n_{th} + \eta_{h} \cdot m_{tzh} = o_{(t+1)zh} + s_{tzh} + l_{tzh} & \forall t \in T, z \in Z, h \in H_z
\end{align}
\end{subequations}
\end{document}
Wie Sie sehen, bekomme ich jede Gleichungsnummer in einer neuen Zeile, da die erste Ungleichung eine zu lange Definitionsmenge hat. Eine Annäherung an das gewünschte Ergebnis, die ich durch manuelles Hinzufügen von Leerzeichen erhalte, ist
\documentclass[a4,13pt,reqno,twoside, openright]{article}
\usepackage[utf8x]{inputenc}
\usepackage{float}
\usepackage{subfig}
\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{amsthm}
\usepackage{amsfonts}
\usepackage{amssymb}
\allowdisplaybreaks
\textwidth = 14cm
\hoffset = -1.5cm
\voffset = -2.0cm
\begin{document}
\begin{subequations}
\begin{align}
& y^D_{tzgm} \le y_{tzgm} \qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad \mathrlap{\forall t \in T, z \in Z, g \in G_z, m \in \overline{M}_{zg}}
\\
& x_{tzg} \leq \sum_{m \in M_{zg}} P_{zgm} \cdot y_{tzgm} + \sum_{m \in \bar M_{zg}} (P^D_{zgm} - P_{zgm}) \cdot y^D_{tzgm} & \forall t \in T, z \in Z, g \in G_z\\
&x_{tzg} \geq \sum_{m \in M_{zg}} p_{zgm} \cdot y_{tzgm} + \sum_{m \in \bar M_{zg}} (p^D_{zgm} - p_{zgm}) \cdot y^D_{tzgm} & \forall t \in T, z \in Z, g \in G_z\\
& o_{1zh} = v_{0h} &\forall z \in Z, h \in H_z\\
& o_{(|T|+1)zh} = v_{(|T|+1)h} & \forall z \in Z, h \in H_z\\
& o_{tzh} + n_{th} + \eta_{h} \cdot m_{tzh} = o_{(t+1)zh} + s_{tzh} + l_{tzh} & \forall t \in T, z \in Z, h \in H_z
\end{align}
\end{subequations}
\end{document}
Und noch eine Anmerkung: Glauben Sie, dass es bessere Möglichkeiten gibt, diese Modelle zu setzen?
TIA
Antwort1
Ich habe einfach die erste Zeilenbeschriftung in ein rechtsbündiges Feld mit der Breite Null gesetzt.
\documentclass[a4,13pt,reqno,twoside, openright]{article}
\usepackage[utf8x]{inputenc}
\usepackage{float}
\usepackage{subfig}
\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{amsthm}
\usepackage{amsfonts}
\usepackage{amssymb}
\allowdisplaybreaks
\textwidth = 14cm
\hoffset = -1.5cm
\voffset = -2.0cm
\begin{document}
\begin{subequations}
\begin{align}
& y^D_{tzgm} \le y_{tzgm} & \makebox[0pt][r]{$\forall t \in T, z \in Z, g \in G_z, m \in \overline{M}_{zg}$}
\\
& x_{tzg} \leq \sum_{m \in M_{zg}} P_{zgm} \cdot y_{tzgm} + \sum_{m \in \bar M_{zg}} (P^D_{zgm} - P_{zgm}) \cdot y^D_{tzgm} & \forall t \in T, z \in Z, g \in G_z\\
&x_{tzg} \geq \sum_{m \in M_{zg}} p_{zgm} \cdot y_{tzgm} + \sum_{m \in \bar M_{zg}} (p^D_{zgm} - p_{zgm}) \cdot y^D_{tzgm} & \forall t \in T, z \in Z, g \in G_z\\
& o_{1zh} = v_{0h} &\forall z \in Z, h \in H_z\\
& o_{(|T|+1)zh} = v_{(|T|+1)h} & \forall z \in Z, h \in H_z\\
& o_{tzh} + n_{th} + \eta_{h} \cdot m_{tzh} = o_{(t+1)zh} + s_{tzh} + l_{tzh} & \forall t \in T, z \in Z, h \in H_z
\end{align}
\end{subequations}
\end{document}
Antwort2
Da Sie nicht wirklich eine Ausrichtung wünschen, können Sie einfach gather
die Bedingungen mit Füllkleber auseinander zwingen, außer wie angegebenHierSie können es normalerweise nicht \hfill
in AMS-Ausrichtungen verwenden, also müssen Sie es zuerst ein wenig optimieren.
Um den Code klein zu halten, wird dieser neu definiert. gather
Natürlich wäre es auch möglich, auf dieser Grundlage eine neue Umgebung zu erstellen und die ursprüngliche Umgebung so zu belassen, gather
wie sie war.
\documentclass[a4,13pt,reqno,twoside, openright]{article}
\usepackage[utf8x]{inputenc}
\usepackage{float}
\usepackage{subfig}
\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{amsthm}
\usepackage{amsfonts}
\usepackage{amssymb}
\allowdisplaybreaks
\textwidth = 14cm
\hoffset = -1.5cm
\voffset = -2.0cm
\makeatletter
\def\set@gather@field{%
\iftagsleft@
\global\lineht@\ht\z@
\else
\global\lineht@\dp\z@
\fi
\kern\eqnshift@
\unhbox\z@
\hfil
}
\def\gather@#1{%
\ingather@true \let\split\insplit@
\let\tag\tag@in@align \let\label\label@in@display
\chardef\dspbrk@context\z@
\intertext@ \displ@y@ \Let@
\let\math@cr@@@\math@cr@@@gather
\gmeasure@{#1}%
\global\shifttag@false
\tabskip\z@skip
\global\row@\@ne
\halign to\displaywidth\bgroup
\strut@
\setboxz@h{$\m@th\displaystyle##$}%
\calc@shift@gather
\set@gather@field
\tabskip\@centering
&\setboxz@h{\strut@{##}}%
\place@tag@gather
\tabskip \iftagsleft@ \gdisplaywidth@ \else \z@skip \span\fi
\crcr
#1%
}
\makeatother
\begin{document}
\begin{subequations}
\begin{gather}
y^D_{tzgm} \le y_{tzgm} \quad\hfill \forall t \in T, z \in Z, g \in G_z, m \in \overline{M}_{zg}
\\
x_{tzg} \leq \sum_{m \in M_{zg}} P_{zgm} \cdot y_{tzgm} + \sum_{m \in \bar M_{zg}} (P^D_{zgm} - P_{zgm}) \cdot y^D_{tzgm} \quad\hfill\forall t \in T, z \in Z, g \in G_z\\
x_{tzg} \geq \sum_{m \in M_{zg}} p_{zgm} \cdot y_{tzgm} + \sum_{m \in \bar M_{zg}} (p^D_{zgm} - p_{zgm}) \cdot y^D_{tzgm} \quad\hfill\forall t \in T, z \in Z, g \in G_z\\
o_{1zh} = v_{0h} \quad\hfill\forall z \in Z, h \in H_z\\
o_{(|T|+1)zh} = v_{(|T|+1)h} \quad\hfill\forall z \in Z, h \in H_z\\
o_{tzh} + n_{th} + \eta_{h} \cdot m_{tzh} = o_{(t+1)zh} + s_{tzh} + l_{tzh} \quad\hfill\forall t \in T, z \in Z, h \in H_z
\end{gather}
\end{subequations}
\end{document}
Antwort3
Sie können zu diesem Zweck einen speziellen Befehl definieren:
\documentclass[a4paper]{article}
\usepackage[textwidth=14cm,showframe]{geometry}
\usepackage{amsmath}
\newcommand{\eqcond}[3][3em]{%
\makebox[\dimexpr\displaywidth-#1][s]{%
$\displaystyle#2\hfill#3$}%
}
\allowdisplaybreaks
\begin{document}
\begin{subequations}
\begin{align}
&\eqcond
{y^D_{tzgm} \le y_{tzgm}}
{\forall t \in T, z \in Z, g \in G_z, m \in \overline{M}_{zg}}
\\
&\eqcond
{x_{tzg} \leq \sum_{m \in M_{zg}} P_{zgm} \cdot y_{tzgm} +
\sum_{m \in \bar M_{zg}} (P^D_{zgm} - P_{zgm}) \cdot y^D_{tzgm}}
{\forall t \in T, z \in Z, g \in G_z}
\\
&\eqcond
{x_{tzg} \geq \sum_{m \in M_{zg}} p_{zgm} \cdot y_{tzgm} +
\sum_{m \in \bar M_{zg}} (p^D_{zgm} - p_{zgm}) \cdot y^D_{tzgm}}
{\forall t \in T, z \in Z, g \in G_z}
\\
&\eqcond
{o_{1zh} = v_{0h}}
{\forall z \in Z, h \in H_z}
\\
&\eqcond
{o_{(|T|+1)zh} = v_{(|T|+1)h}}
{\forall z \in Z, h \in H_z}
\\
&\eqcond
{o_{tzh} + n_{th} + \eta_{h} \cdot m_{tzh} =
o_{(t+1)zh} + s_{tzh} + l_{tzh}}
{\forall t \in T, z \in Z, h \in H_z}
\end{align}
\end{subequations}
\end{document}
Es gibt ein optionales Argument für \eqcond
; mit \eqcond[6em]{...}{...}
wird die Breite der Box reduziert. Mit \eqcond[0em]
erhalten Sie die volle Breite (und die Gleichungsnummer wird unter die Linie verschoben).
Ich habe verwendet , das ist besser, als an und geometry
herumzubasteln ; die Option dient lediglich zum Anzeigen der Ränder.\hoffset
\voffset
showframe
Man könnte auch eine Prüfung auf überfüllte Zeilen einbauen.
Antwort4
Eine andere Lösung besteht darin, die Quantifizierer nur bei Bedarf in eine Zeile darunter (unnummeriert) zu setzen. Dies kann mit der Umgebung je nach Ausrichtung der Quantifizierer auf zwei Arten erfolgen flalign
. Ich habe die Gelegenheit genutzt, um überflüssigen Leerraum nach dem Sigma zu unterdrücken, der durch besonders große Indizes bedingt ist.
\documentclass[a4,11pt,reqno,twoside, openright]{article}
\usepackage[utf8x]{inputenc}
\usepackage{graphicx}
\usepackage{mathtools}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage[textwidth = 14cm, nomarginpar, showframe]{geometry}%
\allowdisplaybreaks
\begin{document}
\begin{subequations}
\begin{flalign}
\hspace{4em} & & y^D_{tzgm} & ≤ y_{tzgm} &\forall t \in T, z &\in Z, g \in G_z, m \in \overline{M}_{zg} \\%
& & x_{tzg} &\leq \mathrlap{\sum_{\mathclap{m \in M_{zg}}} P_{zgm} · y_{tzgm} + \sum_{\mathclap{m \in \bar M_{zg}}} (P^D_{zgm} - P_{zgm}) · y^D_{tzgm}}\\[-12pt]
\notag & & & & & \forall t \in T, z \in Z, g \in G_z \\
& & x_{tzg} & \geq \mathrlap{\sum_{\mathclap{m \in M_{zg}}} p_{zgm} · y_{tzgm} + \sum_{\mathclap{m \in \bar M_{zg}}} (p^D_{zgm} - p_{zgm}) · y^D_{tzgm}}\\[-12pt]
\notag & & & & &\forall t \in T, z \in Z, g \in G_z \\
& & o_{1zh} & = v_{0h} & & \forall z \in Z, h \in H_z \\
& & o_{(|T|+1)zh} & = v_{(|T|+1)h} & & \forall z \in Z, h\in H_z \\
& & \mathllap{o_{tzh} + n_{th} + η_{h} · m_{tzh}} & =\mathrlap{ o_{(t+1)zh} + s_{tzh} + l_{tzh} } & & \forall t \in T, z \in Z, h \in H_z
\end{flalign}
\end{subequations}
\begin{subequations}
\begin{flalign}
& & y^D_{tzgm} & ≤ y_{tzgm} & \hspace{8em}&\ \mathllap{\forall t \in T, z \in Z, g \in G_z, m \in \overline{M}_{zg}} \\%
& & x_{tzg} &\leq \mathrlap{\sum_{\mathclap{m \in M_{zg}}} P_{zgm} · y_{tzgm} + \sum_{\mathclap{m \in \bar M_{zg}}} (P^D_{zgm} - P_{zgm}) · y^D_{tzgm}}\\[-12pt]
\notag & & & & & \mathllap{\forall t \in T, z \in Z, g \in G_z} \\
& & x_{tzg} & \geq \mathrlap{\sum_{\mathclap{m \in M_{zg}}} p_{zgm} · y_{tzgm} + \sum_{\mathclap{m \in \bar M_{zg}}} (p^D_{zgm} - p_{zgm}) · y^D_{tzgm}}\\[-12pt]
\notag & & & & & \mathllap{\forall t \in T, z \in Z, g \in G_z} \\
& & o_{1zh} & = v_{0h} & & \mathllap{∀z \in Z, h \in H_z} \\
& & o_{(|T|+1)zh} & = v_{(|T|+1)h} & & \mathllap{\forall z \in Z, h \in H_z} \\
& & \mathllap{o_{tzh} + n_{th} + η_{h} · m_{tzh}} & =\mathrlap{ o_{(t+1)zh} + s_{tzh} + l_{tzh} } & & \mathllap{\forall t \in T, z \in Z, h \in H_z}
\end{flalign}
\end{subequations}
\end{document}