106 lines
2.1 KiB
Typst
106 lines
2.1 KiB
Typst
// ==========================================
|
||
// НУМЕРАЦИЯ, КИРИЛЛИЦА И ФОРМАТЫ СПИСКОВ
|
||
// ==========================================
|
||
|
||
// Глобальный массив кириллических букв для нумерации по ГОСТ
|
||
// (обычно исключают Ё, З, Й, О, Ч, Ь, Ы, Ъ)
|
||
#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)
|
||
}
|
||
}
|
||
|
||
// Формат 1.1. (наследует всех родителей)
|
||
#let num_11 = (..nums) => nums.pos().map(str).join(".") + "."
|
||
|
||
// Формат 1.а. (наследует всех родителей, чередует цифры и кириллицу)
|
||
#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 {
|
||
let letter = if n > 0 and n <= cyrillic_letters_lower.len() {
|
||
cyrillic_letters_lower.at(n - 1)
|
||
} else {
|
||
str(n)
|
||
}
|
||
out += letter + "."
|
||
}
|
||
}
|
||
out
|
||
}
|
||
|
||
// Формат 1., а. (без наследования родителей, чередует цифры и кириллицу)
|
||
#let num_1_a = (..nums) => {
|
||
let pos = nums.pos()
|
||
let n = pos.last()
|
||
if calc.rem(pos.len() - 1, 2) == 0 { str(n) + "." } else {
|
||
let letter = if n > 0 and n <= cyrillic_letters_lower.len() {
|
||
cyrillic_letters_lower.at(n - 1)
|
||
} else {
|
||
str(n)
|
||
}
|
||
letter + "."
|
||
}
|
||
}
|