여러 제약 조건으로 구성된 수학적 프로그래밍 모델을 작성해야 합니다. 제약 조건은 2열 행으로 표시됩니다. 첫 번째 열은 방정식이고 두 번째 열은 방정식의 영역입니다. 예:
x_i > l_i & \forall i \in S
그러나 두 열 모두 상당히 길 수 있으므로 어떤 방식으로든 모든 열을 수평으로 정렬하는 것이 바람직할 수 있지만, 다른 열은 수직으로 분할되거나 페이지의 다른 요소를 덮어 인쇄될 수 있습니다.
나는 적절한 해결책이 하나의 정렬형 환경을 사용하여 각 첫 번째 열이 다른 열과 정렬되고 각 두 번째 열도 다른 열과 정렬되도록 하는 것이라고 생각했습니다. 그러나 eq를 위한 공간이 없다면. 숫자가 줄에 남아 있으면 두 번째 열, 즉 도메인을 오른쪽 정렬하여 eq를 피하기 위해 첫 번째 열 뒤의 공간을 채우고 싶습니다. 새 줄에 인쇄될 숫자입니다.
다음을 고려하세요
\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}
보시다시피 저는 모든 eq를 얻습니다. 첫 번째 부등식의 도메인이 너무 길기 때문에 새 줄에 번호를 입력합니다. 손으로 공간을 추가하여 얻은 결과의 근사치는 다음과 같습니다.
\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}
두 번째로, 이러한 모델을 조판하는 더 좋은 방법이 있다고 생각하십니까?
티아
답변1
방금 첫 번째 줄 레이블을 너비가 0이고 오른쪽 정렬된 상자에 배치했습니다.
\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
and 를 조작하는 것보다 낫습니다 \voffset
. 이 showframe
옵션은 단지 여백을 표시하기 위한 것입니다.
라인이 너무 찼는지 확인하는 기능을 추가할 수도 있습니다.
답변4
또 다른 해결책은 필요한 경우에만 수량자를 아래 줄(번호 없음)에 배치하는 것입니다. 이는 flalign
수량자의 정렬에 따라 두 가지 방법으로 환경 에서 수행될 수 있습니다 . 나는 매우 큰 첨자로 인해 시그마 이후에 불필요한 공간을 억제할 기회를 얻었습니다.
\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}