diff options
| author | Malo <57839069+MDLC01@users.noreply.github.com> | 2025-06-11 09:29:38 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-11 08:29:38 +0000 |
| commit | 3a6d5fd6b21c85fa100d7fc1e7508ee4b484d99c (patch) | |
| tree | f8039295d90102b1d9385669a9b28a730c4188cd | |
| parent | 98034903e4184708dbaf3cf6b23a4f4de5e910ec (diff) | |
Do not force `math.mid` elements to have the Large math class (#5980)
| -rw-r--r-- | crates/typst-layout/src/math/lr.rs | 45 | ||||
| -rw-r--r-- | tests/ref/math-lr-mid-class.png | bin | 0 -> 556 bytes | |||
| -rw-r--r-- | tests/ref/math-lr-mid-size-nested-equation.png | bin | 900 -> 920 bytes | |||
| -rw-r--r-- | tests/ref/math-lr-mid-size.png | bin | 2210 -> 2251 bytes | |||
| -rw-r--r-- | tests/ref/math-lr-mid.png | bin | 1399 -> 1413 bytes | |||
| -rw-r--r-- | tests/suite/math/delimited.typ | 8 |
6 files changed, 34 insertions, 19 deletions
diff --git a/crates/typst-layout/src/math/lr.rs b/crates/typst-layout/src/math/lr.rs index e0caf417..a3b5cb05 100644 --- a/crates/typst-layout/src/math/lr.rs +++ b/crates/typst-layout/src/math/lr.rs @@ -45,12 +45,12 @@ pub fn layout_lr( // Scale up fragments at both ends. match inner_fragments { - [one] => scale(ctx, one, relative_to, height, None), + [one] => scale_if_delimiter(ctx, one, relative_to, height, None), [first, .., last] => { - scale(ctx, first, relative_to, height, Some(MathClass::Opening)); - scale(ctx, last, relative_to, height, Some(MathClass::Closing)); + scale_if_delimiter(ctx, first, relative_to, height, Some(MathClass::Opening)); + scale_if_delimiter(ctx, last, relative_to, height, Some(MathClass::Closing)); } - _ => {} + [] => {} } // Handle MathFragment::Glyph fragments that should be scaled up. @@ -58,7 +58,7 @@ pub fn layout_lr( if let MathFragment::Glyph(ref mut glyph) = fragment { if glyph.mid_stretched == Some(false) { glyph.mid_stretched = Some(true); - scale(ctx, fragment, relative_to, height, Some(MathClass::Large)); + scale(ctx, fragment, relative_to, height); } } } @@ -97,7 +97,7 @@ pub fn layout_mid( for fragment in &mut fragments { if let MathFragment::Glyph(ref mut glyph) = fragment { glyph.mid_stretched = Some(false); - glyph.class = MathClass::Fence; + glyph.class = MathClass::Relation; } } @@ -105,8 +105,12 @@ pub fn layout_mid( Ok(()) } -/// Scale a math fragment to a height. -fn scale( +/// Scales a math fragment to a height if it has the class Opening, Closing, or +/// Fence. +/// +/// In case `apply` is `Some(class)`, `class` will be applied to the fragment if +/// it is a delimiter, in a way that cannot be overridden by the user. +fn scale_if_delimiter( ctx: &mut MathContext, fragment: &mut MathFragment, relative_to: Abs, @@ -117,20 +121,23 @@ fn scale( fragment.class(), MathClass::Opening | MathClass::Closing | MathClass::Fence ) { - // This unwrap doesn't really matter. If it is None, then the fragment - // won't be stretchable anyways. - let short_fall = DELIM_SHORT_FALL.at(fragment.font_size().unwrap_or_default()); - stretch_fragment( - ctx, - fragment, - Some(Axis::Y), - Some(relative_to), - height, - short_fall, - ); + scale(ctx, fragment, relative_to, height); if let Some(class) = apply { fragment.set_class(class); } } } + +/// Scales a math fragment to a height. +fn scale( + ctx: &mut MathContext, + fragment: &mut MathFragment, + relative_to: Abs, + height: Rel<Abs>, +) { + // This unwrap doesn't really matter. If it is None, then the fragment + // won't be stretchable anyways. + let short_fall = DELIM_SHORT_FALL.at(fragment.font_size().unwrap_or_default()); + stretch_fragment(ctx, fragment, Some(Axis::Y), Some(relative_to), height, short_fall); +} diff --git a/tests/ref/math-lr-mid-class.png b/tests/ref/math-lr-mid-class.png Binary files differnew file mode 100644 index 00000000..6487578d --- /dev/null +++ b/tests/ref/math-lr-mid-class.png diff --git a/tests/ref/math-lr-mid-size-nested-equation.png b/tests/ref/math-lr-mid-size-nested-equation.png Binary files differindex df010668..750ad14c 100644 --- a/tests/ref/math-lr-mid-size-nested-equation.png +++ b/tests/ref/math-lr-mid-size-nested-equation.png diff --git a/tests/ref/math-lr-mid-size.png b/tests/ref/math-lr-mid-size.png Binary files differindex 12b4c086..07d33722 100644 --- a/tests/ref/math-lr-mid-size.png +++ b/tests/ref/math-lr-mid-size.png diff --git a/tests/ref/math-lr-mid.png b/tests/ref/math-lr-mid.png Binary files differindex 42e6da70..8af85b00 100644 --- a/tests/ref/math-lr-mid.png +++ b/tests/ref/math-lr-mid.png diff --git a/tests/suite/math/delimited.typ b/tests/suite/math/delimited.typ index 794ffd8a..b8656151 100644 --- a/tests/suite/math/delimited.typ +++ b/tests/suite/math/delimited.typ @@ -77,6 +77,14 @@ $ lr(body) quad lr(size: #1em, body) quad lr(size: #(1em+20%), body) $ +--- math-lr-mid-class --- +// Test that `mid` creates a Relation, but that can be overridden. +$ (a | b) $ +$ (a mid(|) b) $ +$ (a class("unary", |) b) $ +$ (a class("unary", mid(|)) b) $ +$ (a mid(class("unary", |)) b) $ + --- math-lr-unbalanced --- // Test unbalanced delimiters. $ 1/(2 (x) $ |
