How do I customize outline entries (`it.inner()` / `it.body()`)?

Here you go:

#let in-outline() = {
  let after-start = query(selector(<outline-start>).before(here())).len() == 1
  let before-end = query(selector(<outline-end>).after(here())).len() == 1
  after-start and before-end
}

#let caption(short, details) = context {
  if in-outline() { short } else { [#short #details] }
}

#show outline: it => {
  [#metadata(none)<outline-start>#it#metadata(none)<outline-end>]
}

#show figure.where(kind: image): set figure(
  numbering: (..n) => context {
    if in-outline() { numbering("1.", ..n) } else { numbering("1", ..n) }
  },
)

#outline(target: figure.where(kind: image), title: [Table of figures])

#figure(
  rect(),
  caption: caption[A short title for the figure.][Specific details in a few sentences that explain the figure in a lot more text. A bunch more words.],
)

#figure(rect(), caption: caption[A short title for the figure.][#lorem(10)])

2 Likes