Initial commit
This commit is contained in:
commit
41d230d524
163 files changed
+11500
No files matched your search
@@ -0,0 +1,28 @@
|
||||
# Компилируемые примеры
|
||||
|
||||
Примеры одновременно служат учебными материалами и полными заготовками. Каждый каталог документа содержит собственные `main.typ`, `chapters/` и при необходимости `assets/`, поэтому его можно собрать на месте или установить задачей VS Code.
|
||||
|
||||
## Виды документов
|
||||
|
||||
| Пример | Что показывает | Команда |
|
||||
|--------|---------------|---------|
|
||||
| [Отчёт](documents/report/main.typ) | Титул, этап, исполнители, рисунки, таблицы, формулы, библиография и отдельные файлы приложений | `typst compile --root . docs/examples/documents/report/main.typ example.pdf` |
|
||||
| [Письмо](documents/letter/main.typ) | Адресат, исходящий номер, текст, подпись и перечень приложений | `typst compile --root . docs/examples/documents/letter/main.typ example.pdf` |
|
||||
| [ТКП](documents/commercial-offer/main.typ) | Предмет, цена, сроки, оплата, состав работ и техническое задание | `typst compile --root . docs/examples/documents/commercial-offer/main.typ example.pdf` |
|
||||
| [Договор](documents/contract/main.typ) | Стороны, представители, разделы, реквизиты, подписи и приложение | `typst compile --root . docs/examples/documents/contract/main.typ example.pdf` |
|
||||
|
||||
## Каталог оформления
|
||||
|
||||
[formatting/main.typ](formatting/main.typ) содержит пояснённые варианты рисунков, сеток изображений, простых и сложных таблиц, CSV, формул, ссылок и списков.
|
||||
|
||||
## Пример настроек приватных данных
|
||||
|
||||
[private/settings.typ](private/settings.typ) показывает полный формат локальных настроек без настоящих изображений. Скопируйте его в `.private/settings.typ`, но меняйте `enabled` на `true` только после добавления соответствующего PNG.
|
||||
|
||||
## Установка примера в корень
|
||||
|
||||
Запустите **Scientia: выбрать тип документа**. Задача:
|
||||
|
||||
1. сохранит текущие `main.typ` и `chapters/` в `.private/starter-backups/`;
|
||||
2. скопирует выбранный пример в корень;
|
||||
3. оставит три варианта режима комментариями внутри нового `main.typ`.
|
||||
@@ -0,0 +1,9 @@
|
||||
Уважаемый Иван Иванович!
|
||||
|
||||
Предлагаем выполнить геомеханическое сопровождение горных работ после получения согласованного комплекта исходных данных.
|
||||
|
||||
== Состав и результат работ
|
||||
|
||||
В состав входят анализ материалов, подготовка расчётных схем, проверочные расчёты и разработка рекомендаций. Заказчику передаются технический отчёт в PDF, таблица расчётных случаев и графические материалы.
|
||||
|
||||
Для начала требуются актуальная проектная геометрия, характеристики пород и сведения об уровне подземных вод. Один цикл уточнения по консолидированным замечаниям включён в стоимость.
|
||||
@@ -0,0 +1,11 @@
|
||||
== Состав результата
|
||||
|
||||
#table(
|
||||
columns: (1cm, 1fr, 3.5cm),
|
||||
inset: 5pt,
|
||||
align: (center, left, center),
|
||||
[№], [Материал], [Формат],
|
||||
[1], [Технический отчёт], [PDF],
|
||||
[2], [Расчётные таблицы], [XLSX],
|
||||
[3], [Графические материалы], [PNG / SVG],
|
||||
)
|
||||
@@ -0,0 +1,72 @@
|
||||
// ПРИМЕР ТЕХНИКО-КОММЕРЧЕСКОГО ПРЕДЛОЖЕНИЯ.
|
||||
#import "/.template/lib/index.typ": document, profiles, recipient, attachment, attachment-set, load-company, empty-private-settings, private-company-media
|
||||
|
||||
#let company-id = "scientia" // "scientia" | "technology" | "too"
|
||||
#let document-mode = "final" // "final" | "draft" | "clean-copy"
|
||||
#let use-private-assets = false // true — читать .private/settings.typ
|
||||
#let private-settings = if use-private-assets {
|
||||
import "/.private/settings.typ": settings
|
||||
settings
|
||||
} else {
|
||||
empty-private-settings
|
||||
}
|
||||
#let company-media = private-company-media(private-settings, company-id)
|
||||
|
||||
#let company = load-company(
|
||||
company-id,
|
||||
logo: auto,
|
||||
signature: company-media.signature,
|
||||
stamp: company-media.stamp,
|
||||
)
|
||||
|
||||
#let addressee = recipient(
|
||||
company: "АО «Заказчик»",
|
||||
title: "Руководителю проекта",
|
||||
name: "Иванову Ивану Ивановичу",
|
||||
address: none,
|
||||
)
|
||||
|
||||
#let attachments = attachment-set(
|
||||
items: (
|
||||
attachment(
|
||||
"scope",
|
||||
"Техническое задание",
|
||||
[#include "chapters/99-appendices.typ"],
|
||||
subtitle: "Состав и результаты работ",
|
||||
number: auto,
|
||||
outlined: true,
|
||||
),
|
||||
),
|
||||
numbering: "arabic",
|
||||
start: 1,
|
||||
)
|
||||
|
||||
#show: document.with(
|
||||
company: company,
|
||||
profile: profiles.commercial_offer(
|
||||
recipient: addressee,
|
||||
subject: "Геомеханическое сопровождение горных работ",
|
||||
amount: "1 250 000",
|
||||
currency: "руб.",
|
||||
tax_note: "включая НДС 20 %",
|
||||
delivery_term: "45 рабочих дней с даты получения исходных данных",
|
||||
validity: "30 календарных дней",
|
||||
payment_terms: "30 % аванс, 70 % после передачи результата",
|
||||
date: "01.01.2026",
|
||||
reference: "ТКП-001/2026",
|
||||
title: "Технико-коммерческое предложение",
|
||||
signer: none,
|
||||
note: "Контактное лицо: Петров П.П.",
|
||||
show_stamp: true,
|
||||
attachments: attachments,
|
||||
render_attachments: true,
|
||||
),
|
||||
options: (
|
||||
mode: document-mode,
|
||||
watermark: if document-mode == "draft" { "ЧЕРНОВИК" } else { none },
|
||||
media-policy: if document-mode == "final" { "placeholder" } else { "reserve-space" },
|
||||
diagnostics: true,
|
||||
),
|
||||
)
|
||||
|
||||
#include "chapters/10-offer.typ"
|
||||
@@ -0,0 +1,5 @@
|
||||
1.1. Исполнитель обязуется выполнить геомеханические расчёты и подготовить технический отчёт, а Заказчик обязуется предоставить исходные данные, принять и оплатить результат.
|
||||
|
||||
1.2. Состав работ, исходные данные и требования к результату устанавливаются техническим заданием — приложением № 1.
|
||||
|
||||
1.3. Результат передаётся в электронном виде в формате PDF, если стороны письменно не согласовали иной формат.
|
||||
@@ -0,0 +1,5 @@
|
||||
2.1. Цена работ составляет 1 250 000 (Один миллион двести пятьдесят тысяч) рублей, включая НДС 20 %.
|
||||
|
||||
2.2. Заказчик перечисляет аванс в размере 30 % в течение пяти рабочих дней с даты подписания договора. Оставшиеся 70 % оплачиваются после передачи результата и подписания акта.
|
||||
|
||||
2.3. Дополнительные работы выполняются только после письменного согласования состава, стоимости и сроков.
|
||||
@@ -0,0 +1,5 @@
|
||||
3.1. Стороны несут ответственность за неисполнение обязательств в соответствии с договором и применимым законодательством.
|
||||
|
||||
3.2. Исполнитель не отвечает за выводы, основанные на неполных или недостоверных исходных данных, если недостатки данных невозможно было выявить при обычной проверке.
|
||||
|
||||
3.3. Этот раздел является демонстрационной структурой и обязательно требует юридической проверки перед использованием.
|
||||
@@ -0,0 +1,4 @@
|
||||
1. Цель работ — оценка устойчивости проектных конструкций.
|
||||
2. Исходные данные предоставляет Заказчик по согласованному перечню.
|
||||
3. Результат — технический отчёт с расчётами и рекомендациями.
|
||||
4. Срок выполнения — 45 рабочих дней после получения полного комплекта данных.
|
||||
@@ -0,0 +1,125 @@
|
||||
// ПРИМЕР ДОГОВОРА. Текст является заготовкой и требует юридической проверки.
|
||||
#import "/.template/lib/index.typ": document, profiles, party, signer, attachment, attachment-set, load-company, empty-private-settings, private-company-media
|
||||
|
||||
#let company-id = "scientia" // "scientia" | "technology" | "too"
|
||||
#let document-mode = "final" // "final" | "draft" | "clean-copy"
|
||||
#let use-private-assets = false // true — читать .private/settings.typ
|
||||
#let private-settings = if use-private-assets {
|
||||
import "/.private/settings.typ": settings
|
||||
settings
|
||||
} else {
|
||||
empty-private-settings
|
||||
}
|
||||
#let company-media = private-company-media(private-settings, company-id)
|
||||
|
||||
#let company = load-company(
|
||||
company-id,
|
||||
logo: auto,
|
||||
signature: company-media.signature,
|
||||
stamp: company-media.stamp,
|
||||
)
|
||||
|
||||
#let contractor = party(
|
||||
"contractor",
|
||||
"Исполнитель",
|
||||
company.legal.name,
|
||||
legal: company.legal,
|
||||
contacts: company.contacts,
|
||||
banking: company.banking,
|
||||
representative: signer(
|
||||
company.director.name,
|
||||
company.director.title,
|
||||
basis: "Устава",
|
||||
signature: company.resources.signature,
|
||||
stamp: company.resources.stamp,
|
||||
),
|
||||
)
|
||||
|
||||
#let customer = party(
|
||||
"customer",
|
||||
"Заказчик",
|
||||
"АО «Заказчик»",
|
||||
legal: (
|
||||
inn: "0000000000",
|
||||
kpp: "000000000",
|
||||
ogrn: "0000000000000",
|
||||
address: "620000, г. Екатеринбург, ул. Примерная, 1",
|
||||
),
|
||||
contacts: (
|
||||
email: "customer@example.invalid",
|
||||
phone: "+7 (000) 000-00-00",
|
||||
),
|
||||
banking: (
|
||||
bank: "Пример Банк",
|
||||
account: "00000000000000000000",
|
||||
correspondent-account: "00000000000000000000",
|
||||
bik: "000000000",
|
||||
),
|
||||
representative: signer(
|
||||
"Иванов И.И.",
|
||||
"Генеральный директор",
|
||||
basis: "Устава",
|
||||
signature: none,
|
||||
stamp: none,
|
||||
),
|
||||
)
|
||||
|
||||
#let sections = (
|
||||
profiles.contract_section(
|
||||
"subject",
|
||||
"Предмет договора",
|
||||
[#include "chapters/10-subject.typ"],
|
||||
number: auto,
|
||||
level: 1,
|
||||
),
|
||||
profiles.contract_section(
|
||||
"price",
|
||||
"Цена и порядок расчётов",
|
||||
[#include "chapters/20-price.typ"],
|
||||
number: auto,
|
||||
level: 1,
|
||||
),
|
||||
profiles.contract_section(
|
||||
"responsibility",
|
||||
"Ответственность сторон",
|
||||
[#include "chapters/30-responsibility.typ"],
|
||||
number: auto,
|
||||
level: 1,
|
||||
),
|
||||
)
|
||||
|
||||
#let attachments = attachment-set(
|
||||
items: (
|
||||
attachment(
|
||||
"specification",
|
||||
"Техническое задание",
|
||||
[#include "chapters/99-appendices.typ"],
|
||||
subtitle: none,
|
||||
number: auto,
|
||||
outlined: true,
|
||||
),
|
||||
),
|
||||
numbering: "arabic",
|
||||
start: 1,
|
||||
)
|
||||
|
||||
#document(
|
||||
[],
|
||||
company: company,
|
||||
profile: profiles.contract(
|
||||
number: "Д-001/2026",
|
||||
date: "01 января 2026 г.",
|
||||
place: "г. Екатеринбург",
|
||||
title: "Договор оказания услуг",
|
||||
parties: (contractor, customer),
|
||||
preamble: auto,
|
||||
sections: sections,
|
||||
attachments: attachments,
|
||||
),
|
||||
options: (
|
||||
mode: document-mode,
|
||||
watermark: if document-mode == "draft" { "ЧЕРНОВИК" } else { none },
|
||||
media-policy: if document-mode == "final" { "placeholder" } else { "reserve-space" },
|
||||
diagnostics: true,
|
||||
),
|
||||
)
|
||||
@@ -0,0 +1,9 @@
|
||||
Уважаемый Иван Иванович!
|
||||
|
||||
Направляем на рассмотрение материалы первого этапа работ по договору № Д-001/2026. В комплект включены пояснительная записка, таблица исходных данных и перечень вопросов, требующих согласования.
|
||||
|
||||
Просим подтвердить получение материалов и направить замечания до 15 января 2026 года. При отсутствии замечаний предлагается использовать переданные данные для следующего расчётного этапа.
|
||||
|
||||
Контактное лицо по техническим вопросам — Петров Пётр Петрович, `author@example.invalid`.
|
||||
|
||||
С уважением,
|
||||
@@ -0,0 +1,5 @@
|
||||
Перечень передаваемых материалов:
|
||||
|
||||
1. Пояснительная записка — 25 листов.
|
||||
2. Таблица исходных данных — 1 файл в формате XLSX.
|
||||
3. Графические приложения — 3 листа.
|
||||
@@ -0,0 +1,65 @@
|
||||
// ПРИМЕР ДЕЛОВОГО ПИСЬМА. Каталог можно целиком скопировать в корень проекта.
|
||||
#import "/.template/lib/index.typ": document, profiles, recipient, attachment, attachment-set, load-company, empty-private-settings, private-company-media
|
||||
|
||||
#let company-id = "scientia" // "scientia" | "technology" | "too"
|
||||
#let document-mode = "final" // "final" | "draft" | "clean-copy"
|
||||
#let use-private-assets = false // true — читать .private/settings.typ
|
||||
#let private-settings = if use-private-assets {
|
||||
import "/.private/settings.typ": settings
|
||||
settings
|
||||
} else {
|
||||
empty-private-settings
|
||||
}
|
||||
#let company-media = private-company-media(private-settings, company-id)
|
||||
|
||||
#let company = load-company(
|
||||
company-id,
|
||||
logo: auto,
|
||||
signature: company-media.signature,
|
||||
stamp: company-media.stamp,
|
||||
)
|
||||
|
||||
#let addressee = recipient(
|
||||
company: "АО «Горнодобывающая компания»",
|
||||
title: "Техническому директору",
|
||||
name: "Иванову Ивану Ивановичу",
|
||||
address: "620000, г. Екатеринбург, ул. Примерная, 1",
|
||||
)
|
||||
|
||||
#let attachments = attachment-set(
|
||||
items: (
|
||||
attachment(
|
||||
"materials",
|
||||
"Перечень передаваемых материалов",
|
||||
[#include "chapters/99-appendices.typ"],
|
||||
subtitle: none,
|
||||
number: auto,
|
||||
outlined: false,
|
||||
),
|
||||
),
|
||||
numbering: "arabic",
|
||||
start: 1,
|
||||
)
|
||||
|
||||
#show: document.with(
|
||||
company: company,
|
||||
profile: profiles.letter(
|
||||
recipient: addressee,
|
||||
date: "01.01.2026",
|
||||
reference: "ИСХ-001/2026",
|
||||
title: "О направлении материалов этапа 1",
|
||||
signer: none,
|
||||
note: "Исп.: Петров П.П., +7 (000) 000-00-00",
|
||||
show_stamp: true,
|
||||
attachments: attachments,
|
||||
render_attachments: false,
|
||||
),
|
||||
options: (
|
||||
mode: document-mode,
|
||||
watermark: if document-mode == "draft" { "ЧЕРНОВИК" } else { none },
|
||||
media-policy: if document-mode == "final" { "placeholder" } else { "reserve-space" },
|
||||
diagnostics: true,
|
||||
),
|
||||
)
|
||||
|
||||
#include "chapters/10-letter.typ"
|
||||
@@ -0,0 +1,15 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="280" viewBox="0 0 900 280">
|
||||
<rect width="900" height="280" rx="24" fill="#fffaf0"/>
|
||||
<g font-family="Arial, sans-serif" font-size="25" text-anchor="middle" fill="#222">
|
||||
<rect x="45" y="75" width="220" height="125" rx="16" fill="#fbb20d"/>
|
||||
<text x="155" y="132">Исходные</text><text x="155" y="165">данные</text>
|
||||
<rect x="340" y="75" width="220" height="125" rx="16" fill="#e39f49"/>
|
||||
<text x="450" y="132">Расчётная</text><text x="450" y="165">модель</text>
|
||||
<rect x="635" y="75" width="220" height="125" rx="16" fill="#fbb20d"/>
|
||||
<text x="745" y="132">Выводы и</text><text x="745" y="165">рекомендации</text>
|
||||
</g>
|
||||
<g stroke="#444" stroke-width="6" fill="none">
|
||||
<path d="M265 137h75m220 0h75"/>
|
||||
<path d="m323 121 17 16-17 16m295-32 17 16-17 16"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 905 B |
@@ -0,0 +1,16 @@
|
||||
@book{fnip,
|
||||
title={Федеральные нормы и правила в области промышленной безопасности},
|
||||
author={{Ростехнадзор}},
|
||||
year={2020},
|
||||
publisher={Приказ №439 от 13 ноября 2020 г.}
|
||||
}
|
||||
|
||||
@book{rukovodstvo,
|
||||
title={Руководство по проектированию бортов карьера. Guidelines for open pit slope design},
|
||||
author={Рид, Д. and Стейси, П.},
|
||||
year={2015},
|
||||
publisher={Правовед},
|
||||
langid = {russian},
|
||||
address={Екатеринбург},
|
||||
pages={528}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
#import "/.template/lib/index.typ": vref, vrefs
|
||||
|
||||
#heading(numbering: none)[ВВЕДЕНИЕ]
|
||||
|
||||
Настоящий отчёт подготовлен для демонстрации структуры рабочего проекта. Замените этот текст описанием основания, цели, исходных данных и границ своей работы.
|
||||
|
||||
В основном разделе показаны рисунки, таблицы, формулы, ссылки и цитирование источников. Эти блоки можно копировать и адаптировать. Например, требования к наблюдениям можно сопроводить ссылкой на нормативный источник @fnip.
|
||||
|
||||
Цель работы — оценить исходные условия, выполнить расчётную проверку и сформулировать рекомендации для следующего этапа.
|
||||
|
||||
Исходные материалы приведены в #vref(<appendix-source-data>), а дополнительные расчёты — в #vref(<appendix-additional-calculations>). Оба приложения можно указать одной групповой ссылкой: в #vrefs((<appendix-source-data>, <appendix-additional-calculations>)).
|
||||
@@ -0,0 +1,78 @@
|
||||
// Публичные функции шаблона можно импортировать в любой главе.
|
||||
#import "/.template/lib/index.typ": corp-table, formula, vref, vrefs, eqref
|
||||
|
||||
= ИСХОДНЫЕ ДАННЫЕ <source-data>
|
||||
|
||||
В работе использованы инженерно-геологические материалы, параметры массива и проектная геометрия. Структура исходных данных показана на #vref(<workflow>).
|
||||
|
||||
// РИСУНОК: храните файлы проекта в assets/images/.
|
||||
// width принимает, например, 60%, 12cm или auto.
|
||||
#figure(
|
||||
image("../assets/images/example-diagram.svg", width: 82%),
|
||||
caption: [Последовательность подготовки расчётной модели],
|
||||
) <workflow>
|
||||
|
||||
// НЕСКОЛЬКО ИЗОБРАЖЕНИЙ: grid позволяет собрать панели а), б), в).
|
||||
#figure(
|
||||
grid(
|
||||
columns: (1fr, 1fr),
|
||||
column-gutter: 1em,
|
||||
row-gutter: 0.4em,
|
||||
align(center)[
|
||||
#rect(width: 5.4cm, height: 2.2cm, fill: rgb("fff3cf"), stroke: rgb("e39f49"))
|
||||
#linebreak()
|
||||
а) исходная схема
|
||||
],
|
||||
align(center)[
|
||||
#circle(radius: 1.1cm, fill: rgb("fbb20d"), stroke: rgb("444444"))
|
||||
#linebreak()
|
||||
б) расчётная область
|
||||
],
|
||||
),
|
||||
caption: [Варианты представления графических материалов],
|
||||
) <figure-grid>
|
||||
|
||||
На #vrefs((<workflow>, <figure-grid>)) приведены два допустимых способа оформления графики.
|
||||
|
||||
= МЕТОДИКА РАСЧЁТА
|
||||
|
||||
Расчётный коэффициент запаса определяется отношением удерживающих сил к сдвигающим:
|
||||
|
||||
// ФОРМУЛА: helper formula оформляет отдельную нумерованную формулу.
|
||||
#formula(
|
||||
$K = (sum F_("уд"))/(sum F_("сдв"))$,
|
||||
) <safety-factor>
|
||||
|
||||
В тексте можно использовать короткую формулу $K >= 1.3$ без отдельного номера. На #eqref(<safety-factor>) ссылаются как на обычный объект документа.
|
||||
|
||||
= РЕЗУЛЬТАТЫ
|
||||
|
||||
// ПРОСТАЯ ТАБЛИЦА: columns задаёт число или относительную ширину столбцов.
|
||||
#figure(
|
||||
corp-table(
|
||||
columns: (1.3fr, 1fr, 1fr),
|
||||
header: ([Расчётный случай], [Коэффициент $K$], [Оценка]),
|
||||
body: (
|
||||
[Основное сочетание], [1,42], [Устойчиво],
|
||||
[Водо-насыщение], [1,31], [Устойчиво],
|
||||
[Сейсмическое воздействие], [1,18], [Требуются меры],
|
||||
),
|
||||
align: (left, center, left),
|
||||
table-align: "center",
|
||||
text-size: 9.5pt,
|
||||
body-inset: (x: 5pt, y: 4pt),
|
||||
repeat_header: true,
|
||||
continuation: true,
|
||||
),
|
||||
caption: [Результаты проверочных расчётов],
|
||||
) <calculation-results>
|
||||
|
||||
Как видно из #vref(<calculation-results>, "р"), третий случай требует дополнительных мероприятий. Более сложные таблицы, объединение ячеек и импорт CSV показаны в `docs/examples/formatting/main.typ`.
|
||||
|
||||
== Основные рекомендации
|
||||
|
||||
- уточнить положение уровня подземных вод;
|
||||
- проверить расчётные параметры по результатам наблюдений;
|
||||
- повторить оценку после корректировки проектной геометрии.
|
||||
|
||||
Дополнительные исходные данные вынесены в приложение, а библиографическая запись хранится в `assets/references.bib`.
|
||||
@@ -0,0 +1,11 @@
|
||||
#heading(numbering: none)[ЗАКЛЮЧЕНИЕ]
|
||||
|
||||
В демонстрационном отчёте показаны настройка титульных данных, подключение глав, автоматическая нумерация рисунков, таблиц и формул, перекрёстные ссылки, библиография и приложение.
|
||||
|
||||
Перед выпуском собственного документа:
|
||||
|
||||
- замените значения в `main.typ`;
|
||||
- удалите учебные блоки, которые не относятся к работе;
|
||||
- подключите фактические главы через `#include`;
|
||||
- проверьте ссылки, список источников и итоговый PDF;
|
||||
- смените `document-mode` с `draft` на `final`.
|
||||
@@ -0,0 +1,14 @@
|
||||
= Исходные данные <appendix-source-data>
|
||||
|
||||
В приложении можно разместить исходные таблицы, схемы и другие материалы, которые перегружают основной текст.
|
||||
|
||||
#figure(
|
||||
table(
|
||||
columns: (1fr, 1fr),
|
||||
inset: 5pt,
|
||||
[Параметр], [Значение],
|
||||
[Высота уступа], [15 м],
|
||||
[Угол откоса], [70°],
|
||||
),
|
||||
caption: [Пример исходных параметров],
|
||||
) <appendix-source-table>
|
||||
@@ -0,0 +1,8 @@
|
||||
= Дополнительные расчёты <appendix-additional-calculations>
|
||||
|
||||
Каждое приложение хранится в отдельном файле. Его первый заголовок задаёт название, номер формируется автоматически, а метка позволяет ссылаться на приложение из любой главы.
|
||||
|
||||
#figure(
|
||||
rect(width: 6cm, height: 2cm, fill: luma(235), stroke: 0.6pt),
|
||||
caption: [Дополнительная расчётная схема],
|
||||
) <appendix-calculation-scheme>
|
||||
@@ -0,0 +1,109 @@
|
||||
// ============================================================================
|
||||
// SCIENTIA — НАСТРОЙКА ОТЧЁТА
|
||||
// Меняйте значения в этом файле и подключайте нужные главы через #include.
|
||||
// Готовые варианты для письма, ТКП и договора: docs/examples/documents/.
|
||||
// ============================================================================
|
||||
#import "/.template/lib/index.typ": document, profiles, bibliography-section, load-company, empty-private-settings, private-company-media, report-executor
|
||||
|
||||
// --- 1. ОСНОВНЫЕ ПЕРЕКЛЮЧАТЕЛИ ---------------------------------------------
|
||||
#let company-id = "scientia" // Варианты: "scientia" | "technology" | "too"
|
||||
#let document-mode = "final" // Варианты: "final" | "draft" | "clean-copy"
|
||||
|
||||
// Служебные страницы отчёта включаются независимо друг от друга.
|
||||
#let show-title-page = true // Титульный лист
|
||||
#let show-executors = true // Список исполнителей
|
||||
#let show-outline = true // Содержание
|
||||
|
||||
// В чистом примере .private не требуется. Если вы скопировали свою папку
|
||||
// .private, поменяйте только false на true.
|
||||
#let use-private-assets = false
|
||||
#let private-settings = if use-private-assets {
|
||||
import "/.private/settings.typ": settings
|
||||
settings
|
||||
} else {
|
||||
empty-private-settings
|
||||
}
|
||||
#let company-media = private-company-media(private-settings, company-id)
|
||||
|
||||
#let company = load-company(
|
||||
company-id,
|
||||
logo: auto,
|
||||
signature: company-media.signature,
|
||||
stamp: company-media.stamp,
|
||||
)
|
||||
|
||||
// --- 2. ИСПОЛНИТЕЛИ ---------------------------------------------------------
|
||||
// Состав и роли меняются здесь; имена и PNG берутся из справочника шаблона.
|
||||
#let executors = (
|
||||
report-executor("musikhin", role: "Ответственный исполнитель", private-settings: private-settings),
|
||||
report-executor("guzeev", role: "Главный геомеханик", private-settings: private-settings),
|
||||
report-executor("fedorov", private-settings: private-settings),
|
||||
)
|
||||
|
||||
// --- 3. ИСТОЧНИКИ И ПРИЛОЖЕНИЯ ---------------------------------------------
|
||||
#let bibliographies = (
|
||||
bibliography-section(
|
||||
"sources",
|
||||
path("assets/references.bib"),
|
||||
title: [СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ],
|
||||
style: "gost-r-705-2008-numeric",
|
||||
target: auto,
|
||||
group: "report-sources",
|
||||
page_break: true,
|
||||
),
|
||||
)
|
||||
|
||||
#let appendices = (
|
||||
path("chapters/appendices/01-source-data.typ"),
|
||||
path("chapters/appendices/02-additional-calculations.typ"),
|
||||
)
|
||||
|
||||
// --- 4. ПАРАМЕТРЫ ОТЧЁТА ---------------------------------------------------
|
||||
// Все значения, которые обычно проверяют в начале проекта, показаны явно.
|
||||
#show: document.with(
|
||||
company: company,
|
||||
profile: profiles.report(
|
||||
title: "Геомеханическое обоснование устойчивости бортов карьера",
|
||||
theme: "Этап 1. Анализ исходных данных и расчёт устойчивости",
|
||||
udk: "622.271.3",
|
||||
director_date: "«01» января 2026 г.",
|
||||
is_research: false,
|
||||
is_intermediate: true,
|
||||
stage_number: 1,
|
||||
volume_number: 1,
|
||||
contract_number: "Д-001/2026",
|
||||
contract_date: "«01» января 2026 г.",
|
||||
city: "Екатеринбург",
|
||||
year: 2026,
|
||||
executors: executors,
|
||||
appendices: appendices,
|
||||
appendix_numbering: "cyrillic",
|
||||
appendix_start: 1,
|
||||
bibliographies: bibliographies,
|
||||
show_title_page: show-title-page,
|
||||
show_executors: show-executors,
|
||||
show_outline: show-outline,
|
||||
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: document-mode,
|
||||
watermark: if document-mode == "draft" { "ЧЕРНОВИК" } else { none },
|
||||
media-policy: if document-mode == "final" { "placeholder" } else { "reserve-space" },
|
||||
diagnostics: true,
|
||||
),
|
||||
)
|
||||
|
||||
// --- 5. СОСТАВ ДОКУМЕНТА ---------------------------------------------------
|
||||
// Чтобы заменить, добавить или переставить главу, измените только этот список.
|
||||
#include "chapters/00-introduction.typ"
|
||||
#pagebreak()
|
||||
#include "chapters/10-main.typ"
|
||||
#pagebreak()
|
||||
#include "chapters/90-conclusion.typ"
|
||||
@@ -0,0 +1,13 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="720" height="240" viewBox="0 0 720 240">
|
||||
<rect width="720" height="240" rx="24" fill="#fff8e8"/>
|
||||
<rect x="36" y="66" width="180" height="108" rx="14" fill="#fbb20d"/>
|
||||
<rect x="270" y="66" width="180" height="108" rx="14" fill="#e39f49"/>
|
||||
<rect x="504" y="66" width="180" height="108" rx="14" fill="#fbb20d"/>
|
||||
<path d="M216 120h54m180 0h54" stroke="#333" stroke-width="5"/>
|
||||
<path d="m258 108 12 12-12 12m234-24 12 12-12 12" fill="none" stroke="#333" stroke-width="5"/>
|
||||
<g fill="#222" font-family="Arial, sans-serif" font-size="24" text-anchor="middle">
|
||||
<text x="126" y="128">Domain</text>
|
||||
<text x="360" y="128">Application</text>
|
||||
<text x="594" y="128">Presentation</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 758 B |
@@ -0,0 +1,15 @@
|
||||
Порода Пуассон
|
||||
SST 0.10
|
||||
SILT 0.10
|
||||
SLT 0.10
|
||||
SLT 0.10
|
||||
SLT 0.10
|
||||
SLT 0.10
|
||||
SLT 0.12
|
||||
SLT 0.10
|
||||
SLT 0.10
|
||||
SLT 0.10
|
||||
SLT 0.10
|
||||
SLT 0.10
|
||||
SLT 0.10
|
||||
SLT 0.10
|
||||
|
@@ -0,0 +1,458 @@
|
||||
// ============================================================================
|
||||
// ПУБЛИЧНЫЙ КАТАЛОГ ПРИЁМОВ ОФОРМЛЕНИЯ SCIENTIA
|
||||
// Этот файл можно компилировать отдельно и копировать из него готовые блоки.
|
||||
// Команда: typst compile --root . docs/examples/formatting/main.typ example.pdf
|
||||
// ============================================================================
|
||||
#import "/.template/lib/index.typ": document, profiles, load-company, corp-table, formula, info-block, vref, vrefs, eqref, bullet-list, 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: (),
|
||||
appendices: (),
|
||||
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>` нужны для автоматической нумерации и ссылок. Имена меток должны быть уникальными в пределах документа.
|
||||
|
||||
= ИНФОРМАЦИОННЫЕ ПЛАШКИ
|
||||
|
||||
== Замечание
|
||||
|
||||
#info-block(title: [ЗАМЕЧАНИЕ])[
|
||||
Эта цветная плашка подходит для важных пояснений, ограничений расчёта и вопросов, которые нужно согласовать.
|
||||
]
|
||||
|
||||
= РИСУНКИ
|
||||
|
||||
== Обычное изображение
|
||||
|
||||
Путь задаётся относительно файла, в котором написан вызов `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>).
|
||||
|
||||
== Списки в ячейках
|
||||
|
||||
Параметр `list-layout` меняет отступы всех маркированных и нумерованных списков только в этой таблице. Для узких ячеек обычно подходит `"compact"`; `"flush"` прижимает маркер или номер к левому полю.
|
||||
|
||||
#figure(
|
||||
corp-table(
|
||||
columns: (1.2fr, 2fr),
|
||||
list-layout: "compact",
|
||||
header: ([Вид списка], [Содержимое]),
|
||||
body: (
|
||||
[Маркированный], [
|
||||
- Исходные данные;
|
||||
- результаты расчёта.
|
||||
],
|
||||
[Нумерованный], [
|
||||
#numbered-list[
|
||||
+ Подготовить модель.
|
||||
+ Проверить результат.
|
||||
]
|
||||
],
|
||||
[Локальное исключение], [
|
||||
#bullet-list(layout: "normal")[
|
||||
- Обычный отступ можно вернуть для одной ячейки.
|
||||
]
|
||||
],
|
||||
[Без отступа], [
|
||||
#bullet-list(layout: "flush")[
|
||||
- Одноуровневый список можно прижать к левому полю.
|
||||
]
|
||||
],
|
||||
),
|
||||
),
|
||||
caption: [Компактные списки внутри таблицы],
|
||||
) <table-lists>
|
||||
|
||||
Если готовый режим не подходит, используйте `list-indent` и `list-body-indent` для точной настройки всей таблицы либо `level-indent` и `body-indent` внутри `bullet-list` или `numbered-list` для одной ячейки.
|
||||
|
||||
== Обычная встроенная таблица
|
||||
|
||||
Красная строка автоматически отключается и в ячейках обычной `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()
|
||||
= СПИСКИ И ТЕКСТ
|
||||
|
||||
Маркированный список:
|
||||
|
||||
- первый пункт;
|
||||
- второй пункт;
|
||||
- вложенное пояснение;
|
||||
- заключительный пункт.
|
||||
|
||||
Локально изменить его отступы можно через `bullet-list`:
|
||||
|
||||
#bullet-list(layout: "compact")[
|
||||
- компактный первый пункт;
|
||||
- компактный второй пункт.
|
||||
]
|
||||
|
||||
Нумерованный список:
|
||||
|
||||
#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`.
|
||||
@@ -0,0 +1,27 @@
|
||||
// Безопасный пример файла .private/settings.typ.
|
||||
// Он не содержит изображений и сам по себе ничего не включает.
|
||||
|
||||
#let settings = (
|
||||
companies: (
|
||||
// Поменяйте нужные значения на true только когда PNG уже существует.
|
||||
scientia: (signature: false, stamp: false),
|
||||
technology: (signature: false, stamp: false),
|
||||
too: (signature: false, stamp: false),
|
||||
),
|
||||
signatures: (
|
||||
// Значения offset перенесены из проверенных рабочих отчётов.
|
||||
// enabled: false сохраняет смещение, но не пытается открыть PNG.
|
||||
musikhin: (enabled: false, offset: 1.25cm),
|
||||
guzeev: (enabled: false, offset: 1.4cm),
|
||||
fedorov: (enabled: false, offset: 0.7cm),
|
||||
ilyasov: (enabled: false, offset: 0.6cm),
|
||||
khimichev: (enabled: false, offset: 0cm),
|
||||
brusnicin: (enabled: false, offset: 0.2cm),
|
||||
ozornin: (enabled: false, offset: 0.3cm),
|
||||
buhartdinov: (enabled: false, offset: 0.85cm),
|
||||
tkachenko: (enabled: false, offset: 0.7cm),
|
||||
moshin: (enabled: false, offset: 0.7cm),
|
||||
mitrokhin: (enabled: false, offset: 0.7cm),
|
||||
luzina: (enabled: false, offset: 0.7cm),
|
||||
),
|
||||
)
|
||||
Reference in new issue
Block a user