summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/typst/src/math/equation.rs24
-rw-r--r--tests/ref/math-equation-number-align-multiline-expand.pngbin518 -> 1250 bytes
-rw-r--r--tests/ref/math-equation-number-align-multiline-no-expand.pngbin0 -> 1050 bytes
-rw-r--r--tests/suite/math/equation.typ67
4 files changed, 72 insertions, 19 deletions
diff --git a/crates/typst/src/math/equation.rs b/crates/typst/src/math/equation.rs
index 947f01f2..d6a8d4c7 100644
--- a/crates/typst/src/math/equation.rs
+++ b/crates/typst/src/math/equation.rs
@@ -466,25 +466,33 @@ fn resize_equation(
if matches!(number_align.y, FixedAlignment::Center if is_multiline) {
// In this case, the center lines (not baselines) of the number frame
// and the equation frame shall be aligned.
- let height = equation.height().max(number.height());
return equation.resize(
- Size::new(width, height),
+ Size::new(width, equation.height().max(number.height())),
Axes::<FixedAlignment>::new(equation_align, FixedAlignment::Center),
);
}
let excess_above = Abs::zero().max({
- let (.., baseline) = first;
- number.baseline() - baseline
+ if !is_multiline || matches!(number_align.y, FixedAlignment::Start) {
+ let (.., baseline) = first;
+ number.baseline() - baseline
+ } else {
+ Abs::zero()
+ }
});
let excess_below = Abs::zero().max({
- let (size, .., baseline) = last;
- (number.height() - number.baseline()) - (size.y - baseline)
+ if !is_multiline || matches!(number_align.y, FixedAlignment::End) {
+ let (size, .., baseline) = last;
+ (number.height() - number.baseline()) - (size.y - baseline)
+ } else {
+ Abs::zero()
+ }
});
- let height = equation.height() + excess_above + excess_below;
+ // The vertical expansion is asymmetric on the top and bottom edges, so we
+ // first align at the top then translate the content downward later.
let resizing_offset = equation.resize(
- Size::new(width, height),
+ Size::new(width, equation.height() + excess_above + excess_below),
Axes::<FixedAlignment>::new(equation_align, FixedAlignment::Start),
);
equation.translate(Point::with_y(excess_above));
diff --git a/tests/ref/math-equation-number-align-multiline-expand.png b/tests/ref/math-equation-number-align-multiline-expand.png
index b6546433..f3e67c23 100644
--- a/tests/ref/math-equation-number-align-multiline-expand.png
+++ b/tests/ref/math-equation-number-align-multiline-expand.png
Binary files differ
diff --git a/tests/ref/math-equation-number-align-multiline-no-expand.png b/tests/ref/math-equation-number-align-multiline-no-expand.png
new file mode 100644
index 00000000..ca451d19
--- /dev/null
+++ b/tests/ref/math-equation-number-align-multiline-no-expand.png
Binary files differ
diff --git a/tests/suite/math/equation.typ b/tests/suite/math/equation.typ
index d4fba36b..e7ae677e 100644
--- a/tests/suite/math/equation.typ
+++ b/tests/suite/math/equation.typ
@@ -194,22 +194,67 @@ $ q &= sum_k ln A \
// numbering's layout box. Note we use pattern "1" here, not "(1)", since
// the parenthesis exceeds the numbering's layout box, due to the default
// settings of top-edge and bottom-edge of the TextElem that laid it out.
+#let equations = [
+ #box($ - - - $, fill: silver)
+ #box(
+ $ - - - \
+ a = b $,
+ fill: silver)
+ #box(
+ $ a = b \
+ - - - $,
+ fill: silver)
+]
+
#set math.equation(numbering: "1", number-align: top)
-#box(
-$ - &- - \
- a &= b $,
-fill: silver)
+#equations
#set math.equation(numbering: "1", number-align: horizon)
-#box(
-$ - - - $,
-fill: silver)
+#equations
#set math.equation(numbering: "1", number-align: bottom)
-#box(
-$ a &= b \
- - &- - $,
-fill: silver)
+#equations
+
+--- math-equation-number-align-multiline-no-expand ---
+// Tests that if the numbering's layout box doesn't vertically exceed the
+// box of the equation frame's boundary, the latter's frame size remains.
+// So, in the grid below, frames in each row should have the same height.
+#set math.equation(numbering: "1")
+#grid(
+ columns: 4 * (1fr,),
+ column-gutter: 3 * (2pt,),
+ row-gutter: 2pt,
+ align: horizon,
+ [
+ #set math.equation(number-align: horizon)
+ #box($ - - \ a \ sum $, fill: silver)
+ ],
+ [
+ #set math.equation(number-align: bottom)
+ #box($ - - \ a \ sum $, fill: silver)
+ ],
+ [
+ #set math.equation(number-align: horizon)
+ #box($ sum \ a \ - - $, fill: silver)
+ ],
+ [
+ #set math.equation(number-align: top)
+ #box($ sum \ a \ - - $, fill: silver)
+ ],
+
+ [
+ #set math.equation(number-align: horizon)
+ #box($ - - $, fill: silver)
+ ],
+ [
+ #set math.equation(number-align: top)
+ #box($ - - $, fill: silver)
+ ],
+ [
+ #set math.equation(number-align: bottom)
+ #box($ - - $, fill: silver)
+ ],
+)
--- issue-numbering-hint ---
// In this bug, the hint and error messages for an equation