1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
% Colors, used for syntax highlighting.
% To print this document, set all colors to black!
\usepackage{xcolor}
\definecolor{safeRed}{HTML}{D7191C}
\definecolor{safeOrange}{HTML}{FFDE71}
\definecolor{safeYellow}{HTML}{FFFFBF}
\definecolor{safeGreen}{HTML}{99CF8F}
\definecolor{safeBlue}{HTML}{2B83BA}
%try printer friendly colors?
%\colorlet{keyword}{safeBlue}
%\colorlet{string}{safeRed}
%\colorlet{comment}{safeGreen}
%\colorlet{identifier}{black}
\definecolor{type}{HTML}{2750A0}
\definecolor{string}{HTML}{7B3294}
\definecolor{comment}{HTML}{1A9641}
\definecolor{identifier}{HTML}{000000}
\definecolor{keyword}{HTML}{900000}
% Source code listings.
\usepackage[scaled=0.80]{beramono}
\usepackage{listings}
\lstset{
language={[11]C++},
numbers=left,
stepnumber=1,
numbersep=6pt,
numberstyle=\small,
breaklines=true,
breakautoindent=true,
breakatwhitespace=false,
numberblanklines=true,
postbreak=\space,
tabsize=2,
upquote=true,
basicstyle=\ttfamily\normalsize,
showspaces=false,
showstringspaces=false,
extendedchars=true,
keywordstyle=\color{keyword}\bfseries,
stringstyle=\color{string}\bfseries,
commentstyle=\color{comment}\bfseries\itshape,
identifierstyle=\color{identifier},
directivestyle=\color{keyword}\bfseries,
emph={auto, int, long, long long, float, double, long double, char, bool, void, ll, ld, pt, lll, __int128, __float128, true, false, this, nullptr, INF, inf, EPS, eps},
emphstyle=\color{type}\bfseries,
frame=trbl,
aboveskip=3pt,
belowskip=3pt,
deletestring=[b]{'},%fix digit separator but break char highlighting (fixed again with literate)
escapechar=@
%moredelim=**[is][{\btHL[fill=green!30,draw=red,dashed,thin]}]{@}{@}
}
\newcommand{\formatChar}[1]{{\color{string}\bfseries\textquotesingle{}#1\textquotesingle{}}}
% Listings doesn't support UTF8. This is just enough for German umlauts. and commonly used chars
\lstset{literate=%
{'a'}{{\formatChar{a}}}3
{'z'}{{\formatChar{z}}}3
{'A'}{{\formatChar{A}}}3
{'Z'}{{\formatChar{Z}}}3
{'0'}{{\formatChar{0}}}3
{'1'}{{\formatChar{1}}}3
{'\$'}{{\formatChar{\$}}}3
{'\#'}{{\formatChar{\#}}}3
{Ö}{{\"O}}1
{Ä}{{\"A}}1
{Ü}{{\"U}}1
{ß}{{\ss}}1
{ü}{{\"u}}1
{ä}{{\"a}}1
{ö}{{\"o}}1
{~}{{\textasciitilde}}1
}
\makeatletter
\let\orig@lstnumber=\thelstnumber
\newcommand\lstresetnumber{\global\let\thelstnumber=\orig@lstnumber}
\let\orig@placelstnumber=\lst@PlaceNumber
\gdef\lst@PlaceNumber{\orig@placelstnumber\lstresetnumber}
\newcommand\lstsettmpnumber[1]{\gdef\thelstnumber{#1}}
\lst@AddToHook{OnEmptyLine}{%
\ifnum\value{lstnumber}>99
\lstsettmpnumber{\_\_\_}
\else\ifnum\value{lstnumber}>9
\lstsettmpnumber{\_\_}
\else
\lstsettmpnumber{\_}
\fi\fi
% \lstsettmpnumber{\_\_\kern-6pt}%
\vspace{-1.75ex}%
\addtocounter{lstnumber}{-1}%
}
% old: (change numberblanklines=false!)
%\lst@AddToHook{OnEmptyLine}{%
% \vspace{\dimexpr\baselineskip+0.5em}%
% \addtocounter{lstnumber}{-1}%
%}
\newenvironment{btHighlight}[1][]
{\begingroup\tikzset{bt@Highlight@par/.style={#1}}\begin{lrbox}{\@tempboxa}}
{\end{lrbox}\bt@HL@box[bt@Highlight@par]{\@tempboxa}\endgroup}
\newcommand\btHL[1][]{%
\begin{btHighlight}[#1]\bgroup\aftergroup\bt@HL@endenv%
}
\def\bt@HL@endenv{%
\end{btHighlight}%
\egroup%
}
\newcommand{\bt@HL@box}[2][]{%
\tikz[#1]{%
\pgfpathrectangle{\pgfpoint{1pt}{0pt}}{\pgfpoint{\wd #2}{\ht #2}}%
\pgfusepath{use as bounding box}%
\node[anchor=base west, fill=orange!30,outer sep=0pt,inner xsep=2.2pt, inner ysep=0pt, rounded corners=3pt, minimum height=\ht\strutbox+1pt,#1]{\raisebox{1pt}{\strut}\strut\usebox{#2}};
}%
}
\makeatother
\newcommand{\hl}[1]{\btHL[fill=safeOrange,draw=black,thin]{#1}}
|