Why won't this table in a figure break across pages?

I’m trying to split a table into 2 separate pages. I think I’ve done everything I need to achieve this, but for some reason the table just won’t split.

Here’s a sample code:

#set page(
  paper: "a4",
  margin: (
    inside: 15mm, 
    outside: 5mm,
    bottom: 7mm,
    top: 5mm
  ),
  footer: auto,
  numbering: "1",
  number-align: bottom + center, 
  footer-descent: 30%
)

#let size_betv_line = 0.5em

#set par(
  first-line-indent: (
    amount: 1em,
    all: true
  ),
  justify: true,
  spacing: size_betv_line,
  leading: size_betv_line
)

#set text(
  lang: "uk",
  font: "New Computer Modern",
  size: 10pt,
  hyphenate: true,
  costs: (hyphenation: 1%)
)

#show figure.where(
  kind: table
): set figure.caption(position: top)

#show figure: set block(breakable: true)

#set block(breakable: true)

#show table: set par(justify: false)

#set table.cell(breakable: true)

#set figure(numbering:num => (str(counter(heading).get().at(0)) + "." + str(num)), placement: top)

#set table(
  fill: (_, y) => if calc.odd(y) { rgb("D8F4FF") } else { white },
  stroke: (0.3pt),
  align: center + horizon
)

#figure(caption: [Аналіз небезпек сировини та допоміжних матеріалів, що використовуються для виготовлення пряників], table(columns: 3,
[Назва сировини], [Небезпека], [Причина виникнення],
[1], [2], [3],
table.cell(rowspan: 3)[Борошно],
[Зараження патогенною мікрофлорою], [Не дотримання вимог зберігання, транспортування. Та невідповідності умов перероблення.],
[Зараження шкідниками хлібопекарських виробництв], [Не належна інспекція складського приміщення. Не надлежна обробка складського приміщення. Ненадлежна якість зерна при посіві],
[Перевищення допустимих рівнів токсичних речовин, та елементів], [Перевищення додавання добрив та пестицидами при вирощуванні, зараження грунту та води токсичними елементами та речовинами, зараження пліснявою, порушень технологій переробки],
table.cell(rowspan: 3)[Цукор],
[Наявність сторонніх домішок], [Порушення технології переробки сировини з якої виготовляють цукор, недостатня перевірка на підприємстві, забруднення через транспортування],
[Перевищенні граничних рівнів токсичних елементів, пестицидів і радіонуклідів.], [Невідповідність сировини до нормативної документації для виготовлення цукру. Порушення технологічних інструкцій для виготовлення цукру.],
[Розвиток мікрофлори], [Може статися через недотримання умов перевезення та зберігання],
table.cell(rowspan: 3)[Повидло],
[Розвиток мікрофлори], [Недотримання вимог стерилізації, неналежні умови перевезення, неналежні умови зберігання.],
[Перевищення ГДР токсичних елементів та речовин], [Невідповідна якість сировини для виготовлення повидла, неналежні умови зберігання сировини, неналежна якість машин та апаратів для виготовлення повидла.],
[Наявність фізични домішок], [Недотримання умов виробництва, неякісна інспекція готового продукту.],
table.cell(rowspan: 2)[Олія соняшникова],
[Фізичні домішки], [невідповідна якість обладнання при переробці насіння, неякісна інспекція при екстрагуванні, недотримання норм кінцевого інспектування.],
[Зараження мікрофлорою], [Невідповідні до НД умови зберігання.],
table.cell(rowspan: 2)[Порошок яєчний],
[Мікробіологічне та паразитичне інфікування], [Зараження яєць з яких виготовлено порошок, неналежні умови зберігання],
[Фізичні домішки], [Забруднення під час проведення технологічних операцій, неналежне інспектування продукту],
[Розпушувач], [Наявність механічних домішок], [некоректне інспектування готового продукту. Неправильне проходження технічного процесу.],
table.cell(rowspan: 3)[Вода],
[Інфікування небажано мікрофлорою та паразитами], [Недосконала системи очистки. Неналежна чистота трубопроводу. Наявність збудників інфекцій від першоджерела водопостачання],[Фізичні домішки], [Недостатня якість системи очистки води. ],
[Забруднення токсичними металами та речовинами], [Недосконалість систем очистки води на підприємстві або водоочисних станціях, внаслідок неякісного трубопроводу, внаслідок забруднення першоджерела водопостачання],
table.cell(rowspan: 3)[Сироп інвертний], [Фізичні домішки], [Попадання пилу або металічних частин через недостатню фільтрацію сиропу після виробництва.Пошкодження тари під час транспортування або/і зберігання.],
[Забруднення токсичними металами та речовинами], [Використання неякісної сировини або обладнання, що виділяє шкідливі речовини. Корозія металевих ємностей або трубопроводів.],
[Інфікування небажаною мікрофлорою та паразитам], [Недотримання санітарно-гігієнічних норм під час виробництва. Використання забрудненого обладнання. Контамінація під час фасування або транспортування. Порушення режиму зберігання.],
table.cell(rowspan: 2)[Картонні коробки],
[Фізичні домішки], [Недостатня чистота складських приміщень. Попадання пилу та дрібного сміття на внутрішню поверхню коробок.],
[Механічні пошкодження], [Неналежні умови транспортування або складування. Зволоження коробок, що призводить до втрати міцності.],
table.cell(rowspan: 2)[Поліпропіленові пакети],
[Забруднення токсичними речовинами], [Застосування полімерів низької якості або з наявністю шкідливих домішок.],
[Механічні пошкодження], [Неправильне транспортування або зберігання пакетів. Надмірне навантаження при фасуванні або упаковці.],
), kind: table, supplement: [Таблиця])

