いくつかの制約からなる数理計画モデルを書く必要があります。制約は2列の行として表されます。最初の列は方程式で、2番目の列はそのドメインです。例:
x_i > l_i & \forall i \in S
しかし、両方の列がかなり長くなる可能性があるため、一方では、何らかの方法ですべての列を水平に揃えることが望ましい場合、他方では、列が垂直に分割されたり、ページの他の要素を超えて印刷されたりする可能性があります。
そこで、適切な解決策は、1 つの align のような環境を使用して、各最初の列を他の列に揃え、各 2 番目の列も他の列に揃えることだと思いました。ただし、行に等号番号用のスペースが残っていない場合は、2 番目の列、つまりドメインを右揃えにして、最初の列の後のスペースを埋め、等号番号が新しい行に印刷されないようにしたいと思います。
次のことを考慮してください
\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}
ご覧のとおり、最初の不等式の定義域が長すぎるため、すべての式の番号が新しい行に表示されます。手動でスペースを追加して得られる、私が望む結果の近似値は次のとおりです。
\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}
2 点目ですが、これらのモデルをタイプセットするより良い方法はあると思いますか?
ティア
答え1
最初の行のラベルを、幅ゼロの右揃えのボックスに配置しました。
\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}
答え2
実際には位置合わせは必要ないので、gather
特に記載がない限り、充填接着剤を使用して条件を強制的に分離することができます。ここ通常は ams アライメントでは使用できませんので\hfill
、最初に少し調整する必要があります。
コードを減らすために、これを再定義すると、gather
もちろん、元の環境をそのままにして、これに基づいて新しい環境を作成することもできますgather
。
\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}
答え3
この目的のために特定のコマンドを定義できます。
\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}
にはオプションの引数があり\eqcond
、 を使用すると\eqcond[6em]{...}{...}
ボックスの幅が狭くなります。 を使用すると、\eqcond[0em]
全幅が得られます (式番号は行の下に表示されます)。
私は を使用しました。これはとgeometry
を改ざんするよりも優れています。このオプションは余白を表示するためのものだけです。\hoffset
\voffset
showframe
過剰に満たされた行のチェックを追加することもできます。
答え4
もう 1 つの解決策は、必要な場合にのみ、量指定子を下の行 (番号なし) に配置することです。これは、flalign
量指定子の配置に応じて、2 つの方法で環境を使用して実行できます。私は、下付き文字が非常に大きいため、シグマの後の余分なスペースを抑制する機会を利用しました。
\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}