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
