summaryrefslogtreecommitdiff
path: root/conf.typ
diff options
context:
space:
mode:
Diffstat (limited to 'conf.typ')
-rw-r--r--conf.typ52
1 files changed, 51 insertions, 1 deletions
diff --git a/conf.typ b/conf.typ
index 3ee5917..192d2e0 100644
--- a/conf.typ
+++ b/conf.typ
@@ -186,7 +186,6 @@
set page(numbering: "1")
// Отступ начала абазаца 1.25 см и выравнивание по ширине
set par(
- first-line-indent: 1.25cm,
justify: true
)
if settings.contents_page.enabled {
@@ -212,3 +211,54 @@
#abstract
]*/
}
+
+
+#let indent = 1cm
+#let styled = [#set text(red)].func()
+#let space = [ ].func()
+#let sequence = [].func()
+
+#let turn-on-first-line-indentation(
+ doc,
+ last-is-heading: false, // space and parbreak are ignored
+ indent-already-added: false,
+) = {
+ for (i, elem) in doc.children.enumerate() {
+ let element = elem.func()
+ if element == text {
+ let previous-elem = doc.children.at(i - 1)
+ if i == 0 or last-is-heading or previous-elem.func() == parbreak {
+ if not indent-already-added {
+ indent-already-added = true
+ h(indent)
+ }
+ }
+ elem
+ } else if element == heading {
+ indent-already-added = false
+ last-is-heading = true
+ elem
+ } else if element == space {
+ elem
+ } else if element == parbreak {
+ indent-already-added = false
+ elem
+ } else if element == sequence {
+ turn-on-first-line-indentation(
+ elem,
+ last-is-heading: last-is-heading,
+ indent-already-added: indent-already-added,
+ )
+ } else if element == styled {
+ styled(turn-on-first-line-indentation(
+ elem.child,
+ last-is-heading: last-is-heading,
+ indent-already-added: indent-already-added,
+ ), elem.styles)
+ } else {
+ indent-already-added = false
+ last-is-heading = false
+ elem
+ }
+ }
+}