\documentclass[a4paper, 11pt]{article}

\usepackage[a4paper, portrait, hmargin=20mm, vmargin=25mm]{geometry}
\usepackage[bookmarks, colorlinks]{hyperref}
\usepackage{enumitem, float, tabularx, hhline, graphicx, xcolor,
 hyperref, booktabs}

\usepackage[most]{tcolorbox}

\hypersetup{
	citecolor=black, linkcolor=black,  % don't need colored links
	urlcolor=blue!55!black % blue enough to see, but dark enough to print
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% fonts                                                                     %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\usepackage{fontspec}

\setmainfont{Lora}
\setsansfont[Ligatures=NoCommon]{Roboto Condensed}
\setmonofont[Scale=MatchLowercase]{Inconsolata}

\usepackage{microtype}         % general improvements to typography


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% sections                                                                  %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\usepackage[sf,bf]{titlesec}
\titlespacing{\section}{0pt}{0.75\parskip}{-0.25\parskip}
\titlespacing{\subsection}{0pt}{0.75\parskip}{-0.25\parskip}
\titlespacing{\subsubsection}{0pt}{0.75\parskip}{-0.25\parskip}
\titlespacing{\paragraph}{0pt}{0.75\parskip}{-0.25\parskip}

% repurpose \paragraph as \subsubsubsection (which it sort of is already)
\titleformat{\paragraph}{\normalfont\normalsize\sffamily\bfseries}{\theparagraph}{1em}{}
\titlespacing{\paragraph}{0pt}{0.75\parskip}{-0.25\parskip}
\newcommand{\subsubsubsection}[1]{\paragraph{#1}}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% headers/footers                                                           %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\usepackage{fancyhdr}
\pagestyle{fancyplain}
\fancyhead[L]{\footnotesize\textsf{\PaperCode~---~\PaperTitle}}
\fancyhead[C]{}
\fancyhead[R]{\footnotesize\textsf{\LabNum\LabTitle}}
\fancyfoot[L]{}
\fancyfoot[C]{\footnotesize\textsf{\thepage}}
\fancyfoot[R]{}
\setlength{\headheight}{14pt}
\renewcommand{\footrulewidth}{0pt}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% general layout                                                            %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% relax the justification/hyphenation wrapping settings
\pretolerance=200
\tolerance=500
\setlength{\emergencystretch}{1.5em}

% try harder to avoid widows and orphans
\clubpenalty=300
\widowpenalty=300

% kill the paragraph indenting
\setlength{\parindent}{0 mm}
\setlength{\parskip}{0.7\baselineskip}

% create an indent command that does not rely on \parindent
\renewcommand{\indent}{\hspace*{1em}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% syntax highlighting                                                       %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{listings, lstautogobble}        % syntax highlighting

% create the fonts for code highlighting
\newcommand\codesize{\fontsize{11}{10}\selectfont}
\newcommand{\codefont}{\ttfamily}

% define the colors for code highlighting (based on NetBeans colors, although darker so that they are readable when printed on a black and white printer)
\definecolor{KeywordColor}{rgb}{0.0,0,0.6}
\definecolor{CommentColor}{rgb}{0.3,0.3,0.3}
\definecolor{StringColor}{rgb}{0.4,0.22.0}

\lstdefinelanguage{JavaScript}{
  keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break, this},
  sensitive=false,
  comment=[l]{//},
  morecomment=[s]{/*}{*/},
  morestring=[b]',
  morestring=[b]"
}

\lstdefinelanguage{xml}
{
  morestring=[b][\color{black}]",
  moredelim=[s][\color{KeywordColor}]{<}{>},
  morecomment=[s]{<?}{?>},
  morecomment=[s]{<!--}{-->},
  commentstyle=\color{CommentColor},
  stringstyle=\color{StringColor},
  identifierstyle=\color{black},
  alsoletter=-:
}

% create a new environment for source code blocks
\lstnewenvironment{codeblock}[1][]{%
\lstset{%
	language=Java,
	upquote=true,
	autogobble=true,
	xleftmargin=0pt,
	basicstyle=\color{black}\codefont\codesize,
	keywordstyle=\color{KeywordColor}\codefont\codesize,
	commentstyle=\color{CommentColor}\codefont\codesize,
	stringstyle=\color{StringColor}\codefont\codesize,
	aboveskip=0pt,
	belowskip=0pt,
	showstringspaces=false,
	tabsize=3,
	showtabs=false,
	columns=fullflexible,
	flexiblecolumns=true,
	breaklines=true
}\lstset{#1}}%
{}


% command for typesetting inline code
\newcommand{\code}[1]{%
\lstset{%
	language={},
	upquote=true,
	basicstyle=\color{black}\codefont\bfseries\codesize,
	keywordstyle=\color{black}\codefont\bfseries\codesize,
	stringstyle=\color{black}\codefont\bfseries\codesize,
	showstringspaces=false,
	showtabs=false
}%
\mbox{\lstinline!#1!}}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% figures                                                                   %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% PDF tex graphics extensions
\DeclareGraphicsExtensions{.jpg,.jpeg,.pdf,.png}

% command for figures with captions - first param is scale.
\newcommand{\captionedfig}[3] {
  \begin{figure}[H]
    \begin{center}
      \includegraphics[scale=#1,draft=false]{#2}
		\\
		#3
		\vspace{-25pt}
    \end{center}
  \end{figure}
}

% command for figures - first param is scale.
\newcommand{\fig}[2] {
	\begin{figure}[H]
		\makebox[\textwidth][c]{\includegraphics[scale=#1,draft=false]{#2}}%
		\vspace{-5pt}
	\end{figure}
}

% command for figures rotated 90 degrees right - first param is scale.
\newcommand{\rotatedfig}[2] {
  \begin{figure}[H]
    \begin{center}
      \includegraphics[scale=#1,draft=false, angle=270]{#2}
    \end{center}
  \end{figure}
}

% command for figures that fit the page width
\newcommand{\fittedfig}[1] {
  \begin{figure}[H]
    \begin{center}
      \resizebox{\textwidth}{!}{\includegraphics[draft=false]{#1}}
		\vspace{-25pt}
    \end{center}
  \end{figure}
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% lists                                                                     %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% fix the extra spacing that itemize/enumerate has when you put have an blank
% line prior to the environment (enumitem).

\setlist*{topsep=0.2\baselineskip}
\setlist*{partopsep=-0.5\baselineskip}
\setlist*{itemsep=0.2\baselineskip}
\setlist*{parsep=0.4\baselineskip}

% fix the extra spacing that itemize/enumerate has when you put have an blank
% line prior to the environment (paralist).

%\setlength{\pltopsep}{0.2\baselineskip}
%\setlength{\plpartopsep}{-0.2\baselineskip}
%\setlength{\plitemsep}{0.2\baselineskip}
%\setlength{\plparsep}{0.4\baselineskip}
%
%% use paralist compact versions by default so that above tweaks are used
%\renewenvironment{itemize}%
%  {\begin{compactitem}}%
%  {\end{compactitem}}
%
%\renewenvironment{enumerate}%
%  {\begin{compactenum}}%
%  {\end{compactenum}}

% rationalise the bullet points
\def\labelitemi{\footnotesize$\bullet$}
\def\labelitemii{\footnotesize$\circ$}
\def\labelitemiii{\footnotesize$\diamond$}



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% misc                                                                      %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% menus, key strokes, paths
\usepackage[os=win]{menukeys}
\renewmenumacro{\menu}[>]{roundedmenus}
\renewmenumacro{\keys}[>]{roundedkeys}
\renewmenumacro{\path}[>]{pathswithfolder}
\changemenucolortheme{roundedmenus}{blacknwhite}
\changemenucolortheme{pathswithfolder}{blacknwhite}
\changemenucolortheme{roundedkeys}{blacknwhite}

% centre command that won't add any vertical space before or after
\newcommand{\centre}[1]{\hfill#1\hfill}
