\NeedsTeXFormat{LaTeX2e} \ProvidesPackage{janishutz-helpers}[2.0.0] % ___ ___ % ( _ \ / ___)_ % | ( (_) _ ___ | (__ (_) __ % | | _ / _ \/ _ \ __)| |/ _ \ % | (_( ) (_) ) ( ) | | | | (_) | % (____/ \___/(_) (_)_) (_)\__ | % ( )_) | % \___/ % To be loaded *after* main/core.tex % Configure your author name here \newcommand{\authorTitle}{Janis Hutz\\\url{https://janishutz.com}} \newcommand{\authorHeaders}{Janis Hutz} % Configure your address here \newcommand{\name}{Janis Hutz} \newcommand{\street}{Street} \newcommand{\city}{City} \newcommand{\countrycode}{CH} % Configure definition, lemma, theorem, etc numbering behaviour. 1 = Individual, 2 = Combined (apart from Definition), 3 = Combined \setcounter{numberingConfig}{1} % Configure if for definitions, lemmas, etc, numbering should be (0) =
. or (1) =
.. or (2) =
... \setcounter{numberSubsections}{0} % Set the default language. \setLang{en} % Set the default command for theorem translation \newcommand{\theoremde}{Satz} % ----- % % STYLE % % ----- % % The colour-saturation of the short / inline descriptors (default = 40) \setcounter{descriptorShadeStrength}{40} % The colour-saturation of the shade command (default = 20) \setcounter{shadeStrength}{20} % ▄▄█▀▀▀█▄█ % ▄██▀ ▀█ % ██▀ ▀ ▄██▀██▄▀███▄███ ▄▄█▀██ % ██ ██▀ ▀██ ██▀ ▀▀ ▄█▀ ██ % ██▄ ██ ██ ██ ██▀▀▀▀▀▀ % ▀██▄ ▄▀██▄ ▄██ ██ ██▄ ▄ % ▀▀█████▀ ▀█████▀▄████▄ ▀█████▀ % This file contains all necessary dependencies for the document to compile (at all) and some core macros % Imports % \typeout{[Core] Importing!} \RequirePackage[table, dvipsnames]{xcolor} \RequirePackage{amsmath} \RequirePackage{graphicx} \RequirePackage{subcaption} \RequirePackage[export]{adjustbox} \RequirePackage[most]{tcolorbox} \RequirePackage{cancel} \RequirePackage{dsfont} \RequirePackage{amssymb} \RequirePackage{mathrsfs} \RequirePackage{lipsum} \RequirePackage{ulem} \RequirePackage{soul} \RequirePackage{parskip} \RequirePackage{fancyhdr} \RequirePackage{lastpage} \RequirePackage{tocloft} \RequirePackage{wasysym} \RequirePackage{wrapfig} \RequirePackage{multicol} \RequirePackage{ifthen} \RequirePackage[hidelinks]{hyperref} \RequirePackage{enumitem} \RequirePackage{gensymb} \RequirePackage{pifont} % Language Switching. Currently only English and German are supported % See docs for how to use \newcounter{lang} \typeout{Loading helpers} % TODO: Fix this up \newcommand{\setLang}[1]{ \edef\lang{#1} \edef\en{en} \edef\de{de} \ifx\lang\en \typeout{[Lang Switcher] Loading English} \setcounter{lang}{1} \else \ifx\lang\de \typeout{[Lang Switcher] Loading German} \setcounter{lang}{2} \input{\dir/main/lang/de} \else \typeout{[Lang Switcher] No such language!} \fi \fi } \newcommand{\loadLang}{ \ifnum\value{lang}<2{ \typeout{[Lang Loader] Loaded English} }\else { \typeout{[Lang Loader] Loaded German} \setcounter{lang}{2} } \fi } % Create config counters / variables. See the config file for changing them \newcounter{numberingConfig} \newcounter{numberSubsections} \newcounter{descriptorShadeStrength} \newcounter{shadeStrength} % Set up the latex document, configure author, title (as first argument), as well as headers and footers \newcommand{\setup}[1]{ \typeout{[Setup] Setting up...} \loadLang \RequirePackage[a4paper,textwidth=17.5cm,textheight=25cm,includehead]{geometry} \title{\Huge \textbf{#1}} \author{\authorTitle} \makeatletter \makeatother \fancyhead{} \fancyhead[L]{#1} \fancyhead[R]{\authorHeaders} \fancyfoot{} \fancyfoot[L]{\today} \fancyfoot[R]{\thepage\ /\ \pageref{LastPage}} \fancypagestyle{plain}{% \fancyhead{} \fancyhead[L]{#1} \fancyhead[R]{\authorHeaders} \fancyfoot{} \fancyfoot[L]{\today} \fancyfoot[R]{\thepage\ /\ \pageref{LastPage}} } } % Start document command (required) \newcommand{\startDocument}{ \maketitle \pagestyle{fancy} \thispagestyle{fancy} } % Set up the latex document, only configuring the author, title and page size \newcommand{\setupBarebones}[1]{ \loadLang \RequirePackage[a4paper,textwidth=17.5cm,textheight=25cm,includehead]{geometry} \title{\Huge \textbf{#1}} \author{\authorTitle} } % Set up the latex document for exam summaries (Extra wide body, small margins, no header) \newcommand{\setupCheatSheet}[1]{ \loadLang \RequirePackage[a4paper,textwidth=20cm,textheight=28.5cm]{geometry} \title{\Huge \textbf{#1}} \author{\authorTitle} } % ──────────────────────────────────────────────────────────────────── % ╭────────────────────────────────────────────────╮ % │ Translatation │ % ╰────────────────────────────────────────────────╯ \newcommand{\translate}[2]{\ifnum\value{lang}<2{#1}\else{#2}\fi} \newcommand{\tr}[2]{\translate{#1}{#2}} % ┌ ┐ % │ Translation aids (commonly used) │ % └ ┘ \newcommand{\trif}{\translate{if }{falls }} \newcommand{\trIf}{\translate{If }{Falls }} \newcommand{\trLet}{\translate{Let }{Sei }} \newcommand{\trLets}{\translate{Let }{Seien }} \newcommand{\trFor}{\translate{For }{Für }} \newcommand{\trfor}{\translate{for }{für }} \newcommand{\trand}{\translate{and }{und }} \newcommand{\tror}{\translate{or }{oder }} \newcommand{\trst}{\translate{s.t. }{s.d. }} \newcommand{\trsuchthat}{\translate{such that }{so dass }} \newcommand{\trwith}{\translate{with }{mit }} %░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ %░░░ ░░░░░ ░░░░░░░░░░░░░ ░░░░░░░░░░░ %▒ ▒▒▒▒ ▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒ %▒▒ ▒▒▒▒▒▒▒ ▒ ▒ ▒▒▒ ▒ ▒▒▒▒ ▒▒▒▒ %▓▓▓▓ ▓▓▓▓▓▓▓ ▓▓▓▓ ▓ ▓▓ ▓▓ ▓▓▓ ▓ %▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓▓▓▓▓ ▓▓▓ ▓ ▓ %▓ ▓▓▓▓ ▓▓▓ ▓ ▓▓▓▓▓ ▓▓▓ ▓ ▓▓▓▓▓▓▓▓ %███ ██████ █████ ████ ███ ███ %██████████████████████ ███████████████████ % Global style configs for tcolorbox (to reduce bloat) \newcommand{\usetcolorboxes}{ \tcbset{ mainboxstyle/.style={ arc=3mm, colback=red!5!white, colframe=red!75!black, colbacktitle=red!75!black, fonttitle=\bfseries, enhanced, attach boxed title to top left={yshift=-2mm,xshift=5mm}, breakable, top=0.4cm, } } \tikzset{ overlaystyle/.style={ draw=red!75!black, thick, fill=red!75!black, left, anchor=east, text=white, rounded corners=1mm, font=\bfseries, xshift=-5mm, yshift=1mm, inner xsep=3mm, inner ysep=1.5mm } } } % -------------------- % % Small style elements % % -------------------- % \newcommand{\setFont}[1]{\fontfamily{#1}\selectfont} \newcommand{\setFontType}[1]{ \ifthenelse{\equal{#1}{mono}}{ \renewcommand{\familydefault}{\ttdefault} }{ \ifthenelse{\equal{#1}{serif}}{ \renewcommand{\familydefault}{\rmdefault} }{ \renewcommand{\familydefault}{\sfdefault} } } } \newcommand{\rmvspace}{\vspace{-0.5pc}} \newcommand{\drmvspace}{\vspace{-1pc}} \renewcommand{\footrulewidth}{0.4pt} \newcommand{\TODO}{\color{red} \hl{TODO:} \color{black}} \newcommand{\bi}[1]{\textbf{\textit{#1}}} \renewcommand{\quote}[1]{``\textit{#1}''} % Add a color shade (similar to \fhlc, but nicer boxes) \newcommand{\background}[3]{\tcbox[on line, boxsep=2pt, left=0pt, right=0pt, top=0pt, bottom=0pt, colframe=white, frame empty, colback=#1!#2!white, highlight math style={enhanced} ] {\textbf{#3}}} % Abstraction of background, where the brightness is set to 20% \newcommand{\shade}[2]{\background{#1}{\arabic{shadeStrength}}{#2}} % This command is used for the short and inline descriptors \newcommand{\bg}[2]{\background{#1}{\arabic{descriptorShadeStrength}}{#2}} % Add a gray backdrop \newcommand{\backdrop}[1]{\shade{black}{#1}} % Fancy highlighting (Bold, underlined, colorbox behind it. Shorthand for \fhlc{white}{#1} \newcommand{\fhl}[1]{\fhlc{white}{#1}} % Add a colorbox around your text with the color specified. Text is bold and underlined \newcommand{\fhlc}[2]{\textbf{\underline{\colorbox{#1}{#2}}}} % Spacing (horizontal) \newcommand{\smallhspace}{\hspace{2mm}} \newcommand{\mediumhspace}{\hspace{5mm}} \newcommand{\largehspace}{\hspace{1cm}} % ----------------- % % Table of contents % % ----------------- % % Print a table of contents as a tcolorbox \newcommand{\printtoc}[1]{ \renewcommand{\cfttoctitlefont}{} \renewcommand{\cftaftertoctitle}{\vspace{-0.75cm}} \renewcommand{\contentsname}{} \begin{tcolorbox}[colback=black!5!white,colbacktitle=#1!75!black,coltitle=black,enhanced,attach boxed title to top center={yshift=-2mm}, title={\Large \ifnum\value{lang}<2{Contents}\else {Inhaltsverzeichnis}\fi},fonttitle=\bfseries,breakable] \hspace{1cm} \tableofcontents \end{tcolorbox} } %▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ %██░▄▄▀█▀▄▄▀█░▄▀▄░█░▄▀▄░█▀▄▄▀█░▄▄▀ %██░████░██░█░█▄█░█░█▄█░█░██░█░██░ %██░▀▀▄██▄▄██▄███▄█▄███▄██▄▄██▄██▄ %▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ \newtcolorbox{recall}[2][]{mainboxstyle,colback=yellow!5!white,colframe=yellow!75!black,colbacktitle=yellow!75!black,title={\large #2}, overlay={\node[overlaystyle,draw=yellow!75!black,,fill=yellow!75!black] at (frame.north east) {\large \translate{Recall }{Repetition }};},#1} \newtcolorbox{remarks}[2][]{mainboxstyle,colback=green!5!white,colframe=green!75!black,colbacktitle=green!75!black,title={\large #2}, overlay={\node[overlaystyle,draw=green!75!black,,fill=green!75!black] at (frame.north east) {\large \translate{Remarks }{Bemerkungen }};},#1} \newtcolorbox{guides}[3][]{mainboxstyle,colback=red!5!white,colframe=red!75!black,colbacktitle=red!75!black,title={\large #2}, overlay={\node[overlaystyle,draw=red!75!black,,fill=red!75!black] at (frame.north east) {\large #3};},#1} \newtcolorbox{properties}[2][]{mainboxstyle,colback=purple!5!white,colframe=purple!75!black,colbacktitle=purple!75!black,title={\large #2}, overlay={\node[overlaystyle,draw=purple!75!black,,fill=purple!75!black] at (frame.north east) {\large \translate{Properties }{Eigenschaften }};},#1} \newtcolorbox{restrictions}[2][]{mainboxstyle,colback=purple!5!white,colframe=purple!75!black,colbacktitle=purple!75!black,title={\large #2}, overlay={\node[overlaystyle,draw=purple!75!black,,fill=purple!75!black] at (frame.north east) {\large \translate{Restrictions }{Einschränkungen }};},#1} \newtcolorbox{limitations}[2][]{mainboxstyle,colback=purple!5!white,colframe=purple!75!black,colbacktitle=purple!75!black,title={\large #2}, overlay={\node[overlaystyle,draw=purple!75!black,,fill=purple!75!black] at (frame.north east) {\large \translate{Limitations }{Limitierungen }};},#1} \newtcolorbox{intuition}[2][]{mainboxstyle,colback=Emerald!5!white,colframe=Emerald!75!black,colbacktitle=Emerald!75!black,title={\large #2}, overlay={\node[overlaystyle,draw=Emerald!75!black,,fill=Emerald!75!black] at (frame.north east) {\large Intuition};},#1} \newcommand{\inlineintuition}{\bg{Emerald}{Intuition:}} % Terms and notation \newtcolorbox{terms}[2][]{mainboxstyle,colback=orange!5!white,colframe=orange!75!black,colbacktitle=orange!75!black,title={\large #2}, overlay={\node[overlaystyle,draw=orange!75!black,,fill=orange!75!black] at (frame.north east) {\large \translate{Terms }{Begriffe }};},#1} \newtcolorbox{notation}[2][]{mainboxstyle,colback=Peach!5!white,colframe=Peach!75!black,colbacktitle=Peach!75!black,title={\large #2}, overlay={\node[overlaystyle,draw=Peach!75!black,,fill=Peach!75!black] at (frame.north east) {\large Notation};},#1} \newtcolorbox{usage}[2][]{mainboxstyle,colback=green!5!white,colframe=green!75!black,colbacktitle=green!75!black,title={\large #2}, overlay={\node[overlaystyle,draw=green!75!black,,fill=green!75!black] at (frame.north east) {\large \translate{Usage }{Nutzung }};},#1} % Task \newtcolorbox{task}[2][]{mainboxstyle,colback=gray!5!white,colframe=gray!75!black,colbacktitle=gray!75!black,title={\large #2},overlay={\node[overlaystyle,draw=gray!75!black,fill=gray!75!black] at (frame.north east) {\large \translate{Task}{Aufgabe}};},#1} % Proof \newtcolorbox{proof}[2][]{mainboxstyle,colback=magenta!5!white,colframe=magenta!75!black,colbacktitle=magenta!75!black,title={\large #2},overlay={\node[overlaystyle,draw=magenta!75!black,fill=magenta!75!black] at (frame.north east) {\large \translate{Proof}{Beweis}};},#1} % General \newtcolorbox{general}[4][]{mainboxstyle,colback=#4!5!white,colframe=#4!75!black,colbacktitle=#4!75!black,title={\large #2}, overlay={\node[overlaystyle,draw=#4!75!black,,fill=#4!75!black] at (frame.north east) {\large #3};},#1} % Simple \newtcolorbox{simplebox}[2][]{colback=#2!5!white,colframe=#2!75!black,#1}