Files
Report-showcase/.template/lib/shared/numbering.typ
T
2026-10-09 01:45:17 +00:00

69 lines
1.6 KiB
Typst
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ==========================================
// SHARED: ЧИСТЫЕ СТРАТЕГИИ НУМЕРАЦИИ
// ==========================================
#let cyrillic_letters = (
"А", "Б", "В", "Г", "Д", "Е", "Ж", "И", "К", "Л", "М", "Н", "П",
"Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ш", "Щ", "Э", "Ю", "Я",
)
#let cyrillic_letters_lower = (
"а", "б", "в", "г", "д", "е", "ж", "и", "к", "л", "м", "н", "п",
"р", "с", "т", "у", "ф", "х", "ц", "ш", "щ", "э", "ю", "я",
)
#let cyrillic_numbering = (..nums) => {
let n = nums.pos().first()
if n > 0 and n <= cyrillic_letters.len() {
cyrillic_letters.at(n - 1)
} else {
str(n)
}
}
#let cyrillic_lower_numbering = (..nums) => {
let n = nums.pos().last()
if n > 0 and n <= cyrillic_letters_lower.len() {
cyrillic_letters_lower.at(n - 1)
} else {
str(n)
}
}
#let num_11 = (..nums) => nums.pos().map(str).join(".") + "."
#let num_1a = (..nums) => {
let pos = nums.pos()
let out = ""
for (i, n) in pos.enumerate() {
if calc.rem(i, 2) == 0 {
out += str(n) + "."
} else {
out += cyrillic_lower_numbering(n) + "."
}
}
out
}
#let num_1_a = (..nums) => {
let pos = nums.pos()
let n = pos.last()
if calc.rem(pos.len() - 1, 2) == 0 {
str(n) + "."
} else {
cyrillic_lower_numbering(n) + "."
}
}
#let attachment_numbering(policy, n) = {
if policy == "arabic" {
str(n)
} else if policy == "cyrillic" {
cyrillic_numbering(n)
} else if policy == "none" {
""
} else {
panic("Scientia / attachment-numbering: неизвестная политика " + repr(policy))
}
}