-% chktex-file 17
-% chktex-file 15
-% Fonts
-\usepackage[utf8]{inputenc} % Input encoding
-\usepackage[T2A,T1]{fontenc} % Font encoding
-\usepackage{lmodern} % Nicer font
-\usepackage{microtype} % Better kerning
-\usepackage{tipa} % IPA symbols
-\usepackage{stmaryrd} % short arrows
-\usepackage{textcomp} % upquote
-\usepackage{titlecaps} % titlecase commands
-\usepackage{amsmath} % extra math
-\usepackage{amssymb} % extra math symbols
-\usepackage{wasysym} % circle symbols
-\usepackage{relsize} % \smaller command
-\usepackage{siunitx} % typeset units
-\usepackage{xcolor} % colors
-\usepackage{fnpct} % footnotekerning
-\DeclareSIUnit\noop{\relax}
-\DeclareSIUnit\celcius{{}^{\circ}\kern-\scriptspace\mathsf{C}}
-\everymath{\it\/}
-\DeclareMathSymbol{\shortminus}{\mathbin}{AMSa}{"39} %chktex 18
-\newcommand{\dcolon}[0]{\mathbin{::}}
-\newcommand{\refreshrate}[2]{\langle{}#1, #2\rangle{}}
+\usepackage[utf8]{inputenc} % Input encoding
+\usepackage[X2,T1]{fontenc} % Font encoding
+\usepackage{ifxetex}
+\ifxetex%
+ \usepackage{amsmath} % extra math
+ \usepackage{fontspec}
+ \usepackage{polyglossia}
+ \setmainlanguage[variant=british]{english}
+ \setotherlanguage{dutch}
+ \setotherlanguage{russian}
+ \newfontfamily{\cyrillicfont}{Liberation Serif}
+\else
+ \usepackage{lmodern} % Nicer font
+ \usepackage{microtype} % Better kerning
+ \usepackage{amsmath} % extra math
+ \usepackage{amssymb} % extra math symbols
+
+ \usepackage[dutch,russian,british]{babel}
+% \babelfont[russian]{rm}{Liberation Serif}
+\fi
+
+% Typography, widows, orphans, fonts
+\input{preamble/typography}
% Internationalisation
-\usepackage[dutch,russian,british]{babel}
-\input{hyphenation}
-%\babelfont[russian]{rm}{Liberation Serif}
+\input{preamble/internationalisation}
% Papersize and layout
-\usepackage{geometry}
-\geometry{
- inner=25mm,
- outer=20mm,
- marginparsep=3mm,
- marginparwidth=13mm,
- top=25mm,
- bottom=20mm,
- paperwidth=17cm,
- paperheight=24cm,
-}
-\usepackage{pdflscape}
-\usepackage{float}
-\usepackage{fancyhdr} % Custom headers and footers
-%\pagestyle{headings}
-\pagestyle{fancy}
-\fancyhead{}
-\fancyfoot{}
-\setlength{\unitlength}{18mm}
-\newcommand{\blob}{{\color{gray}\rule[-.2\unitlength]{2\unitlength}{.5\unitlength}}}
-\fancyhead[RE]{\rightmark}
-\fancyhead[LO]{\leftmark}
-\newcommand{\frontmatterfancy}[0]{
- \fancyhead[RO]{\thepage}
- \fancyhead[LE]{\thepage}
-}
-\newcommand{\mainmatterfancy}[0]{
- \fancyhead[RO]{
- \thepage%
- \begin{picture}(0,0)
- \put(1,-\value{chapter}){\blob}
- \end{picture}
- }
- \fancyhead[LE]{
- \begin{picture}(0,0)
- \put(-3,-\value{chapter}){\blob}
- \end{picture}%
- \thepage%
- }
-}
-\newcommand{\backmatterfancy}[0]{
- \fancyhead[RO]{
- \thepage%
- \begin{picture}(0,0)
- \put(1,-1){\blob}
- \end{picture}
- }
- \fancyhead[LE]{
- \begin{picture}(0,0)
- \put(-3,-1){\blob}
- \end{picture}%
- \thepage%
- }
-}
-\renewcommand{\chaptermark}[1]{\markboth{\chaptername\ \thechapter.\ #1}{}}
-\renewcommand{\sectionmark}[1]{\markright{\thesection.\ #1}}
-%\renewcommand{\chaptermark}[1]{\markboth{\MakeUppercase{\chaptername}\ \thechapter.\ #1}{}}
-%\renewcommand{\headrulewidth}{0pt}
-\renewcommand{\footrulewidth}{0pt}
-\usepackage{etoolbox} % To patch the chapter command
-% Have better page numbering in chapters
-\patchcmd{\chapter}{plain}{headings}{}{}
-\usepackage{epigraph} % Epigraph
-\renewcommand\partname{Episode} % Rename parts to episodes (rhapsody uhu)
-\addto\captionsbritish{\renewcommand{\partname}{Episode}}
-\usepackage{titlesec}
-\titleformat{\part}[block]
- {\Huge}
- {\partname~\thepart:}
- {20pt}
- {}
-% This is required to make \nameref work (https://tex.stackexchange.com/questions/211035/problems-with-nameref-not-refering-to-the-correct-label-x-titlesec)
-\makeatletter
-\let\titlesec@part\part%
-\renewcommand{\part}{\@ifstar\part@star\part@nostar}
-\def\part@star#1{\NR@gettitle{#1}\titlesec@part*{#1}}
-\def\part@nostar{\@ifnextchar[\part@nostar@opt\part@nostar@nopt} % chktex 9
-\def\part@nostar@nopt#1{\NR@gettitle{#1}\titlesec@part{#1}}
-\def\part@nostar@opt[#1]#2{\NR@gettitle{#1}\titlesec@part[#1]{#2}}
-\makeatother
-\newenvironment{chapterabstract}{\begin{quotation}\em\noindent}{\end{quotation}} %chktex 6
-
-% Increase the depth for the table of contents
-\setcounter{secnumdepth}{3}
-\renewcommand{\contentsname}{Table of Contents} % change the name of the TOC
-\AtBeginDocument{\addtocontents{toc}{\protect\thispagestyle{empty}}} % to remove page numbering from the TOC
-
-% (file) structure
-\usepackage[subpreambles=true]{standalone} % standalone figures
-%\usepackage{morewrites} % fix no more room for a new \write
-\usepackage{appendix} % subappendices, appendices per chapter
+\input{preamble/layout}
% Bibliography
-\usepackage{natbib} % Cite bib entry completely
-\setlength{\bibsep}{0.0pt}
-\def\bibfont{\small}
-%\bibliographystyle{alpha}
-\bibliographystyle{abbrvnat}
-\apptocmd{\thebibliography}{\raggedright}{}{}
-\usepackage{bibentry} % Cite bib entry completely
-\nobibliography*
-\newcommand{\citeentry}[1]{\begin{NoHyper}\bibentry{#1}\end{NoHyper}. \citep{#1}}
-
-\makeatletter
-\newcommand{\citepage}[1]{p.~#1}
-\newcommand{\citepages}[1]{pp.~#1}
-\newcommand{\citechapter}[1]{\cref@chapter@name~#1}
-\newcommand{\citechapters}[1]{\cref@chapter@name@plural~#1}
-\newcommand{\citesection}[1]{\cref@section@name~#1}
-\newcommand{\citesections}[1]{\cref@section@name@plural~#1}
-%\newcommand{\citesection}[1]{\S.~#1}
-%\newcommand{\citesections}[1]{\S\S.~#1}
-\newcommand{\citeparagraph}[1]{\P.~#1}
-\newcommand{\citeparagraphs}[1]{\P\P.~#1}
-\makeatother
-
-% Graphics
-\usepackage{graphicx} % Images
-\graphicspath{{img/},{intro/img},{top/img},{tvt/img}}
-\usepackage{caption} % subfigures
-\usepackage{subcaption}
-\usepackage{rotating}
-\newcommand{\orcid}[1]{\href{https://orcid.org/#1}{\hspace{1mm}\includegraphics[width=1em]{orcid}\hspace{2mm} https://orcid.org/#1}}
-\usepackage{tikz}
+\input{preamble/bibliography}
% Tables
-\usepackage{booktabs} % Nicer tables
-\usepackage{multirow} % Multirow cells
-\usepackage{tabularx} % Automatically wrapping tables
-\usepackage{longtable} % Tables spanning pages
-\usepackage{threeparttable} % Tables with footnotes
-
-% Code
-% Pseudocode
-\usepackage[algochapter,linesnumbered,lined,boxed]{algorithm2e}
-% Fix the algorithm font
-\renewcommand\AlCapFnt{\normalfont}
-\usepackage{listings}
-% https://tex.stackexchange.com/questions/149056/how-can-i-define-additional-literate-replacements-without-deleting-existing-ones
-\makeatletter
-\def\addToLiterate#1{\edef\lst@literate{\unexpanded\expandafter{\lst@literate}\unexpanded{#1}}}
-\lst@Key{moreliterate}{}{\addToLiterate{#1}}
-\makeatother
-% General listings settings
-\lstset{%
- basewidth=0.5em,
- basicstyle=\tt\small,
- breakatwhitespace=false,
- breaklines=true,
- captionpos=b,
- columns=[c]fixed,
- commentstyle=\sl,
- escapeinside={[+}{+]}, % chktex 9
- frame=L,
- keepspaces=true,
- keywordstyle=\bf,
- postbreak=\mbox{\textcolor{gray}{$\hookrightarrow$}\space},
- showspaces=false,
- showstringspaces=false,
- showtabs=false,
- stringstyle=\it,
- tabsize=4,
- upquote=true,
- numberstyle=\tiny,
-}
-\usepackage{lstlangclean}
-\usepackage{lstlanghaskell}
-\usepackage{lstlangarduino}
-\lstloadlanguages{%
- {[Arduino]C++},%
- {c},%
- {Python},%
- {Clean},%
- {[Regular]Haskell},
- {[Lhs2Tex]Haskell}}
-\newcommand{\cinline}[1]{\lstinline[language=c,postbreak=]|#1|}
-\newcommand{\arduinoinline}[1]{\lstinline[language={[Arduino]C++},postbreak=]|#1|}
-\newcommand{\pythoninline}[1]{\lstinline[language=Python,postbreak=]|#1|}
-\newcommand{\cleaninline}[1]{\lstinline[language=Clean,postbreak=]|#1|}
-\newcommand{\cleaninputlisting}[2][]{\renewcommand*{\lstlistingname}{Listing (\gls{CLEAN})}\lstinputlisting[language=Clean,#1]{#2}}
-\newcommand{\haskellinline}[1]{\lstinline[language={[Regular]Haskell},postbreak=]|#1|}
-\newcommand{\haskellinputlisting}[2][]{\renewcommand*{\lstlistingname}{Listing (\gls{HASKELL})}\lstinputlisting[language={[Regular]Haskell},#1]{#2}}
-\newcommand{\haskelllhstexinline}[1]{\lstinline[language={[Lhs2Tex]Haskell},postbreak=]|#1|}
-%For storing listings in footnotes
-\newsavebox{\LstBox}
-% Fix list of listings title
-\renewcommand{\lstlistlistingname}{List of Listings}
-% Fix list of listings chapter separator
-\makeatletter
-\let\my@chapter\@chapter%
-\renewcommand*{\@chapter}{%
- \addtocontents{lol}{\protect\addvspace{10pt}}%
- \my@chapter}
-\makeatother
-
-\lstnewenvironment{lstPython}[1][]
- {%
- \lstset{language=Python, #1}
- \renewcommand*{\lstlistingname}{Listing (\gls{PYTHON})}
- }
- {}
-\lstnewenvironment{lstClean}[1][]
- {%
- \lstset{language=Clean, #1}
- \renewcommand*{\lstlistingname}{Listing (\gls{CLEAN})}
- }
- {}
-\lstnewenvironment{lstArduino}[1][]
- {%
- \lstset{language={[Arduino]C++}, #1}
- \renewcommand*{\lstlistingname}{Listing (\gls{CPP})}
- }
- {}
-\lstnewenvironment{lstHaskell}[1][]
- {%
- \lstset{language={[Regular]Haskell},#1}%
- \renewcommand*{\lstlistingname}{Listing (\gls{HASKELL})}
- }
- {}
-\lstnewenvironment{lstHaskellLhstex}[1][]
- {%
- \lstset{language={[Lhs2Tex]Haskell},#1}%
- \renewcommand*{\lstlistingname}{Listing (\gls{HASKELL})}
- }
- {}
+\input{preamble/table}
-% Hyperlinks and metadata
-\usepackage[pdflang={en-GB},pagebackref]{hyperref} % hyperlinks
-\usepackage{xr} % hyperlinks
-\renewcommand*{\backref}[1]{}
-\renewcommand*{\backrefalt}[4]{[{%
- \ifcase #1 not cited.\or p.~#2.\else pp. #2.\fi%chktex 1
-}]}
-\hypersetup{%
- pdftitle={\mytitle},
- pdfauthor={\myauthor},
- pdfkeywords={task-oriented programming, functional programming, domain specific languages, internet of things},
- hidelinks,
-}
-\usepackage[nodayofweek]{datetime} % Use a fixed document date
-\urlstyle{same}
-\usepackage{bookmark}
-\usepackage[noabbrev]{cleveref} % Easy references
-\crefname{part}{episode}{episodes}
-\crefname{lstlisting}{listing}{listings}
-\usepackage{nameref} % to reference names of chapters
-\newcommand{\fullref}[1]{\cref{#1}: \nameref{#1}}
-\newcommand{\Fullref}[1]{\Cref{#1}: \nameref{#1}}
-\creflabelformat{equation}{#2\textup{#1}#3}
+% Listings
+\input{preamble/listings}
-% Glossaries and acronyms
-\usepackage[nolangwarn,abbreviations,nonumberlist,prefix]{glossaries-extra}
-\setabbreviationstyle[acronym]{long-short}
-\Addlcwords{of}
-% Titlecase glossary commands
-\newcommand{\glst}[1]{\titlecap{\glsentrylong{#1}}}
-\newcommand{\Glst}[1]{\glst{#1}}
-\usepackage{glossary-mcols}
-\pdfstringdefDisableCommands{%
- \def\glsxtrlong#1{}%
- \def\glsxtrlongpl#1{}%
- \def\glsxtrshort#1{}%
- \def\glsxtrshortpl#1{}%
- \def\acrfull#1{}%
- \def\acrfullpl#1{}%
- \def\Glsxtrlong#1{}%
- \def\Glsxtrlongpl#1{}%
- \def\Glsxtrshort#1{}%
- \def\Glsxtrshortpl#1{}%
- \def\Acrfull#1{}%
- \def\Acrfullpl#1{}%
- \def\gls#1{}%
- \def\glspl#1{}%
- \def\glsentrytext#1{}%
- \def\Gls#1{}%
- \def\Glspl#1{}%
- \def\Glsentrytext#1{}%
- \def\titlecap#1{}%
-}
+% Graphics
+\input{preamble/graphics}
-% Index
-%\usepackage{makeidx}
-%\makeindex% Enable the index
+% Crossreferences, urls and hyperlinks
+\input{preamble/crossref}
-% Custom enumerations
-\usepackage[inline,shortlabels]{enumitem}
-\setlist{noitemsep}
-\setlist[description]{leftmargin=\parindent}
+% Custom commands
+\input{preamble/commands}
-% Initialize the glossaries
-\makeglossaries%
-\input{glossaries}
+% Glossaries and acronyms
+\input{preamble/glossaries}
+% File structure, this must be last of the preamble
\usepackage{subfiles}
-\ifSubfilesClassLoaded{}{
- \usepackage{xmpincl}
- \includexmp{CC_Attribution-NoDerivatives_4.0_International}
-}
-
-% Custom commands
-\newcommand{\GHCmod}[1]{\texttt{#1}}
-\newcommand{\requiresGHCmod}[2][]{\footnote{Requires \GHCmod{#2} to be enabled. #1}}
-%\newcommand{\etc}{{\fontfamily{cmr}\selectfont{\itshape\/\&c}}}
-\newcommand{\etc}{{\fontfamily{cmr}\selectfont{\itshape\/\&\kern-0.2em c}}}
-\newcommand{\rdmentry}[5]{#1 (#2): #3. #4.\ \href{https://doi.org/#5}{#5}}
-\newcommand{\mlubbers}{Lubbers, M.\ (Radboud University)}
-\newcommand{\pkoopman}{Koopman, dr.\ P.\ (Radboud University)}
-\newcommand{\rplasmeijer}{Plasmeijer, prof.\ dr.\ ir.\ R.\ (Radboud University)}
-\newcommand{\aramsingh}{Ramsingh, A.\ (University of Glasgow)}
-\newcommand{\jsinger}{Singer, dr.\ J.\ (University of Glasgow)}
-\newcommand{\ptrinder}{Trinder, prof.~dr.\ P.\ (University of Glasgow)}
-
-\newcommand{\mypart}[3]{
- \part[#2: #3]{#2\\[2ex]\smaller{}#3}%
- \label{#1}
-}
+% Metadata (only works in main document) and should go after subfiles
+%\input{preamble/metadata}