numbering.typ 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // ==========================================
  2. // SHARED: ЧИСТЫЕ СТРАТЕГИИ НУМЕРАЦИИ
  3. // ==========================================
  4. #let cyrillic_letters = (
  5. "А", "Б", "В", "Г", "Д", "Е", "Ж", "И", "К", "Л", "М", "Н", "П",
  6. "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ш", "Щ", "Э", "Ю", "Я",
  7. )
  8. #let cyrillic_letters_lower = (
  9. "а", "б", "в", "г", "д", "е", "ж", "и", "к", "л", "м", "н", "п",
  10. "р", "с", "т", "у", "ф", "х", "ц", "ш", "щ", "э", "ю", "я",
  11. )
  12. #let cyrillic_numbering = (..nums) => {
  13. let n = nums.pos().first()
  14. if n > 0 and n <= cyrillic_letters.len() {
  15. cyrillic_letters.at(n - 1)
  16. } else {
  17. str(n)
  18. }
  19. }
  20. #let cyrillic_lower_numbering = (..nums) => {
  21. let n = nums.pos().last()
  22. if n > 0 and n <= cyrillic_letters_lower.len() {
  23. cyrillic_letters_lower.at(n - 1)
  24. } else {
  25. str(n)
  26. }
  27. }
  28. #let num_11 = (..nums) => nums.pos().map(str).join(".") + "."
  29. #let num_1a = (..nums) => {
  30. let pos = nums.pos()
  31. let out = ""
  32. for (i, n) in pos.enumerate() {
  33. if calc.rem(i, 2) == 0 {
  34. out += str(n) + "."
  35. } else {
  36. out += cyrillic_lower_numbering(n) + "."
  37. }
  38. }
  39. out
  40. }
  41. #let num_1_a = (..nums) => {
  42. let pos = nums.pos()
  43. let n = pos.last()
  44. if calc.rem(pos.len() - 1, 2) == 0 {
  45. str(n) + "."
  46. } else {
  47. cyrillic_lower_numbering(n) + "."
  48. }
  49. }
  50. #let attachment_numbering(policy, n) = {
  51. if policy == "arabic" {
  52. str(n)
  53. } else if policy == "cyrillic" {
  54. cyrillic_numbering(n)
  55. } else if policy == "none" {
  56. ""
  57. } else {
  58. panic("Scientia / attachment-numbering: неизвестная политика " + repr(policy))
  59. }
  60. }