From fdcaa57b1467ca84849a29ce2e4865079f620690 Mon Sep 17 00:00:00 2001 From: aragami3070 Date: Fri, 13 Dec 2024 09:45:36 +0400 Subject: Fix: indentation --- conf.typ | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) (limited to 'conf.typ') 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 + } + } +} -- cgit v1.2.3