summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraragami3070 <smirnov17612@gmail.com>2024-12-13 09:45:36 +0400
committeraragami3070 <163641422+aragami3070@users.noreply.github.com>2024-12-27 13:46:25 +0400
commitfdcaa57b1467ca84849a29ce2e4865079f620690 (patch)
treecc96b1fb1179dfc6f8842bd0d72806fbd9d560e8
parent998c715c3f420149bc1af6e5cbef1540f001de88 (diff)
Fix: indentation
-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
+ }
+ }
+}