Make math.class affect the limit configuration (#3231)

This commit is contained in:
Malo 2024-01-25 16:14:12 +01:00 committed by GitHub
parent 11abc1f1e3
commit 02b16bf9cf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 26 additions and 3 deletions

View File

@ -212,6 +212,15 @@ impl Limits {
}
}
/// The default limit configuration for a math class.
pub fn for_class(class: MathClass) -> Self {
match class {
MathClass::Large => Self::Display,
MathClass::Relation => Self::Always,
_ => Self::Never,
}
}
/// Whether limits should be displayed in this context
pub fn active(&self, ctx: &MathContext) -> bool {
match self {

View File

@ -2,12 +2,15 @@ use unicode_math_class::MathClass;
use crate::diag::SourceResult;
use crate::foundations::{elem, Content, Packed};
use crate::math::{LayoutMath, MathContext};
use crate::math::{LayoutMath, Limits, MathContext};
/// Forced use of a certain math class.
///
/// This is useful to treat certain symbols as if they were of a different
/// class, e.g. to make a symbol behave like a relation.
/// class, e.g. to make a symbol behave like a relation. The class of a symbol
/// defines the way it is laid out, including spacing around it, and how its
/// scripts are attached by default. Note that the latter can always be
/// overridden using [`{limits}`](math.limits) and [`{scripts}`](math.scripts).
///
/// # Example
/// ```example
@ -37,6 +40,7 @@ impl LayoutMath for Packed<ClassElem> {
ctx.unstyle();
fragment.set_class(*self.class());
fragment.set_limits(Limits::for_class(*self.class()));
ctx.push(fragment);
Ok(())
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

View File

@ -34,4 +34,14 @@ $ a pluseq 5 $
---
// Test exceptions.
$ sqrt(3)\/2 quad d_0.d_1d_2 dots $
$ sqrt(3)\/2 quad d_0.d_1d_2 dots $
---
// Test if the math class changes the limit configuration.
$ class("normal", ->)_a $
$class("relation", x)_a$
$ class("large", x)_a $
$class("large", ->)_a$
$limits(class("normal", ->))_a$
$ scripts(class("relation", x))_a $