From f0407d4949cce8014e2a4fdef8c00c955d870127 Mon Sep 17 00:00:00 2001 From: Leedehai <18319900+Leedehai@users.noreply.github.com> Date: Mon, 15 Jul 2024 05:54:54 -0400 Subject: [PATCH] Wrapping with parens should not push superscripts higher (#4545) Co-authored-by: Laurenz --- crates/typst/src/math/row.rs | 15 ++++++++++++--- tests/ref/math-attach-horizontal-align.png | Bin 2001 -> 1900 bytes tests/ref/math-attach-to-group.png | Bin 651 -> 649 bytes tests/ref/math-root-large-body.png | Bin 1614 -> 1549 bytes tests/suite/math/attach.typ | 4 ++-- 5 files changed, 14 insertions(+), 5 deletions(-) diff --git a/crates/typst/src/math/row.rs b/crates/typst/src/math/row.rs index 5234ca2cd..60afe64e5 100644 --- a/crates/typst/src/math/row.rs +++ b/crates/typst/src/math/row.rs @@ -159,10 +159,19 @@ impl MathRun { pub fn into_fragment(self, ctx: &MathContext, styles: StyleChain) -> MathFragment { if self.0.len() == 1 { - self.0.into_iter().next().unwrap() - } else { - FrameFragment::new(ctx, styles, self.into_frame(ctx, styles)).into() + return self.0.into_iter().next().unwrap(); } + + // Fragments without a math_size are ignored: the notion of size do not + // apply to them, so their text-likeness is meaningless. + let text_like = self + .iter() + .filter(|e| e.math_size().is_some()) + .all(|e| e.is_text_like()); + + FrameFragment::new(ctx, styles, self.into_frame(ctx, styles)) + .with_text_like(text_like) + .into() } /// Returns a builder that lays out the [`MathFragment`]s into a possibly diff --git a/tests/ref/math-attach-horizontal-align.png b/tests/ref/math-attach-horizontal-align.png index 507cb0ffda282b96b37398a6dd3ac0a4f3b0cbcf..8aa2a376715c2799a726202d820972b84cb78907 100644 GIT binary patch delta 1885 zcmV-j2cr1V59|(*B!4qWL_t(|+U?idPn+i*!0}%157^EAfo+;JRob+5yXjr3wwtuA zIV@T?wP~m_CnPKjgp{HbUJ>FzIK+@Z2nokPAmvb?90Mc-6OQI+Ae_v}5HJQCV|@H> ze#9$dlvxM{T-4tS`?X(NAL-T4&-?ftj;MD6Z~zX#0r+5HeSaT54d#NJ3Q?H}0M~gN zz$)HW_W-XTnrbY+iBAfU`v8%t08z1kOPt8LN_GL8>e}i6MjATC0Q-lDApn!TYk$P2 zU^G=VGXR8uC=D;X5$nG9qHGC(fdaYLNw%(VZ~@X zqI3{d&U#@kxqoshY+oWeZ~cPPR{t<}2F$kPS#&qdVN(fkoKrNGLTi_9UAZRUk-G>u z`pGCIO@NN}JOD=~OOglHB|wNPx0z3@32%Vlfp55CeUp>&WeRs1*-Z+>wy z8HbX=-yRR=fgX_rj2v4GihROMHt-N6`C1DYiS>`Wa(|Uo4=EUj!DDM-nvbkV{$Lvp zJg~y*1_?f};DG^rVCXF(Z9u@tZ>jr{VIa5Jihu#E7dQOEBBzwI6r~6K=cA|q^*J-Z zW>_TvQ=jVqoMlblxl6Cv0Q%1u0LWSWqQ`aK=J_I|6@opo2$3o7<$pgESh)i5QNiwe z{Qy*#0)JqOp8;S(iKw;&Ia8DcfOHLD1qMBS?tM$v|!m0I4gm6oa}!UaBQllR$#r#SjojEX~7kG{o!%Mj>G1uMzNlTWq5b z+?Rn2zX?LXjjs_Ql`6bEA;eXun(k4>~TG{J_K7 z*m;1I-fT5sIpO*f0PB%1L=^xYxFt7X1W^_~cd0x8f;q!b0sw9Kj~h4x;0Jc5cL+F? z%YU1I{?uj=fb)^FAJLi&FC>)tZWicM`@m;;9km7DY3D5dVM$pz0?=4p46yND#tcB( zpZ`+F_VT})J|0y7fUSV7(!B8KXUi!?Hx~iOyt#U#^P_41@Xp-)uariv;9I6czz4j5 z*q$}%@NKpim`(~TnF08R1XpAp65N^rY=5%V2FBDwfj2+`Ud#ek;PD~BDgQFaurVn~ zz)i}H1A{y2LF78;MiXKbFkJ#Z*x`~u^gI#KLBjPv3%`B)wleJG&-1--bn9MVW2l3- zwQ^aUz2c-V27tAYP2l4X5eBrXraQ+f6Y@eJm?E*Hv^a~p!WSCB!Kb^*y}+XJz62w{n1X+b*Qp)i zb-0n-&mh|F#`|QxiMo2L`CWZGUBZkFwCe zg4yfi_#}o4s1V~nAG+mUwzua1P?)$K&eL^;9>mIJd0&;0k&zao`0*wAN<^r)!;tml zAmHhIxj7j=;qZZVIR}1|=s#-!9G|gT?1fh%Tk;PY7L`=iuo>lrJCl;SJn+o)0mF5r zfCM{#P92A`1Bq}V8eRiY8-K>bfDNs~?97;QMB7_+`9|QML;&7%)v8_)*;7=GLxivC zHv!P5TNb`vKSVeZL>GDtD31VMz5qu87iH}aHsrCD`{@F{>B>OPq1^!o_w5gMNB}I2 zLX8?M8cPu(wOc;t3U@(#`SRC3@NXRZgOLywxp=0A0yu-nS}vb+7Jq{M0_1InSAWIc z;q^}Kv^#7A08J-lwUB}BOgGv&7P*fj)GouL*LT3RLHmFk66&i~dnN#|-J!dOu~M4j zYOAWQ52;9UEcDFDaGh!gtW4hrjKb-bhl`u;;sv^EQO?}e6h2SwM`h8KA;Vck9(be} z89v>;cX;~yQ)9yp34baUVCs8n)Yvn4IC&Y>#3zs{hAZ1H;J6kKjD!ro>)1Q&>N6~Y z1h0pn%p`^@2ZkIpHGd@zC1_X|aM+?Ryzx8s4vRd))eELZD6NGNEkJs?nU~9AxO%}E zW1frzdkp4a^A_BGe!uXlW&*$tboYn@kvLe;%mFZHDe4F3Fjgy*#w|GW5gf^q89aVO z@LxF+*s2dlhBvzo5x%NiL5B6=hXvob)&?Sb#HUt}j%KrWbnx8MvB17M00-az{D1F1 XoEJ~MyM`}#8;it8@V5rE&DwjnAQK=jP*gJlz$ zh^`{l@G<~%%zs@{Z$F6Wko9x+Si{47Gh(*qzGU{iIcX*fcCedvHFOWmt|?3c9=|NX zsZ|rGI)GXF$^e|#(aXK?Y!)QAOFQ|iHR}~{WaJzttPjh>!KwQ-L#Ur}GcR)rIj?@X zD;KANr@!5CiffCAf#&2(SVp`Iu+uxd~FU=ka&H{QF?KIx!@IDGy8Y zJp6kU+r4&>BQoa#rFQ`+cmw)0dRhS`fSi>akb`zP0mKOX0*s|XS|l(s0ULjVfD7&E z?IG}!B0v1G`2?L+2+m*xN&;o+s`a(^WSd5p+v9PNpgwYa}$y3#8cbzLi& zkDmgd^Mu6_z*7j%;}F`{aiAsNycj;nh`yRP;N zIDe7jHehkL?SPp6munc2$pLYW z-azba9kYb?QVZyEVq0bm{xQMz*Eb37E`I`SAhnLMAo{R?kON&W0V`0kNpSvG1|Mw9 z$q{geVm)ebe+yFXcn?DfMgcP*;OH(cIa2qt5k(Vj`T40!mo6!icKxC}0H=1p6}Y+{ zKvfHX@q~*fX#kiKY`{k!A{zS`!!bLeICB8D7aukLKzObgj=f&G23a;xI6w|F`+u9r zwgCE{Wg(h3El#Zg;QAE-*fBk``hUPOys)X;4-P{*NiF4JsW#ehY!b;@V^2 zmKrIAhLGMf1;I-T3k&WraAu)ulHociINpUEfSNIKiYvwd>hBPooc`Uz%$6c*s30Ww zuZjGp7J1?FnKK|~My1l%jD_7OeDKgkL^cajqkjvAU)@cg`ChnM>DG69SbzT7OF9eG z{LjSV0_rpDz(OLDd)(1i0zhSUFkCh}kQj}f%d#!6sHjMpCj03zkOOeGCm4pCRndTT z<-X>9@J?q4JX;d=o5b*b1K|9WmFfWeCRtM+ZCIpgxQi_%06)sf8Suh$x+ufVYC!(& zzf=FFoIuXH5RI9T>czMjuz#U@jEx!dx9E7=Q@0*_l8C`?qr$v5NWI9ry_xXwMMTZF zor_7E2`3}6oNR&QEr6?Qh#K7cAPjtPK2q3KW#HS@&G4PM<@htqZ-BQEDU4c+sNXU0 z1b~&N@URi72LMbhO?L#|%cW5b*mJ8UF9*Z=_alevC0O4^TNxs?jeo~JxDbFURud3C zp2U>s252%sb2XF&!>Yu{;9i}U3Jn0o4$|%|IqtK}Y%`rzh`L7rMtW(@o;c1#8=u@L1C(Zx2fyyQ-kCc_ z27nJfIl2LU|3ySF#eWYxu1W&{>2R1YkP#2*)J+5Cj*b%@8X&{PA-;4Uw|@!g!SKgM zFWjl|WA73XT)uZwgIdc}J6wi~HTO8(dWn?^X>mEH3kIfjK>H|}BRQOzI|u~;6iM(O z@xl&;51WsR41TuyTr4hkJq(Rt)bZlcS2|i2eTz$p$XbJA6n}G9ZUf8rc#s9P61-Qy zPCwjmCNfx5p+Ua@-0=YYDh<}V&{+v!sX^+#5qN#AL5Rpf3r)QfmUE!bN0;bC!p^HB zhdqN@L~b`y4nRBTAvi~1AYfo^`kBfAD|5`hupwc4UPAP?%)x(}2q}PV2iSs}gz1Z| zfvx4u{;_^y^E_bNQ3ZZ@Ds{8qeWzc05RIQs0_0nA*xN!_t9lbVSI6KO9E0CZ{{h5^ VH(293FKhq+002ovPDHLkV1lkltnB~* diff --git a/tests/ref/math-attach-to-group.png b/tests/ref/math-attach-to-group.png index a3d1923eb0c83bc5a01a929a2f70af5cef36de30..ea4115fceadcf5245cab765fd9b465b7549513cf 100644 GIT binary patch delta 624 zcmV-$0+0QR1&IZaB!5szL_t(|+U?ifOH*+i$8rCKAiC?KZi5JjQoVkz8X9(&0ikgu z-rYx7?u-lC+u8<<3`dW9Vd6$9GM#-S4ZXm~aKjsbkMb}jsy2UpvN;S4$BM}oe)H^63{;f8=Vy$;7`s8vbwwUE$$ z0fZ5Il!ST`#%#*~%Y{0_Y71!sPmpmQL1=PXi;?=2D5&{}em7hSS!kx45 zTqV%o-TexQu}kDEOzQv}2^@>$Fib}binJn0000< KMNUMnLSTYFd?~vC delta 626 zcmV-&0*(EN1&alcB!5y#L_t(|+U?iROVe>2$8rCKAi8y^YY>5S=@j&fJaniCp@M1> zD0Ju&hCxvI)e=oe%2p`Yq*`hkQdyvsrj@B{uF{N@hAy`DBbVEE(DrN}Cf~8~+29-B zv54>E^twHHe-2;xmQW-mX4njyVKe+shdb>>3NP4-6rMLa9Dg7eKalp~iE3!rT?K?E zk$8Oz!PAqpJZ85K85xcr^uhZ}mB{oAkT(1jBf~8(0p7{ORH)kgHDz-c7*3RvFZ|#R z8ei+Of#LqfykWIWn_)|}%fN7%J8zf@r`|7DBJ*8>z|E_V2FX&2;J>l=6H?Y@y{gT}gg|Ks{b4NG7k{nI zeQ{(dDVT9_!!Ud9{Z04;nqb?m8R+Yig&XRSKlSC&#Z7L2wK~HsA#M5`jt|hNk{0M7 zrRx+3qhoPWnn{_kc>p}6I>TxQ8AA7waqdHCb6U%hdV5%Bm^m+y_6n)!7KCjJtXn~* z>!OaZ9&1~F1H@U{jMRnh0)^`zgK%;NsqN7Mg}uiRtY5xGkZ_%)Kw&Ilp!G=2A!N?E z3l^TQ1qOS2pCd7GhJuCZ93q#{foK84bSFS=AYlG2nqf0+hX23tA9ASvzzXEx3IG5A M07*qoM6N<$f~CbUQ2+n{ diff --git a/tests/ref/math-root-large-body.png b/tests/ref/math-root-large-body.png index 3dd4d848e412b9469e08e70d42e0982f91592a9d..b8d9edfbdc956975e564aca682eba207c2ee27ab 100644 GIT binary patch delta 1545 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 IM6N<$g5-z=82|tP diff --git a/tests/suite/math/attach.typ b/tests/suite/math/attach.typ index c9510c6a5..c5ca57357 100644 --- a/tests/suite/math/attach.typ +++ b/tests/suite/math/attach.typ @@ -84,9 +84,9 @@ $ (-1)^n + (1/2 + 3)^(-1/2) $ // Test that the attachments are aligned horizontally. $ x_1 p_1 frak(p)_1 2_1 dot_1 lg_1 !_1 \\_1 ]_1 "ip"_1 op("iq")_1 \ x^1 b^1 frak(b)^1 2^1 dot^1 lg^1 !^1 \\^1 ]^1 "ib"^1 op("id")^1 \ - x_1 y_1 "_"_1 x^1 l^1 "`"^1 attach(I,tl:1,bl:1,tr:1,br:1) + "_"_1 "`"^1 x_1 y_1 x^1 l^1 attach(I,tl:1,bl:1,tr:1,br:1) scripts(sum)_1^1 integral_1^1 abs(1/2)_1^1 \ - x^1_1, "("b y")"^1_1 != (b y)^1_1, "[∫]"_1 [integral]_1 $ + x^1_1, ")"^1_1 (b y)^1_1, "[∫]"_1 [integral]_1 $ --- math-attach-limit --- // Test limit.