Fix documentclass

This commit is contained in:
Never Gude 2026-04-23 13:35:39 +02:00
parent 3c93339506
commit 2873ddf123
12 changed files with 1645 additions and 155 deletions

View file

@ -15,7 +15,7 @@
\recalctypearea \recalctypearea
\RequirePackage{enumitem} \RequirePackage{enumitem}
\RequirePackage{ngutils}
% define fonts % define fonts
\RequirePackage{fontspec} \RequirePackage{fontspec}

17
übung_2/agt_übung_2.aux Normal file
View file

@ -0,0 +1,17 @@
\relax
\providecommand*\new@tpo@label[2]{}
\providecommand \babel@aux [2]{\global \let \babel@toc \@gobbletwo }
\@nameuse{bbl@beforestart}
\catcode `"\active
\providecommand\hyper@newdestlabel[2]{}
\providecommand\HyField@AuxAddToFields[1]{}
\providecommand\HyField@AuxAddToCoFields[2]{}
\providecommand\BKM@entry[2]{}
\BKM@entry{id=1,dest={73656374696F6E2E31},srcline={1},srcfile={2E2F617566676162655F312E746578}}{5C3337365C3337375C3030304B5C3030306C5C303030655C303030695C3030306E5C303030735C303030745C303030655C3030305C3034305C3030304B5C3030306E5C3030306F5C303030745C303030655C3030306E5C3030305C3337345C303030625C303030655C303030725C303030645C303030655C303030635C3030306B5C303030755C3030306E5C30303067}
\BKM@entry{id=2,dest={73656374696F6E2E32},srcline={1},srcfile={2E2F617566676162655F322E746578}}{5C3337365C3337375C303030535C303030745C303030725C303030615C3030305C3333375C303030655C3030306E5C303030725C303030655C303030705C303030615C303030725C303030615C303030745C303030755C303030725C3030305C3034305C3030306D5C303030695C303030745C303030745C303030655C3030306C5C303030735C3030305C3034305C3030304C5C303030695C3030306E5C303030655C303030615C303030725C303030655C303030725C3030305C3034305C303030505C303030725C3030306F5C303030675C303030725C303030615C3030306D5C3030306D5C303030695C303030655C303030725C303030755C3030306E5C303030675C3030305C3034305C303030755C3030306E5C303030645C3030305C3034305C303030465C3030306C5C3030305C3337345C303030735C303030735C303030655C3030306E}
\BKM@entry{id=3,dest={73656374696F6E2E33},srcline={1},srcfile={2E2F617566676162655F332E746578}}{5C3337365C3337375C303030465C3030306C5C3030305C3337345C303030735C303030735C303030655C3030305C3034305C303030665C303030695C3030306E5C303030645C303030655C3030306E}
\babel@aux{ngerman}{}
\@writefile{toc}{\contentsline {section}{\numberline {1}Kleinste Knotenüberdeckung}{1}{section.1}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {2}Straßenreparatur mittels Linearer Programmierung und Flüssen}{1}{section.2}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {3}Flüsse finden}{1}{section.3}\protected@file@percent }
\gdef \@abspage@last{1}

1398
übung_2/agt_übung_2.log Normal file

File diff suppressed because it is too large Load diff

BIN
übung_2/agt_übung_2.pdf Normal file

Binary file not shown.

Binary file not shown.

View file

@ -1,5 +1,4 @@
\documentclass{../ngexrcs} \documentclass{ngexrcs}
\usepackage{../ngutils}
\usepackage{hyperref} \usepackage{hyperref}
\setkeys{Gin}{pagebox=artbox, width=0.2\textwidth} \setkeys{Gin}{pagebox=artbox, width=0.2\textwidth}
@ -14,6 +13,5 @@
\input{aufgabe_1.tex} \input{aufgabe_1.tex}
\input{aufgabe_2.tex} \input{aufgabe_2.tex}
\input{aufgabe_3.tex} \input{aufgabe_3.tex}
\input{aufgabe_4.tex}
\end{document} \end{document}

View file

@ -1,47 +1 @@
\section{Spannbäume \& Breitensuche} \section{Kleinste Knotenüberdeckung}
Sei $G = \tup{V, E}$ ein zusammenhängender Graph mit Kantengewichten $w: E \to \NN$
und $s \in V$ ein ausgezeichneter Knoten.
\begin{tasks}
\item
\begin{quote}
Wenn $w(e) = 1$ für alle $e \in E$, dann ist der Breitensuchbaum mit
Quelle $s$ ein minimaler Spannbaum.
\end{quote}
Die Breitensuche berechnet in diesem
Fall den kürzesten Weg von jedem Knoten zum Knoten $s$, also den
Breitensuchbaum. Dieser spannt also einen minimalen Spannbaum auf.
\points{2}
\item
\begin{quote}
Wenn $w(e) = 1$ für alle $e \in E$, dann ist jeder minimale Spannbaum
von $G$ ein Breitensuchbaum mit Quelle $s$.
\end{quote}
Falsch, siehe \autoref{fig:msb}.
\points{2}
\begin{figure}[h]
\centering
\includegraphics[page=1]{figures.pdf}
\caption{$\pi$-Zeiger des Breitensuchbaums und MSB blau hinterlegt.}
\label{fig:msb}
\end{figure}
\item
\begin{quote}
Wenn $w(e) \in \set{1, 2, 3}$ für alle $e \in E$, dann ist jeder minimale
Spannbaum von $G$ ein Tiefensuchbaum mit Quelle $s$.
\end{quote}
Falsch, siehe \autoref{fig:dfs}. Der Minimale Spannbaum kann kein Tiefensuchbaum
sein.
\points{2}
\begin{figure}[h]
\centering
\includegraphics[page=2]{figures}
\caption{Tiefensuchbaum in orange und MSB blau hinterlegt.}
\label{fig:dfs}
\end{figure}
\end{tasks}

View file

@ -1,78 +1 @@
\section{Kreissuche} \section{Straßenreparatur mittels Linearer Programmierung und Flüssen}
\begin{tasks}
\item
Wähle Startknoten $s$ und füge ihn in eine neue Queue $Q$ ein.
Nimm den vordersten Knoten $u$ aus $Q$ und füge seine noch nicht entdeckten (weißen)
Nachbarn ein und färbe sie grau. Wenn einer der Nachbarn schon entdeckt wurde,
also grau ist, gibt es einen Kreis in $G$.
Markiere den Knoten $u$ als abgeschlossen ($black$) und entferne ihn aus $Q$
Wiederhole den Schritt solange bis $Q$ leer ist.
% \begin{pseudocode}[caption=Hello World Algorithmische]
% EinfacherKreis(|Graph| $G$, |Vertex| $s$)
% Initialize($G$, $s$)
% $Q \gets$ new Queue
% $Q.$Enqueue($s$)
% $t_1 \gets nil$
% $t_2 \gets s$
% // Comment
% while $Q \neq \emptyset$ do
% $u \gets Q.$Dequeue
% $t_1 \gets t_2$
% $t_2 \gets u$
% foreach $v \in Adj[u]$ do
% if $v.color = white$ then
% $Q.$Enqueue($v$)
% $u.color \gets black$
% if $t_1 = t_2$ then
% return $true$
% else
% return $false$
% \end{pseudocode}
\begin{algorithm}[h]
\centering
\begin{algorithmic}
\alg{EinfacherKreis}{Graph $G$, Vertex $s$} \+ \\
\alg{Initialize}{$G$, $s$} \com{So wie in der Breitensuche} \\
$Q \gets$ new \alg{Queue}{} \\
$Q.$\alg{Enqueue}{$s$} \\
while $Q \neq \emptyset$ do \+ \\
$u \gets Q.$\alg{Dequeue}{} \\
$u.color \gets gray$ \\
foreach $v \in Adj[u]$ do \+ \\
\com{Füge alle noch nicht entdeckten Knoten ein} \\
if $v.color = white$ then \+ \\
$v.color \gets gray$ \\
$Q.$\alg{Enqueue}{$v$} \- \\
\com{Wenn ein Knoten schon entdeckt wurde, gibt es einen Kreis} \\
else return $true$ \- \\
$u.color \gets black$ \- \\
return $false$
\end{algorithmic}
\end{algorithm}
\points{4}
\item
Dadurch, dass wir nur Knoten
einfügen, die noch nicht entdeckt wurden, können wir nie auf dem selben Pfad
zu einem Knoten kommen. Das heißt, wenn wir einen schon entdeckten Knoten
finden, haben wir einen Kreis im Graphen gefunden.
Der Algorithmus kann aufgrund der Struktur des Graphens (kein Multigraph,
keine Selbstkanten) nur Kreise der Länge mindestens 3 finden.
Jeder Knoten wird nur einmal in die Queue eingefügt und nur einmal herausgenommen.
Somit läuft der Algorithmus in $\Oh(\abs{V})$.
\points{2}
\item
Solange es weiße Knoten im Graphen gibt, wählen wir einen neuen Startknoten
für diese Zusammenhangskomponente. Als Ausgabe geben wir ein Array von
Tupeln $\tup{s_i, c_i}$ zurück, wobei $s_i$ der Startknoten einer
Zusammenhangskomponente und $c_i \in \set{true, false}$ der Wahrheitswert, ob
ein Kreis in der Komponente existiert.
\points{1}
\end{tasks}

View file

@ -1,26 +1 @@
\section{Eulerwege} \section{Flüsse finden}
\begin{quote}
Sei $G = \tup{V, E}$ ein ungerichteter, zusammenhängender Graph. Dann gilt: $G$ hat genau
dann einen Eulerweg, wenn die Anzahl an Knoten $v \in V$, für die gilt, dass $deg(v)$
ungerade ist, genau $0$ oder $2$ ist.
\end{quote}
\begin{itemize}
\item[$\seilpmi$]
1. Fall: $0$ Knoten mit ungeradem Grad. Nach dem Satz in der Vorlesung
gibt es einen Eulerkreis. Im Eulerweg sind also Start- und Endknoten
identisch.
2. Fall: $2$ Knoten mit ungeradem Grad. Die beiden Knoten bilden den Start-
und Endknoten des Eulerwegs. Die Kante die den Eulerkreis schließen würde
braucht genau zwei Knoten, zu denen sie inzident ist. Nehmen wir diese Kante
weg, ergibt sich eine ungerader Grad an diesen beiden Knoten.
\item[$\implies$]
Ein Graph mit ungerader Anzahl an Knoten mit ungeradem Grad kann nicht
existieren, da die Summe aller Knoten mit ungeradem Grad gerade ist.
Für alle anderen Fälle gilt, wenn ein Knoten ungeraden Grad hat, dann gibt
es keinen Weg aus dem Knoten heraus, wenn man hineingelaufen ist.
\end{itemize}
\points{4}

75
übung_2/ngexrcs.cls Normal file
View file

@ -0,0 +1,75 @@
% vim: set filetype:tex
% Identification %
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{ngexrcs}[2021/12/21 ADS Exercise class]
% Handle options %
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{scrartcl}}
\ProcessOptions\relax
% More declarations %
\LoadClass{scrartcl}
\KOMAoptions{mpinclude=true}
\recalctypearea
\RequirePackage{enumitem}
\RequirePackage{ngutils}
% define fonts
\RequirePackage{fontspec}
%\RequirePackage{tgpagella}
%\RequirePackage{tgheros}
%\RequirePackage{euler-math}
\RequirePackage[math-style=upright]{unicode-math}
\setmainfont{TeX Gyre Pagella}
\setsansfont{TeX Gyre Heros}
\setmonofont{TeX Gyre Cursor}
\setmathfont{Euler Math}
\setlength{\marginparwidth}{1.5\marginparwidth}
\setlength{\fboxrule}{\heavyrulewidth}
%
% \renewcommand\theenumi{\@alph\c@enumi}
% \renewcommand\theenumii{\@arabic\c@enumii}
%\renewcommand\theenumiii{\@roman\c@enumiii}
%\renewcommand\theenumiv{\@Alph\c@enumiv}
% \renewcommand\labelenumi{\theenumi)}
% \renewcommand\labelenumii{\theenumii.}
%\renewcommand\labelenumiii{\theenumiii.}
%\renewcommand\labelenumiv{\theenumiv.}
% Use sansfont for all title elements
\addtokomafont{titlehead}{\sffamily}
\addtokomafont{subject}{\normalfont \sffamily \itshape}
\addtokomafont{title}{\sffamily}
\addtokomafont{subtitle}{\sffamily}
\addtokomafont{author}{\sffamily}
\addtokomafont{date}{\sffamily}
\addtokomafont{publishers}{\sffamily}
% Use serif font for headings
\addtokomafont{disposition}{\rmfamily}
% Let sections be formated as in: Aufgabe 1 -- Section title
\renewcommand*{\sectionformat}{Aufgabe \thesection\autodot\enskip--\enskip}
% Let points of an exercise be printed as in: [__ / 2]
\newkomafont{points}{\sffamily}
\newcommand\points[2][\quad]{\marginline{\framebox{{\usekomafont{points}#1 \textbf{/} #2}}}}
\newenvironment{tasks}[1][1em]
{
\setlist{leftmargin=*}
\renewcommand\theenumi{\@alph\c@enumi}
\renewcommand\theenumii{\@arabic\c@enumii}
\renewcommand\labelenumi{\theenumi)}
\renewcommand\labelenumii{\theenumii.}
\begin{enumerate}
}{%
\end{enumerate}
}

150
übung_2/ngutils.sty Normal file
View file

@ -0,0 +1,150 @@
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{ngutils}[2025/12/24 Never's LaTeX utils]
\RequirePackage[ngerman]{babel}
\RequirePackage{graphicx}
\RequirePackage{tabularx}
\RequirePackage{booktabs}
\RequirePackage{listings}
\lstnewenvironment{pseudocode}[1][] %defines the algorithm listing environment
{
\renewcommand{\lstlistingname}{Algorithmus}
\lstset{ %this is the stype
mathescape=true,
columns=fullflexible,
basicstyle=\normalfont,
identifierstyle=\scshape,
keywordstyle=\bfseries,
keywords={, new, if, then, else, while, for, in, to, up, down, foreach, do, return},
commentstyle=\itshape,
comment=[l]//,
delim=[is][\normalfont]{|}{|},
tabsize=3,
frame=tb,
framerule=1pt,
#1 % this is to add specific settings to an usage of this environment (for instnce, the caption and referable label)
}
}
{}
\newcommand{\seilpmi}{\ensuremath{\Longleftarrow}}
\newcommand\NN{\ensuremath{\mathbb{N}}}
\newcommand\ZZ{\ensuremath{\mathbb{Z}}}
\newcommand\QQ{\ensuremath{\mathbb{Q}}}
\newcommand\RR{\ensuremath{\mathbb{R}}}
\newcommand\CC{\ensuremath{\mathbb{C}}}
\newcommand\PP{\ensuremath{\mathbb{P}}}
\newcommand\Oh{\ensuremath{\mathcal{O}}}
\newcommand\oh{\ensuremath{\scriptstyle{\mathcal{O}}}}
\newcommand\Eh{\ensuremath{\mathrm{E}}}
\newcommand\Var{\ensuremath{\mathrm{Var}}}
\newcommand\parens[1]{\ensuremath{\left(#1\right)}}
\newcommand\brackets[1]{\ensuremath{\left[#1\right]}}
\newcommand\braces[1]{\ensuremath{\left\{#1\right\}}}
\newcommand\angled[1]{\ensuremath{\left\langle#1\right\rangle}}
\newcommand\tup[1]{\parens{#1}}
\newcommand\ivl[1]{\brackets{#1}}
\newcommand\set[1]{\braces{#1}}
\newcommand\arr[1]{\angled{#1}}
\newcommand\abs[1]{\ensuremath{\lvert#1\rvert}}
\newcommand\norm[1]{\ensuremath{\lVert#1\rVert}}
\newcommand\ceil[1]{\ensuremath{\lceil#1\rceil}}
\newcommand\floor[1]{\ensuremath{\lfloor#1\rfloor}}
\newcommand\alg[2]{{\normalfont\scshape#1}{\normalfont(#2)}}
\newcommand\algt[1]{{\normalfont\scshape#1}}
\newcommand\com[1]{{\normalfont\itshape/\!\!/ #1}}
\newenvironment{algorithmic}[1][1em]{
\begin{minipage}[t]{\dimexpr\linewidth}
\bfseries
\begin{tabbing}
\hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\kill
}{%
\end{tabbing}
\end{minipage}
}
% \newenvironment{algorithm}[1][1em]{
% \begin{center}
% \begin{minipage}[t]{\dimexpr\linewidth}
% \bfseries
% \begin{tabbing}
% \hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\kill
% }{%
% \end{tabbing}
% \end{minipage}
% \end{center}
% }
\makeatletter
\newcounter{algorithm}% the counter
\renewcommand*\thealgorithm{\arabic{algorithm}}% the default format for the counter
\newcommand*\fps@algorithm{tbp}% default floating options
\newcommand*\ftype@algorithm{4}% float type number, needs to be a power of 2; % \ftype@figure=1, \ftype@table=2
\newcommand*\ext@algorithm{loa}% extension of file for the list of schemes
\newcommand*\fnum@algorithm{\algorithmname\nobreakspace\thealgorithm}% used in caption
\newcommand*\algorithmname{Algorithmus}% the name
\newcommand*\listalgorithmname{Algorithmenverzeichnis}% the name of the list
\newenvironment{algorithm}{\@float{algorithm}}{\end@float}% the environment
\newenvironment{algorithm*}{\@dblfloat{algorithm}}{\end@dblfloat}% the starred % version for twocolumn documents
\newcommand*\listofalgorithms{% the list of schemes
\section*{\listalgorithmname}
\@mkboth
{\MakeUppercase\listalgorithmname}
{\MakeUppercase\listalgorithmname}
\@starttoc{\ext@algorithm} }
\let\l@algorithm\l@figure % layout of list is the same as for figures
\makeatother
\newlength{\theoremskip}
\setlength{\theoremskip}{6em}
\newcommand{\theoremfont}{\normalfont\bfseries}
\newcommand{\definitionfont}{\normalfont\bfseries}
\newenvironment{theoremic}[2][\theoremfont]{
{#1 #2}
\hfill
\begin{minipage}[t]{\the\dimexpr\linewidth-\theoremskip\relax}
}{
\end{minipage}
}
\newenvironment{theorem}{
\begin{theoremic}{Satz.}
}{
\end{theoremic}
}
\newenvironment{lemma}{
\begin{theoremic}{Lemma.}
}{
\end{theoremic}
}
\newenvironment{proof}{
\begin{theoremic}{Beweis.}
}{
\end{theoremic}
}
\newenvironment{definition}{
\begin{theoremic}[\definitionfont]{Definition.}
}{
\end{theoremic}
}
\newenvironment{example}{
\begin{theoremic}[\definitionfont]{Beispiel.}
}{
\end{theoremic}
}