How to detect the number of items in a list?

Unless there is a simple and direct way to do what I described.

don’t tempt me!!! here it is:

#let enum-level = state("enum-level", 0)
#let level-skip = state("level-skip", false)
#let is-item(thing) = thing.func() == enum.item
#show enum.item: it => {
  enum-level.update(l => l + 1)
  level-skip.update(is-item(it.body)
    or it.body.has("children") and it.body.children.all(c => is-item(c) or c == [ ]))
    
  it
  enum-level.update(l => l - 1)
  level-skip.update(false)
}

#let single-item = state("single-item", false)
#show enum: it => {
  single-item.update(it.children.filter(c => c.func() == enum.item).len() == 1)
  it
  single-item.update(false)
}


#let enum-counter = counter("enum")
#enum-counter.step()
#set enum(numbering: num => context {
  let num = if enum-level.get() == 1 {
    enum-counter.step() + enum-counter.display()
  } else { num }
  
  if level-skip.get() []
  else if single-item.get() [*Single. *]
  else [*Lvl#enum-level.get().* #num;º]
})

you skip over a level by adding two or more + markers in one line. single-item level skips aren’t obvious due to the Single marker (see “yup”). the result:

+ hi hello
+ what's up
  + nun much
    + yea
  + oh ok
    + uhm
      + + yup
          + wow
          + wtf
    + so
+ how bout you
  + + yea
    + okay
  + hello

some text here

+ continued!
  + feels good

2 Likes