陈述线性程序 - 其标题存在问题

陈述线性程序 - 其标题存在问题

我发现这里一种陈述线性程序的可能性。但是,如果我有多个 LP 并更改例如其中一个约束,则标题的位置会丢失 - 只有最后一个是正确的。可以修复它吗?或者更好的是:我如何在 LP 旁边写标题(就像图片中的第一个 LP 一样)?

这是我的代码:

\documentclass{scrbook}

\usepackage{mathtools,zref-savepos}

\parindent0mm

\begin{document}

    \zsavepos{text-left-margin}%

    Heres is some text. 

    \begin{alignat*}{4}
    & \zsavepos{top-lp}\text{min} \quad \mathrlap{\sum_{a \in A} k_a u_a + \sum_{r \in R} \sum_{a \in A} f_a^r y_a^r} \\
    & \text{s.t.} \quad & \smashoperator{\sum_{a \in \delta_i^+}} y_a^r - \smashoperator{\sum_{a \in \delta_i^-}} y_a^r
    &= t & \quad & (\forall r \in R)(\forall i \in V) \\
    & & y_a^r &\leq u_a && (\forall r \in R)(\forall a \in A) \\
    & &   u_a &\in \{0,1\} && (\forall a \in A) \\
    & & y_a^r &\in [0,1] && (\forall r \in R)(\forall a \in A)\zsavepos{bottom-lp}
    \raisebox{0.5\dimexpr\zposy{top-lp}sp-\zposy{bottom-lp}sp}[0pt][0pt]{%
        \makebox[0pt][r]{\rlap{(LP)}\hspace*{\dimexpr\zposx{bottom-lp}sp-\zposx{text-left-margin}sp}}}
    \end{alignat*}

    Text...

    \begin{alignat*}{4}
    & \zsavepos{top-lp}\text{min} \quad \mathrlap{\sum_{a \in A} k_a u_a + \sum_{r \in R} \sum_{a \in A} f_a^r y_a^r} \\
    & \text{s.t.} \quad & \smashoperator{\sum_{a \in \delta_i^+}} y_a^r - \smashoperator{\sum_{a \in \delta_i^-}} y_a^r
    &= t & \quad & (\forall r \in R) \\
    & & y_a^r &\leq u_a && (\forall r \in R) \\
    & &   u_a &\in \{0,1\} && (\forall a \in A) \\
    & & y_a^r &\in [0,1] && (\forall r \in R)\zsavepos{bottom-lp}
    \raisebox{0.5\dimexpr\zposy{top-lp}sp-\zposy{bottom-lp}sp}[0pt][0pt]{%
        \makebox[0pt][r]{\rlap{(LP)}\hspace*{\dimexpr\zposx{bottom-lp}sp-\zposx{text-left-margin}sp}}}
    \end{alignat*}

    Text...

    \begin{alignat*}{4}
    & \zsavepos{top-lp}\text{min} \quad \mathrlap{\sum_{a \in A} k_a u_a + \sum_{r \in R} \sum_{a \in A} f_a^r y_a^r} \\
    & \text{s.t.} \quad & \smashoperator{\sum_{a \in \delta_i^+}} y_a^r - \smashoperator{\sum_{a \in \delta_i^-}} y_a^r
    &= abc & \quad &  \\
    & & y_a^r &\leq u_a &&  a \in A\\
    & &   u_a &\in \{0,1\} && \\
    & & y_a^r &\in [0,1] && \zsavepos{bottom-lp}
    \raisebox{0.5\dimexpr\zposy{top-lp}sp-\zposy{bottom-lp}sp}[0pt][0pt]{%
        \makebox[0pt][r]{\rlap{(LP)}\hspace*{\dimexpr\zposx{bottom-lp}sp-\zposx{text-left-margin}sp}}}
    \end{alignat*}

\end{document}

结果如下:

错误的LP

答案1

zref\zsavepos{<label>}工作原理与 非常相似\label{<label>},这要求您每次调用时都有一个唯一的<label>。您使用的是相同的,这就是您对齐方式不同的原因。

