main.typ 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #import "/.template/lib/index.typ": document, profiles, corp-table, formula, vref, vrefs, eqref
  2. #let stress-rows = range(1, 73).map(index => (
  3. [#index],
  4. [
  5. #if index == 3 {
  6. [Составной параметр:
  7. - первый вложенный пункт;
  8. - второй вложенный пункт с длинным пояснением внутри ячейки.]
  9. } else {
  10. [Параметр #index с достаточно длинным наименованием для проверки переноса строк]
  11. }
  12. ],
  13. [
  14. #if index == 4 {
  15. [Значение #index. #link("https://example.invalid/table-cell")[Ссылка внутри ячейки] сохраняет кликабельность и не меняет отступы.]
  16. } else {
  17. [Значение #index. Текст ячейки переносится, но сохраняет одинаковые внутренние поля и межстрочный интервал.]
  18. }
  19. ],
  20. )).flatten()
  21. #show: document.with(
  22. company: "test-company",
  23. profile: profiles.report(
  24. title: "Стресс-тест типографики",
  25. theme: "Таблицы, списки, формулы и грамматические ссылки",
  26. year: 2026,
  27. executors: (),
  28. ),
  29. )
  30. = КОНТЕКСТНЫЕ ИНТЕРВАЛЫ
  31. == Заголовок перед абзацем
  32. Обычный абзац после заголовка должен иметь устойчивую красную строку, нормативный межстрочный интервал и не зависеть от элемента, который находился перед заголовком.
  33. == Заголовок перед маркированным списком
  34. - Первый уровень маркированного списка;
  35. - второй уровень с длинным текстом, который переносится на новую строку без смещения маркера;
  36. - третий уровень.
  37. - Возврат на первый уровень.
  38. == Заголовок перед нумерованным списком
  39. + Основной пункт
  40. + Второй уровень
  41. + Третий уровень
  42. + Следующий основной пункт
  43. == Соседние заголовки
  44. === Заголовок третьего уровня
  45. ==== Заголовок четвёртого уровня
  46. Текст после цепочки заголовков.
  47. = ССЫЛКИ С ПАДЕЖАМИ <stress-section>
  48. #figure(
  49. rect(width: 3cm, height: 1.3cm, fill: rgb("fbb20d")),
  50. caption: [Первый контрольный рисунок],
  51. ) <stress-figure-a>
  52. #figure(
  53. circle(radius: 0.65cm, fill: rgb("e39f49")),
  54. caption: [Второй контрольный рисунок],
  55. ) <stress-figure-b>
  56. #formula($a^2 + b^2 = c^2$) <stress-equation>
  57. Именительный: #vref(<stress-figure-a>, grammatical-case: "имен").
  58. Родительный: без #vref(<stress-figure-a>, grammatical-case: "род").
  59. Дательный: к #vref(<stress-figure-a>, grammatical-case: "дат").
  60. Винительный: см. #vref(<stress-figure-a>, grammatical-case: "вин").
  61. Творительный: перед #vref(<stress-figure-a>, grammatical-case: "тв").
  62. Предложный: на #vref(<stress-figure-a>, grammatical-case: "предл").
  63. Групповая ссылка: на #vrefs(
  64. (<stress-figure-a>, <stress-figure-b>),
  65. grammatical-case: "предл",
  66. ).
  67. Формула в дательном падеже: к #vref(<stress-equation>, grammatical-case: "дат"); короткая ссылка #eqref(<stress-equation>).
  68. Ссылка на раздел: в #vref(<stress-section>, grammatical-case: "предл").
  69. Внешняя ссылка: #link("https://example.invalid/specification")[контрольная спецификация].
  70. = МНОГОСТРАНИЧНАЯ ТАБЛИЦА
  71. #figure(
  72. corp-table(
  73. columns: (1.2cm, 1.7fr, 2.3fr),
  74. header: (
  75. table.cell(rowspan: 2, align: center + horizon)[№],
  76. table.cell(colspan: 2, align: center + horizon)[Контрольные данные],
  77. [Параметр],
  78. [Описание и значение],
  79. ),
  80. body: stress-rows,
  81. repeat_header: true,
  82. continuation: true,
  83. continuation_text: "Продолжение таблицы",
  84. body-leading: 0.65em,
  85. body-inset: (x: 4pt, y: 3pt),
  86. justify: false,
  87. hyphenate: false,
  88. ),
  89. caption: [Таблица, переходящая через несколько страниц],
  90. ) <stress-table>
  91. = ПРОВЕРКА ПОСЛЕ ТАБЛИЦЫ
  92. Текст после таблицы не должен прилипать к последней строке. Ссылка на #vref(<stress-table>, grammatical-case: "вин") остаётся рабочей.
  93. #pagebreak()
  94. = ВЫСОКАЯ СТРОКА ТАБЛИЦЫ
  95. #let tall-cell = range(1, 66).map(index => [Строка высокой ячейки #index. Содержимое одной строки таблицы продолжается без потери границ.]).join(linebreak())
  96. #figure(
  97. corp-table(
  98. columns: (3cm, 1fr),
  99. header: ([Идентификатор], [Высокая ячейка]),
  100. body: ([ROW-ONE], tall-cell),
  101. row_breakable: true,
  102. page_break: "fit",
  103. repeat_header: true,
  104. continuation: true,
  105. continuation_text: "Продолжение высокой таблицы",
  106. justify: false,
  107. ),
  108. caption: [Одна высокая строка, переходящая через страницы],
  109. ) <tall-row-table>