mirror of
https://github.com/typst/typst
synced 2025-05-14 17:15:28 +08:00
Fix multiline annotations in over- elems in math changing the baseline (#5459)
This commit is contained in:
parent
57f7c167d8
commit
468a60103d
@ -127,7 +127,9 @@ fn layout_vec_body(
|
|||||||
let denom_style = style_for_denominator(styles);
|
let denom_style = style_for_denominator(styles);
|
||||||
let mut flat = vec![];
|
let mut flat = vec![];
|
||||||
for child in column {
|
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
|
// 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
|
// to ensure that normal vectors are aligned with others unless they are
|
||||||
|
@ -121,7 +121,6 @@ pub fn stack(
|
|||||||
alternator: LeftRightAlternator,
|
alternator: LeftRightAlternator,
|
||||||
minimum_ascent_descent: Option<(Abs, Abs)>,
|
minimum_ascent_descent: Option<(Abs, Abs)>,
|
||||||
) -> Frame {
|
) -> Frame {
|
||||||
let rows: Vec<_> = rows.into_iter().flat_map(|r| r.rows()).collect();
|
|
||||||
let AlignmentResult { points, width } = alignments(&rows);
|
let AlignmentResult { points, width } = alignments(&rows);
|
||||||
let rows: Vec<_> = rows
|
let rows: Vec<_> = rows
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
@ -297,7 +297,7 @@ fn layout_underoverspreader(
|
|||||||
if let Some(annotation) = annotation {
|
if let Some(annotation) = annotation {
|
||||||
let under_style = style_for_subscript(styles);
|
let under_style = style_for_subscript(styles);
|
||||||
let annotation_styles = styles.chain(&under_style);
|
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
|
0
|
||||||
}
|
}
|
||||||
@ -305,7 +305,7 @@ fn layout_underoverspreader(
|
|||||||
if let Some(annotation) = annotation {
|
if let Some(annotation) = annotation {
|
||||||
let over_style = style_for_superscript(styles);
|
let over_style = style_for_superscript(styles);
|
||||||
let annotation_styles = styles.chain(&over_style);
|
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(stretched.into());
|
||||||
rows.push(MathRun::new(vec![body]));
|
rows.push(MathRun::new(vec![body]));
|
||||||
|
BIN
tests/ref/math-cases-linebreaks.png
Normal file
BIN
tests/ref/math-cases-linebreaks.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 570 B |
BIN
tests/ref/math-mat-linebreaks.png
Normal file
BIN
tests/ref/math-mat-linebreaks.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 651 B |
BIN
tests/ref/math-underover-multiline-annotation.png
Normal file
BIN
tests/ref/math-underover-multiline-annotation.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.6 KiB |
BIN
tests/ref/math-vec-linebreaks.png
Normal file
BIN
tests/ref/math-vec-linebreaks.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 856 B |
@ -15,3 +15,8 @@ $ x = cases(1, 2) $
|
|||||||
--- math-cases-delim ---
|
--- math-cases-delim ---
|
||||||
#set math.cases(delim: sym.angle.l)
|
#set math.cases(delim: sym.angle.l)
|
||||||
$ cases(a, b, c) $
|
$ 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) $
|
||||||
|
@ -229,6 +229,11 @@ $ mat(delim: angle.r, 1, 2; 3, 4) $
|
|||||||
$ mat(delim: #(none, "["), 1, 2; 3, 4) $
|
$ mat(delim: #(none, "["), 1, 2; 3, 4) $
|
||||||
$ mat(delim: #(sym.angle.r, sym.bracket.double.r), 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 ---
|
--- issue-1617-mat-align ---
|
||||||
#set page(width: auto)
|
#set page(width: auto)
|
||||||
$ mat(a, b; c, d) mat(x; y) $
|
$ mat(a, b; c, d) mat(x; y) $
|
||||||
|
@ -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 \
|
$J^b != overline(J)^b != underline(J)^b != underline(overline(J))^b \
|
||||||
K^3 != overline(K)^3 != underline(K)^3 != underline(overline(K))^3 \
|
K^3 != overline(K)^3 != underline(K)^3 != underline(overline(K))^3 \
|
||||||
T^i != overline(T)^i != underline(T)^i != underline(overline(T))^i$
|
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") $
|
||||||
|
@ -49,3 +49,8 @@ $ vec(1, 2) $
|
|||||||
--- math-vec-delim-invalid-closing ---
|
--- math-vec-delim-invalid-closing ---
|
||||||
// Error: 22-33 invalid delimiter: "%"
|
// Error: 22-33 invalid delimiter: "%"
|
||||||
#set math.vec(delim: (none, "%"))
|
#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) $
|
||||||
|
Loading…
x
Reference in New Issue
Block a user