diff --git a/crates/typst-library/src/math/fragment.rs b/crates/typst-library/src/math/fragment.rs index 4e174349c..5ac1f2ddd 100644 --- a/crates/typst-library/src/math/fragment.rs +++ b/crates/typst-library/src/math/fragment.rs @@ -187,6 +187,7 @@ pub struct GlyphFragment { pub font: Font, pub lang: Lang, pub fill: Paint, + pub shift: Abs, pub width: Abs, pub ascent: Abs, pub descent: Abs, @@ -225,6 +226,7 @@ impl GlyphFragment { font: ctx.font.clone(), lang: TextElem::lang_in(ctx.styles()), fill: TextElem::fill_in(ctx.styles()), + shift: TextElem::baseline_in(ctx.styles()), style: ctx.style, font_size: ctx.size, width: Abs::zero(), @@ -309,7 +311,7 @@ impl GlyphFragment { let size = Size::new(self.width, self.ascent + self.descent); let mut frame = Frame::new(size); frame.set_baseline(self.ascent); - frame.push(Point::with_y(self.ascent), FrameItem::Text(item)); + frame.push(Point::with_y(self.ascent + self.shift), FrameItem::Text(item)); frame.meta_iter(self.meta); frame } diff --git a/tests/ref/bugs/math-shift.png b/tests/ref/bugs/math-shift.png new file mode 100644 index 000000000..4d4b5f5ef Binary files /dev/null and b/tests/ref/bugs/math-shift.png differ diff --git a/tests/typ/bugs/math-shift.typ b/tests/typ/bugs/math-shift.typ new file mode 100644 index 000000000..4a833e312 --- /dev/null +++ b/tests/typ/bugs/math-shift.typ @@ -0,0 +1,5 @@ +// https://github.com/typst/typst/issues/2214 +// The math content should also be affected by the TextElem baseline. + +hello #text(baseline: -5pt)[123 #sym.WW\orld]\ +hello #text(baseline: -5pt)[$123 WW#text[or]$ld]\