fix brackets, check floats and widows in chp 1-3
[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 \definecolor{lstbg}{gray}{.95}
9 % General listings settings
10 \lstset{%
11 basewidth=0.5em,
12 basicstyle=\tt\small,
13 breakatwhitespace=false,
14 breaklines=true,
15 captionpos=b,
16 columns=[c]fixed,
17 commentstyle=\sl,
18 escapeinside={[+}{+]}, % chktex 9
19 frame=,
20 backgroundcolor=\color{lstbg},
21 keepspaces=true,
22 keywordstyle=\bf,
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}[2][]{\lstinline[language=Clean,postbreak=,#1]|#2|}
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 % Mark source code in the margin par
62 \newcommand{\srcmark}[1]{\marginpar[\footnotesize\emph{#1}]{\footnotesize\emph{#1}}}
63
64 \lstnewenvironment{lstPython}[1][]
65 {%
66 \lstset{language=Python, #1}
67 \renewcommand*{\lstlistingname}{Listing (\gls{PYTHON})}
68 }
69 {}
70 \lstnewenvironment{lstClean}[1][]
71 {%
72 \lstset{language=Clean, #1}
73 \renewcommand*{\lstlistingname}{Listing (\gls{CLEAN})}
74 }
75 {}
76 \lstnewenvironment{lstArduino}[1][]
77 {%
78 \lstset{language={[Arduino]C++}, #1}
79 \renewcommand*{\lstlistingname}{Listing (\gls{CPP})}
80 }
81 {}
82 \lstnewenvironment{lstHaskell}[1][]
83 {%
84 \lstset{language={[Regular]Haskell},#1}%
85 \renewcommand*{\lstlistingname}{Listing (\gls{HASKELL})}
86 }
87 {}
88 \lstnewenvironment{lstHaskellLhstex}[1][]
89 {%
90 \lstset{language={[Lhs2Tex]Haskell},#1}%
91 \renewcommand*{\lstlistingname}{Listing (\gls{HASKELL})}
92 }
93 {}
94
95 % Pseudocode
96 \usepackage[algochapter,linesnumbered,lined,boxed]{algorithm2e}
97 % Fix the algorithm font
98 \renewcommand\AlCapFnt{\normalfont}
99
100 \makeatletter
101 \patchcmd{\lsthk@SelectCharTable}{%
102 \lst@ifbreaklines\lst@Def{`)}{\lst@breakProcessOther)}\fi
103 }{%
104 }{
105 }{
106 }
107 \makeatother