I also tried changing the table to a grid, the result is the same.

Hey @MAX2, I’ve changed your question post’s title to better fit our guidelines: How to post in the Questions category

For future posts, make sure your title is a question you’d ask to a friend about Typst. :wink:

Have you tried removing placement: top from your figure? In principle, all you need is the line

#show figure.where(kind: table): set block(breakable: true)

and removing placement: top (or explicitly setting placement: none in your case). The rest (the set rules on table.cell and so on) can be removed.

1 Like

Looks like How to include content in a `place` function that spans more than one page?, so indeed the only solution is to not make figure non-floating like @PgBiel said. See Content in a `place` function is cut off at the bottom of the page · Issue #6325 · typst/typst · GitHub

Here is a working cleaned up version:

#import "@preview/i-figured:0.2.4"

#set page(
  margin: (inside: 15mm, outside: 5mm, bottom: 7mm, top: 5mm),
  numbering: "1",
)

#let size-betv-line = 0.5em

#set par(
  first-line-indent: (amount: 1em, all: true),
  justify: true,
  spacing: size-betv-line,
  leading: size-betv-line
)

#set text(
  10pt,
  lang: "uk",
  font: "New Computer Modern",
  hyphenate: true,
  costs: (hyphenation: 1%)
)

#set heading(numbering: "1.")
#show heading: i-figured.reset-counters
#show figure: i-figured.show-figure
// #set figure(
//   numbering: num => (str(counter(heading).get().at(0)) + "." + str(num)),
//   // placement: top,
// )
#show figure: set block(breakable: true)
#show figure.where(kind: table): set figure.caption(position: top)

#set table(
  fill: (_, y) => if calc.odd(y) { rgb("D8F4FF") } else { white },
  stroke: 0.3pt,
  align: center + horizon
)
#show table: set par(justify: false)

= Heading

