That’s theme related. Normally doing the entire list with 1.
works fine in Markdown, but you can provide the actual numbers like this:
const startAtLevel = input?.level || 2
const content = await dv.io.load(dv.current().file.path)
const counter = [0, startAtLevel]
let numbers = [1]
const toc = content.match(new RegExp(`^#{${startAtLevel},} \\S.*`, 'mg'))
.map(heading => {
const [_, level, text] = heading.match(/^(#+) (.+)$/)
const link = dv.current().file.path + '#' + text
if (level.length > counter[1]) {
counter[0]++
numbers[counter[0]] = 1
} else if (level.length < counter[1]) {
counter[0] = Math.max(0, counter[0] - 1)
numbers[counter[0]]++
numbers = numbers.slice(0, counter[0] + 1)
}
counter[1] = level.length
return '\t'.repeat(counter[0]) + `${input?.style || numbers[numbers.length - 1] + '.'} [[${link}|${text}]]`
})
if (input?.heading !== false) {
dv.header(2, 'Table of contents')
}
dv.paragraph(toc.join('\n'))