我发现这里一种陈述线性程序的可能性。但是,如果我有多个 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}
结果如下:
答案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 构造,那么您可以将参考标签放置在不同的位置并相应地进行计算。