276 lines
5.4 KiB
Plaintext
276 lines
5.4 KiB
Plaintext
//
|
|
// Description: Import other modules so you only need to import the helpers
|
|
// Use : #import "../00-templates/helpers.typ": *
|
|
// Author : Silvan Zahno
|
|
//
|
|
#import "../00-templates/boxes.typ": *
|
|
#import "../00-templates/constants.typ": *
|
|
#import "../00-templates/items.typ": *
|
|
#import "../00-templates/sections.typ": *
|
|
#import "../00-templates/tablex.typ": *
|
|
#import "../01-settings/metadata.typ": *
|
|
#import "../03-tail/glossary.typ": *
|
|
|
|
// External Plugins
|
|
// Fancy pretty print with line numbers and stuff
|
|
#import "@preview/codelst:2.0.1": sourcecode
|
|
|
|
#let myref(label) = locate(loc =>{
|
|
if query(label,loc).len() != 0 {
|
|
ref(label)
|
|
} else {
|
|
text(fill: red)[?]
|
|
}
|
|
})
|
|
|
|
//-------------------------------------
|
|
// Acronym functions
|
|
//
|
|
#let acrshort(item) = {
|
|
item.abbr
|
|
}
|
|
#let acrlong(item) = {
|
|
[#item.long)]
|
|
}
|
|
#let acrfull(item) = {
|
|
[#item.long (#item.abbr)]
|
|
}
|
|
|
|
//-------------------------------------
|
|
// Table of content
|
|
//
|
|
#let toc(
|
|
lang: "en",
|
|
tableof: (
|
|
toc: true,
|
|
minitoc : false,
|
|
tof: false,
|
|
tot: false,
|
|
tol: false,
|
|
toe: false,
|
|
),
|
|
indent: true,
|
|
depth: none,
|
|
) = {
|
|
// Table of content
|
|
if tableof.toc == true {
|
|
outline(
|
|
title: [#if lang == "de" {"Inhalt"} else if lang == "fr" {"Contenu"} else {"Contents"}],
|
|
indent: indent,
|
|
depth: depth,
|
|
)
|
|
}
|
|
|
|
// Table of figures
|
|
if tableof.tof == true {
|
|
outline(
|
|
title: [#if lang == "de" {"Abbildungen"} else if lang == "fr" {"Figures"} else {"Figures"}],
|
|
target: figure.where(kind: image),
|
|
indent: indent,
|
|
depth: depth,
|
|
)
|
|
}
|
|
|
|
// Table of tables
|
|
if tableof.tot == true {
|
|
outline(
|
|
title: [#if lang == "de" {[Tabellen]} else if lang == "fr" {[Tables]} else {[Tables]}],
|
|
target: figure.where(kind: table),
|
|
indent: indent,
|
|
depth: depth,
|
|
)
|
|
}
|
|
|
|
// Table of listings
|
|
if tableof.tol == true {
|
|
outline(
|
|
title: [#if lang == "de" {"Programme"} else if lang == "fr" {"Programmes"} else {"Listings"}],
|
|
target: figure.where(kind: raw),
|
|
indent: indent,
|
|
depth: depth,
|
|
)
|
|
}
|
|
|
|
// Table of equation
|
|
if tableof.toe == true {
|
|
outline(
|
|
title: [#if lang == "de" {"Gleichungen"} else if lang == "fr" {"Équations"} else {"Equations"}],
|
|
target: math.equation.where(block:true),
|
|
indent: indent,
|
|
depth: depth,
|
|
)
|
|
}
|
|
}
|
|
|
|
|
|
#let minitoc(
|
|
after: none,
|
|
before: none,
|
|
addline: true,
|
|
stroke: 0.5pt,
|
|
length: 100%
|
|
) = {
|
|
v(2em)
|
|
text(large, [*Contents*])
|
|
if addline == true {
|
|
line(length:length, stroke:stroke)
|
|
}
|
|
outline(
|
|
title: none,
|
|
target: selector(heading)
|
|
.after(after)
|
|
.before(before, inclusive: false)
|
|
)
|
|
if addline == true {
|
|
line(length:length, stroke:stroke)
|
|
}
|
|
}
|
|
|
|
//-------------------------------------
|
|
// Heading shift
|
|
//
|
|
#let unshift_prefix(prefix, content) = style((s) => {
|
|
pad(left: -measure(prefix, s).width, prefix + content)
|
|
})
|
|
|
|
//-------------------------------------
|
|
// Research
|
|
//
|
|
// item, item, item and item List
|
|
//
|
|
#let enumerating_authors(
|
|
items: none,
|
|
) = {
|
|
let i = 1
|
|
if items != none {
|
|
for item in items {
|
|
if item != none {
|
|
if item.name != none and item.institute != none {
|
|
[#item.name#super(repr(item.institute))]
|
|
} else if item.name != none {
|
|
[#item.name]
|
|
}
|
|
if i < items.len() {
|
|
[, ]
|
|
}
|
|
}
|
|
i = i + 1
|
|
}
|
|
}
|
|
}
|
|
|
|
#let enumerating_institutes(
|
|
items: none,
|
|
) = {
|
|
let i = 1
|
|
if items != none {
|
|
for item in items {
|
|
if item != none {
|
|
[_#super(repr(i))_ #if item.research_group != none { [_ #item.research_group - _]} _ #item.name __, #item.address _ \ ]
|
|
i = i + 1
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//-------------------------------------
|
|
// Script
|
|
//
|
|
// item, item, item and item List
|
|
//
|
|
#let enumerating_items(
|
|
items: none,
|
|
) = {
|
|
let i = 1
|
|
if items != none {
|
|
for item in items {
|
|
if item != none {
|
|
[#item]
|
|
if i < items.len() {
|
|
[, ]
|
|
}
|
|
}
|
|
i = i + 1
|
|
}
|
|
}
|
|
}
|
|
#let enumerating_links(
|
|
names: none,
|
|
links: none,
|
|
) = {
|
|
if names != none {
|
|
let i = 0
|
|
for name in names {
|
|
if name != none {
|
|
[#link(links.at(i))[#name]]
|
|
if i+1 < names.len() {
|
|
[, ]
|
|
}
|
|
}
|
|
i = i + 1
|
|
}
|
|
}
|
|
}
|
|
#let enumerating_emails(
|
|
names: none,
|
|
emails: none,
|
|
) = {
|
|
if names != none {
|
|
let i = 0
|
|
for name in names {
|
|
if name != none {
|
|
[#link("mailto:"+emails.at(i))[#name]]
|
|
if i+1 < names.len() {
|
|
[, ]
|
|
}
|
|
}
|
|
i = i + 1
|
|
}
|
|
}
|
|
}
|
|
|
|
//-------------------------------------
|
|
// safe_link
|
|
//
|
|
#let safe_link(
|
|
name: none,
|
|
url: none,
|
|
) = {
|
|
if name != none {
|
|
if url != none {
|
|
link(url)[#name]
|
|
} else {
|
|
name
|
|
}
|
|
}
|
|
}
|
|
|
|
//-------------------------------------
|
|
// Counter
|
|
//
|
|
#let word_counter_init() = {[
|
|
#show regex("\b\w+\b"): it => counter("words").step() + it
|
|
]}
|
|
#let word_count(preamble:"Word count:") = {[
|
|
#preamble #counter("words").display()
|
|
]}
|
|
|
|
#let char_counter_init() = {
|
|
show regex(".+"): it => counter("chars").step() + it
|
|
}
|
|
#let char_count(preamble:"Char count:") = {[
|
|
#preamble #counter("chars").display()
|
|
]}
|
|
|
|
//-------------------------------------
|
|
// Option Style
|
|
//
|
|
#let option_style(
|
|
type: "draft",
|
|
size: small,
|
|
style: "italic",
|
|
fill: gray-40,
|
|
body) = {[
|
|
#if option.type == type {text(size:size, style:style, fill:fill)[#body]
|
|
}
|
|
]} |