Files
test/docs/formatting.md
T
2026-10-09 04:24:38 +00:00

13 KiB
Raw Blame History

Рисунки, таблицы, формулы и ссылки

Полный компилируемый каталог находится в examples/formatting/main.typ. Его можно открыть рядом с предпросмотром, изменить параметры и скопировать готовый блок в свою главу.

Собрать каталог отдельно:

typst compile --root . docs/examples/formatting/main.typ example.pdf

Или выполните задачу VS Code Scientia: собрать учебный пример и выберите пример оформления.

Метки и автоматическая нумерация

После рисунка, таблицы или формулы ставится уникальная метка:

#figure(
  image("../assets/images/scheme.png", width: 80%),
  caption: [Расчётная схема],
) <calculation-scheme>

Ссылка @calculation-scheme получает номер автоматически. Функция vref добавляет правильное слово. По умолчанию используется предложный падеж — самый частый вариант после слов «в» и «на»:

на #vref(<calculation-scheme>)

Если нужен другой падеж, укажите его второй позицией одной буквой:

#vref(<calculation-scheme>, "и")       // Рисунок 1 — именительный
без #vref(<calculation-scheme>, "р")   // без Рисунка 1 — родительный
к #vref(<calculation-scheme>, "д")     // к Рисунку 1 — дательный
вижу #vref(<calculation-scheme>, "в")  // вижу Рисунок 1 — винительный
перед #vref(<calculation-scheme>, "т") // перед Рисунком 1 — творительный
на #vref(<calculation-scheme>, "п")    // на Рисунке 1 — предложный

Названия объектов ссылки всегда начинаются с прописной буквы: «Рисунок», «Таблица», «Формула», «Раздел», «Приложение». Если в исключительном месте нужна строчная буква, добавьте capitalized: false.

Можно писать и прежние сокращения ("имен", "род", "дат", "вин", "тв", "предл"), и полные названия ("именительный", "предложный" и т. д.). Для нескольких однородных ссылок действуют те же правила: #vrefs((<figure-a>, <figure-b>)) даст «Рисунках 1 и 2». При добавлении новой главы не копируйте уже существующую метку.

Для приложения метка ставится на первом заголовке его файла: = Исходные данные <appendix-source-data>. Запись в #vref(<appendix-source-data>) даст «в Приложении А», а в #vrefs((<appendix-a>, <appendix-b>)) — «в Приложениях А и Б». Подключение файлов описано в руководстве по документам.

Информационные плашки

Компонент info-block выделяет замечание или важное пояснение большим цветным блоком:

#info-block(title: [ЗАМЕЧАНИЕ])[
  Перед выпуском отчёта нужно согласовать исходные данные расчёта.
]

Цвета можно переопределить через fill, accent и text-fill; title: none убирает заголовок. В Typst Typewriter готовый блок вставляется кнопкой Плашка-замечание.

Рисунки

В примере показаны:

  • обычное изображение с шириной в процентах;
  • фиксированная ширина в сантиметрах и выравнивание;
  • несколько панелей под одной подписью;
  • одиночные и групповые ссылки.

Изображение храните в assets/images/. Для фотографий обычно подходит PNG или JPEG, для схем — SVG.

Таблицы

Компонент corp-table добавляет фирменную шапку и поддерживает:

  • равные, относительные и фиксированные ширины столбцов;
  • отдельные header и body;
  • размер текста, интервалы и поля ячеек;
  • обычные, компактные и нулевые отступы списков;
  • выравнивание по столбцам;
  • rowspan и colspan;
  • повторение шапки и надпись «Продолжение таблицы»;
  • импорт данных из CSV и TSV.

Минимальный вариант:

#figure(
  corp-table(
    columns: (2fr, 1fr),
    header: ([Параметр], [Значение]),
    body: ([Высота уступа], [15 м], [Угол откоса], [70°]),
  ),
  caption: [Исходные параметры],
) <source-parameters>

Красная строка внутри ячеек и в подписи таблицы отключается автоматически. Это правило действует и для corp-table, и для обычной встроенной table.

Списки внутри таблицы

По умолчанию списки наследуют обычное оформление документа. Для узкой таблицы достаточно добавить один параметр:

#corp-table(
  list-layout: "compact",
  columns: (1fr, 2fr),
  header: ([Раздел], [Содержание]),
  body: (
    [Материалы], [
      - исходные данные;
      - результаты расчётов.
    ],
  ),
)

Доступны три явных режима:

