diff options
| author | aragami3070 <smirnov17612@gmail.com> | 2024-12-13 09:45:36 +0400 |
|---|---|---|
| committer | aragami3070 <163641422+aragami3070@users.noreply.github.com> | 2024-12-27 13:46:25 +0400 |
| commit | fdcaa57b1467ca84849a29ce2e4865079f620690 (patch) | |
| tree | cc96b1fb1179dfc6f8842bd0d72806fbd9d560e8 | |
| parent | 998c715c3f420149bc1af6e5cbef1540f001de88 (diff) | |
Fix: indentation
| -rw-r--r-- | conf.typ | 52 |
1 files changed, 51 insertions, 1 deletions
@@ -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 + } + } +} |