aboutsummaryrefslogtreecommitdiff
path: root/_extensions/ruc-play
diff options
context:
space:
mode:
Diffstat (limited to '_extensions/ruc-play')
-rw-r--r--_extensions/ruc-play/stylish-report/README.md28
-rw-r--r--_extensions/ruc-play/stylish-report/TODO.md2
-rw-r--r--_extensions/ruc-play/stylish-report/_extension.yaml70
-rw-r--r--_extensions/ruc-play/stylish-report/doc-class.tex74
-rw-r--r--_extensions/ruc-play/stylish-report/revealjs-british.scss10
-rw-r--r--_extensions/ruc-play/stylish-report/revealjs.scss4
-rw-r--r--_extensions/ruc-play/stylish-report/styles/british.scss10
-rw-r--r--_extensions/ruc-play/stylish-report/styles/common.scss4
-rw-r--r--_extensions/ruc-play/stylish-report/template.tex455
-rw-r--r--_extensions/ruc-play/stylish-report/title.tex98
-rw-r--r--_extensions/ruc-play/stylish-report/toc.tex28
-rw-r--r--_extensions/ruc-play/stylish-report/x/template.tex466
-rw-r--r--_extensions/ruc-play/stylish-roles/_extension.yaml6
-rw-r--r--_extensions/ruc-play/stylish-roles/stylish-roles.lua54
14 files changed, 1309 insertions, 0 deletions
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