在下面的例子中,每个 LP 都被赋予了独特的顶部top-lp-?和底部bottom-lp-?标签:

在此处输入图片描述

\documentclass{scrbook}

\usepackage{mathtools,zref-savepos}

\setlength{\parindent}{0mm}

\begin{document}

\zsavepos{text-left-margin}%
Here is some text\ldots
\begin{alignat*}{4}
  & \zsavepos{top-lp-1}\text{min} \quad \mathrlap{\sum_{a \in A} k_a u_a + \sum_{r \in R} \sum_{a \in A} f_a^r y_a^r} \\
  & \text{s.t.} \quad & \smashoperator{\sum_{a \in \delta_i^+}} y_a^r - \smashoperator{\sum_{a \in \delta_i^-}} y_a^r
  &= t & \quad & (\forall r \in R)(\forall i \in V) \\
  & & y_a^r &\leq u_a && (\forall r \in R)(\forall a \in A) \\
  & &   u_a &\in \{0,1\} && (\forall a \in A) \\
  & & y_a^r &\in [0,1] && (\forall r \in R)(\forall a \in A)\zsavepos{bottom-lp-1}
  \raisebox{0.5\dimexpr\zposy{top-lp-1}sp-\zposy{bottom-lp-1}sp}[0pt][0pt]{%
    \makebox[0pt][r]{\rlap{(LP)}\hspace*{\dimexpr\zposx{bottom-lp-1}sp-\zposx{text-left-margin}sp}}}
\end{alignat*}

Text\ldots
\begin{alignat*}{4}
  & \zsavepos{top-lp-2}\text{min} \quad \mathrlap{\sum_{a \in A} k_a u_a + \sum_{r \in R} \sum_{a \in A} f_a^r y_a^r} \\
  & \text{s.t.} \quad & \smashoperator{\sum_{a \in \delta_i^+}} y_a^r - \smashoperator{\sum_{a \in \delta_i^-}} y_a^r
  &= t & \quad & (\forall r \in R) \\
  & & y_a^r &\leq u_a && (\forall r \in R) \\
  & &   u_a &\in \{0,1\} && (\forall a \in A) \\
  & & y_a^r &\in [0,1] && (\forall r \in R)\zsavepos{bottom-lp-2}
  \raisebox{0.5\dimexpr\zposy{top-lp-2}sp-\zposy{bottom-lp-2}sp}[0pt][0pt]{%
    \makebox[0pt][r]{\rlap{(LP)}\hspace*{\dimexpr\zposx{bottom-lp-2}sp-\zposx{text-left-margin}sp}}}
\end{alignat*}

Text\ldots
\begin{alignat*}{4}
  & \zsavepos{top-lp-3}\text{min} \quad \mathrlap{\sum_{a \in A} k_a u_a + \sum_{r \in R} \sum_{a \in A} f_a^r y_a^r} \\
  & \text{s.t.} \quad & \smashoperator{\sum_{a \in \delta_i^+}} y_a^r - \smashoperator{\sum_{a \in \delta_i^-}} y_a^r
  &= abc & \quad &  \\
  & & y_a^r &\leq u_a &&  a \in A\\
  & &   u_a &\in \{0,1\} && \\
  & & y_a^r &\in [0,1] && \zsavepos{bottom-lp-3}
  \raisebox{0.5\dimexpr\zposy{top-lp-3}sp-\zposy{bottom-lp-3}sp}[0pt][0pt]{%
    \makebox[0pt][r]{\rlap{(LP)}\hspace*{\dimexpr\zposx{bottom-lp-3}sp-\zposx{text-left-margin}sp}}}
\end{alignat*}

\end{document}

请注意,水平放置是相对于text-left-margin标签而言的,标签设置在文本块的左侧。如果您希望“标题”(LP)更接近实际的 LP 构造,那么您可以将参考标签放置在不同的位置并相应地进行计算。

相关内容