fix minor errors, split up preamble
[phd-thesis.git] / preamble / listings.tex
1 \usepackage{listings}
2 \newcounter{tmp}
3 % https://tex.stackexchange.com/questions/149056/how-can-i-define-additional-literate-replacements-without-deleting-existing-ones
4 \makeatletter
5 \def\addToLiterate#1{\edef\lst@literate{\unexpanded\expandafter{\lst@literate}\unexpanded{#1}}}
6 \lst@Key{moreliterate}{}{\addToLiterate{#1}}
7 \makeatother
8 % General listings settings
9 \lstset{%
10 basewidth=0.5em,
11 basicstyle=\tt\small,
12 breakatwhitespace=false,
13 breaklines=true,
14 captionpos=b,
15 columns=[c]fixed,
16 commentstyle=\sl,
17 escapeinside={[+}{+]}, % chktex 9
18 frame=,
19 backgroundcolor=\color{lstbg},
20 keepspaces=true,
21 keywordstyle=\bf,
22 postbreak=\mbox{\textcolor{gray}{$\hookrightarrow$}\space},
23 showspaces=false,
24 showstringspaces=false,
25 showtabs=false,
26 stringstyle=\it,
27 tabsize=4,
28 upquote=true,
29 numberstyle=\tiny,
30 }
31 \usepackage{preamble/lstlangclean}
32 \usepackage{preamble/lstlanghaskell}
33 \usepackage{preamble/lstlangarduino}
34 \lstloadlanguages{%
35 {[Arduino]C++},%
36 {c},%
37 {Python},%
38 {Clean},%
39 {[Regular]Haskell},
40 {[Lhs2Tex]Haskell}}
41 \newcommand{\cinline}[1]{\lstinline[language=c,postbreak=]|#1|}
42 \newcommand{\arduinoinline}[1]{\lstinline[language={[Arduino]C++},postbreak=]|#1|}
43 \newcommand{\pythoninline}[1]{\lstinline[language=Python,postbreak=]|#1|}
44 \newcommand{\cleaninline}[1]{\lstinline[language=Clean,postbreak=]|#1|}
45 \newcommand{\cleaninputlisting}[2][]{\renewcommand*{\lstlistingname}{Listing (\gls{CLEAN})}\lstinputlisting[escapeinside={/*}{*/},language=Clean,#1]{\subfix{#2}}}
46 \newcommand{\haskellinline}[1]{\lstinline[language={[Regular]Haskell},postbreak=]|#1|}
47 \newcommand{\haskellinputlisting}[2][]{\renewcommand*{\lstlistingname}{Listing (\gls{HASKELL})}\lstinputlisting[language={[Regular]Haskell},#1]{\subfix{#2}}}
48 \newcommand{\haskelllhstexinline}[1]{\lstinline[language={[Lhs2Tex]Haskell},postbreak=]|#1|}
49 %For storing listings in footnotes
50 \newsavebox{\LstBox}
51 % Fix list of listings title
52 \renewcommand{\lstlistlistingname}{List of Listings}
53 % Fix list of listings chapter separator
54 \makeatletter
55 \let\my@chapter\@chapter%
56 \renewcommand*{\@chapter}{%
57 \addtocontents{lol}{\protect\addvspace{10pt}}%
58 \my@chapter}
59 \makeatother
60
61 \lstnewenvironment{lstPython}[1][]
62 {%
63 \lstset{language=Python, #1}
64 \renewcommand*{\lstlistingname}{Listing (\gls{PYTHON})}
65 }
66 {}
67 \lstnewenvironment{lstClean}[1][]
68 {%
69 \lstset{language=Clean, #1}
70 \renewcommand*{\lstlistingname}{Listing (\gls{CLEAN})}
71 }
72 {}
73 \lstnewenvironment{lstArduino}[1][]
74 {%
75 \lstset{language={[Arduino]C++}, #1}
76 \renewcommand*{\lstlistingname}{Listing (\gls{CPP})}
77 }
78 {}
79 \lstnewenvironment{lstHaskell}[1][]
80 {%
81 \lstset{language={[Regular]Haskell},#1}%
82 \renewcommand*{\lstlistingname}{Listing (\gls{HASKELL})}
83 }
84 {}
85 \lstnewenvironment{lstHaskellLhstex}[1][]
86 {%
87 \lstset{language={[Lhs2Tex]Haskell},#1}%
88 \renewcommand*{\lstlistingname}{Listing (\gls{HASKELL})}
89 }
90 {}
91
92 % Pseudocode
93 \usepackage[algochapter,linesnumbered,lined,boxed]{algorithm2e}
94 % Fix the algorithm font
95 \renewcommand\AlCapFnt{\normalfont}
96