moar pages ....

This commit is contained in:
Nicole Dresselhaus 2017-10-02 21:56:06 +02:00
parent 8ca31b65e4
commit 67d3b786e4
Signed by: Drezil
GPG Key ID: 057D94F356F41E25
8 changed files with 304 additions and 74 deletions

View File

@ -75,3 +75,15 @@
organization={Springer}, organization={Springer},
url={https://www.lri.fr/~hansen/proceedings/2014/PPSN/papers/8672/86720465.pdf} url={https://www.lri.fr/~hansen/proceedings/2014/PPSN/papers/8672/86720465.pdf}
} }
@article{gaussNewton,
author = {Donald W. Marquardt},
title = {An Algorithm for Least-Squares Estimation of Nonlinear Parameters},
journal = {Journal of the Society for Industrial and Applied Mathematics},
volume = {11},
number = {2},
pages = {431-441},
year = {1963},
doi = {10.1137/0111030},
URL = {https://doi.org/10.1137/0111030},
eprint = {https://doi.org/10.1137/0111030}
}

View File

@ -22,15 +22,15 @@
\setcounter{ContinuedFloat}{0} \setcounter{ContinuedFloat}{0}
\setcounter{float@type}{16} \setcounter{float@type}{16}
\setcounter{lstnumber}{1} \setcounter{lstnumber}{1}
\setcounter{NAT@ctr}{8} \setcounter{NAT@ctr}{9}
\setcounter{AM@survey}{0} \setcounter{AM@survey}{0}
\setcounter{r@tfl@t}{0} \setcounter{r@tfl@t}{0}
\setcounter{subfigure}{0} \setcounter{subfigure}{0}
\setcounter{subtable}{0} \setcounter{subtable}{0}
\setcounter{@todonotes@numberoftodonotes}{2} \setcounter{@todonotes@numberoftodonotes}{4}
\setcounter{Item}{0} \setcounter{Item}{0}
\setcounter{Hfootnote}{2} \setcounter{Hfootnote}{2}
\setcounter{bookmark@seq@number}{19} \setcounter{bookmark@seq@number}{21}
\setcounter{algorithm}{0} \setcounter{algorithm}{0}
\setcounter{ALC@unique}{0} \setcounter{ALC@unique}{0}
\setcounter{ALC@line}{0} \setcounter{ALC@line}{0}

View File

@ -1,5 +1,5 @@
--- ---
fontsize: 11pt fontsize: 12pt
--- ---
\chapter*{How to read this Thesis} \chapter*{How to read this Thesis}
@ -36,6 +36,7 @@ We will replicate the same setup on the same meshes but use \acf{FFD} instead of
work as a predictor given the different deformation scheme. work as a predictor given the different deformation scheme.
## What is \acf{FFD}? ## What is \acf{FFD}?
\label{sec:intro:ffd}
First of all we have to establish how a \ac{FFD} works and why this is a good First of all we have to establish how a \ac{FFD} works and why this is a good
tool for deforming meshes in the first place. For simplicity we only summarize tool for deforming meshes in the first place. For simplicity we only summarize
@ -114,11 +115,11 @@ mesh albeit the downsides.
## What is evolutional optimization? ## What is evolutional optimization?
\change[inline]{Write this section}
## Advantages of evolutional algorithms ## Advantages of evolutional algorithms
\improvement[inline]{Needs citations} \change[inline]{Needs citations}
The main advantage of evolutional algorithms is the ability to find optima of The main advantage of evolutional algorithms is the ability to find optima of
general functions just with the help of a given error-function (or general functions just with the help of a given error-function (or
fitness-function in this domain). This avoids the general pitfalls of fitness-function in this domain). This avoids the general pitfalls of
@ -197,12 +198,116 @@ $\|\vec{G}\|_F = 1$, whereby $\|\cdot\|_F$ denotes the Frobenius-Norm.
# Implementation of \acf{FFD} # Implementation of \acf{FFD}
## Was ist FFD? As general B-Splines have a free parameters $d$ and $\tau$.
As we usually work with regular grids in our \ac{FFD} we define $\tau$
statically as
$$\tau_i = \nicefrac{i}{n}$$
whereby $n$ is the number of control-points in that direction.
$d$ defines the *degree* of the B-Spline-Function (the number of times this
function is differentiable) and for our purposes we fix $d$ to $3$, but give the
formulas for the general case so it can be adapted quite freely.
## Adaption of \ac{FFD}
As we have established in Chapter \ref{sec:intro:ffd} we can define an
\ac{FFD}-displacement as
\begin{equation}
\Delta_x(u) = \sum_i N_{i,d,\tau_i}(u) \Delta_x c_i
\end{equation}
Note that we only sum up the $\Delta$-displacements in the control points $c_i$ to get
the change in position of the point we are interested in.
In this way every deformed vertex is defined by
$$
\textrm{Deform}(v_x) = v_x + \Delta_x(u)
$$
with $u \in [0..1[$ being the variable that connects the high-detailed
vertex-mesh to the low-detailed control-grid. To actually calculate the new
position of the vertex we first have to calculate the $u$-value for each
vertex. This is achieved by finding out the parametrization of $v$ in terms of
$c_i$
$$
v_x = \sum_i N_{i,d,\tau_i}(u) c_i
$$
As the B-Spline-functions are smooth and convex we just derive by $u$ yielding
\begin{eqnarray*}
& \frac{\partial}{\partial u} & v_x - \sum_i N_{i,d,\tau_i}(u) c_i \\
& = & v_x - \sum_i \left( \frac{d}{\tau_{i+d} - \tau_i} N_{i,d-1,\tau}(u) - \frac{d}{\tau_{i+d+1} - \tau_{i+1}} N_{i+1,d-1,\tau}(u) \right) c_i
\end{eqnarray*}
and do a gradient-descend to approximate the value of $u$ up to an $\epsilon$ of $0.0001$.
For this we use the Gauss-Newton algorithm\cite{gaussNewton} as the solution to
this problem may not be deterministic, because we usually have way more vertices
than control points ($\#v \gg \#c$).
## Adaption of \ac{FFD} for a 3D-Mesh
\label{3dffd} \label{3dffd}
- Definition This is a straightforward extension of the 1D-method presented in the last
- Wieso Newton-Optimierung? chapter. But this time things get a bit more complicated. As we have a
- Was folgt daraus? 3-dimensional grid we may have a different amount of control-points in each
direction.
Given $n,m,o$ control points in $x,y,z$-direction each Point on the curve is
defined by
$$V(u,v,w) = \sum_{i=0}^{n-d-2} \sum_{j=0}^{m-d-2} \sum_{k=0}^{o-d-2} N_{i,d,\tau_i}(u) N_{j,d,\tau_j}(v) N_{k,d,\tau_k}(w) \cdot C_{ijk}.$$
In this case we have three different B-Splines (one for each dimension) and also
3 variables $u,v,w$ for each vertex we want to approximate.
Given a target vertex $\vec{p}^*$ and an initial guess $\vec{p}=V(u,v,w)$
we define the error-function for the gradient-descent as:
$$Err(u,v,w,\vec{p}^{*}) = \vec{p}^{*} - V(u,v,w)$$
And the partial version for just one direction as
$$Err_x(u,v,w,\vec{p}^{*}) = p^{*}_x - \sum_{i=0}^{n-d-2} \sum_{j=0}^{m-d-2} \sum_{k=0}^{o-d-2} {C_{ijk}}_x N_{i,d,\tau_i}(u) N_{j,d,\tau_j}(v) N_{k,d,\tau_k}(w) $$
To solve this we derive partially, like before:
$$
\begin{array}{rl}
\displaystyle \frac{\partial Err_x}{\partial u} & p^{*}_x - \displaystyle \sum_{i=0}^{n-d-2} \sum_{j=0}^{m-d-2} \sum_{k=0}^{o-d-2} {C_{ijk}}_x N_{i,d,\tau_i}(u) N_{j,d,\tau_j}(v) N_{k,d,\tau_k}(w) \\
= & \displaystyle - \sum_{i=0}^{n-d-2} \sum_{j=0}^{m-d-2} \sum_{k=0}^{o-d-2} {C_{ijk}}_x N'_i(u) N_{j,d,\tau_j}(v) N_{k,d,\tau_k}(w)
\end{array}
$$
The other partial derivatives follow the same pattern yielding the Jacobian:
$$
J(Err(u,v,w)) =
\left(
\begin{array}{ccc}
\frac{\partial Err_x}{\partial u} & \frac{\partial Err_x}{\partial v} & \frac{\partial Err_x}{\partial w} \\
\frac{\partial Err_y}{\partial u} & \frac{\partial Err_y}{\partial v} & \frac{\partial Err_y}{\partial w} \\
\frac{\partial Err_z}{\partial u} & \frac{\partial Err_z}{\partial v} & \frac{\partial Err_z}{\partial w}
\end{array}
\right)
$$
\unsure[inline]{Should I add an informal complete derivative?\newline
Like leaving out Sums & $i,j,k$-Indices to make obvious what derivative belongs
where in what case?}
With the Gauss-Newton algorithm we iterate the formula
$$J(Err(u,v,w)) \cdot \Delta \left( \begin{array}{c} u \\ v \\ w \end{array} \right) = -Err(u,v,w)$$
and use Cramers rule for inverting the small Jacobian and solving this system of
linear equations.
## Parametrisierung sinnvoll?
- Nachteile von Parametrisierung
- Deformation ist um einen Kontrollpunkt viel direkter zu steuern.
- => DM-FFD?
## Test Scenario: 1D Function Approximation ## Test Scenario: 1D Function Approximation

Binary file not shown.

View File

@ -2,7 +2,7 @@
% abstracton : Abstract mit Ueberschrift % abstracton : Abstract mit Ueberschrift
\documentclass[ \documentclass[
a4paper, % default a4paper, % default
11pt, % default = 11pt 12pt, % default = 11pt
BCOR6mm, % Bindungskorrektur bei Klebebindung 6mm, bei Lochen BCOR8.25mm BCOR6mm, % Bindungskorrektur bei Klebebindung 6mm, bei Lochen BCOR8.25mm
twoside, % default, 2seitig twoside, % default, 2seitig
titlepage, titlepage,
@ -30,6 +30,7 @@ xcolor=dvipsnames,
%\setlength{\parindent}{0pt} % kein einzug bei absaetzen %\setlength{\parindent}{0pt} % kein einzug bei absaetzen
%\setlength{\lineskip}{1ex plus0.5ex minus0.5ex} % dafr abstand zwischen abs<62>zen (funktioniert noch nicht) %\setlength{\lineskip}{1ex plus0.5ex minus0.5ex} % dafr abstand zwischen abs<62>zen (funktioniert noch nicht)
% \renewcommand{\familydefault}{\sfdefault} % \renewcommand{\familydefault}{\sfdefault}
\setstretch{1.44} % 1.5-facher zeilenabstand
%%%%%%%%%%%%%%% Header - Footer %%%%%%%%%%%%%%% %%%%%%%%%%%%%%% Header - Footer %%%%%%%%%%%%%%%
% ### Fr 2 Seitig (option twopage): % ### Fr 2 Seitig (option twopage):
@ -162,6 +163,8 @@ deformation scheme.
\section{\texorpdfstring{What is \acf{FFD}?}{What is ?}}\label{what-is} \section{\texorpdfstring{What is \acf{FFD}?}{What is ?}}\label{what-is}
\label{sec:intro:ffd}
First of all we have to establish how a \ac{FFD} works and why this is a First of all we have to establish how a \ac{FFD} works and why this is a
good tool for deforming meshes in the first place. For simplicity we good tool for deforming meshes in the first place. For simplicity we
only summarize the 1D-case from \cite{spitzmuller1996bezier} here and go only summarize the 1D-case from \cite{spitzmuller1996bezier} here and go
@ -243,10 +246,12 @@ high-polygon mesh albeit the downsides.
\section{What is evolutional \section{What is evolutional
optimization?}\label{what-is-evolutional-optimization} optimization?}\label{what-is-evolutional-optimization}
\change[inline]{Write this section}
\section{Advantages of evolutional \section{Advantages of evolutional
algorithms}\label{advantages-of-evolutional-algorithms} algorithms}\label{advantages-of-evolutional-algorithms}
\improvement[inline]{Needs citations} The main advantage of evolutional \change[inline]{Needs citations} The main advantage of evolutional
algorithms is the ability to find optima of general functions just with algorithms is the ability to find optima of general functions just with
the help of a given error-function (or fitness-function in this domain). the help of a given error-function (or fitness-function in this domain).
This avoids the general pitfalls of gradient-based procedures, which This avoids the general pitfalls of gradient-based procedures, which
@ -330,18 +335,125 @@ Frobenius-Norm.
\chapter{\texorpdfstring{Implementation of \chapter{\texorpdfstring{Implementation of
\acf{FFD}}{Implementation of }}\label{implementation-of} \acf{FFD}}{Implementation of }}\label{implementation-of}
\section{Was ist FFD?}\label{was-ist-ffd} As general B-Splines have a free parameters \(d\) and \(\tau\).
As we usually work with regular grids in our \ac{FFD} we define \(\tau\)
statically as \[\tau_i = \nicefrac{i}{n}\] whereby \(n\) is the number
of control-points in that direction.
\(d\) defines the \emph{degree} of the B-Spline-Function (the number of
times this function is differentiable) and for our purposes we fix \(d\)
to \(3\), but give the formulas for the general case so it can be
adapted quite freely.
\section{\texorpdfstring{Adaption of
\ac{FFD}}{Adaption of }}\label{adaption-of}
As we have established in Chapter \ref{sec:intro:ffd} we can define an
\ac{FFD}-displacement as
\begin{equation}
\Delta_x(u) = \sum_i N_{i,d,\tau_i}(u) \Delta_x c_i
\end{equation}
Note that we only sum up the \(\Delta\)-displacements in the control
points \(c_i\) to get the change in position of the point we are
interested in.
In this way every deformed vertex is defined by \[
\textrm{Deform}(v_x) = v_x + \Delta_x(u)
\] with \(u \in [0..1[\) being the variable that connects the
high-detailed vertex-mesh to the low-detailed control-grid. To actually
calculate the new position of the vertex we first have to calculate the
\(u\)-value for each vertex. This is achieved by finding out the
parametrization of \(v\) in terms of \(c_i\) \[
v_x = \sum_i N_{i,d,\tau_i}(u) c_i
\]
As the B-Spline-functions are smooth and convex we just derive by \(u\)
yielding
\begin{eqnarray*}
& \frac{\partial}{\partial u} & v_x - \sum_i N_{i,d,\tau_i}(u) c_i \\
& = & v_x - \sum_i \left( \frac{d}{\tau_{i+d} - \tau_i} N_{i,d-1,\tau}(u) - \frac{d}{\tau_{i+d+1} - \tau_{i+1}} N_{i+1,d-1,\tau}(u) \right) c_i
\end{eqnarray*}
and do a gradient-descend to approximate the value of \(u\) up to an
\(\epsilon\) of \(0.0001\).
For this we use the Gauss-Newton algorithm\cite{gaussNewton} as the
solution to this problem may not be deterministic, because we usually
have way more vertices than control points (\(\#v \gg \#c\)).
\section{\texorpdfstring{Adaption of \ac{FFD} for a
3D-Mesh}{Adaption of for a 3D-Mesh}}\label{adaption-of-for-a-3d-mesh}
\label{3dffd} \label{3dffd}
This is a straightforward extension of the 1D-method presented in the
last chapter. But this time things get a bit more complicated. As we
have a 3-dimensional grid we may have a different amount of
control-points in each direction.
Given \(n,m,o\) control points in \(x,y,z\)-direction each Point on the
curve is defined by
\[V(u,v,w) = \sum_{i=0}^{n-d-2} \sum_{j=0}^{m-d-2} \sum_{k=0}^{o-d-2} N_{i,d,\tau_i}(u) N_{j,d,\tau_j}(v) N_{k,d,\tau_k}(w) \cdot C_{ijk}.\]
In this case we have three different B-Splines (one for each dimension)
and also 3 variables \(u,v,w\) for each vertex we want to approximate.
Given a target vertex \(\vec{p}^*\) and an initial guess
\(\vec{p}=V(u,v,w)\) we define the error-function for the
gradient-descent as:
\[Err(u,v,w,\vec{p}^{*}) = \vec{p}^{*} - V(u,v,w)\]
And the partial version for just one direction as
\[Err_x(u,v,w,\vec{p}^{*}) = p^{*}_x - \sum_{i=0}^{n-d-2} \sum_{j=0}^{m-d-2} \sum_{k=0}^{o-d-2} {C_{ijk}}_x N_{i,d,\tau_i}(u) N_{j,d,\tau_j}(v) N_{k,d,\tau_k}(w) \]
To solve this we derive partially, like before:
\[
\begin{array}{rl}
\displaystyle \frac{\partial Err_x}{\partial u} & p^{*}_x - \displaystyle \sum_{i=0}^{n-d-2} \sum_{j=0}^{m-d-2} \sum_{k=0}^{o-d-2} {C_{ijk}}_x N_{i,d,\tau_i}(u) N_{j,d,\tau_j}(v) N_{k,d,\tau_k}(w) \\
= & \displaystyle - \sum_{i=0}^{n-d-2} \sum_{j=0}^{m-d-2} \sum_{k=0}^{o-d-2} {C_{ijk}}_x N'_i(u) N_{j,d,\tau_j}(v) N_{k,d,\tau_k}(w)
\end{array}
\]
The other partial derivatives follow the same pattern yielding the
Jacobian:
\[
J(Err(u,v,w)) =
\left(
\begin{array}{ccc}
\frac{\partial Err_x}{\partial u} & \frac{\partial Err_x}{\partial v} & \frac{\partial Err_x}{\partial w} \\
\frac{\partial Err_y}{\partial u} & \frac{\partial Err_y}{\partial v} & \frac{\partial Err_y}{\partial w} \\
\frac{\partial Err_z}{\partial u} & \frac{\partial Err_z}{\partial v} & \frac{\partial Err_z}{\partial w}
\end{array}
\right)
\]
\unsure[inline]{Should I add an informal complete derivative?\newline
Like leaving out Sums & $i,j,k$-Indices to make obvious what derivative belongs
where in what case?}
With the Gauss-Newton algorithm we iterate the formula
\[J(Err(u,v,w)) \cdot \Delta \left( \begin{array}{c} u \\ v \\ w \end{array} \right) = -Err(u,v,w)\]
and use Cramers rule for inverting the small Jacobian and solving this
system of linear equations.
\section{Parametrisierung sinnvoll?}\label{parametrisierung-sinnvoll}
\begin{itemize} \begin{itemize}
\tightlist \tightlist
\item \item
Definition Nachteile von Parametrisierung
\item \item
Wieso Newton-Optimierung? Deformation ist um einen Kontrollpunkt viel direkter zu steuern.
\item \item
Was folgt daraus? =\textgreater{} DM-FFD?
\end{itemize} \end{itemize}
\section{Test Scenario: 1D Function \section{Test Scenario: 1D Function

View File

@ -1,59 +1,59 @@
\newcommand\exampleend{\hfill$\diamond$} \newcommand\exampleend{\hfill$\diamond$}
% ##### DCJ stuff ##### % ##### DCJ stuff #####
\newcommand\dcaj{double cut and join\xspace} % \newcommand\dcaj{double cut and join\xspace}
\newcommand\dcjindel{d_{\DCJ}^{id}} % \newcommand\dcjindel{d_{\DCJ}^{id}}
\newcommand\dcj{d_{\DCJ}} % \newcommand\dcj{d_{\DCJ}}
\renewcommand\gg{\mathcal G} % \renewcommand\gg{\mathcal G}
\newcommand\del{\mathcal A} % \newcommand\del{\mathcal A}
\newcommand\ins{\mathcal B} % \newcommand\ins{\mathcal B}
\newcommand\clean{\varnothing} % \newcommand\clean{\varnothing}
\newcommand\gdel{\mathcal G_{\!A}} % \newcommand\gdel{\mathcal G_{\!A}}
\newcommand\gins{\mathcal G_{\!B}} % \newcommand\gins{\mathcal G_{\!B}}
\newcommand\ag{\AG(A,B)} % \newcommand\ag{\AG(A,B)}
\renewcommand\r{\lambda} % # runs % \renewcommand\r{\lambda} % # runs
\newcommand\R{\Lambda} % # runs after clustering % \newcommand\R{\Lambda} % # runs after clustering
\newcommand\dr{\Delta\r} % \newcommand\dr{\Delta\r}
\newcommand\drr{\Delta\r^{\!\rho}} % \newcommand\drr{\Delta\r^{\!\rho}}
\newcommand\DR{\Delta\R} % \newcommand\DR{\Delta\R}
\newcommand\DRR{\Delta\R^{\!\rho}} % \newcommand\DRR{\Delta\R^{\!\rho}}
%\newcommand\lab[1]{\lambda(#1)} % %\newcommand\lab[1]{\lambda(#1)}
\newcommand\redu[1]{\left.#1\right|_\mathcal G} % \newcommand\redu[1]{\left.#1\right|_\mathcal G}
\newcommand\h[1]{#1^h} % \newcommand\h[1]{#1^h}
\renewcommand\t[1]{#1^t} % \renewcommand\t[1]{#1^t}
\renewcommand\a{$A$\xspace} % \renewcommand\a{$A$\xspace}
\renewcommand\b{$B$\xspace} % \renewcommand\b{$B$\xspace}
\renewcommand\O{\mathcal O} % \renewcommand\O{\mathcal O}
\renewcommand\AA{$A\!A$\xspace} % \renewcommand\AA{$A\!A$\xspace}
\newcommand\AB{$A\!B$\xspace} % \newcommand\AB{$A\!B$\xspace}
\newcommand\BA{$B\!A$\xspace} % \newcommand\BA{$B\!A$\xspace}
\newcommand\BB{$B\!B$\xspace} % \newcommand\BB{$B\!B$\xspace}
\newcommand\ab{\del\ins} % \newcommand\ab{\del\ins}
\newcommand\ba{\ins\del} % \newcommand\ba{\ins\del}
\def\aa{A\!A} % \def\aa{A\!A}
\def\bb{B\!B} % \def\bb{B\!B}
\def\AAab{A\!A_{\!\del\!\ins}} % \def\AAab{A\!A_{\!\del\!\ins}}
\def\AAa{A\!A_{\!\del}} % \def\AAa{A\!A_{\!\del}}
\def\AAb{A\!A_{\ins}} % \def\AAb{A\!A_{\ins}}
\def\BBab{B\!B_{\!\!\del\!\ins}} % \def\BBab{B\!B_{\!\!\del\!\ins}}
\def\BBa{B\!B_{\!\!\del}} % \def\BBa{B\!B_{\!\!\del}}
\def\BBb{B\!B_{\ins}} % \def\BBb{B\!B_{\ins}}
\def\ABab{A\!B_{\!\!\del\!\ins}} % \def\ABab{A\!B_{\!\!\del\!\ins}}
\def\ABba{A\!B_{\ins\!\del}} % \def\ABba{A\!B_{\ins\!\del}}
\def\ABa{A\!B_{\!\!\del}} % \def\ABa{A\!B_{\!\!\del}}
\def\ABb{A\!B_\ins} % \def\ABb{A\!B_\ins}
\def\ABm{A\!B_\bullet} % \def\ABm{A\!B_\bullet}
\def\AAo{A\!A_{\!\varnothing}} % \def\AAo{A\!A_{\!\varnothing}}
\def\ABo{A\!B_{\!\varnothing}} % \def\ABo{A\!B_{\!\varnothing}}
\def\BBo{B\!B_{\!\varnothing}} % \def\BBo{B\!B_{\!\varnothing}}
\def\xx{A\!B_\times} % \def\xx{A\!B_\times}
\def\aba{\del\!\gr{\ins\!\del}} % \def\aba{\del\!\gr{\ins\!\del}}
\def\bab{\ins\!\gr{\del\!\ins}} % \def\bab{\ins\!\gr{\del\!\ins}}
\newcommand\clusterize{accumulate\xspace} % \newcommand\clusterize{accumulate\xspace}
\newcommand\clustering{accumulating\xspace} %aggregate, unite/unifying % \newcommand\clustering{accumulating\xspace} %aggregate, unite/unifying
\newcommand\clusterized{accumulated\xspace} % \newcommand\clusterized{accumulated\xspace}
\newcommand\clusterization{accumulation\xspace} % \newcommand\clusterization{accumulation\xspace}
\renewcommand\v[1]{V(#1)} % \renewcommand\v[1]{V(#1)}
\newcommand\vset[2]{\v{#1}=\set{#2}} % \newcommand\vset[2]{\v{#1}=\set{#2}}
% ##### math ##### % ##### math #####
\DeclareMathOperator\AG{AG} \DeclareMathOperator\AG{AG}
@ -174,8 +174,8 @@
\includegraphics[width=1cm]{img/cd} \includegraphics[width=1cm]{img/cd}
\end{center}\vspace{-15pt}\centering\footnotesize\texttt{#1}}} \end{center}\vspace{-15pt}\centering\footnotesize\texttt{#1}}}
\renewcommand\vec[1]{\textbf{#1}} \renewcommand\vec[1]{\textbf{#1}}
\newcommandx{\unsure}[2][1=]{\todo[linecolor=red,backgroundcolor=red!25,bordercolor=red,#1]{#2}} \newcommandx{\unsure}[2][1=]{\todo[linecolor=red,backgroundcolor=red!25,bordercolor=red,#1]{\textbf{Unsure:} #2}}
\newcommandx{\change}[2][1=]{\todo[linecolor=blue,backgroundcolor=blue!25,bordercolor=blue,#1]{#2}} \newcommandx{\change}[2][1=]{\todo[linecolor=blue,backgroundcolor=blue!25,bordercolor=blue,#1]{\textbf{Change:} #2}}
\newcommandx{\info}[2][1=]{\todo[linecolor=OliveGreen,backgroundcolor=OliveGreen!25,bordercolor=OliveGreen,#1]{#2}} \newcommandx{\info}[2][1=]{\todo[linecolor=OliveGreen,backgroundcolor=OliveGreen!25,bordercolor=OliveGreen,#1]{\textbf{Info:} #2}}
\newcommandx{\improvement}[2][1=]{\todo[linecolor=violet,backgroundcolor=violet!25,bordercolor=violet,#1]{#2}} \newcommandx{\improvement}[2][1=]{\todo[linecolor=violet,backgroundcolor=violet!25,bordercolor=violet,#1]{#2}}
\newcommandx{\thiswillnotshow}[2][1=]{\todo[disable,#1]{#2}} \newcommandx{\thiswillnotshow}[2][1=]{\todo[disable,#1]{#2}}

View File

@ -15,7 +15,7 @@
\usepackage{color} %\colorbox \usepackage{color} %\colorbox
\usepackage{dsfont} %\mathds \usepackage{dsfont} %\mathds
\usepackage{draftwatermark} \usepackage{draftwatermark}
\SetWatermarkLightness{0.9} % default: 0.8 \SetWatermarkLightness{0.95} % default: 0.8
\usepackage{epigraph} \usepackage{epigraph}
% \usepackage{euler} % euler: uni, eucal: baake, ohne: standard % \usepackage{euler} % euler: uni, eucal: baake, ohne: standard
\usepackage{eucal} % euler calligraphy \usepackage{eucal} % euler calligraphy

View File

@ -30,6 +30,7 @@ xcolor=dvipsnames,
%\setlength{\parindent}{0pt} % kein einzug bei absaetzen %\setlength{\parindent}{0pt} % kein einzug bei absaetzen
%\setlength{\lineskip}{1ex plus0.5ex minus0.5ex} % dafr abstand zwischen abs<62>zen (funktioniert noch nicht) %\setlength{\lineskip}{1ex plus0.5ex minus0.5ex} % dafr abstand zwischen abs<62>zen (funktioniert noch nicht)
% \renewcommand{\familydefault}{\sfdefault} % \renewcommand{\familydefault}{\sfdefault}
\setstretch{1.44} % 1.5-facher zeilenabstand
%%%%%%%%%%%%%%% Header - Footer %%%%%%%%%%%%%%% %%%%%%%%%%%%%%% Header - Footer %%%%%%%%%%%%%%%
% ### Fr 2 Seitig (option twopage): % ### Fr 2 Seitig (option twopage):