Initial commit, based on expose

This commit is contained in:
Simon
2023-10-22 14:34:17 +02:00
commit ba944905a6
25 changed files with 2742 additions and 0 deletions

301
.gitignore vendored Normal file
View File

@@ -0,0 +1,301 @@
## Core latex/pdflatex auxiliary files:
*.aux
*.lof
*.log
*.lot
*.fls
*.out
*.toc
*.fmt
*.fot
*.cb
*.cb2
.*.lb
## Intermediate documents:
*.dvi
*.xdv
*-converted-to.*
# these rules might exclude image files for figures etc.
# *.ps
# *.eps
# *.pdf
## Generated if empty string is given at "Please type another file name for output:"
.pdf
## Bibliography auxiliary files (bibtex/biblatex/biber):
*.bbl
*.bcf
*.blg
*-blx.aux
*-blx.bib
*.run.xml
## Build tool auxiliary files:
*.fdb_latexmk
*.synctex
*.synctex(busy)
*.synctex.gz
*.synctex.gz(busy)
*.pdfsync
## Build tool directories for auxiliary files
# latexrun
latex.out/
## Auxiliary and intermediate files from other packages:
# algorithms
*.alg
*.loa
# achemso
acs-*.bib
# amsthm
*.thm
# beamer
*.nav
*.pre
*.snm
*.vrb
# changes
*.soc
# comment
*.cut
# cprotect
*.cpt
# elsarticle (documentclass of Elsevier journals)
*.spl
# endnotes
*.ent
# fixme
*.lox
# feynmf/feynmp
*.mf
*.mp
*.t[1-9]
*.t[1-9][0-9]
*.tfm
#(r)(e)ledmac/(r)(e)ledpar
*.end
*.?end
*.[1-9]
*.[1-9][0-9]
*.[1-9][0-9][0-9]
*.[1-9]R
*.[1-9][0-9]R
*.[1-9][0-9][0-9]R
*.eledsec[1-9]
*.eledsec[1-9]R
*.eledsec[1-9][0-9]
*.eledsec[1-9][0-9]R
*.eledsec[1-9][0-9][0-9]
*.eledsec[1-9][0-9][0-9]R
# glossaries
*.acn
*.acr
*.glg
*.glo
*.gls
*.glsdefs
*.lzo
*.lzs
*.slg
*.slo
*.sls
# uncomment this for glossaries-extra (will ignore makeindex's style files!)
# *.ist
# gnuplot
*.gnuplot
*.table
# gnuplottex
*-gnuplottex-*
# gregoriotex
*.gaux
*.glog
*.gtex
# htlatex
*.4ct
*.4tc
*.idv
*.lg
*.trc
*.xref
# hyperref
*.brf
# knitr
*-concordance.tex
# TODO Uncomment the next line if you use knitr and want to ignore its generated tikz files
# *.tikz
*-tikzDictionary
# listings
*.lol
# luatexja-ruby
*.ltjruby
# makeidx
*.idx
*.ilg
*.ind
# minitoc
*.maf
*.mlf
*.mlt
*.mtc[0-9]*
*.slf[0-9]*
*.slt[0-9]*
*.stc[0-9]*
# minted
_minted*
*.pyg
# morewrites
*.mw
# newpax
*.newpax
# nomencl
*.nlg
*.nlo
*.nls
# pax
*.pax
# pdfpcnotes
*.pdfpc
# sagetex
*.sagetex.sage
*.sagetex.py
*.sagetex.scmd
# scrwfile
*.wrt
# svg
svg-inkscape/
# sympy
*.sout
*.sympy
sympy-plots-for-*.tex/
# pdfcomment
*.upa
*.upb
# pythontex
*.pytxcode
pythontex-files-*/
# tcolorbox
*.listing
# thmtools
*.loe
# TikZ & PGF
*.dpth
*.md5
*.auxlock
# titletoc
*.ptc
# todonotes
*.tdo
# vhistory
*.hst
*.ver
# easy-todo
*.lod
# xcolor
*.xcp
# xmpincl
*.xmpi
# xindy
*.xdy
# xypic precompiled matrices and outlines
*.xyc
*.xyd
# endfloat
*.ttt
*.fff
# Latexian
TSWLatexianTemp*
## Editors:
# WinEdt
*.bak
*.sav
# Texpad
.texpadtmp
# LyX
*.lyx~
# Kile
*.backup
# gummi
.*.swp
# KBibTeX
*~[0-9]*
# TeXnicCenter
*.tps
# auto folder when using emacs and auctex
./auto/*
*.el
# expex forward references with \gathertags
*-tags.tex
# standalone packages
*.sta
# Makeindex log files
*.lpz
# xwatermark package
*.xwm
# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib
# option is specified. Footnotes are the stored in a file with suffix Notes.bib.
# Uncomment the next line to have this generated file ignored.
#*Notes.bib

View File

@@ -0,0 +1,8 @@
\chapter{Forschungsstand}
\label{cha:Forschungsstand}
Seit einigen Jahren wird optische Texterkennung in der Informationstechnik dazu verwendet, Texte in verschiedensten Grafiken als solche zu erkennen und zu extrahieren. In diesem Kontext sticht besonders die seit 2005 quelloffene "Tesseract OCR Engine" \cite{tessdoc} hervor, die mit mittlerweile über 50.000 Sternen auf der Website GitHub eine der größten OCR Engines darstellt.
Es gibt zahlreiche Werke, die sich mit der Funktionsweise von optischen Texterkennungswerkzeugen wie Tesseract befassen. Empfehlungen zur Verbesserung des zu verarbeitenden Ursprungsbildes wurden in der Literatur, wie auch in der Tesseract Dokumentation \cite{tessdoc} bisher nur oberflächlich behandelt.
Für die Filterung der Ergebnisdaten werden unter anderem Vorgehensweisen aus dem gut erforschten Themengebiet des Natural Language Processing verwendet.

View File

@@ -0,0 +1,4 @@
\chapter{Fragestellung}
\label{cha:Fragestellung}
Ziel dieser Bachelorarbeit ist es, herauzufinden, welche Vorgehensweisen bei der Texterkennung zu den besten Ergebnissen führen. Dazu werden die Ergebnisse, beeinflusst durch verschiedene Bildverarbeitungsschritte sowie Filtermethoden anhand gängiger Fehlermetriken für Texterkennungssysteme in einer prototypischen Implementierung verglichen.

46
chapters/gliederung.tex Normal file
View File

@@ -0,0 +1,46 @@
\chapter{Vorläufige Gliederung}
\label{cha:Vorläufige Gliederung}
\begin{enumerate}
\item Einleitung, Aufgabenstellungen und Ziele
\item Themengrundlagen und Forschungsstand
\item Konzept / Design
\begin{enumerate}[label*=\arabic*.]
\item Texterkennung
\begin{enumerate}[label*=\arabic*.]
\item Vergleich verschiedener Bildtransformationstechniken
\item Konzepte zur Filterung der Ergebnisdaten
\end{enumerate}
\item Datenbankstruktur
\begin{enumerate}[label*=\arabic*.]
\item Entwicklung einer Struktur für das Verbinden von Schlagwörtern mit Datenbankobjekten
\end{enumerate}
\item Programmaufbau
\begin{enumerate}[label*=\arabic*.]
\item Beschreibung der Bibliotheksarchitektur
\item Schnittstellenbeschreibung
\item Konzept für Vor- und Nachbearbeitung der Daten
\item Entwurf der unscharfen Suche in den Ergebnisdaten
\end{enumerate}
\end{enumerate}
\item Prototypische Umsetzung
\begin{enumerate}[label*=\arabic*.]
\item Texterkennung
\begin{enumerate}[label*=\arabic*.]
\item Module für "Bildvorbereitung"
\item Module für Nachbearbeitung der Ergebnisdaten
\begin{itemize}
\item Filtern von erkannten Textdaten
\item Erkennen von Schlüsselwörtern durch unscharfe Suche
\end{itemize}
\end{enumerate}
\item Datenbankstruktur
\item Anbindung an bestehenden "ScreenshotManager"
\begin{enumerate}[label*=\arabic*.]
\item Einbinden der Bibliothek
\item GUI-Prototyp für Bild-Upload
\item \raggedright Verknüpfung der Schlagwortdatenbank mit bestehender Datenbankstruktur
\end{enumerate}
\end{enumerate}
\item Zusammenfassung und Erfahrungen
\end{enumerate}

46
chapters/literatur.tex Normal file
View File

@@ -0,0 +1,46 @@
\chapter{Literatur}
\label{cha:Literatur}
\section{Optical Character Recognition}
Die Bachelorarbeit basiert auf folgender Einstiegsliteratur zum Thema OCR und Tesseract Engine:
\begin{itemize}
\item An Overview of the Tesseract OCR Engine \cite{Smith2007}
\item Advances in Character Recognition \cite{DingXiaoqing2012AiCR}
\item Optical Character Recognition Systems for Different Languages with Soft Computing \cite{ChaudhuriArindam2017OCRS}
\item Character recognition systems : a guide for students and practioners \cite{2007Crs}
\item Soft computing and signal processing \cite{2022Scas}
\end{itemize}
\noindent Auch auf der Website des Tesseract-Projektes beziehungsweise im Wiki des GitHub-Repositories finden sich nebst zahlreichen Publikationen zur Tesseract Engine selbst auch wichtige Information zur richtigen Verwendung von Tesseract:
\begin{itemize}
\item Tesseract Documentation \cite{tessdoc}
\end{itemize}
\section{Datenbankdesign und UML}
Neben dem in der FH Oberösterreich vermittelten Wissen bildet unter anderem folgende Einstiegsliteratur die Basis für das Datenbankdesign und die UML-Diagramme:
\begin{itemize}
\item Datenbanksysteme - Eine Einführung \cite{KemperAlfons2015D:eE}
\item Datenbanken-Implementierungstechniken \cite{SaakeGunter2011D-I:}
\item The unified modeling language user guide \cite{BoochGrady1999Tuml}
\item UML : Database Modeling Workbook \cite{BlahaMichael2013U:dm}
\item UML \& data modeling : a reconciliation \cite{HayDavidC2011U}
\end{itemize}
\section{Approximate String Matching}
Für das Approximate String Matching, das fuer eine bessere Einteilung des erkannten Texts in bestehende Schlagworte sorgen soll, wird unter Anderem auf folgende Publikationen zurückgegriffen:
\begin{itemize}
\item A Guided Tour to Approximate String Matching \cite{Navarro2000}
\item Practical Methods for Approximate String Matching \cite{Hyyr2003PracticalMF}
\end{itemize}

View File

@@ -0,0 +1,28 @@
\chapter{Postprocessing}
\label{cha:Postprocessing}
% Preprocessing: Vorbereiten der Screenshots für die Bildverarbeitung
Beim "Postprocessing" werden die durch die Texterkennung ermittelten Biltinhalte gefiltert und aufbereitet. Durch die Filterung könenn die Ergebnisdaten beispielsweise durch das Entfernen von Füllwörtern auf das für den Nutzer wesentliche reduziert und durch Praktiken wie unscharfes Zuweisen Begriffe etwaige Fehler ausgebessert werden.
\section{Stand der Technik}
Heutzutage werden vor allem im Gebiet des Natural Language Processing (TODO:) mächtige Werkzeuge zur Analyse von Textbasierten Daten verwendet.
Da im Rahmen dieser Bachelorarbeit ein besonderer Fokus auf dem Verschlagworten der Inhalte liegt, um die Suche innerhalb der Screenshot-Datenbank zu verbessern, sind besonders die Vorgehensweise zur Extraktion der relevanten Daten von großem Nutzen.
Wie auch im Preprocessing gibt es auch im Postprocessing verschiedene Algorithmen, die mit den selben Ausgangsdaten unterschiedlich wertvolle Ergebnisse liefern. Daher ist es ratsam, mehrere Algorithmen zu vergleichen und den für den individuellen Use-case am besten geeignetsten zu wählen:
TODO: NLP Folien durchlesen.
\subsubsection{Vergleich}
TODO:
[Auflistung einiger Methodiken, mit vor und nachteilen und bildern]
[Erläuterung der verwendeten Methodiken und Erläuterung warum sie sich so gut für Screenshots eignen]
[Auswirkungen der verschiedenen Methodiken auf unterschiedliche Ausgangsdaten]
Durch den Vergleich ist ersichtlich, dass sich der TODO: in Kombination mit dem TODO: Algoritmus am besten für das Ermitteln von relevanten Schlagworten aus Screenshots von Benutzeroberflächen eignet. Durch die Kombination beschränkt sich die Menge an gefilterten Wörtern ausschließlich auf Füllwörter, die nicht inhaltsspezifisch sind, während durch das Fuzzy Matching kleinere Fehler, verursacht durch die Texterkennung, ausgebessert werden können.

View File

@@ -0,0 +1,39 @@
\chapter{Preprocessing (Probekapitel)}
\label{cha:Preprocessing}
% Preprocessing: Vorbereiten der Screenshots für die Bildverarbeitung
Beim sogenannten "Preprocessing" werden die zu verarbeitenden Bilder gemäß nachfolgender Methoden für die Texterkennung vorbereitet. Ziel der Vorbereitung ist es, Texte im Bild für die Texterkennungs-Engine lesbar zu machen (TODO: QUELLE). Während störende Elemente wie Bildrauschen aus dem Bild entfernt werden sollen, werden Texte ungeachtet der Hinter- bzw. Vordergrundfarbe mit maximalem Kontrast hervorgehoben und von interferierenden "Nicht-Text Elementen" wie Formen oder graphischen Symbolen isoliert.
\section{Stand der Technik}
Die im Rahmen dieser Bachelorarbeit verwendete Texterkennungs-Engine Tesseract verfügt in der aktuellen Version (TODO: VERSION) (TODO: QUELLE) über ein neurales Netzwerk, mit dem auf Basis von sprachspezifischen Trainingsdaten (TODO: QUELLE) Texte in Bildern erkannt werden können.
Laut der Tesseract-Dokumentation gibt es gemäß dem derzeitigen Stand der Technik eine empfohlene Vorgehensweise bei der Vorbereitung von Bildern für die Texterkennung. Jede Methodik bietet dabei wiederum je nach Eigenschaften der Bilddatei verschiedene Vor- und Nachteile:
TODO:
[Auflistung einiger Methodiken, mit vor und nachteilen und bildern]
Verwendet man moderne Tesseract-Implementierungen, sind in diesen oft bereits rudimentäre Bildverarbeitungswerkzeuge verfügbar. Mit diesen Werkzeugen werden die eingespeisten Bilder - sofern nicht bereits im richtigen Format - meist automatisch für die Texterkennung vorbereitet.
Diese initialie Bildverarbeitung, das sogenannte "Preprocessing", folgt in der aktuellen Tesseract-Version folgendem Schema:
TODO: Tesseract-eigenes Preprocessing
(TODO: [Erläuterung der Gründe und Beispiele warum bzw. in welchen Fällen das Preprocessing versagt])
Ohne weitere Einstellungen zu treffen, bewirkt die oben beschriebene Bildverarbeitung zwar ein Umwandeln der Eingangsgrafiken in ein grundsätzlich gutes (TODO: das ist universell aber halt kaka)
\subsection{Optimierung}
Um die Texterkennung mittels Tesseract weiter zu verbessern, ist es notwendig, das Preprocessing zu spezifizieren indem die Breite an möglichen Eingangsdaten durch Annahmen beschränkt wird.
Im Falle dieser Bachelorarbeit handelt es sich bei den zu verarbeitenden Bildern ausschließlich um digitale Bildschirmaufnahmen von grafischen Benutzeroberflächen. Es kann also angenommen werden, dass sowohl die Perspektive der Aufnahme nicht verzerrt ist und der Kontrast in den meisten Fällen ausreicht, um die relevanten Inhalte zu erkennen. Weiters beinhalten grafische Oberflächen oft farbige Hintergrundflächen zur Trennung von Sektionen, auf die bei etwaigem Thresholding gachtet werden muss.
Um die Ergebnisse der Texterkennung zu optimieren, wurde eine Auswahl an Bildverarbeitungsalgorithmen bestimmt. Anhand einer durch den Menschen verschlagworteten Vergleichsmenge können diese Algorithmen nun mittels der Fehlermetriken A, B und C (TODO: metriken) verglichen werden, um den besten zu ermitteln.
\subsubsection{Vergleich}
[Erläuterung der verwendeten Methodiken und Erläuterung warum sie sich so gut für Screenshots eignen]
[Auswirkungen der verschiedenen Methodiken auf unterschiedliche Ausgangsbilder]

View File

@@ -0,0 +1,24 @@
\chapter{Problemstellung}
\label{cha:Problemstellung}
Die in Salzburg ansässige COPA-DATA GmbH bietet die Softwareplattform zenon an, die als umfassende Gesamtlösung Unternehmen in zahlreichen Anwendungsgebieten bei der Automatisierung ihrer Herstellungsprozesse unterstützt.
Die zenon-Plattform kann sowohl vom Kunden selbst, als auch durch das Professional Services Team individuell auf Kundenanforderungen zugeschnitten und in bestehende Prozesse und vor allem Software eingebunden werden. Den Grundstein für die hohe Anpassbarkeit bildet die Produktdokumentation, in der Schnittstellendokumentation, Anleitungen und Beispiele in verschiedensten Sprachen, Formaten und mit kundenspezifischen Erweiterungen umfassend sowohl für Mitarbeiter, als auch für Kunden festgehalten sind.
In der Produktdokumentation werden, besonders in Hinblick auf die grafischen Tools wie die zenon Engineering Studio Entwicklungsumgebung oder die zenon Service Engine, zahlreiche Grafiken verwendet, um Beispiele verständlicher zu machen und Anleitungen übersichtlicher zu gestalten. Um bei dem großen Funktionsumfang der zenon-Tools, den vielen Sprachen, Anpassungen und den unterschiedlichen Themengebieten innerhalb der Dokumentation nicht den Überblick zu verlieren, benötigt das interne "Technical Content and Translation" Team unterstützend zu dem intern verwendeten CMS "Author-It" eine dedizierte Anwendung zur Verwaltung von sprachabhängigen Bilddateien.
Während das Programm auch die Basisfunktionalität, das effiziente Speichern, Bearbeiten, Löschen, Abrufen beziehungsweise das generelle Verwalten von Screenshots und der zugehörigen Metainformation abdecken soll, konzentriert sich diese Bachelorarbeit primär auf die Kategorisierungsfunktionalität.
Mithilfe von optischer Texterkennung (engl. optical character recognition, "OCR") soll es den Mitarbeitern möglich gemacht werden, hochgeladene Screenshots und Grafiken innerhalb von kürzester Zeit aufgrund ihrer Inhalte zu verschlagworten und auf eine bestehende Liste von Schlagworten (engl. "Keywords" beziehungsweise "Tags") zu prüfen.
\section{Herausforderungen}
Die konkrete Herausforderung bei der Texterkennung mittles OCR besteht
Die konkrete Herausforderung bei der Texterkennung mittels OCR besteht aus dem Finden eines passenden Texterkennungs-Frameworks, der Einbindung der im Rahmen dieser Bachelorarbeit entwickelten Prototypbibliothek in das bestehende "ScreenshotManager" Basisprogramms und nicht zuletzt dem korrekten und zuverlässigen Erkennen der erwarteten bzw. bis dahin unbekannten Schlagworte in den bestehenden Bilddateien und denen, die in Zukunft hochgeladen werden. Um bestmögliche Ergebnisse zu erzielen, ist das automatische Verändern der Bilddaten (Thresholds, Anpassen der Kontrastwerte, Farbe, Helligkeit, etc.) dabei unumgänglich.
Weiters bildet die Verknüpfung der Schlagworte mit den entsprechenden Screenshots unter Rücksichtnahme auf die Sprache der hochgeladenen Grafik die Basis des Schlagwortsystems. Es ist ein geeignetes Speichersystem notwendig, um bei der Vielzahl an gespeicherten Screenshots performant nach Schlagwörtern suchen zu können. Die OCR-Funktionalität und auch die Ablagestruktur der Schlagwortinformation muss modular aufgebaut sein, um zukünftig hinzukommende Dokumentationssprachen beziehungsweise neue Schlagwörter, beispielsweise bei Anpassung des Corporate Brandings, ohne großen Konfigurations- oder gar Entwicklungsaufwand unterstützen zu können.
Auch die Integration mit dem intern eingesetzten Content-Management-Systems (kurz "CMS") "Author-It" muss gegeben sein, wobei die Verwaltung und Verknüpfung der Bilddateien mit dem Author-It System aufwendiger ist, als die für die Bachelorarbeit relevante Ablage der Schlagwortinformation.

17
chapters/zeitplan.tex Normal file
View File

@@ -0,0 +1,17 @@
\chapter{Zeitplan}
\label{cha:Zeitplan}
\begin{table}[!ht]
\begin{tabularx}{\textwidth}{ll>{\raggedright\arraybackslash}X}
\textbf{Datum} & \textbf{Meilenstein} & \textbf{Beschreibung} \\
\toprule
31.07.2023 & Expose & Themenfindung, Literaturrecherche, Definition der Forschungsfrage \\
31.08.2023 & Recherche & Schnittstellendefinition, Datenbankdesign \\
15.09.2023 & Preprocessing & Vergleich verschiedenster Bild\-manipulations\-methoden, anschließendes Sammeln und Auswerten der Daten. Danach Implementierung in Beispielbibliothek \\
31.09.2023 & Postprocessing & Vergleich und Auswerten der Ergebnisse der verschiedenen Filterstrategien, inklusive unscharfer Suche nach Schlüsselwörtern. Anschließende Implementierung in der Beispielbibliothek \\
31.11.2023 & Auswertung & Auswertung der extrahierten Textdaten mithilfe der Beispielbibliothek: Qualität der Ergebnisse, Anteil erkannter Worte und Laufzeit der Texterkennung \\
01.12.2023 & Erster Entwurf & \\
31.12.2023 & Finale Abgabe & \\
\end{tabularx}
\caption{Zeitplan}
\end{table}

351
hgb.sty Normal file
View File

@@ -0,0 +1,351 @@
%% hgb.sty
%% This file is part of the Hagenberg Thesis package for creating bachelors's and masters's theses
%% Author: Wilhelm Burger (wilbur@ieee.org)
%% GitHub: https://github.com/Digital-Media/HagenbergThesis
%% File encoding: ASCII
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{hgb}[2023/02/13]%%AUTO
\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} % smart quotes are turned off by default
\newboolean{hgb@noUpdateCheck}
\setboolean{hgb@noUpdateCheck}{false} % update check is perfomed by default
% 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}}
\DeclareOption{noUpdateCheck}{\setboolean{hgb@noUpdateCheck}{true}}
\DeclareOption*{\ClassWarning{hgb}{Unknown option '\CurrentOption'.}}
\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}}%
%% Date-related stuff ---------------------------------------------------------
\edef\hgbDate{\csname ver@hgb.sty\endcsname} % get this package's build date
\RequirePackage{xstring} % for string operations
\RequirePackage[english,ngerman,calc,useregional,showdow=false]{datetime2} % replaces obsolete 'datetime' package
% https://tex.stackexchange.com/questions/316253/latex-convert-date-string-format-from-mm-dd-yyyyy-to-dd-mm-yyyy/316257#316257
\newcommand{\PackageToDTMdate}[2]{% converts date in 'YYYY/MM/DD' format to DTMdate and saves to #2
\StrLeft{#1}{4}[\myYear]%
\StrRight{#1}{2}[\myDay]%
\StrMid{#1}{6}{7}[\myMonth]%
\DTMsavenoparsedate{#2}{\myYear}{\myMonth}{\myDay}{-1}%
%\DTMdate{\myYear-\myMonth-\myDay}%
}
\PackageToDTMdate{\hgbDate}{hgbPackageDate} % converts package date to DTM format: \DTMusedate{hgbPackageDate}
\DTMsavenoparsedate{hgbToday}{\the\year}{\the\month}{\the\day}{-1} % today's date in DTM format: \DTMusedate{hgbToday}
\newcounter{hgbAgeLimit}\setcounter{hgbAgeLimit}{365} % warn if package is older than 1 year
\newcount\hgbAge
\DTMsaveddatediff{hgbToday}{hgbPackageDate}{\hgbAge}
\newcommand{\hgbWarnOldPackage}[1]{\PackageWarning{hagenberg-thesis}{%
^^J****************************************************************
^^JNOTE: 'hagenberg-thesis' is #1 days old - pls. check for updates
^^Jat https://github.com/Digital-Media/HagenbergThesis
^^J****************************************************************
^^J} % https://tex.stackexchange.com/questions/6529/newline-linebreak-in-message
}
\ifthenelse{\hgbAge>\value{hgbAgeLimit} \AND \NOT \boolean{hgb@noUpdateCheck}}%
{\hgbWarnOldPackage{\the\hgbAge}}{}
%% ------------------------------------------------------
\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 \protect\SuperPar\space has been removed.}
}
\newcommand{\email}[1]{%
\texorpdfstring{\href{mailto:#1}{\nolinkurl{#1}}}{<#1>}%
}
% 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}
\RequirePackage{lengthconvert} % for showing the current textwidth in mm
% 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}}{}%
%% 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]
}
% A generic environment that does nothing, e.g., for temporary variable settings:
% \begin{block}
% \setlength{\tabcolsep}{10pt}
% \renewcommand{\arraystretch}{1.50}
% ...
% \end{block}
\newenvironment{block}{}{}
% Gives access to the most recent label assigned (used in longtable example):
\newcommand{\getcurrentlabel}{\@currentlabel}
%% For inserting foreign PDF pages --------------------------------------------
\RequirePackage{pdfpages}
%% Tables ---------------------------------------------------------------------
\RequirePackage{booktabs}
\RequirePackage{longtable}
\RequirePackage{multirow}
%% 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.
\AtBeginDocument{%
\@ifpackageloaded{subfigure}{%
\PackageError{hgb}{Use of the 'subfigure' package is not supported in this setup, because it is obsolete}{}
\let\subfigure\undefined% just to make sure ...
}%
}%
%% ----------------------------------------------------------------------------
\setlength{\fboxsep}{0mm} %globally zero fbox separator

50
hgbabbrev.sty Normal file
View File

@@ -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 (wilbur@ieee.org)
%% GitHub: https://github.com/Digital-Media/HagenbergThesis
%% File encoding: ASCII
\ProvidesPackage{hgbabbrev}[2023/02/13]%%AUTO
\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}

89
hgbalgo.sty Normal file
View File

@@ -0,0 +1,89 @@
%% hgbalgo.sty
%% Toward better looking algorithms ...
%% This package imports and pre-configures the 'algorithmicx'/'algpseudocodex' packages
%% (see https://ctan.org/pkg/algpseudocodex), 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 (wilbur@ieee.org)
%% GitHub: https://github.com/Digital-Media/HagenbergThesis
%% File encoding: ASCII
\ProvidesPackage{hgbalgo}[2023/02/13]%%AUTO
\RequirePackage[noEnd=true,indLines=true,italicComments=false]{algpseudocodex} % https://ctan.org/pkg/algpseudocodex
\RequirePackage{calc} % for numeric calculations
\RequirePackage{xcolor}
% Colors to be used in algorithms (can be redefined locally if desired)
\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}}
% Use SF font and color for procedure and function names:
\newcommand{\@AlgTextProc}[1]{\textcolor{AlgProcedureColor}{\textsf{#1}}}
\algrenewcommand\textproc{\@AlgTextProc}
\algrenewcommand\Call[2]{\textproc{#1}\hskip0.75pt(#2)}%
%% -----------------------------------------------------------------
\newlength{\@AlgTmpIndent}
%% Additional public macros:
% This macro is obsolete and will eventually dissappear:
\algnewcommand{\StateL}[1]{\State #1%
\PackageWarning{hgbalgo}{Macro \protect\StateL\space is obsolete, use \protect\State\space instead}}%
% \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.
\algnewcommand{\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>}
\algrenewcommand\Output[1]{\StateNN[1]{\textbf{Output:} #1}}% use to describe output values: \Output{<description>} (already defined in algpseudocodex.sty)
\algnewcommand\Returns[1]{\StateNN[1]{\textbf{Returns} #1}}% use to describe what a procedure/function returns: \Returns{<description}
% The following macros insert additional vertical space after a statement.
% They only work in horizontal mode and are supposed
% to be used inside (at the end of) statements, e.g.,
% \State $x \gets x + 1$ \algsmallskip
\algnewcommand{\algsmallskip}[0]{\raisebox{-3pt}{\strut}}
\algnewcommand{\algmedskip}[0]{\raisebox{-6pt}{\strut}}
\algnewcommand{\algbigskip}[0]{\raisebox{-12pt}{\strut}}
% '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}}{}%

75
hgbarticle.cls Normal file
View File

@@ -0,0 +1,75 @@
%% 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}[2023/02/13]%%AUTO
\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{apa}{\PassOptionsToPackage{\CurrentOption}{hgbbib}}
% pass all other options to hgb.sty
\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{hgb}}
\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

246
hgbbib.sty Normal file
View File

@@ -0,0 +1,246 @@
%% hgbbib.sty
%% Bibliography Setup
%% This file is part of the Hagenberg Thesis package for creating bachelors's and masters's theses
%% Author: Wilhelm Burger (wilbur@ieee.org)
%% GitHub: https://github.com/Digital-Media/HagenbergThesis
%% File encoding: ASCII
\ProvidesPackage{hgbbib}[2023/02/13]%%AUTO
\newcommand{\@bibstyle}{numeric-comp} %% default bibliography style is 'numeric-comp'
\DeclareOption{apa}{\renewcommand{\@bibstyle}{apa}}
\ProcessOptions\relax
\RequirePackage{xifthen}
%\usepackage[style=numeric-comp,backend=biber,bibencoding=auto]{biblatex}
\usepackage[style=\@bibstyle,backend=biber]{biblatex}
\ExecuteBibliographyOptions{
bibencoding=auto,
bibwarn=true,
sortcites=true,
defernumbers=true,
isbn=false,
doi=true,
backref=true,
backrefstyle=three}
\RequirePackage{csquotes} % recommended for biblatex
%% titles of reference section + 3 categories of references:
\newcommand{\@bibtitle}{Quellenverzeichnis}
\newcommand{\@bibtitleLiteratur}{Literatur}
\newcommand{\@bibtitleMedia}{Medien}
\newcommand{\@bibtitleOnline}{Online-Quellen}
\newcommand{\@bibtitleSoftware}{Software}
\ifthenelse{\equal{\hgb@MainLanguage}{english}}{%
\renewcommand{\@bibtitle}{References}
\renewcommand{\@bibtitleLiteratur}{Literature}
\renewcommand{\@bibtitleMedia}{Media}
\renewcommand{\@bibtitleOnline}{Online sources}
\renewcommand{\@bibtitleSoftware}{Software}
}{}
%% categories for a split bibliography (order of declaration is important!)
\DeclareBibliographyCategory{literature}
\DeclareBibliographyCategory{media}
\DeclareBibliographyCategory{software}
\DeclareBibliographyCategory{online}
%% headings for the bibliography categories
\defbibheading{literature}{%
\phantomsection%
\section*{\@bibtitleLiteratur}%
\addcontentsline{toc}{section}{\@bibtitleLiteratur}%
}
\defbibheading{media}{%
\pagebreak[3]%
\phantomsection%
\section*{\@bibtitleMedia}%
\addcontentsline{toc}{section}{\@bibtitleMedia}%
}
\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{literature}{#1}}%
{\ifthenelse{%
\ifentrytype{movie}\OR
\ifentrytype{video}\OR
\ifentrytype{music}\OR
\ifentrytype{audio}\OR
\ifentrytype{image}}
{\addtocategory{media}{#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}%
}
% Declare a source map so the sorting in \cite commands works across the bib categories
% The maps need to correspond to the entry types in the bib categories (which can't unfortunately used)
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{ % All entry types except for media, software and online
\pernottype{movie}
\pernottype{video}
\pernottype{music}
\pernottype{audio}
\pernottype{image}
\pernottype{software}
\pernottype{electronic}
\pernottype{online}
\pernottype{www}
\step[fieldset=presort, fieldvalue = {A}]
}
\map{ % media entry types
\pertype{movie}
\pertype{video}
\pertype{music}
\pertype{audio}
\pertype{image}
\step[fieldset=presort, fieldvalue = {B}]
}
\map{ % software entry types
\pertype{software}
\pertype{electronic}
\step[fieldset=presort, fieldvalue = {C}]
}
\map{ % online entry types
\pertype{online}
\pertype{www}
\step[fieldset=presort, fieldvalue = {D}]
}
}
}
%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}
\DeclareBibliographyAlias{legislation}{misc}
% Remove the contents of the url field if a doi field is present
% To avoid duplicate DOI URLs
\AtEveryBibitem{
\iffieldundef{doi}{}{\clearfield{url}}
}
% 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
% NOTE: \citenobr is DEPRECATED, use ... {\backtrackerfalse\cite{...}} instead!
\ifthenelse{\equal{\@bibstyle}{apa}}
{
\DeclareCiteCommand{\citenobr}% version for APA
{\PackageWarning{hgb}{Macro \protect\citenobr\space is deprecated, use \protect\backtrackerfalse\space instead!}
\backtrackerfalse%
\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{cite}}%
{\multicitedelim}
{\usebibmacro{postnote}}
}
{
\DeclareCiteCommand{\citenobr}% version for numeric-comp et al.
{\PackageWarning{hgb}{Macro \protect\citenobr\space is deprecated, use \protect\backtrackerfalse\space instead!}
\usebibmacro{cite:init}%
\bibopenbracket%
\backtrackerfalse%
\usebibmacro{prenote}%
}
{\usebibmacro{citeindex}%
\usebibmacro{cite:comp}}
{}
{\usebibmacro{cite:dump}%
\usebibmacro{postnote}%
\bibclosebracket}
}

36
hgbheadings.sty Normal file
View File

@@ -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 (wilbur@ieee.org)
%% GitHub: https://github.com/Digital-Media/HagenbergThesis
%% File encoding: ASCII
\ProvidesPackage{hgbheadings}[2023/02/13]%%AUTO
\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}
}

453
hgblistings.sty Normal file
View File

@@ -0,0 +1,453 @@
%% hgblistings.sty
%% This file is part of the Hagenberg Thesis package for creating bachelors's and masters's theses
%% Author: Wilhelm Burger (wilbur@ieee.org)
%% GitHub: https://github.com/Digital-Media/HagenbergThesis
%% File encoding: UTF-8
\ProvidesPackage{hgblistings}[2023/02/13]%%AUTO
\RequirePackage{xifthen}
\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={accelerator,azimuth,background,background-attachment,%
background-color,background-image,background-position,%
background-position-x,background-position-y,background-repeat,%
behavior,border,border-bottom,border-bottom-color,%
border-bottom-style,border-bottom-width,border-collapse,%
border-color,border-left,border-left-color,border-left-style,%
border-left-width,border-right,border-right-color,%
border-right-style,border-right-width,border-spacing,%
border-style,border-top,border-top-color,border-top-style,%
border-top-width,border-width,bottom,caption-side,clear,%
clip,color,content,counter-increment,counter-reset,cue,%
cue-after,cue-before,cursor,direction,display,elevation,%
empty-cells,filter,float,font,font-family,font-size,%
font-size-adjust,font-stretch,font-style,font-variant,%
font-weight,height,ime-mode,include-source,%
layer-background-color,layer-background-image,layout-flow,%
layout-grid,layout-grid-char,layout-grid-char-spacing,%
layout-grid-line,layout-grid-mode,layout-grid-type,left,%
letter-spacing,line-break,line-height,list-style,%
list-style-image,list-style-position,list-style-type,margin,%
margin-bottom,margin-left,margin-right,margin-top,%
marker-offset,marks,max-height,max-width,min-height,%
min-width,orphans,outline,outline-color,outline-style,%
outline-width,overflow,overflow-X,overflow-Y,padding,%
padding-bottom,padding-left,adding-right,padding-top,%
page,page-break-after,page-break-before,page-break-inside,%
pause,pause-after,pause-before,pitch,pitch-range,%
play-during,position,quotes,-replace,richness,right,%
ruby-align,ruby-overhang,ruby-position,-set-link-source,%
size,speak,speak-header,speak-numeral,speak-punctuation,%
speech-rate,stress,scrollbar-arrow-color,scrollbar-base-color,%
scrollbar-dark-shadow-color,scrollbar-face-color,%
scrollbar-highlight-color,scrollbar-shadow-color,%
scrollbar-3d-light-color,scrollbar-track-color,table-layout,%
text-align,text-align-last,text-decoration,text-indent,%
text-justify,text-overflow,text-shadow,text-transform,%
text-autospace,text-kashida-space,text-underline-position,top,%
unicode-bidi,-use-link-source,vertical-align,visibility,%
voice-family,volume,white-space,widows,width,word-break,%
word-spacing,word-wrap,writing-mode,z-index,zoom},%
sensitive=false,
morecomment=[s]{/*}{*/},
morestring=[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, async, 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}}%
{}
% Code Environment for Python
\lstnewenvironment{PythonCode}[1][]
{\lstset{%
language=Python,
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}%

20
hgbmath.sty Normal file
View File

@@ -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 (wilbur@ieee.org)
%% GitHub: https://github.com/Digital-Media/HagenbergThesis
%% File encoding: ASCII
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{hgbmath}[2023/02/13]%%AUTO
\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}}}

