b285f894053c97c0c7c0902e688f08225a5b085c
[phd-thesis.git] / preamble.tex
1 % chktex-file 17
2 % chktex-file 15
3 % Fonts
4 \usepackage[utf8]{inputenc} % Input encoding
5 \usepackage[T2A,T1]{fontenc} % Font encoding
6 \usepackage{lmodern} % Nicer font
7 \usepackage{microtype} % Better kerning
8 \usepackage{tipa} % IPA symbols
9 \usepackage{stmaryrd} % short arrows
10 \usepackage{textcomp} % upquote
11 \usepackage{titlecaps} % titlecase commands
12 \usepackage{amsmath} % extra math
13 \usepackage{amssymb} % extra math symbols
14 \usepackage{relsize} % \smaller command
15 \usepackage{siunitx} % typeset units
16 \usepackage{xcolor} % colors
17 \DeclareSIUnit\noop{\relax}
18 \DeclareSIUnit\celcius{{}^{\circ}\kern-\scriptspace\mathsf{C}}
19 %\usepackage{atveryend} % \smaller command
20 \everymath{\it\/}
21 \DeclareMathSymbol{\shortminus}{\mathbin}{AMSa}{"39} %chktex 18
22 \newcommand{\dcolon}[0]{\mathbin{::}}
23
24 % Internationalisation
25 \usepackage[dutch,russian,british]{babel}
26 \input{hyphenation}
27 %\babelfont[russian]{rm}{Liberation Serif}
28
29 % Papersize and layout
30 \usepackage{geometry}
31 \geometry{
32 inner=25mm,
33 outer=20mm,
34 marginparsep=3mm,
35 marginparwidth=13mm,
36 top=25mm,
37 bottom=20mm,
38 paperwidth=17cm,
39 paperheight=24cm,
40 }
41 \usepackage{pdflscape}
42 \usepackage{float}
43 \usepackage{fancyhdr} % Custom headers and footers
44 %\pagestyle{headings}
45 \pagestyle{fancy}
46 \fancyhead{}
47 \fancyfoot{}
48 \setlength{\unitlength}{18mm}
49 \newcommand{\blob}{\rule[-.2\unitlength]{2\unitlength}{.5\unitlength}}
50 \fancyhead[RE]{\rightmark}
51 \fancyhead[LO]{\leftmark}
52 \newcommand{\frontmatterfancy}[0]{
53 \fancyhead[RO]{\thepage}
54 \fancyhead[LE]{\thepage}
55 }
56 \newcommand{\mainmatterfancy}[0]{
57 \fancyhead[RO]{
58 \thepage%
59 \begin{picture}(0,0)
60 \put(1,-\value{chapter}){\blob}
61 \end{picture}
62 }
63 \fancyhead[LE]{
64 \begin{picture}(0,0)
65 \put(-3,-\value{chapter}){\blob}
66 \end{picture}%
67 \thepage%
68 }
69 }
70 \newcommand{\backmatterfancy}[0]{
71 \fancyhead[RO]{
72 \thepage%
73 \begin{picture}(0,0)
74 \put(1,-1){\blob}
75 \end{picture}
76 }
77 \fancyhead[LE]{
78 \begin{picture}(0,0)
79 \put(-3,-1){\blob}
80 \end{picture}%
81 \thepage%
82 }
83 }
84 \renewcommand{\chaptermark}[1]{\markboth{\chaptername\ \thechapter.\ #1}{}}
85 \renewcommand{\sectionmark}[1]{\markright{\thesection.\ #1}}
86 %\renewcommand{\chaptermark}[1]{\markboth{\MakeUppercase{\chaptername}\ \thechapter.\ #1}{}}
87 %\renewcommand{\headrulewidth}{0pt}
88 \renewcommand{\footrulewidth}{0pt}
89 \usepackage{etoolbox} % To patch the chapter command
90 % Have better page numbering in chapters
91 \patchcmd{\chapter}{plain}{headings}{}{}
92 \usepackage{epigraph} % Epigraph
93 \renewcommand\partname{Movement} % Rename parts to movements (rhapsody uhu)
94 \addto\captionsbritish{\renewcommand{\partname}{Movement}}
95 \usepackage{titlesec}
96 \titleformat{\part}[block]
97 {\Huge}
98 {\partname~\thepart:}
99 {20pt}
100 {}
101 % This is required to make \nameref work (https://tex.stackexchange.com/questions/211035/problems-with-nameref-not-refering-to-the-correct-label-x-titlesec)
102 \makeatletter
103 \let\titlesec@part\part%
104 \renewcommand{\part}{\@ifstar\part@star\part@nostar}
105 \def\part@star#1{\NR@gettitle{#1}\titlesec@part*{#1}}
106 \def\part@nostar{\@ifnextchar[\part@nostar@opt\part@nostar@nopt} % chktex 9
107 \def\part@nostar@nopt#1{\NR@gettitle{#1}\titlesec@part{#1}}
108 \def\part@nostar@opt[#1]#2{\NR@gettitle{#1}\titlesec@part[#1]{#2}}
109 \makeatother
110 \newenvironment{chapterabstract}{\begin{quotation}}{\end{quotation}}
111
112 % Increase the depth for the table of contents
113 \setcounter{secnumdepth}{3}
114 \renewcommand{\contentsname}{Table of Contents} % change the name of the TOC
115 \AtBeginDocument{\addtocontents{toc}{\protect\thispagestyle{empty}}} % to remove page numbering from the TOC
116
117 % (file) structure
118 \usepackage[subpreambles=true]{standalone} % standalone figures
119 %\usepackage{morewrites} % fix no more room for a new \write
120 \usepackage{appendix} % subappendices, appendices per chapter
121
122 % Bibliography
123 \usepackage{bibentry} % Cite bib entry completely
124 \nobibliography*
125 \usepackage{natbib} % Cite bib entry completely
126 \setlength{\bibsep}{0.0pt}
127 \def\bibfont{\small}
128 %\bibliographystyle{alpha}
129 \bibliographystyle{abbrvnat}
130 \apptocmd{\thebibliography}{\raggedright}{}{}
131
132 % Graphics
133 \usepackage{graphicx} % Images
134 \graphicspath{{img/},{intro/img},{top/img},{tvt/img}}
135 \usepackage{caption} % subfigures
136 \usepackage{subcaption}
137 \usepackage{rotating}
138 \newcommand{\orcid}[1]{\href{https://orcid.org/#1}{\hspace{1mm}\includegraphics[width=1em]{orcid}\hspace{2mm} https://orcid.org/#1}}
139 \usepackage{tikz}
140
141 % Tables
142 \usepackage{booktabs} % Nicer tables
143 \usepackage{multirow} % Multirow cells
144 \usepackage{tabularx} % Automatically wrapping tables
145 \usepackage{longtable} % Tables spanning pages
146
147 % Code
148 % Pseudocode
149 \usepackage[algochapter]{algorithm2e}
150 % Fix the algorithm font
151 \renewcommand\AlCapFnt{\normalfont}
152 \usepackage{listings}
153 % https://tex.stackexchange.com/questions/149056/how-can-i-define-additional-literate-replacements-without-deleting-existing-ones
154 \makeatletter
155 \def\addToLiterate#1{\edef\lst@literate{\unexpanded\expandafter{\lst@literate}\unexpanded{#1}}}
156 \lst@Key{moreliterate}{}{\addToLiterate{#1}}
157 \makeatother
158 % General listings settings
159 \lstset{%
160 basewidth=0.5em,
161 basicstyle=\tt\small,
162 breakatwhitespace=false,
163 breaklines=true,
164 captionpos=b,
165 columns=[c]fixed,
166 commentstyle=\sl,
167 escapeinside={[+}{+]}, % chktex 9
168 frame=L,
169 keepspaces=true,
170 keywordstyle=\bf,
171 postbreak=\mbox{\textcolor{gray}{$\hookrightarrow$}\space},
172 showspaces=false,
173 showstringspaces=false,
174 showtabs=false,
175 stringstyle=\it,
176 tabsize=4,
177 upquote=true,
178 numberstyle=\tiny,
179 }
180 \usepackage{lstlangclean}
181 \usepackage{lstlanghaskell}
182 \usepackage{lstlangarduino}
183 \lstloadlanguages{%
184 {[Arduino]C++},%
185 {c},%
186 {Python},%
187 {Clean},%
188 {[Regular]Haskell},
189 {[Lhs2Tex]Haskell}}
190 \newcommand{\cinline}[1]{\lstinline[language=c,basicstyle=\tt,postbreak=]|#1|}
191 \newcommand{\arduinoinline}[1]{\lstinline[language={[Arduino]C++},basicstyle=\tt,postbreak=]|#1|}
192 \newcommand{\pythoninline}[1]{\lstinline[language=Python,basicstyle=\tt,postbreak=]|#1|}
193 \newcommand{\cleaninline}[1]{\lstinline[language=Clean,basicstyle=\tt,postbreak=]|#1|}
194 \newcommand{\haskellinline}[1]{\lstinline[language={[Regular]Haskell},basicstyle=\tt,postbreak=]|#1|}
195 \newcommand{\haskelllhstexinline}[1]{\lstinline[language={[Lhs2Tex]Haskell},basicstyle=\tt,postbreak=]|#1|}
196 %For storing listings in footnotes
197 \newsavebox{\LstBox}
198 % Fix list of listings title
199 \renewcommand{\lstlistlistingname}{List of Listings}
200 % Fix list of listings chapter separator
201 \makeatletter
202 \let\my@chapter\@chapter%
203 \renewcommand*{\@chapter}{%
204 \addtocontents{lol}{\protect\addvspace{10pt}}%
205 \my@chapter}
206 \makeatother
207
208 \lstnewenvironment{lstPython}[1][]
209 {%
210 \lstset{language=Python, #1}
211 \renewcommand*{\lstlistingname}{Listing (\gls{PYTHON})}
212 }
213 {}
214 \lstnewenvironment{lstClean}[1][]
215 {%
216 \lstset{language=Clean, #1}
217 \renewcommand*{\lstlistingname}{Listing (\gls{CLEAN})}
218 }
219 {}
220 \lstnewenvironment{lstArduino}[1][]
221 {%
222 \lstset{language={[Arduino]C++}, #1}
223 \renewcommand*{\lstlistingname}{Listing (\gls{ARDUINO})}
224 }
225 {}
226 \lstnewenvironment{lstHaskell}[1][]
227 {%
228 \lstset{language={[Regular]Haskell},#1}%
229 \renewcommand*{\lstlistingname}{Listing (\gls{HASKELL})}
230 }
231 {}
232 \lstnewenvironment{lstHaskellLhstex}[1][]
233 {%
234 \lstset{language={[Lhs2Tex]Haskell},#1}%
235 \renewcommand*{\lstlistingname}{Listing (\gls{HASKELL})}
236 }
237 {}
238
239 % Hyperlinks and metadata
240 \usepackage[pagebackref]{hyperref} % hyperlinks
241 \renewcommand*{\backref}[1]{}
242 \renewcommand*{\backrefalt}[4]{[{%
243 \ifcase #1 not cited.\or p.~#2.\else pp. #2.\fi%chktex 1
244 }]}
245 \hypersetup{%
246 pdftitle={\mytitle},
247 pdfauthor={\myauthor},
248 pdfkeywords={task-oriented programming, functional programming, domain specific languages, internet of things},
249 hidelinks,
250 }
251 \usepackage[nodayofweek]{datetime} % Use a fixed document date
252 \urlstyle{same}
253 \usepackage{bookmark}
254 \usepackage[noabbrev]{cleveref} % Easy references
255 \crefname{part}{movement}{movements}
256 \crefname{lstlisting}{listing}{listings}
257 \usepackage{nameref} % to reference names of chapters
258 \newcommand{\fullref}[1]{\Cref{#1}: \nameref{#1}}
259
260 % Glossaries and acronyms
261 \usepackage[nolangwarn,acronym,nonumberlist]{glossaries}
262 \Addlcwords{of}
263 % Titlecase glossary commands
264 \newcommand{\glst}[1]{\titlecap{\glsentrylong{#1}}}
265 \newcommand{\Glst}[1]{\glst{#1}}
266 % Fix gls in hyperlink errors
267 \pdfstringdefDisableCommands{%
268 \def\acrlong#1{}%
269 \def\acrlongpl#1{}%
270 \def\acrshort#1{}%
271 \def\acrshortpl#1{}%
272 \def\acrfull#1{}%
273 \def\acrfullpl#1{}%
274 \def\Acrlong#1{}%
275 \def\Acrlongpl#1{}%
276 \def\Acrshort#1{}%
277 \def\Acrshortpl#1{}%
278 \def\Acrfull#1{}%
279 \def\Acrfullpl#1{}%
280 \def\gls#1{}%
281 \def\glspl#1{}%
282 \def\glsentrytext#1{}%
283 \def\Gls#1{}%
284 \def\Glspl#1{}%
285 \def\Glsentrytext#1{}%
286 \def\titlecap#1{}%
287 }
288 \usepackage{glossary-mcols}
289
290 % Index
291 %\usepackage{makeidx}
292 %\makeindex% Enable the index
293
294 % Custom enumerations
295 \usepackage[inline,shortlabels]{enumitem}
296 \setlist{noitemsep}
297 \setlist[description]{leftmargin=\parindent}
298
299 % Initialize the glossaries
300 \makeglossaries%
301 \input{glossaries}
302
303 \usepackage{subfiles}
304
305 \ifSubfilesClassLoaded{}{
306 \usepackage{xmpincl}
307 \includexmp{CC_Attribution-NoDerivatives_4.0_International}
308 }
309
310 % Custom commands
311 \newcommand{\GHCmod}[1]{\texttt{#1}}
312 \newcommand{\requiresGHCmod}[2][]{\footnote{Requires \GHCmod{#1} to be enabled.#2}}
313 \newcommand{\etc}{{\fontfamily{cmr}\selectfont{\itshape\/\&c}}}
314 \newcommand{\rdmentry}[6]{#1: #2 (#3): #4. #5.\ \href{https://doi.org/#6}{#6}}
315 \newcommand{\mlubbers}{Lubbers, M.\ (Radboud University)}
316 \newcommand{\pkoopman}{Koopman, dr.\ P.\ (Radboud University)}
317 \newcommand{\rplasmeijer}{Plasmeijer, prof.\ dr.\ ir.\ R.\ (Radboud University)}
318
319 \newcommand{\mypart}[3]{
320 \part[#2: #3]{#2\\[2ex]\smaller{}#3}%
321 \label{#1}
322 }