Значение Результат
"normal" обычные отступы основного текста
"compact" небольшой отступ для большинства таблиц
"flush" маркер или номер начинается у левого поля ячейки

Если list-layout не задан, существующее оформление не изменяется. Точные значения для всей таблицы можно задать параметрами list-indent и list-body-indent:

#corp-table(
  list-indent: 0.2cm,
  list-body-indent: 0.25em,
  // остальные параметры таблицы
)

Эта настройка действует и на обычные списки -, и на нумерованные списки +, включая numbered-list. Для отдельной ячейки используйте локальные оболочки из раздела ниже. В обычной встроенной table параметра list-layout нет — применяйте bullet-list или numbered-list непосредственно внутри нужной ячейки.

Формулы

Встроенная формула пишется внутри строки: $K >= 1.3$.

Отдельная формула с номером:

#formula(
  $K = (sum F_("уд"))/(sum F_("сдв"))$,
) <safety-factor>

Ссылка: #eqref(<safety-factor>).

Настраиваемые списки

bullet-list настраивает маркированный список, а numbered-list — нумерованный. Обе оболочки сохраняют встроенные механизмы list и enum, поэтому продолжают работать штатные переносы страниц, вложенные и многоабзацные пункты. Правила шаблонов номеров описаны в документации numbering.

Для маркированного списка можно быстро выбрать геометрию:

#bullet-list(layout: "compact")[
- Первый пункт.
- Второй пункт.
]

Параметр layout принимает "normal", "compact" или "flush". Без него список наследует настройки документа или окружающей таблицы.

Для обычной схемы ГОСТ достаточно обернуть стандартный список:

#numbered-list[
+ Первый уровень
  + Второй уровень
    + Третий уровень
]

По умолчанию получится 1. → а) → 1). Частые готовые схемы:

Схема Результат по уровням
"gost" 1. → а) → 1)
"decimal" 1. → 1.1. → 1.1.1.
"decimal-plain" 1 → 1.1 → 1.1.1
"local-mixed" 1. → а. → ‣
"full-mixed" 1. → 1.а. → 1.а.‣
"legal" A) → A)1.
"bullets" • → ∙ → ‣ → ⁃ → ◦

Тип каждого уровня вложенности задаётся через levels. Это именно форматы уровней, а не готовые номера: levels: ("1", "а", "A") означает цифровой первый уровень, кириллический второй и латинский третий. Соседние пункты увеличиваются автоматически. Поддерживаются "1", "01", "I", "i", "A", "a", "А", "а", произвольный символ или функция:

#numbered-list(
  levels: ("1", "а", "A"),
  full: true,
  separators: (".", ")"),
  suffixes: (".", ")", "."),
)[
+ Первый уровень
  + Второй уровень
    + Третий уровень
]

Этот пример даёт 1., 1.а) и 1.а)A.. Параметр full включает или скрывает номера родительских уровней.

Геометрия списка настраивается независимо:

Параметр Что изменяет
outer-indent общий отступ всего списка
level-indent дополнительный отступ каждого вложенного уровня
body-indent расстояние от номера или маркера до текста
line-leading расстояние между строками внутри одного пункта
item-spacing расстояние между соседними пунктами
paragraph-spacing расстояние между абзацами внутри одного пункта

Эти параметры доступны и в bullet-list, и в numbered-list. Явно заданное значение конкретного списка имеет приоритет над режимом всей таблицы:

#bullet-list(level-indent: 0.15cm, body-indent: 0.2em)[
- Точно настроенный пункт.
]

Чтобы продолжить с нужного номера, первый пункт задают числом, а следующие снова пишут через +:

#numbered-list(levels: ("01",), suffixes: ".")[
8. Восьмой пункт будет показан как 08.
+ Следующий пункт будет показан как 09.
]

Полный компилируемый каталог содержит примеры всех типов счётчиков, разделителей, маркеров и интервалов.

Где смотреть допустимые варианты

Элемент Раздел исходника
Обычный рисунок РИСУНКИ → Обычное изображение
Сетка изображений РИСУНКИ → Несколько панелей
Простая таблица ТАБЛИЦЫ → Простая таблица
Настраиваемая таблица ТАБЛИЦЫ → Управление шириной
Объединённые ячейки ТАБЛИЦЫ → Многострочная шапка
CSV / TSV ТАБЛИЦЫ → Таблица из CSV
Формулы ФОРМУЛЫ
Списки и текст СПИСКИ И ТЕКСТ → все подразделы

Каталог является частью автоматических тестов шаблона: примеры должны продолжать компилироваться после изменений библиотеки.