2b383a731818d76df4937f4178b391e796f52eb6
[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 postbreak=\mbox{\textcolor{gray}{$\hookrightarrow$}\space},
24 showspaces=false,
25 showstringspaces=false,
26 showtabs=false,
27 stringstyle=\it,
28 tabsize=4,
29 % upquote=true,
30 numberstyle=\tiny,
31 }
32 \usepackage{preamble/lstlangclean}
33 \usepackage{preamble/lstlanghaskell}
34 \usepackage{preamble/lstlangarduino}
35 \lstloadlanguages{%
36 {[Arduino]C++},%
37 {c},%
38 {Python},%
39 {Clean},%
40 {[Regular]Haskell},
41 {[Lhs2Tex]Haskell}}
42 \newcommand{\cinline}[1]{\lstinline[language=c,postbreak=]|#1|}
43 \newcommand{\arduinoinline}[1]{\lstinline[language={[Arduino]C++},postbreak=]|#1|}
44 \newcommand{\pythoninline}[1]{\lstinline[language=Python,postbreak=]|#1|}
45 \newcommand{\cleaninline}[1]{\lstinline[language=Clean,postbreak=]|#1|}
46 \newcommand{\cleaninputlisting}[2][]{\renewcommand*{\lstlistingname}{Listing (\gls{CLEAN})}\lstinputlisting[escapeinside={/*}{*/},language=Clean,#1]{\subfix{#2}}}
47 \newcommand{\haskellinline}[1]{\lstinline[language={[Regular]Haskell},postbreak=]|#1|}
48 \newcommand{\haskellinputlisting}[2][]{\renewcommand*{\lstlistingname}{Listing (\gls{HASKELL})}\lstinputlisting[language={[Regular]Haskell},#1]{\subfix{#2}}}
49 \newcommand{\haskelllhstexinline}[1]{\lstinline[language={[Lhs2Tex]Haskell},postbreak=]|#1|}
50 %For storing listings in footnotes
51 \newsavebox{\LstBox}
52 % Fix list of listings title
53 \renewcommand{\lstlistlistingname}{List of Listings}
54 % Fix list of listings chapter separator
55 \makeatletter
56 \let\my@chapter\@chapter%
57 \renewcommand*{\@chapter}{%
58 \addtocontents{lol}{\protect\addvspace{10pt}}%
59 \my@chapter}
60 \makeatother
61
62 \lstnewenvironment{lstPython}[1][]
63 {%
64 \lstset{language=Python, #1}
65 \renewcommand*{\lstlistingname}{Listing (\gls{PYTHON})}
66 }
67 {}
68 \lstnewenvironment{lstClean}[1][]
69 {%
70 \lstset{language=Clean, #1}
71 \renewcommand*{\lstlistingname}{Listing (\gls{CLEAN})}
72 }
73 {}
74 \lstnewenvironment{lstArduino}[1][]
75 {%
76 \lstset{language={[Arduino]C++}, #1}
77 \renewcommand*{\lstlistingname}{Listing (\gls{CPP})}
78 }
79 {}
80 \lstnewenvironment{lstHaskell}[1][]
81 {%
82 \lstset{language={[Regular]Haskell},#1}%
83 \renewcommand*{\lstlistingname}{Listing (\gls{HASKELL})}
84 }
85 {}
86 \lstnewenvironment{lstHaskellLhstex}[1][]
87 {%
88 \lstset{language={[Lhs2Tex]Haskell},#1}%
89 \renewcommand*{\lstlistingname}{Listing (\gls{HASKELL})}
90 }
91 {}
92
93 % Pseudocode
94 \usepackage[algochapter,linesnumbered,lined,boxed]{algorithm2e}
95 % Fix the algorithm font
96 \renewcommand\AlCapFnt{\normalfont}
97