From cd163868f5a93f84a9185d14407a66d051e29dad Mon Sep 17 00:00:00 2001 From: damaxwell Date: Wed, 2 Aug 2023 14:27:33 -0800 Subject: [PATCH] large operators have limits in displays; relations have limits always (#1748) --- crates/typst-library/src/math/attach.rs | 31 ++++++++++++------------ tests/ref/math/attach-p3.png | Bin 5860 -> 15600 bytes tests/typ/math/attach-p3.typ | 18 ++++++++++++++ 3 files changed, 33 insertions(+), 16 deletions(-) diff --git a/crates/typst-library/src/math/attach.rs b/crates/typst-library/src/math/attach.rs index ee65b657..d74beafe 100644 --- a/crates/typst-library/src/math/attach.rs +++ b/crates/typst-library/src/math/attach.rs @@ -216,10 +216,16 @@ pub enum Limits { impl Limits { /// The default limit configuration if the given character is the base. pub fn for_char(c: char) -> Self { - if Self::DEFAULT_TO_LIMITS.contains(&c) { - Limits::Display - } else { - Limits::Never + match unicode_math_class::class(c) { + Some(MathClass::Large) => { + if is_integral_char(c) { + Limits::Never + } else { + Limits::Display + } + } + Some(MathClass::Relation) => Limits::Always, + _ => Limits::Never, } } @@ -231,18 +237,6 @@ impl Limits { Self::Never => false, } } - - /// Unicode codepoints that should show attachments as limits in display - /// mode. - #[rustfmt::skip] - const DEFAULT_TO_LIMITS: &[char] = &[ - /* ∏ */ '\u{220F}', /* ∐ */ '\u{2210}', /* ∑ */ '\u{2211}', - /* ⋀ */ '\u{22C0}', /* ⋁ */ '\u{22C1}', - /* ⋂ */ '\u{22C2}', /* ⋃ */ '\u{22C3}', - /* ⨀ */ '\u{2A00}', /* ⨁ */ '\u{2A01}', /* ⨂ */ '\u{2A02}', - /* ⨃ */ '\u{2A03}', /* ⨄ */ '\u{2A04}', - /* ⨅ */ '\u{2A05}', /* ⨆ */ '\u{2A06}', - ]; } macro_rules! measure { @@ -444,6 +438,11 @@ fn compute_shifts_up_and_down( (shift_up, shift_down) } +/// Determines if the character is one of a variety of integral signs +fn is_integral_char(c: char) -> bool { + ('∫'..='∳').contains(&c) || ('⨋'..='⨜').contains(&c) +} + /// Whether the fragment consists of a single character or atomic piece of text. fn is_character_box(fragment: &MathFragment) -> bool { match fragment { diff --git a/tests/ref/math/attach-p3.png b/tests/ref/math/attach-p3.png index ac3c38957398e6f7ab79f7d83459599ee613e5c7..104534b7eaca7dbb1bae7d7509cc4e61fc5da2ff 100644 GIT binary patch literal 15600 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 R=bx?2igIeQweQV8|2MlnNumG% literal 5860 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 hZ{5HDn)PJ3?pD1Z6R>3VJ{tMqJy_Ns~ diff --git a/tests/typ/math/attach-p3.typ b/tests/typ/math/attach-p3.typ index 0fc25d63..c681af2a 100644 --- a/tests/typ/math/attach-p3.typ +++ b/tests/typ/math/attach-p3.typ @@ -22,3 +22,21 @@ $ attach(A, t: #locate(it => oops)) $ #show math.iota: math.limits.with(inline: false) #eq $iota_a^b$ + +--- +// Test default of limit attachments on relations at all sizes +#set page(width: auto) +$ a =^"def" b quad a lt.eq_"really" b quad a arrow.r.long.squiggly^"slowly" b $ +$a =^"def" b quad a lt.eq_"really" b quad a arrow.r.long.squiggly^"slowly" b$ + +$a scripts(=)^"def" b quad a scripts(lt.eq)_"really" b quad a scripts(arrow.r.long.squiggly)^"slowly" b$ + +--- +// Test default of scripts attachments on integrals at display size +$ integral.sect_a^b quad \u{2a1b}_a^b quad limits(\u{2a1b})_a^b $ +$integral.sect_a^b quad \u{2a1b}_a^b quad limits(\u{2a1b})_a^b$ + +--- +// Test default of limit attachments on large operators at display size only +$ tack.t.big_0^1 quad \u{02A0A}_0^1 quad join_0^1 $ +$tack.t.big_0^1 quad \u{02A0A}_0^1 quad join_0^1$