From 75f646c9756634fe6bc7f94349f6496ed0fc5484 Mon Sep 17 00:00:00 2001 From: Max Date: Tue, 1 Oct 2024 07:59:31 +0000 Subject: [PATCH] Fix `math.stretch` not working vertically with attachments (#5069) --- crates/typst/src/math/stretch.rs | 8 +++++++- tests/ref/issue-4188-lr-corner-brackets.png | Bin 368 -> 364 bytes ...h.png => math-stretch-horizontal-attach.png} | Bin tests/ref/math-stretch-vertical-attach.png | Bin 0 -> 493 bytes tests/suite/math/stretch.typ | 11 +++++++++-- 5 files changed, 16 insertions(+), 3 deletions(-) rename tests/ref/{math-stretch-attach.png => math-stretch-horizontal-attach.png} (100%) create mode 100644 tests/ref/math-stretch-vertical-attach.png diff --git a/crates/typst/src/math/stretch.rs b/crates/typst/src/math/stretch.rs index d316fa9a2..232252b99 100644 --- a/crates/typst/src/math/stretch.rs +++ b/crates/typst/src/math/stretch.rs @@ -73,9 +73,15 @@ pub(super) fn stretch_fragment( _ => return, }; - let Some(axis) = axis.or_else(|| stretch_axis(ctx, &glyph)) else { + // Return if we attempt to stretch along an axis which isn't stretchable, + // so that the original fragment isn't modified. + let Some(stretch_axis) = stretch_axis(ctx, &glyph) else { return; }; + let axis = axis.unwrap_or(stretch_axis); + if axis != stretch_axis { + return; + } let relative_to_size = relative_to.unwrap_or_else(|| fragment.size().get(axis)); diff --git a/tests/ref/issue-4188-lr-corner-brackets.png b/tests/ref/issue-4188-lr-corner-brackets.png index 81e9ecdcd40ecf7101c256b95f6574ddd661886b..6e247908b69ad0ac40f6fbe5e83965d74ac71f8a 100644 GIT binary patch delta 299 zcmV+`0o4BR0_*~iBqTFQL_t(|+GF@XK!9P?;!%r7Egnu5FKg?3j4Ju<`~Uy5JByJ> zDSuw_8(lKx0f?Lr=Ofq%;QtjYPH`OHU%vY#oMXA~5H>wmmhbrlWB)bZbBY>?>t*P_ zj3Y446Sse3T0lKHEY%`DBJJzy;!)K`g>QRs1ej> z7B0`(2c+M928Q3$SuHQHXxX!BNx@N&8c@c%zM%OdH4Bi=jW-Bt?VJI%a_C$9xwCW6 x-L}pv`1C#R>^yOyqw~RNB{6F8sKoSCFTrWfa zWgLNVp1A!>{QzN}Z)|K_0TsTP^xy9;OwH-o|B-*FU~%2D|6adfoKmLD_zv@5RE^)Ze=jMU9|7 zvv7INK9CPV-hMi(;3PkM235lk>^56$!O&(wD*@6wlV zFWfxo*reM~!G-Rbmrzt?|D?LbU#>p_!XG!jzMFIr7Sfkb%zU}zH zG>6c~V$7h9qnE`g=!t8fd|X0Ri?1S>zh9xMoBS57B%@dJw($i`f|@Xx`EI0Jyop{G julh9FX&be8s8|dD^~3drau86+00000NkvXXu0mjfB$@#% literal 0 HcmV?d00001 diff --git a/tests/suite/math/stretch.typ b/tests/suite/math/stretch.typ index e6817ee5e..606967466 100644 --- a/tests/suite/math/stretch.typ +++ b/tests/suite/math/stretch.typ @@ -13,8 +13,8 @@ $ H stretch(=)^"define" U + p V \ f : X stretch(arrow.hook, size: #150%)_"injective" Y \ V stretch(->, size: #(100% + 1.5em))^("surjection") ZZ $ ---- math-stretch-attach --- -// Test stretch interactions with attachments. +--- math-stretch-horizontal-attach --- +// Test horizontal stretch interactions with attachments. #set page(width: auto) $stretch(stretch(=, size: #4em))_A$ @@ -28,6 +28,13 @@ $ P = Q U stretch(equiv)^(forall i)_"Chern-Weil" V stretch(equiv, size: #(120% + 2mm))^(forall i)_"Chern-Weil" W $ +--- math-stretch-vertical-attach --- +// Test vertical stretch interactions with attachments. +$arrow.t$ +$stretch(arrow.t)^"map"$ +$stretch(arrow.t, size: #2em)^"map"$ +$stretch(arrow.t, size: #200%)^"map"$ + --- math-stretch-horizontal --- // Test stretching along horizontal axis. #let ext(sym) = math.stretch(sym, size: 2em)