Compare commits

...

24 Commits
v0.4.1 ... main

Author SHA1 Message Date
Sven Vogel 6a4d78ba8b Merge pull request 'removed: install of package sudo in github action' (#59) from fix/ci-failing-on-github into main
Gitea Action for checking typst compilation / run-ci-linux (push) Successful in 1m43s Details
Reviewed-on: #59
2024-08-27 19:38:31 +00:00
Sven Vogel 4da04a195c removed: install of package sudo in github action
Gitea Action for checking typst compilation / run-ci-linux (push) Successful in 1m48s Details
2024-08-27 21:35:27 +02:00
Sven Vogel 572d505701 added nix pipeline to github
Gitea Action for checking typst compilation / run-ci-linux (push) Successful in 1m46s Details
2024-08-27 21:20:17 +02:00
Sven Vogel 255cdfeae1 Merge branch 'feature/typstyle'
Gitea Action for checking typst compilation / run-ci-linux (push) Successful in 2m48s Details
2024-08-27 21:16:23 +02:00
Sven Vogel 1548bf8c5b changed release pipeline to make use of nix
Gitea Action for checking typst compilation / run-ci-linux (push) Successful in 1m43s Details
2024-08-27 20:58:01 +02:00
Sven Vogel dabe0a2ef5 fixed failing tests
Gitea Action for checking typst compilation / run-ci-linux (push) Successful in 1m41s Details
2024-08-27 20:54:33 +02:00
Sven Vogel 6c8f94e4b7 fixed test local import 2024-08-27 20:36:21 +02:00
Sven Vogel ae729230bb made generate-theme executable 2024-08-27 20:28:50 +02:00
Sven Vogel 9c3ae5c9e7 switched to unstable nix channel 2024-08-27 20:27:41 +02:00
Sven Vogel 093ed09293 fixed format of template for (#13)
Gitea Action for checking typst compilation / run-ci-linux (push) Failing after 1m47s Details
2024-08-27 19:52:07 +02:00
Sven Vogel 946a16fce6 add typstyle check to CI (#13) 2024-08-27 19:50:31 +02:00
Sven Vogel 7ad138dc00 fix CI failing (#18) 2024-08-27 19:50:09 +02:00
Sven Vogel 201e991ac4 added sudo to action runner
Gitea Action for checking typst compilation / run-ci-linux (push) Successful in 1m52s Details
2024-08-27 19:36:24 +02:00
Sven Vogel 2daf7bb6c9 updated nix action to v27
Gitea Action for checking typst compilation / run-ci-linux (push) Failing after 11s Details
2024-08-27 19:34:46 +02:00
Sven Vogel 37e60a315e make long titles break on title page but not on content (#54)
Gitea Action for checking typst compilation / run-ci-linux (push) Successful in 28s Details
2024-08-27 14:07:16 +02:00
Sven Vogel 9f9225910f fix lock notice spelling mistake (#53)
Gitea Action for checking typst compilation / run-ci-linux (push) Successful in 31s Details
2024-08-27 13:52:50 +02:00
Sven Vogel e1b8eceea6 fix heading supplement not translated (#52)
Gitea Action for checking typst compilation / run-ci-linux (push) Successful in 27s Details
2024-08-26 16:10:52 +02:00
Sven Vogel 0438d73ab5 only show used acronyms (#51)
Gitea Action for checking typst compilation / run-ci-linux (push) Successful in 28s Details
2024-08-26 15:26:28 +02:00
Sven Vogel 410c753339 fix wrong glossary and acronym group language (#50)
Gitea Action for checking typst compilation / run-ci-linux (push) Successful in 27s Details
2024-08-26 15:08:03 +02:00
Sven Vogel dd6a9ccce0 decrease padding between acronyms and glossary entries (#49)
Gitea Action for checking typst compilation / run-ci-linux (push) Successful in 27s Details
2024-08-26 14:47:37 +02:00
Sven Vogel 9ba1fea4d7 changed: ci action syntax
Gitea Action for checking typst compilation / run-ci-linux (push) Failing after 10s Details
2024-07-08 22:58:13 +02:00
Sven Vogel 4a1fcd0a35 changed: CI runs on nix shell
Gitea Action for checking typst compilation / run-ci-linux (push) Failing after 0s Details
2024-07-08 22:56:56 +02:00
Sven Vogel d648d5121c changed: formatted source files 2024-07-08 21:57:23 +02:00
Sven Vogel 4fd088ce3f added: format script 2024-07-08 21:50:13 +02:00
20 changed files with 374 additions and 189 deletions

View File

@ -5,15 +5,16 @@ on: [push]
jobs:
run-ci-linux:
runs-on: ubuntu-latest
env:
TYPST_INSTALL: /usr/local
TYPST_VERSION: 0.11.1
steps:
- name: Check out repository code
uses: actions/checkout@v3
- name: Install Typst CLI
run: curl -fsSL https://typst.community/typst-install/install.sh | sh -s "$TYPST_VERSION"
- name: Set up Python 3
run: apt update -y && apt install python3-pip -y
- name: Install dependencies for Nix setup action
run: |
apt update -y
apt install sudo -y
- name: Setup Nix
uses: cachix/install-nix-action@v27
with:
nix_path: nixpkgs=channel:nixos-unstable
- name: Run CI
run: bash -c ./run-ci.sh
run: nix-shell --run ./run-ci.sh

View File

@ -3,21 +3,24 @@ name: release
on:
push:
tags:
- '*'
- 'v*.*.*'
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Check out repository code
uses: actions/checkout@v3
- name: Install dependencies for Nix setup action
run: |
apt update -y
apt install sudo -y
- name: Setup Nix
uses: cachix/install-nix-action@v27
with:
fetch-depth: 0
- name: Install Typst CLI
run: curl -fsSL https://typst.community/typst-install/install.sh | sh -s "$TYPST_VERSION"
- name: Set up Python 3
run: apt update -y && apt install python3-pip -y
nix_path: nixpkgs=channel:nixos-unstable
- name: Run CI
run: bash -c ./run-ci.sh
run: nix-shell --run ./run-ci.sh
- name: Setup go
uses: https://github.com/actions/setup-go@v4
with:

View File

@ -5,16 +5,12 @@ on: [push]
jobs:
run-ci-linux:
runs-on: ubuntu-latest
env:
TYPST_INSTALL: $HOME/.typst
TYPST_VERSION: 0.11.1
steps:
- name: Check out repository code
uses: actions/checkout@v3
- name: Install Typst CLI
run: curl -fsSL https://typst.community/typst-install/install.sh | sh -s "$TYPST_VERSION"
- uses: actions/setup-python@v5
- name: Setup Nix
uses: cachix/install-nix-action@v27
with:
python-version: '3.11'
nix_path: nixpkgs=channel:nixos-unstable
- name: Run CI
run: export PATH="$TYPST_INSTALL/bin:$PATH" && bash -c ./run-ci.sh
run: nix-shell --run ./run-ci.sh

View File

@ -1,32 +1,30 @@
name: release
on:
push:
# Sequence of patterns matched against refs/tags
tags:
- 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10
name: Create Release
- 'v*.*.*'
jobs:
build:
name: Create Release
release:
runs-on: ubuntu-latest
steps:
- name: Check out repository code
uses: actions/checkout@v3
- name: Install Typst CLI
run: curl -fsSL https://typst.community/typst-install/install.sh | sh -s "$TYPST_VERSION"
- uses: actions/setup-python@v5
- name: Setup Nix
uses: cachix/install-nix-action@v27
with:
python-version: '3.11'
nix_path: nixpkgs=channel:nixos-unstable
- name: Run CI
run: export PATH="$TYPST_INSTALL/bin:$PATH" && bash -c ./run-ci.sh
- name: Create Release
id: create_release
uses: actions/create-release@latest
env:
GITHUB_TOKEN: ${{ secrets.PAT }}
run: nix-shell --run ./run-ci.sh
- name: Setup go
uses: https://github.com/actions/setup-go@v4
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
draft: false
prerelease: false
go-version: '>=1.20.1'
- name: Create release
id: create-release
uses: https://gitea.com/actions/release-action@main
with:
files: |-
example.pdf
api_key: '${{secrets.RELEASE_TOKEN}}'

0
generate-theme.sh Normal file → Executable file
View File

View File

@ -25,19 +25,29 @@ function enter-section() {
printf "\\n"
eval "$2"
if [ $? -neq $3 ]; then
abort "command: $2 failed in section: $1"
exit_status=$?
if [ "$3" == "should fail" ]; then
log "INFO" "expected to fail..."
if [ $exit_status -eq 0 ]; then
abort "command: $2 failed in section: $1 with: $exit_status"
fi
else
log "INFO" "expected to pass..."
if [ ! $exit_status -eq 0 ]; then
abort "command: $2 failed in section: $1 with: $exit_status"
fi
fi
printf "\\n"
log "INFO" "section $1 completed successfully"
}
enter-section "BUILD: ABB code theme" "./generate-theme.sh" 0
enter-section "Compiling template..." "typst compile template/main.typ --root . example.pdf" 0
enter-section "TEST: local template import" "typst compile tests/local-import/main.typ --root ." 0
enter-section "TEST: invalid config case 1" "typst compile tests/invalid-config/test-case-1.typ --root ." 1
enter-section "TEST: invalid config case 2" "compile tests/invalid-config/test-case-2.typ" 0
enter-section "TEST: invalid config case 3" "typst compile tests/invalid-config/test-case-3.typ --root ." 1
enter-section "Typstyle checking" "./run-fmt.sh --check src/lib.typ" 0
enter-section "Compiling template..." "typst compile template/main.typ --root . example.pdf"
enter-section "TEST: local template import" "typst compile tests/local-import/main.typ --root ."
enter-section "TEST: invalid config case 1" "typst compile tests/invalid-config/test-case-1.typ --root ." "should fail"
enter-section "TEST: invalid config case 2" "typst compile tests/invalid-config/test-case-2.typ --root ."
enter-section "TEST: invalid config case 3" "typst compile tests/invalid-config/test-case-3.typ --root ." "should fail"
log "INFO" "CI completed successfully"

42
run-fmt.sh Executable file
View File

@ -0,0 +1,42 @@
#!/bin/bash
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 Normal file
View File

@ -0,0 +1,13 @@
let
nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/tarball/nixos-unstable";
pkgs = import nixpkgs { config = {}; overlays = []; };
in
pkgs.mkShellNoCC {
packages = with pkgs; [
python312
python312Packages.pyyaml
typst
typstyle
];
}

View File

@ -30,7 +30,10 @@ SOFTWARE.*/
#let __query_labels_with_key(loc, key, before: false) = {
if before {
query(
selector(label(__glossary_label_prefix + key)).before(loc, inclusive: false),
selector(label(__glossary_label_prefix + key)).before(
loc,
inclusive: false,
),
loc,
)
} else {
@ -56,13 +59,18 @@ SOFTWARE.*/
let entlong = entry.at("long", default: "")
let textLink = if display != none {
[#display]
} else if (is_first or long == true) and entlong != [] and entlong != "" and long != false {
} else if (
is_first or long == true
) and entlong != [] and entlong != "" and long != false {
[#entlong (#entry.short#suffix)]
} else {
[#entry.short#suffix]
}
[#link(label(entry.key), textLink)#label(__glossary_label_prefix + entry.key)]
[#link(
label(entry.key),
textLink,
)#label(__glossary_label_prefix + entry.key)]
} else {
panic(__not-found-panic-error-msg(key))
}
@ -100,13 +108,18 @@ SOFTWARE.*/
[#entplural]
}
let textLink = if (is_first or long == true) and entlong != [] and entlong != "" and long != false {
let textLink = if (
is_first or long == true
) and entlong != [] and entlong != "" and long != false {
[#entlong (#short)]
} else {
[#short]
}
[#link(label(entry.key), textLink)#label(__glossary_label_prefix + entry.key)]
[#link(
label(entry.key),
textLink,
)#label(__glossary_label_prefix + entry.key)]
} else {
panic(__not-found-panic-error-msg(key))
}
@ -116,7 +129,9 @@ SOFTWARE.*/
// show rule to make the references for glossarium
#let make-glossary(body) = {
show ref: r => {
if r.element != none and r.element.func() == figure and r.element.kind == __glossarium_figure {
if r.element != none and r.element.func() == figure and r
.element
.kind == __glossarium_figure {
// call to the general citing function
gls(str(r.target), suffix: r.citation.supplement)
} else {
@ -170,7 +185,13 @@ SOFTWARE.*/
numbering: none,
caption: {
context {
let term_references = __query_labels_with_key(here(), entry.key)
let key = if entry.key.ends-with("__glossary_entry") {
entry.key.replace("__glossary_entry", "")
} else {
entry.key
}
let term_references = __query_labels_with_key(here(), key)
if term_references.len() != 0 or show-all [
#let desc = entry.at("desc", default: "")
#let long = entry.at("long", default: "")
@ -178,6 +199,7 @@ SOFTWARE.*/
#let hasDesc = desc != "" and desc != []
#block(
below: 1.5em,
par(hanging-indent: 1em)[
#text(weight: "bold", entry.short)
#if hasLong and hasDesc [
@ -193,7 +215,9 @@ SOFTWARE.*/
.sorted(key: x => x.page())
.fold(
(values: (), pages: ()),
((values, pages), x) => if pages.contains(x.page()) {
((values, pages), x) => if pages.contains(
x.page(),
) {
(values: values, pages: pages)
} else {
values.push(x)
@ -207,7 +231,10 @@ SOFTWARE.*/
if page-numbering == none {
page-numbering = "1"
}
link(x)[#numbering(page-numbering, ..counter(page).at(x))]
link(x)[#numbering(
page-numbering,
..counter(page).at(x),
)]
}
)
.join(", ")

View File

@ -7,7 +7,7 @@
// Edited: 08.07.2024
// License: MIT
#let glossary(entries) = {
#let glossary(entries, config) = {
assert(
type(entries) == dictionary,
@ -54,13 +54,13 @@
message: "The optional group of glossary entry `" + k + "` is not a string",
)
} else {
let acronym_group = if (context text.lang) == "de" {
"Akronyme"
let acronym_group = if config.lang == "de" {
"Abkürzungsverzeichnis"
} else {
"Acronyms"
"List of Acronyms"
}
let glossary_group = if (context text.lang) == "de" {
let glossary_group = if config.lang == "de" {
"Begriffe"
} else {
"Glossary"
@ -75,8 +75,14 @@
// create dedicated entries for
// acronym and glossary
if "long" in v and "desc" in v {
processed_glossary.insert(k, (short: v.short, long: v.long, group: acronym_group))
processed_glossary.insert(k + "__glossary_entry", (short: v.short, desc: v.desc, long: v.long, group: glossary_group))
processed_glossary.insert(
k,
(short: v.short, long: v.long, group: acronym_group),
)
processed_glossary.insert(
k + "__glossary_entry",
(short: v.short, desc: v.desc, long: v.long, group: glossary_group),
)
} else {
processed_glossary.insert(k, v)
processed_glossary.at(k).group = group

View File

@ -31,7 +31,13 @@
inset: (left: 2pt, right: 2pt),
outset: (top: 4pt, bottom: 4pt),
fill: ABB-GRAY-06,
[#box(fill: rgb(color), radius: 2pt, inset: 0pt, width: 0.75em, height: 0.75em) #text(
[#box(
fill: rgb(color),
radius: 2pt,
inset: 0pt,
width: 0.75em,
height: 0.75em,
) #text(
font: default-config.style.code.font,
size: default-config.style.code.size,
content,
@ -40,13 +46,17 @@
}
#let url(label, content) = {
link(label)[#underline(offset: 2pt, stroke: 0.5pt + blue, text(fill: blue)[
#content
#let domain = label.find(regex("\w+\.\w+(?:\.\w+)*"))
#if domain.len() > 0 [
(#domain)
]
])]
link(label)[#underline(
offset: 2pt,
stroke: 0.5pt + blue,
text(fill: blue)[
#content
#let domain = label.find(regex("\w+\.\w+(?:\.\w+)*"))
#if domain.len() > 0 [
(#domain)
]
],
)]
}
// start of template pages and styles
@ -93,10 +103,10 @@
#if "glossary" in config.thesis and config.thesis.glossary != none {
print-glossary(
show-all: true,
show-all: false,
disable-back-references: true,
enable-group-pagebreak: true,
glossary(config.thesis.glossary),
glossary(config.thesis.glossary, config),
)
pagebreak(weak: true)

View File

@ -21,7 +21,7 @@
]
if text.lang == "de" [
Der Inhalt der dieser Arbeit mit dem Thema
Der Inhalt dieser Arbeit mit dem Thema
] else if text.lang == "en" [
The content of this work with the topic
]
@ -43,11 +43,11 @@
set par(justify: true)
if text.lang == "de" [
darf weder als Ganzes noch in Auszügen Personen außerhalb des Prüfungsprozesses und des Evaluationsverfahrens zugänglich gemacht werden, sofern keine anderslautende Genehmigung der Ausbildungsstätte vorliegt.
] else if text.lang == "en" [
may not be made accessible to persons outside the examination process and the evaluation procedure, either as a whole or in excerpts, unless otherwise authorized by the training institution.
]
if text.lang == "de" [
darf weder als Ganzes noch in Auszügen Personen außerhalb des Prüfungsprozesses und des Evaluationsverfahrens zugänglich gemacht werden, sofern keine anderslautende Genehmigung der Ausbildungsstätte vorliegt.
] else if text.lang == "en" [
may not be made accessible to persons outside the examination process and the evaluation procedure, either as a whole or in excerpts, unless otherwise authorized by the training institution.
]
set align(horizon)

View File

@ -80,9 +80,15 @@
"Table of Contents"
}
let header-supplement = if (text.lang == "de") {
"Kapitel"
} else {
"chapter"
}
pagebreak(weak: true)
outline(
target: heading.where(supplement: [chapter]),
target: heading.where(supplement: [#header-supplement]),
title: title,
indent: auto,
)

View File

@ -16,7 +16,8 @@
// title
#v(2cm)
#text(size: 2em, weight: "semibold", thesis.title)
#set par(justify: false)
#text(size: 2em, weight: "semibold", hyphenate: false, thesis.title)
// subtitle
#text(size: 1.5em, thesis.subtitle)
@ -63,7 +64,9 @@
stroke: none,
[*Verfasser:*], author.name,
[*Bearbeitungszeitraum:*], thesis.timeframe,
[*Matrikelnummer, Kurs:*], str(author.matriculation-number) + ", " + author.course,
[*Matrikelnummer, Kurs:*],
str(author.matriculation-number) + ", " + author.course,
[*Ausbildungsbetrieb:*], author.company,
[*Betrieblicher Betreuer:*], author.supervisor,
[*Abgabedatum:*], thesis.submission-date,
@ -76,7 +79,9 @@
stroke: none,
[*Author:*], author.name,
[*Editing period:*], thesis.timeframe,
[*Matriculation number, course:*], str(author.matriculation-number) + ", " + author.course,
[*Matriculation number, course:*],
str(author.matriculation-number) + ", " + author.course,
[*Training company:*], author.company,
[*Company supervisor:*], author.supervisor,
[*Submission date:*], thesis.submission-date,

View File

@ -12,7 +12,13 @@
#let watermark-color = luma(50%).transparentize(70%)
#let watermark-pattern = pattern(size: (5pt, 5pt))[
#place(line(start: (50%, 0%), end: (50%, 100%), stroke: (paint: watermark-color, thickness: 3pt)))
#place(
line(
start: (50%, 0%),
end: (50%, 100%),
stroke: (paint: watermark-color, thickness: 3pt),
),
)
]
#let watermark(config) = if config.draft {
@ -29,7 +35,10 @@
#linebreak()
document version.
#linebreak()
#text(size: 0.75em, "Further usage without the authors consent is not permitted.")]]]
#text(
size: 0.75em,
"Further usage without the authors consent is not permitted.",
)]]]
}
#let numberingH(c) = {
@ -69,7 +78,13 @@
weight: "semibold",
)
set heading(supplement: [chapter])
let header-supplement = if config.lang == "de" {
"Kapitel"
} else {
"chapter"
}
set heading(supplement: [#header-supplement])
set math.equation(numbering: "(1)")
@ -111,37 +126,51 @@
e => {
let (i, l) = e
let n = i + 1
let n_str = if (calc.rem(n, 1) == 0) or (true and i == 0) { text(font: style.code.font, size: style.code.size, fill: ABB-BLACK, str(n)) } else { none }
(n_str + h(0.5em), raw(block: true, lang: lang, l))
})
}
else {
( ( 1fr, ),
( left, ),
e => {
let (i, l) = e
raw(block: true, lang: lang, l)
}
let n_str = if (calc.rem(n, 1) == 0) or (true and i == 0) {
text(
font: style.code.font,
size: style.code.size,
fill: ABB-BLACK,
str(n),
)
}
} else {
none
}
(n_str + h(0.5em), raw(block: true, lang: lang, l))
},
)
} else {
(
(1fr,),
(left,),
e => {
let (i, l) = e
raw(block: true, lang: lang, l)
},
)
}
grid(
stroke: none,
columns: columns,
rows: (auto,),
gutter: 0pt,
inset: 0.25em,
align: (col, _) => align.at(col),
fill: ABB-GRAY-06,
..content
.text
.split("\n")
.enumerate()
.map(make_row)
.flatten()
.map(c => if c.has("text") and c.text == "" { v(1em) } else { c })
)
}
}
grid(
stroke: none,
columns: columns,
rows: (auto,),
gutter: 0pt,
inset: 0.25em,
align: (col, _) => align.at(col),
fill: ABB-GRAY-06,
..content
.text
.split("\n")
.enumerate()
.map(make_row)
.flatten()
.map(c => if c.has("text") and c.text == "" {
v(1em)
} else {
c
})
)
},
)
#v(-1em)
#align(center + top, it.caption)
@ -178,8 +207,20 @@
stroke: (x, y) => (
left: none,
right: none,
top: if y == 0 { 1.5pt } else if y < 2 { 1pt } else { 0.5pt },
bottom: if y == 0 { 1pt } else { 1.5pt } ))
top: if y == 0 {
1.5pt
} else if y < 2 {
1pt
} else {
0.5pt
},
bottom: if y == 0 {
1pt
} else {
1.5pt
},
),
)
// make table header bold
show table.cell.where(y: 0): set text(weight: "bold")
@ -188,7 +229,8 @@
set par(
justify: true,
first-line-indent: 1em,
leading: 1em)
leading: 1em,
)
// give links a color
show link: set text(fill: style.link.color)
@ -201,17 +243,26 @@
header-ascent: style.header.content-padding,
footer-descent: style.header.content-padding,
margin: (
top: style.page.margin.top + style.header.underline-top-padding + style.header.content-padding,
top: style.page.margin.top + style.header.underline-top-padding + style
.header
.content-padding,
bottom: style.page.margin.bottom + style.footer.content-padding,
left: style.page.margin.left,
right: style.page.margin.right),
right: style.page.margin.right,
),
numbering: (..nums) => {
let current-page = here().page()
if current-page == 1{
if current-page == 1 {
[]
} else if query(<end-of-prelude>).first().location().page() > current-page {
} else if query(<end-of-prelude>)
.first()
.location()
.page() > current-page {
numbering("I", nums.pos().first())
} else if query(<end-of-content>).first().location().page() >= current-page {
} else if query(<end-of-content>)
.first()
.location()
.page() >= current-page {
numbering("1", nums.pos().first())
} else {
numbering("a", nums.pos().first())
@ -228,7 +279,11 @@
set align(center)
numbering("I", page-counter)
} else if query(<end-of-content>).first().location().page() >= page-number {
numbering("1 / 1", page-counter, counter(page).at(<end-of-content>).last())
numbering(
"1 / 1",
page-counter,
counter(page).at(<end-of-content>).last(),
)
} else {
numbering("a", page-counter)
}
@ -248,7 +303,13 @@
// right align logo of DHBW
align(right, image("res/DHBW.svg", height: style.header.logo-height)))
} else if query(<end-of-content>).first().location().page() >= current-page and query(<end-of-prelude>).first().location().page() < current-page + 1 {
} else if query(<end-of-content>)
.first()
.location()
.page() >= current-page and query(<end-of-prelude>)
.first()
.location()
.page() < current-page + 1 {
let heading = currentH()
heading.at(0)
@ -261,7 +322,8 @@
v(style.header.underline-top-padding - 1em)
line(length: 100%)
}
})
},
)
body
}

View File

@ -3,8 +3,8 @@
#import "abstract.typ": abstract, summary
#show: dhbw-template.with((
lang: "en",
region: "en",
lang: "de",
region: "de",
draft: false,
author: (
name: "Sven Vogel",
@ -51,7 +51,7 @@
#lorem(200)
@einstein
= Lorem Ipsum 3
= Lorem Ipsum 3 <sec:hello>
#lorem(15) t `Hello, World!` #lorem(50)
@ -68,7 +68,7 @@ $
lorem(200),
)
#url("https://github.com", "text")
#url("https://github.com", "text") @sec:hello
#lorem(50)

View File

@ -1,8 +1,7 @@
#import "../../src/lib.typ": dhbw-template
#show: dhbw-template.with(
config: (
#show: dhbw-template.with((
lang: none,
region: "en",
author: (

View File

@ -1,30 +1,34 @@
#import "../../src/lib.typ": dhbw-template
#show: dhbw-template.with(
config: (
lang: "en",
this-key-is-not-in-config: "Ha Ha",
region: "en",
author: (
name: "Sven Vogel",
semester: 4,
program: "Informationtechnology",
course: "TINF19IT1",
faculty: "Technik",
university: "DHBW Mannheim",
company: "ABB AG",
supervisor: "Benny Goodman",
matriculation-number: 123456789),
thesis: (
title: "Unofficial ABB/DHBW Typst template",
subtitle: "for reports and thesises",
submission-date: "23rd march 2020",
timeframe: "1st january 2020 - 20th march 2020",
kind: "T2000",
summary: none,
abstract: none,
keywords: ( "IT", "other stuff" ),
bibliography: none,
glossary: none,
appendices: none)))
#show: dhbw-template.with((
lang: "en",
this-key-is-not-in-config: "Ha Ha",
region: "en",
author: (
name: "Sven Vogel",
semester: 4,
program: "Informationtechnology",
course: "TINF19IT1",
faculty: "Technik",
university: "DHBW Mannheim",
company: "ABB AG",
supervisor: "Benny Goodman",
matriculation-number: 123456789,
),
thesis: (
title: "Unofficial ABB/DHBW Typst template",
subtitle: "for reports and thesises",
submission-date: "23rd march 2020",
timeframe: "1st january 2020 - 20th march 2020",
kind: "T2000",
summary: none,
abstract: none,
keywords: ("IT", "other stuff"),
bibliography: none,
glossary: none,
appendices: none,
),
))
= Heading

