diff --git a/crates/typst-macros/src/elem.rs b/crates/typst-macros/src/elem.rs index c36becb23..2de0adf20 100644 --- a/crates/typst-macros/src/elem.rs +++ b/crates/typst-macros/src/elem.rs @@ -731,12 +731,18 @@ fn create_native_elem_impl(element: &Elem) -> TokenStream { quote! { <#elem as #model::ElementFields>::Fields::#name => None, } - } else { + } else if field.inherent() { quote! { <#elem as #model::ElementFields>::Fields::#name => Some( ::typst::eval::IntoValue::into_value(self.#field_ident.clone()) ), } + } else { + quote! { + <#elem as #model::ElementFields>::Fields::#name => { + self.#field_ident.clone().map(::typst::eval::IntoValue::into_value) + } + } } }); diff --git a/tests/ref/compiler/content-field.png b/tests/ref/compiler/content-field.png index cef3274a5..093d90467 100644 Binary files a/tests/ref/compiler/content-field.png and b/tests/ref/compiler/content-field.png differ diff --git a/tests/typ/compiler/content-field.typ b/tests/typ/compiler/content-field.typ index 1d3dceb77..f8adfc424 100644 --- a/tests/typ/compiler/content-field.typ +++ b/tests/typ/compiler/content-field.typ @@ -1,3 +1,17 @@ +// Tests for field introspection. + +--- +// Verify that non-inherent fields are hidden if not set. +#show figure: it => [ + `repr(it)`: #repr(it) \ + `it.has("gap"): `#repr(it.has("gap")) \ +] + +#figure[] + +#figure([], gap: 1pt) + +--- // Integrated test for content fields. #let compute(equation, ..vars) = {