diff --git a/crates/typst-layout/src/math/lr.rs b/crates/typst-layout/src/math/lr.rs index d195e67dc..01a7f4ccd 100644 --- a/crates/typst-layout/src/math/lr.rs +++ b/crates/typst-layout/src/math/lr.rs @@ -62,7 +62,7 @@ pub fn layout_lr( } // Handle MathFragment::Variant fragments that should be scaled up. - for fragment in inner_fragments { + for fragment in inner_fragments.iter_mut() { if let MathFragment::Variant(ref mut variant) = fragment { if variant.mid_stretched == Some(false) { variant.mid_stretched = Some(true); @@ -74,10 +74,18 @@ pub fn layout_lr( // Remove weak SpacingFragment immediately after the opening or immediately // before the closing. let mut index = 0; + let opening_exists = inner_fragments + .first() + .is_some_and(|f| f.class() == MathClass::Opening); + let closing_exists = inner_fragments + .last() + .is_some_and(|f| f.class() == MathClass::Closing); fragments.retain(|fragment| { + let discard = (index == start_idx + 1 && opening_exists + || index + 2 == end_idx && closing_exists) + && matches!(fragment, MathFragment::Spacing(_, true)); index += 1; - (index != start_idx + 2 && index + 1 != end_idx) - || !matches!(fragment, MathFragment::Spacing(_, true)) + !discard }); ctx.extend(fragments); diff --git a/tests/ref/math-lr-weak-spacing.png b/tests/ref/math-lr-weak-spacing.png index 871aaa2eb..2478ca2a3 100644 Binary files a/tests/ref/math-lr-weak-spacing.png and b/tests/ref/math-lr-weak-spacing.png differ diff --git a/tests/suite/math/delimited.typ b/tests/suite/math/delimited.typ index fc00333d3..226740501 100644 --- a/tests/suite/math/delimited.typ +++ b/tests/suite/math/delimited.typ @@ -87,6 +87,7 @@ $ 1/(2 y (x) (2(3)) $ // Test ignoring weak spacing immediately after the opening // and immediately before the closing. $ [#h(1em, weak: true)A(dif x, f(x) dif x)sum#h(1em, weak: true)] $ +$ lr(\[#h(1em, weak: true)lr(A dif x, f(x) dif x\))sum#h(1em, weak:true)a) $ --- math-lr-nested --- // Test nested lr calls.