\ProvidesClass{lecture} \LoadClass[a4paper]{book} \RequirePackage[utf8]{inputenc} \RequirePackage[T1]{fontenc} \RequirePackage{textcomp} \RequirePackage[german]{babel} \RequirePackage{amsmath, amssymb, amsthm} \RequirePackage{mdframed} \RequirePackage{geometry} \RequirePackage{import} \RequirePackage{pdfpages} \RequirePackage{transparent} \RequirePackage{xcolor} \RequirePackage{array} \RequirePackage[shortlabels]{enumitem} \RequirePackage{tikz} \RequirePackage{pgfplots} \RequirePackage[pagestyles, nobottomtitles]{titlesec} \RequirePackage{listings} \RequirePackage{mathtools} \RequirePackage{forloop} \RequirePackage{totcount} \RequirePackage[hidelinks, unicode]{hyperref} %[unicode, hidelinks]{hyperref} \RequirePackage{bookmark} \RequirePackage{wasysym} \RequirePackage{environ} \usetikzlibrary{quotes, angles} \geometry{ bottom=35mm } %\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} \DeclareOption{uebung}{ \makeatletter \lhead{\@title} \rhead{\@author} \makeatother } \ProcessOptions\relax % PARAGRAPH no indent but skip \setlength{\parskip}{3mm} \setlength{\parindent}{0mm} \theoremstyle{definition} \newmdtheoremenv{satz}{Satz}[chapter] \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} \newcommand{\N}{\mathbb{N}} \newcommand{\R}{\mathbb{R}} \newcommand{\Z}{\mathbb{Z}} \newcommand{\Q}{\mathbb{Q}} \renewcommand{\C}{\mathbb{C}} % HEADERS %\newpagestyle{main}[\small]{ % \setheadrule{.55pt}% % \sethead[\thepage]% even-left % []% even-center % [\thechapter~\chaptertitle]% even-right % {\thesection~\sectiontitle}% odd-left % {}% odd-center % {\thepage}% odd-right %} %\pagestyle{main} \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}{ \@punkten{\totvalue{aufgabe}} } \def\@punkten#1{ \newcounter{n} \begin{tabular}{|c|*{#1}{m{1cm}|}m{1cm}|@{}m{0cm}@{}} \hline Aufgabe \forloop{n}{1}{\not{\value{n} > #1}}{ & \centering A\then } & \centering $\sum$ & \\[5mm] \hline Punkte \forloop{n}{1}{\not{\value{n} > #1}}{ & } & & \\[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 % remove page before chapters \let\cleardoublepage=\clearpage %josua \newcommand{\norm}[1]{\left\Vert#1\right\Vert} % contradiction \newcommand{\contr}{\text{\Large\lightning}} % people seem to prefer varepsilon over epsilon \renewcommand{\epsilon}{\varepsilon} \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*} } % 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{le}|&\c{ge}|&\c{stackrel}{.*?}{.*?}|&\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