more upydates
[phd-thesis.git] / preamble.tex
index 61b5490..ea67fd6 100644 (file)
@@ -1,4 +1,34 @@
-\usepackage[
+% 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
+\DeclareSIUnit\noop{\relax}
+\DeclareSIUnit\celcius{{}^{\circ}\kern-\scriptspace\mathsf{C}}
+\everymath{\it\/}
+\DeclareMathSymbol{\shortminus}{\mathbin}{AMSa}{"39} %chktex 18
+\newcommand{\dcolon}[0]{\mathbin{::}}
+
+% Internationalisation
+\usepackage[dutch,russian,british]{babel}
+\input{hyphenation}
+%\babelfont[russian]{rm}{Liberation Serif}
+
+% Papersize and layout
+\usepackage{geometry}
+\geometry{
        inner=25mm,
        outer=20mm,
        marginparsep=3mm,
        top=25mm,
        bottom=20mm,
        paperwidth=17cm,
-       paperheight=24cm]{geometry}               % Papersize
-\usepackage[british]{babel}                   % Internationalization
-\usepackage[titletoc]{appendix}               % Appendices
-\usepackage[pagebackref,hidelinks]{hyperref}  % Hyperlinks
-\usepackage{graphicx}                         % Graphics
-\usepackage{booktabs}                         % Better looking tables
-\usepackage{etoolbox}                         % Patch chapter command
-\usepackage[nodayofweek]{datetime}            % Use a fixed document date
-\usepackage{listings}                         % Code
-\usepackage[acronym,nonumberlist]{glossaries} % Glossaries and acronyms
-\usepackage[algochapter]{algorithm2e}         % Pseudocode
-\usepackage{makeidx}                          % Index
-\usepackage[inline,shortlabels]{enumitem}
-\setlist{noitemsep}
-\setlist[description]{leftmargin=\parindent}
-
+       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
 
-% Images directory
-\graphicspath{{img/}}
+% 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
 
+% 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}
+
+% 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]{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,
+       texcl=true;
+}
+\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%
   \my@chapter}
 \makeatother
 
-% Always have url in teletype
-\urlstyle{tt}
+\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{ARDUINO})}
+       }
+       {}
+\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})}
+       }
+       {}
 
-% Setup pdf parameters
+% 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={},
-       pdfauthor={},
-       pdfsubject={},
-       pdfcreator={},
-       pdfproducer={},
-       pdfkeywords={},
+       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}}
 
-% Fix gls in hyperlink errors
+% 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\acrlong#1{}%
-       \def\acrlongpl#1{}%
-       \def\acrshort#1{}%
-       \def\acrshortpl#1{}%
+       \def\glsxtrlong#1{}%
+       \def\glsxtrlongpl#1{}%
+       \def\glsxtrshort#1{}%
+       \def\glsxtrshortpl#1{}%
        \def\acrfull#1{}%
        \def\acrfullpl#1{}%
-       \def\Acrlong#1{}%
-       \def\Acrlongpl#1{}%
-       \def\Acrshort#1{}%
-       \def\Acrshortpl#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{}%
 }
 
-% General listings settings
-\lstset{%
-       breakatwhitespace=false,
-       breaklines=true,
-       captionpos=b,
-       keepspaces=true,
-       basicstyle=\ttfamily\fontseries{l}\footnotesize,
-       commentstyle=\slshape\fontseries{m},
-       keywordstyle=\bfseries\fontseries{b},
-       stringstyle=\ttfamily,
-       showspaces=false,
-       showstringspaces=false,
-       showtabs=false,
-       tabsize=4,
-       frame=L,
-}
-
-% Increase the depth for the table of contenst
-\setcounter{secnumdepth}{3}
+% Index
+%\usepackage{makeidx}
+%\makeindex% Enable the index
 
-% Fix the algorithm font
-\renewcommand\AlCapFnt{\normalfont}
+% Custom enumerations
+\usepackage[inline,shortlabels]{enumitem}
+\setlist{noitemsep}
+\setlist[description]{leftmargin=\parindent}
 
 % Initialize the glossaries
 \makeglossaries%
 \input{glossaries}
 
-% Enable the index
-\makeindex%
+\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}
+}