forked from pencelheimer/typst_nure_template
163 lines
4.3 KiB
Typst
163 lines
4.3 KiB
Typst
#import "./utils.typ": bold
|
||
|
||
#let spacing = 0.95em // spacing between lines
|
||
|
||
/// symbols used for numbering according to DSTU 3008:2015
|
||
#let ukr-enum = "абвгдежиклмнпрстуфхцшщюя".split("") // 0 = "", 1 = "а"
|
||
|
||
/// DSTU 3008:2015 Style
|
||
/// -> content
|
||
/// - it (content): Content to apply the style to.
|
||
/// - skip (int): Do not show page number for this number of pages.
|
||
/// - offset (int): Adjust all page numbers by this amount.
|
||
|
||
#let dstu(
|
||
it,
|
||
skip: 0,
|
||
offset: 0,
|
||
) = {
|
||
// General Styling {{{1
|
||
set page(
|
||
paper: "a4",
|
||
number-align: top + right,
|
||
margin: (top: 20mm, right: 10mm, bottom: 20mm, left: 25mm),
|
||
numbering: (i, ..) => if i > skip { numbering("1", i + offset) },
|
||
)
|
||
|
||
set text(lang: "uk", size: 14pt, hyphenate: false, font: ("Times New Roman", "Liberation Serif"))
|
||
|
||
set par(justify: true, spacing: spacing, leading: spacing, first-line-indent: (
|
||
amount: 1.25cm,
|
||
all: true,
|
||
))
|
||
|
||
set block(spacing: spacing)
|
||
set underline(evade: false)
|
||
|
||
// Enums & Lists {{{1
|
||
// First level
|
||
set enum(indent: 1.25cm, body-indent: 0.5cm, numbering: i => { ukr-enum.at(i) + ")" })
|
||
|
||
// Second level and further nesting
|
||
show enum: it => {
|
||
set enum(indent: 0em, numbering: "1)")
|
||
it
|
||
}
|
||
|
||
// Lists are not intended for multiple levels, use `enum`
|
||
set list(indent: 1.35cm, body-indent: 0.5cm, marker: [--])
|
||
|
||
// Figures {{{1
|
||
show figure: it => {
|
||
v(spacing * 2, weak: true)
|
||
it
|
||
v(spacing * 2, weak: true)
|
||
}
|
||
|
||
set figure.caption(separator: [ -- ])
|
||
show figure.where(kind: table): set figure.caption(position: top)
|
||
show figure.caption.where(kind: table): set align(left)
|
||
show figure.where(kind: raw): set figure.caption(position: top)
|
||
show figure.where(kind: raw): set align(left)
|
||
|
||
// Numbering {{{1
|
||
show heading.where(level: 1): it => {
|
||
counter(math.equation).update(0)
|
||
counter(figure.where(kind: raw)).update(0)
|
||
counter(figure.where(kind: image)).update(0)
|
||
counter(figure.where(kind: table)).update(0)
|
||
it
|
||
}
|
||
set figure(numbering: i => numbering("1.1", counter(heading).get().at(0), i))
|
||
set math.equation(numbering: i => numbering("(1.1)", counter(heading).get().at(0), i))
|
||
|
||
// Headings {{{1
|
||
set heading(numbering: "1.1")
|
||
|
||
show heading: it => if it.level == 1 {
|
||
set align(center)
|
||
set text(size: 14pt, weight: "semibold")
|
||
|
||
pagebreak(weak: true)
|
||
upper(it)
|
||
v(spacing * 2, weak: true)
|
||
} else {
|
||
set text(size: 14pt, weight: "regular")
|
||
|
||
v(spacing * 2, weak: true)
|
||
block(width: 100%, spacing: 0em)[
|
||
#h(1.25cm)
|
||
#counter(heading).display(auto)
|
||
#it.body
|
||
]
|
||
v(spacing * 2, weak: true)
|
||
}
|
||
|
||
show heading.where(level: 3): it => {
|
||
set text(size: 14pt, weight: "regular")
|
||
|
||
v(spacing * 2, weak: true)
|
||
block(width: 100%, spacing: 0em)[
|
||
#h(1.25cm)
|
||
#counter(heading).display(it.numbering)
|
||
#it.body
|
||
]
|
||
v(spacing * 2, weak: true)
|
||
}
|
||
|
||
// listings {{{3
|
||
show raw.where(block: true): it => {
|
||
let new_spacing = 0.5em
|
||
set block(spacing: new_spacing)
|
||
set par(spacing: new_spacing, leading: new_spacing)
|
||
set text(size: 11pt, weight: "semibold", font: ("Courier New", "Liberation Mono"))
|
||
|
||
v(spacing * 2.5, weak: true)
|
||
pad(it, left: 1.25cm)
|
||
v(spacing * 2.5, weak: true)
|
||
}
|
||
|
||
it
|
||
// }}}
|
||
}
|
||
|
||
/// DSTU 3008:2015 Appendices Style
|
||
/// -> content
|
||
/// - it (content): Content to apply the style to.
|
||
#let appendices(it) = /* {{{ */ {
|
||
// Numbering
|
||
counter(heading).update(0)
|
||
set heading(numbering: (i, ..n) => upper(ukr-enum.at(i)) + numbering(".1.1", ..n))
|
||
set figure(numbering: i => upper(ukr-enum.at(counter(heading).get().at(0))).i)
|
||
set math.equation(numbering: i => upper(ukr-enum.at(counter(heading).get().at(0))).i)
|
||
|
||
// Heading supplement (Heading name shown when citing with @ref)
|
||
set heading(supplement: [Додаток])
|
||
|
||
// Headings
|
||
show heading: it => if it.level == 1 {
|
||
set align(center)
|
||
set text(size: 14pt, weight: "regular")
|
||
|
||
pagebreak(weak: true)
|
||
bold([ДОДАТОК #counter(heading).display(auto)])
|
||
linebreak()
|
||
it.body
|
||
v(spacing * 2, weak: true)
|
||
} else {
|
||
set text(size: 14pt, weight: "regular")
|
||
|
||
v(spacing * 2, weak: true)
|
||
block(width: 100%, spacing: 0em)[
|
||
#h(1.25cm)
|
||
#counter(heading).display(auto)
|
||
#it.body
|
||
]
|
||
v(spacing * 2, weak: true)
|
||
}
|
||
|
||
it
|
||
}
|
||
|
||
// vim:sts=2:sw=2:fdm=marker:cms=/*%s*/
|