Предиктека Войти

Плейсхолдеры

Синтаксис {{путь}} — это движок Word. Шаблон Typst плейсхолдеров не знает: он читает тот же data.json и обращается к полям как к переменным. Два движка, два способа подставить данные, и путать их — самая частая ошибка при первом шаблоне.

{{buyer.name}}             значение поля
{{items.0.qty}}            первый элемент массива
{{#each items}}…{{/each}}  повтор строки таблицы для каждого элемента
{{this}}                   сам элемент внутри повтора

Путь — имя поля из схемы; точки разделяют вложенность, числа обозначают элемент массива.

В Word

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

Повтор строки ставится внутри строки таблицы: {{#each items}} в первой ячейке, {{/each}} в последней. Заполнение повторит всю строку столько раз, сколько элементов в массиве.

Значения экранируются: «Ромашка & Ко» попадёт в документ как есть и не сломает файл. Если поля в данных нет, подставится пусто — а обязательные поля схема не пропустит заранее.

В Typst

Плейсхолдеров нет. Данные приходят файлом data.json рядом с шаблоном, и шаблон читает их как обычно:

#let d = json("data.json")
#let opt(dict, key) = if key in dict { dict.at(key) } else { "" }

Поставщик: #d.seller.name
Город: #opt(d, "city")
#for item in d.items [• #item.name — #item.qty шт. ]

Необязательное поле читайте через opt: прямое обращение к отсутствующему ключу — ошибка печати, и это правильно, но неудобно.

Схема

Схема — обычный JSON Schema (draft 2020-12). Обязательные поля перечисляются в required, а example показывается в форме как подсказка.

{
  "type": "object",
  "required": ["number", "date", "buyer"],
  "properties": {
    "number": {"type": "string", "example": "14/2026"},
    "date": {"type": "string", "format": "date", "example": "2026-11-14"},
    "buyer": {"$ref": "#/$defs/party"}
  },
  "$defs": {
    "party": {"type": "object", "required": ["name", "inn"],
              "properties": {"name": {"type": "string"}, "inn": {"type": "string"}}}
  }
}

Сгенерировать шаблон без вёрстки

Если шаблона нет, его можно получить из списка полей — командой в кабинете или через ассистента (инструмент scaffold_template). Результат — готовый пакет: typst даёт аккуратную вёрстку, docx — документ Word, который компания правит под свой бланк.

← Все страницы документации