diff options
27 files changed, 1813 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..06767cd --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/_site/ +/.quarto/ +*-luamml-mathml.html +*.svg diff --git a/Bachelorizer.java b/Bachelorizer.java new file mode 100644 index 0000000..d30708e --- /dev/null +++ b/Bachelorizer.java @@ -0,0 +1,54 @@ +import java.util.Arrays; + +/// Bachelorizer - bachelor programme registrar +/// +/// SPDX-License-Identifier: GPL-3.0-or-later +/// SPDX-FileCopyrightText: 2025 Jonas Smedegaard <dr@jones.dk> +/// +/// Tool for registering students +/// for activities in their bachelor programme. +/// +/// Core class usable in several ways +/// * as self-contained executable via method main() +/// * embedded in a larger system by instantiating Bachelorizer() +/// +/// * v0.0.1-draft +/// * initial release, as part of delivery "Portfolio 1" +/// +/// @version 0.0.1-draft +/// @see <https://moodle.ruc.dk/mod/assign/view.php?id=523186> +public class Bachelorizer { + + public String name; + public String[] activities; + + /// Bachelorizer constructor + /// + /// @param name name of student as String + /// @param activities chosen activities as String array + public Bachelorizer( + final String name, + final String[] activities + ) { + this.name = name; + this.activities = activities; + } + + /// JVM entry point + /// + /// @param args command-line arguments (ignored) + public static void main(final String[] args) { + + // Instantiation as dictated by assignment + final int population = 10; + final int[] observationpoint = new int[] {5, 5}; + Bachelorizer session = new Bachelorizer( + "Jonas Smedegaard", + new String[] {"CS-SMC2", "CS-SMC3"}); + + // minimal viable product + System.out.printf("Hi %s%nYou chose these activities: ", + session.name); + System.out.println(Arrays.toString(session.activities)); + } +} diff --git a/Bachelorizer.puml b/Bachelorizer.puml new file mode 100644 index 0000000..65d4429 --- /dev/null +++ b/Bachelorizer.puml @@ -0,0 +1,45 @@ +@startuml +abstract class Person { + +name +} + +abstract class Employee { + +ssn +} + +class Tap { +} + +enum VipRole { + DEAN + RESEARCHER + RESEARCH_ASSISTANT +} + +class Vip { + +VipRole role +} + +class Student { +} + +Person <|-- Employee +Employee <|-- Tap +Employee <|-- Vip +Person <|-- Student + +abstract class Org { + +name +} + +class Institute { +} + +class Faculty { + +address +} + +Org <|-- Institute +Org <|-- Faculty +Institute <|-- Faculty +@enduml diff --git a/README.md b/README.md new file mode 100644 index 0000000..cf27579 --- /dev/null +++ b/README.md @@ -0,0 +1,20 @@ +# Computer Science mini project at Roskilde University _(RUC-CS2)_ + +This is a student Portfolio in three parts +as part of a Computer Science course in general programming +at Roskilde University, +done by [Jonas Smedegaard]. + +[Jonas Smedegaard]: <https://dr.jones.dk/> + +## License + +Copyright © 2025 Jonas Smedegaard + +Except when otherwise noted, +this work is licensed +under a Creative Commons Attribution-ShareAlike 4.0 International License +([CC-BY-SA-4.0]). + +[CC-BY-SA-4.0]: <https://creativecommons.org/licenses/by-sa/4.0/> + "Creative Commons Attribution-ShareAlike 4.0 International license" diff --git a/_actors.yml b/_actors.yml new file mode 100644 index 0000000..3b5806e --- /dev/null +++ b/_actors.yml @@ -0,0 +1,22 @@ +author: +- name: Jonas Smedegaard + orcid: 0009-0009-1037-0180 + url: https://dr.jones.dk/info + email: stud-jonasj@ruc.dk + affiliation: + - ref: imt + roles: writing +affiliations: +- id: imt + name: Roskilde University + department: Department of People and Technology + city: Roskilde + postal-code: 4000 + country: Denmark + url: https://ruc.dk/en/department-people-and-technology + isni: 0000 0001 0672 1325 + ror: 014axpa37 +copyright: + holder: Jonas Smedegaard + year: 2025 +license: "CC BY-SA" diff --git a/_extensions/pandoc-ext/abstract-section/_extension.yaml b/_extensions/pandoc-ext/abstract-section/_extension.yaml new file mode 100644 index 0000000..f6a946b --- /dev/null +++ b/_extensions/pandoc-ext/abstract-section/_extension.yaml @@ -0,0 +1,6 @@ +name: abstract-section +author: Albert Krewinkel +version: 1.2.0 +contributes: + filters: + - abstract-section.lua diff --git a/_extensions/pandoc-ext/abstract-section/abstract-section.lua b/_extensions/pandoc-ext/abstract-section/abstract-section.lua new file mode 100644 index 0000000..4badeb4 --- /dev/null +++ b/_extensions/pandoc-ext/abstract-section/abstract-section.lua @@ -0,0 +1,85 @@ +--[[ +abstract-section – move an "abstract" section into document metadata + +Copyright: © 2017–2023 Albert Krewinkel +License: MIT – see LICENSE file for details +]] +local stringify = (require 'pandoc.utils').stringify +local section_identifiers = { + abstract = true, +} +local collected = {} +--- The level of the highest heading that was seen so far. Abstracts +--- must be at or above this level to prevent nested sections from being +--- treated as metadata. Only top-level sections should become metadata. +local toplevel = 6 + +--- Extract abstract from a list of blocks. +local function abstract_from_blocklist (blocks) + local body_blocks = {} + local looking_at_section = false + + for _, block in ipairs(blocks) do + if block.t == 'Header' and block.level <= toplevel then + toplevel = block.level + if section_identifiers[block.identifier] then + looking_at_section = block.identifier + collected[looking_at_section] = {} + else + looking_at_section = false + body_blocks[#body_blocks + 1] = block + end + elseif looking_at_section then + if block.t == 'HorizontalRule' then + looking_at_section = false + else + local collect = collected[looking_at_section] + collect[#collect + 1] = block + end + else + body_blocks[#body_blocks + 1] = block + end + end + + return body_blocks +end + +Pandoc = function (doc) + local meta = doc.meta + + -- configure + section_identifiers_list = + (doc.meta['abstract-section'] or {})['section-identifiers'] + if section_identifiers_list and #section_identifiers_list > 0 then + section_identifiers = {} + for i, ident in ipairs(section_identifiers_list) do + section_identifiers[stringify(ident)] = true + end + end + -- unset config in meta + doc.meta['abstract-section'] = nil + + local blocks = {} + if PANDOC_VERSION >= {2,17} then + -- Walk all block lists by default + blocks = doc.blocks:walk{Blocks = abstract_from_blocklist} + elseif PANDOC_VERSION >= {2,9,2} then + -- Do the same with pandoc versions that don't have walk methods but the + -- `walk_block` function. + blocks = pandoc.utils.walk_block( + pandoc.Div(doc.blocks), + {Blocks = abstract_from_blocklist} + ).content + else + -- otherwise, just check the top-level block-list + blocks = abstract_from_blocklist(doc.blocks) + end + for metakey in pairs(section_identifiers) do + metakey = stringify(metakey) + local abstract = collected[metakey] + if not meta[metakey] and abstract and #abstract > 0 then + meta[metakey] = pandoc.MetaBlocks(abstract) + end + end + return pandoc.Pandoc(blocks, meta) +end diff --git a/_extensions/pandoc/diagram/_extension.yaml b/_extensions/pandoc/diagram/_extension.yaml new file mode 100644 index 0000000..e7c5479 --- /dev/null +++ b/_extensions/pandoc/diagram/_extension.yaml @@ -0,0 +1,7 @@ +title: diagram +author: Albert Krewinkel +version: 1.2.0 +quarto-required: ">=1.3" +contributes: + filters: + - diagram.lua diff --git a/_extensions/pandoc/diagram/diagram.lua b/_extensions/pandoc/diagram/diagram.lua new file mode 120000 index 0000000..89fc7b2 --- /dev/null +++ b/_extensions/pandoc/diagram/diagram.lua @@ -0,0 +1 @@ +/usr/share/pandoc/filter/diagram/diagram.lua
\ No newline at end of file diff --git a/_extensions/quarto-ext/include-code-files/_extension.yml b/_extensions/quarto-ext/include-code-files/_extension.yml new file mode 100644 index 0000000..13c4960 --- /dev/null +++ b/_extensions/quarto-ext/include-code-files/_extension.yml @@ -0,0 +1,9 @@ +title: Include Code Files +author: Bruno Beaufils +version: 1.0.0 +quarto-required: ">=1.2" +contributes: + filters: + - include-code-files.lua + + diff --git a/_extensions/quarto-ext/include-code-files/include-code-files.lua b/_extensions/quarto-ext/include-code-files/include-code-files.lua new file mode 100644 index 0000000..c74aa53 --- /dev/null +++ b/_extensions/quarto-ext/include-code-files/include-code-files.lua @@ -0,0 +1,130 @@ +--- include-code-files.lua – filter to include code from source files +--- +--- Copyright: © 2020 Bruno BEAUFILS +--- License: MIT – see LICENSE file for details + +--- Dedent a line +local function dedent(line, n) + return line:sub(1, n):gsub(" ", "") .. line:sub(n + 1) +end + +--- Find snippet start and end. +-- +-- Use this to populate startline and endline. +-- This should work like pandocs snippet functionality: https://github.com/owickstrom/pandoc-include-code/tree/master +local function snippet(cb, fh) + if not cb.attributes.snippet then + return + end + + -- Cannot capture enum: http://lua-users.org/wiki/PatternsTutorial + local comment + local comment_stop = "" + if + string.match(cb.attributes.include, ".py$") + or string.match(cb.attributes.include, ".jl$") + or string.match(cb.attributes.include, ".r$") + then + comment = "#" + elseif string.match(cb.attributes.include, ".o?js$") or string.match(cb.attributes.include, ".css$") then + comment = "//" + elseif string.match(cb.attributes.include, ".lua$") then + comment = "--" + elseif string.match(cb.attributes.include, ".html$") then + comment = "<!%-%-" + comment_stop = " *%-%->" + else + -- If not known assume that it is something one or two long and not alphanumeric. + comment = "%W%W?" + end + + local p_start = string.format("^ *%s start snippet %s%s", comment, cb.attributes.snippet, comment_stop) + local p_stop = string.format("^ *%s end snippet %s%s", comment, cb.attributes.snippet, comment_stop) + local start, stop = nil, nil + + -- Cannot use pairs. + local line_no = 1 + for line in fh:lines() do + if start == nil then + if string.match(line, p_start) then + start = line_no + 1 + end + elseif stop == nil then + if string.match(line, p_stop) then + stop = line_no - 1 + end + else + break + end + line_no = line_no + 1 + end + + -- Reset so nothing is broken later on. + fh:seek("set") + + -- If start and stop not found, just continue + if start == nil or stop == nil then + return nil + end + + cb.attributes.startLine = tostring(start) + cb.attributes.endLine = tostring(stop) +end + +--- Filter function for code blocks +local function transclude(cb) + if cb.attributes.include then + local content = "" + local fh = io.open(cb.attributes.include) + if not fh then + io.stderr:write("Cannot open file " .. cb.attributes.include .. " | Skipping includes\n") + else + local number = 1 + local start = 1 + + -- change hyphenated attributes to PascalCase + for i, pascal in pairs({ "startLine", "endLine" }) do + local hyphen = pascal:gsub("%u", "-%0"):lower() + if cb.attributes[hyphen] then + cb.attributes[pascal] = cb.attributes[hyphen] + cb.attributes[hyphen] = nil + end + end + + -- Overwrite startLine and stopLine with the snippet if any. + snippet(cb, fh) + + if cb.attributes.startLine then + cb.attributes.startFrom = cb.attributes.startLine + start = tonumber(cb.attributes.startLine) + end + + for line in fh:lines("L") do + if cb.attributes.dedent then + line = dedent(line, cb.attributes.dedent) + end + if number >= start then + if not cb.attributes.endLine or number <= tonumber(cb.attributes.endLine) then + content = content .. line + end + end + number = number + 1 + end + + fh:close() + end + + -- remove key-value pair for used keys + cb.attributes.include = nil + cb.attributes.startLine = nil + cb.attributes.endLine = nil + cb.attributes.dedent = nil + + -- return final code block + return pandoc.CodeBlock(content, cb.attr) + end +end + +return { + { CodeBlock = transclude }, +} diff --git a/_extensions/ruc-play/stylish-report/README.md b/_extensions/ruc-play/stylish-report/README.md new file mode 100644 index 0000000..d9ee44d --- /dev/null +++ b/_extensions/ruc-play/stylish-report/README.md @@ -0,0 +1,28 @@ +# Template customizations + +This directory contains Pandoc template files +derived from Quarto version 1.6.40. + +## Tagged PDF/A + +The PDF workflow is tweaked to embed semantically structured metadata, +a.k.a. [tagged PDF] files, +which conforms to the [PDF/A-2b] standard, +using experimental LaTeX hint +[`\DocumentMetadata` declaration][DocumentMetadata]. + +PDF/A comes in multiple flavors. +[Some guidelines] advice to use the 2b flavor, +so that is what is currently done. + +[tagged PDF]: https://taggedpdf.com/ + "tagged PDF - PDF containing semantically structured metadata" + +[PDF/A-2b]: https://pdfa.org/pdfa-faq/ + "PDF/A - PDF standards for archiving and long-term preservation" + +[DocumentMetadata]: https://ctan.org/pkg/latex-lab + "DocumentMetadata - LaTeX hint for generating modern tagged PDF" + +[Some guidelines] https://www.aalto.fi/en/services/creating-a-pdfa-compliant-file-of-your-thesis + "Aalto guide to creating a PDF/A -compliant file of your thesis" diff --git a/_extensions/ruc-play/stylish-report/TODO.md b/_extensions/ruc-play/stylish-report/TODO.md new file mode 100644 index 0000000..6e2de22 --- /dev/null +++ b/_extensions/ruc-play/stylish-report/TODO.md @@ -0,0 +1,2 @@ + * Move `revealjs.scss` below `styles/` + when Quarto can resolve font paths for RevealJS from subdir diff --git a/_extensions/ruc-play/stylish-report/_extension.yaml b/_extensions/ruc-play/stylish-report/_extension.yaml new file mode 100644 index 0000000..507eeaa --- /dev/null +++ b/_extensions/ruc-play/stylish-report/_extension.yaml @@ -0,0 +1,70 @@ +name: Stylish-report +author: Jonas Smedegaard +version: 0.0.3 +contributes: + formats: + common: + pdf: + number-sections: true + toc: true + default-image-extension: tex + colorlinks: true + hyperrefoptions: + - linktoc=all + pdf-engine: lualatex + documentclass: scrbook + classoption: + - DIV=calc + - twoside=false + csquotes: true + papersize: a4 + fontsize: 12pt + template: template.tex + template-partials: + - doc-class.tex + - title.tex + - toc.tex + + include-in-header: +# declare license + - text: | + \usepackage{hyperref} + \usepackage[type={CC}, modifier={by-sa}, version={4.0}]{doclicense} + \publishers{\vspace*{\fill}\small\par\doclicenseThis} +# recalculate page margins, since mainfont was set after documentclass + - text: | + \KOMAoptions{DIV=last} +# avoid widow or orphan lines + - text: | + \usepackage[defaultlines=4,all]{nowidow} +# implement \abstract + - text: | + \newenvironment{abstract} + {\cleardoublepage\chapter*{Abstract}\thispagestyle{empty}} + {\cleardoublepage} +# use page numbers A1, A2, A3, B1, B2 etc. for appendices + - text: | + \let\oldchapter\chapter + \newcommand*{\appendixmore}{% + \setcounter{secnumdepth}{\chapternumdepth} + \setcounter{chapter}{0}% + \setcounter{section}{0}% + \renewcommand{\thechapter}{\Alph{chapter}}% + \renewcommand{\theHchapter}{\thechapter}% + \renewcommand{\thesection}{\thechapter\arabic{section}}% + \renewcommand{\thepage}{\thechapter\arabic{page}}% + \renewcommand{\chapter}[1]{% + \oldchapter{##1}% + \setcounter{page}{1}% + }% + } + + html: + html-q-tags: true + theme: + light: [flatly, styles/british.scss] + dark: [darkly, styles/british.scss] + + revealjs: + html-q-tags: true + theme: [default, revealjs-british.ccss] diff --git a/_extensions/ruc-play/stylish-report/doc-class.tex b/_extensions/ruc-play/stylish-report/doc-class.tex new file mode 100644 index 0000000..8eff486 --- /dev/null +++ b/_extensions/ruc-play/stylish-report/doc-class.tex @@ -0,0 +1,74 @@ +\DocumentMetadata{ +% modern PDF rendering: <https://tex.stackexchange.com/a/686905/309738> +$if(lang)$ + lang={$lang$}, +$endif$ +$if(pdfversion)$ + pdfversion=$pdfversion$, +$endif$ +$for(pdfstandard)$ + pdfstandard=$pdfstandard$, +$endfor$ +$if(pdftestphase)$ +testphase= + { +$for(pdftestphase)$ + $pdftestphase$, +$endfor$ + }, +$endif$ +$if(pdfdebug)$ +debug= + { +$for(pdfdebug)$ + $pdfdebug$, +$endfor$ + }, +$endif$ +$if(pdfdebugfirstaidoff)$ +debug= + { +firstaidoff= + { +$for(pdfdebugfirstaidoff)$ + $pdfdebugfirstaidoff$, +$endfor$ + }, + }, +$endif$ +} +$if(copyright)$ +% flag as rights protected <https://tex.stackexchange.com/a/712443/309738> +\ExplSyntaxOn +\pdfmeta_xmp_add:n{<xmpRights:Marked>True</xmpRights:Marked>} +\ExplSyntaxOff +$endif$ +$if(pdftestphasestrict)$ +% fatalize tagging warnings +\ExplSyntaxOn + \msg_redirect_module:nnn { tag } { warning } { error } +\ExplSyntaxOff +$endif$ +\documentclass[ +$if(fontsize)$ + $fontsize$, +$endif$ +$if(papersize)$ + $papersize$paper, +$endif$ +$if(beamer)$ + ignorenonframetext, +$if(handout)$ + handout, +$endif$ +$if(aspectratio)$ + aspectratio=$aspectratio$, +$endif$ +$if(babel-lang)$ + $babel-lang$, +$endif$ +$endif$ +$for(classoption)$ + $classoption$$sep$, +$endfor$ +]{$documentclass$} diff --git a/_extensions/ruc-play/stylish-report/revealjs-british.scss b/_extensions/ruc-play/stylish-report/revealjs-british.scss new file mode 100644 index 0000000..4d41fb3 --- /dev/null +++ b/_extensions/ruc-play/stylish-report/revealjs-british.scss @@ -0,0 +1,10 @@ +/*-- scss:mixins --*/ + +scss @import 'revealjs'; + +/*-- scss:rules --*/ + +// use british style quotation +q { + quotes: "‘" "’" "“" "”"; +} diff --git a/_extensions/ruc-play/stylish-report/revealjs.scss b/_extensions/ruc-play/stylish-report/revealjs.scss new file mode 100644 index 0000000..2c7c1c8 --- /dev/null +++ b/_extensions/ruc-play/stylish-report/revealjs.scss @@ -0,0 +1,4 @@ +/*-- scss:defaults --*/ + +// avoid web-loading internally declared default Bootswatch font +$web-font-path: ""; diff --git a/_extensions/ruc-play/stylish-report/styles/british.scss b/_extensions/ruc-play/stylish-report/styles/british.scss new file mode 100644 index 0000000..613dd3f --- /dev/null +++ b/_extensions/ruc-play/stylish-report/styles/british.scss @@ -0,0 +1,10 @@ +/*-- scss:mixins --*/ + +scss @import 'common'; + +/*-- scss:rules --*/ + +// use british style quotation +q { + quotes: "‘" "’" "“" "”"; +} diff --git a/_extensions/ruc-play/stylish-report/styles/common.scss b/_extensions/ruc-play/stylish-report/styles/common.scss new file mode 100644 index 0000000..2c7c1c8 --- /dev/null +++ b/_extensions/ruc-play/stylish-report/styles/common.scss @@ -0,0 +1,4 @@ +/*-- scss:defaults --*/ + +// avoid web-loading internally declared default Bootswatch font +$web-font-path: ""; diff --git a/_extensions/ruc-play/stylish-report/template.tex b/_extensions/ruc-play/stylish-report/template.tex new file mode 100644 index 0000000..26d8fe6 --- /dev/null +++ b/_extensions/ruc-play/stylish-report/template.tex @@ -0,0 +1,455 @@ +% Options for packages loaded elsewhere +\PassOptionsToPackage{unicode$for(hyperrefoptions)$,$hyperrefoptions$$endfor$}{hyperref} +\PassOptionsToPackage{hyphens}{url} +$if(colorlinks)$ +\PassOptionsToPackage{dvipsnames,svgnames,x11names}{xcolor} +$endif$ +$if(CJKmainfont)$ +\PassOptionsToPackage{space}{xeCJK} +$endif$ +% +$doc-class.tex()$ + +$if(beamer)$ +$if(background-image)$ +\usebackgroundtemplate{% + \includegraphics[width=\paperwidth]{$background-image$}% +} +% In beamer background-image does not work well when other images are used, so this is the workaround +\pgfdeclareimage[width=\paperwidth,height=\paperheight]{background}{$background-image$} +\usebackgroundtemplate{\pgfuseimage{background}} +$endif$ +\usepackage{pgfpages} +\setbeamertemplate{caption}[numbered] +\setbeamertemplate{caption label separator}{: } +\setbeamercolor{caption name}{fg=normal text.fg} +\beamertemplatenavigationsymbols$if(navigation)$$navigation$$else$empty$endif$ +$for(beameroption)$ +\setbeameroption{$beameroption$} +$endfor$ +% Prevent slide breaks in the middle of a paragraph +\widowpenalties 1 10000 +\raggedbottom +$if(section-titles)$ +\setbeamertemplate{part page}{ + \centering + \begin{beamercolorbox}[sep=16pt,center]{part title} + \usebeamerfont{part title}\insertpart\par + \end{beamercolorbox} +} +\setbeamertemplate{section page}{ + \centering + \begin{beamercolorbox}[sep=12pt,center]{section title} + \usebeamerfont{section title}\insertsection\par + \end{beamercolorbox} +} +\setbeamertemplate{subsection page}{ + \centering + \begin{beamercolorbox}[sep=8pt,center]{subsection title} + \usebeamerfont{subsection title}\insertsubsection\par + \end{beamercolorbox} +} +\AtBeginPart{ + \frame{\partpage} +} +\AtBeginSection{ + \ifbibliography + \else + \frame{\sectionpage} + \fi +} +\AtBeginSubsection{ + \frame{\subsectionpage} +} +$endif$ +$endif$ +$if(beamerarticle)$ +\usepackage{beamerarticle} % needs to be loaded first +$endif$ + +\usepackage{amsmath,amssymb} +$if(linestretch)$ +\usepackage{setspace} +$endif$ +\usepackage{iftex} +\ifPDFTeX + \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{textcomp} % provide euro and other symbols +\else % if luatex or xetex +$if(mathspec)$ + \ifXeTeX + \usepackage{mathspec} % this also loads fontspec + \else + \usepackage{unicode-math} % this also loads fontspec + \fi +$else$ + \usepackage{unicode-math} +$endif$ + \defaultfontfeatures{Scale=MatchLowercase}$-- must come before Beamer theme + \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1} +\fi +$if(fontfamily)$ +$else$ +$-- Set default font before Beamer theme so the theme can override it +\usepackage{lmodern} +$endif$ +$-- Set Beamer theme before user font settings so they can override theme +$if(beamer)$ +$if(theme)$ +\usetheme[$for(themeoptions)$$themeoptions$$sep$,$endfor$]{$theme$} +$endif$ +$if(colortheme)$ +\usecolortheme{$colortheme$} +$endif$ +$if(fonttheme)$ +\usefonttheme{$fonttheme$} +$endif$ +$if(mainfont)$ +\usefonttheme{serif} % use mainfont rather than sansfont for slide text +$endif$ +$if(innertheme)$ +\useinnertheme{$innertheme$} +$endif$ +$if(outertheme)$ +\useoutertheme{$outertheme$} +$endif$ +$endif$ +$-- User font settings (must come after default font and Beamer theme) +$if(fontfamily)$ +\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} +$endif$ +\ifPDFTeX\else + % xetex/luatex font selection +$if(mainfont)$ + $if(mainfontfallback)$ + \ifLuaTeX + \usepackage{luaotfload} + \directlua{luaotfload.add_fallback("mainfontfallback",{ + $for(mainfontfallback)$"$mainfontfallback$"$sep$,$endfor$ + })} + \fi + $endif$ + \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$$if(mainfontfallback)$,RawFeature={fallback=mainfontfallback}$endif$]{$mainfont$} +$endif$ +$if(sansfont)$ + $if(sansfontfallback)$ + \ifLuaTeX + \usepackage{luaotfload} + \directlua{luaotfload.add_fallback("sansfontfallback",{ + $for(sansfontfallback)$"$sansfontfallback$"$sep$,$endfor$ + })} + \fi + $endif$ + \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$$if(sansfontfallback)$,RawFeature={fallback=sansfontfallback}$endif$]{$sansfont$} +$endif$ +$if(monofont)$ + $if(monofontfallback)$ + \ifLuaTeX + \usepackage{luaotfload} + \directlua{luaotfload.add_fallback("monofontfallback",{ + $for(monofontfallback)$"$monofontfallback$"$sep$,$endfor$ + })} + \fi + $endif$ + \setmonofont[$for(monofontoptions)$$monofontoptions$$sep$,$endfor$$if(monofontfallback)$,RawFeature={fallback=monofontfallback}$endif$]{$monofont$} +$endif$ +$for(fontfamilies)$ + \newfontfamily{$fontfamilies.name$}[$for(fontfamilies.options)$$fontfamilies.options$$sep$,$endfor$]{$fontfamilies.font$} +$endfor$ +$if(mathfont)$ +$if(mathspec)$ + \ifXeTeX + \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \else + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \fi +$else$ + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} +$endif$ +$endif$ +$if(CJKmainfont)$ + \ifXeTeX + \usepackage{xeCJK} + \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + $if(CJKsansfont)$ + \setCJKsansfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKsansfont$} + $endif$ + $if(CJKmonofont)$ + \setCJKmonofont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmonofont$} + $endif$ + \fi +$endif$ +$if(luatexjapresetoptions)$ + \ifLuaTeX + \usepackage[$for(luatexjapresetoptions)$$luatexjapresetoptions$$sep$,$endfor$]{luatexja-preset} + \fi +$endif$ +$if(CJKmainfont)$ + \ifLuaTeX + \usepackage[$for(luatexjafontspecoptions)$$luatexjafontspecoptions$$sep$,$endfor$]{luatexja-fontspec} + \setmainjfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +\fi +$if(zero-width-non-joiner)$ +%% Support for zero-width non-joiner characters. +\makeatletter +\def\zerowidthnonjoiner{% + % Prevent ligatures and adjust kerning, but still support hyphenating. + \texorpdfstring{% + \TextOrMath{\nobreak\discretionary{-}{}{\kern.03em}% + \ifvmode\else\nobreak\hskip\z@skip\fi}{}% + }{}% +} +\makeatother +\ifPDFTeX + \DeclareUnicodeCharacter{200C}{\zerowidthnonjoiner} +\else + \catcode`^^^^200c=\active + \protected\def ^^^^200c{\zerowidthnonjoiner} +\fi +%% End of ZWNJ support +$endif$ +% Use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +\IfFileExists{microtype.sty}{% use microtype if available + \usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype} + \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +$if(indent)$ +$else$ +\makeatletter +\@ifundefined{KOMAClassName}{% if non-KOMA class + \IfFileExists{parskip.sty}{% + \usepackage{parskip} + }{% else + \setlength{\parindent}{0pt} + \setlength{\parskip}{6pt plus 2pt minus 1pt}} +}{% if KOMA class + \KOMAoptions{parskip=half}} +\makeatother +$endif$ +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +$endif$ +\usepackage{xcolor} +$if(geometry)$ +$if(beamer)$ +\geometry{$for(geometry)$$geometry$$sep$,$endfor$} +$else$ +\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} +$endif$ +$endif$ +$if(beamer)$ +\newif\ifbibliography +$endif$ +$if(listings)$ +\usepackage{listings} +\newcommand{\passthrough}[1]{#1} +\lstset{defaultdialect=[5.3]Lua} +\lstset{defaultdialect=[x86masm]Assembler} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +$if(svg)$ +\usepackage{svg} +$endif$ +$if(strikeout)$ +$-- also used for underline +\ifLuaTeX + \usepackage{luacolor} + \usepackage[soul]{lua-ul} +\else + \usepackage{soul} +$if(beamer)$ + \makeatletter + \let\HL\hl + \renewcommand\hl{% fix for beamer highlighting + \let\set@color\beamerorig@set@color + \let\reset@color\beamerorig@reset@color + \HL} + \makeatother +$endif$ +$if(CJKmainfont)$ +\ifXeTeX + % soul's \st doesn't work for CJK: + \usepackage{xeCJKfntef} + \renewcommand{\st}[1]{\sout{#1}} +\fi +$endif$ +\fi +$endif$ +\setlength{\emergencystretch}{3em} % prevent overfull lines +$if(numbersections)$ +\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} +$else$ +\setcounter{secnumdepth}{-\maxdimen} % remove section numbering +$endif$ +$if(beamer)$ +$else$ +$if(block-headings)$ +% Make \paragraph and \subparagraph free-standing +\makeatletter +\ifx\paragraph\undefined\else + \let\oldparagraph\paragraph + \renewcommand{\paragraph}{ + \@ifstar + \xxxParagraphStar + \xxxParagraphNoStar + } + \newcommand{\xxxParagraphStar}[1]{\oldparagraph*{#1}\mbox{}} + \newcommand{\xxxParagraphNoStar}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else + \let\oldsubparagraph\subparagraph + \renewcommand{\subparagraph}{ + \@ifstar + \xxxSubParagraphStar + \xxxSubParagraphNoStar + } + \newcommand{\xxxSubParagraphStar}[1]{\oldsubparagraph*{#1}\mbox{}} + \newcommand{\xxxSubParagraphNoStar}[1]{\oldsubparagraph{#1}\mbox{}} +\fi +\makeatother +$endif$ +$endif$ +$if(pagestyle)$ +\pagestyle{$pagestyle$} +$endif$ +$pandoc.tex()$ + +$if(lang)$ +\ifLuaTeX +\usepackage[bidi=basic]{babel} +\else +\usepackage[bidi=default]{babel} +\fi +$if(babel-lang)$ +\babelprovide[main,import]{$babel-lang$} +$if(mainfont)$ +\ifPDFTeX +\else +\babelfont{rm}[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$$if(mainfontfallback)$,RawFeature={fallback=mainfontfallback}$endif$]{$mainfont$} +\fi +$endif$ +$endif$ +$for(babel-otherlangs)$ +\babelprovide[import]{$babel-otherlangs$} +$endfor$ +$for(babelfonts/pairs)$ +\babelfont[$babelfonts.key$]{rm}{$babelfonts.value$} +$endfor$ +% get rid of language-specific shorthands (see #6817): +\let\LanguageShortHands\languageshorthands +\def\languageshorthands#1{} +$if(selnolig-langs)$ +\ifLuaTeX + \usepackage[$for(selnolig-langs)$$it$$sep$,$endfor$]{selnolig} % disable illegal ligatures +\fi +$endif$ +$endif$ +$if(dir)$ +\ifPDFTeX + \TeXXeTstate=1 + \newcommand{\RL}[1]{\beginR #1\endR} + \newcommand{\LR}[1]{\beginL #1\endL} + \newenvironment{RTL}{\beginR}{\endR} + \newenvironment{LTR}{\beginL}{\endL} +\fi +$endif$ +$if(biblio-config)$ +$if(natbib)$ +\usepackage[$natbiboptions$]{natbib} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(biblatex)$ +\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} +$for(bibliography)$ +\addbibresource{$bibliography$} +$endfor$ +$endif$ +$endif$ +$if(nocite-ids)$ +\nocite{$for(nocite-ids)$$it$$sep$, $endfor$} +$endif$ +$if(csquotes)$ +\usepackage{csquotes} +$endif$ +\usepackage{bookmark} + +\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available +\urlstyle{same} % disable monospaced font for URLs +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\DeclareRobustCommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(verbatim-in-note)$ +\VerbatimFootnotes % allow verbatim text in footnotes +$endif$ +\hypersetup{ +$if(title-meta)$ + pdftitle={$title-meta$}, +$endif$ +$if(author-meta)$ + pdfauthor={$for(by-author)$$if(it.metadata.credit.supervision)$$else$$it.name.literal$$endif$$sep$,$endfor$}, +$endif$ +$if(lang)$ + pdflang={$lang$}, +$endif$ +$if(subject)$ + pdfsubject={$subject$}, +$endif$ +$if(keywords)$ + pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$}, +$endif$ +$if(colorlinks)$ + colorlinks=true, + $if(linkcolor)$linkcolor={$linkcolor$}$endif$, + $if(filecolor)$filecolor={$filecolor$}$endif$, + $if(citecolor)$citecolor={$citecolor$}$endif$, + $if(urlcolor)$urlcolor={$urlcolor$}$endif$, +$else$ +$if(boxlinks)$ +$else$ + hidelinks, +$endif$ +$endif$ + pdfcreator={LaTeX via pandoc}} + +$before-title.tex()$ + +$title.tex()$ + +\begin{document} +$before-body.tex()$ + +$for(include-before)$ +$include-before$ + +$endfor$ +$toc.tex()$ + +$if(linestretch)$ +\setstretch{$linestretch$} +$endif$ +$if(has-frontmatter)$ +\mainmatter +$endif$ +$body$ + +$before-bib.tex()$ + +$if(has-frontmatter)$ +\backmatter +$endif$ +$biblio.tex()$ + +$for(include-after)$ +$include-after$ + +$endfor$ +$after-body.tex()$ + +\end{document} diff --git a/_extensions/ruc-play/stylish-report/title.tex b/_extensions/ruc-play/stylish-report/title.tex new file mode 100644 index 0000000..8fda033 --- /dev/null +++ b/_extensions/ruc-play/stylish-report/title.tex @@ -0,0 +1,98 @@ +$if(title)$ +\title{$title$$if(thanks)$\thanks{$thanks$}$endif$} +$endif$ +$if(subtitle)$ +$if(beamer)$ +$else$ +\usepackage{etoolbox} +\makeatletter +\providecommand{\subtitle}[1]{% add subtitle to \maketitle + \apptocmd{\@title}{\par {\large #1 \par}}{}{} +} +\makeatother +$endif$ +\subtitle{$subtitle$} +$endif$ +\usepackage{marvosym} +\usepackage{authblk,academicons} +%\renewcommand*{\Authand}{ og } +%\renewcommand*{\Authands}{ og } +\renewcommand*{\Authsep}{\authorcr} +\renewcommand*{\Authand}{\authorcr} +\renewcommand*{\Authands}{\newline} %%new line after each author +\renewcommand{\Affilfont}{\small} +\newcommand*{\orcid}[1]{\href{https://orcid.org/#1}{\textcolor[HTML]{A6CE39}{\aiOrcid}}} +\newcommand*{\rorid}[1]{\href{https://ror.org/#1}{\aiROR}} +$for(by-author)$ +$if(it.metadata.credit.supervision)$ +$else$ +\author[$for(it.affiliations)$$it.number$$endfor$$if(it.attributes.equal-contributor)$,\YinYang$endif$$if(it.attributes.corresponding)$,∗$endif$]{% + $if(it.url)$% + \href{$it.url$}{% + $endif$% + $it.name.literal$% + $if(it.metadata.alternate)$% + \ ($for(it.metadata.alternate)$$it$$sep$,$endfor$)% + $endif$% + $if(it.url)$% + }% + $endif$% + $if(it.orcid)$% + \,\orcid{$it.orcid$}% + $endif$% +} +$endif$ +$endfor$ +$for(by-author)$ +$if(it.metadata.credit.supervision)$ +\author[$for(it.affiliations)$$it.number$$endfor$]{% + \vspace{1em} + Supervisor: + $if(it.url)$% + \href{$it.url$}{% + $endif$% + $it.name.literal$% + $if(it.metadata.alternate)$% + \ ($for(it.metadata.alternate)$$it$$sep$,$endfor$)% + $endif$% + $if(it.url)$% + }% + $endif$% + $if(it.orcid)$% + \,\orcid{$it.orcid$}% + $endif$% +} +$endif$ +$endfor$ +$for(by-affiliation)$ +\affil[$it.number$]{% + $it.name$% + $if(it.department)$% + \\$it.department$% + $endif$% + $if(it.ror)$% + \,\rorid{$it.ror$}% + $endif$% +} +$endfor$ +$if(some-author-has.attributes.equal-contributor)$ +\affil[\YinYang]{These authors contributed equally to this work.} +$endif$ +$if(some-author-has.attributes.corresponding)$ +$for(by-author)$ +$if(it.attributes.corresponding)$% +\affil[∗]{Corresponding author: \href{mailto:$it.email$}{$it.email$}} +$endif$ +$endfor$ +$endif$ +\date{$date$} +$if(beamer)$ +$if(institute)$ +\institute{$for(institute)$$institute$$sep$ \and $endfor$} +$endif$ +$if(titlegraphic)$ +\titlegraphic{\includegraphics$if(titlegraphicoptions)$[$for(titlegraphicoptions)$$titlegraphicoptions$$sep$, $endfor$]$endif${$titlegraphic$}}$endif$ +$if(logo)$ +\logo{\includegraphics{$logo$}} +$endif$ +$endif$ diff --git a/_extensions/ruc-play/stylish-report/toc.tex b/_extensions/ruc-play/stylish-report/toc.tex new file mode 100644 index 0000000..95cffff --- /dev/null +++ b/_extensions/ruc-play/stylish-report/toc.tex @@ -0,0 +1,28 @@ +$if(toc)$ +$if(toc-title)$ +\renewcommand*\contentsname{$toc-title$} +$endif$ +$if(beamer)$ +\begin{frame}[allowframebreaks] +$if(toc-title)$ + \frametitle{$toc-title$} +$endif$ + \setcounter{tocdepth}{$toc-depth$} + \tableofcontents +\end{frame} +$else$ +{ +$if(colorlinks)$ +\hypersetup{$if(toccolor)$linkcolor=$toccolor$$endif$} +$endif$ +\setcounter{tocdepth}{$toc-depth$} +\tableofcontents +} +$endif$ +$endif$ +$if(lof)$ +\listoffigures +$endif$ +$if(lot)$ +\listoftables +$endif$
\ No newline at end of file diff --git a/_extensions/ruc-play/stylish-report/x/template.tex b/_extensions/ruc-play/stylish-report/x/template.tex new file mode 100644 index 0000000..f5c5055 --- /dev/null +++ b/_extensions/ruc-play/stylish-report/x/template.tex @@ -0,0 +1,466 @@ +% Options for packages loaded elsewhere +\PassOptionsToPackage{unicode$for(hyperrefoptions)$,$hyperrefoptions$$endfor$}{hyperref} +\PassOptionsToPackage{hyphens}{url} +$if(colorlinks)$ +\PassOptionsToPackage{dvipsnames,svgnames,x11names}{xcolor} +$endif$ +$if(CJKmainfont)$ +\PassOptionsToPackage{space}{xeCJK} +$endif$ +% +$doc-class.tex()$ + +$if(beamer)$ +$if(background-image)$ +\usebackgroundtemplate{% + \includegraphics[width=\paperwidth]{$background-image$}% +} +% In beamer background-image does not work well when other images are used, so this is the workaround +\pgfdeclareimage[width=\paperwidth,height=\paperheight]{background}{$background-image$} +\usebackgroundtemplate{\pgfuseimage{background}} +$endif$ +\usepackage{pgfpages} +\setbeamertemplate{caption}[numbered] +\setbeamertemplate{caption label separator}{: } +\setbeamercolor{caption name}{fg=normal text.fg} +\beamertemplatenavigationsymbols$if(navigation)$$navigation$$else$empty$endif$ +$for(beameroption)$ +\setbeameroption{$beameroption$} +$endfor$ +% Prevent slide breaks in the middle of a paragraph +\widowpenalties 1 10000 +\raggedbottom +$if(section-titles)$ +\setbeamertemplate{part page}{ + \centering + \begin{beamercolorbox}[sep=16pt,center]{part title} + \usebeamerfont{part title}\insertpart\par + \end{beamercolorbox} +} +\setbeamertemplate{section page}{ + \centering + \begin{beamercolorbox}[sep=12pt,center]{section title} + \usebeamerfont{section title}\insertsection\par + \end{beamercolorbox} +} +\setbeamertemplate{subsection page}{ + \centering + \begin{beamercolorbox}[sep=8pt,center]{subsection title} + \usebeamerfont{subsection title}\insertsubsection\par + \end{beamercolorbox} +} +\AtBeginPart{ + \frame{\partpage} +} +\AtBeginSection{ + \ifbibliography + \else + \frame{\sectionpage} + \fi +} +\AtBeginSubsection{ + \frame{\subsectionpage} +} +$endif$ +$endif$ +$if(beamerarticle)$ +\usepackage{beamerarticle} % needs to be loaded first +$endif$ + +\usepackage{amsmath,amssymb} +$if(linestretch)$ +\usepackage{setspace} +$endif$ +\usepackage{iftex} +\ifPDFTeX + \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{textcomp} % provide euro and other symbols +\else % if luatex or xetex +$if(mathspec)$ + \ifXeTeX + \usepackage{mathspec} % this also loads fontspec + \else + \usepackage{unicode-math} % this also loads fontspec + \fi +$else$ + \usepackage{unicode-math} +$endif$ + \defaultfontfeatures{Scale=MatchLowercase}$-- must come before Beamer theme + \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1} +\fi +$if(fontfamily)$ +$else$ +$-- Set default font before Beamer theme so the theme can override it +\usepackage{lmodern} +$endif$ +$-- Set Beamer theme before user font settings so they can override theme +$if(beamer)$ +$if(theme)$ +\usetheme[$for(themeoptions)$$themeoptions$$sep$,$endfor$]{$theme$} +$endif$ +$if(colortheme)$ +\usecolortheme{$colortheme$} +$endif$ +$if(fonttheme)$ +\usefonttheme{$fonttheme$} +$endif$ +$if(mainfont)$ +\usefonttheme{serif} % use mainfont rather than sansfont for slide text +$endif$ +$if(innertheme)$ +\useinnertheme{$innertheme$} +$endif$ +$if(outertheme)$ +\useoutertheme{$outertheme$} +$endif$ +$endif$ +$-- User font settings (must come after default font and Beamer theme) +$if(fontfamily)$ +\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} +$endif$ +\ifPDFTeX\else + % xetex/luatex font selection +$if(mainfont)$ + $if(mainfontfallback)$ + \ifLuaTeX + \usepackage{luaotfload} + \directlua{luaotfload.add_fallback("mainfontfallback",{ + $for(mainfontfallback)$"$mainfontfallback$"$sep$,$endfor$ + })} + \fi + $endif$ + \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$$if(mainfontfallback)$,RawFeature={fallback=mainfontfallback}$endif$]{$mainfont$} +$endif$ +$if(sansfont)$ + $if(sansfontfallback)$ + \ifLuaTeX + \usepackage{luaotfload} + \directlua{luaotfload.add_fallback("sansfontfallback",{ + $for(sansfontfallback)$"$sansfontfallback$"$sep$,$endfor$ + })} + \fi + $endif$ + \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$$if(sansfontfallback)$,RawFeature={fallback=sansfontfallback}$endif$]{$sansfont$} +$endif$ +$if(monofont)$ + $if(monofontfallback)$ + \ifLuaTeX + \usepackage{luaotfload} + \directlua{luaotfload.add_fallback("monofontfallback",{ + $for(monofontfallback)$"$monofontfallback$"$sep$,$endfor$ + })} + \fi + $endif$ + \setmonofont[$for(monofontoptions)$$monofontoptions$$sep$,$endfor$$if(monofontfallback)$,RawFeature={fallback=monofontfallback}$endif$]{$monofont$} +$endif$ +$for(fontfamilies)$ + \newfontfamily{$fontfamilies.name$}[$for(fontfamilies.options)$$fontfamilies.options$$sep$,$endfor$]{$fontfamilies.font$} +$endfor$ +$if(mathfont)$ +$if(mathspec)$ + \ifXeTeX + \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \else + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \fi +$else$ + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} +$endif$ +$endif$ +$if(CJKmainfont)$ + \ifXeTeX + \usepackage{xeCJK} + \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + $if(CJKsansfont)$ + \setCJKsansfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKsansfont$} + $endif$ + $if(CJKmonofont)$ + \setCJKmonofont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmonofont$} + $endif$ + \fi +$endif$ +$if(luatexjapresetoptions)$ + \ifLuaTeX + \usepackage[$for(luatexjapresetoptions)$$luatexjapresetoptions$$sep$,$endfor$]{luatexja-preset} + \fi +$endif$ +$if(CJKmainfont)$ + \ifLuaTeX + \usepackage[$for(luatexjafontspecoptions)$$luatexjafontspecoptions$$sep$,$endfor$]{luatexja-fontspec} + \setmainjfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +\fi +$if(zero-width-non-joiner)$ +%% Support for zero-width non-joiner characters. +\makeatletter +\def\zerowidthnonjoiner{% + % Prevent ligatures and adjust kerning, but still support hyphenating. + \texorpdfstring{% + \TextOrMath{\nobreak\discretionary{-}{}{\kern.03em}% + \ifvmode\else\nobreak\hskip\z@skip\fi}{}% + }{}% +} +\makeatother +\ifPDFTeX + \DeclareUnicodeCharacter{200C}{\zerowidthnonjoiner} +\else + \catcode`^^^^200c=\active + \protected\def ^^^^200c{\zerowidthnonjoiner} +\fi +%% End of ZWNJ support +$endif$ +% Use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +\IfFileExists{microtype.sty}{% use microtype if available + \usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype} + \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +$if(indent)$ +$else$ +\makeatletter +\@ifundefined{KOMAClassName}{% if non-KOMA class + \IfFileExists{parskip.sty}{% + \usepackage{parskip} + }{% else + \setlength{\parindent}{0pt} + \setlength{\parskip}{6pt plus 2pt minus 1pt}} +}{% if KOMA class + \KOMAoptions{parskip=half}} +\makeatother +$endif$ +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +$endif$ +\usepackage{xcolor} +$if(geometry)$ +$if(beamer)$ +\geometry{$for(geometry)$$geometry$$sep$,$endfor$} +$else$ +\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} +$endif$ +$endif$ +$if(beamer)$ +\newif\ifbibliography +$endif$ +$if(listings)$ +\usepackage{listings} +\newcommand{\passthrough}[1]{#1} +\lstset{defaultdialect=[5.3]Lua} +\lstset{defaultdialect=[x86masm]Assembler} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +$if(svg)$ +\usepackage{svg} +$endif$ +$if(strikeout)$ +$-- also used for underline +\ifLuaTeX + \usepackage{luacolor} + \usepackage[soul]{lua-ul} +\else + \usepackage{soul} +$if(beamer)$ + \makeatletter + \let\HL\hl + \renewcommand\hl{% fix for beamer highlighting + \let\set@color\beamerorig@set@color + \let\reset@color\beamerorig@reset@color + \HL} + \makeatother +$endif$ +$if(CJKmainfont)$ +\ifXeTeX + % soul's \st doesn't work for CJK: + \usepackage{xeCJKfntef} + \renewcommand{\st}[1]{\sout{#1}} +\fi +$endif$ +\fi +$endif$ +\setlength{\emergencystretch}{3em} % prevent overfull lines +$if(numbersections)$ +\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} +$else$ +\setcounter{secnumdepth}{-\maxdimen} % remove section numbering +$endif$ +$if(beamer)$ +$else$ +$if(block-headings)$ +% Make \paragraph and \subparagraph free-standing +\makeatletter +\ifx\paragraph\undefined\else + \let\oldparagraph\paragraph + \renewcommand{\paragraph}{ + \@ifstar + \xxxParagraphStar + \xxxParagraphNoStar + } + \newcommand{\xxxParagraphStar}[1]{\oldparagraph*{#1}\mbox{}} + \newcommand{\xxxParagraphNoStar}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else + \let\oldsubparagraph\subparagraph + \renewcommand{\subparagraph}{ + \@ifstar + \xxxSubParagraphStar + \xxxSubParagraphNoStar + } + \newcommand{\xxxSubParagraphStar}[1]{\oldsubparagraph*{#1}\mbox{}} + \newcommand{\xxxSubParagraphNoStar}[1]{\oldsubparagraph{#1}\mbox{}} +\fi +\makeatother +$endif$ +$endif$ +$if(pagestyle)$ +\pagestyle{$pagestyle$} +$endif$ +$pandoc.tex()$ + +$if(lang)$ +\ifLuaTeX +$if(babel-lang)$ +% use classic babel syntax: <https://github.com/jgm/pandoc/issues/8283> +\usepackage[main=$babel-lang$,$for(babel-otherlangs)$$babel-otherlangs$$sep$,$endfor$,provide=*,bidi=basic]{babel} +$else$ +\usepackage[bidi=basic]{babel} +$endif$ +\else +\usepackage[bidi=default]{babel} +\fi +$if(babel-lang)$ +\ifLuaTeX +\else +\babelprovide[main,import]{$babel-lang$} +\fi +$if(mainfont)$ +\ifPDFTeX +\else +\babelfont{rm}[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$$if(mainfontfallback)$,RawFeature={fallback=mainfontfallback}$endif$]{$mainfont$} +\fi +$endif$ +$endif$ +\ifLuaTeX +\else +$for(babel-otherlangs)$ +\babelprovide[import]{$babel-otherlangs$} +\fi +$endfor$ +$for(babelfonts/pairs)$ +\babelfont[$babelfonts.key$]{rm}{$babelfonts.value$} +$endfor$ +% get rid of language-specific shorthands (see #6817): +\let\LanguageShortHands\languageshorthands +\def\languageshorthands#1{} +$if(selnolig-langs)$ +\ifLuaTeX + \usepackage[$for(selnolig-langs)$$it$$sep$,$endfor$]{selnolig} % disable illegal ligatures +\fi +$endif$ +$endif$ +$if(dir)$ +\ifPDFTeX + \TeXXeTstate=1 + \newcommand{\RL}[1]{\beginR #1\endR} + \newcommand{\LR}[1]{\beginL #1\endL} + \newenvironment{RTL}{\beginR}{\endR} + \newenvironment{LTR}{\beginL}{\endL} +\fi +$endif$ +$if(biblio-config)$ +$if(natbib)$ +\usepackage[$natbiboptions$]{natbib} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(biblatex)$ +\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} +$for(bibliography)$ +\addbibresource{$bibliography$} +$endfor$ +$endif$ +$endif$ +$if(nocite-ids)$ +\nocite{$for(nocite-ids)$$it$$sep$, $endfor$} +$endif$ +$if(csquotes)$ +\usepackage{csquotes} +$endif$ +\usepackage{bookmark} + +\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available +\urlstyle{same} % disable monospaced font for URLs +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\DeclareRobustCommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(verbatim-in-note)$ +\VerbatimFootnotes % allow verbatim text in footnotes +$endif$ +\hypersetup{ +$if(title-meta)$ + pdftitle={$title-meta$}, +$endif$ +$if(author-meta)$ + pdfauthor={$for(by-author)$$if(it.metadata.credit.supervision)$$else$$it.name.literal$$endif$$sep$,$endfor$}, +$endif$ +$if(lang)$ + pdflang={$lang$}, +$endif$ +$if(subject)$ + pdfsubject={$subject$}, +$endif$ +$if(keywords)$ + pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$}, +$endif$ +$if(colorlinks)$ + colorlinks=true, + $if(linkcolor)$linkcolor={$linkcolor$}$endif$, + $if(filecolor)$filecolor={$filecolor$}$endif$, + $if(citecolor)$citecolor={$citecolor$}$endif$, + $if(urlcolor)$urlcolor={$urlcolor$}$endif$, +$else$ +$if(boxlinks)$ +$else$ + hidelinks, +$endif$ +$endif$ + pdfcreator={LaTeX via pandoc}} + +$before-title.tex()$ + +$title.tex()$ + +\begin{document} +$before-body.tex()$ + +$for(include-before)$ +$include-before$ + +$endfor$ +$toc.tex()$ + +$if(linestretch)$ +\setstretch{$linestretch$} +$endif$ +$if(has-frontmatter)$ +\mainmatter +$endif$ +$body$ + +$before-bib.tex()$ + +$if(has-frontmatter)$ +\backmatter +$endif$ +$biblio.tex()$ + +$for(include-after)$ +$include-after$ + +$endfor$ +$after-body.tex()$ + +\end{document} diff --git a/_extensions/ruc-play/stylish-roles/_extension.yaml b/_extensions/ruc-play/stylish-roles/_extension.yaml new file mode 100644 index 0000000..190c698 --- /dev/null +++ b/_extensions/ruc-play/stylish-roles/_extension.yaml @@ -0,0 +1,6 @@ +name: stylish-roles +author: Jonas Smedegaard +version: 0.0.1 +contributes: + filters: + - stylish-roles.lua diff --git a/_extensions/ruc-play/stylish-roles/stylish-roles.lua b/_extensions/ruc-play/stylish-roles/stylish-roles.lua new file mode 100644 index 0000000..50caf71 --- /dev/null +++ b/_extensions/ruc-play/stylish-roles/stylish-roles.lua @@ -0,0 +1,54 @@ +--[[ +stylish-roles - provide existence hints for attributes and CrediT roles +as authors[*].metadata.credit[role], by-author[*].metadata.credit[role], +some-author-has[*].credit[role] and some-author-has.attributes[attribute]. + +Copyright: © 2024 Jonas Smedegaard <dr@jones.dk +License: MIT – see LICENSE file for details +]] +function Meta(meta) + local attributes = {"corresponding", "equal-contributor"} + + for _, author in ipairs(meta.authors) do + if author.roles then + local _by = meta["by-author"][tonumber(author.number)] + local _some = meta["some-author-has"] + + for _, role in ipairs(author.roles) do + if role["vocab-term"] then + + -- create if missing + author.metadata.credit = author.metadata.credit or {} + _by.metadata.credit = _by.metadata.credit or {} + meta["some-author-has"] = meta["some-author-has"] or {} + meta["some-author-has"].credit = meta["some-author-has"].credit or {} + + author.metadata.credit[role["vocab-term"]] = true + _by.metadata.credit[role["vocab-term"]] = true + meta["some-author-has"].credit[role["vocab-term"]] = true + + -- debugging aid + --error(pandoc.utils.stringify(author.name.literal) + -- .. " does " .. role["vocab-term"] .. ".") + end + end + + for _, attr in ipairs(attributes) do + if author.attributes and author.attributes[attr] then + -- create if missing + meta["some-author-has"].attributes = meta["some-author-has"].attributes or {} + + meta["some-author-has"].attributes[attr] = true + end + end + end + end + + -- debugging aid + --quarto.utils.dump(meta) + --quarto.utils.dump(meta["authors"]) + --quarto.utils.dump(meta["by-author"]) + --quarto.utils.dump(meta["some-author-has"]) + + return meta +end diff --git a/_quarto.yml b/_quarto.yml new file mode 100644 index 0000000..f3f389d --- /dev/null +++ b/_quarto.yml @@ -0,0 +1,28 @@ +project: + type: website + +website: + title: "Overview" + navbar: + left: + - text: Report + href: report.qmd + +lang: en-GB + +mainfont: Source Serif 4 Variable +mainfontoptions: + - OpticalSize=11 +sansfont: SourceSans3VF +sansfontoptions: + - Instance=Regular +monofont: SourceCodeVF +monofontoptions: + - Instance=Regular + - Scale=0.8 + +filters: + - abstract-section + - stylish-roles + - include-code-files +# - diagram diff --git a/delivery1.qmd b/delivery1.qmd new file mode 100644 index 0000000..3975aaa --- /dev/null +++ b/delivery1.qmd @@ -0,0 +1,93 @@ +--- +title: Bachelorizer sketches and draft codebase +subtitle: Portfolio Project I + +date: 2025-03-01 + +toc-depth: 2 + +format: + stylish-report-pdf: + pdfversion: "2.0" + pdfstandard: [A-4f, UA-2] + pdftestphase: latest + +metadata-files: + - _actors.yml +keywords: + - UML + - Class diagram + - University structure + +breaks: false + +--- + +# UML Class Diagram + +```{.plantuml} +@startuml +abstract class SocketServer { + #boost::asio::io_service io_service; + #tcp::endpoint endpoint; + #tcp::iostream socketStream; + #tcp::acceptor * acceptor; + #stringstream * buffer; + + +SocketServer (string address, unsigned short port, stringstream * buf) + +~SocketServer () + +{abstract} void start () +} + +class SocketServerListener { + +void start () +} + +class SocketServerSender { + +void start () +} + +SocketServer -down-|> SocketServerListener +SocketServer -down-|> SocketServerSender + +note "Difference only in start() function" as N1 +SocketServerListener -- N1 +SocketServerSender -- N1 + + + + +abstract class SocketClient { + #tcp::iostream socketStream; + #stringstream * buffer; + #string address; + #unsigned short port; + + +SocketClient (string address, unsigned short port, stringstream * buf) + +{abstract} void start () +} + +class SocketClientListener { + +void start () +} + +class SocketClientSender { + +void start () +} + +SocketClient -down-|> SocketClientListener +SocketClient -down-|> SocketClientSender + +note "Difference only in start() function" as N2 +SocketClientListener -- N2 +SocketClientSender -- N2 + +N0 .down. SocketServer +N0 .down. SocketClient +@enduml +``` + +## Class `Bachelorizer.java` + +```{.java include="Bachelorizer.java" code-line-numbers="true"} +``` |