View File

@ -1,24 +1,26 @@
#import "../../src/lib.typ": dhbw-template
#show: dhbw-template.with(
config: (
lang: "en",
region: "en",
author: (
university: "DHBW Mannheim",
company: "ABB AG",
supervisor: none,
matriculation-number: 123456789),
thesis: (
title: "Unofficial ABB/DHBW Typst template",
subtitle: "for reports and thesises",
submission-date: "23rd march 2020",
timeframe: "1st january 2020 - 20th march 2020",
kind: "T2000",
summary: none,
abstract: none,
keywords: ( "IT", "other stuff" ),
bibliography: none,
glossary: none,
appendices: none)))
#show: dhbw-template.with((
lang: "en",
region: "en",
author: (
university: "DHBW Mannheim",
company: "ABB AG",
supervisor: none,
matriculation-number: 123456789,
),
thesis: (
title: "Unofficial ABB/DHBW Typst template",
subtitle: "for reports and thesises",
submission-date: "23rd march 2020",
timeframe: "1st january 2020 - 20th march 2020",
kind: "T2000",
summary: none,
abstract: none,
keywords: ("IT", "other stuff"),
bibliography: none,
glossary: none,
appendices: none,
),
))

View File

@ -1,8 +1,7 @@
#import "../../src/lib.typ": dhbw-template
#show: dhbw-template.with(
config: (
#show: dhbw-template.with((
lang: "en",
region: "en",
author: (
@ -27,3 +26,5 @@
bibliography: none,
glossary: none,
appendices: none)))
= Heading