From 03d2ec9f813cb18c350de78614fcbc269b2dfc96 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Thu, 13 Apr 2023 01:42:03 -0700 Subject: [PATCH] Strip trailing line breaks in math equations (#750) --- library/src/math/row.rs | 6 +++++- tests/ref/math/multiline.png | Bin 8165 -> 13474 bytes tests/typ/math/multiline.typ | 21 +++++++++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/library/src/math/row.rs b/library/src/math/row.rs index 261723033..ce9bc94a3 100644 --- a/library/src/math/row.rs +++ b/library/src/math/row.rs @@ -127,11 +127,15 @@ impl MathRow { TIGHT_LEADING.scaled(ctx) }; - let rows: Vec<_> = fragments + let mut rows: Vec<_> = fragments .split(|frag| matches!(frag, MathFragment::Linebreak)) .map(|slice| Self(slice.to_vec())) .collect(); + if matches!(rows.last(), Some(row) if row.0.is_empty()) { + rows.pop(); + } + let width = rows.iter().map(|row| row.width()).max().unwrap_or_default(); let points = alignments(&rows); let mut frame = Frame::new(Size::zero()); diff --git a/tests/ref/math/multiline.png b/tests/ref/math/multiline.png index 94ef11964c9b0e21caced7dc0af87fb02f369708..50f611b2ac652022b6ebd588ac385a78cefed170 100644 GIT binary patch literal 13474 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 diff --git a/tests/typ/math/multiline.typ b/tests/typ/math/multiline.typ index 1d268faee..4f42ea63a 100644 --- a/tests/typ/math/multiline.typ +++ b/tests/typ/math/multiline.typ @@ -33,3 +33,24 @@ $ "abc" &= c \ --- // Test multiline subscript. $ sum_(n in NN \ n <= 5) n = (5(5+1))/2 = 15 $ + +--- +// Test no trailing line break. +$ +"abc" &= c +$ +No trailing line break. + +--- +// Test single trailing line break. +$ +"abc" &= c \ +$ +One trailing line break. + +--- +// Test multiple trailing line breaks. +$ +"abc" &= c \ \ \ +$ +Multiple trailing line breaks.