| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406 |
- // ============================================================================
- // ПУБЛИЧНЫЙ КАТАЛОГ ПРИЁМОВ ОФОРМЛЕНИЯ SCIENTIA
- // Этот файл можно компилировать отдельно и копировать из него готовые блоки.
- // Команда: typst compile --root . docs/examples/formatting/main.typ example.pdf
- // ============================================================================
- #import "/.template/lib/index.typ": document, profiles, load-company, corp-table, formula, vref, vrefs, eqref, numbered-list, list-level
- #let company = load-company("scientia", logo: auto, signature: none, stamp: none)
- #show: document.with(
- company: company,
- profile: profiles.report(
- title: "Каталог элементов оформления",
- theme: "Рисунки, таблицы, формулы, ссылки и списки",
- udk: none,
- director_date: "«01» января 2026 г.",
- is_research: false,
- is_intermediate: false,
- stage_number: none,
- volume_number: none,
- contract_number: none,
- contract_date: none,
- city: "Екатеринбург",
- year: 2026,
- executors: (),
- attachments: (),
- bibliographies: (),
- figure_before: 0.75em,
- figure_after: 0.75em,
- table_before: 0.75em,
- table_after: 0.75em,
- figure_caption_before: 0pt,
- figure_caption_after: 0pt,
- table_caption_before: 0pt,
- table_caption_after: 0pt,
- ),
- options: (
- mode: "final",
- watermark: none,
- media-policy: "placeholder",
- diagnostics: true,
- ),
- )
- #heading(numbering: none)[КАК ПОЛЬЗОВАТЬСЯ КАТАЛОГОМ]
- Каждый раздел содержит готовый фрагмент и поясняет параметры, которые обычно меняют. Метки вида `<figure-standard>` нужны для автоматической нумерации и ссылок. Имена меток должны быть уникальными в пределах документа.
- = РИСУНКИ
- == Обычное изображение
- Путь задаётся относительно файла, в котором написан вызов `image`. Ширину удобно указывать в процентах от области текста.
- #figure(
- image("assets/example-diagram.svg", width: 78%),
- caption: [Схема последовательности обработки данных],
- ) <figure-standard>
- Обычная ссылка: @figure-standard. Ссылка с согласованным словом: на #vref(<figure-standard>).
- == Изображение заданного размера и выравнивания
- #align(left)[
- #figure(
- image("assets/example-diagram.svg", width: 11cm),
- caption: [Схема фиксированной ширины, выровненная влево],
- ) <figure-left>
- ]
- == Несколько панелей под одной подписью
- #figure(
- grid(
- columns: (1fr, 1fr),
- column-gutter: 1.2em,
- row-gutter: 0.5em,
- align(center)[
- #rect(width: 5.2cm, height: 2.4cm, fill: rgb("fff3cf"), stroke: rgb("e39f49"))
- #linebreak()
- а) исходная геометрия
- ],
- align(center)[
- #circle(radius: 1.15cm, fill: rgb("fbb20d"), stroke: rgb("444444"))
- #linebreak()
- б) область анализа
- ],
- ),
- caption: [Сравнение двух способов представления модели],
- ) <figure-grid>
- Групповая ссылка: на #vrefs((<figure-standard>, <figure-grid>)). Именительный падеж можно вызвать коротко: #vrefs((<figure-standard>, <figure-grid>), "и").
- = ТАБЛИЦЫ
- Таблицу помещают внутрь `figure`, чтобы получить подпись, номер и label. Для таблиц подпись автоматически располагается сверху.
- == Простая таблица
- #figure(
- corp-table(
- columns: 3,
- header: ([Параметр], [Обозначение], [Значение]),
- body: (
- [Сцепление], [$C$], [0,32 МПа],
- [Угол трения], [$phi$], [28°],
- [Плотность], [$rho$], [2,45 т/м³],
- ),
- ),
- caption: [Расчётные характеристики массива],
- ) <table-simple>
- Ссылка в тексте: значения приведены в #vref(<table-simple>).
- == Обычная встроенная таблица
- Красная строка автоматически отключается и в ячейках обычной `table`, и во всех строках её подписи.
- #figure(
- table(
- columns: (1fr, 2fr),
- inset: 5pt,
- align: left,
- [Параметр], [Описание],
- [Устойчивость], [Длинное содержимое ячейки переносится на следующую строку без абзацного отступа в начале первой строки.],
- ),
- caption: [Обычная встроенная таблица с достаточно длинной подписью для проверки переноса без красной строки в первой строке],
- ) <table-native>
- == Управление шириной, текстом и выравниванием
- #figure(
- corp-table(
- columns: (1.6fr, 1fr, 2.2cm),
- header: ([Расчётный случай], [Описание], [Коэффициент]),
- body: (
- [Основной], [Нормальные условия эксплуатации], [1,42],
- [Обводнённый], [Повышенный уровень подземных вод], [1,31],
- [Сейсмический], [Дополнительное динамическое воздействие], [1,18],
- ),
- align: (left, left, center),
- table-align: "center",
- text-size: 9pt,
- leading: 0.62em,
- header-inset: (x: 5pt, y: 4pt),
- body-inset: (x: 4pt, y: 3pt),
- justify: false,
- hyphenate: false,
- repeat_header: true,
- continuation: true,
- continuation_text: "Продолжение таблицы",
- ),
- caption: [Настраиваемая таблица расчётных случаев],
- ) <table-settings>
- `1fr` означает долю доступной ширины, `2.2cm` — фиксированную ширину, `auto` — ширину по содержимому.
- == Многострочная шапка и объединение ячеек
- #figure(
- corp-table(
- columns: (2.8cm, 1fr, 1fr, 1fr),
- header: (
- table.cell(rowspan: 2, align: center + horizon)[Скважина],
- table.cell(colspan: 3, align: center + horizon)[Координаты, м],
- [X], [Y], [Z],
- ),
- body: (
- [GT-01], [1035,4], [2210,8], [456,2],
- table.cell(rowspan: 2, align: center + horizon)[GT-02], [1038,1], [2215,0], [452,9],
- [1040,3], [2217,2], [449,8],
- table.cell(colspan: 3, align: left)[Контрольная точка северного борта], [1],
- ),
- align: (left, right, right, right),
- ),
- caption: [Координаты контрольных скважин],
- ) <table-merged>
- `rowspan` объединяет строки, `colspan` — столбцы. Сумма занятых ячеек в каждой строке должна соответствовать числу столбцов.
- == Таблица из CSV
- #let csv-data = csv("assets/example.csv", delimiter: "\t")
- #figure(
- corp-table(
- columns: (1fr, 1fr),
- ..csv-data.flatten(),
- ),
- caption: [Данные, загруженные из TSV-файла],
- ) <table-csv>
- Для CSV с запятыми уберите параметр `delimiter`; для табличного файла TSV используйте `"\t"`.
- = ФОРМУЛЫ
- == Отдельная нумерованная формула
- #formula(
- $K = (sum F_("уд"))/(sum F_("сдв"))$,
- ) <equation-safety>
- Ссылка через стандартную метку: @equation-safety. Короткая ссылка helper-функцией: #eqref(<equation-safety>). Ссылка с падежом: согласно #vref(<equation-safety>, "д").
- == Формула внутри строки
- Короткое выражение $K >= 1.3$ пишется между одиночными знаками `$` и не получает отдельного номера.
- == Несколько строк и пояснение символов
- #formula(
- $cases(
- sigma_1 = (sigma_x + sigma_y)/2 + sqrt(((sigma_x - sigma_y)/2)^2 + tau_(x y)^2),
- sigma_3 = (sigma_x + sigma_y)/2 - sqrt(((sigma_x - sigma_y)/2)^2 + tau_(x y)^2),
- )$,
- ) <equation-principal>
- где $sigma_1$ и $sigma_3$ — главные напряжения; $sigma_x$, $sigma_y$ и $tau_(x y)$ — компоненты тензора напряжений.
- #pagebreak()
- = СПИСКИ И ТЕКСТ
- Маркированный список:
- - первый пункт;
- - второй пункт;
- - вложенное пояснение;
- - заключительный пункт.
- Нумерованный список:
- #numbered-list[
- + Подготовить исходные данные.
- + Выполнить расчёт.
- + Проверить результат.
- ]
- == Быстрая многоуровневая схема ГОСТ
- Без параметров используется наиболее частая схема: `1.` → `а)` → `1)`.
- #numbered-list[
- + Первый уровень.
- + Второй уровень.
- + Третий уровень.
- + Следующий пункт первого уровня.
- ]
- == Полная десятичная нумерация
- Схема `decimal` сохраняет номера всех родительских уровней.
- #numbered-list(scheme: "decimal")[
- + Раздел списка.
- + Подраздел списка.
- + Вложенный пункт.
- + Следующий раздел списка.
- ]
- == Локальная и полная смешанная нумерация
- #grid(
- columns: (1fr, 1fr),
- gutter: 1cm,
- [
- *Локальная:*
- #numbered-list(scheme: "local-mixed")[
- + Уровень 1.
- + Уровень 2.
- + Уровень 3.
- ]
- ],
- [
- *С сохранением родителей:*
- #numbered-list(scheme: "full-mixed")[
- + Уровень 1.
- + Уровень 2.
- + Уровень 3.
- ]
- ],
- )
- == Доступные типы счётчиков
- #block(breakable: false)[
- #grid(
- columns: (1fr, 1fr, 1fr),
- gutter: 0.5cm,
- [*Римские I* #numbered-list(levels: ("I",), suffixes: ".")[
- + Первый.
- + Второй.
- + Третий.
- ]],
- [*Римские i* #numbered-list(levels: ("i",), suffixes: ".")[
- + Первый.
- + Второй.
- + Третий.
- ]],
- [*Латинские A* #numbered-list(levels: ("A",), suffixes: ".")[
- + Первый.
- + Второй.
- + Третий.
- ]],
- [*Латинские a* #numbered-list(levels: ("a",), suffixes: ".")[
- + Первый.
- + Второй.
- + Третий.
- ]],
- [*С ведущим нулём* #numbered-list(levels: ("01",), suffixes: ".")[
- + Первый.
- + Второй.
- + Третий.
- ]],
- [*Кириллица А* #numbered-list(levels: ("А",), suffixes: ".")[
- + Первый.
- + Второй.
- + Третий.
- ]],
- [*Кириллица а* #numbered-list(levels: ("а",), suffixes: ".")[
- + Первый.
- + Второй.
- + Третий.
- ]],
- )
- ]
- == Произвольные разделители
- В этом примере границы уровней различаются: первый разделитель — точка, второй — закрывающая скобка.
- #numbered-list(
- levels: ("1", "а", "A"),
- full: true,
- separators: (".", ")"),
- suffixes: (".", ")", "."),
- )[
- + Первый уровень.
- + Второй уровень: номер имеет вид `1.а)`.
- + Третий уровень получает номер `1.а)A.`
- ]
- Схема `legal` даёт последовательность `A)` → `A)1.`:
- #numbered-list(scheme: "legal")[
- + Латинский уровень.
- + Цифровой уровень.
- ]
- `list-level` позволяет отдельно задать prefix, suffix и ширину числа:
- #numbered-list(
- levels: (list-level("1", prefix: [§ ], suffix: ":", width: 3),),
- )[
- + Пользовательский уровень отображается как § 001:
- + Следующий уровень отображается как § 002:
- ]
- == Маркеры вместо чисел
- #numbered-list(scheme: "bullets")[
- + Маркер •.
- + Маркер ∙.
- + Маркер ‣.
- + Маркер ⁃.
- + Маркер ◦.
- ]
- == Геометрия и интервалы
- Параметры ниже меняют общий отступ списка, шаг вложенности, расстояние от номера до текста, межстрочный интервал внутри пункта и интервал между пунктами.
- #numbered-list(
- scheme: "decimal",
- outer-indent: 0.7cm,
- level-indent: 0.8cm,
- body-indent: 0.8em,
- line-leading: 0.45em,
- item-spacing: 1.1em,
- )[
- + Длинный первый пункт показывает уменьшенный интервал между строками внутри одного элемента списка и устойчивый висячий отступ при переносе текста на следующую строку.
- + Второй пункт отделён от первого увеличенным межэлементным интервалом.
- + Вложенный пункт использует увеличенный шаг уровня.
- ]
- == Продолжение с нужного номера
- Первый номер можно задать стандартным синтаксисом Typst; следующие элементы продолжат счёт автоматически. Формат `01` сохраняется.
- #numbered-list(levels: ("01",), suffixes: ".")[
- 8. Восьмой пункт отображается как 08.
- + Следующий пункт отображается как 09.
- ]
- Доступны *полужирное начертание*, _курсив_, `моноширинный текст` и #link("https://typst.app/docs/")[внешние ссылки].
- = РАЗРЫВЫ И ПОДКЛЮЧЕНИЕ ГЛАВ
- `#pagebreak()` начинает новую страницу. Большие документы делят на главы и подключают из `main.typ`:
- ```typst
- #include "chapters/10-methods.typ"
- #pagebreak()
- #include "chapters/20-results.typ"
- ```
- Само наличие файла в `chapters/` не добавляет его в документ: порядок определяют строки `#include`.
|