137 lines
5.6 KiB
Typst
137 lines
5.6 KiB
Typst
#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: (),
|
||
),
|
||
)
|
||
|
||
= КОНТЕКСТНЫЕ ИНТЕРВАЛЫ
|
||
|
||
== Заголовок перед абзацем
|
||
|
||
Обычный абзац после заголовка должен иметь устойчивую красную строку, нормативный межстрочный интервал и не зависеть от элемента, который находился перед заголовком.
|
||
|
||
== Заголовок перед маркированным списком
|
||
|
||
- Первый уровень маркированного списка;
|
||
- второй уровень с длинным текстом, который переносится на новую строку без смещения маркера;
|
||
- третий уровень.
|
||
- Возврат на первый уровень.
|
||
|
||
== Заголовок перед нумерованным списком
|
||
|
||
+ Основной пункт
|
||
+ Второй уровень
|
||
+ Третий уровень
|
||
+ Следующий основной пункт
|
||
|
||
== Соседние заголовки
|
||
=== Заголовок третьего уровня
|
||
==== Заголовок четвёртого уровня
|
||
|
||
Текст после цепочки заголовков.
|
||
|
||
= ССЫЛКИ С ПАДЕЖАМИ <stress-section>
|
||
|
||
#figure(
|
||
rect(width: 3cm, height: 1.3cm, fill: rgb("fbb20d")),
|
||
caption: [Первый контрольный рисунок],
|
||
) <stress-figure-a>
|
||
|
||
#figure(
|
||
circle(radius: 0.65cm, fill: rgb("e39f49")),
|
||
caption: [Второй контрольный рисунок],
|
||
) <stress-figure-b>
|
||
|
||
#formula($a^2 + b^2 = c^2$) <stress-equation>
|
||
|
||
Именительный: #vref(<stress-figure-a>, grammatical-case: "имен").
|
||
Родительный: без #vref(<stress-figure-a>, grammatical-case: "род").
|
||
Дательный: к #vref(<stress-figure-a>, grammatical-case: "дат").
|
||
Винительный: см. #vref(<stress-figure-a>, grammatical-case: "вин").
|
||
Творительный: перед #vref(<stress-figure-a>, grammatical-case: "тв").
|
||
Предложный: на #vref(<stress-figure-a>, grammatical-case: "предл").
|
||
|
||
Групповая ссылка: на #vrefs(
|
||
(<stress-figure-a>, <stress-figure-b>),
|
||
grammatical-case: "предл",
|
||
).
|
||
|
||
Формула в дательном падеже: к #vref(<stress-equation>, grammatical-case: "дат"); короткая ссылка #eqref(<stress-equation>).
|
||
|
||
Ссылка на раздел: в #vref(<stress-section>, 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: [Таблица, переходящая через несколько страниц],
|
||
) <stress-table>
|
||
|
||
= ПРОВЕРКА ПОСЛЕ ТАБЛИЦЫ
|
||
|
||
Текст после таблицы не должен прилипать к последней строке. Ссылка на #vref(<stress-table>, 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: [Одна высокая строка, переходящая через страницы],
|
||
) <tall-row-table>
|