71
hgbreport.cls Normal file
View File

@@ -0,0 +1,71 @@
%% 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}[2023/02/13]%%AUTO
\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{apa}{\PassOptionsToPackage{\CurrentOption}{hgbbib}}
% pass all other options to hgb.sty
\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{hgb}}
\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

586
hgbthesis.cls Normal file
View File

@@ -0,0 +1,586 @@
%% 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 (wilbur@ieee.org)
%% GitHub: https://github.com/Digital-Media/HagenbergThesis
%% File encoding: ASCII
%% Package Information --------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{hgbthesis}[2023/02/13]%%AUTO
\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
\newboolean{hgb@isProposal}
\setboolean{hgb@isProposal}{false}
\newcommand{\@titlepagefont}{\sffamily}
%% Handling class options --------------------------------------------------------------
\DeclareOption{bachelor}{\renewcommand{\@maketitlepages}{\@bachelortitlepages}}
\DeclareOption{master}{\renewcommand{\@maketitlepages}{\@mastertitlepages}}
\DeclareOption{diploma}{\renewcommand{\@maketitlepages}{\@diplomatitlepages}}
\DeclareOption{internship}{\renewcommand{\@maketitlepages}{\@internshiptitlepages}}
\DeclareOption{apa}{\PassOptionsToPackage{\CurrentOption}{hgbbib}}
\DeclareOption{proposal}{\setboolean{hgb@isProposal}{true}} % use with 'bachelor' or 'master' option
% pass all other options to hgb.sty
\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{hgb}}
\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{\@programtype}{\@MissingArg{Type of degree program not specified!}}
\newcommand{\programtype}[1]{%
\ifthenelse{\isempty{#1}}{}{\renewcommand{\@programtype}{#1}}
}
\newcommand{\@programname}{\@MissingArg{Name of degree program not specified!}}
\newcommand{\programname}[1]{%
\ifthenelse{\isempty{#1}}{}{\renewcommand{\@programname}{#1}}
}
\newcommand{\@placeofstudy}{\@MissingArg{Place of study not specified!}}
\newcommand{\placeofstudy}[1]{%
\ifthenelse{\isempty{#1}}{}{\renewcommand{\@placeofstudy}{#1}}
}
\newcommand{\@advisor}{} % empty by default
\newcommand{\advisor}[1]{%
\renewcommand{\@advisor}{#1}
}
\newcommand{\thesisnumber}[1]{%
\ClassWarning{hgbthesis}{command '\protect\thesisnumber' is not supported any longer.}
}
\newcommand{\coursetitle}[1]{%
\ClassWarning{hgbthesis}{command '\protect\coursetitle' is not supported any longer.}
}
\newcommand{\semester}[1]{%
\ClassWarning{hgbthesis}{command '\protect\semester' is not supported any longer.}
}
\newcommand{\@logofile}[0]{}
\newcommand{\logofile}[1]{%
\renewcommand{\@logofile}{#1}
}
\newcommand{\makelogo}[0]{%
\ifthenelse{\equal{\@logofile}{}}%
{\vspace*{30mm}}%
{\includegraphics[height=30mm]{\@logofile}}%
}
% Special sectioning setup for thesis proposals (called in \@bachelortitlepages):
\newcommand{\@proposalsetup}[0]{%
% remove "Kapitel 1" (titlesec):
\titleformat{\chapter}[display]{\sffamily}{}{0pt}{\Huge}
% define an empty entry format for the TOC chapter numbering (tocbasic)
\newcommand\noentrynumber[1]{}
% set empty number and remove indentation for chapter numbering in TOC (tocbasic)
\DeclareTOCStyleEntry[entrynumberformat=\noentrynumber,numwidth=0pt]{tocline}{chapter}
% remove chapter number from sections and figures (basic LaTeX):
\counterwithout{section}{chapter}
\counterwithout{figure}{chapter}
\counterwithout{table}{chapter}
\counterwithout{equation}{chapter}
\counterwithout{program}{chapter}
\counterwithout{algorithm}{chapter}
% remove chapter number from header (fancyhdr):
\renewcommand{\chaptermark}[1]{\markboth{##1}{}}
}
% Submission Commands
\newcounter{@dayofsubmission}
\newcounter{@monthofsubmission}
\newcounter{@yearofsubmission}
\setcounter{@dayofsubmission}{\the\day}
\setcounter{@monthofsubmission}{\the\month}
\setcounter{@yearofsubmission}{\the\year}
\newcommand{\dateofsubmission}[3]{% %\dateofsubmission{yyyy}{mm}{dd}
\setcounter{@yearofsubmission}{#1}
\setcounter{@monthofsubmission}{#2}
\setcounter{@dayofsubmission}{#3}
}
% Internship Report Commands
\newcommand{\@companyName}{\@MissingArg{Company not specified!}}
\newcommand{\companyName}[1]{%
\ifthenelse{\isempty{#1}}{}{\renewcommand{\@companyName}{#1}}
}
\newcommand{\@companyUrl}{\@MissingArg{Company URL not specified!}}
\newcommand{\companyUrl}[1]{%
\ifthenelse{\isempty{#1}}{}{\renewcommand{\@companyUrl}{#1}}
}
\newcommand{\companyPhone}[1]{%
\ClassWarning{hgbthesis}{command '\protect\companyPhone' is not supported any longer.}
}
%% ----------------------------------------------------------------------------
\newcommand{\@license}{\@MissingArg{License information is missing!}}
\newcommand{\license}[1]{%
\renewcommand{\@license}{#1}
}
%% Commands for Creating the Title Pages --------------------------------------
%% dirty trick: adds blank space after each letter (https://stackoverflow.com/a/3951837)
\newcommand{\@addspaces}[1]{%
\@tfor\letter:=#1\do{%
\letter\thinspace% %\space
}\negthinspace%
}
\newcommand{\@bachelortitlefinal}{
% use language switch to add english term
\@addspaces{BACHELORARBEIT}%
}
\newcommand{\@bachelortitleproposal}{
% use language switch to add english term
\@addspaces{BACHELORARBEIT} \space (\@addspaces{EXPOS{É}})%
}
\newcommand{\@makebachelortitle}{%
\begin{titlepage}%
\begin{german}
\rule{0mm}{1mm}%
\vspace*{0mm}%
\begin{center}%
\@titlepagefont%
\setlength{\unitlength}{1cm}%
\parbox[c][5cm][c]{12cm}{%
\centering\LARGE\bfseries%
\setlength{\baselineskip}{25pt}%
\@title%
}
\vskip 15mm%
{\large\@author}%
\vskip 15mm%
\makelogo%
\vskip 15mm%
%
\ifthenelse{\boolean{hgb@isProposal}}%
{\Large{\@bachelortitleproposal}}%
{\Large{\@bachelortitlefinal}}%
\vskip 4mm%
%
{\large eingereicht am} \vskip 1mm {\@programtype}%
\vskip 4mm%
{\large\@programname}%
\vskip 4mm%
{\large in \@placeofstudy}%
\vskip 16mm%
{\large im \DTMgermanmonthname{\value{@monthofsubmission}} \arabic{@yearofsubmission}}%
\end{center}%
\vfil%
\end{german}
\end{titlepage}%
}
\newcommand{\@mastertitlefinal}{
% use language switch to add english term
\@addspaces{MASTERARBEIT}%
}
\newcommand{\@mastertitleproposal}{
% use language switch to add english term
\@addspaces{MASTERARBEIT} \space (\@addspaces{EXPOS{É}})%
}
\newcommand{\@makemastertitle}{%
\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%
%
\ifthenelse{\boolean{hgb@isProposal}}%
{\Large{\@mastertitleproposal}}%
{\Large{\@mastertitlefinal}}%
%
\vskip 4mm%
{\large eingereicht am} \vskip 1mm {\@programtype}%
\vskip 4mm%
{\large\@programname}%
\vskip 4mm%
{\large in \@placeofstudy}%
\vskip 16mm%
%{\large im \monthname[\value{@monthofsubmission}] \arabic{@yearofsubmission}}%
{\large im \DTMgermanmonthname{\value{@monthofsubmission}} \arabic{@yearofsubmission}}%
\end{center}%
\vfil%
\end{german}
\end{titlepage}%
}
\newcommand{\@makediplomatitle}{%
\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 {\@programtype}%
\vskip 4mm%
{\large\@programname}%
\vskip 4mm%
{\large in \@placeofstudy}%
\vskip 16mm%
%{\large im \monthname[\value{@monthofsubmission}] \arabic{@yearofsubmission}}%
{\large im \DTMgermanmonthname{\value{@monthofsubmission}} \arabic{@yearofsubmission}}%
\end{center}%
\vfil%
\end{german}
\end{titlepage}%
}
\newcommand{\@makeinternshiptitle}{%
\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{Praktikumsbericht}}}%
\vskip 4mm%
%{\large Nr.~\@thesisnumber}
%\vskip 4mm%
{\large eingereicht am} \vskip 1mm {\@programtype}%
\vskip 4mm%
{\large\@programname}%
\vskip 4mm%
{\large in \@placeofstudy}%
\vskip 16mm%
%{\large im \monthname[\value{@monthofsubmission}] \arabic{@yearofsubmission}}%
{\large im \DTMgermanmonthname{\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 \@companyUrl}
\\
\vspace{45mm}
{Kontaktperson:}
\\
\vspace{3mm}
{\Large\sf\@advisor\\ \mbox{}}
\end{center}
}
%% Advisor Page ----------------------------------------
\newcommand{\@advisorheaderfinal}{
\ifthenelse{\equal{\hgb@MainLanguage}{german}}%
{Betreuung}%
{Advisor}%
}
\newcommand{\@advisorheaderproposal}{
\ifthenelse{\equal{\hgb@MainLanguage}{german}}%
{Betreuung (Vorschlag)}%
{Proposed Advisor}%
}
\newcommand{\@advisorpage}{%
\ifthenelse{\equal{\@advisor}{}}% does nothing if advisor not defined
{}{%
\newpage
\setcounter{page}{2}
\thispagestyle{plain}
\rule{0mm}{1mm}
\vspace{90mm}
\begin{center}
\ifthenelse{\boolean{hgb@isProposal}}%
{\@advisorheaderproposal:}%
{\@advisorheaderfinal:}%
\\
\vspace{3mm}
{\Large\sf \@advisor\\ \mbox{}}
\end{center}
}
}
%% 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.
Die vorliegende, gedruckte Arbeit ist mit dem elektronisch \"ubermittelten Textdokument identisch.
\par
\vspace{10mm}
\noindent
%\@placeofstudy, am \formatdate{\value{@dayofsubmission}}{\value{@monthofsubmission}}{\value{@yearofsubmission}}
\@placeofstudy, am \DTMdate{\value{@yearofsubmission}-\value{@monthofsubmission}-\value{@dayofsubmission}}
\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.
This printed copy is identical to the submitted electronic version.
\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}}}
\@placeofstudy, \DTMdate{\value{@yearofsubmission}-\value{@monthofsubmission}-\value{@dayofsubmission}}
\par
\vspace{12mm}
\noindent
\@author
\end{english}
}
\newcommand{\@declarationpage}{%
\ifthenelse{\equal{\hgb@MainLanguage}{german}}%
{\@declarationpageDe}%
{\@declarationpageEn}
}
%% Assembly of title pages ----------------------------------------------------
\renewcommand{\@bachelortitlepages}{
\@makebachelortitle%
\ifthenelse{\boolean{hgb@isProposal}}%
{% thesis proposal:
\@proposalsetup%
\@advisorpage%
%no copyright page for proposals
%no declaration page for proposals
}%
{% final thesis:
\@advisorpage%
\@copyrightpage%
\@declarationpage%
}%
}
\renewcommand{\@mastertitlepages}{
\@makemastertitle
\ifthenelse{\boolean{hgb@isProposal}}%
{% thesis proposal:
\@proposalsetup%
\@advisorpage%
%no copyright page for proposals
%no declaration page for proposals
}%
{% final thesis:
\@advisorpage%
\@copyrightpage%
\@declarationpage%
}%
}
\renewcommand{\@diplomatitlepages}{
\@makediplomatitle
%\ifthenelse{\equal{\@advisor}{}}%
%{}{\@advisorpage}%
\@advisorpage
\@copyrightpage
\@declarationpage
}
\renewcommand{\@internshiptitlepages}{
\@makeinternshiptitle
\@companypage
\@copyrightpage
\@declarationpage
}
\newcommand{\@warnmultipleauthors}{\PackageWarning{hagenberg-thesis}{Multiple authors are not supported ('\@backslashchar and' is ignored)!}}%
% Add PDF meta data and create title pages
\renewcommand{\maketitle}{ %replace standard LaTeX-command
\def\and{\@warnmultipleauthors}% suppress \and inside \author{..}
\renewcommand{\thanks}[1]{}% suppress \thanks{..} inside \author{..}
\hypersetup{
pdftitle={\@title},
pdfauthor={\@author},
pdfsubject={\@programtype \@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

BIN
images/logo.pdf Normal file

Binary file not shown.

BIN
includes/title.pdf Normal file

Binary file not shown.

BIN
main.pdf Normal file

Binary file not shown.

12
main.tcp Normal file
View File

@@ -0,0 +1,12 @@
[FormatInfo]
Type=TeXnicCenterProjectInformation
Version=4
[ProjectInfo]
MainFile=main.tex
UseBibTeX=1
UseMakeIndex=0
ActiveProfile=LaTeX(utf8) ⇨ PDF(Sumatra)
ProjectLanguage=de
ProjectDialect=DE

79
main.tex Normal file
View File

@@ -0,0 +1,79 @@
%%% Dateikodierung: UTF-8
%%% äöüÄÖÜß <-- keine deutschen Umlaute hier? UTF-faehigen Editor verwenden!
%%% Magic Comments zum Setzen der korrekten Parameter in kompatiblen IDEs
% !TeX encoding = utf8
% !TeX program = pdflatex
% !TeX spellcheck = de_DE
% !BIB program = biber
\documentclass[bachelor,german,smartquotes, proposal]{hgbthesis}
% Zulässige Optionen in [..]:
% Typ der Arbeit: 'diploma', 'master' (default), 'bachelor', 'internship'
% Zusätzlich für ein Thesis-Exposé: 'proposal' (für 'bachelor' und 'master')
% Hauptsprache: 'german' (default), 'english'
% Option zur Umwandlung in typografische Anführungszeichen: 'smartquotes'
% APA Zitierstil: 'apa'
%%%-----------------------------------------------------------------------------
\RequirePackage[utf8]{inputenc} % bei Verw. von lualatex oder xelatex entfernen!
\graphicspath{{images/}} % Verzeichnis mit Bildern und Grafiken
\logofile{logo} % Logo-Datei: images/logo.pdf (kein Logo: \logofile{})
\bibliography{references} % BibLaTeX-Literaturdatei (references.bib)
\usepackage{outlines}
\usepackage{booktabs}
\usepackage{tabularx}
%%%-----------------------------------------------------------------------------
\begin{document}
%%%-----------------------------------------------------------------------------
%%%-----------------------------------------------------------------------------
% Angaben für die Titelei (Titelseite, Erklärung etc.)
%%%-----------------------------------------------------------------------------
\title{Kategorisierung von lokalisierten Bilddateien mittels OCR}
\author{Simon Gruber}
\programname{Software Engineering}
\programtype{Fachhochschul-Bachelorstudiengang} % auswählen/editieren
% \programtype{Fachhochschul-Masterstudiengang}
\placeofstudy{Hagenberg}
\dateofsubmission{2023}{06}{06} % {YYYY}{MM}{DD}
% \advisor{} % optional
%\strictlicense % restriktive Lizenz anstatt Creative Commons (nicht empfohlen!)
%%%-----------------------------------------------------------------------------
\frontmatter % Titelei (röm. Seitenzahlen)
%%%-----------------------------------------------------------------------------
\maketitle
\tableofcontents
%%%-----------------------------------------------------------------------------
\mainmatter % Hauptteil (ab hier arab. Seitenzahlen)
%%%-----------------------------------------------------------------------------
\include{chapters/fragestellung}
\include{chapters/forschungsstand}
\include{chapters/problemstellung}
\include{chapters/gliederung}
\include{chapters/zeitplan}
\include{chapters/preprocessing}
\include{chapters/postprocessing}
\include{chapters/literatur}
%%%-----------------------------------------------------------------------------
\backmatter % Schlussteil (Quellenverzeichnis und dgl.)
%%%-----------------------------------------------------------------------------
\MakeBibliography % Quellenverzeichnis
%%%-----------------------------------------------------------------------------
\end{document}
%%%-----------------------------------------------------------------------------

161
references.bib Normal file
View File

@@ -0,0 +1,161 @@
% todo add copa data image source
% @image{CocaCola1940,
% author={Wolcott, Marion Post},
% title={Natchez, Miss.},
% note={Library of Congress Prints and Photographs Division Washington, Farm Security Administration/Office of War Information Color Photographs},
% date={1940-08},
% url={https://www.loc.gov/pictures/item/2017877479/},
% langid={english}
% }
% Conference = Inproceedings
% Tesseract Open Source OCR Engine (main repository) \url{https://github.com/tesseract-ocr/tesseract}
% Improving the quality of the output, Tesseract documentation \url{https://tesseract-ocr.github.io/tessdoc/ImproveQuality.html}
@book{2007Crs,
isbn = {9780471415701},
year = {2007},
title = {Character recognition systems : a guide for students and practioners},
language = {eng},
author = {Cheriet, Mohamed},
keywords = {Optical character recognition devices},
url = {https://permalink.obvsg.at/fho/AC06408992},
urldate = {2023-06-12}
}
@book{2022Scas,
series = {Advances in Intelligent Systems and Computing ;},
isbn = {981-16-7088-9},
year = {2022},
title = {Soft computing and signal processing : : proceedings of 4th ICSCSP 2021},
language = {eng},
author = {Reddy, V. Sivakumar},
keywords = {Signal processing ; Congresses},
url = {https://search-fho.obvsg.at/permalink/f/19351jn/FHO_alma5134174850004527},
urldate = {2023-06-12}
}
@book{BlahaMichael2013U:dm,
isbn = {9781935504511},
year = {2013},
title = {UML : database modeling workbook},
edition = {1. print..},
language = {eng},
author = {Blaha, Michael},
url = {https://permalink.obvsg.at/fho/AC11105171},
urldate = {2023-06-12}
}
@book{BoochGrady1999Tuml,
series = {Addison-Wesley object technology series},
isbn = {0201571684},
year = {1999},
title = {The unified modeling language user guide : UML},
edition = {3. print..},
language = {eng},
author = {Booch, Grady},
keywords = {Computer software ; Development},
url = {https://permalink.obvsg.at/fho/AC08768402},
urldate = {2023-06-12}
}
@book{ChaudhuriArindam2017OCRS,
series = {Studies in Fuzziness and Soft Computing 352},
isbn = {9783319502526},
year = {2017},
title = {Optical Character Recognition Systems for Different Languages with Soft Computing},
language = {eng},
author = {Chaudhuri, Arindam},
keywords = {Engineering},
url = {https://permalink.obvsg.at/fho/AC12323924},
urldate = {2023-06-12}
}
@book{DingXiaoqing2012AiCR,
abstract = {This book presents advances in character recognition, and it consists of 12 chapters that cover wide range of topics on different aspects of character recognition. Hopefully, this book will serve as a reference source for academic research, for professionals working in the character recognition field and for all interested in the subject.},
publisher = {IntechOpen},
isbn = {953-51-5669-1},
year = {2012},
title = {Advances in Character Recognition},
language = {eng},
author = {Ding, Xiaoqing},
keywords = {Optical character recognition},
urldate = {2023-06-12},
doi = {10.5772/2575},
url = {https://www.intechopen.com/books/2182}
}
@book{HayDavidC2011U,
isbn = {1935504193},
year = {2011},
title = {UML \& data modeling : a reconciliation},
language = {eng},
author = {Hay, David C},
keywords = {Data structures (Computer science)},
url = {https://permalink.obvsg.at/fho/YC00337386},
urldate = {2023-06-12}
}
@inproceedings{Hyyr2003PracticalMF,
title = {Practical Methods for Approximate String Matching},
author = {Heikki Hyyr{\"o}},
year = {2003},
url = {https://www.semanticscholar.org/paper/Practical-Methods-for-Approximate-String-Matching-Hyyr%C3%B6/3b2227ae166cbe90b20408da3f2feb75f95afd9c},
urldate = {2023-06-12}
}
@book{KemperAlfons2015D:eE,
series = {De-Gruyter-Oldenbourg-Studium},
isbn = {9783110443752},
year = {2015},
title = {Datenbanksysteme : eine Einführung},
edition = {10., aktualisierte u. erw. Aufl..},
language = {ger},
author = {Kemper, Alfons},
keywords = {Datenbanksystem},
url = {https://permalink.obvsg.at/fho/AC12661940},
urldate = {2023-06-12}
}
@article{Navarro2000,
author = {Navarro, Gonzalo},
year = {2000},
month = {04},
title = {A Guided Tour to Approximate String Matching},
volume = {33},
journal = {ACM Computing Surveys},
doi = {10.1145/375360.375365},
url = {https://www.researchgate.net/publication/2375410_A_Guided_Tour_to_Approximate_String_Matching},
urldate = {2023-06-12}
}
@book{SaakeGunter2011D-I:,
isbn = {9783826691560},
year = {2011},
title = {Datenbanken - Implementierungstechniken : [Architekturprinzipien, Datenstrukturen und Algorithmen, Transaktionsverwaltung und Recovery]},
edition = {3. Aufl..},
language = {ger},
author = {Saake, Gunter},
keywords = {Datenbanksystem},
url = {https://permalink.obvsg.at/fho/AC08815950},
urldate = {2023-06-12}
}
@inproceedings{Smith2007,
author = {Smith R.},
title = {An Overview of the Tesseract OCR Engine},
date = {2007},
langid = {ngerman},
url = {https://ieeexplore.ieee.org/document/4376991},
urldate = {2023-06-12}
}
@online{tessdoc,
title = {Tesseract Documentation},
url = {https://tesseract-ocr.github.io/},
date = {2023-05-23},
urldate = {2023-06-12},
language = {eng}
}