Compare commits
No commits in common. "4a1fcd0a35c0f4f40ead9e454f013042eeebc117" and "7262caeee735e93ef848d36bb46cc61f0f01bcfe" have entirely different histories.
4a1fcd0a35
...
7262caeee7
|
@ -5,12 +5,15 @@ on: [push]
|
||||||
jobs:
|
jobs:
|
||||||
run-ci-linux:
|
run-ci-linux:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
TYPST_INSTALL: /usr/local
|
||||||
|
TYPST_VERSION: 0.11.1
|
||||||
steps:
|
steps:
|
||||||
- name: Check out repository code
|
- name: Check out repository code
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
- name: Setup Nix Shell
|
- name: Install Typst CLI
|
||||||
- uses: cachix/install-nix-action@v18
|
run: curl -fsSL https://typst.community/typst-install/install.sh | sh -s "$TYPST_VERSION"
|
||||||
with:
|
- name: Set up Python 3
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
run: apt update -y && apt install python3-pip -y
|
||||||
- name: Run CI
|
- name: Run CI
|
||||||
run: nix-shell --run ./run-ci.sh
|
run: bash -c ./run-ci.sh
|
||||||
|
|
42
run-fmt.sh
42
run-fmt.sh
|
@ -1,42 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
function format() {
|
|
||||||
# format file
|
|
||||||
# typstyle --format $1
|
|
||||||
|
|
||||||
if [ -z "$1" ]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
local wd=$(dirname $(realpath "$1"))
|
|
||||||
|
|
||||||
echo "processing file $1..."
|
|
||||||
typstyle "$2" "$1" > /dev/null
|
|
||||||
if [ $? -eq 1 ]; then
|
|
||||||
echo "failed format validation: $1"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
local imports=$(rg "#import \"([a-z0-9/\-]+\.typ)\"" -Nor '$1' "$1")
|
|
||||||
|
|
||||||
# format all included files
|
|
||||||
while IFS= read -r line; do
|
|
||||||
if [ -z "$line" ]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
format "$wd/$line" "$2"
|
|
||||||
done <<< "$imports"
|
|
||||||
}
|
|
||||||
|
|
||||||
case $1 in
|
|
||||||
"--format")
|
|
||||||
format "$2" "--inplace"
|
|
||||||
;;
|
|
||||||
"--check")
|
|
||||||
format "$2" "--check"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "unknown option: $1"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
13
shell.nix
13
shell.nix
|
@ -1,13 +0,0 @@
|
||||||
let
|
|
||||||
nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/tarball/nixos-24.05";
|
|
||||||
pkgs = import nixpkgs { config = {}; overlays = []; };
|
|
||||||
in
|
|
||||||
|
|
||||||
pkgs.mkShellNoCC {
|
|
||||||
packages = with pkgs; [
|
|
||||||
python312
|
|
||||||
python312Packages.pyyaml
|
|
||||||
typst
|
|
||||||
typstyle
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -30,10 +30,7 @@ SOFTWARE.*/
|
||||||
#let __query_labels_with_key(loc, key, before: false) = {
|
#let __query_labels_with_key(loc, key, before: false) = {
|
||||||
if before {
|
if before {
|
||||||
query(
|
query(
|
||||||
selector(label(__glossary_label_prefix + key)).before(
|
selector(label(__glossary_label_prefix + key)).before(loc, inclusive: false),
|
||||||
loc,
|
|
||||||
inclusive: false,
|
|
||||||
),
|
|
||||||
loc,
|
loc,
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
|
@ -59,18 +56,13 @@ SOFTWARE.*/
|
||||||
let entlong = entry.at("long", default: "")
|
let entlong = entry.at("long", default: "")
|
||||||
let textLink = if display != none {
|
let textLink = if display != none {
|
||||||
[#display]
|
[#display]
|
||||||
} else if (
|
} else if (is_first or long == true) and entlong != [] and entlong != "" and long != false {
|
||||||
is_first or long == true
|
|
||||||
) and entlong != [] and entlong != "" and long != false {
|
|
||||||
[#entlong (#entry.short#suffix)]
|
[#entlong (#entry.short#suffix)]
|
||||||
} else {
|
} else {
|
||||||
[#entry.short#suffix]
|
[#entry.short#suffix]
|
||||||
}
|
}
|
||||||
|
|
||||||
[#link(
|
[#link(label(entry.key), textLink)#label(__glossary_label_prefix + entry.key)]
|
||||||
label(entry.key),
|
|
||||||
textLink,
|
|
||||||
)#label(__glossary_label_prefix + entry.key)]
|
|
||||||
} else {
|
} else {
|
||||||
panic(__not-found-panic-error-msg(key))
|
panic(__not-found-panic-error-msg(key))
|
||||||
}
|
}
|
||||||
|
@ -88,10 +80,10 @@ SOFTWARE.*/
|
||||||
let gloss = __query_labels_with_key(here(), key, before: true)
|
let gloss = __query_labels_with_key(here(), key, before: true)
|
||||||
|
|
||||||
let is_first = gloss == ()
|
let is_first = gloss == ()
|
||||||
let entlongplural = entry.at("longplural", default: "")
|
let entlongplural = entry.at("longplural", default: "");
|
||||||
let entlong = if entlongplural == [] or entlongplural == "" {
|
let entlong = if entlongplural == [] or entlongplural == "" {
|
||||||
// if the entry long plural is not provided, then fallback to adding 's' suffix
|
// if the entry long plural is not provided, then fallback to adding 's' suffix
|
||||||
let entlong = entry.at("long", default: "")
|
let entlong = entry.at("long", default: "");
|
||||||
if entlong != [] and entlong != "" {
|
if entlong != [] and entlong != "" {
|
||||||
[#entlong#suffix]
|
[#entlong#suffix]
|
||||||
} else {
|
} else {
|
||||||
|
@ -101,25 +93,20 @@ SOFTWARE.*/
|
||||||
[#entlongplural]
|
[#entlongplural]
|
||||||
}
|
}
|
||||||
|
|
||||||
let entplural = entry.at("plural", default: "")
|
let entplural = entry.at("plural", default: "");
|
||||||
let short = if entplural == [] or entplural == "" {
|
let short = if entplural == [] or entplural == "" {
|
||||||
[#entry.short#suffix]
|
[#entry.short#suffix]
|
||||||
} else {
|
} else {
|
||||||
[#entplural]
|
[#entplural]
|
||||||
}
|
}
|
||||||
|
|
||||||
let textLink = if (
|
let textLink = if (is_first or long == true) and entlong != [] and entlong != "" and long != false {
|
||||||
is_first or long == true
|
|
||||||
) and entlong != [] and entlong != "" and long != false {
|
|
||||||
[#entlong (#short)]
|
[#entlong (#short)]
|
||||||
} else {
|
} else {
|
||||||
[#short]
|
[#short]
|
||||||
}
|
}
|
||||||
|
|
||||||
[#link(
|
[#link(label(entry.key), textLink)#label(__glossary_label_prefix + entry.key)]
|
||||||
label(entry.key),
|
|
||||||
textLink,
|
|
||||||
)#label(__glossary_label_prefix + entry.key)]
|
|
||||||
} else {
|
} else {
|
||||||
panic(__not-found-panic-error-msg(key))
|
panic(__not-found-panic-error-msg(key))
|
||||||
}
|
}
|
||||||
|
@ -210,17 +197,15 @@ SOFTWARE.*/
|
||||||
(values: values, pages: pages)
|
(values: values, pages: pages)
|
||||||
},
|
},
|
||||||
).values.map(x => {
|
).values.map(x => {
|
||||||
let page-numbering = x.page-numbering()
|
let page-numbering = x.page-numbering();
|
||||||
if page-numbering == none {
|
if page-numbering == none {
|
||||||
page-numbering = "1"
|
page-numbering = "1"
|
||||||
}
|
}
|
||||||
link(x)[#numbering(
|
link(x)[#numbering(page-numbering, ..counter(page).at(x))]
|
||||||
page-numbering,
|
}
|
||||||
..counter(page).at(x),
|
).join(", ")
|
||||||
)]
|
}
|
||||||
}).join(", ")
|
|
||||||
}
|
}
|
||||||
},
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -230,8 +215,6 @@ SOFTWARE.*/
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if enable-group-pagebreak {
|
if enable-group-pagebreak { pagebreak(weak: true) }
|
||||||
pagebreak(weak: true)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
|
@ -17,40 +17,34 @@
|
||||||
for (k, v) in entries.pairs() {
|
for (k, v) in entries.pairs() {
|
||||||
assert(
|
assert(
|
||||||
type(v) == dictionary,
|
type(v) == dictionary,
|
||||||
message: "The glossary entry `" + k + "` is not a dictionary",
|
message: "The glossary entry `" + k + "` is not a dictionary")
|
||||||
)
|
|
||||||
|
|
||||||
for key in v.keys() {
|
for key in v.keys() {
|
||||||
assert(
|
assert(
|
||||||
key in ("short", "long", "desc", "group"),
|
key in ("short", "long", "desc", "group"),
|
||||||
message: "Found unexpected key `" + key + "` in glossary entry `" + k,
|
message: "Found unexpected key `" + key + "` in glossary entry `" + k)
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(
|
assert(
|
||||||
type(v.short) == str,
|
type(v.short) == str,
|
||||||
message: "The short form of glossary entry `" + k + "` is not a string",
|
message: "The short form of glossary entry `" + k + "` is not a string")
|
||||||
)
|
|
||||||
|
|
||||||
if "long" in v {
|
if "long" in v {
|
||||||
assert(
|
assert(
|
||||||
type(v.long) == str,
|
type(v.long) == str,
|
||||||
message: "The long form of glossary entry `" + k + "` is not a string",
|
message: "The long form of glossary entry `" + k + "` is not a string")
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if "desc" in v {
|
if "desc" in v {
|
||||||
assert(
|
assert(
|
||||||
type(v.desc) == str,
|
type(v.desc) == str,
|
||||||
message: "The description of glossary entry `" + k + "` is not a string",
|
message: "The description of glossary entry `" + k + "` is not a string")
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if "group" in v {
|
if "group" in v {
|
||||||
assert(
|
assert(
|
||||||
type(v.group) == str,
|
type(v.group) == str,
|
||||||
message: "The optional group of glossary entry `" + k + "` is not a string",
|
message: "The optional group of glossary entry `" + k + "` is not a string")
|
||||||
)
|
|
||||||
} else {
|
} else {
|
||||||
let group = if "long" in v {
|
let group = if "long" in v {
|
||||||
if (context text.lang) == "de" {
|
if (context text.lang) == "de" {
|
||||||
|
@ -75,6 +69,6 @@
|
||||||
short: eval(entry.short, mode: "markup"),
|
short: eval(entry.short, mode: "markup"),
|
||||||
long: eval(entry.at("long", default: ""), mode: "markup"),
|
long: eval(entry.at("long", default: ""), mode: "markup"),
|
||||||
desc: eval(entry.at("desc", default: ""), mode: "markup"),
|
desc: eval(entry.at("desc", default: ""), mode: "markup"),
|
||||||
group: entry.at("group", default: ""),
|
group: entry.at("group", default: "")
|
||||||
))
|
))
|
||||||
}
|
}
|
|
@ -36,14 +36,12 @@
|
||||||
#set document(
|
#set document(
|
||||||
author: config.author.name,
|
author: config.author.name,
|
||||||
keywords: config.thesis.keywords,
|
keywords: config.thesis.keywords,
|
||||||
title: config.thesis.title,
|
title: config.thesis.title)
|
||||||
)
|
|
||||||
|
|
||||||
// configure text locale
|
// configure text locale
|
||||||
#set text(
|
#set text(
|
||||||
lang: config.lang,
|
lang: config.lang,
|
||||||
region: config.region,
|
region: config.region)
|
||||||
)
|
|
||||||
|
|
||||||
// preppend title page
|
// preppend title page
|
||||||
#new_title_page(config)
|
#new_title_page(config)
|
||||||
|
@ -70,8 +68,7 @@
|
||||||
print-glossary(
|
print-glossary(
|
||||||
disable-back-references: true,
|
disable-back-references: true,
|
||||||
enable-group-pagebreak: true,
|
enable-group-pagebreak: true,
|
||||||
glossary(config.thesis.glossary),
|
glossary(config.thesis.glossary))
|
||||||
)
|
|
||||||
|
|
||||||
pagebreak(weak: true)
|
pagebreak(weak: true)
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,8 +20,7 @@
|
||||||
pagebreak(weak: true)
|
pagebreak(weak: true)
|
||||||
outline(
|
outline(
|
||||||
title: title,
|
title: title,
|
||||||
target: figure.where(kind: kind),
|
target: figure.where(kind: kind))
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,8 +65,7 @@
|
||||||
outline(
|
outline(
|
||||||
target: heading.where(supplement: [chapter]),
|
target: heading.where(supplement: [chapter]),
|
||||||
title: title,
|
title: title,
|
||||||
indent: auto,
|
indent: auto)
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#let render_appendix_outline() = context {
|
#let render_appendix_outline() = context {
|
||||||
|
@ -88,15 +86,16 @@
|
||||||
outline(
|
outline(
|
||||||
target: heading.where(supplement: supplement),
|
target: heading.where(supplement: supplement),
|
||||||
title: title,
|
title: title,
|
||||||
indent: auto,
|
indent: auto)
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#let new_outline() = {
|
#let new_outline() = {
|
||||||
pagebreak(weak: true)
|
pagebreak(weak: true)
|
||||||
|
|
||||||
show outline.entry.where(level: 1): it => {
|
show outline.entry.where(
|
||||||
|
level: 1,
|
||||||
|
): it => {
|
||||||
v(1.5em, weak: true)
|
v(1.5em, weak: true)
|
||||||
strong(it)
|
strong(it)
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,14 +60,24 @@
|
||||||
column-gutter: 1cm,
|
column-gutter: 1cm,
|
||||||
align: left,
|
align: left,
|
||||||
stroke: none,
|
stroke: none,
|
||||||
[*Verfasser:*], author.name,
|
|
||||||
[*Bearbeitungszeitraum:*], thesis.timeframe,
|
[*Verfasser:*],
|
||||||
|
author.name,
|
||||||
|
|
||||||
|
[*Bearbeitungszeitraum:*],
|
||||||
|
thesis.timeframe,
|
||||||
|
|
||||||
[*Matrikelnummer, Kurs:*],
|
[*Matrikelnummer, Kurs:*],
|
||||||
str(author.matriculation-number) + ", " + author.course,
|
str(author.matriculation-number) + ", " + author.course,
|
||||||
|
|
||||||
[*Ausbildungsbetrieb:*], author.company,
|
[*Ausbildungsbetrieb:*],
|
||||||
[*Betrieblicher Betreuer:*], author.supervisor,
|
author.company,
|
||||||
[*Abgabedatum:*], thesis.submission-date,
|
|
||||||
|
[*Betrieblicher Betreuer:*],
|
||||||
|
author.supervisor,
|
||||||
|
|
||||||
|
[*Abgabedatum:*],
|
||||||
|
thesis.submission-date
|
||||||
)
|
)
|
||||||
] else if text.lang == "en" [
|
] else if text.lang == "en" [
|
||||||
#table(
|
#table(
|
||||||
|
@ -75,21 +85,30 @@
|
||||||
column-gutter: 1cm,
|
column-gutter: 1cm,
|
||||||
align: left,
|
align: left,
|
||||||
stroke: none,
|
stroke: none,
|
||||||
[*Author:*], author.name,
|
|
||||||
[*Editing period:*], thesis.timeframe,
|
[*Author:*],
|
||||||
|
author.name,
|
||||||
|
|
||||||
|
[*Editing period:*],
|
||||||
|
thesis.timeframe,
|
||||||
|
|
||||||
[*Matriculation number, course:*],
|
[*Matriculation number, course:*],
|
||||||
str(author.matriculation-number) + ", " + author.course,
|
str(author.matriculation-number) + ", " + author.course,
|
||||||
|
|
||||||
[*Training company:*], author.company,
|
[*Training company:*],
|
||||||
[*Company supervisor:*], author.supervisor,
|
author.company,
|
||||||
[*Submission date:*], thesis.submission-date,
|
|
||||||
|
[*Company supervisor:*],
|
||||||
|
author.supervisor,
|
||||||
|
|
||||||
|
[*Submission date:*],
|
||||||
|
thesis.submission-date
|
||||||
)
|
)
|
||||||
] else [
|
] else [
|
||||||
#context panic("no translation for language: ", text.lang)
|
#context panic("no translation for language: ", text.lang)
|
||||||
]
|
]
|
||||||
|
|
||||||
#align(
|
#align(bottom,
|
||||||
bottom,
|
|
||||||
grid(
|
grid(
|
||||||
// set width of columns
|
// set width of columns
|
||||||
// we need two, so make both half the page width
|
// we need two, so make both half the page width
|
||||||
|
@ -102,8 +121,7 @@
|
||||||
#context panic("no translation for language: ", text.lang)
|
#context panic("no translation for language: ", text.lang)
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
align(right, {line(length: 6cm)})),
|
align(right, {line(length: 6cm)})))
|
||||||
)
|
|
||||||
|
|
||||||
#counter(page).update(0)
|
#counter(page).update(0)
|
||||||
]
|
]
|
||||||
|
|
|
@ -16,8 +16,7 @@
|
||||||
#rect(
|
#rect(
|
||||||
radius: 1em,
|
radius: 1em,
|
||||||
inset: 1em,
|
inset: 1em,
|
||||||
stroke: watermark-color,
|
stroke: watermark-color)[
|
||||||
)[
|
|
||||||
#text(size: 4em, weight: "bold", fill: watermark-color, "DRAFT")
|
#text(size: 4em, weight: "bold", fill: watermark-color, "DRAFT")
|
||||||
#linebreak()
|
#linebreak()
|
||||||
#text(size: 1.25em, weight: "bold", fill: watermark-color)[
|
#text(size: 1.25em, weight: "bold", fill: watermark-color)[
|
||||||
|
@ -25,11 +24,7 @@
|
||||||
#linebreak()
|
#linebreak()
|
||||||
document version.
|
document version.
|
||||||
#linebreak()
|
#linebreak()
|
||||||
#text(
|
#text(size: 0.75em, "Further usage without the authors consent is not permitted.")]]]}
|
||||||
size: 0.75em,
|
|
||||||
"Further usage without the authors consent is not permitted.",
|
|
||||||
)]]]
|
|
||||||
}
|
|
||||||
|
|
||||||
// global style of document
|
// global style of document
|
||||||
#let global_styled_doc(config, body) = {
|
#let global_styled_doc(config, body) = {
|
||||||
|
@ -42,13 +37,11 @@
|
||||||
hyphenate: true,
|
hyphenate: true,
|
||||||
dir: ltr,
|
dir: ltr,
|
||||||
font: style.text.font,
|
font: style.text.font,
|
||||||
fill: ABB-BLACK,
|
fill: ABB-BLACK)
|
||||||
)
|
|
||||||
|
|
||||||
show heading: set text(
|
show heading: set text(
|
||||||
font: style.heading.font,
|
font: style.heading.font,
|
||||||
weight: "semibold",
|
weight: "semibold")
|
||||||
)
|
|
||||||
|
|
||||||
set heading(supplement: [chapter])
|
set heading(supplement: [chapter])
|
||||||
|
|
||||||
|
@ -62,8 +55,7 @@
|
||||||
// set theme for code blocks
|
// set theme for code blocks
|
||||||
set raw(
|
set raw(
|
||||||
tab-size: style.code.tab-size,
|
tab-size: style.code.tab-size,
|
||||||
theme: style.code.theme,
|
theme: style.code.theme)
|
||||||
)
|
|
||||||
show raw: set text(font: style.code.font)
|
show raw: set text(font: style.code.font)
|
||||||
|
|
||||||
show figure: set block(breakable: true)
|
show figure: set block(breakable: true)
|
||||||
|
@ -75,20 +67,8 @@
|
||||||
stroke: (x, y) => (
|
stroke: (x, y) => (
|
||||||
left: none,
|
left: none,
|
||||||
right: none,
|
right: none,
|
||||||
top: if y == 0 {
|
top: if y == 0 { 1.5pt } else if y < 2 { 1pt } else { 0pt },
|
||||||
1.5pt
|
bottom: if y == 0 { 1pt } else { 1.5pt } ))
|
||||||
} else if y < 2 {
|
|
||||||
1pt
|
|
||||||
} else {
|
|
||||||
0pt
|
|
||||||
},
|
|
||||||
bottom: if y == 0 {
|
|
||||||
1pt
|
|
||||||
} else {
|
|
||||||
1.5pt
|
|
||||||
},
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
// make table header bold
|
// make table header bold
|
||||||
show table.cell.where(y: 0): set text(weight: "bold")
|
show table.cell.where(y: 0): set text(weight: "bold")
|
||||||
|
@ -97,8 +77,7 @@
|
||||||
set par(
|
set par(
|
||||||
justify: true,
|
justify: true,
|
||||||
first-line-indent: 1em,
|
first-line-indent: 1em,
|
||||||
leading: 1em,
|
leading: 1em)
|
||||||
)
|
|
||||||
|
|
||||||
// give links a color
|
// give links a color
|
||||||
show link: set text(fill: style.link.color)
|
show link: set text(fill: style.link.color)
|
||||||
|
@ -114,8 +93,7 @@
|
||||||
top: style.page.margin.top + style.header.logo-height + style.header.underline-top-padding + style.header.content-padding,
|
top: style.page.margin.top + style.header.logo-height + style.header.underline-top-padding + style.header.content-padding,
|
||||||
bottom: style.page.margin.bottom + style.footer.content-padding,
|
bottom: style.page.margin.bottom + style.footer.content-padding,
|
||||||
left: style.page.margin.left,
|
left: style.page.margin.left,
|
||||||
right: style.page.margin.right,
|
right: style.page.margin.right),
|
||||||
),
|
|
||||||
numbering: (..nums) => {
|
numbering: (..nums) => {
|
||||||
let current-page = here().page()
|
let current-page = here().page()
|
||||||
if current-page == 1{
|
if current-page == 1{
|
||||||
|
@ -137,11 +115,7 @@
|
||||||
} else if query(<end-of-prelude>).first().location().page() > page-number {
|
} else if query(<end-of-prelude>).first().location().page() > page-number {
|
||||||
numbering("I", page-counter)
|
numbering("I", page-counter)
|
||||||
} else if query(<end-of-content>).first().location().page() >= page-number {
|
} else if query(<end-of-content>).first().location().page() >= page-number {
|
||||||
numbering(
|
numbering("1 / 1", page-counter, counter(page).at(<end-of-content>).last())
|
||||||
"1 / 1",
|
|
||||||
page-counter,
|
|
||||||
counter(page).at(<end-of-content>).last(),
|
|
||||||
)
|
|
||||||
} else {
|
} else {
|
||||||
numbering("a", page-counter)
|
numbering("a", page-counter)
|
||||||
}
|
}
|
||||||
|
@ -160,18 +134,14 @@
|
||||||
align(right, image("res/DHBW.svg", height: style.header.logo-height)))
|
align(right, image("res/DHBW.svg", height: style.header.logo-height)))
|
||||||
|
|
||||||
} else if query(<end-of-prelude>).first().location().page() <= here().page() {
|
} else if query(<end-of-prelude>).first().location().page() <= here().page() {
|
||||||
let headers-before = query(
|
let headers-before = query(selector(heading.where(numbering: "1.", level: 1)).before(here()))
|
||||||
selector(heading.where(numbering: "1.", level: 1)).before(here()),
|
|
||||||
)
|
|
||||||
|
|
||||||
let header-title = thesis.title
|
let header-title = thesis.title
|
||||||
|
|
||||||
if headers-before.len() > 0 {
|
if headers-before.len() > 0 {
|
||||||
header-title = headers-before.last().body
|
header-title = headers-before.last().body
|
||||||
} else {
|
} else {
|
||||||
let headers-after = query(
|
let headers-after = query(selector(heading.where(numbering: "1.", level: 1)).after(here()))
|
||||||
selector(heading.where(numbering: "1.", level: 1)).after(here()),
|
|
||||||
)
|
|
||||||
|
|
||||||
if headers-after.len() > 0 {
|
if headers-after.len() > 0 {
|
||||||
header-title = headers-after.first().body
|
header-title = headers-after.first().body
|
||||||
|
@ -182,8 +152,7 @@
|
||||||
columns: (1fr, auto),
|
columns: (1fr, auto),
|
||||||
align: (horizon, bottom),
|
align: (horizon, bottom),
|
||||||
context [ _ #header-title _ ],
|
context [ _ #header-title _ ],
|
||||||
image("res/DHBW.svg", height: style.header.logo-height),
|
image("res/DHBW.svg", height: style.header.logo-height))
|
||||||
)
|
|
||||||
|
|
||||||
v(style.header.underline-top-padding - 1em)
|
v(style.header.underline-top-padding - 1em)
|
||||||
line(length: 100%)
|
line(length: 100%)
|
||||||
|
@ -192,13 +161,12 @@
|
||||||
columns: (1fr, auto),
|
columns: (1fr, auto),
|
||||||
align: (horizon, bottom),
|
align: (horizon, bottom),
|
||||||
context [ _ #config.thesis.title _ ],
|
context [ _ #config.thesis.title _ ],
|
||||||
image("res/DHBW.svg", height: style.header.logo-height),
|
image("res/DHBW.svg", height: style.header.logo-height)
|
||||||
)
|
)
|
||||||
v(style.header.underline-top-padding - 1em)
|
v(style.header.underline-top-padding - 1em)
|
||||||
line(length: 100%)
|
line(length: 100%)
|
||||||
}
|
}
|
||||||
},
|
})
|
||||||
)
|
|
||||||
|
|
||||||
body
|
body
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue