// ========================================== // НУМЕРАЦИЯ, КИРИЛЛИЦА И ФОРМАТЫ СПИСКОВ // ========================================== // Глобальный массив кириллических букв для нумерации по ГОСТ // (обычно исключают Ё, З, Й, О, Ч, Ь, Ы, Ъ) #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 + "." } }