From 46053b62e5d87118f33476d3c7f6ddf794fbafeb Mon Sep 17 00:00:00 2001 From: Wenzhuo Liu Date: Sat, 6 Jan 2024 03:30:45 +0800 Subject: [PATCH] Fix large operators in cambria math (#3115) --- crates/typst/src/math/ctx.rs | 5 ++++- tests/ref/math/class.png | Bin 6454 -> 6460 bytes 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/crates/typst/src/math/ctx.rs b/crates/typst/src/math/ctx.rs index b93d7cc29..2c88fe3c9 100644 --- a/crates/typst/src/math/ctx.rs +++ b/crates/typst/src/math/ctx.rs @@ -1,3 +1,5 @@ +use std::f64::consts::SQRT_2; + use comemo::Prehashed; use ecow::EcoString; use rustybuzz::Feature; @@ -207,7 +209,8 @@ impl<'a, 'b, 'v> MathContext<'a, 'b, 'v> { let class = self.style.class.as_custom().or(glyph.class); if class == Some(MathClass::Large) { let mut variant = if self.style.size == MathSize::Display { - let height = scaled!(self, display_operator_min_height); + let height = scaled!(self, display_operator_min_height) + .max(SQRT_2 * glyph.height()); glyph.stretch_vertical(self, height, Abs::zero()) } else { glyph.into_variant() diff --git a/tests/ref/math/class.png b/tests/ref/math/class.png index c4a4cecc3a1904cc1a2435f8bfef9c91581343b1..27844ebe1410d073e4d759be47849a835ef57f3a 100644 GIT binary patch literal 6460 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 N6lK+9YG7s|{|8^hyP*I8 literal 6454 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