diff --git a/library/src/layout/flow.rs b/library/src/layout/flow.rs index 698073204..cd713c681 100644 --- a/library/src/layout/flow.rs +++ b/library/src/layout/flow.rs @@ -243,11 +243,6 @@ impl<'a> FlowLayouter<'a> { block: &Content, styles: StyleChain, ) -> SourceResult<()> { - // Skip directly if region is already full. - if self.regions.is_full() { - self.finish_region()?; - } - // Placed elements that are out of flow produce placed items which // aren't aligned later. if let Some(placed) = block.to::() { @@ -256,6 +251,9 @@ impl<'a> FlowLayouter<'a> { self.layout_item(vt, FlowItem::Placed(frame))?; return Ok(()); } + } else if self.regions.is_full() { + // Skip directly if region is already full. + self.finish_region()?; } // How to align the block. diff --git a/tests/ref/bugs/place-pagebreak.png b/tests/ref/bugs/place-pagebreak.png new file mode 100644 index 000000000..2aa3d6b00 Binary files /dev/null and b/tests/ref/bugs/place-pagebreak.png differ diff --git a/tests/typ/bugs/place-pagebreak.typ b/tests/typ/bugs/place-pagebreak.typ new file mode 100644 index 000000000..bc04af1a3 --- /dev/null +++ b/tests/typ/bugs/place-pagebreak.typ @@ -0,0 +1,7 @@ +// Test placing on an already full page. +// It shouldn't result in a page break. + +--- +#set page(height: 40pt) +#block(height: 100%) +#place(bottom + right)[Hello world]