#figure(
  caption: [Аналіз небезпек сировини та допоміжних матеріалів, що використовуються для виготовлення пряників],
  table(
    columns: 3,
    table.header(
      [Назва сировини], [Небезпека], [Причина виникнення],
      [1], [2], [3],
    ),
    table.cell(rowspan: 3)[Борошно],
    [Зараження патогенною мікрофлорою], [Не дотримання вимог зберігання, транспортування. Та невідповідності умов перероблення.],
    [Зараження шкідниками хлібопекарських виробництв], [Не належна інспекція складського приміщення. Не надлежна обробка складського приміщення. Ненадлежна якість зерна при посіві],
    [Перевищення допустимих рівнів токсичних речовин, та елементів], [Перевищення додавання добрив та пестицидами при вирощуванні, зараження грунту та води токсичними елементами та речовинами, зараження пліснявою, порушень технологій переробки],
    table.cell(rowspan: 3)[Цукор],
    [Наявність сторонніх домішок], [Порушення технології переробки сировини з якої виготовляють цукор, недостатня перевірка на підприємстві, забруднення через транспортування],
    [Перевищенні граничних рівнів токсичних елементів, пестицидів і радіонуклідів.], [Невідповідність сировини до нормативної документації для виготовлення цукру. Порушення технологічних інструкцій для виготовлення цукру.],
    [Розвиток мікрофлори], [Може статися через недотримання умов перевезення та зберігання],
    table.cell(rowspan: 3)[Повидло],
    [Розвиток мікрофлори], [Недотримання вимог стерилізації, неналежні умови перевезення, неналежні умови зберігання.],
    [Перевищення ГДР токсичних елементів та речовин], [Невідповідна якість сировини для виготовлення повидла, неналежні умови зберігання сировини, неналежна якість машин та апаратів для виготовлення повидла.],
    [Наявність фізични домішок], [Недотримання умов виробництва, неякісна інспекція готового продукту.],
    table.cell(rowspan: 2)[Олія соняшникова],
    [Фізичні домішки], [невідповідна якість обладнання при переробці насіння, неякісна інспекція при екстрагуванні, недотримання норм кінцевого інспектування.],
    [Зараження мікрофлорою], [Невідповідні до НД умови зберігання.],
    table.cell(rowspan: 2)[Порошок яєчний],
    [Мікробіологічне та паразитичне інфікування], [Зараження яєць з яких виготовлено порошок, неналежні умови зберігання],
    [Фізичні домішки], [Забруднення під час проведення технологічних операцій, неналежне інспектування продукту],
    [Розпушувач], [Наявність механічних домішок], [некоректне інспектування готового продукту. Неправильне проходження технічного процесу.],
    table.cell(rowspan: 3)[Вода],
    [Інфікування небажано мікрофлорою та паразитами], [Недосконала системи очистки. Неналежна чистота трубопроводу. Наявність збудників інфекцій від першоджерела водопостачання],[Фізичні домішки], [Недостатня якість системи очистки води. ],
    [Забруднення токсичними металами та речовинами], [Недосконалість систем очистки води на підприємстві або водоочисних станціях, внаслідок неякісного трубопроводу, внаслідок забруднення першоджерела водопостачання],
    table.cell(rowspan: 3)[Сироп інвертний], [Фізичні домішки], [Попадання пилу або металічних частин через недостатню фільтрацію сиропу після виробництва.Пошкодження тари під час транспортування або/і зберігання.],
    [Забруднення токсичними металами та речовинами], [Використання неякісної сировини або обладнання, що виділяє шкідливі речовини. Корозія металевих ємностей або трубопроводів.],
    [Інфікування небажаною мікрофлорою та паразитам], [Недотримання санітарно-гігієнічних норм під час виробництва. Використання забрудненого обладнання. Контамінація під час фасування або транспортування. Порушення режиму зберігання.],
    table.cell(rowspan: 2)[Картонні коробки],
    [Фізичні домішки], [Недостатня чистота складських приміщень. Попадання пилу та дрібного сміття на внутрішню поверхню коробок.],
    [Механічні пошкодження], [Неналежні умови транспортування або складування. Зволоження коробок, що призводить до втрати міцності.],
    table.cell(rowspan: 2)[Поліпропіленові пакети],
    [Забруднення токсичними речовинами], [Застосування полімерів низької якості або з наявністю шкідливих домішок.],
    [Механічні пошкодження], [Неправильне транспортування або зберігання пакетів. Надмірне навантаження при фасуванні або упаковці.],
  ),
) <this>

@tbl:this


Since you don’t implement reset for figures while using heading counter for numbering, it probably won’t work as you want, so I used i-figured – Typst Universe.

There is also a repeated header if you use table.header by default. The heading numbering was not set. But other than that, looks pretty good. Though some settings are set that are like that by default, I wouldn’t use most of them.