dd77b3eea4d54ccc026e917a8785aabc0a0075f9
[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}[2][]{\lstinline[language=Clean,postbreak=,#1]|#2|}
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 % Mark source code in the margin par
63 \newcommand{\srcmark}[1]{\marginpar[\footnotesize\emph{#1}]{\footnotesize\emph{#1}}}
64
65 \lstnewenvironment{lstPython}[1][]
66 {%
67 \lstset{language=Python, #1}
68 \renewcommand*{\lstlistingname}{Listing (\gls{PYTHON})}
69 }
70 {}
71 \lstnewenvironment{lstClean}[1][]
72 {%
73 \lstset{language=Clean, #1}
74 \renewcommand*{\lstlistingname}{Listing (\gls{CLEAN})}
75 }
76 {}
77 \lstnewenvironment{lstArduino}[1][]
78 {%
79 \lstset{language={[Arduino]C++}, #1}
80 \renewcommand*{\lstlistingname}{Listing (\gls{CPP})}
81 }
82 {}
83 \lstnewenvironment{lstHaskell}[1][]
84 {%
85 \lstset{language={[Regular]Haskell},#1}%
86 \renewcommand*{\lstlistingname}{Listing (\gls{HASKELL})}
87 }
88 {}
89 \lstnewenvironment{lstHaskellLhstex}[1][]
90 {%
91 \lstset{language={[Lhs2Tex]Haskell},#1}%
92 \renewcommand*{\lstlistingname}{Listing (\gls{HASKELL})}
93 }
94 {}
95
96 % Pseudocode
97 \usepackage[algochapter,linesnumbered,lined,boxed]{algorithm2e}
98 % Fix the algorithm font
99 \renewcommand\AlCapFnt{\normalfont}
100