#import "/.template/lib/index.typ": document, profiles, corp-table, formula, vref, vrefs, eqref #let stress-rows = range(1, 73).map(index => ( [#index], [ #if index == 3 { [Составной параметр: - первый вложенный пункт; - второй вложенный пункт с длинным пояснением внутри ячейки.] } else { [Параметр #index с достаточно длинным наименованием для проверки переноса строк] } ], [ #if index == 4 { [Значение #index. #link("https://example.invalid/table-cell")[Ссылка внутри ячейки] сохраняет кликабельность и не меняет отступы.] } else { [Значение #index. Текст ячейки переносится, но сохраняет одинаковые внутренние поля и межстрочный интервал.] } ], )).flatten() #show: document.with( company: "test-company", profile: profiles.report( title: "Стресс-тест типографики", theme: "Таблицы, списки, формулы и грамматические ссылки", year: 2026, executors: (), ), ) = КОНТЕКСТНЫЕ ИНТЕРВАЛЫ == Заголовок перед абзацем Обычный абзац после заголовка должен иметь устойчивую красную строку, нормативный межстрочный интервал и не зависеть от элемента, который находился перед заголовком. == Заголовок перед маркированным списком - Первый уровень маркированного списка; - второй уровень с длинным текстом, который переносится на новую строку без смещения маркера; - третий уровень. - Возврат на первый уровень. == Заголовок перед нумерованным списком + Основной пункт + Второй уровень + Третий уровень + Следующий основной пункт == Соседние заголовки === Заголовок третьего уровня ==== Заголовок четвёртого уровня Текст после цепочки заголовков. = ССЫЛКИ С ПАДЕЖАМИ #figure( rect(width: 3cm, height: 1.3cm, fill: rgb("fbb20d")), caption: [Первый контрольный рисунок], ) #figure( circle(radius: 0.65cm, fill: rgb("e39f49")), caption: [Второй контрольный рисунок], ) #formula($a^2 + b^2 = c^2$) Именительный: #vref(, grammatical-case: "имен"). Родительный: без #vref(, grammatical-case: "род"). Дательный: к #vref(, grammatical-case: "дат"). Винительный: см. #vref(, grammatical-case: "вин"). Творительный: перед #vref(, grammatical-case: "тв"). Предложный: на #vref(, grammatical-case: "предл"). Групповая ссылка: на #vrefs( (, ), grammatical-case: "предл", ). Формула в дательном падеже: к #vref(, grammatical-case: "дат"); короткая ссылка #eqref(). Ссылка на раздел: в #vref(, grammatical-case: "предл"). Внешняя ссылка: #link("https://example.invalid/specification")[контрольная спецификация]. = МНОГОСТРАНИЧНАЯ ТАБЛИЦА #figure( corp-table( columns: (1.2cm, 1.7fr, 2.3fr), header: ( table.cell(rowspan: 2, align: center + horizon)[№], table.cell(colspan: 2, align: center + horizon)[Контрольные данные], [Параметр], [Описание и значение], ), body: stress-rows, repeat_header: true, continuation: true, continuation_text: "Продолжение таблицы", body-leading: 0.65em, body-inset: (x: 4pt, y: 3pt), justify: false, hyphenate: false, ), caption: [Таблица, переходящая через несколько страниц], ) = ПРОВЕРКА ПОСЛЕ ТАБЛИЦЫ Текст после таблицы не должен прилипать к последней строке. Ссылка на #vref(, grammatical-case: "вин") остаётся рабочей. #pagebreak() = ВЫСОКАЯ СТРОКА ТАБЛИЦЫ #let tall-cell = range(1, 66).map(index => [Строка высокой ячейки #index. Содержимое одной строки таблицы продолжается без потери границ.]).join(linebreak()) #figure( corp-table( columns: (3cm, 1fr), header: ([Идентификатор], [Высокая ячейка]), body: ([ROW-ONE], tall-cell), row_breakable: true, page_break: "fit", repeat_header: true, continuation: true, continuation_text: "Продолжение высокой таблицы", justify: false, ), caption: [Одна высокая строка, переходящая через страницы], )