numbering.typ 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. // ==========================================
  2. // НУМЕРАЦИЯ, КИРИЛЛИЦА И ФОРМАТЫ СПИСКОВ
  3. // ==========================================
  4. // Глобальный массив кириллических букв для нумерации по ГОСТ
  5. // (обычно исключают Ё, З, Й, О, Ч, Ь, Ы, Ъ)
  6. #let cyrillic_letters = (
  7. "А",
  8. "Б",
  9. "В",
  10. "Г",
  11. "Д",
  12. "Е",
  13. "Ж",
  14. "И",
  15. "К",
  16. "Л",
  17. "М",
  18. "Н",
  19. "П",
  20. "Р",
  21. "С",
  22. "Т",
  23. "У",
  24. "Ф",
  25. "Х",
  26. "Ц",
  27. "Ш",
  28. "Щ",
  29. "Э",
  30. "Ю",
  31. "Я",
  32. )
  33. #let cyrillic_letters_lower = (
  34. "а",
  35. "б",
  36. "в",
  37. "г",
  38. "д",
  39. "е",
  40. "ж",
  41. "и",
  42. "к",
  43. "л",
  44. "м",
  45. "н",
  46. "п",
  47. "р",
  48. "с",
  49. "т",
  50. "у",
  51. "ф",
  52. "х",
  53. "ц",
  54. "ш",
  55. "щ",
  56. "э",
  57. "ю",
  58. "я",
  59. )
  60. // Фильтр для форматирования счетчика в заглавную букву (Приложение А)
  61. #let cyrillic_numbering = (..nums) => {
  62. let n = nums.pos().first()
  63. if n > 0 and n <= cyrillic_letters.len() {
  64. cyrillic_letters.at(n - 1)
  65. } else {
  66. str(n)
  67. }
  68. }
  69. // Формат 1.1. (наследует всех родителей)
  70. #let num_11 = (..nums) => nums.pos().map(str).join(".") + "."
  71. // Формат 1.а. (наследует всех родителей, чередует цифры и кириллицу)
  72. #let num_1a = (..nums) => {
  73. let pos = nums.pos()
  74. let out = ""
  75. for (i, n) in pos.enumerate() {
  76. if calc.rem(i, 2) == 0 { out += str(n) + "." } else {
  77. let letter = if n > 0 and n <= cyrillic_letters_lower.len() {
  78. cyrillic_letters_lower.at(n - 1)
  79. } else {
  80. str(n)
  81. }
  82. out += letter + "."
  83. }
  84. }
  85. out
  86. }
  87. // Формат 1., а. (без наследования родителей, чередует цифры и кириллицу)
  88. #let num_1_a = (..nums) => {
  89. let pos = nums.pos()
  90. let n = pos.last()
  91. if calc.rem(pos.len() - 1, 2) == 0 { str(n) + "." } else {
  92. let letter = if n > 0 and n <= cyrillic_letters_lower.len() {
  93. cyrillic_letters_lower.at(n - 1)
  94. } else {
  95. str(n)
  96. }
  97. letter + "."
  98. }
  99. }