From a4756d8576199eaee7cc82ed2a15689d94617798 Mon Sep 17 00:00:00 2001 From: bluebear94 Date: Thu, 6 Jul 2023 03:37:19 -0400 Subject: [PATCH] Add support for weak elements in math (#1633) --- crates/typst-library/src/math/mod.rs | 5 +++++ crates/typst-library/src/math/op.rs | 2 +- tests/ref/math/frac.png | Bin 24117 -> 28719 bytes tests/typ/math/frac.typ | 5 +++++ 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/crates/typst-library/src/math/mod.rs b/crates/typst-library/src/math/mod.rs index 0429265f..f1676b91 100644 --- a/crates/typst-library/src/math/mod.rs +++ b/crates/typst-library/src/math/mod.rs @@ -47,6 +47,7 @@ use crate::meta::{ Count, Counter, CounterUpdate, LocalName, Numbering, Outlinable, Refable, }; use crate::prelude::*; +use crate::shared::BehavedBuilder; use crate::text::{ families, variant, FontFamily, FontList, LinebreakElem, SpaceElem, TextElem, TextSize, }; @@ -414,7 +415,11 @@ impl LayoutMath for Content { } if let Some(children) = self.to_sequence() { + let mut bb = BehavedBuilder::new(); for child in children { + bb.push(child.clone(), StyleChain::default()); + } + for (child, _) in bb.finish().0.iter() { child.layout_math(ctx)?; } return Ok(()); diff --git a/crates/typst-library/src/math/op.rs b/crates/typst-library/src/math/op.rs index 8ad74c49..d2c62452 100644 --- a/crates/typst-library/src/math/op.rs +++ b/crates/typst-library/src/math/op.rs @@ -60,7 +60,7 @@ macro_rules! ops { );)* let dif = |d| { - HElem::new(THIN.into()).pack() + HElem::new(THIN.into()).with_weak(true).pack() + MathStyleElem::new(TextElem::packed(d)).with_italic(Some(false)).pack() }; math.define("dif", dif('d')); diff --git a/tests/ref/math/frac.png b/tests/ref/math/frac.png index 8032757811ae0f883e087eaa542290e117c8a0e9..adb9ad0c4783dba2a0edf81174c4ea880591e3aa 100644 GIT binary patch delta 21044 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 W(Bok#oFEU#NM&wa delta 16502 zcmajG1yoy26fTNuaA|Ot;sJ^mcQ3_Dk)Q=iu_8qd?#11$r4)B98mzcGMT=W0#o?X* zy|?at>po*8A<3CDvu9?@H{af=T1ReZM~){aKy}7KK|(@OR17XcLV9~&!vduR9%}2! z`;n=oPUZQ&vq$Z-!ZLl)am!la!eTY)T!nr^<~s6-=NPYulAfItT-#dEAM`i!HSXp* zPbK?&fZ9^|N^YEm^j7(K=blkfXQ;F0je81*d6^4k;YC8aj=6Z03dCe>= z7=F>gj<8slc==L8T|GM|=OdyT`0?Z6u4Ao*2VAqAV;eE!_ckcN-hls6rE-XRWG`U|Ua5;k0J84hsvz3GKPO{HXluhv|m~<58Q}5I9!N!^1;SQBhJ-(lr&>SoO

NiY-V0ga+xZXUn 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 diff --git a/tests/typ/math/frac.typ b/tests/typ/math/frac.typ index dc120ec3..f3c31070 100644 --- a/tests/typ/math/frac.typ +++ b/tests/typ/math/frac.typ @@ -20,6 +20,11 @@ $ binom(circle, square) $ // Error: 8-13 missing argument: lower $ binom(x^2) $ +--- +// Test dif. +$ (dif y)/(dif x), dif/x, x/dif, dif/dif \ + frac(dif y, dif x), frac(dif, x), frac(x, dif), frac(dif, dif) $ + --- // Test associativity. $ 1/2/3 = (1/2)/3 = 1/(2/3) $