I wish to align the last line left while aligning the x_1 with the rest of the x_1, if I add two & in front of the last line, it messes up the lines above:
$
&min quad &x_1 quad + quad &x_2 quad + quad &x_3 quad + quad &x_4 quad + quad &x_5 quad + quad &x_6 quad + quad &x_7 & & \
&s.t. quad &x_1 quad + quad & quad & quad &x_4 quad + quad &x_5 quad + quad &x_6 quad + quad &x_7 quad >.eq quad &110 \
& quad &x_1 quad + quad &x_2 quad + quad & quad & quad &x_5 quad + quad &x_6 quad + quad &x_7 quad >.eq quad &80 \
& quad &x_1 quad + quad &x_2 quad + quad &x_3 quad + quad & quad & quad &x_6 quad + quad &x_7 quad >.eq quad &150 \
& quad &x_1 quad + quad &x_2 quad + quad &x_3 quad + quad &x_4 quad + quad & quad & quad &x_7 quad >.eq quad &30 \
& quad &x_1 quad + quad &x_2 quad + quad &x_3 quad + quad &x_4 quad + quad &x_5 quad & quad & quad >.eq quad &70 \
& quad & quad &x_2 quad + quad &x_3 quad + quad &x_4 quad + quad &x_5 quad + quad &x_6 quad & quad >.eq quad &160 \
& quad & quad & &x_3 quad + quad &x_4 quad + quad &x_5 quad + quad &x_6 quad + quad &x_7 quad >.eq quad &120 \
x_i gt.eq 0 quad &forall i = 1, dots, 7 \
$
Not sure how to describe accurately what I am trying to do, so if anyone has a suggestion about renaming the question, let me know!
Wow, that’s too much. If you don’t keep it as readable as possible, it will quickly go out of hand.
#show math.equation: it => {
show "+": $quad + quad$
it
}
#let eqFill = hide[$>=$]
#let f = hide[+] // filler
$
& min & x_1 + & x_2 + & x_3 + & x_4 + & x_5 + & x_6 + & x_7 & eqFill \
& s.t. & x_1 + & & & x_4 + & x_5 + & x_6 + & x_7 & >= & 110 \
& & x_1 + & x_2 + & & & x_5 + & x_6 + & x_7 & >= & 80 \
& & x_1 + & x_2 + & x_3 + & & & x_6 + & x_7 & >= & 150 \
& & x_1 + & x_2 + & x_3 + & x_4 + & & & x_7 & >= & 30 \
& & x_1 + & x_2 + & x_3 + & x_4 + & x_5 #f& & & >= & 70 \
& & & x_2 + & x_3 + & x_4 + & x_5 + & x_6 & & >= & 160 \
& & & & x_3 + & x_4 + & x_5 + & x_6 + & x_7 & >= & 120 \
x_i >= 0 & forall i = 1, ..., 7 \
$

Can you open a graphical editor and show the desired result?
After @Tinger said scripting, I had to do it:
#show math.equation: it => {
show "+": $quad + quad$
it
}
#let build-lines(values, skip: 1, prefix: none) = {
let n = values.len()
let skip-ranges = if skip <= 0 { ((),) * n } else {
range(1, n + skip).map(line => calc.rem-euclid(line, n) + 1).windows(skip)
}
for i in range(n) {
let skip-range = skip-ranges.at(i)
$&$
if i == 0 { prefix }
for nth in range(1, n + 1) {
let not-last = {
let full = range(nth + 1, n + 1).filter(x => x not in skip-range)
full.filter(x => x > nth - 1).len() != 0
}
$&$
if nth not in skip-range {
$x_nth$
if not-last { $+$ } else if nth < n { hide[$+$] }
}
if nth == n { $& >= & #values.at(i)$ }
}
if i < n - 1 { linebreak() }
}
}
#let eqFill = hide[$>=$]
$
& min & x_1 + & x_2 + & x_3 + & x_4 + & x_5 + & x_6 + & x_7 & eqFill \
#build-lines((110, 80, 150, 30, 70, 160, 120), prefix: $s.t.$, skip: 2) \
x_i >= 0 & forall i = 1, ..., 7 \
$
It outputs the exact same thing, but everything automatically changes depending on the number of values provided and the skip size. You can pass any integer value to it, and it will just work.
Sorry, I don’t think I explained properly. I want to align the last line with the rest of the xs, like so:
But I really appreciate the simplifications you’ve done to the rest of the equations!
P.S. why is the #f (filler) required there (and not anywhere else)?
Since there are so many align points, you just don’t have space between them to put the long line, so I think using place
is the only viable way. By removing the first align points you don’t even have to offset it. To right-align numbers a double alignment was done to switch the direction.
#show math.equation: it => {
show "+": $quad + quad$
it
}
#let eqFill = hide[$>=$]
#let f = hide[+] // filler
$
min quad & x_1 + & x_2 + & x_3 + & x_4 + & x_5 + & x_6 + & x_7 & eqFill \
s.t. quad & x_1 + & & & x_4 + & x_5 + & x_6 + & x_7 & >= && 110 \
& x_1 + & x_2 + & & & x_5 + & x_6 + & x_7 & >= && 80 \
& x_1 + & x_2 + & x_3 + & & & x_6 + & x_7 & >= && 150 \
& x_1 + & x_2 + & x_3 + & x_4 + & & & x_7 & >= && 30 \
& x_1 + & x_2 + & x_3 + & x_4 + & x_5 & & & >= && 70 \
& & x_2 + & x_3 + & x_4 + & x_5 + & x_6#f & & >= && 160 \
& & & x_3 + & x_4 + & x_5 + & x_6 + & x_7 & >= && 120 \
& #place($x_i >= 0 forall i = 1, ..., 7$) \
$
#show math.equation: it => {
show "+": $quad + quad$
it
}
#let build-lines(values, skip: 1, prefix: none) = {
let n = values.len()
let skip-ranges = if skip <= 0 { ((),) * n } else {
range(1, n + skip).map(line => calc.rem-euclid(line, n) + 1).windows(skip)
}
for i in range(n) {
let skip-range = skip-ranges.at(i)
if i == 0 { prefix + $quad$ }
for nth in range(1, n + 1) {
let not-last = {
let full = range(nth + 1, n + 1).filter(x => x not in skip-range)
full.filter(x => x > nth - 1).len() != 0
}
$&$
if nth not in skip-range {
$x_nth$
if not-last { $+$ } else if nth < n { hide[$+$] }
}
if nth == n { $& >= && #values.at(i)$ }
}
if i < n - 1 { linebreak() }
}
}
#let eqFill = hide[$>=$]
$
min quad & x_1 + & x_2 + & x_3 + & x_4 + & x_5 + & x_6 + & x_7 & eqFill \
#build-lines((110, 80, 150, 30, 70, 160, 120), prefix: $s.t.$, skip: 2) \
& #place($x_i >= 0 forall i = 1, ..., 7$) \
$

Because that column is right-aligned, and all other lines end with $quad + quad$
except this one.