From 2b812259c2ce5fdeac20a04a9aeb0b97800df90a Mon Sep 17 00:00:00 2001 From: Laurenz Date: Thu, 8 Jun 2023 12:24:47 +0200 Subject: [PATCH] Fix footnote in columns Fixes #1433 --- library/src/layout/flow.rs | 9 +++++++-- tests/ref/meta/footnote-columns.png | Bin 0 -> 10873 bytes tests/typ/meta/footnote-columns.typ | 9 +++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 tests/ref/meta/footnote-columns.png create mode 100644 tests/typ/meta/footnote-columns.typ diff --git a/library/src/layout/flow.rs b/library/src/layout/flow.rs index 3e524c112..8c92d4b64 100644 --- a/library/src/layout/flow.rs +++ b/library/src/layout/flow.rs @@ -285,12 +285,16 @@ impl<'a> FlowLayouter<'a> { } .resolve(styles); - let is_columns = block.is::(); + // Temporarily delegerate rootness to the columns. + let is_root = self.root; + if is_root && block.is::() { + self.root = false; + self.regions.root = true; + } // Layout the block itself. let sticky = BlockElem::sticky_in(styles); let fragment = block.layout(vt, styles, self.regions)?; - self.regions.root = self.root && is_columns; for (i, frame) in fragment.into_iter().enumerate() { if i > 0 @@ -305,6 +309,7 @@ impl<'a> FlowLayouter<'a> { )?; } + self.root = is_root; self.regions.root = false; self.last_was_par = false; diff --git a/tests/ref/meta/footnote-columns.png b/tests/ref/meta/footnote-columns.png new file mode 100644 index 0000000000000000000000000000000000000000..528ec66418d2d5b59bf7c2be75056a9458bfcf18 GIT binary patch literal 10873 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 Dw|czT literal 0 HcmV?d00001 diff --git a/tests/typ/meta/footnote-columns.typ b/tests/typ/meta/footnote-columns.typ new file mode 100644 index 000000000..0dc889300 --- /dev/null +++ b/tests/typ/meta/footnote-columns.typ @@ -0,0 +1,9 @@ +// Test footnotes in columns, even those +// that are not enabled via `set page`. + +--- +#set page(height: 120pt) +#align(center, strong[Title]) +#show: columns.with(2) +#lorem(3) #footnote(lorem(6)) +Hello there #footnote(lorem(2))