diff --git a/src/doc.rs b/src/doc.rs index 7b7700964..3dbd3b818 100644 --- a/src/doc.rs +++ b/src/doc.rs @@ -263,12 +263,18 @@ impl Frame { /// Attach metadata from an iterator. pub fn meta_iter(&mut self, iter: impl IntoIterator) { + let mut hide = false; for meta in iter { if matches!(meta, Meta::Hide) { - self.clear(); - break; + hide = true; + } else { + self.prepend(Point::zero(), FrameItem::Meta(meta, self.size)); } - self.prepend(Point::zero(), FrameItem::Meta(meta, self.size)); + } + if hide { + Arc::make_mut(&mut self.items).retain(|(_, item)| { + matches!(item, FrameItem::Group(_) | FrameItem::Meta(Meta::Elem(_), _)) + }); } } diff --git a/tests/ref/bugs/hide-meta.png b/tests/ref/bugs/hide-meta.png new file mode 100644 index 000000000..860617d79 Binary files /dev/null and b/tests/ref/bugs/hide-meta.png differ diff --git a/tests/typ/bugs/hide-meta.typ b/tests/typ/bugs/hide-meta.typ new file mode 100644 index 000000000..6dce81ad6 --- /dev/null +++ b/tests/typ/bugs/hide-meta.typ @@ -0,0 +1,24 @@ +// Test that metadata of hidden stuff stays available. + +--- +#set cite(style: "chicago-notes") + +A pirate. @arrgh \ +#set text(2pt) +#hide[ + A @arrgh pirate. + #bibliography("/works.bib") +] + +--- +#set text(8pt) +#outline() +#set text(2pt) +#hide(block(grid( + [= A], + [= B], + block(grid( + [= C], + [= D], + )) +)))