|
|
@@ -0,0 +1,249 @@ |
|
|
|
|
|
\ProvidesClass{lecture} |
|
|
|
|
|
\LoadClass[a4paper, titlepage]{article} |
|
|
|
|
|
|
|
|
|
|
|
\RequirePackage[utf8]{inputenc} |
|
|
|
|
|
\RequirePackage[T1]{fontenc} |
|
|
|
|
|
\RequirePackage{textcomp} |
|
|
|
|
|
\RequirePackage[german]{babel} |
|
|
|
|
|
\RequirePackage{amsmath, amssymb, amsthm} |
|
|
|
|
|
\RequirePackage{mdframed} |
|
|
|
|
|
\RequirePackage{fancyhdr} |
|
|
|
|
|
\RequirePackage{geometry} |
|
|
|
|
|
\RequirePackage{import} |
|
|
|
|
|
\RequirePackage{pdfpages} |
|
|
|
|
|
\RequirePackage{transparent} |
|
|
|
|
|
\RequirePackage{xcolor} |
|
|
|
|
|
\RequirePackage{array} |
|
|
|
|
|
\RequirePackage[shortlabels]{enumitem} |
|
|
|
|
|
\RequirePackage{tikz} |
|
|
|
|
|
\RequirePackage{pgfplots} |
|
|
|
|
|
\RequirePackage[nobottomtitles]{titlesec} |
|
|
|
|
|
\RequirePackage{listings} |
|
|
|
|
|
\RequirePackage{mathtools} |
|
|
|
|
|
\RequirePackage{forloop} |
|
|
|
|
|
\RequirePackage{totcount} |
|
|
|
|
|
\RequirePackage{calc} |
|
|
|
|
|
\RequirePackage{wasysym} |
|
|
|
|
|
\RequirePackage{environ} |
|
|
|
|
|
|
|
|
|
|
|
\usetikzlibrary{quotes, angles} |
|
|
|
|
|
\pgfplotsset{ |
|
|
|
|
|
compat=1.15, |
|
|
|
|
|
default 2d plot/.style={% |
|
|
|
|
|
grid=both, |
|
|
|
|
|
minor tick num=4, |
|
|
|
|
|
grid style={line width=.1pt, draw=gray!10}, |
|
|
|
|
|
major grid style={line width=.2pt,draw=gray!50}, |
|
|
|
|
|
axis lines=middle, |
|
|
|
|
|
enlargelimits={abs=0.2} |
|
|
|
|
|
}, |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} |
|
|
|
|
|
\DeclareOption{uebung}{ |
|
|
|
|
|
\makeatletter |
|
|
|
|
|
\lhead{\@title} |
|
|
|
|
|
\rhead{\@author} |
|
|
|
|
|
\makeatother |
|
|
|
|
|
} |
|
|
|
|
|
\ProcessOptions\relax |
|
|
|
|
|
|
|
|
|
|
|
% PAGE GEOMETRY |
|
|
|
|
|
\geometry{ |
|
|
|
|
|
left=15mm, |
|
|
|
|
|
right=40mm, |
|
|
|
|
|
top=20mm, |
|
|
|
|
|
bottom=20mm |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
% PARAGRAPH no indent but skip |
|
|
|
|
|
\setlength{\parskip}{3mm} |
|
|
|
|
|
\setlength{\parindent}{0mm} |
|
|
|
|
|
|
|
|
|
|
|
\theoremstyle{definition} |
|
|
|
|
|
\newmdtheoremenv{satz}{Satz}[section] |
|
|
|
|
|
\newmdtheoremenv{lemma}[satz]{Lemma} |
|
|
|
|
|
\newmdtheoremenv{korrolar}[satz]{Korrolar} |
|
|
|
|
|
\newmdtheoremenv{definition}[satz]{Definition} |
|
|
|
|
|
|
|
|
|
|
|
\newtheorem{bsp}[satz]{Beispiel} |
|
|
|
|
|
\newtheorem{bem}[satz]{Bemerkung} |
|
|
|
|
|
\newtheorem{aufgabe}{Aufgabe} |
|
|
|
|
|
|
|
|
|
|
|
% enable aufgaben counting |
|
|
|
|
|
\regtotcounter{aufgabe} |
|
|
|
|
|
|
|
|
|
|
|
% temporary calculation counter |
|
|
|
|
|
\newcounter{var} |
|
|
|
|
|
|
|
|
|
|
|
\newcommand{\N}{\mathbb{N}} |
|
|
|
|
|
\newcommand{\R}{\mathbb{R}} |
|
|
|
|
|
\newcommand{\Z}{\mathbb{Z}} |
|
|
|
|
|
\newcommand{\Q}{\mathbb{Q}} |
|
|
|
|
|
\newcommand{\C}{\mathbb{C}} |
|
|
|
|
|
|
|
|
|
|
|
% HEADERS |
|
|
|
|
|
|
|
|
|
|
|
\pagestyle{fancy} |
|
|
|
|
|
|
|
|
|
|
|
\newcommand{\incfig}[1]{% |
|
|
|
|
|
\def\svgwidth{\columnwidth} |
|
|
|
|
|
\import{./figures/}{#1.pdf_tex} |
|
|
|
|
|
} |
|
|
|
|
|
\pdfsuppresswarningpagegroup=1 |
|
|
|
|
|
|
|
|
|
|
|
% horizontal rule |
|
|
|
|
|
\newcommand\hr{ |
|
|
|
|
|
\noindent\rule[0.5ex]{\linewidth}{0.5pt} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
% punkte tabelle |
|
|
|
|
|
\newcommand{\punkte}[1][1]{ |
|
|
|
|
|
\newcounter{k} |
|
|
|
|
|
\setcounter{k}{#1} |
|
|
|
|
|
\@punkten{\value{k}}{\totvalue{aufgabe}} |
|
|
|
|
|
\setcounter{k}{#1-1} |
|
|
|
|
|
\setcounter{aufgabe}{\value{k}} |
|
|
|
|
|
\vspace{5mm} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
\def\@punkten#1#2{ |
|
|
|
|
|
\newcounter{n} |
|
|
|
|
|
% create a temporary calculation counter |
|
|
|
|
|
\setcounter{var}{#2-#1+1} |
|
|
|
|
|
\begin{tabular}{|c|*{\value{var}}{m{1cm}|}m{1cm}|@{}m{0cm}@{}} |
|
|
|
|
|
\hline |
|
|
|
|
|
Aufgabe |
|
|
|
|
|
\forloop{n}{#1}{\not{\value{n} > #2}}{ |
|
|
|
|
|
& \centering A\then |
|
|
|
|
|
} |
|
|
|
|
|
& \centering $\sum$ & \\[5mm] \hline |
|
|
|
|
|
Punkte |
|
|
|
|
|
\forloop{n}{#1}{\not{\value{n} > #2}}{ |
|
|
|
|
|
& |
|
|
|
|
|
} |
|
|
|
|
|
& & \\[5mm] \hline |
|
|
|
|
|
\end{tabular} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
% code listings, define style |
|
|
|
|
|
\lstdefinestyle{mystyle}{ |
|
|
|
|
|
commentstyle=\color{gray}, |
|
|
|
|
|
keywordstyle=\color{blue}, |
|
|
|
|
|
numberstyle=\tiny\color{gray}, |
|
|
|
|
|
stringstyle=\color{black}, |
|
|
|
|
|
basicstyle=\ttfamily\footnotesize, |
|
|
|
|
|
breakatwhitespace=false, |
|
|
|
|
|
breaklines=true, |
|
|
|
|
|
captionpos=b, |
|
|
|
|
|
keepspaces=true, |
|
|
|
|
|
numbers=left, |
|
|
|
|
|
numbersep=5pt, |
|
|
|
|
|
showspaces=false, |
|
|
|
|
|
showstringspaces=false, |
|
|
|
|
|
showtabs=false, |
|
|
|
|
|
tabsize=2 |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
% activate my colour style |
|
|
|
|
|
\lstset{style=mystyle} |
|
|
|
|
|
|
|
|
|
|
|
% better stackrel |
|
|
|
|
|
\let\oldstackrel\stackrel |
|
|
|
|
|
\renewcommand{\stackrel}[2]{% |
|
|
|
|
|
\oldstackrel{\mathclap{#1}}{#2} |
|
|
|
|
|
}% |
|
|
|
|
|
|
|
|
|
|
|
% integral d sign |
|
|
|
|
|
\makeatletter \renewcommand\d[2][]{\ensuremath{% |
|
|
|
|
|
\,\mathrm{d}^{#1}#2\@ifnextchar^{}{\@ifnextchar\d{}{\,}}}} |
|
|
|
|
|
\makeatother |
|
|
|
|
|
|
|
|
|
|
|
% contradiction |
|
|
|
|
|
\newcommand{\contr}{\text{\Large\lightning}} |
|
|
|
|
|
|
|
|
|
|
|
% disjoint unions: provides cupdot and bigcupdot |
|
|
|
|
|
\makeatletter |
|
|
|
|
|
\def\moverlay{\mathpalette\mov@rlay} |
|
|
|
|
|
\def\mov@rlay#1#2{\leavevmode\vtop{% |
|
|
|
|
|
\baselineskip\z@skip \lineskiplimit-\maxdimen |
|
|
|
|
|
\ialign{\hfil$\m@th#1##$\hfil\cr#2\crcr}}} |
|
|
|
|
|
\newcommand{\charfusion}[3][\mathord]{ |
|
|
|
|
|
#1{\ifx#1\mathop\vphantom{#2}\fi |
|
|
|
|
|
\mathpalette\mov@rlay{#2\cr#3} |
|
|
|
|
|
} |
|
|
|
|
|
\ifx#1\mathop\expandafter\displaylimits\fi} |
|
|
|
|
|
\makeatother |
|
|
|
|
|
|
|
|
|
|
|
\newcommand{\cupdot}{\charfusion[\mathbin]{\cup}{\cdot}} |
|
|
|
|
|
\newcommand{\bigcupdot}{\charfusion[\mathop]{\bigcup}{\cdot}} |
|
|
|
|
|
|
|
|
|
|
|
\ExplSyntaxOn |
|
|
|
|
|
|
|
|
|
|
|
% S-tackrelcompatible ALIGN environment |
|
|
|
|
|
% some might also call it the S-uper ALIGN environment |
|
|
|
|
|
% uses regular expressions to calculate the widest stackrel |
|
|
|
|
|
% to put additional padding on both sides of relation symbols |
|
|
|
|
|
\NewEnviron{salign} |
|
|
|
|
|
{ |
|
|
|
|
|
\begin{align} |
|
|
|
|
|
\lec_insert_padding:V \BODY |
|
|
|
|
|
\end{align} |
|
|
|
|
|
} |
|
|
|
|
|
% starred version that does no equation numbering |
|
|
|
|
|
\NewEnviron{salign*} |
|
|
|
|
|
{ |
|
|
|
|
|
\begin{align*} |
|
|
|
|
|
\lec_insert_padding:V \BODY |
|
|
|
|
|
\end{align*} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
% some helper variables |
|
|
|
|
|
\tl_new:N \l__lec_text_tl |
|
|
|
|
|
\seq_new:N \l_lec_stackrels_seq |
|
|
|
|
|
\int_new:N \l_stackrel_count_int |
|
|
|
|
|
\int_new:N \l_idx_int |
|
|
|
|
|
\box_new:N \l_tmp_box |
|
|
|
|
|
\dim_new:N \l_tmp_dim_a |
|
|
|
|
|
\dim_new:N \l_tmp_dim_b |
|
|
|
|
|
\dim_new:N \l_tmp_dim_needed |
|
|
|
|
|
|
|
|
|
|
|
% function to insert padding according to widest stackrel |
|
|
|
|
|
\cs_new_protected:Nn \lec_insert_padding:n |
|
|
|
|
|
{ |
|
|
|
|
|
\tl_set:Nn \l__lec_text_tl { #1 } |
|
|
|
|
|
% get all stackrels in this align environment |
|
|
|
|
|
\regex_extract_all:nnN { \c{stackrel}{(.*?)}{(.*?)} } { #1 } \l_lec_stackrels_seq |
|
|
|
|
|
% get number of stackrels |
|
|
|
|
|
\int_set:Nn \l_stackrel_count_int { \seq_count:N \l_lec_stackrels_seq } |
|
|
|
|
|
\int_set:Nn \l_idx_int { 1 } |
|
|
|
|
|
\dim_set:Nn \l_tmp_dim_needed { 0pt } |
|
|
|
|
|
% iterate over stackrels |
|
|
|
|
|
\int_while_do:nn { \l_idx_int <= \l_stackrel_count_int } |
|
|
|
|
|
{ |
|
|
|
|
|
% calculate width of text |
|
|
|
|
|
\hbox_set:Nn \l_tmp_box {$\seq_item:Nn \l_lec_stackrels_seq { \l_idx_int + 1 }$} |
|
|
|
|
|
\dim_set:Nn \l_tmp_dim_a {\box_wd:N \l_tmp_box} |
|
|
|
|
|
% calculate width of relation symbol |
|
|
|
|
|
\hbox_set:Nn \l_tmp_box {$\seq_item:Nn \l_lec_stackrels_seq { \l_idx_int + 2 }$} |
|
|
|
|
|
\dim_set:Nn \l_tmp_dim_b {\box_wd:N \l_tmp_box} |
|
|
|
|
|
% check if 0.5*(a-b) > minimum padding, if yes updated minimum padding |
|
|
|
|
|
\dim_compare:nNnTF |
|
|
|
|
|
{ 1pt * \dim_ratio:nn { \l_tmp_dim_a - \l_tmp_dim_b } { 2pt } } > { \l_tmp_dim_needed } |
|
|
|
|
|
{ \dim_set:Nn \l_tmp_dim_needed { 1pt * \dim_ratio:nn { \l_tmp_dim_a - \l_tmp_dim_b } { 2pt } } } |
|
|
|
|
|
{ } |
|
|
|
|
|
\quad |
|
|
|
|
|
% increment list index by three, as every stackrel produces three list entries |
|
|
|
|
|
\int_incr:N \l_idx_int |
|
|
|
|
|
\int_incr:N \l_idx_int |
|
|
|
|
|
\int_incr:N \l_idx_int |
|
|
|
|
|
} |
|
|
|
|
|
% replace all relations with align characters (&) and add the needed padding |
|
|
|
|
|
\regex_replace_all:nnN |
|
|
|
|
|
{ (\c{iff}&|&\c{iff}|\c{impliedby}&|&\c{impliedby}|\c{implies}&|&\c{implies}|\c{approx}&|&\c{approx}|\c{equiv}&|&\c{equiv}|=&|&=|\c{le}&|&\c{le}|\c{ge}&|&\c{ge}|&\c{stackrel}{.*?}{.*?}|\c{stackrel}{.*?}{.*?}&|&\c{neq}|\c{neq}&) } |
|
|
|
|
|
{ \c{kern} \u{l_tmp_dim_needed} \1 \c{kern} \u{l_tmp_dim_needed} } |
|
|
|
|
|
\l__lec_text_tl |
|
|
|
|
|
\l__lec_text_tl |
|
|
|
|
|
} |
|
|
|
|
|
\cs_generate_variant:Nn \lec_insert_padding:n { V } |
|
|
|
|
|
\ExplSyntaxOff |