diff --git a/crates/typst-library/src/math/mod.rs b/crates/typst-library/src/math/mod.rs index c29ad29b4..1b5c27f87 100644 --- a/crates/typst-library/src/math/mod.rs +++ b/crates/typst-library/src/math/mod.rs @@ -43,7 +43,7 @@ use self::ctx::*; use self::fragment::*; use self::row::*; use self::spacing::*; -use crate::layout::{HElem, ParElem, Spacing}; +use crate::layout::{BoxElem, HElem, ParElem, Spacing}; use crate::meta::Supplement; use crate::meta::{ Count, Counter, CounterUpdate, LocalName, Numbering, Outlinable, Refable, @@ -480,8 +480,12 @@ impl LayoutMath for Content { let mut frame = ctx.layout_content(self)?; if !frame.has_baseline() { - let axis = scaled!(ctx, axis_height); - frame.set_baseline(frame.height() / 2.0 + axis); + if self.is::() { + frame.set_baseline(frame.height()); + } else { + let axis = scaled!(ctx, axis_height); + frame.set_baseline(frame.height() / 2.0 + axis); + } } ctx.push(FrameFragment::new(ctx, frame).with_spaced(true)); diff --git a/tests/ref/math/content.png b/tests/ref/math/content.png index a5f5f1378..4fbd46705 100644 Binary files a/tests/ref/math/content.png and b/tests/ref/math/content.png differ diff --git a/tests/typ/math/content.typ b/tests/typ/math/content.typ index 5a51901a9..49f39733f 100644 --- a/tests/typ/math/content.typ +++ b/tests/typ/math/content.typ @@ -17,3 +17,17 @@ $ x := #table(columns: 2)[x][y]/mat(1, 2, 3) // Test font switch. #let here = text.with(font: "Noto Sans") $#here[f] := #here[Hi there]$. + +--- +// Test boxes without a baseline act as if the baseline is at the base +#{ + box(stroke: 0.2pt, $a #box(stroke: 0.2pt, $a$)$) + h(12pt) + box(stroke: 0.2pt, $a #box(stroke: 0.2pt, $g$)$) + h(12pt) + box(stroke: 0.2pt, $g #box(stroke: 0.2pt, $g$)$) +} + +--- +// Test boxes with a baseline are respected +#box(stroke: 0.2pt, $a #box(baseline:0.5em, stroke: 0.2pt, $a$)$)