diff --git a/crates/typst/src/model/figure.rs b/crates/typst/src/model/figure.rs index b5698fac..1f8c5759 100644 --- a/crates/typst/src/model/figure.rs +++ b/crates/typst/src/model/figure.rs @@ -437,7 +437,7 @@ impl Outlinable for Packed { /// caption: [A rectangle], /// ) /// ``` -#[elem(name = "caption", Show)] +#[elem(name = "caption", Synthesize, Show)] pub struct FigureCaption { /// The caption's position in the figure. Either `{top}` or `{bottom}`. /// @@ -546,6 +546,14 @@ impl FigureCaption { } } +impl Synthesize for Packed { + fn synthesize(&mut self, _: &mut Engine, styles: StyleChain) -> SourceResult<()> { + let elem = self.as_mut(); + elem.push_separator(Smart::Custom(elem.get_separator(styles))); + Ok(()) + } +} + impl Show for Packed { #[typst_macros::time(name = "figure.caption", span = self.span())] fn show(&self, engine: &mut Engine, styles: StyleChain) -> SourceResult { diff --git a/tests/typ/bugs/3586-figure-caption-separator.typ b/tests/typ/bugs/3586-figure-caption-separator.typ new file mode 100644 index 00000000..ee992c50 --- /dev/null +++ b/tests/typ/bugs/3586-figure-caption-separator.typ @@ -0,0 +1,7 @@ +// Test that figure caption separator is synthesized correctly. +// https://github.com/typst/typst/issues/3586 +// Ref: false + +--- +#show figure.caption: c => test(c.separator, [#": "]) +#figure(table[], caption: [This is a test caption])