summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/hagenberg-thesis/latex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/hagenberg-thesis/latex
Initial commit
Diffstat (limited to 'macros/latex/contrib/hagenberg-thesis/latex')
-rw-r--r--macros/latex/contrib/hagenberg-thesis/latex/hgb.sty305
-rw-r--r--macros/latex/contrib/hagenberg-thesis/latex/hgbabbrev.sty50
-rw-r--r--macros/latex/contrib/hagenberg-thesis/latex/hgbalgo.sty109
-rw-r--r--macros/latex/contrib/hagenberg-thesis/latex/hgbarticle.cls76
-rw-r--r--macros/latex/contrib/hagenberg-thesis/latex/hgbbib.sty177
-rw-r--r--macros/latex/contrib/hagenberg-thesis/latex/hgbheadings.sty36
-rw-r--r--macros/latex/contrib/hagenberg-thesis/latex/hgblistings.sty406
-rw-r--r--macros/latex/contrib/hagenberg-thesis/latex/hgbmath.sty20
-rw-r--r--macros/latex/contrib/hagenberg-thesis/latex/hgbreport.cls72
-rw-r--r--macros/latex/contrib/hagenberg-thesis/latex/hgbthesis.cls595
10 files changed, 1846 insertions, 0 deletions
diff --git a/macros/latex/contrib/hagenberg-thesis/latex/hgb.sty b/macros/latex/contrib/hagenberg-thesis/latex/hgb.sty
new file mode 100644
index 0000000000..276eba02ed
--- /dev/null
+++ b/macros/latex/contrib/hagenberg-thesis/latex/hgb.sty
@@ -0,0 +1,305 @@
+%% hgb.sty
+%% This file is part of the Hagenberg Thesis package for creating bachelors's and masters's theses
+%% Author: Wilhelm Burger (wilhelm.burger@fh-hagenberg.at)
+%% GitHub: https://github.com/Digital-Media/HagenbergThesis
+%% File encoding: ASCII
+
+\NeedsTeXFormat{LaTeX2e}
+\newcommand{\hgbDate}{2019/05/11} % version string
+\ProvidesPackage{hgb}[\hgbDate]
+\typeout{******************* hgb.sty (options=\@nameuse{opt@hgb.sty}) ***********************}
+
+% Create a default/fallback main language so it is set no matter what
+\providecommand{\hgb@MainLanguage}{german}
+
+\RequirePackage{xifthen}
+\newboolean{hgb@SmartQuotesOn}
+\setboolean{hgb@SmartQuotesOn}{false}
+
+% Handle package options passed from the class file
+\DeclareOption{english}{\renewcommand{\hgb@MainLanguage}{english}}
+\DeclareOption{german}{\renewcommand{\hgb@MainLanguage}{german}}
+\DeclareOption{ngerman}{\renewcommand{\hgb@MainLanguage}{german}}
+\DeclareOption{smartquotes}{\setboolean{hgb@SmartQuotesOn}{true}}
+\ProcessOptions*
+
+%% Required Packages ----------------------------------------------------------
+
+
+\RequirePackage{lmodern} % use Latin Modern Fonts
+\RequirePackage{cmap} % make generated PDF files "searchable and copyable"
+\RequirePackage[utf8]{inputenc}
+\RequirePackage[T1]{fontenc} % T1 font encoding for improved hyphenation
+
+% Set main language by selectively loading babel with the 'main' parameter (babel 3.9+)
+\ifthenelse{\equal{\hgb@MainLanguage}{german}}%
+ {\RequirePackage[english,main=ngerman]{babel}}{}
+\ifthenelse{\equal{\hgb@MainLanguage}{english}}%
+ {\RequirePackage[main=english,ngerman]{babel}}{}
+
+%% Setup for smart quotes (csquotes package) -- experimental! ----------------------------------
+
+\ifthenelse{\boolean{hgb@SmartQuotesOn}}{
+ \languageshorthands{none}% %% turn off babel's shorthands (permanently)
+ \usepackage[autostyle=true,german=quotes]{csquotes}%
+ \MakeOuterQuote{"}%
+ \EnableQuotes}{}
+
+%% Language environments ------------------------------------------------------
+
+% Switch from German to English (babel)
+\newenvironment{english}%
+{\begin{otherlanguage}{english}%
+ \ifthenelse{\boolean{hgb@SmartQuotesOn}}{\EnableQuotes}{}}%
+{\end{otherlanguage}\ignorespacesafterend}%
+
+% Switch from English to German (babel)
+\newenvironment{german}%
+{\begin{otherlanguage}{ngerman}%
+ \ifthenelse{\boolean{hgb@SmartQuotesOn}}{\EnableQuotes}{}}%
+{\end{otherlanguage}}%
+
+%% ------------------------------------------------------
+
+\RequirePackage{datetime}
+\RequirePackage{upquote} % uses "right" quotes in the verbatim environment
+\RequirePackage{eurosym} % provides \euro - conflict with marvosym on \EUR!
+
+\RequirePackage{graphicx}
+\RequirePackage[percent]{overpic} % to allow text/graphics overlays on pictures
+\RequirePackage{pict2e} % extends the LaTeX 'picture' environment
+
+\RequirePackage{xcolor}
+\newcommand{\@MissingArg}[1]{\textcolor{red}{#1}}
+
+\RequirePackage[T1,hyphens,obeyspaces,spaces,lowtilde]{url}
+\urlstyle{sf}
+
+\RequirePackage{verbatim}
+\RequirePackage{moreverb}
+\def\verbatimtabsize{2\relax}
+
+\RequirePackage{ifpdf}
+\ifpdf % LaTeX is in native PDF mode (pdflatex)
+ \RequirePackage{epstopdf} % converting EPS to PDF for pdflatex
+% \pdfcompresslevel=0 % 0 = no compression, 9 = max. compression
+% \pdfimageresolution=300
+\else % LaTeX is in emulation mode (DVI-PS-PDF)
+ \RequirePackage[hyphenbreaks]{breakurl} % allows line breaks in URLs without pdflatex (DIV, PS, PDF)
+\fi
+
+
+%% hyperref Setup -------------------------------------------------------------
+
+\RequirePackage[unicode]{hyperref} % utf8-change
+\hypersetup{
+ linktocpage = true, % make page number, not text, be link on TOC, LOF and LOT
+ colorlinks = false, % don't uses colored links (because this shows up in printing!)
+ pdfborder = {0 0 0.5}, % use a thinner (0.5pt) border around all PDF links
+ allbordercolors = {0 0 0.8}, % dark blue border for all types of links
+ breaklinks = true % allow links to break over lines by making links over multiple lines
+} %see https://www.tug.org/applications/hyperref/manual.html
+
+% Redefine certain commands for bookmarks and meta-data
+\let\oldand\and
+\pdfstringdefDisableCommands{%
+ \def\\{}%
+ \def\url#1{<#1>}%
+ \def\and{\texorpdfstring{\oldand}{, }}%
+}
+
+\RequirePackage[figure,table,table*]{hypcap} % do not redefine figure* for use in article (without captions)
+
+%% Miscellaneous Utility Commands ---------------------------------------------
+
+\newcommand\trennstrich{%
+ \nopagebreak[4]
+ \vskip 1.5ex %
+% \nopagebreak[4]
+ \noindent\makebox[\textwidth]{\rule{4cm}{0.4pt}}
+ \vskip 2.5ex}
+
+\newcommand{\SuperPar}[0]{%
+\PackageWarning{hgb}{Due to frequent misuse, macro 'SuperPar' has been removed.}
+}
+
+% Test box for print proofing
+\newcommand{\calibrationbox}[2]{% parameters: #1=width, #2=height
+ \setlength{\unitlength}{1.0mm}%
+ \begin{picture}(#1,#2)%
+ \linethickness{0.05mm}%
+ \put(0,0){\dashbox{0.2}(#1,#2)%
+ {\parbox{#1mm}{%
+ \centering\footnotesize
+ width $ = #1 \textrm{mm}$\\
+ height $ = #2 \textrm{mm}$
+ }}}\end{picture}
+}
+
+% Test box for print proofing (obsolete - use \calibrationbox)
+\newcommand{\Messbox}[2]{
+ \calibrationbox{#1}{#2}
+}
+
+\newcommand{\ShowParameter}[1]{\the#1\showthe#1} % to display TeX parameters
+%Beispiel: clubpenalty = \ShowParameter{\clubpenalty}
+
+
+%% Layout Settings ------------------------------------------------------------
+
+\frenchspacing % creates normal spacing between sentences
+\setlength{\parskip}{0pt plus 0.1pt}
+\raggedbottom %\flushbottom
+
+\RequirePackage{float}
+\floatstyle{plain}
+
+% Captions with font size "small" and additional margin spacing
+\RequirePackage[small,bf]{caption}
+\DeclareCaptionStyle{ruled}{labelfont=bf,labelsep=colon}
+\setlength{\captionmargin}{5mm}
+\setlength{\abovecaptionskip}{10pt}
+\setlength{\belowcaptionskip}{10pt}
+
+%% Disable \footnote in captions:
+\newcommand{\@WarnFootnoteInCaption}{%
+\GenericError{}{Package hgb Error: footnotes in captions are disabled}%
+{How to fix: do not place footnotes in captions!}{}}%
+\DeclareCaptionTextFormat{nofootnotes}{%
+ \renewcommand{\footnote}[1]{\@WarnFootnoteInCaption\relax}#1}
+\captionsetup{textformat=nofootnotes}
+
+
+% Make float placement easier
+\renewcommand{\floatpagefraction}{.9} % previously: .5
+\renewcommand{\textfraction}{.1} % previously: .2
+\renewcommand{\topfraction}{.9} % previously: .7
+\renewcommand{\bottomfraction}{.7} % previously: .3
+\setcounter{topnumber}{3} % previously: 2
+\setcounter{bottomnumber}{2} % previously: 1
+\setcounter{totalnumber}{5} % previously: 3
+
+\RequirePackage{enumitem} % fix excessive vertical spacing in lists
+\setlist{%
+ partopsep = .0ex plus .1ex,
+ topsep = .6ex plus .3ex,
+ itemsep = .0ex plus .1ex,
+ parsep = .4ex plus .2ex
+}
+
+\newenvironment{nowidows}%
+ {\clubpenalty=10000%
+ \widowpenalty=10000%
+ \displaywidowpenalty=10000}%
+ {}
+%Example:
+% \begin{nowidows}
+% Any text where no widows are allowed
+% \end{nowidows}
+
+
+% Setup for Table of Contents (ToC)
+
+%\RequirePackage[tocgraduated,tocbreaksstrict]{tocstyle}% %% Note: tocstyle is unsupported!
+%\usetocstyle{classic}%
+
+\RequirePackage{tocbasic}% %% tocbasic is part of koma script
+\DeclareTOCStyleEntry[entryformat=\bfseries\textsf]{tocline}{chapter}%
+
+%% Program environments ----------------------------------------
+
+% Define the program float environment:
+\@ifundefined{chapter}%
+ {\newfloat{program}{tbp}{lop}}%
+ {\newfloat{program}{tbp}{lop}[chapter]}
+
+\floatstyle{plain}
+\restylefloat*{program}
+
+\ifthenelse{\equal{\bbl@main@language}{german} \or \equal{\bbl@main@language}{ngerman}}%
+ {\floatname{program}{Programm}}{}%
+
+\ifthenelse{\equal{\bbl@main@language}{english}}%
+ {\floatname{program}{Program}}{}%
+
+
+%% Date-related commands ------------------------------------------------------
+
+\RequirePackage{datetime}
+\showdowfalse % do not show day of week
+
+% adapted from \newdate in datetime.sty
+\newcommand*{\@modifydate}[4]{%
+\@namedef{date@#1@d}{#2}%
+\@namedef{date@#1@m}{#3}%
+\@namedef{date@#1@y}{#4}%
+}
+
+\newdate{hgb@date}{\the\day}{\the\month}{\the\year}
+\newcommand{\Date}[3]{% example for use: \Date{16}{5}{2008}
+ \@modifydate{hgb@date}{#1}{#2}{#3}
+}
+
+\newcommand{\hgb@GetDateDay}{\getdateday{hgb@date}}
+\newcommand{\hgb@GetDateMonth}{\getdatemonth{hgb@date}}
+\newcommand{\hgb@GetDateYear}{\getdateyear{hgb@date}}
+\newcommand{\hgb@DisplayDate}{\displaydate{hgb@date}}
+
+%% Experimental items ---------------------------------------------------------
+
+\newenvironment{NarrowList}%
+{\begin{list}{}%
+{\setlength{\leftmargin}{2.5em}
+ \setlength{\labelwidth}{1em}
+ \setlength{\labelsep}{0.5em}
+ \setlength{\itemsep}{0.5ex}
+ \setlength{\parsep}{0ex}
+ \setlength{\topsep}{0ex}
+\raggedright
+}}%
+{\end{list}}
+
+\providecommand{\hgb@PathName}{Pfad}
+
+\newenvironment{FileList}[1]%
+{%\paragraph{Pfad:} \url{#1}
+\ifthenelse{\equal{\hgb@MainLanguage}{german}}
+ {\renewcommand{\hgb@PathName}{Pfad}}%
+ {\renewcommand{\hgb@PathName}{Path}}%
+\paragraph{\hgb@PathName: \nolinkurl{#1}}
+\begin{list}{}%
+{\setlength{\leftmargin}{5cm}
+ \setlength{\labelwidth}{4cm}
+ \setlength{\labelsep}{0.25cm}
+ \setlength{\rightmargin}{0cm}
+ \setlength{\itemindent}{0cm}
+ \setlength{\itemsep}{0.5ex}
+ \setlength{\parsep}{0ex}
+ \setlength{\topsep}{1ex}
+\raggedright
+}}%
+{\end{list}}
+
+\def\widedotfill{\leaders\hbox to 8pt{\hfil.\hfil}\hfill}
+
+\newcommand{\fitem}[1]{%
+\item[\nolinkurl{#1}\widedotfill]
+}
+
+%% For inserting foreign PDF pages --------------------------------------------
+
+\RequirePackage{pdfpages}
+
+%% Prevent subfigure package from being loaded -------------------------------
+
+% The subfigure package is DEPRECATED (see https://ctan.org/pkg/subfigure)!
+% We strongly advise against its use since it creates poor output which is not
+% compatible with our quality standards. Loading this package is therefore blocked
+% by default. We recommend to use the 'tabular' environment instead.
+
+\newcommand{\subfigure}{%
+\PackageError{hgb}{Use of the 'subfigure' package is not supported in this setup, because it is obsolete}{}}
+
+%% ----------------------------------------------------------------------------
+
+\setlength{\fboxsep}{0mm} %globally zero fbox separator
diff --git a/macros/latex/contrib/hagenberg-thesis/latex/hgbabbrev.sty b/macros/latex/contrib/hagenberg-thesis/latex/hgbabbrev.sty
new file mode 100644
index 0000000000..85284609fe
--- /dev/null
+++ b/macros/latex/contrib/hagenberg-thesis/latex/hgbabbrev.sty
@@ -0,0 +1,50 @@
+%% hgbabbrev.sty
+%% This file is part of the Hagenberg Thesis package for creating bachelors's and masters's theses
+%% Author: Wilhelm Burger (wilhelm.burger@fh-hagenberg.at)
+%% GitHub: https://github.com/Digital-Media/HagenbergThesis
+%% File encoding: ASCII
+
+\ProvidesPackage{hgbabbrev}[2019/05/11]
+
+\newcommand{\latex}{La\-TeX\xspace} % no ornamental LaTeX anymore
+\newcommand{\tex}{TeX\xspace} % no ornamental LaTeX anymore
+\newcommand{\bs}{\textbackslash} % backslash character
+\newcommand{\obnh}{\hskip 0pt } %optional break without hyphen: e.g. PlugIn{\obnh}Filter
+%\newcommand{\optbreaknh}{\hskip 0pt } %obsolete, replaced by above
+
+% Miscellaneous abbreviations (in dependance on Jochen Kuepper, jkthesis):
+\RequirePackage{xspace}
+
+%% German abbreviations:
+
+\newcommand{\bzgl}{bzgl.\@\xspace}
+\newcommand{\bzw}{bzw.\@\xspace}
+\newcommand{\ca}{ca.\@\xspace}
+\newcommand{\dah}{d.\thinspace{}h.\@\xspace}
+\newcommand{\Dah}{D.\thinspace{}h.\@\xspace}
+\newcommand{\ds}{d.\thinspace{}sind\@\xspace}
+\newcommand{\etc}{etc.\@\xspace}
+\newcommand{\evtl}{evtl.\@\xspace}
+\newcommand{\ia}{i.\thinspace{}Allg.\@\xspace}
+\newcommand{\sa}{s.\ auch\@\xspace}
+\newcommand{\so}{s.\ oben\xspace}
+\newcommand{\su}{s.\ unten\@\xspace}
+
+\newcommand{\ua}{u.\thinspace{}a.\@\xspace}
+\newcommand{\Ua}{U.\thinspace{}a.\@\xspace}
+\newcommand{\uae}{u.\thinspace{}\"A.\@\xspace}
+\newcommand{\usw}{usw.\@\xspace}
+\newcommand{\uva}{u.\thinspace{}v.\thinspace{}a.\@\xspace}
+\newcommand{\uvm}{u.\thinspace{}v.\thinspace{}m.\@\xspace}
+\newcommand{\va}{vor allem\@\xspace}
+\newcommand{\vgl}{vgl.\@\xspace}
+\newcommand{\zB}{z.\thinspace{}B.\@\xspace}
+\newcommand{\ZB}{Zum Beispiel\xspace}
+
+%% English abbreviations:
+
+\newcommand{\ie}{i.e.\@\xspace}
+\newcommand{\eg}{e.g.\@\xspace}
+\newcommand{\Eg}{E.g.\@\xspace}
+%\newcommand{\etc}{etc.\@\xspace}
+\newcommand{\wrt}{w.r.t.\@\xspace}
diff --git a/macros/latex/contrib/hagenberg-thesis/latex/hgbalgo.sty b/macros/latex/contrib/hagenberg-thesis/latex/hgbalgo.sty
new file mode 100644
index 0000000000..fdf6e52f49
--- /dev/null
+++ b/macros/latex/contrib/hagenberg-thesis/latex/hgbalgo.sty
@@ -0,0 +1,109 @@
+%% hgbalgo.sty
+
+%% Toward better looking algorithms ...
+%% This package imports and pre-configures the 'algorithmicx'/'algorithmicpseudocode' packages
+%% (see https://ctan.org/pkg/algorithmicx), fixes some problems and adds new functionality
+%% and colors. It relies on the 'algorithm' package for typesetting float-type algorithms
+%% with captions.
+
+%% This file is part of the Hagenberg Thesis package for creating bachelors's and masters's theses
+%% Author: Wilhelm Burger (wilhelm.burger@fh-hagenberg.at)
+%% GitHub: https://github.com/Digital-Media/HagenbergThesis
+%% File encoding: ASCII
+
+\ProvidesPackage{hgbalgo}[2019/05/11]
+
+\RequirePackage[]{algpseudocode} % imports algpseudocode + algorithmicx (use 'noend' to turn off 'end')
+\RequirePackage{calc} % for numeric calculations
+\RequirePackage{xcolor}
+
+% Colors to be used in algorithms (can be redefined locally if desired)
+%\definecolor{AlgKeywordColor}{named}{black}
+%\definecolor{AlgProcedureColor}{named}{black}
+%\definecolor{AlgCommentColor}{named}{black}
+
+\definecolor{AlgKeywordColor}{rgb}{0.00, 0.00, 0.666} % = Dark Blue
+\definecolor{AlgProcedureColor}{rgb}{0.00, 0.5, 0.20} % = Dark Green
+\definecolor{AlgCommentColor}{gray}{0.40} % = Gray (40% black)
+
+\algrenewcommand\algorithmicend{\textbf{\color{AlgKeywordColor}end}}
+\algrenewcommand\algorithmicdo{\textbf{\color{AlgKeywordColor}do}}
+\algrenewcommand\algorithmicwhile{\textbf{\color{AlgKeywordColor}while}}
+\algrenewcommand\algorithmicfor{\textbf{\color{AlgKeywordColor}for}}
+\algrenewcommand\algorithmicforall{\textbf{\color{AlgKeywordColor}for all}}
+\algrenewcommand\algorithmicloop{\textbf{\color{AlgKeywordColor}loop}}
+\algrenewcommand\algorithmicrepeat{\textbf{\color{AlgKeywordColor}repeat}}
+\algrenewcommand\algorithmicuntil{\textbf{\color{AlgKeywordColor}until}}
+\algrenewcommand\algorithmicprocedure{\textbf{\color{AlgKeywordColor}procedure}}
+\algrenewcommand\algorithmicfunction{\textbf{\color{AlgKeywordColor}function}}
+\algrenewcommand\algorithmicif{\textbf{\color{AlgKeywordColor}if}}
+\algrenewcommand\algorithmicthen{\textbf{\color{AlgKeywordColor}then}}
+\algrenewcommand\algorithmicelse{\textbf{\color{AlgKeywordColor}else}}
+\algrenewcommand\algorithmicrequire{\textbf{\color{AlgKeywordColor}Require:}}
+\algrenewcommand\algorithmicensure{\textbf{\color{AlgKeywordColor}Ensure:}}
+\algrenewcommand\algorithmicreturn{\textbf{\color{AlgKeywordColor}return}}
+
+\algrenewcommand\algorithmiccomment[1]{\hfill{\color{AlgCommentColor}\(\triangleright\) #1}}%
+
+%% algpseudocode assumes that these keywords are non-empty:
+%\algrenewcommand\algorithmicprocedure{} % no 'procedure' keyword
+%\algrenewcommand\algorithmicfunction{} % no 'function' keyword
+
+% Use SF font and color for procedure and function names:
+\newcommand{\@AlgTextProc}[1]{\textcolor{AlgProcedureColor}{\textsf{#1}}}
+\algrenewcommand\textproc{\@AlgTextProc}
+
+% Redefinitions to remove wrong space when \algorithmicprocedure is empty.
+% Inserts an empty () parameter list when no parameters are supplied:
+\algdef{SE}[PROCEDURE]{Procedure}{EndProcedure}[2]{%
+ \ifthenelse{\equal{\algorithmicprocedure}{}}%
+ {}{\algorithmicprocedure\ }%
+ \textproc{#1}\hskip0.75pt(#2)}%
+ {\algorithmicend\ \algorithmicprocedure}%
+
+\algdef{SE}[FUNCTION]{Function}{EndFunction}[2]{%
+ \ifthenelse{\equal{\algorithmicfunction}{}}%
+ {}{\algorithmicfunction\ }%
+ \textproc{#1}\hskip0.75pt(#2)}%
+ {\algorithmicend\ \algorithmicfunction}%
+
+%\algrenewcommand\Call[2]{\textproc{#1}\ifthenelse{\equal{#2}{}}{}{(#2)}}%
+\algrenewcommand\Call[2]{\textproc{#1}\hskip0.75pt(#2)}%
+
+%% -----------------------------------------------------------------
+
+\newlength{\@AlgTmpIndent}
+
+%% New public macros:
+
+% \StateLong{<text>} creates numbered statements like algorithmicx's \State command but
+% provides consistent indentation on multi-line statements.
+% Note that the statement text must be passed as an argument in {...} brackets
+\newcommand*{\StateL}[1]{\State \parbox[t]{\linewidth-\ALG@thistlm}{#1\strut}}%
+
+% \StateNN[<nesting>]{<text>} creates non-numbered statements like algorithmicx's \Statex
+% command but provides consistent indentation inside nested constructs and over multiple lines.
+% The optional integer argument [<nesting>] can be used to specify the nesting depth
+% to counteract a bug in algorithmicx (nesting level is not set properly before the first \State
+% command inside a nested construct.
+\newcommand{\StateNN}[2][\numexpr\theALG@nested-1]{% default indentation = nesting - 1
+ \setlength\@AlgTmpIndent{\algorithmicindent*#1}% requires calc package
+ \Statex\hskip\@AlgTmpIndent\parbox[t]{\linewidth-\@AlgTmpIndent}{#2\strut}%
+}%
+
+% Macros for describing input and output of procedures and functions:
+\algnewcommand\Input[1]{\StateNN[1]{\textbf{Input:} #1}}% use to describe input parameters: \Input{<description>}
+\algnewcommand\Output[1]{\StateNN[1]{\textbf{Output:} #1}}% use to describe output values: \Output{<description>}
+\algnewcommand\Returns[1]{\StateNN[1]{\textbf{Returns} #1}}% use to describe what a procedure/function returns: \Returns{<description}
+
+
+% 'algorithm' creates a floating environment for algorithms: \begin{algorithm}...\end{algorithm}
+\@ifundefined{chapter}%
+ {\RequirePackage[ruled]{algorithm}}%
+ {\RequirePackage[ruled,chapter]{algorithm}}
+
+\ifthenelse{\equal{\bbl@main@language}{german} \or \equal{\bbl@main@language}{ngerman}}%
+ {\floatname{algorithm}{Algorithmus}}{}%
+
+\ifthenelse{\equal{\bbl@main@language}{english}}%
+ {\floatname{algorithm}{Algorithm}}{}%
diff --git a/macros/latex/contrib/hagenberg-thesis/latex/hgbarticle.cls b/macros/latex/contrib/hagenberg-thesis/latex/hgbarticle.cls
new file mode 100644
index 0000000000..00797a09d8
--- /dev/null
+++ b/macros/latex/contrib/hagenberg-thesis/latex/hgbarticle.cls
@@ -0,0 +1,76 @@
+%% hgbarticle.cls
+%% LaTeX class for creating lab and term reports as well as other forms of academic documentation.
+%% This file is part of the Hagenberg Thesis package for creating bachelors's and masters's theses
+%% Author: Wolfgang Hochleitner (wolfgang.hochleitner@fh-hagenberg.at)
+%% GitHub: https://github.com/Digital-Media/HagenbergThesis
+%% File encoding: ASCII
+
+%% Package Information --------------------------------------------------------
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{hgbarticle}[2019/05/11]
+
+\RequirePackage{xifthen}
+
+\RequirePackage{ifpdf} % for checking PDF mode
+\ifpdf{}% \typeout{hgbarticle: *** LaTeX in PDF mode ***}
+\else{\errmessage{hgbarticle: *** LaTeX NOT running in PDF mode ***}}
+\fi
+
+%% Handling class options --------------------------------------------------------------
+
+\DeclareOption{twocolumn}{\PassOptionsToClass{\CurrentOption}{article}}
+\DeclareOption{english}{\PassOptionsToPackage{\CurrentOption}{hgb}}
+\DeclareOption{german}{\PassOptionsToPackage{\CurrentOption}{hgb}}
+\DeclareOption{smartquotes}{\PassOptionsToPackage{\CurrentOption}{hgb}}
+\DeclareOption*{\ClassWarning{hgbarticle}{Unknown document option '\CurrentOption'.}}
+\ProcessOptions
+
+%% Paper options and style file -----------------------------------------------
+
+\LoadClass[a4paper,11pt]{article}
+
+%Adjust margins only in single-column mode
+\if@twocolumn%
+\else%
+\RequirePackage[top=36mm,bottom=40mm,left=32mm,right=32mm]{geometry} %showframe
+\fi%
+
+\RequirePackage{hgb} % load style file hgb.sty with options registered above
+
+
+%% Set title font to SF
+\RequirePackage{titling}
+\renewcommand{\maketitlehooka}{\sffamily}
+
+%% Set abstract name to bold (single column format only)
+\if@twocolumn%
+\else%
+\RequirePackage{abstract}
+\renewcommand{\abstractnamefont}{\sffamily\small\bfseries}
+\fi%
+
+% Add PDF meta data
+
+\AtBeginDocument{%
+ \hypersetup{
+ pdftitle={\@title},
+ pdfauthor={\@author},
+ pdfsubject={},
+ pdfcreator={LaTeX using class hgbarticle [\hgbDate]},
+ pdfproducer={pdflatex},
+ pdfkeywords={}
+ }%
+}%
+
+
+%% Additional Hagenberg packages ----------------------------------------------
+
+\RequirePackage{hgbmath}
+\RequirePackage{hgbalgo}
+\RequirePackage{hgbheadings}
+\RequirePackage{hgbabbrev}
+\RequirePackage{hgblistings}
+\RequirePackage{hgbbib}
+
+\endinput
diff --git a/macros/latex/contrib/hagenberg-thesis/latex/hgbbib.sty b/macros/latex/contrib/hagenberg-thesis/latex/hgbbib.sty
new file mode 100644
index 0000000000..2cb82d3961
--- /dev/null
+++ b/macros/latex/contrib/hagenberg-thesis/latex/hgbbib.sty
@@ -0,0 +1,177 @@
+%% hgbbib.sty
+%% Bibliography Setup
+%% This file is part of the Hagenberg Thesis package for creating bachelors's and masters's theses
+%% Author: Wilhelm Burger (wilhelm.burger@fh-hagenberg.at)
+%% GitHub: https://github.com/Digital-Media/HagenbergThesis
+%% File encoding: ASCII
+
+\ProvidesPackage{hgbbib}[2019/05/11]
+
+\usepackage{csquotes} % recommended for biblatex
+
+%Note: biblatex with bibtex backend is frozen at version 1.7.
+\usepackage[style=numeric-comp,backend=biber,bibencoding=auto]{biblatex}
+\ExecuteBibliographyOptions{
+ bibwarn=true,
+ sortcites=true,
+ defernumbers=true,
+ isbn=false,
+ doi=false,
+ backref=true,
+ backrefstyle=three}
+
+%% titles of reference section + 3 categories of references:
+\newcommand{\@bibtitle}{Quellenverzeichnis}
+\newcommand{\@bibtitleLiteratur}{Literatur}
+\newcommand{\@bibtitleAvmedia}{Audiovisuelle Medien}
+\newcommand{\@bibtitleOnline}{Online-Quellen}
+\newcommand{\@bibtitleSoftware}{Software}
+
+\ifthenelse{\equal{\hgb@MainLanguage}{english}}{%
+ \renewcommand{\@bibtitle}{References}
+ \renewcommand{\@bibtitleLiteratur}{Literature}
+ \renewcommand{\@bibtitleAvmedia}{Audio-visual media}
+ \renewcommand{\@bibtitleOnline}{Online sources}
+ \renewcommand{\@bibtitleSoftware}{Software}
+}{}
+
+%% categories for a split bibliography (order of declaration is important!)
+\DeclareBibliographyCategory{literature}
+\DeclareBibliographyCategory{avmedia}
+\DeclareBibliographyCategory{software}
+\DeclareBibliographyCategory{online}
+
+%% headings for the bibliography categories
+\defbibheading{literature}{%
+ \phantomsection%
+ \section*{\@bibtitleLiteratur}%
+ \addcontentsline{toc}{section}{\@bibtitleLiteratur}%
+}
+
+\defbibheading{avmedia}{%
+ \pagebreak[3]%
+ \phantomsection%
+ \section*{\@bibtitleAvmedia}%
+ \addcontentsline{toc}{section}{\@bibtitleAvmedia}%
+}
+
+\defbibheading{online}{%
+ \pagebreak[3]%
+ \phantomsection%
+ \section*{\@bibtitleOnline}%
+ \addcontentsline{toc}{section}{\@bibtitleOnline}%
+}
+
+\defbibheading{software}{%
+ \pagebreak[3]%
+ \phantomsection%
+ \section*{\@bibtitleSoftware}%
+ \addcontentsline{toc}{section}{\@bibtitleSoftware}%
+}
+
+\defbibheading{noheader}[]{} % 'none' should be defined but isn't
+
+%Assign a given bibliography entry to one of the defined categories.
+\newcommand{\@AssignToBibCategory}[1]% argument 1: entry key
+{\ifthenelse{%
+ \ifentrytype{online}\OR
+ \ifentrytype{www}}
+ {\addtocategory{online}{#1}}%
+{\ifthenelse{%
+ \ifentrytype{movie}\OR
+ \ifentrytype{video}\OR
+ \ifentrytype{music}\OR
+ \ifentrytype{audio}\OR
+ \ifentrytype{image}}
+ {\addtocategory{avmedia}{#1}}%
+{\ifthenelse{%
+ \ifentrytype{software}\OR
+ \ifentrytype{electronic}}
+ {\addtocategory{software}{#1}}%
+ {\addtocategory{literature}{#1}}% else (default)
+}}}
+
+%Hook provided by biblatex.
+\AtEveryCitekey{\@AssignToBibCategory{\thefield{entrykey}}}
+
+%This is only a wrapper to \addbibresource to allow the use
+%of the classic bibtex-workflow in the future.
+\newcommand{\AddBibFile}[1]{
+ \addbibresource{#1}%
+}
+
+%See http://www.jr-x.de/publikationen/latex/tipps/zeilenumbruch.html
+\newenvironment{bibhyphenation}%
+ {\hyphenpenalty=2% (default 50)
+ \tolerance=9999% (default 200)
+ \exhyphenpenalty=2% (default 50)
+ \linepenalty=1% (default 10)
+ \setlength{\emergencystretch}{3em}%
+ % allow URL hyphenation at any character (definitions in biblatex.def)
+ \setcounter{biburlnumpenalty}{1}%
+ \setcounter{biburlucpenalty}{1}%
+ \setcounter{biburllcpenalty}{1}%
+ \biburlsetup}%
+ {}
+
+% Currently the only public macro:
+% \MakeBibliography ... creates a reference section split subsections (default)
+% \MakeBibliography[nosplit] ... creates a one-piece reference section
+\newcommand{\MakeBibliography}[1][]{
+ % opt. arg (#1): optional argument "nosplit" to get a 1-piece bibliography
+ %\clearpage
+ \ifthenelse{\equal{#1}{nosplit}}%
+ {% create a single bibliography with all entries:
+ \printbibheading[heading=bibintoc,title={\@bibtitle}]
+ \begin{bibhyphenation}
+ \printbibliography[heading=noheader]
+ \end{bibhyphenation}
+ }
+ {% split the bibliography using the predefined categories:
+ \printbibheading[heading=bibintoc,title={\@bibtitle}]
+ \begin{bibhyphenation}
+ \bibbycategory
+ \end{bibhyphenation}
+ }%
+}
+
+% Suppress unusual "In:" within journal article references.
+% see http://tex.stackexchange.com/questions/10682/suppress-in-biblatex
+\renewbibmacro{in:}{%
+ \ifentrytype{article}{}{%
+ \printtext{\bibstring{in}\intitlepunct}}}
+
+
+% To suppress warnings related to missing biblatex "drivers":
+\DeclareBibliographyAlias{video}{misc}
+\DeclareBibliographyAlias{movie}{misc}
+\DeclareBibliographyAlias{audio}{misc}
+\DeclareBibliographyAlias{software}{misc}
+\DeclareBibliographyAlias{electronic}{misc}
+\DeclareBibliographyAlias{image}{misc}
+\DeclareBibliographyAlias{standard}{misc}
+
+
+% Use a semicolon between multiple entries in \cites
+%\renewcommand*{\multicitedelim}{\addsemicolon\space} %% abandoned, affects regular \cite{a,b,c,..} entries too
+
+% New command for multiple citations with supplementary texts
+% usage: \mcite[text1]{key1}[text2]{key2}...[textN]{keyN}
+% see https://tex.stackexchange.com/a/132981
+\DeclareMultiCiteCommand{\mcite}[\mkbibbrackets]{\cite}{\addsemicolon\space}
+
+
+% Macro to produce cites with no backref entries
+% Modified from http://mirrors.ibiblio.org/CTAN/macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee.cbx
+% See also https://tex.stackexchange.com/questions/344861/biblatex-backref-option-per-entry
+\DeclareCiteCommand{\citenobr}%
+ {\usebibmacro{cite:init}%
+ \bibopenbracket
+ \backtrackerfalse\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite:comp}}
+ {}
+ {\usebibmacro{cite:dump}%
+ \usebibmacro{postnote}%
+ \bibclosebracket
+ }
diff --git a/macros/latex/contrib/hagenberg-thesis/latex/hgbheadings.sty b/macros/latex/contrib/hagenberg-thesis/latex/hgbheadings.sty
new file mode 100644
index 0000000000..7c3120cd5f
--- /dev/null
+++ b/macros/latex/contrib/hagenberg-thesis/latex/hgbheadings.sty
@@ -0,0 +1,36 @@
+%% hgbheadings.sty
+%% Headings setup
+%% This file is part of the Hagenberg Thesis package for creating bachelors's and masters's theses
+%% Author: Wilhelm Burger (wilhelm.burger@fh-hagenberg.at)
+%% GitHub: https://github.com/Digital-Media/HagenbergThesis
+%% File encoding: ASCII
+
+\ProvidesPackage{hgbheadings}[2019/05/11]
+
+\RequirePackage{fancyhdr}
+\pagestyle{fancy}
+
+\RequirePackage[sf,raggedright]{titlesec} % use sans serif for chapter/section headings
+
+\@ifundefined{chapter}%
+ {}%
+ {\renewcommand{\chaptermark}[1]{%
+ \ifthenelse{\value{chapter} < 1}%
+ {\markboth{#1}{}}%
+ {\markboth{\thechapter.\ #1}{}}
+ }}
+
+\addtolength{\headheight}{\baselineskip}
+\renewcommand{\headrulewidth}{0pt} % thin line under header
+\renewcommand{\footrulewidth}{0pt}
+\fancyhf{} % clear all fields.
+\fancyhead[R]{\sffamily\thepage} %{\bf \rightmark}
+\fancyhead[L]{\sffamily\nouppercase{\leftmark}} %{\slshape \leftmark}
+
+\fancypagestyle{plain}{%
+ \fancyhf{} % clear all header and footer fields
+ \fancyfoot[C]{\sffamily\thepage} % except the center
+ \renewcommand{\headrulewidth}{0pt}
+ \renewcommand{\footrulewidth}{0pt}
+}
+
diff --git a/macros/latex/contrib/hagenberg-thesis/latex/hgblistings.sty b/macros/latex/contrib/hagenberg-thesis/latex/hgblistings.sty
new file mode 100644
index 0000000000..cf4c5cd504
--- /dev/null
+++ b/macros/latex/contrib/hagenberg-thesis/latex/hgblistings.sty
@@ -0,0 +1,406 @@
+%% hgblistings.sty
+%% This file is part of the Hagenberg Thesis package for creating bachelors's and masters's theses
+%% Author: Wilhelm Burger (wilhelm.burger@fh-hagenberg.at)
+%% GitHub: https://github.com/Digital-Media/HagenbergThesis
+%% File encoding: UTF-8
+
+\ProvidesPackage{hgblistings}[2019/05/11]
+
+\RequirePackage{ifthen}
+\RequirePackage{textcomp} %% required for upquote option
+
+\RequirePackage{xcolor}
+\definecolor{ListingsBackgroundColor}{gray}{0.95}
+
+\RequirePackage{listingsutf8}
+\lstset{
+inputencoding=utf8,
+extendedchars=true,
+basicstyle=\ttfamily\footnotesize,%
+keywordstyle=,%\ttfamily,%\bfseries,
+identifierstyle=,%\sffamily, %\bfseries
+commentstyle=\normalfont\itshape,%
+stringstyle=\ttfamily,%
+showstringspaces=false,%
+columns = flexible,% fixed,
+breaklines=true,%
+tabsize=2, %
+backgroundcolor=\color{ListingsBackgroundColor},
+xleftmargin=6mm,%
+frame=none,
+framexleftmargin=6mm,
+numbers=left,%
+numbersep=5pt,%
+numberstyle=\normalfont\scriptsize,%
+stepnumber=1,%
+numberfirstline=true,%
+numberblanklines=true,%
+texcl=false,% %important: read program comments as Latex content
+mathescape=false, %no mathescape by default
+upquote=true,%
+keepspaces=true,%
+}
+
+\RequirePackage[utf8]{inputenc}
+\lstset{literate=% to allow Umlauts etc. in listed code % utf8-change
+{Ö}{{\"O}}1
+{Ä}{{\"A}}1
+{Ü}{{\"U}}1
+{ü}{{\"u}}1
+{ä}{{\"a}}1
+{ö}{{\"o}}1
+{ß}{{\ss}}2
+}
+
+%% Code Environments ----------------------------------------------------------
+
+% Code Environment for C (ANSI)
+\lstnewenvironment{CCode}[1][]
+{\lstset{%
+ language=[ANSI]C,
+ escapeinside={/+}{+/}, % makes "/+" and "+/" available for Latex escapes (labels etc.)
+ #1}}%
+{}
+
+
+% Code Environment for C++ (ISO)
+\lstnewenvironment{CppCode}[1][]
+{\lstset{%
+ language=[ISO]C++,
+ escapeinside={/+}{+/}, % makes "/+" and "+/" available for Latex escapes (labels etc.)
+ #1}}%
+{}
+
+
+% Code Environment for C#
+\lstnewenvironment{CsCode}[1][]
+{\lstset{%
+ language=[Sharp]C,
+ escapeinside={/+}{+/}, % makes "/+" and "+/" available for Latex escapes (labels etc.)
+ #1}}%
+{}
+
+% Language Definition and Code Environment for CSS
+\lstdefinelanguage{CSS}
+{ morekeywords={color,background,margin,padding,font,weight,display,position,top,%
+ left,right,bottom,list,style,border,size,white,space,min,width},
+ sensitive=false,
+ morecomment=[l]{//},
+ morecomment=[s]{/*}{*/},
+ morestring=[b]"
+}
+
+\lstnewenvironment{CssCode}[1][]
+{\lstset{%
+ language=CSS,
+ escapeinside={/+}{+/}, % makes "/+" and "+/" available for Latex escapes (labels etc.)
+ #1}}%
+{}
+
+
+% Code Enivornmente for Generic Code
+\lstnewenvironment{GenericCode}[1][]
+{\lstset{%
+ language={},
+ keepspaces=true,
+ commentstyle={},
+ texcl=false,
+ escapechar={},
+ escapeinside={},
+ #1}}
+{}
+
+
+% Code Enivornmente for HTML
+\lstnewenvironment{HtmlCode}[1][]
+{\lstset{%
+ language=HTML,
+ escapeinside={/+}{+/}, % makes "/+" and "+/" available for Latex escapes (labels etc.)
+ #1}}%
+{}
+
+
+% Code Enivornmente for Java
+\lstnewenvironment{JavaCode}[1][]
+{\lstset{%
+ language=Java,
+ escapeinside={/+}{+/}, % makes "/+" and "+/" available for Latex escapes (labels etc.)
+ #1}}%
+{}
+
+
+% Language Definition and Code Environment for JavaScript
+\lstdefinelanguage{JavaScript}{
+ alsoletter={.},
+ keywords={arguments, await, break, case, catch, class, const, continue, debugger,%
+ default, delete, do, else, enum, eval, export, extends, false, finally, for,%
+ function, if, implements, import, in, instanceof, interface, let, new, null,%
+ package, private, protected, public, return, static, super, switch, this,%
+ throw, true, try, typeof, var, void, while, with, yield}, % JavaScript ES6 keywords
+ morekeywords={add, apply, args, Array, Array.from, Array.isArray, Array.of,%
+ Array.prototype, ArrayBuffer, bind, Boolean, call, charAt, charCodeAt, clear,%
+ codePointAt, concat, constructor, copyWithin, DataView, Date, Date.now,%
+ Date.parse, Date.prototype, Date.UTC, decodeURI, decodeURIComponent, encodeURI,%
+ encodeURIComponent, endsWith, entries, Error, Error.prototype, EvalError, every,%
+ false, fill, filter, find, findIndex, Float32Array, Float64Array, forEach,%
+ FulfillPromise, Function, Function.length, get, getDate, getDay, getFullYear,%
+ getHours, getMilliseconds, getMinutes, getMonth, getSeconds, getTime,%
+ getTimezoneOffset, getUTCDate, getUTCDay, getUTCFullYear, getUTCHours,%
+ getUTCMilliseconds, getUTCMinutes, getUTCMonth, getUTCSeconds, has,hasInstance,%
+ hasOwnProperty, ignoreCase, includes, indexOf, indexOf, Infinity, Int8Array,%
+ Int16Array, Int32Array, isConcatSpreadable, isFinite, isNaN, IsPromise,%
+ isPrototypeOf, Iterable, iterator, join, JSON, JSON.parse, JSON.stringify, keys,%
+ lastIndexOf, lastIndexOf, length, localeCompare, map, Map, match, match, Math,%
+ Math.abs , Math.acos, Math.acosh, Math.asin, Math.asinh, Math.atan, Math.atan2,%
+ Math.atanh, Math.cbrt, Math.ceil, Math.clz32, Math.cos, Math.cosh, Math.E,%
+ Math.exp, Math.expm1, Math.floor, Math.fround, Math.hypot, Math.imul, Math.LN2,%
+ Math.LN10, Math.log, Math.log1p, Math.log2, Math.LOG2E, Math.log10, Math.LOG10E,%
+ Math.max, Math.min, Math.PI, Math.pow, Math.random, Math.round, Math.sign,%
+ Math.sin, Math.sinh, Math.sqrt, Math.SQRT1_2, Math.SQRT2, Math.tan, Math.tanh,%
+ Math.trunc, message, multiline, name, NaN, NewPromiseCapability, next, normalize,%
+ null, Number, Number.EPSILON, Number.isFinite, Number.isInteger, Number.isNaN,%
+ Number.isSafeInteger, Number.MAX_SAFE_INTEGER, Number.MAX_VALUE,%
+ Number.MIN_SAFE_INTEGER, Number.MIN_VALUE, Number.NaN, Number.NEGATIVE_INFINITY,%
+ Number.parseFloat, Number.parseInt, Number.POSITIVE_INFINITY, Number.prototype,%
+ Object, Object, Object.assign, Object.create, Object.defineProperties,%
+ Object.defineProperty, Object.freeze, Object.getOwnPropertyDescriptor,%
+ Object.getOwnPropertyNames, Object.getOwnPropertySymbols, Object.getPrototypeOf,%
+ Object.is, Object.isExtensible, Object.isFrozen, Object.isSealed, Object.keys,%
+ Object.preventExtensions, Object.prototype, Object.seal, Object.setPrototypeOf,%
+ of, parseFloat, parseInt, pop, Promise, Promise.all , Promise.race,%
+ Promise.reject, Promise.resolve, PromiseReactionJob, propertyIsEnumerable,%
+ prototype, Proxy, Proxy.revocable , push, RangeError, reduce, reduceRight,%
+ ReferenceError, Reflect, Reflect.apply, Reflect.construct,%
+ Reflect.defineProperty, Reflect.deleteProperty, Reflect.enumerate, Reflect.get,%
+ Reflect.getOwnPropertyDescriptor, Reflect.getPrototypeOf, Reflect.has,%
+ Reflect.isExtensible, Reflect.ownKeys, Reflect.preventExtensions, Reflect.set,%
+ Reflect.setPrototypeOf, Reflection, RegExp, RegExp, RegExp.prototype, repeat,%
+ replace, replace, reverse, search, search, Set, set, setDate, setFullYear,%
+ setHours, setMilliseconds, setMinutes, setMonth, setSeconds, setTime, setUTCDate,%
+ setUTCFullYear, setUTCHours, setUTCMilliseconds, setUTCMinutes, setUTCMonth,%
+ setUTCSeconds, shift, slice, slice, some, sort, species, splice, split, split,%
+ startsWith, String, String.fromCharCode, String.fromCodePoint, String.raw,%
+ substring, Symbol, Symbol.for, Symbol.hasInstance, Symbol.isConcatSpreadable,%
+ Symbol.iterator, Symbol.keyFor, Symbol.match, Symbol.prototype, Symbol.replace,%
+ Symbol.replace, Symbol.search, Symbol.species, Symbol.split, Symbol.toPrimitive,%
+ Symbol.toStringTag, Symbol.unscopables, SyntaxError, then, toDateString,%
+ toExponential, toFixed, toISOString, toJSON, toLocaleDateString,%
+ toLocaleLowerCase, toLocaleString, toLocaleString, toLocaleString, toLocaleString,%
+ toLocaleTimeString, toLocaleUpperCase, toLowerCase, toPrecision, toPrimitive,%
+ toString, toStringTag, toTimeString, toUpperCase, toUTCString,%
+ TriggerPromiseReactions, trim, true, TypeError, Uint8Array, Uint8ClampedArray,%
+ Uint16Array, Uint32Array, undefined, unscopables, unshift, URIError, valueOf,%
+ WeakMap, WeakSet}, % JavaScript extended keywords
+ morekeywords={app.all, app.delete, app.disable, app.disabled, app.enable, app.enabled,%
+ app.engine, app.get, app.listen, app.locals, app.METHOD, app.mountpath, app.param,%
+ app.path, app.post, app.put, app.render, app.route, app.set, app.use, express,%
+ express.Router, express.static, req.acceptLanguages, req.accepts,%
+ req.acceptsCharsets, req.acceptsEncodings, req.app, req.baseUrl, req.body,%
+ req.cookies, req.fresh, req.get, req.hostname, req.ip, req.ips, req.is,%
+ req.method, req.originalUrl, req.param, req.params, req.path, req.protocol,%
+ req.query, req.range, req.route, req.secure, req.signedCookies, req.stale,%
+ req.subdomains, req.xhr, res.app, res.append, res.attachment, res.clearCookie,%
+ res.cookies, res.download, res.end, res.format, res.get, res.headersSent,%
+ res.json, res.jsonp, res.links, res.locals, res.location, res.redirect,%
+ res.render, res.sendFile, res.sendStatus, res.set, res.status, res.type, res.vary,%
+ router.all, router.METHOD, router.param, router.route, router.use}, % express keywords
+ morekeywords={agent.createConnection, agent.destroy, agent.freeSockets, agent.getName,%
+ agent.maxFreeSockets, agent.maxSockets, agent.requests, agent.sockets,%
+ certificate.exportChallenge, certificate.exportPublicKey, certificate.verifySpkac,%
+ child.channel, child.connected, child.disconnect, child.kill, child.pid,%
+ child.send, child.stderr, child.stdin, child.stdio, child.stdout,%
+ child_process.exec, child_process.execFile, child_process.execFileSync,%
+ child_process.execSync, child_process.fork, child_process.spawn,%
+ child_process.spawnSync, cipher.final, cipher.getAuthTag, cipher.setAAD,%
+ cipher.setAutoPadding, cipher.update, clearImmediate, clearImmediate,%
+ clearInterval, clearInterval, clearTimeout, clearTimeout, console, console.assert,%
+ console.dir, console.error, console.info, console.log, console.time,%
+ console.timeEnd, console.trace, console.warn, decipher.final, decipher.setAAD,%
+ decipher.setAuthTag, decipher.setAutoPadding, decipher.update, dgram.createSocket,%
+ dgram.createSocket, diffieHellman.computeSecret, diffieHellman.generateKeys,%
+ diffieHellman.getGenerator, diffieHellman.getPrime, diffieHellman.getPrivateKey,%
+ diffieHellman.getPublicKey, diffieHellman.setPrivateKey,%
+ diffieHellman.setPublicKey, diffieHellman.verifyError, dns.getServers,%
+ dns.getServers, dns.lookup, dns.lookup, dns.lookupService, dns.resolve,%
+ dns.resolve4, dns.resolve6, dns.resolveCname, dns.resolveMx, dns.resolveNaptr,%
+ dns.resolveNs, dns.resolvePtr, dns.resolveSoa, dns.resolveSrv, dns.resolveTxt,%
+ dns.reverse, dns.setServers, ecdh.computeSecret, ecdh.generateKeys,%
+ ecdh.getPrivateKey, ecdh.getPublicKey, ecdh.setPrivateKey, ecdh.setPublicKey,%
+ error.address, error.code, error.errno, error.message, error.path, error.port,%
+ error.stack, error.syscall, exports, fs.access, fs.accessSync, fs.appendFile,%
+ fs.appendFileSync, fs.chmod, fs.chmodSync, fs.chown, fs.chownSync, fs.close,%
+ fs.closeSync, fs.constants, fs.createReadStream, fs.createWriteStream,%
+ fs.exists, global, http.createServer, http.get, http.globalAgent,%
+ http.request, https.createServer, https.get, https.globalAgent, https.request,%
+ message.destroy, message.headers, message.httpVersion, message.method,%
+ message.rawHeaders, message.rawTrailers, message.setTimeout, message.socket,%
+ message.statusCode, message.statusMessage, message.trailers, message.url,%
+ module, module.children, module.exports, module.filename, module.id,%
+ module.loaded, module.parent, module.require, os.arch, os.constants,%
+ os.cpus, os.endianness, os.EOL, os.freemem, os.homedir, os.hostname,%
+ os.loadavg, os.networkInterfaces, os.platform, os.release, os.tmpdir,%
+ os.totalmem, os.type, os.uptime, os.userInfo, path.basename, path.delimiter,%
+ path.dirname, path.extname, path.format, path.isAbsolute, path.join,%
+ path.normalize, path.parse, path.posix, path.relative, path.resolve,%
+ path.sep, path.win32, process, process.abort, process.arch, process.argv,%
+ process.argv0, process.channel, process.chdir, process.config,%
+ process.connected, process.cpuUsage, process.cwd, process.disconnect,%
+ process.emitWarning, process.env, process.execArgv, process.execPath,%
+ process.exit, process.exitCode, process.getegid, process.geteuid,%
+ process.getgid, process.getgroups, process.getuid, process.hrtime,%
+ process.initgroups, process.kill, process.mainModule, process.memoryUsage,%
+ process.nextTick, process.pid, process.platform, process.release,%
+ process.send, process.setegid, process.seteuid, process.setgid,%
+ process.setgroups, process.setuid, process.stderr, process.stdin,%
+ process.stdout, process.title, process.umask, process.uptime,%
+ process.version, process.versions, querystring.escape, querystring.parse,%
+ querystring.stringify, querystring.unescape, r.clearLine, readable.pause,%
+ readable.pipe, readable.push, readable.push, readable.read, readable.read,%
+ readable.resume, readable.setEncoding, readable.unpipe, readable.unshift,%
+ readable.wrap, readable._read, readStream.bytesRead, readStream.isRaw,%
+ readStream.path, readStream.setRawMode, repl.start, request.abort,%
+ request.aborted, request.end, request.flushHeaders, request.setNoDelay,%
+ request.setSocketKeepAlive, request.setTimeout, request.write, require,%
+ require.cache, require.extensions, response.addTrailers, response.end,%
+ response.finished, response.getHeader, response.getHeaderNames,%
+ response.getHeaders, response.hasHeader, response.headersSent,%
+ response.removeHeader, response.sendDate, response.setHeader,%
+ response.setTimeout, response.statusCode, response.statusMessage,%
+ response.write, response.writeContinue, response.writeHead,%
+ rl.clearScreenDown, rl.close, rl.createInterface, rl.cursorTo,%
+ rl.emitKeypressEvents, rl.moveCursor, rl.pause, rl.prompt, rl.question,%
+ rl.resume, rl.setPrompt, rl.write, script.runInNewContext,%
+ script.runInThisContext, server.addContext, server.address,%
+ server.address, server.close, server.close, server.connections,%
+ server.getTicketKeys, server.listen, server.listen, server.setTicketKeys,%
+ server.setTimeout, server.setTimeout, server.timeout, server.timeout,%
+ setImmediate, setInterval, setTimeout, socket.addMembership,%
+ socket.address, socket.bind, socket.bind, socket.close,%
+ socket.dropMembership, socket.ref, socket.send, socket.setBroadcast,%
+ socket.setMulticastLoopback, socket.setMulticastTTL, socket.setTTL,%
+ socket.unref, stream.Readable, stringDecoder.end, stringDecoder.write,%
+ timeout.ref, timeout.unref, tls.connect, tls.createSecureContext,%
+ tls.createServer, tls.getCiphers, tlsSocket.address,%
+ tlsSocket.authorizationError, tlsSocket.authorized, tlsSocket.encrypted,%
+ tlsSocket.getCipher, tlsSocket.getEphemeralKeyInfo,%
+ tlsSocket.getPeerCertificate, tlsSocket.getProtocol, tlsSocket.getSession,%
+ tlsSocket.getTLSTicket, tlsSocket.localAddress, tlsSocket.localPort,%
+ tlsSocket.remoteAddress, tlsSocket.remoteFamily, tlsSocket.remotePort,%
+ tlsSocket.renegotiate, tlsSocket.setMaxSendFragment, transform._flush,%
+ transform._transform, util.debuglog, util.deprecate, util.format,%
+ util.inherits, util.inspect, v8.getHeapStatistics, v8.setFlagsFromString,%
+ vm.createContext, vm.isContext, vm.runInContext, vm.runInDebugContext,%
+ vm.runInNewContext, vm.runInThisContext, watcher.close, worker.disconnect,%
+ worker.exitedAfterDisconnect, worker.id, worker.isConnected,%
+ worker.isDead, worker.kill, worker.process, worker.send, worker.suicide,%
+ writable.cork, writable.end, writable.setDefaultEncoding, writable.write,%
+ writeStream.bytesWritten, writeStream.columns, writeStream.path,%
+ writeStream.rows, zlib, zlib.createGunzip, zlib.createGzip, zlib.createInflate,%
+ zlib.createInflateRaw, zlib.createUnzip, zlib.deflate, zlib.deflateRaw,%
+ zlib.deflateRawSync, zlib.deflateSync, zlib.gunzip, zlib.gunzipSync,%
+ zlib.gzip, zlib.gzipSync, zlib.inflate, zlib.inflateRaw, zlib.inflateRawSync,%
+ zlib.inflateSync, zlib.unzip, zlib.unzipSync, __dirname, __filename}, % Node.js keywords
+ morekeywords={assert, assert.deepEqual, assert.deepStrictEqual,%
+ assert.doesNotThrow, assert.equal, assert.fail, assert.ifError,%
+ assert.notDeepEqual, assert.notDeepStrictEqual, assert.notEqual,%
+ assert.notStrictEqual, assert.ok, assert.strictEqual, assert.throws, describe,%
+ toBe, it, xdescribe, beforeEach, afterEach, beforeAll, afterAll, expect, it,%
+ xit, xdiscribe, pending, and.callThrough, and.returnValue, and.returnValues,%
+ and.callFake, and.throwError, and.stub, .not, .calls.any, .calls.count,%
+ .calls.argsFor, .calls.allArgs, .calls.all, .calls.mostRecent, .calls.first,%
+ .calls.reset, jasmine.createSpy, jasmine.createSpyObj, jasmine.any,%
+ jasmine.anything, jasmine.objectContaining, jasmine.arrayContaining,%
+ jasmine.stringMatching, asymmetricMatch, jasmine.clock, .not.toBeTruthy,%
+ .toBeTruthy, .not.toBeFalsy, .toBeFalsy, .not.toBeDefined .toBeDefined,%
+ .not.toBeNull .toBeNull, .not.toEqual .toEqual, .not.toBeCloseTo .toBeCloseTo,%
+ .not.toContain, .toContain, .not.toMatch, .toMatch, .not.toBeGreaterThan,%
+ .toBeGreaterThan, .not.toBeLessThan, .toBeLessThan, .toThrow, .not.toThrow,%
+ .toBeNull, .not.toBeNull, .toBeDefined, .not.toBeDefined}, % Node.js Assert, Jasmine, ... keywords
+ sensitive=true,
+ morestring=[b]",
+ morestring=[d]',
+ morestring=[s]{`}{`},
+ morecomment=[l]{//},
+ morecomment=[s]{/*}{*/},
+ morecomment=[s]{/**}{*/}
+}
+
+\lstnewenvironment{JsCode}[1][]
+{\lstset{%
+ language=JavaScript,
+ escapeinside={/+}{+/}, % makes "/+" and "+/" available for Latex escapes (labels etc.)
+ #1}}%
+{}
+
+
+% Code Environment for LaTeX
+\lstnewenvironment{LaTeXCode}[1][] % code environment for Latex
+{\lstset{%
+ language=[LaTeX]TeX,
+ escapeinside={/+}{+/}, % makes "/+" and "+/" available for Latex escapes (labels etc.)
+ #1}}%
+{}
+
+
+% Code Environment for Objective-C
+\lstnewenvironment{ObjCCode}[1][]
+{\lstset{%
+ language=[Objective]C,
+ escapeinside={/+}{+/}, % makes "/+" and "+/" available for Latex escapes (labels etc.)
+ #1}}%
+{}
+
+
+% Code Environment for PHP
+\lstnewenvironment{PhpCode}[1][]
+{\lstset{%
+ language=PHP,
+ escapeinside={/+}{+/}, % makes "/+" and "+/" available for Latex escapes (labels etc.)
+ #1}}%
+{}
+
+
+% Language Definition and Code Environment for Swift
+\lstdefinelanguage{Swift}
+{ keywords=[1]{typealias,true, false,catch,private,internal,public,func,protocol,%
+ optional,return,nil,catch,switch,let,as,var,if,in,for,while,where,do,else,case,%
+ break,import,class,struct,enum,override,super,required,designated,convenience},
+ keywords=[2]{String,Int,Double,Float},
+ sensitive=true,
+ morecomment=[l]{//},
+ morecomment=[s]{/*}{*/},
+ morestring=[b]',
+ morestring=[b]"
+}
+
+\lstnewenvironment{SwiftCode}[1][]
+{\lstset{%
+ language=Swift,
+ escapeinside={/+}{+/}, % makes "/+" and "+/" available for Latex escapes (labels etc.)
+ #1}}%
+{}
+
+
+% Code Environment for XML
+\lstnewenvironment{XmlCode}[1][]
+{\lstset{%
+ language=XML,
+ escapeinside={/+}{+/}, % makes "/+" and "+/" available for Latex escapes (labels etc.)
+ #1}}%
+{}
+
+
+% Disable the lstlisting environment (due to popular abuse)
+\newcommand{\@WarnLstlisting}{
+\GenericError{}{Package hgblistings Error: The 'lstlisting' environment is disabled}%
+{See the error note inserted in the document output for details.}{}%
+\begin{quote}
+\color{red}\textbf{NOTE:} The \texttt{lstlisting} environment has been deliberately disabled in this setup.
+Use \emph{inline code} (breakable and \emph{without} a caption) or create a \emph{float container} with
+\texttt{{\textbackslash}begin\{program\} \ldots {\textbackslash}end\{program\}} instead!
+See the \texttt{hgbthesis} tutorial for examples.
+\end{quote}%
+}
+\renewenvironment{lstlisting}[0]%
+{\@WarnLstlisting\expandafter\comment}%
+{\expandafter\endcomment}%
diff --git a/macros/latex/contrib/hagenberg-thesis/latex/hgbmath.sty b/macros/latex/contrib/hagenberg-thesis/latex/hgbmath.sty
new file mode 100644
index 0000000000..068eb2c553
--- /dev/null
+++ b/macros/latex/contrib/hagenberg-thesis/latex/hgbmath.sty
@@ -0,0 +1,20 @@
+%% hgbmath.sty
+%% This file is part of the Hagenberg Thesis package for creating bachelors's and masters's theses
+%% Author: Wilhelm Burger (wilhelm.burger@fh-hagenberg.at)
+%% GitHub: https://github.com/Digital-Media/HagenbergThesis
+%% File encoding: ASCII
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{hgbmath}[2019/05/11]
+
+\RequirePackage{amsmath,amsfonts,amssymb,amsbsy}
+\RequirePackage{subdepth} % for positioning of sub and super scripts
+\RequirePackage{exscale} % correct scaling of math mode output in every environment
+
+% Commands for real, complex, etc. numbers (AMS Blackboard)
+\newcommand{\R}{\ensuremath{\mathbb{R}}}
+\newcommand{\Z}{\ensuremath{\mathbb{Z}}}
+\newcommand{\N}{\ensuremath{\mathbb{N}}}
+%\newcommand{\C}{\mathbb{C}} % utf8-change (problem with T1 encoding)
+\newcommand{\Cpx}{\ensuremath{\mathbb{C}}} % utf8-change
+\newcommand{\Q}{\ensuremath{\mathbb{Q}}} \ No newline at end of file
diff --git a/macros/latex/contrib/hagenberg-thesis/latex/hgbreport.cls b/macros/latex/contrib/hagenberg-thesis/latex/hgbreport.cls
new file mode 100644
index 0000000000..e53d369b5a
--- /dev/null
+++ b/macros/latex/contrib/hagenberg-thesis/latex/hgbreport.cls
@@ -0,0 +1,72 @@
+%% hgbreport.cls
+%% LaTeX template for creating lab and term reports as well as other forms of academic documentation
+%% This file is part of the Hagenberg Thesis package for creating bachelors's and masters's theses
+%% Author: Wolfgang Hochleitner (wolfgang.hochleitner@fh-hagenberg.at)
+%% GitHub: https://github.com/Digital-Media/HagenbergThesis
+%% File encoding: ASCII
+
+%% Package Information --------------------------------------------------------
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{hgbreport}[2019/05/11]
+
+\typeout{****************** hgbreport.cls (options=\@nameuse{opt@hgbreport.cls}) ***********************}
+
+\RequirePackage{xifthen}
+
+\RequirePackage{ifpdf} % for checking PDF mode
+\ifpdf{}% \typeout{hgbreport: *** LaTeX in PDF mode ***}
+\else{\errmessage{hgbreport: *** LaTeX NOT running in PDF mode ***}}
+\fi
+
+%% Handling class options --------------------------------------------------------------
+
+\DeclareOption{notitlepage}{\PassOptionsToClass{\CurrentOption}{report}}
+\DeclareOption{english}{\PassOptionsToPackage{\CurrentOption}{hgb}}
+\DeclareOption{german}{\PassOptionsToPackage{\CurrentOption}{hgb}}
+\DeclareOption{smartquotes}{\PassOptionsToPackage{\CurrentOption}{hgb}}
+\DeclareOption*{\ClassWarning{hgbreport}{Unknown document option '\CurrentOption'.}}
+\ProcessOptions
+
+
+%% Paper options and style file -----------------------------------------------
+
+\LoadClass[a4paper,11pt,onecolumn]{report}
+\RequirePackage[top=36mm,bottom=40mm,left=32mm,right=32mm]{geometry} %showframe
+
+\RequirePackage{hgb} % load style file hgb.sty with options registered above
+
+
+%% Set title font to SF
+\RequirePackage{titling}
+\renewcommand{\maketitlehooka}{\sffamily}
+
+%% Set abstract name to bold
+\RequirePackage{abstract}%
+\renewcommand{\abstractnamefont}{\sffamily\small\bfseries}
+
+
+% Add PDF meta data
+
+\AtBeginDocument{%
+ \hypersetup{
+ pdftitle={\@title},
+ pdfauthor={\@author},
+ pdfsubject={},
+ pdfcreator={LaTeX using class hgbreport [\hgbDate]},
+ pdfproducer={pdflatex},
+ pdfkeywords={}
+ }%
+}%
+
+
+%% Additional Hagenberg packages ----------------------------------------------
+
+\RequirePackage{hgbmath}
+\RequirePackage{hgbalgo}
+\RequirePackage{hgbheadings}
+\RequirePackage{hgbabbrev}
+\RequirePackage{hgblistings}
+\RequirePackage{hgbbib}
+
+\endinput
diff --git a/macros/latex/contrib/hagenberg-thesis/latex/hgbthesis.cls b/macros/latex/contrib/hagenberg-thesis/latex/hgbthesis.cls
new file mode 100644
index 0000000000..2d99fe7e17
--- /dev/null
+++ b/macros/latex/contrib/hagenberg-thesis/latex/hgbthesis.cls
@@ -0,0 +1,595 @@
+%% hgbthesis.cls
+%% LaTeX template for creating diploma theses, masters's theses, bachelor's theses and other term papers.
+%% This file is part of the Hagenberg Thesis package for creating bachelors's and masters's theses
+%% Author: Wilhelm Burger (wilhelm.burger@fh-hagenberg.at)
+%% GitHub: https://github.com/Digital-Media/HagenbergThesis
+%% File encoding: ASCII
+
+%% Package Information --------------------------------------------------------
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{hgbthesis}[2019/05/11]
+
+\RequirePackage{xifthen}
+
+\RequirePackage{ifpdf} % for checking PDF mode
+\ifpdf{}% \typeout{hgbthesis: *** LaTeX in PDF mode ***}
+\else{\errmessage{hgbthesis: *** LaTeX NOT running in PDF mode ***}}
+\fi
+
+
+%% Commands for Title Pages (used in class options) ---------------------------
+
+\newcommand{\hgb@MainLanguage}{german} % also referenced in hgb.sty
+\newcommand{\@mastertitlepages}{}
+\newcommand{\@diplomatitlepages}{}
+\newcommand{\@bachelortitlepages}{}
+\newcommand{\@internshiptitlepages}{}
+\newcommand{\@maketitlepages}{\@mastertitlepages} %Default: Master's thesis
+
+
+\newcommand{\@titlepagefont}{\sffamily}
+
+%% Handling class options --------------------------------------------------------------
+
+\DeclareOption{diplom}{%
+ \renewcommand{\@maketitlepages}{\@diplomatitlepages}
+ \ClassWarning{hgbthesis}{Deprecated: Document option '\CurrentOption' is deprecated, use 'diploma' instead.}
+}
+
+\DeclareOption{praktikum}{%
+ \renewcommand{\@maketitlepages}{\@internshiptitlepages}
+ \ClassWarning{hgbthesis}{Deprecated: Document option '\CurrentOption' is deprecated, use 'internship' instead.}
+}
+
+\DeclareOption{master}{\renewcommand{\@maketitlepages}{\@mastertitlepages}}
+\DeclareOption{diploma}{\renewcommand{\@maketitlepages}{\@diplomatitlepages}}
+\DeclareOption{bachelor}{\renewcommand{\@maketitlepages}{\@bachelortitlepages}}
+\DeclareOption{internship}{\renewcommand{\@maketitlepages}{\@internshiptitlepages}}
+
+\DeclareOption{english}{\PassOptionsToPackage{\CurrentOption}{hgb}}
+\DeclareOption{german}{\PassOptionsToPackage{\CurrentOption}{hgb}}
+\DeclareOption{smartquotes}{\PassOptionsToPackage{\CurrentOption}{hgb}}
+\DeclareOption*{\ClassWarning{hgbthesis}{Unknown document option '\CurrentOption'.}}
+\ProcessOptions
+
+%% Paper Options and Style File -----------------------------------------------
+
+\LoadClass[a4paper,11pt,oneside]{book}
+\RequirePackage[top=36mm,bottom=40mm,left=32mm,right=32mm]{geometry} %showframe
+
+\RequirePackage{hgb} % load style file hgb.sty with options registered above
+
+
+%% Setup for Pages in the Front Matter ----------------------------------------
+
+% General Commands
+
+\newcommand{\@programname}{\@MissingArg{Degree program not specified!}}
+\newcommand{\studiengang}[1]{%
+ \renewcommand{\@programname}{#1}
+ \ClassWarning{hgbthesis}{Deprecated: '\string\studiengang' is deprecated, use '\string\programname' instead.}
+}
+\newcommand{\programname}[1]{%
+ \ifthenelse{\isempty{#1}}{}{\renewcommand{\@programname}{#1}}
+}
+
+\newcommand{\@placeofstudy}{\@MissingArg{Place of study not specified!}}
+\newcommand{\studienort}[1]{%
+ \renewcommand{\@placeofstudy}{#1}
+ \ClassWarning{hgbthesis}{Deprecated: '\string\studienort' is deprecated, use '\string\placeofstudy' instead.}
+}
+\newcommand{\placeofstudy}[1]{%
+ \ifthenelse{\isempty{#1}}{}{\renewcommand{\@placeofstudy}{#1}}
+}
+
+\newcommand{\@advisor}{\@MissingArg{Advisor not specified!}}
+\newcommand{\betreuer}[1]{%
+ \renewcommand{\@advisor}{#1}
+ \ClassWarning{hgbthesis}{Deprecated: '\string\betreuer' is deprecated, use '\string\advisor' instead.}
+}
+\newcommand{\betreuerin}[1]{%
+ \renewcommand{\@advisor}{#1}
+ \ClassWarning{hgbthesis}{Deprecated: '\string\betreuerin' is deprecated, use '\string\advisor' instead.}
+}
+\newcommand{\advisor}[1]{%
+ \ifthenelse{\isempty{#1}}{}{\renewcommand{\@advisor}{#1}}
+}
+
+\newcommand{\@thesisnumber}{\@MissingArg{Thesis number not specified!}}
+\newcommand{\nummer}[1]{%
+ \renewcommand{\@thesisnumber}{#1}
+ \ClassWarning{hgbthesis}{Deprecated: '\string\nummer' is deprecated, use '\string\thesisnumber' instead.}
+}
+\newcommand{\thesisnumber}[1]{%
+ \ifthenelse{\isempty{#1}}{}{\renewcommand{\@thesisnumber}{#1}}
+}
+
+\newcommand{\@coursetitle}{\@MissingArg{Course not specified!}}
+\newcommand{\gegenstand}[1]{%
+ \renewcommand{\@coursetitle}{#1}
+ \ClassWarning{hgbthesis}{Deprecated: '\string\gegenstand' is deprecated, use '\string\coursetitle' instead.}
+}
+\newcommand{\coursetitle}[1]{%
+ \ifthenelse{\isempty{#1}}{}{\renewcommand{\@coursetitle}{#1}}
+}
+
+\newcommand{\@semester}{\@MissingArg{Semester not specified!}}
+\newcommand{\semester}[1]{%
+ \ifthenelse{\isempty{#1}}{}{\renewcommand{\@semester}{#1}}
+}
+
+\newcommand{\@logofile}[0]{}
+\newcommand{\logofile}[1]{%
+ \renewcommand{\@logofile}{#1}
+}
+
+\newcommand{\makelogo}[0]{%
+\ifthenelse{\equal{\@logofile}{}}%
+ {\vspace*{30mm}}%
+ {\includegraphics[height=30mm]{\@logofile}}%
+}
+
+% Submission Commands
+
+\newcounter{@dayofsubmission}
+\newcounter{@monthofsubmission}
+\newcounter{@yearofsubmission}
+
+\setcounter{@dayofsubmission}{\the\day}
+\setcounter{@monthofsubmission}{\the\month}
+\setcounter{@yearofsubmission}{\the\year}
+
+\newcommand{\abgabedatum}[3]{% %\abgabedatum{yyyy}{mm}{dd}
+ \setcounter{@yearofsubmission}{#1}
+ \setcounter{@monthofsubmission}{#2}
+ \setcounter{@dayofsubmission}{#3}
+ \ClassWarning{hgbthesis}{Deprecated: '\string\abgabedatum' is deprecated, use '\string\dateofsubmission{yyyy}{mm}{dd}' instead.}
+}
+\newcommand{\dateofsubmission}[3]{% %\dateofsubmission{yyyy}{mm}{dd}
+ \setcounter{@yearofsubmission}{#1}
+ \setcounter{@monthofsubmission}{#2}
+ \setcounter{@dayofsubmission}{#3}
+}
+
+\newcommand{\abgabemonat}[1]{%
+ \ClassWarning{hgbthesis}{Deprecated: '\string\abgabemonat' is deprecated, use '\string\dateofsubmission{yyyy}{mm}{dd}' instead.}
+}
+
+\newcommand{\abgabejahr}[1]{%
+ \ClassWarning{hgbthesis}{Deprecated: '\string\abgabejahr' is deprecated, use '\string\dateofsubmission{yyyy}{mm}{dd}' instead.}
+}
+
+% Internship Report Commands
+
+\newcommand{\@companyName}{\@MissingArg{Company not specified!}}
+\newcommand{\firma}[1]{%
+ \renewcommand{\@companyName}{#1}
+ \ClassWarning{hgbthesis}{Deprecated: '\string\firma' is deprecated, use '\string\companyName' instead.}
+}
+\newcommand{\companyName}[1]{%
+ \ifthenelse{\isempty{#1}}{}{\renewcommand{\@companyName}{#1}}
+}
+
+\newcommand{\@companyUrl}{\@MissingArg{Company URL not specified!}}
+\newcommand{\firmenUrl}[1]{%
+ \renewcommand{\@companyUrl}{#1}
+ \ClassWarning{hgbthesis}{Deprecated: '\string\firmenUrl' is deprecated, use '\string\companyUrl' instead.}
+}
+\newcommand{\companyUrl}[1]{%
+ \ifthenelse{\isempty{#1}}{}{\renewcommand{\@companyUrl}{#1}}
+}
+
+\newcommand{\@companyPhone}{\@MissingArg{Company phone number not specified!}}
+\newcommand{\firmenTel}[1]{%
+ \renewcommand{\@companyPhone}{#1}
+ \ClassWarning{hgbthesis}{Deprecated: '\string\firmenTel' is deprecated, use '\string\companyPhone' instead.}
+}
+\newcommand{\companyPhone}[1]{%
+ \ifthenelse{\isempty{#1}}{}{\renewcommand{\@companyPhone}{#1}}
+ \renewcommand{\@companyPhone}{#1}
+}
+
+\newcommand{\@license}{\@MissingArg{License information is missing!}}
+\newcommand{\license}[1]{%
+ \renewcommand{\@license}{#1}
+}
+
+
+%% Commands for Creating the Title Pages --------------------------------------
+
+\newcommand{\titelseite}{%
+ \maketitle
+ \ClassWarning{hgbthesis}{Deprecated: '\string\titelseite' is deprecated, use '\string\maketitle' instead.}
+}
+
+%% adds blank space after each letter (http://stackoverflow.com/a/3951837)
+\newcommand{\@addspaces}[1]{%
+ \@tfor\letter:=#1\do{%
+ \letter\thinspace% %\space
+ }%
+}
+
+\newcommand{\@bachelortitle}{%
+\begin{titlepage}%
+ \begin{german}
+ \rule{0mm}{1mm}
+ \vspace*{0mm}
+ \begin{center}%
+ \@titlepagefont %\normalfont
+ \setlength{\unitlength}{1cm}
+ \parbox[c][5cm][c]{12cm}{%
+ \centering\LARGE\bfseries%
+ \setlength{\baselineskip}{25pt}%
+ \@title%
+ }
+ \vskip 15mm%
+ {\large\@author}%{\large\scshape\@author}%
+ \vskip 15mm%
+ \makelogo%
+ \vskip 15mm%
+ {\Large\uppercase{\@addspaces{Bachelorarbeit}}}%
+ \vskip 4mm%
+ {\large Nr.~\@thesisnumber}
+ \vskip 4mm%
+ {\large eingereicht am} \vskip 1mm {Fachhochschul-Bachelorstudiengang}%
+ \vskip 4mm%
+ {\large\@programname}%
+ \vskip 4mm%
+ {\large in \@placeofstudy}%
+ \vskip 16mm%
+ {\large im \monthname[\value{@monthofsubmission}] \arabic{@yearofsubmission}}%
+ \end{center}%
+ \vfil%
+ \end{german}
+\end{titlepage}%
+}
+
+\newcommand{\@mastertitle}{%
+\begin{titlepage}%
+ \begin{german}
+ \rule{0mm}{1mm}
+ \vspace*{0mm}
+ \begin{center}%
+ \@titlepagefont %\normalfont
+ \setlength{\unitlength}{1cm}
+ \parbox[c][5cm][c]{12cm}{%
+ \centering\LARGE\bfseries%%
+ \setlength{\baselineskip}{25pt}%
+ \@title%
+ }
+ \vskip 15mm%
+ {\large\@author}%{\large\scshape\@author}%
+ \vskip 15mm%
+ \makelogo%
+ \vskip 15mm%
+ {\Large\uppercase{\@addspaces{Masterarbeit}}}%
+ \vskip 4mm%
+ {\large eingereicht am} \vskip 1mm {Fachhochschul-Masterstudiengang}%
+ \vskip 4mm%
+ {\large\@programname}%
+ \vskip 4mm%
+ {\large in \@placeofstudy}%
+ \vskip 16mm%
+ {\large im \monthname[\value{@monthofsubmission}] \arabic{@yearofsubmission}}%
+ \end{center}%
+ \vfil%
+ \end{german}
+\end{titlepage}%
+}
+
+\newcommand{\@diplomatitle}{%
+\begin{titlepage}%
+ \begin{german}
+ \rule{0mm}{1mm}
+ \vspace*{0mm}
+ \begin{center}%
+ \@titlepagefont %\normalfont
+ \setlength{\unitlength}{1cm}
+ \parbox[c][5cm][c]{12cm}{%
+ \centering\LARGE\bfseries%
+ \setlength{\baselineskip}{25pt}%
+ \@title%
+ }
+ \vskip 15mm%
+ {\large\@author}%{\large\scshape\@author}%
+ \vskip 15mm%
+ \makelogo%
+ \vskip 15mm%
+ {\Large\uppercase{\@addspaces{Diplomarbeit}}}%
+ \vskip 4mm%
+ {\large eingereicht am} \vskip 1mm {Fachhochschul-Diplomstudiengang}%
+ \vskip 4mm%
+ {\large\@programname}%
+ \vskip 4mm%
+ {\large in \@placeofstudy}%
+ \vskip 16mm%
+ {\large im \monthname[\value{@monthofsubmission}] \arabic{@yearofsubmission}}%
+ \end{center}%
+ \vfil%
+ \end{german}
+\end{titlepage}%
+}
+
+\newcommand{\@internshiptitle}{%
+\begin{titlepage}%
+ \begin{german}
+ \rule{0mm}{1mm}
+ \vspace*{0mm}
+ \begin{center}%
+ \@titlepagefont %\normalfont
+ \setlength{\unitlength}{1cm}
+ \parbox[c][5cm][c]{12cm}{%
+ \centering\LARGE\bfseries%
+ \setlength{\baselineskip}{25pt}%
+ Endbericht zum Berufspraktikum%
+ }
+ \vskip 15mm%
+ {\large\@author}%{\large\scshape\@author}%
+ \vskip 15mm%
+ \makelogo%
+ \vskip 15mm%
+ {\Large\uppercase{\@addspaces{Bachelorarbeit}}}%
+ \vskip 4mm%
+ {\large Nr.~\@thesisnumber}
+ \vskip 4mm%
+ {\large eingereicht am} \vskip 1mm {Fachhochschul-Bachelorstudiengang}%
+ \vskip 4mm%
+ {\large\@programname}%
+ \vskip 4mm%
+ {\large in \@placeofstudy}%
+ \vskip 16mm%
+ {\large im \monthname[\value{@monthofsubmission}] \arabic{@yearofsubmission}}%
+ \end{center}%
+ \vfil%
+ \end{german}
+\end{titlepage}%
+}
+
+
+% Copyright and License Page --------------------------------------------------
+
+\newcommand{\strictlicense}{%
+\ifthenelse{\equal{\hgb@MainLanguage}{german}}%
+ {\license{Alle Rechte vorbehalten}}%
+ {\license{All Rights Reserved}}
+}
+
+\newcommand{\@ccLicenseAt}{%
+Diese Arbeit wird unter den Bedingungen der
+\textsf{Creative Commons Lizenz}
+\emph{Attribution-NonCommercial-NoDerivatives 4.0 International}
+(CC BY-NC-ND 4.0) ver\"offentlicht --
+siehe \url{https://creativecommons.org/licenses/by-nc-nd/4.0/}.}
+
+\newcommand{\@ccLicenseEn}{%
+This work is published under the conditions of the
+\textsf{Creative Commons License}
+\emph{Attribution-NonCommercial-NoDerivatives 4.0 International}
+(CC BY-NC-ND 4.0)---see
+\url{https://creativecommons.org/licenses/by-nc-nd/4.0/}.}
+
+\newcommand{\cclicense}{%
+\ifthenelse{\equal{\hgb@MainLanguage}{german}}%
+ {\license{\@ccLicenseAt}} % german CC license text
+ {\license{\@ccLicenseEn}} % english CC license text (default)
+}
+
+\cclicense % Creative Commons License (default)
+
+\newcommand{\@makelicense}{
+ \sbox\@tempboxa{\@license}%
+ \ifdim \wd\@tempboxa >\hsize
+ \begin{sloppypar}\noindent\@license\end{sloppypar}
+ \else
+ \global \@minipagefalse
+ \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi
+}
+
+\newcommand{\@copyrightpage}{%
+\newpage
+\setcounter{page}{2}
+\thispagestyle{plain}
+\rule{0mm}{1mm}
+\vspace*{75mm}
+\begin{center}
+\textsf{\copyright\ Copyright\ \arabic{@yearofsubmission}\ \@author}
+\end{center}
+\vspace{8mm}
+\@makelicense
+}
+
+
+%% Company Page for Internship Report -----------------------------------------
+
+\newcommand{\@companypage}{%
+\newpage
+\setcounter{page}{2}
+\thispagestyle{plain}
+\rule{0mm}{1mm}
+\begin{center}
+\vspace{25mm}
+{Praktikumsstelle:}
+\\
+\vspace{3mm}
+{\Large\sf\@companyName\\ \mbox{}}
+\\
+{\sf \@companyPhone}
+\\
+{\sf \@companyUrl}
+\\
+\vspace{45mm}
+{Kontaktperson:}
+\\
+\vspace{3mm}
+{\Large\sf\@advisor\\ \mbox{}}
+\end{center}
+}
+
+
+%% Advisor Pages in German and English ----------------------------------------
+
+% German
+
+\newcommand{\@advisorpageDe}{%
+ \newpage
+ \setcounter{page}{2}
+ \thispagestyle{plain}
+ \rule{0mm}{1mm}
+ \begin{center}
+ %
+ \vspace{40mm}
+ {Diese Arbeit entstand im Rahmen des Gegenstands}\\
+ \vspace{6mm}
+ {\Large\sf \@coursetitle\\ \mbox{}}\\
+ \medskip
+ im\\
+ \bigskip
+ {\@semester}\\
+ %
+ \vspace{45mm}
+ {Betreuung:}\\
+ \vspace{3mm}
+ {\Large\sf \@advisor\\ \mbox{}}
+ \end{center}
+}
+
+% English
+
+\newcommand{\@advisorpageEn}{%
+ \newpage
+ \setcounter{page}{2}
+ \thispagestyle{plain}
+ \rule{0mm}{1mm}
+ \begin{center}
+ %
+ \vspace{40mm}
+ {This thesis was created as part of the course}\\
+ \vspace{6mm}
+ {\Large\sf \@coursetitle\\ \mbox{}}\\
+ \medskip
+ during\\
+ \bigskip
+ {\@semester}\\
+ %
+ \vspace{45mm}
+ {Advisor:}\\
+ \vspace{3mm}
+ {\Large\sf \@advisor\\ \mbox{}}
+ \end{center}
+}
+
+\newcommand{\@advisorpage}{%
+\ifthenelse{\equal{\hgb@MainLanguage}{german}}%
+ {\@advisorpageDe}%
+ {\@advisorpageEn}
+}
+
+
+%% Declaration Pages in German and English ------------------------------------
+
+% German
+
+\newcommand{\@declarationpageDe}{%
+ \begin{german}
+ \chapter{Erkl\"arung}
+ \noindent
+ %Standardfassung der FH-OOe ab 04.04.2012:
+ Ich erkl\"are eidesstattlich, dass ich die vorliegende Arbeit selbstst\"andig und ohne fremde Hilfe verfasst,
+ andere als die angegebenen Quellen nicht benutzt und die den benutzten Quellen entnommenen Stellen als
+ solche gekennzeichnet habe. Die Arbeit wurde bisher in gleicher oder \"ahnlicher Form keiner anderen
+ Pr\"ufungsbeh\"orde vorgelegt.
+ \par
+ \vspace{10mm}
+ \noindent
+ \@placeofstudy, am \formatdate{\value{@dayofsubmission}}{\value{@monthofsubmission}}{\value{@yearofsubmission}}
+ \par
+ \vspace{12mm}
+ \noindent
+ \@author
+ \end{german}
+}
+
+% English
+
+\newcommand{\leadingzero}[1]{\ifnum #1<10 0\the#1\else\the#1\fi}
+
+\newcommand{\@declarationpageEn}{%
+ \begin{english}
+ \chapter{Declaration}
+ \noindent
+ I hereby declare and confirm that this thesis is entirely the result of my own original work.
+ Where other sources of information have been used, they have been indicated as such and properly
+ acknowledged. I further declare that this or similar work has not been submitted for credit elsewhere.
+ \par
+ \vspace{10mm}
+ \noindent
+ %\@placeofstudy, \the\year-\leadingzero{\month}-\leadingzero{\day} %http://de.wikibooks.org/wiki/LaTeX-W%F6rterbuch:_today
+ \@placeofstudy, {\usdate\formatdate{\value{@dayofsubmission}}{\value{@monthofsubmission}}{\value{@yearofsubmission}}}
+ \par
+ \vspace{12mm}
+ \noindent
+ \@author
+ \end{english}
+}
+
+\newcommand{\@declarationpage}{%
+\ifthenelse{\equal{\hgb@MainLanguage}{german}}%
+ {\@declarationpageDe}%
+ {\@declarationpageEn}
+}
+
+
+%% Assembly of title pages ----------------------------------------------------
+
+\renewcommand{\@mastertitlepages}{
+ \@mastertitle
+ \@copyrightpage
+ \@declarationpage
+}
+
+\renewcommand{\@diplomatitlepages}{
+ \@diplomatitle
+ \@copyrightpage
+ \@declarationpage
+}
+
+\renewcommand{\@bachelortitlepages}{
+ \@bachelortitle
+ \@advisorpage
+ \@declarationpage
+}
+
+\renewcommand{\@internshiptitlepages}{
+ \@internshiptitle
+ \@companypage
+ \@declarationpage
+}
+
+% Add PDF meta data and create title pages
+
+\renewcommand{\maketitle}{ %replace standard LaTeX-command
+ \hypersetup{
+ pdftitle={\@title},
+ pdfauthor={\@author},
+ pdfsubject={\@programname, \@placeofstudy},
+ pdfcreator={LaTeX using class hgbthesis [\hgbDate]},
+ pdfproducer={pdflatex},
+ pdfkeywords={},
+ pageanchor=false % disable hyperref page anchors in frontmatter pages
+ }%
+ \@maketitlepages
+ \hypersetup{pageanchor=true} % enable hyperref page anchors in the main document
+}
+
+%% Additional Hagenberg packages ----------------------------------------------
+
+\RequirePackage{hgbmath}
+\RequirePackage{hgbalgo}
+\RequirePackage{hgbheadings}
+\RequirePackage{hgbabbrev}
+\RequirePackage{hgblistings}
+\RequirePackage{hgbbib}
+
+\endinput