Fix multiline annotations in over- elems in math changing the baseline (#5459)

This commit is contained in:
Max 2024-12-08 16:55:34 +00:00 committed by GitHub
parent 57f7c167d8
commit 468a60103d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 27 additions and 4 deletions

View File

@ -127,7 +127,9 @@ fn layout_vec_body(
let denom_style = style_for_denominator(styles);
let mut flat = vec![];
for child in column {
flat.push(ctx.layout_into_run(child, styles.chain(&denom_style))?);
// We allow linebreaks in cases and vectors, which are functionally
// identical to commas.
flat.extend(ctx.layout_into_run(child, styles.chain(&denom_style))?.rows());
}
// We pad ascent and descent with the ascent and descent of the paren
// to ensure that normal vectors are aligned with others unless they are

View File

@ -121,7 +121,6 @@ pub fn stack(
alternator: LeftRightAlternator,
minimum_ascent_descent: Option<(Abs, Abs)>,
) -> Frame {
let rows: Vec<_> = rows.into_iter().flat_map(|r| r.rows()).collect();
let AlignmentResult { points, width } = alignments(&rows);
let rows: Vec<_> = rows
.into_iter()

View File

@ -297,7 +297,7 @@ fn layout_underoverspreader(
if let Some(annotation) = annotation {
let under_style = style_for_subscript(styles);
let annotation_styles = styles.chain(&under_style);
rows.push(ctx.layout_into_run(annotation, annotation_styles)?);
rows.extend(ctx.layout_into_run(annotation, annotation_styles)?.rows());
}
0
}
@ -305,7 +305,7 @@ fn layout_underoverspreader(
if let Some(annotation) = annotation {
let over_style = style_for_superscript(styles);
let annotation_styles = styles.chain(&over_style);
rows.push(ctx.layout_into_run(annotation, annotation_styles)?);
rows.extend(ctx.layout_into_run(annotation, annotation_styles)?.rows());
}
rows.push(stretched.into());
rows.push(MathRun::new(vec![body]));

Binary file not shown.

After

Width:  |  Height:  |  Size: 570 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 651 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 856 B

View File

@ -15,3 +15,8 @@ $ x = cases(1, 2) $
--- math-cases-delim ---
#set math.cases(delim: sym.angle.l)
$ cases(a, b, c) $
--- math-cases-linebreaks ---
// Currently linebreaks are equivalent to commas, though this behaviour may
// change in the future.
$ cases(a, b, c) cases(reverse: #true, a \ b \ c) $

View File

@ -229,6 +229,11 @@ $ mat(delim: angle.r, 1, 2; 3, 4) $
$ mat(delim: #(none, "["), 1, 2; 3, 4) $
$ mat(delim: #(sym.angle.r, sym.bracket.double.r), 1, 2; 3, 4) $
--- math-mat-linebreaks ---
// Unlike cases and vectors, linebreaks are discarded in matrices. This
// behaviour may change in the future.
$ mat(a; b; c) mat(a \ b \ c) $
--- issue-1617-mat-align ---
#set page(width: auto)
$ mat(a, b; c, d) mat(x; y) $

View File

@ -45,3 +45,10 @@ $A_2 != overline(A)_2 != underline(A)_2 != underline(overline(A))_2 \
$J^b != overline(J)^b != underline(J)^b != underline(overline(J))^b \
K^3 != overline(K)^3 != underline(K)^3 != underline(overline(K))^3 \
T^i != overline(T)^i != underline(T)^i != underline(overline(T))^i$
--- math-underover-multiline-annotation ---
// Test that multiline annotations do not change the baseline.
$ S = overbrace(beta (alpha) S I, "one line")
- overbrace(mu (N), "two" \ "line") $
$ S = underbrace(beta (alpha) S I, "one line")
- underbrace(mu (N), "two" \ "line") $

View File

@ -49,3 +49,8 @@ $ vec(1, 2) $
--- math-vec-delim-invalid-closing ---
// Error: 22-33 invalid delimiter: "%"
#set math.vec(delim: (none, "%"))
--- math-vec-linebreaks ---
// Currently linebreaks are equivalent to commas, though this behaviour may
// change in the future.
$ vec(a, b, c) vec(a \ b \ c) $