使对齐的方程式改变对齐方式以避免在新行上出现方程式编号

使对齐的方程式改变对齐方式以避免在新行上出现方程式编号

我需要编写一个由多个约束组成的数学规划模型。约束以两列行表示:第一列是方程,第二列是其定义域,例如

x_i > l_i & \forall i \in S

但是两列都可能很长,所以如果一方面希望以某种方式将所有列水平对齐,另一方面,这些列可能最终会被垂直分割或打印出来超出页面的其他元素。

我当时认为一个不错的解决方案是使用一个类似对齐的环境,这样每个第一列都与其他列对齐,每个第二列也与其他列对齐。但是,如果行上没有等式数字的空间,那么我希望第二列(即域)右对齐,以填充第一列后面的空间,避免等式数字打印在新行上。

考虑以下

\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}

在此处输入图片描述

另外,您认为有更好的方法来排版这些模型吗?

短暂性脑缺血发作

答案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填充胶强制将条件分开,除非另有说明这里您通常不能\hfill在 ams 对齐中使用,因此需要先对其进行一些调整。

为了降低代码的重新定义,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\voffsetshowframe

还可以添加对超满行的检查。

在此处输入图片描述

答案4

另一种解决方案是仅在必要时将量词放在下一行(无编号)。flalign根据量词的对齐方式,可以通过两种方式在环境中完成此操作。我借此机会抑制了 sigma 后面多余的空格,因为下标过大。

        \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} 

在此处输入图片描述

相关内容