ELN-lab-antenna/00-templates/helpers.typ
2024-04-17 08:11:16 +00:00

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]
}
]}