stab at some chapters
[phd-thesis.git] / preamble.tex
index 5c88b98..a8baf2b 100644 (file)
@@ -1,4 +1,9 @@
-\usepackage[
+% Input encoding
+\usepackage[utf8]{inputenc}
+
+% Papersize
+\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}     % Customized enumerations
-\setlist{noitemsep}
-\setlist[description]{leftmargin=\parindent}
-\usepackage{epigraph}
+       paperheight=24cm,
+}
 
-\usepackage[
-       height={1.5cm},
-       width={12mm},
-       distance={1.55cm},
-       topthumbmargin={auto},
-       bottomthumbmargin={auto},
-       eventxtindent={.5cm},
-       oddtxtexdent={.3cm}]{thumbs}
+% Font encoding
+\usepackage[T1,T2A]{fontenc}
 
-\usepackage{lipsum}
+% Less bad boxes
+\usepackage{microtype}
 
-\usepackage{fancyhdr}
-\pagestyle{fancy}
+% No more room for a new \write
+\usepackage{morewrites}
 
-% Have better page numbering in chapters
-\patchcmd{\chapter}{plain}{headings}{}{}
+% Internationalisation
+\usepackage[british]{babel}
+%\babelfont[russian]{rm}{Liberation Serif}
+
+% Appendices
+% TODO is this necessary?
+\usepackage[titletoc]{appendix}
+
+% Hyperlinks
+%\usepackage[pagebackref]{hyperref}
+\usepackage[pagebackref]{hyperref}
+% Setup pdf parameters: TODO
+\hypersetup{%
+       pdftitle={\mytitle},
+       pdfauthor={\myauthor},
+       pdfsubject={},
+%      pdfcreator={},
+%      pdfproducer={},
+       pdfkeywords={task oriented programming, functional programming, domain specific languages, internet of things},
+       hidelinks,
+}
 
+% Graphics
+\usepackage{graphicx}
 % Images directory
 \graphicspath{{img/}}
 
