summaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
authorMalo <57839069+MDLC01@users.noreply.github.com>2024-01-25 16:14:12 +0100
committerGitHub <noreply@github.com>2024-01-25 15:14:12 +0000
commit02b16bf9cfd2f0dc095055487434a94a63485eeb (patch)
tree78ef8485278d1e59aa9726740831bb8361aebd10 /crates
parent11abc1f1e34153d2c89589ca89bf84ef2c358817 (diff)
Make `math.class` affect the limit configuration (#3231)
Diffstat (limited to 'crates')
-rw-r--r--crates/typst/src/math/attach.rs9
-rw-r--r--crates/typst/src/math/class.rs8
2 files changed, 15 insertions, 2 deletions
diff --git a/crates/typst/src/math/attach.rs b/crates/typst/src/math/attach.rs
index ff66a386..09541d1c 100644
--- a/crates/typst/src/math/attach.rs
+++ b/crates/typst/src/math/attach.rs
@@ -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 {
diff --git a/crates/typst/src/math/class.rs b/crates/typst/src/math/class.rs
index 9f430ad7..1b6c638c 100644
--- a/crates/typst/src/math/class.rs
+++ b/crates/typst/src/math/class.rs
@@ -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(())
}