diff --git a/contents.tex b/contents.tex index cea49d4b2b4f1d62b9e4cb9dc23d6f0843364bba..6087c54b1f6505ae579eb6610d31dac772b1db5a 100644 --- a/contents.tex +++ b/contents.tex @@ -110,6 +110,145 @@ ganz leicht Graphen erstellen: \label{fig:the-plot} \end{figure} + + +\section{Formeln und Algorithmen} + +\subsection{Formeln} + +\Cref{eq:example1} gibt eine referenzierbare Formel an, +während \cref{eq:example2} eine Formel darstellt, die länger ist als die +Zeile zulässt. + +\begin{equation} + \label{eq:example1} + 2 = 1 + 1 +\end{equation} + +\begin{multline} + \label{eq:example2} + 30 = 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 \\ + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 +\end{multline} + +\subsubsection{Mehrzeilige Formeln} + +In der zweizeiligen Gleichung +\begin{equation} + \label{eq:mlp-stacking} + \begin{split} + \hat{y} & = f_2(f_1(x; W); V) \\ + & = f(x; W, V) + \end{split} +\end{equation} +wurden die Gleichheitszeichen in beiden Zeilen direkt untereinander ausgerichtet +(mittels \texttt{\&} im Quelltext und der \texttt{split}-Umgebung). +Teilen wir \cref{eq:mlp-stacking}, welche den Forward Pass eines Neuronalen +Netzes darstellt, +in mehrere Schritte auf, so erhalten wir +\begin{align} + a & = W^\mathsf{T} x \label{eq:fp-act} \\ + h & = g_1(a) \label{eq:fp-hidden} \\ + o & = V^\mathsf{T} h \label{eq:fp-out} \\ + \hat{y} & = g_2(o) \label{eq:fp-pred} + \,\text{,} +\end{align} +wobei \cref{eq:fp-act,eq:fp-hidden,eq:fp-out,eq:fp-pred} jeweils eine eigene +Referenznummer erhalten. + + +\subsection{Algorithmen} + +Für Algorithmen kann das bereits inkludierte Paket \texttt{algoritihmicx} +genutzt werden. +In \cref{alg:minimax} wird exemplarisch eine Implementierung des +Minimax-Algorithmus aufgeführt. + +\begin{algorithm} + \caption{Determining the next action by Minimax}% + \label{alg:minimax} + \begin{algorithmic}[1] + \Function{Minimax}{Game State Tree: $G^n$} + \State bestValue \(\gets -\infty\) + \State \(bestAction \gets \) NIL + \ForAll{\(G^n_a \in S(G^n)\)} + \State \(value = \) \Call{MinimaxValue}{\(G^n_a\), true} + \If{\(value > bestValue\)} \Comment{Aktualisiere besten Wert} + \State \(bestValue \gets value\) + \State \(bestAction \gets a\) + \EndIf + \EndFor + \State \Return \(bestAction\) + \EndFunction + \Statex + \Function{MinimaxValue}{Game State Tree: $G^n$ Boolean: $ourTurn$} + \If{\(D(G^n)=0\)} + \State \Return \Call{Heuristic}{root(\(G^n\))} + \ElsIf{\(ourTurn\)} + \State \(maxValue \gets -\infty \) + \ForAll{\(S \in S(G^n)\)} + \State \(newValue \gets \) \Call{MinimaxValue}{\(S\), false} + \State \(maxValue \gets max(newValue, maxValue)\) + \EndFor + \State \Return \(maxValue\) + \Else + \State \(minValue \gets +\infty \) + \ForAll{\(S \in S(G^n)\)} + \State \(newValue \gets \) \Call{MinimaxValue}{\(S\), true} + \State \(minValue \gets \min(newValue, minValue)\) + \EndFor + \State \Return \(minValue\) + \EndIf + \EndFunction + \end{algorithmic} +\end{algorithm} + + +\subsection{Source Code Listings} + +\Cref{lst:hello-c,lst:hello-python} zeigen ein `Hello World'-Programm, +je in C und Python. +\Cref{lst:hello-prolog} zeigt ein Prolog-Prädikat, welches eine Liste in zwei +teile teilen kann. + +\begin{lstlisting}[ + float, caption={Hello World in C.}, label={lst:hello-c}, language=C +] +#include <stdio.h> + +int main(int argc, char[] *args){ + printf("Hello World!\n"); + // And done! +} +\end{lstlisting} + +\begin{lstlisting}[ + float, caption={Totally minimal Hello World in Python.}, + label={lst:hello-python}, language=Python +] +def hello_world(): + print("Hello World"!) + +if __name__ == "__main__": + hello_world() +\end{lstlisting} + +\begin{lstlisting}[ + float, caption={Prolog implementation of \texttt{split/4}}, + label={lst:hello-prolog}, language=Prolog +] +% Split list into two parts (length of first list given). +% +% ?- split([a,b,c,d,e,f,g,h,i,k], 3, L1, L2). +% L1 = [a,b,c] +% L2 = [d,e,f,g,h,i,k] +% +split(L, N, L1, L2) :- + length(L1, N), + append(L1, L2, L). +\end{lstlisting} + + \section{Conclusion} Am Ende der Arbeit werden noch einmal die erreichten Ergebnisse diff --git a/hhuthesis.cls b/hhuthesis.cls index 3c69db49e0fb933a686e8919aed6e63d4ea5a33a..346300014f9646de7ad89af74547511c24ed98c3 100644 --- a/hhuthesis.cls +++ b/hhuthesis.cls @@ -1,5 +1,5 @@ \NeedsTeXFormat{LaTeX2e} -\ProvidesClass{hhuthesis}[2020/02/11 HHU Thesis LaTeX document class v1.10] +\ProvidesClass{hhuthesis}[2020/02/11 HHU Thesis LaTeX document class v1.11] \DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} % Options fallback. \ProcessOptions\relax @@ -96,6 +96,7 @@ %% Corporate Design says to use Arial, but TeXLive only provides helvet \RequirePackage{helvet} \renewcommand{\familydefault}{\sfdefault} +\RequirePackage[scaled=0.85]{beramono} \pagestyle{headings} @@ -175,6 +176,27 @@ } } +%% Adapt lstlisting display +\newcommand{\lstkeyword}[1]{% + \ifprintblackwhite\color{black}\else\color{hhublue}\fi\bfseries#1} +\newcommand{\lststring}[1]{% + \ifprintblackwhite\color{black}\else\color{hhudarkblue}\fi#1} +\newcommand{\setlstlistingstyle}{ + \lstset{ + basicstyle=\small\ttfamily, + numbers=left, numberstyle=\footnotesize, + keywordstyle=\lstkeyword, + commentstyle=\color{gray}\itshape, + stringstyle=\lststring, + showstringspaces=false, + frame=tb, + } + \renewcommand*\thelstnumber{{\the\value{lstnumber}}:} +} + +%% Adapt algorithmicx font +\newcommand{\algsmallfont}{\algrenewcommand\ALG@beginalgorithmic{\small}} + %%% Setup of title page \RequirePackage{graphicx} @@ -446,4 +468,10 @@ \input{abstract.tex} \end{abstract} \cleardoublepage + + % Ensure cleverref knows how to talk about listings. + \iflanguage{ngerman}{ + \crefname{listing}{Quellcode}{Quellcodes} + \Crefname{listing}{Quellcode}{Quellcodes} + }{} } diff --git a/thesis.tex b/thesis.tex index f70355825acc2c7f82bd5eeb068ff41e14e0defa..56d2612d80a3267e2f1a50576585233d872655ff 100644 --- a/thesis.tex +++ b/thesis.tex @@ -44,7 +44,7 @@ % Benutzen Sie das Kommando \blackwhiteprint, % wenn sie in schwarzweiß drucken möchten. % Im Farbdruck ist jede farbige Seite idR teurer. -% \blackwhiteprint % Kommentarzeichen entfernen für Schwarzweißdruck +% \blackwhiteprint % Kommentarzeichen entfernen für Schwarzweißdruck %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% (Ende) Einstellungen zur Personalisierung %% @@ -73,8 +73,6 @@ \usepackage{amsmath} \usepackage{amssymb} -\usepackage{listings} % Einbindung von Code -\usepackage{algorithmicx} % Angabe von Algorithmen in Pseudocode \usepackage{siunitx} % \num Befehl zum einfacheren Formatieren von Zahlen. \usepackage{enumitem} % Leichter konfigurierbare enumerate-Umgebungen. \usepackage{subcaption} % Unterteilung von Figures in Subfigures. @@ -91,6 +89,20 @@ \usepackage{multicol} \usepackage{longtable} % Große Tabellen gehen über mehrere Seiten. +%% Quellcode +\usepackage{listings} % Einbindung von Code. +\setlstlistingstyle{} % Kosmetische Einstellungen +% Sprachabhängige Bezeichnung. +\iflanguage{ngerman}{\renewcommand{\lstlistingname}{Quellcode}}{} + +%% Algorithmen in Pseudocode +\usepackage{algorithm} % Float-Umgebung für angegebene Algorithmen. +\usepackage{algorithmicx} % Angabe von Algorithmen in Pseudocode. +\usepackage{algpseudocode} % Standart Pseudocode-Elemente für Algorithmen. +\algsmallfont{} +% Sprachabhängige Bezeichnung. +\iflanguage{ngerman}{\floatname{algorithm}{Algorithmus}}{} + %% Intelligenteres Referenzieren mittels \cref. %% \languagename um dynamisch zwischen ngerman oder english zu wechseln. \usepackage[\languagename,capitalize,noabbrev]{cleveref} @@ -147,9 +159,25 @@ \backmatter + +%% Listings of figures, tables, etc. Delete what is not needed. \listoffigures + \listoftables +% Algorithms +\iflanguage{ngerman}% + {\renewcommand{\listalgorithmname}{Algorithmenverzeichnis}}{} +\addcontentsline{toc}{section}{\listalgorithmname} +\listofalgorithms + +% Code Listings +\iflanguage{ngerman}% + {\renewcommand{\lstlistlistingname}{Quellcodeverzeichnis}}% + {\renewcommand{\lstlistlistingname}{List of Listings}} +\addcontentsline{toc}{section}{\lstlistlistingname} +\lstlistoflistings + \clearpage \bibliography{references} %% Depending on Language, use german alphadin or original alpha