+% Nice tables
+\usepackage{booktabs}
+
+% Automatically wrapping tables
+\usepackage{tabularx}
+
+% Use a fixed document date
+\usepackage[nodayofweek]{datetime}
+
+% Code
+\usepackage{stmaryrd}                         % Short arrow
+\usepackage{listings}
+% General listings settings
+\lstset{%
+       basewidth=0.43em,
+       basicstyle=\linespread{0.9}\tt\footnotesize,
+       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,
+       literate=%
+               {~}{$\sim$}1
+               {\\}{{$\lambda\:$}}1
+               {->}{{$\shortrightarrow$}}2
+               {<-}{{$\shortleftarrow$}}2
+               {=>}{{$\Rightarrow$}}2
+               {<=}{{$\Leftarrow$}}2
+               {'}{{`}}1
+               {...}{{$\cdots$}}1 %chktex 11
+               {a0}{{a\textsubscript{0}}}2
+               {a1}{{a\textsubscript{1}}}2
+               {a2}{{a\textsubscript{2}}}2
+%              {an}{{a\textsubscript{n}}}2
+               {c0}{{c\textsubscript{0}}}2
+               {c1}{{c\textsubscript{1}}}2
+               {c2}{{c\textsubscript{2}}}2
+               {cn}{{c\textsubscript{n}}}2
+               {f0}{{f\textsubscript{0}}}2
+               {f1}{{f\textsubscript{1}}}2
+               {f2}{{f\textsubscript{2}}}2
+               {fn}{{f\textsubscript{n}}}2
+               {t0}{{t\textsubscript{0}}}2
+               {t1}{{t\textsubscript{1}}}2
+               {t2}{{t\textsubscript{2}}}2
+               {tn}{{t\textsubscript{n}}}2
+               {v0}{{v\textsubscript{0}}}2
+               {v1}{{v\textsubscript{1}}}2
+               {v2}{{v\textsubscript{2}}}2
+               {vn}{{v\textsubscript{n}}}2
+               {C0}{{C\textsubscript{0}}}2
+               {C1}{{C\textsubscript{1}}}2
+               {C2}{{C\textsubscript{2}}}2
+               {Cn}{{C\textsubscript{n}}}2
+               {R0}{{R\textsubscript{0}}}2
+               {R1}{{R\textsubscript{1}}}2
+               {R2}{{R\textsubscript{2}}}2
+               {Rn}{{R\textsubscript{n}}}2
+}
+\lstdefinestyle{haskell}{%
+       language=Haskell,
+       deletekeywords={True,False,Bool,Int,Float,Double,zip,length,Show,show,Num,Eq,print,String},
+}
+\lstdefinelanguage{Clean}{%
+       alsoletter={ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_`1234567890},
+       alsoletter={~!@\#$\%^\&*-+=?<>:|\\.},
+       morekeywords={generic,implementation,definition,dynamic,module,import,from,where,in,of,case,let,infix,infixr,infixl,class,instance,with,if,derive,code,In,qualified,otherwise},
+       sensitive=true,
+       morecomment=[l]{//},
+       morecomment=[n]{/*}{*/},
+       morestring=[b]",        % chktex 18
+       morestring=[s]{['}{']}, % chktex 9
+}
+\newcommand{\cleaninline}[1]{\lstinline[language=Clean,postbreak=]|#1|}
+\newcommand{\haskellinline}[1]{\lstinline[language=Haskell,style=haskell,postbreak=]|#1|}
 % Fix list of listings title
 \renewcommand{\lstlistlistingname}{List of Listings}
-
 % Fix list of listings chapter separator
 \makeatletter
 \let\my@chapter\@chapter%
   \my@chapter}
 \makeatother
 
-% Setup pdf parameters
-\hypersetup{%
-       pdftitle={},
-       pdfauthor={},
-       pdfsubject={},
-       pdfcreator={},
-       pdfproducer={},
-       pdfkeywords={},
-}
-
+\lstnewenvironment{lstClean}[1][]
+       {% 
+               \lstset{language=Clean, #1}
+               \renewcommand*{\lstlistingname}{Listing (Clean)}
+       }
+       {}
+\lstnewenvironment{lstHaskell}[1][]
+       {%
+               \lstset{language=Haskell,style=haskell,#1}%
+               \renewcommand*{\lstlistingname}{Listing (Haskell)}
+       }
+       {}
+
+% Glossaries and acronyms
+\usepackage[acronym,nonumberlist]{glossaries}
 % Fix gls in hyperlink errors
 \pdfstringdefDisableCommands{%
        \def\acrlong#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}
+% Titlecase commands
+\usepackage{titlecaps}
+\Addlcwords{of}
+% Titlecase glossary command
+\newcommand{\glst}[1]{\titlecap{\glsentrylong{#1}}}
+\newcommand{\Glst}[1]{\glst{#1}}
 
+% Pseudocode
+\usepackage[algochapter]{algorithm2e}
 % Fix the algorithm font
 \renewcommand\AlCapFnt{\normalfont}
 
+% Index
+\usepackage{makeidx}
+% Enable the index
+\makeindex%
+
+% Custom enumerations
+\usepackage[inline,shortlabels]{enumitem}
+\setlist{noitemsep}
+\setlist[description]{leftmargin=\parindent}
+
+% Epigraph (lovecraft)
+\usepackage{epigraph}
+
+% Thumb marks on the page
+\usepackage[
+       height={1.5cm},
+       width={12mm},
+       distance={1.55cm},
+       topthumbmargin={auto},
+       bottomthumbmargin={auto},
+       eventxtindent={.5cm},
+       oddtxtexdent={.3cm}]{thumbs}
+
+% Custom headers and footers
+\usepackage{fancyhdr}
+\pagestyle{fancy}
+
+% Tables spanning pages
+\usepackage{longtable}
+
+% Easy references
+\usepackage{cleveref}
+
+% Diagrams
+\usepackage{tikz}
+\usetikzlibrary{pie}
+
+% To patch the chapter command
+\usepackage{etoolbox}
+% Have better page numbering in chapters
+\patchcmd{\chapter}{plain}{headings}{}{}
+
+% 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
 
 \makeglossaries%
 \input{glossaries}
 
-% Enable the index
-\makeindex%
+% Custom commands
+\newcommand{\GHCmod}[1]{\texttt{#1}}
+\newcommand{\requiresGHCmod}[1]{\footnote{Requires \GHCmod{#1} to be enabled.}}
+\newcommand{\etc}{{\fontfamily{cmr}\selectfont{\itshape\/\&c}}}