From 5b1b65b0d8e3aad776a55127978a6e0724d18dba Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Mon, 3 Nov 2025 15:40:18 +0100 Subject: [PATCH 01/32] [Build] Some experimentation --- build.sh | 64 +- dist/janishutz-helpers-full.sty | 1021 ++++++++++++++++++++++++ dist/janishutz-helpers-letters.sty | 32 + dist/janishutz-helpers-minimal.sty | 372 +++++++++ dist/janishutz-helpers-recommended.sty | 1003 +++++++++++++++++++++++ include.tex | 42 +- janishutz-helpers.sty | 2 + main/core.tex | 58 +- main/cs.tex | 14 +- main/index.tex | 4 +- main/lang/de.tex | 2 +- main/style/counters.tex | 4 +- main/tables.tex | 4 +- scopes/full.tex | 5 - scopes/header.tex | 5 - scopes/minimal.tex | 7 - scopes/most.tex | 13 - scopes/recommended.tex | 7 - setup.sh | 1 + 19 files changed, 2509 insertions(+), 151 deletions(-) create mode 100644 dist/janishutz-helpers-full.sty create mode 100644 dist/janishutz-helpers-letters.sty create mode 100644 dist/janishutz-helpers-minimal.sty create mode 100644 dist/janishutz-helpers-recommended.sty create mode 100644 janishutz-helpers.sty delete mode 100644 scopes/full.tex delete mode 100644 scopes/header.tex delete mode 100644 scopes/minimal.tex delete mode 100644 scopes/most.tex delete mode 100644 scopes/recommended.tex create mode 100644 setup.sh diff --git a/build.sh b/build.sh index 8b562f3..9fbb069 100755 --- a/build.sh +++ b/build.sh @@ -14,45 +14,45 @@ echo " " mkdir dist/ -cat ./scopes/header.tex >>./dist/minimal.sty +cat ./janishutz-helpers.sty >./dist/janishutz-helpers-minimal.sty # Build minimal scope -cat ./main/core.tex >>./dist/minimal.sty -echo "\n" >>./dist/minimal.sty -cat ./main/style/style.tex >>./dist/minimal.sty -echo "\n" >>./dist/minimal.sty -cat ./main/style/common.tex >>./dist/minimal.sty - -# Build most -cat ./dist/minimal.sty >./dist/most.sty -echo "\n" >>./dist/most.sty -cat ./main/math.tex >>./dist/most.sty -echo "\n" >>./dist/most.sty -cat ./main/cs.tex >>./dist/most.sty -echo "\n" >>./dist/most.sty -cat ./main/index.tex >>./dist/most.sty -echo "\n" >>./dist/most.sty -cat ./main/style/counters.tex >>./dist/most.sty -echo "\n" >>./dist/most.sty -cat ./main/style/cs.tex >>./dist/most.sty -echo "\n" >>./dist/most.sty -cat ./main/style/math.tex >>./dist/most.sty -echo "\n" >>./dist/most.sty -cat ./main/style/language.tex >>./dist/most.sty +echo "" >>./dist/janishutz-helpers-minimal.sty +cat ./config/config.tex >>./dist/janishutz-helpers-minimal.sty +echo "" >>./dist/janishutz-helpers-minimal.sty +cat ./main/core.tex >>./dist/janishutz-helpers-minimal.sty +echo "" >>./dist/janishutz-helpers-minimal.sty +cat ./main/style/style.tex >>./dist/janishutz-helpers-minimal.sty +echo "" >>./dist/janishutz-helpers-minimal.sty +cat ./main/style/common.tex >>./dist/janishutz-helpers-minimal.sty # Build recommended -cat ./dist/most.sty >./dist/recommended.sty -echo "\n" >>./dist/recommended.sty -cat ./extra/bib.tex >>./dist/recommended.sty -echo "\n" >>./dist/recommended.sty -cat ./extra/glossary.tex >>./dist/recommended.sty +cat ./dist/janishutz-helpers-minimal.sty >./dist/janishutz-helpers-recommended.sty +echo "" >>./dist/janishutz-helpers-recommended.sty +cat ./main/math.tex >>./dist/janishutz-helpers-recommended.sty +echo "" >>./dist/janishutz-helpers-recommended.sty +cat ./main/cs.tex >>./dist/janishutz-helpers-recommended.sty +echo "" >>./dist/janishutz-helpers-recommended.sty +cat ./main/index.tex >>./dist/janishutz-helpers-recommended.sty +echo "" >>./dist/janishutz-helpers-recommended.sty +cat ./main/style/counters.tex >>./dist/janishutz-helpers-recommended.sty +echo "" >>./dist/janishutz-helpers-recommended.sty +cat ./main/style/cs.tex >>./dist/janishutz-helpers-recommended.sty +echo "" >>./dist/janishutz-helpers-recommended.sty +cat ./main/style/math.tex >>./dist/janishutz-helpers-recommended.sty +echo "" >>./dist/janishutz-helpers-recommended.sty +cat ./main/style/language.tex >>./dist/janishutz-helpers-recommended.sty +echo "" >>./dist/janishutz-helpers-recommended.sty +cat ./extra/bib.tex >>./dist/janishutz-helpers-recommended.sty +echo "" >>./dist/janishutz-helpers-recommended.sty +cat ./extra/glossary.tex >>./dist/janishutz-helpers-recommended.sty # Build full -cat ./dist/recommended.sty >./dist/full.sty -echo "\n" >>./dist/full.sty -cat ./extra/minted.tex >>./dist/full.sty +cat ./dist/janishutz-helpers-recommended.sty >./dist/janishutz-helpers-full.sty +echo "" >>./dist/janishutz-helpers-full.sty +cat ./extra/minted.tex >>./dist/janishutz-helpers-full.sty # Copy letter -cp ./scopes/letter.tex ./dist/letter.sty +cp ./scopes/letter.tex ./dist/janishutz-helpers-letters.sty echo "==> Done" diff --git a/dist/janishutz-helpers-full.sty b/dist/janishutz-helpers-full.sty new file mode 100644 index 0000000..764d4bb --- /dev/null +++ b/dist/janishutz-helpers-full.sty @@ -0,0 +1,1021 @@ +\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} + +% ▄▄ +% ▀████▄ ▄███▀ ██ ███ +% ████ ████ ██ ██ +% █ ██ ▄█ ██ ▄█▀██▄ ██████ ███████▄ +% █ ██ █▀ ██ ██ ██ ██ ██ ██ +% █ ██▄█▀ ██ ▄█████ ██ ██ ██ +% █ ▀██▀ ██ ██ ██ ██ ██ ██ +% ▄███▄ ▀▀ ▄████▄████▀██▄ ▀███████ ████▄ + + +% BB shortcuts (for number spaces, etc) +\newcommand{\C}{\mathbb{C}} +\newcommand{\D}{\mathbb{D}} +\newcommand{\E}{\mathbb{E}} +\newcommand{\I}{\mathbb{I}} +\newcommand{\J}{\mathbb{J}} +\newcommand{\N}{\mathbb{N}} +\newcommand{\Q}{\mathbb{Q}} +\newcommand{\R}{\mathbb{R}} +\newcommand{\V}{\mathbb{V}} +\newcommand{\Z}{\mathbb{Z}} + +% Caligraphic +\newcommand{\cA}{\mathcal{A}} +\newcommand{\cB}{\mathcal{B}} +\newcommand{\cC}{\mathcal{C}} +\newcommand{\cD}{\mathcal{D}} +\newcommand{\cE}{\mathcal{E}} +\newcommand{\cF}{\mathcal{F}} +\newcommand{\cG}{\mathcal{G}} +\newcommand{\cH}{\mathcal{H}} +\newcommand{\cI}{\mathcal{I}} +\newcommand{\cJ}{\mathcal{J}} +\newcommand{\cK}{\mathcal{K}} +\newcommand{\cL}{\mathcal{L}} +\newcommand{\cM}{\mathcal{M}} +\newcommand{\cN}{\mathcal{N}} +\newcommand{\cO}{\mathcal{O}} +\newcommand{\cP}{\mathcal{P}} +\newcommand{\cQ}{\mathcal{Q}} +\newcommand{\cR}{\mathcal{R}} +\newcommand{\cS}{\mathcal{S}} +\newcommand{\cT}{\mathcal{T}} +\newcommand{\cU}{\mathcal{U}} +\newcommand{\cV}{\mathcal{V}} +\newcommand{\cW}{\mathcal{W}} +\newcommand{\cX}{\mathcal{X}} +\newcommand{\cY}{\mathcal{Y}} +\newcommand{\cZ}{\mathcal{Z}} + +% other useful shortcuts +\newcommand{\8}{\infty} +\newcommand{\dx}{\text{ d}} +\newcommand{\floor}[1]{\left\lfloor #1 \right\rfloor} +\newcommand{\ceil}[1]{\left\lceil #1 \right\rceil} +\newcommand{\hastoeq}{\overset{!}{=}} +\newcommand{\Leftrightarrowequiv}{\overset{\cdot}{\Leftrightarrow}} +\newcommand{\Longleftrightarrowequiv}{\overset{\cdot}{\Longleftrightarrow}} +\newcommand{\Rightarrowequiv}{\overset{\cdot}{\Rightarrow}} +\newcommand{\Leftarrowequiv}{\overset{\cdot}{\Leftarrow}} +\newcommand{\defAs}{\overset{\text{def}}{=}} +\newcommand{\der}[1]{\frac{\mbox{d}}{\mbox{d}#1}} +\newcommand{\dern}[2]{\frac{\mbox{d}^{#2}}{\mbox{d}^{#2}#1}} +\newcommand{\parder}[1]{\frac{\partial}{\partial #1}} +\newcommand{\pardern}[2]{\frac{\partial^{#2}}{\partial^{#2} #1}} +\newcommand{\defEquiv}{\overset{\text{def}}{\Leftrightarrow}} +\newcommand{\defImplies}{\overset{\text{def}}{\Rightarrow}} +\newcommand{\divides}{\hspace{0.25em}|\hspace{0.25em}} +\newcommand{\mbeq}{\overset{!}{=}} +\newcommand{\lcm}{\text{lcm}} +\newcommand{\limit}[2]{\lim_{#1 \rightarrow #2}} +\newcommand{\seq}[1]{(#1_n)_{n \geq 1}} +\newcommand{\ser}[2]{\sum_{k = 1}^{#2} #1_k} +\newcommand{\limni}{\limit{n}{\infty}} +\newcommand{\limnz}{\limit{n}{0}} +\newcommand{\limxz}{\limit{x_0}{0}} +\newcommand{\limhz}{\limit{h}{0}} +\newcommand{\liminfni}{\liminf_{n \rightarrow \infty}} +\newcommand{\limsupni}{\limsup_{n \rightarrow \infty}} +\newcommand{\elementstack}[2]{\genfrac{}{}{0pt}{}{#1}{#2}} +\DeclareMathOperator\arctanh{arctanh} +\DeclareMathOperator\arccosh{arccosh} +\DeclareMathOperator\arcsinh{arcsinh} + + +% ░▒█▀▀▄░▄▀▀▄░█▀▄▀█░▄▀▀▄░█░▒█░▀█▀░█▀▀░█▀▀▄░░░▒█▀▀▀█░█▀▄░░▀░░█▀▀░█▀▀▄░█▀▄░█▀▀ +% ░▒█░░░░█░░█░█░▀░█░█▄▄█░█░▒█░░█░░█▀▀░█▄▄▀░░░░▀▀▀▄▄░█░░░░█▀░█▀▀░█░▒█░█░░░█▀▀ +% ░▒█▄▄▀░░▀▀░░▀░░▒▀░█░░░░░▀▀▀░░▀░░▀▀▀░▀░▀▀░░░▒█▄▄▄█░▀▀▀░▀▀▀░▀▀▀░▀░░▀░▀▀▀░▀▀▀ + +% Extra imports +\RequirePackage{stmaryrd} +\RequirePackage{algorithm} +\RequirePackage{algpseudocodex} +\RequirePackage{setspace} +\RequirePackage{verbatim} +\RequirePackage{turnstile} +\RequirePackage{forloop} + +\newcommand{\Indent}{\hspace{\algorithmicindent}} + +\newcommand{\timecomplexity}{\fhlc{orange}{\ifnum\value{lang}<2{Time complexity}\else {Laufzeit}\fi} \hspace{0.5em}} +\newcommand{\tc}[1]{\timecomplexity $\Theta\left(#1\right)$} +\newcommand{\tct}[1]{\Theta\left(#1\right)} +\newcommand{\tco}[1]{\mathcal{O}\left(#1\right)} +\newcommand{\tcl}[1]{\Omega\left(#1\right)} +\newcommand{\wordbool}{(\Sigma_{\text{bool}})^*} +\newcommand{\words}[1]{(\Sigma_{\text{#1}})^*} +\newcommand{\word}{\Sigma^*} +\newcommand{\wordm}[1]{\Sigma_{\text{#1}}^*} +\newcommand{\alphabets}[1]{\Sigma_{\text{#1}}} +\newcommand{\alphabetbool}{\Sigma_{\text{bool}}} +\newcommand{\tR}{\text{R}} +\newcommand{\tC}{\text{C}} +\newcommand{\tN}{\text{N}} +\newcommand{\bigvdash}[2]{\sststile{#1}{#2}} +\newcommand{\class}{\text{\tr{Cl}{Kl}}} + +% ▄▄ +% ▀████▀ ▀███ +% ██ ██ +% ██ ▀████████▄ ▄█▀▀███ ▄▄█▀██▀██▀ ▀██▀ +% ██ ██ ██ ▄██ ██ ▄█▀ ██ ▀██ ▄█▀ +% ██ ██ ██ ███ ██ ██▀▀▀▀▀▀ ███ +% ██ ██ ██ ▀██ ██ ██▄ ▄ ▄█▀ ██▄ +% ▄████▄████ ████▄ ▀████▀███▄ ▀█████▀██▄ ▄██▄ + + +% For using index package +\newcommand{\prepareIndex}{ + \RequirePackage[T1]{fontenc} + \RequirePackage{imakeidx} + \makeindex +} + +\newcommand{\addIndexBold}[1]{\textbf{\index{\MakeLowercase{#1}} #1}} +\newcommand{\addIndexItalic}[1]{\textit{\index{\MakeLowercase{#1}} #1}} +\newcommand{\addIndex}[1]{\index{\MakeLowercase{#1}} #1} + + + +% ▄▄· ▄• ▄▌ ▐ ▄ ▄▄▄▄▄▄▄▄ .▄▄▄ +% ▐█ ▌▪ ▄█▀▄ █▪██▌•█▌▐█•██ ▀▄.▀·▀▄ █· +% ██ ▄▄▐█▌.▐▌█▌▐█▌▐█▐▐▌ ▐█.▪▐▀▀▪▄▐▀▀▄ +% ▐███▌▐█▌.▐▌▐█▄█▌██▐█▌ ▐█▌·▐█▄▄▌▐█•█▌ +% ·▀▀▀ ▀█▄▀▪ ▀▀▀ ▀▀ █▪ ▀▀▀ ▀▀▀ .▀ ▀ + +\RequirePackage{xstring} +\RequirePackage{etoolbox} +% tcolorbox and other stylistic elements (i.e. inline versions of them) that have counters +\newcounter{lemma}[section] +\newcounter{definition}[section] +\newcounter{corollary}[section] +\newcounter{theorem}[section] +\newcounter{axiom}[section] +\newcounter{example}[section] +\newcounter{fact}[section] +\newcounter{proposition}[section] +\newcounter{formula}[section] +\newcounter{remark}[section] +\newcounter{all}[section] + +\newcounter{lemmass}[subsection] +\newcounter{definitionss}[subsection] +\newcounter{corollaryss}[subsection] +\newcounter{theoremss}[subsection] +\newcounter{axiomss}[subsection] +\newcounter{exampless}[subsection] +\newcounter{factss}[subsection] +\newcounter{propositionss}[subsection] +\newcounter{formulass}[subsection] +\newcounter{remarkss}[subsection] +\newcounter{allss}[subsection] + +\newcounter{lemmasss}[subsubsection] +\newcounter{definitionsss}[subsubsection] +\newcounter{corollarysss}[subsubsection] +\newcounter{theoremsss}[subsubsection] +\newcounter{axiomsss}[subsubsection] +\newcounter{examplesss}[subsubsection] +\newcounter{factsss}[subsubsection] +\newcounter{propositionsss}[subsubsection] +\newcounter{formulasss}[subsubsection] +\newcounter{remarksss}[subsubsection] +\newcounter{allsss}[subsubsection] + +% Set the current number of a label +\newcommand{\setLabelNumber}[2]{% + \setcounter{#1}{#2}% + \addtocounter{#1}{-1}% + \setcounter{#1ss}{#2}% + \addtocounter{#1ss}{-1}% + \setcounter{#1sss}{#2}% + \addtocounter{#1sss}{-1}% +} + +\newcommand{\stepLabelNumber}[1]{% + \stepcounter{#1}% + \stepcounter{#1ss}% + \stepcounter{#1sss}% +} + +\newcommand{\printcounter}[1]{% + \csname the#1\endcsname +} + +\newcommand{\suffix}{ss} +\newcommand{\sectionNumbering}{\thesection} + +% ┌ ┐ +% │ Counter numbering │ +% └ ┘ +\newcommand{\preTableAndFigHook}[1]{% + \ifnum\value{numberingConfig}>1 + \ifnum\value{numberSubsections}=1 + \stepcounter{allss} + \else + \ifnum\value{numberSubsections}=2 + \stepcounter{allsss} + \else + \stepcounter{all} + \fi + \fi + \fi +} +\AtBeginEnvironment{table}{\preTableAndFigHook{table}} +\AtBeginEnvironment{figure}{\preTableAndFigHook{figure}} + +\newcommand{\applyTableAndFigureNumbering}{ + % Tables & Figures + \ifnum\value{numberingConfig}=0 + \renewcommand{\thetable}{} + \renewcommand{\thefigure}{} + \else + \ifnum\value{numberingConfig}=1 + \renewcommand{\thetable}{\sectionNumbering.\arabic{table}} + \renewcommand{\thefigure}{\sectionNumbering.\arabic{figure}} + \else + \ifnum\value{numberSubsections}=1 + \renewcommand{\thetable}{\sectionNumbering.\arabic{allss}} + \renewcommand{\thefigure}{\sectionNumbering.\arabic{allss}} + \else + \ifnum\value{numberSubsections}=2 + \renewcommand{\thetable}{\refstepcounter{allsss}\sectionNumbering.\arabic{allsss}} + \renewcommand{\thefigure}{\sectionNumbering.\arabic{allsss}} + \else + \renewcommand{\thetable}{\sectionNumbering.\arabic{all}} + \renewcommand{\thefigure}{\sectionNumbering.\arabic{all}} + \fi + \fi + \fi + \fi +} + +\newcommand{\setSubsectionNumbering}[1]{ + \setcounter{numberSubsections}{#1} + \applySubsectionNumbering +} + +\newcommand{\applySubsectionNumbering}{ + \ifnum\value{numberSubsections}=1 + \renewcommand{\sectionNumbering}{\thesubsection} + \renewcommand{\suffix}{ss} + \typeout{Numbering as section.subsection.number} + \else + \ifnum\value{numberSubsections}=2 + \renewcommand{\sectionNumbering}{\thesubsubsection} + \renewcommand{\suffix}{sss} + \typeout{Numbering as section.subsection.subsubsection.number} + \else + \renewcommand{\sectionNumbering}{\thesection} + \renewcommand{\suffix}{} + \typeout{Numbering as section.number} + \fi + \fi + \applyTableAndFigureNumbering + + \renewcommand{\thelemma}{\sectionNumbering.\arabic{lemma}} + \renewcommand{\thedefinition}{\sectionNumbering.\arabic{definition}} + \renewcommand{\thecorollary}{\sectionNumbering.\arabic{corollary}} + \renewcommand{\thetheorem}{\sectionNumbering.\arabic{theorem}} + \renewcommand{\theaxiom}{\sectionNumbering.\arabic{axiom}} + \renewcommand{\theexample}{\sectionNumbering.\arabic{example}} + \renewcommand{\thefact}{\sectionNumbering.\arabic{fact}} + \renewcommand{\theproposition}{\sectionNumbering.\arabic{proposition}} + \renewcommand{\theformula}{\sectionNumbering.\arabic{formula}} + \renewcommand{\theremark}{\sectionNumbering.\arabic{remark}} + \renewcommand{\theall}{\sectionNumbering.\arabic{all}} + + \renewcommand{\thelemmass}{\sectionNumbering.\arabic{lemmass}} + \renewcommand{\thedefinitionss}{\sectionNumbering.\arabic{definitionss}} + \renewcommand{\thecorollaryss}{\sectionNumbering.\arabic{corollaryss}} + \renewcommand{\thetheoremss}{\sectionNumbering.\arabic{theoremss}} + \renewcommand{\theaxiomss}{\sectionNumbering.\arabic{axiomss}} + \renewcommand{\theexampless}{\sectionNumbering.\arabic{exampless}} + \renewcommand{\thefactss}{\sectionNumbering.\arabic{factss}} + \renewcommand{\thepropositionss}{\sectionNumbering.\arabic{propositionss}} + \renewcommand{\theformulass}{\sectionNumbering.\arabic{formulass}} + \renewcommand{\theremarkss}{\sectionNumbering.\arabic{remarkss}} + \renewcommand{\theallss}{\sectionNumbering.\arabic{allss}} + + \renewcommand{\thelemmasss}{\sectionNumbering.\arabic{lemmasss}} + \renewcommand{\thedefinitionsss}{\sectionNumbering.\arabic{definitionsss}} + \renewcommand{\thecorollarysss}{\sectionNumbering.\arabic{corollarysss}} + \renewcommand{\thetheoremsss}{\sectionNumbering.\arabic{theoremsss}} + \renewcommand{\theaxiomsss}{\sectionNumbering.\arabic{axiomsss}} + \renewcommand{\theexamplesss}{\sectionNumbering.\arabic{examplesss}} + \renewcommand{\thefactsss}{\sectionNumbering.\arabic{factsss}} + \renewcommand{\thepropositionsss}{\sectionNumbering.\arabic{propositionsss}} + \renewcommand{\theformulasss}{\sectionNumbering.\arabic{formulasss}} + \renewcommand{\theremarksss}{\sectionNumbering.\arabic{remarksss}} + \renewcommand{\theallsss}{\sectionNumbering.\arabic{allsss}} +} +\applySubsectionNumbering + +% ── Label generation ──────────────────────────────────────────────── +\newcommand{\labelSectionGeneration}{% + \ifnum\value{numberSubsections}=1 + \arabic{section}-\arabic{subsection}% + \else + \ifnum\value{numberSubsections}=2 + \arabic{section}-\arabic{subsection}-\arabic{subsubsection}% + \else + \arabic{section}% + \fi + \fi} + +\newcommand{\labelIt}[1]{\refstepcounter{#1\suffix}\edef\tempLabel{\genLabel{#1}{\arabic{#1\suffix}}}\label{\tempLabel}} +\newcommand{\genLabel}[2]{#1:\labelSectionGeneration-#2} + +% ┌ ┐ +% │ Number the counters appropriately │ +% └ ┘ +\newcommand{\usenumberArabic}[1]{% + \ifnum\value{numberingConfig}=1 + \labelIt{#1} + \printcounter{#1\suffix}% + \else + \ifnum\value{numberingConfig}=2 + \ifthenelse{\equal{#1}{definitions}}{% + \labelIt{definition} + \printcounter{definition\suffix}% + }{% + \labelIt{all} + \printcounter{all\suffix}% + }% + \else + \ifnum\value{numberingConfig}=3 + \labelIt{all} + \printcounter{all\suffix}% + \else + \relax% + \fi + \fi + \fi} + + +% ──────────────────────────────────────────────────────────────────── +% ┌ ┐ +% │ Enable or disable numbering │ +% └ ┘ +% Initialize with config file +\newcounter{numberingConfigStore} +\setcounter{numberingConfigStore}{\value{numberingConfig}} + +% For later change +\newcommand{\setNumberingStyle}[1]{ + \typeout{Setting NumberingStyle to #1} + \setcounter{numberingConfig}{#1} + \ifthenelse{\equal{#1}{0}}{}{ + \setcounter{numberingConfigStore}{#1} + } + \applyTableAndFigureNumbering +} + +% Enable / disable numbering +\newcommand{\numberingOff}{ + \setcounter{numberingConfig}{0} + \applyTableAndFigureNumbering +} +\newcommand{\numberingOn}{ + \setcounter{numberingConfig}{\value{numberingConfigStore}} + \applyTableAndFigureNumbering +} + +% ──────────────────────────────────────────────────────────────────── +% ╭────────────────────────────────────────────────╮ +% │ Reset definition, lemma, etc counters, add a │ +% │ new page │ +% ╰────────────────────────────────────────────────╯ +\newcommand{\newsection}{ + \newpage + \newsectionNoPB +} + +% ── Reset definitions, lemma, etc counters, do not add new page ───── +\newcommand{\newsectionNoPB}{ + \setcounter{lemma}{0} + \setcounter{definition}{0} + \setcounter{corollary}{0} + \setcounter{theorem}{0} + \setcounter{axiom}{0} + \setcounter{example}{0} + \setcounter{fact}{0} + \setcounter{proposition}{0} + \setcounter{formula}{0} + \setcounter{remark}{0} + \setcounter{all}{0} + + \setcounter{lemmass}{0} + \setcounter{definitionss}{0} + \setcounter{corollaryss}{0} + \setcounter{theoremss}{0} + \setcounter{axiomss}{0} + \setcounter{exampless}{0} + \setcounter{factss}{0} + \setcounter{propositionss}{0} + \setcounter{formulass}{0} + \setcounter{remarkss}{0} + \setcounter{allss}{0} + + \setcounter{lemmasss}{0} + \setcounter{definitionsss}{0} + \setcounter{corollarysss}{0} + \setcounter{theoremsss}{0} + \setcounter{axiomsss}{0} + \setcounter{examplesss}{0} + \setcounter{factsss}{0} + \setcounter{propositionsss}{0} + \setcounter{formulasss}{0} + \setcounter{remarksss}{0} + \setcounter{allsss}{0} + + % Tables & Figures + \setcounter{table}{0} + \setcounter{figure}{0} +} +\newsectionNoPB % Initializes + + +% ──────────────────────────────────────────────────────────────────── +% ╭────────────────────────────────────────────────╮ +% │ Tcolorboxes │ +% ╰────────────────────────────────────────────────╯ +% ──────────────────────────────────────────────────────────────────── + +% Definitions +\newtcolorbox{definition}[2][]{mainboxstyle,colback=blue!5!white,colframe=blue!75!black,colbacktitle=blue!75!black,title={\large #2},overlay={\node[overlaystyle,draw=blue!75!black,fill=blue!75!black] at (frame.north east) {\large Definition\usenumberArabic{definition}};},#1} + +% Theorems +\newtcolorbox{theorem}[2][]{mainboxstyle,colback=ForestGreen!5!white,colframe=ForestGreen!75!black,colbacktitle=ForestGreen!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=ForestGreen!75!black,fill=ForestGreen!75!black] at (frame.north east) {\large \translate{Theorem}{\theoremde}\usenumberArabic{theorem}};},#1} + +% Lemmas +\newtcolorbox{lemma}[2][]{mainboxstyle,colback=Aquamarine!5!white,colframe=Aquamarine!75!black,colbacktitle=Aquamarine!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=Aquamarine!75!black,fill=Aquamarine!75!black] at (frame.north east) {\large Lemma\usenumberArabic{lemma}};},#1} + +% Corollaries +\newtcolorbox{corollary}[2][]{mainboxstyle,colback=teal!5!white,colframe=teal!75!black,colbacktitle=teal!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=teal!75!black,fill=teal!75!black] at (frame.north east) {\large \translate{Corollary}{Korollar}\usenumberArabic{corollary}};},#1} + +% Axioms +\newtcolorbox{axiom}[2][]{mainboxstyle,colback=JungleGreen!5!white,colframe=JungleGreen!75!black,colbacktitle=JungleGreen!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=JungleGreen!75!black,fill=JungleGreen!75!black] at (frame.north east) {\large Axiom\usenumberArabic{axiom}};},#1} + +% Facts +\newtcolorbox{fact}[2][]{mainboxstyle,colback=SeaGreen!5!white,colframe=SeaGreen!75!black,colbacktitle=SeaGreen!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=SeaGreen!75!black,fill=SeaGreen!75!black] at (frame.north east) {\large \translate{Fact}{Fakt}\usenumberArabic{fact}};},#1} + +% Propositions +\newtcolorbox{proposition}[2][]{mainboxstyle,colback=Cyan!5!white,colframe=Cyan!75!black,colbacktitle=Cyan!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=Cyan!75!black,fill=Cyan!75!black] at (frame.north east) {\large Proposition\usenumberArabic{proposition}};},#1} + +% Examples +\newtcolorbox{example}[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{Example}{Beispiel}\usenumberArabic{example}};},#1} + +% Formula +\newtcolorbox{formula}[2][]{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 \translate{Formula}{Formel}\usenumberArabic{formula}};},#1} + +% Remark +\newtcolorbox{remark}[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{Remark}{Bemerkung} \usenumberArabic{remark}};},#1} + + +% ──────────────────────────────────────────────────────────────────── +% ╭────────────────────────────────────────────────╮ +% │ Inline environments │ +% ╰────────────────────────────────────────────────╯ +% ──────────────────────────────────────────────────────────────────── + + +% Inline environments (inline) +\newcommand{\inlineex}{\bg{gray}{\translate{Example}{Beispiel}\usenumberArabic{example}:}} +\newcommand{\inlinedef}{\bg{blue}{Definition\usenumberArabic{definition}:}} +\newcommand{\inlineformula}{\bg{red}{\translate{Formula}{Formel}\usenumberArabic{formula}:}} +\newcommand{\inlinelemma}{\bg{Aquamarine}{Lemma\usenumberArabic{lemma}:}} +\newcommand{\inlinetheorem}{\bg{ForestGreen}{\translate{Theorem}{\theoremde}\usenumberArabic{theorem}:}} +\newcommand{\inlineaxiom}{\bg{JungleGreen}{Axiom\usenumberArabic{axiom}:}} +\newcommand{\inlinecorollary}{\bg{teal}{\translate{Corollary}{Korollar}\usenumberArabic{corollary}:}} +\newcommand{\inlinefact}{\bg{SeaGreen}{\translate{Fact}{Fakt}\usenumberArabic{fact}:}} +\newcommand{\inlineproposition}{\bg{Cyan}{Proposition\usenumberArabic{proposition}:}} +\newcommand{\inlineremark}{\bg{green}{\translate{Remark}{Bemerkung}\usenumberArabic{remark}:}} +\newcommand{\inlineproof}{\bg{magenta}{\translate{Proof}{Beweis}:}} + +% Enhanced inline environments +\newcommand{\fancyex}[1]{\bg{gray}{\translate{Example}{Beispiel}\usenumberArabic{example}:} \textit{(#1)}} +\newcommand{\fancydef}[1]{\bg{blue}{Definition\usenumberArabic{definition}:} \textit{(#1)}} +\newcommand{\fancyformula}[1]{\bg{red}{\translate{Formula}{Formel}\usenumberArabic{formula}:} \textit{(#1)}} +\newcommand{\fancylemma}[1]{\bg{Aquamarine}{Lemma\usenumberArabic{lemma}:} \textit{(#1)}} +\newcommand{\fancytheorem}[1]{\bg{ForestGreen}{\translate{Theorem}{\theoremde}\usenumberArabic{theorem}:} \textit{(#1)}} +\newcommand{\fancyaxiom}[1]{\bg{JungleGreen}{Axiom\usenumberArabic{axiom}:} \textit{(#1)}} +\newcommand{\fancycorollary}[1]{\bg{teal}{\translate{Corollary}{Korollar}\usenumberArabic{corollary}:} \textit{(#1)}} +\newcommand{\fancyfact}[1]{\bg{SeaGreen}{\translate{Fact}{Fakt}\usenumberArabic{fact}:} \textit{(#1)}} +\newcommand{\fancyproposition}[1]{\bg{Cyan}{Proposition\usenumberArabic{proposition}:} \textit{(#1)}} +\newcommand{\fancyremark}[1]{\bg{green}{\translate{Remark}{Bemerkung}\usenumberArabic{remark}:} \textit{(#1)}} +\newcommand{\fancyproof}[1]{\bg{magenta}{\translate{Proof}{Beweis}: \textit{(#1)}}} + +% short environments (abbreviated) +\newcommand{\shortex}{\bg{gray}{\translate{Ex}{Bsp}\usenumberArabic{example}:}} +\newcommand{\shortdef}{\bg{blue}{D\usenumberArabic{definition}:}} +\newcommand{\short}{\bg{red}{F\usenumberArabic{formula}:}} +\newcommand{\shortlemma}{\bg{Aquamarine}{L\usenumberArabic{lemma}:}} +\newcommand{\shorttheorem}{\bg{ForestGreen}{\translate{T}{\StrMid{\theoremde}{1}{1}}\usenumberArabic{theorem}:}} +\newcommand{\shortaxiom}{\bg{JungleGreen}{A\usenumberArabic{axiom}:}} +\newcommand{\shortcorollary}{\bg{teal}{\translate{C}{K}\usenumberArabic{corollary}:}} +\newcommand{\shortfact}{\bg{SeaGreen}{F\usenumberArabic{fact}:}} +\newcommand{\shortproposition}{\bg{Cyan}{P\usenumberArabic{proposition}:}} +\newcommand{\shortremark}{\bg{green}{\tr{R}{B}\usenumberArabic{remark}:}} +\newcommand{\shortproof}{\bg{magenta}{\translate{Proof}{Beweis}:}} + +% Enhanced short environments (abbreviated) +\newcommand{\compactex}[1]{\bg{gray}{\translate{Ex}{Bsp}\usenumberArabic{example}:} \textit{(#1)}} +\newcommand{\compactdef}[1]{\bg{blue}{D\usenumberArabic{definition}:} \textit{(#1)}} +\newcommand{\compactformula}[1]{\bg{red}{F\usenumberArabic{formula}:} \textit{(#1)}} +\newcommand{\compactlemma}[1]{\bg{Aquamarine}{L\usenumberArabic{lemma}:} \textit{(#1)}} +\newcommand{\compacttheorem}[1]{\bg{ForestGreen}{\translate{T}{\StrMid{\theoremde}{1}{1}} \usenumberArabic{theorem}:} \textit{(#1)}} +\newcommand{\compactaxiom}[1]{\bg{JungleGreen}{A\usenumberArabic{axiom}:} \textit{(#1)}} +\newcommand{\compactcorollary}[1]{\bg{teal}{\translate{C}{K}\usenumberArabic{corollary}:} \textit{(#1)}} +\newcommand{\compactfact}[1]{\bg{SeaGreen}{F\usenumberArabic{fact}:} \textit{(#1)}} +\newcommand{\compactproposition}[1]{\bg{Cyan}{P\usenumberArabic{proposition}:} \textit{(#1)}} +\newcommand{\compactremark}[1]{\bg{green}{\tr{R}{B}\usenumberArabic{remark}:} \textit{(#1)}} +\newcommand{\compactproof}[1]{\bg{magenta}{\translate{Proof}{Beweis}: \textit{(#1)}}} + +% ▄▄ +% ▄▄█▀▀▀█▄█ ██ ▄█▀▀▀█▄█ ██ +% ▄██▀ ▀█ ██ ▄██ ▀█ +% ██▀ ▀ ▄██▀██▄▀████████▄█████▄ ▀████████▄▀███ ▀███ ██████ ▄▄█▀██▀███▄███ ▀███▄ ▄██▀██▀███ ▄▄█▀██▀████████▄ ▄██▀██ ▄▄█▀██ +% ██ ██▀ ▀██ ██ ██ ██ ██ ▀██ ██ ██ ██ ▄█▀ ██ ██▀ ▀▀ ▀█████▄█▀ ██ ██ ▄█▀ ██ ██ ██ ██▀ ██ ▄█▀ ██ +% ██▄ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀▀▀▀▀ ██ ▄ ▀███ ██ ██▀▀▀▀▀▀ ██ ██ ██ ██▀▀▀▀▀▀ +% ▀██▄ ▄▀██▄ ▄██ ██ ██ ██ ██ ▄██ ██ ██ ██ ██▄ ▄ ██ ██ ███▄ ▄ ██ ██▄ ▄ ██ ██ ██▄ ▄██▄ ▄ +% ▀▀█████▀ ▀█████▀▄████ ████ ████▄ ██████▀ ▀████▀███▄ ▀████ ▀█████▀████▄ █▀█████▀ █████▀▄████▄ ▀█████▀████ ████▄█████▀ ▀█████▀ +% ██ +% ▄████▄ + +\usepackage{forest} +\tikzset{algpxIndentLine/.style={draw=lightgray}} +\algrenewcommand{\alglinenumber}[1]{#1} + +\newenvironment{algo}[1]{ + \begin{algorithm} + \begin{spacing}{1.2} + \caption{\textsc{#1}} + \begin{algorithmic}[1] + }{ + \end{algorithmic} + \end{spacing} + \end{algorithm} +} + +% • ▌ ▄ ·. ▄▄▄· ▄▄▄▄▄ ▄ .▄ .▄▄ · ▄▄▄▄▄ ▄· ▄▌▄▄▌ ▄▄▄ . +% ·██ ▐███▪▐█ ▀█ •██ ██▪▐█ ▐█ ▀. •██ ▐█▪██▌██• ▀▄.▀· +% ▐█ ▌▐▌▐█·▄█▀▀█ ▐█.▪██▀▀█ ▄▀▀▀█▄ ▐█.▪▐█▌▐█▪██ ▪ ▐▀▀▪▄ +% ██ ██▌▐█▌▐█▪ ▐▌ ▐█▌·██▌▐▀ ▐█▄▪▐█ ▐█▌· ▐█▀·.▐█▌ ▄▐█▄▄▌ +% ▀▀ █▪▀▀▀ ▀ ▀ ▀▀▀ ▀▀▀ · ▀▀▀▀ ▀▀▀ ▀ • .▀▀▀ ▀▀▀ + +% Replace some commonly used commands with better ones +\renewcommand{\vec}[1]{\overrightarrow{#1}} +\renewcommand{\hat}[1]{\widehat{#1}} +\renewcommand{\tilde}[1]{\widetilde{#1}} +\newcommand{\proven}{$\hspace{17cm}\square$} + + +% ░█▒░▒▄▀▄░█▄░█░▄▀▒░█▒█▒▄▀▄░▄▀▒▒██▀░░░▄▀▀░▀█▀░▀▄▀░█▒░▒██▀ +% ▒█▄▄░█▀█░█▒▀█░▀▄█░▀▄█░█▀█░▀▄█░█▄▄▒░▒▄██░▒█▒░▒█▒▒█▄▄░█▄▄ + +% Specific styles for language summaries and docs +\newtcolorbox{conjugation}[2][]{mainboxstyle,colback=blue!5!white,colframe=blue!75!black,colbacktitle=blue!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=blue!75!black,fill=blue!75!black] at (frame.north east) {\large \translate{Conjugation}{Konjugation}};},#1} + +\newtcolorbox{forms}[2][]{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 \translate{Forms}{Formen}};},#1} + +% ___ _ _____ _ _ +% ( _ \ _( ) (_ _) ( ) ( ) +% | (_) )_) |_ | | __ \ \/ / +% | _ (| | _ \ | | / __ \ ) ( +% | (_) ) | |_) ) | | ( ___// /\ \ +% (____/(_)_ __/ (_) \____)_) (_) + +% Configs if you want to use BibTeX. Not included in any default configs. + +\newcommand{\setupBibtex}[1]{ + \usepackage{biblatex} + \usepackage[nottoc, numbib]{tocbibind} + \addbibresource{#1} +} + +\newcommand{\printbib}{ + \addcontentsline{toc}{section}{\translate{Sources}{Quellen}} + \printbibliography[title=\translate{Sources}{Quellen}] +} + + +%░▒█▀▀█░█░░▄▀▀▄░█▀▀░█▀▀░█▀▀▄░█▀▀▄░█░░█ +%░▒█░▄▄░█░░█░░█░▀▀▄░▀▀▄░█▄▄█░█▄▄▀░█▄▄█ +%░▒█▄▄▀░▀▀░░▀▀░░▀▀▀░▀▀▀░▀░░▀░▀░▀▀░▄▄▄▀ + +% Add glossaries functionality + +\newcommand{\setupGlossary}{ + \usepackage[nonumberlist, toc]{glossaries} + \usepackage[nottoc, numbib]{tocbibind} + \makenoidxglossaries +} + +\newcommand{\printGlossary}{ + \glsaddall + \printnoidxglossaries +} + +\usepackage{minted} +\usepackage{fancyvrb} + +\newcommand{\inlinecode}[1]{\shade{gray}{\texttt{#1}}} + +\newenvironment{code}[1]{ + \VerbatimEnvironment + \begin{minted}[ + autogobble, + breaklines, + breakindentnchars=2, + frame=lines, + framesep=2mm, + mathescape, + baselinestretch=1.1, + linenos]{#1}} +{\end{minted}} diff --git a/dist/janishutz-helpers-letters.sty b/dist/janishutz-helpers-letters.sty new file mode 100644 index 0000000..681290b --- /dev/null +++ b/dist/janishutz-helpers-letters.sty @@ -0,0 +1,32 @@ +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} + +\setkomavar{date}{\city, \today} + +\newkomavar{fromplace} % a few koma vars +\setkomavar{fromname}{\name} +\setkomavar{fromaddress}{\street} +\setkomavar{fromplace}{\countrycode -\city} + +\KOMAoptions{foldmarks=off,fromrule=false} +\setkomavar{backaddress}{} + +\makeatletter % indention of the address fields +\setplength{toaddrhpos}{27mm} +\setplength{toaddrwidth}{92mm} +\setplength{sigindent}{0mm} +\makeatother + +\renewcommand*{\raggedsignature}{\raggedright} + +% Define new letter header +\setkomavar{firsthead}{ + \null\hfill + \parbox[t][\headheight][t]{4cm}{% + \vspace*{2cm} + + \usekomavar{fromname} \newline + \usekomavar{fromaddress} \newline + \usekomavar{fromplace} + } +}% diff --git a/dist/janishutz-helpers-minimal.sty b/dist/janishutz-helpers-minimal.sty new file mode 100644 index 0000000..52b131e --- /dev/null +++ b/dist/janishutz-helpers-minimal.sty @@ -0,0 +1,372 @@ +\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} diff --git a/dist/janishutz-helpers-recommended.sty b/dist/janishutz-helpers-recommended.sty new file mode 100644 index 0000000..a6ead4b --- /dev/null +++ b/dist/janishutz-helpers-recommended.sty @@ -0,0 +1,1003 @@ +\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} + +% ▄▄ +% ▀████▄ ▄███▀ ██ ███ +% ████ ████ ██ ██ +% █ ██ ▄█ ██ ▄█▀██▄ ██████ ███████▄ +% █ ██ █▀ ██ ██ ██ ██ ██ ██ +% █ ██▄█▀ ██ ▄█████ ██ ██ ██ +% █ ▀██▀ ██ ██ ██ ██ ██ ██ +% ▄███▄ ▀▀ ▄████▄████▀██▄ ▀███████ ████▄ + + +% BB shortcuts (for number spaces, etc) +\newcommand{\C}{\mathbb{C}} +\newcommand{\D}{\mathbb{D}} +\newcommand{\E}{\mathbb{E}} +\newcommand{\I}{\mathbb{I}} +\newcommand{\J}{\mathbb{J}} +\newcommand{\N}{\mathbb{N}} +\newcommand{\Q}{\mathbb{Q}} +\newcommand{\R}{\mathbb{R}} +\newcommand{\V}{\mathbb{V}} +\newcommand{\Z}{\mathbb{Z}} + +% Caligraphic +\newcommand{\cA}{\mathcal{A}} +\newcommand{\cB}{\mathcal{B}} +\newcommand{\cC}{\mathcal{C}} +\newcommand{\cD}{\mathcal{D}} +\newcommand{\cE}{\mathcal{E}} +\newcommand{\cF}{\mathcal{F}} +\newcommand{\cG}{\mathcal{G}} +\newcommand{\cH}{\mathcal{H}} +\newcommand{\cI}{\mathcal{I}} +\newcommand{\cJ}{\mathcal{J}} +\newcommand{\cK}{\mathcal{K}} +\newcommand{\cL}{\mathcal{L}} +\newcommand{\cM}{\mathcal{M}} +\newcommand{\cN}{\mathcal{N}} +\newcommand{\cO}{\mathcal{O}} +\newcommand{\cP}{\mathcal{P}} +\newcommand{\cQ}{\mathcal{Q}} +\newcommand{\cR}{\mathcal{R}} +\newcommand{\cS}{\mathcal{S}} +\newcommand{\cT}{\mathcal{T}} +\newcommand{\cU}{\mathcal{U}} +\newcommand{\cV}{\mathcal{V}} +\newcommand{\cW}{\mathcal{W}} +\newcommand{\cX}{\mathcal{X}} +\newcommand{\cY}{\mathcal{Y}} +\newcommand{\cZ}{\mathcal{Z}} + +% other useful shortcuts +\newcommand{\8}{\infty} +\newcommand{\dx}{\text{ d}} +\newcommand{\floor}[1]{\left\lfloor #1 \right\rfloor} +\newcommand{\ceil}[1]{\left\lceil #1 \right\rceil} +\newcommand{\hastoeq}{\overset{!}{=}} +\newcommand{\Leftrightarrowequiv}{\overset{\cdot}{\Leftrightarrow}} +\newcommand{\Longleftrightarrowequiv}{\overset{\cdot}{\Longleftrightarrow}} +\newcommand{\Rightarrowequiv}{\overset{\cdot}{\Rightarrow}} +\newcommand{\Leftarrowequiv}{\overset{\cdot}{\Leftarrow}} +\newcommand{\defAs}{\overset{\text{def}}{=}} +\newcommand{\der}[1]{\frac{\mbox{d}}{\mbox{d}#1}} +\newcommand{\dern}[2]{\frac{\mbox{d}^{#2}}{\mbox{d}^{#2}#1}} +\newcommand{\parder}[1]{\frac{\partial}{\partial #1}} +\newcommand{\pardern}[2]{\frac{\partial^{#2}}{\partial^{#2} #1}} +\newcommand{\defEquiv}{\overset{\text{def}}{\Leftrightarrow}} +\newcommand{\defImplies}{\overset{\text{def}}{\Rightarrow}} +\newcommand{\divides}{\hspace{0.25em}|\hspace{0.25em}} +\newcommand{\mbeq}{\overset{!}{=}} +\newcommand{\lcm}{\text{lcm}} +\newcommand{\limit}[2]{\lim_{#1 \rightarrow #2}} +\newcommand{\seq}[1]{(#1_n)_{n \geq 1}} +\newcommand{\ser}[2]{\sum_{k = 1}^{#2} #1_k} +\newcommand{\limni}{\limit{n}{\infty}} +\newcommand{\limnz}{\limit{n}{0}} +\newcommand{\limxz}{\limit{x_0}{0}} +\newcommand{\limhz}{\limit{h}{0}} +\newcommand{\liminfni}{\liminf_{n \rightarrow \infty}} +\newcommand{\limsupni}{\limsup_{n \rightarrow \infty}} +\newcommand{\elementstack}[2]{\genfrac{}{}{0pt}{}{#1}{#2}} +\DeclareMathOperator\arctanh{arctanh} +\DeclareMathOperator\arccosh{arccosh} +\DeclareMathOperator\arcsinh{arcsinh} + + +% ░▒█▀▀▄░▄▀▀▄░█▀▄▀█░▄▀▀▄░█░▒█░▀█▀░█▀▀░█▀▀▄░░░▒█▀▀▀█░█▀▄░░▀░░█▀▀░█▀▀▄░█▀▄░█▀▀ +% ░▒█░░░░█░░█░█░▀░█░█▄▄█░█░▒█░░█░░█▀▀░█▄▄▀░░░░▀▀▀▄▄░█░░░░█▀░█▀▀░█░▒█░█░░░█▀▀ +% ░▒█▄▄▀░░▀▀░░▀░░▒▀░█░░░░░▀▀▀░░▀░░▀▀▀░▀░▀▀░░░▒█▄▄▄█░▀▀▀░▀▀▀░▀▀▀░▀░░▀░▀▀▀░▀▀▀ + +% Extra imports +\RequirePackage{stmaryrd} +\RequirePackage{algorithm} +\RequirePackage{algpseudocodex} +\RequirePackage{setspace} +\RequirePackage{verbatim} +\RequirePackage{turnstile} +\RequirePackage{forloop} + +\newcommand{\Indent}{\hspace{\algorithmicindent}} + +\newcommand{\timecomplexity}{\fhlc{orange}{\ifnum\value{lang}<2{Time complexity}\else {Laufzeit}\fi} \hspace{0.5em}} +\newcommand{\tc}[1]{\timecomplexity $\Theta\left(#1\right)$} +\newcommand{\tct}[1]{\Theta\left(#1\right)} +\newcommand{\tco}[1]{\mathcal{O}\left(#1\right)} +\newcommand{\tcl}[1]{\Omega\left(#1\right)} +\newcommand{\wordbool}{(\Sigma_{\text{bool}})^*} +\newcommand{\words}[1]{(\Sigma_{\text{#1}})^*} +\newcommand{\word}{\Sigma^*} +\newcommand{\wordm}[1]{\Sigma_{\text{#1}}^*} +\newcommand{\alphabets}[1]{\Sigma_{\text{#1}}} +\newcommand{\alphabetbool}{\Sigma_{\text{bool}}} +\newcommand{\tR}{\text{R}} +\newcommand{\tC}{\text{C}} +\newcommand{\tN}{\text{N}} +\newcommand{\bigvdash}[2]{\sststile{#1}{#2}} +\newcommand{\class}{\text{\tr{Cl}{Kl}}} + +% ▄▄ +% ▀████▀ ▀███ +% ██ ██ +% ██ ▀████████▄ ▄█▀▀███ ▄▄█▀██▀██▀ ▀██▀ +% ██ ██ ██ ▄██ ██ ▄█▀ ██ ▀██ ▄█▀ +% ██ ██ ██ ███ ██ ██▀▀▀▀▀▀ ███ +% ██ ██ ██ ▀██ ██ ██▄ ▄ ▄█▀ ██▄ +% ▄████▄████ ████▄ ▀████▀███▄ ▀█████▀██▄ ▄██▄ + + +% For using index package +\newcommand{\prepareIndex}{ + \RequirePackage[T1]{fontenc} + \RequirePackage{imakeidx} + \makeindex +} + +\newcommand{\addIndexBold}[1]{\textbf{\index{\MakeLowercase{#1}} #1}} +\newcommand{\addIndexItalic}[1]{\textit{\index{\MakeLowercase{#1}} #1}} +\newcommand{\addIndex}[1]{\index{\MakeLowercase{#1}} #1} + + + +% ▄▄· ▄• ▄▌ ▐ ▄ ▄▄▄▄▄▄▄▄ .▄▄▄ +% ▐█ ▌▪ ▄█▀▄ █▪██▌•█▌▐█•██ ▀▄.▀·▀▄ █· +% ██ ▄▄▐█▌.▐▌█▌▐█▌▐█▐▐▌ ▐█.▪▐▀▀▪▄▐▀▀▄ +% ▐███▌▐█▌.▐▌▐█▄█▌██▐█▌ ▐█▌·▐█▄▄▌▐█•█▌ +% ·▀▀▀ ▀█▄▀▪ ▀▀▀ ▀▀ █▪ ▀▀▀ ▀▀▀ .▀ ▀ + +\RequirePackage{xstring} +\RequirePackage{etoolbox} +% tcolorbox and other stylistic elements (i.e. inline versions of them) that have counters +\newcounter{lemma}[section] +\newcounter{definition}[section] +\newcounter{corollary}[section] +\newcounter{theorem}[section] +\newcounter{axiom}[section] +\newcounter{example}[section] +\newcounter{fact}[section] +\newcounter{proposition}[section] +\newcounter{formula}[section] +\newcounter{remark}[section] +\newcounter{all}[section] + +\newcounter{lemmass}[subsection] +\newcounter{definitionss}[subsection] +\newcounter{corollaryss}[subsection] +\newcounter{theoremss}[subsection] +\newcounter{axiomss}[subsection] +\newcounter{exampless}[subsection] +\newcounter{factss}[subsection] +\newcounter{propositionss}[subsection] +\newcounter{formulass}[subsection] +\newcounter{remarkss}[subsection] +\newcounter{allss}[subsection] + +\newcounter{lemmasss}[subsubsection] +\newcounter{definitionsss}[subsubsection] +\newcounter{corollarysss}[subsubsection] +\newcounter{theoremsss}[subsubsection] +\newcounter{axiomsss}[subsubsection] +\newcounter{examplesss}[subsubsection] +\newcounter{factsss}[subsubsection] +\newcounter{propositionsss}[subsubsection] +\newcounter{formulasss}[subsubsection] +\newcounter{remarksss}[subsubsection] +\newcounter{allsss}[subsubsection] + +% Set the current number of a label +\newcommand{\setLabelNumber}[2]{% + \setcounter{#1}{#2}% + \addtocounter{#1}{-1}% + \setcounter{#1ss}{#2}% + \addtocounter{#1ss}{-1}% + \setcounter{#1sss}{#2}% + \addtocounter{#1sss}{-1}% +} + +\newcommand{\stepLabelNumber}[1]{% + \stepcounter{#1}% + \stepcounter{#1ss}% + \stepcounter{#1sss}% +} + +\newcommand{\printcounter}[1]{% + \csname the#1\endcsname +} + +\newcommand{\suffix}{ss} +\newcommand{\sectionNumbering}{\thesection} + +% ┌ ┐ +% │ Counter numbering │ +% └ ┘ +\newcommand{\preTableAndFigHook}[1]{% + \ifnum\value{numberingConfig}>1 + \ifnum\value{numberSubsections}=1 + \stepcounter{allss} + \else + \ifnum\value{numberSubsections}=2 + \stepcounter{allsss} + \else + \stepcounter{all} + \fi + \fi + \fi +} +\AtBeginEnvironment{table}{\preTableAndFigHook{table}} +\AtBeginEnvironment{figure}{\preTableAndFigHook{figure}} + +\newcommand{\applyTableAndFigureNumbering}{ + % Tables & Figures + \ifnum\value{numberingConfig}=0 + \renewcommand{\thetable}{} + \renewcommand{\thefigure}{} + \else + \ifnum\value{numberingConfig}=1 + \renewcommand{\thetable}{\sectionNumbering.\arabic{table}} + \renewcommand{\thefigure}{\sectionNumbering.\arabic{figure}} + \else + \ifnum\value{numberSubsections}=1 + \renewcommand{\thetable}{\sectionNumbering.\arabic{allss}} + \renewcommand{\thefigure}{\sectionNumbering.\arabic{allss}} + \else + \ifnum\value{numberSubsections}=2 + \renewcommand{\thetable}{\refstepcounter{allsss}\sectionNumbering.\arabic{allsss}} + \renewcommand{\thefigure}{\sectionNumbering.\arabic{allsss}} + \else + \renewcommand{\thetable}{\sectionNumbering.\arabic{all}} + \renewcommand{\thefigure}{\sectionNumbering.\arabic{all}} + \fi + \fi + \fi + \fi +} + +\newcommand{\setSubsectionNumbering}[1]{ + \setcounter{numberSubsections}{#1} + \applySubsectionNumbering +} + +\newcommand{\applySubsectionNumbering}{ + \ifnum\value{numberSubsections}=1 + \renewcommand{\sectionNumbering}{\thesubsection} + \renewcommand{\suffix}{ss} + \typeout{Numbering as section.subsection.number} + \else + \ifnum\value{numberSubsections}=2 + \renewcommand{\sectionNumbering}{\thesubsubsection} + \renewcommand{\suffix}{sss} + \typeout{Numbering as section.subsection.subsubsection.number} + \else + \renewcommand{\sectionNumbering}{\thesection} + \renewcommand{\suffix}{} + \typeout{Numbering as section.number} + \fi + \fi + \applyTableAndFigureNumbering + + \renewcommand{\thelemma}{\sectionNumbering.\arabic{lemma}} + \renewcommand{\thedefinition}{\sectionNumbering.\arabic{definition}} + \renewcommand{\thecorollary}{\sectionNumbering.\arabic{corollary}} + \renewcommand{\thetheorem}{\sectionNumbering.\arabic{theorem}} + \renewcommand{\theaxiom}{\sectionNumbering.\arabic{axiom}} + \renewcommand{\theexample}{\sectionNumbering.\arabic{example}} + \renewcommand{\thefact}{\sectionNumbering.\arabic{fact}} + \renewcommand{\theproposition}{\sectionNumbering.\arabic{proposition}} + \renewcommand{\theformula}{\sectionNumbering.\arabic{formula}} + \renewcommand{\theremark}{\sectionNumbering.\arabic{remark}} + \renewcommand{\theall}{\sectionNumbering.\arabic{all}} + + \renewcommand{\thelemmass}{\sectionNumbering.\arabic{lemmass}} + \renewcommand{\thedefinitionss}{\sectionNumbering.\arabic{definitionss}} + \renewcommand{\thecorollaryss}{\sectionNumbering.\arabic{corollaryss}} + \renewcommand{\thetheoremss}{\sectionNumbering.\arabic{theoremss}} + \renewcommand{\theaxiomss}{\sectionNumbering.\arabic{axiomss}} + \renewcommand{\theexampless}{\sectionNumbering.\arabic{exampless}} + \renewcommand{\thefactss}{\sectionNumbering.\arabic{factss}} + \renewcommand{\thepropositionss}{\sectionNumbering.\arabic{propositionss}} + \renewcommand{\theformulass}{\sectionNumbering.\arabic{formulass}} + \renewcommand{\theremarkss}{\sectionNumbering.\arabic{remarkss}} + \renewcommand{\theallss}{\sectionNumbering.\arabic{allss}} + + \renewcommand{\thelemmasss}{\sectionNumbering.\arabic{lemmasss}} + \renewcommand{\thedefinitionsss}{\sectionNumbering.\arabic{definitionsss}} + \renewcommand{\thecorollarysss}{\sectionNumbering.\arabic{corollarysss}} + \renewcommand{\thetheoremsss}{\sectionNumbering.\arabic{theoremsss}} + \renewcommand{\theaxiomsss}{\sectionNumbering.\arabic{axiomsss}} + \renewcommand{\theexamplesss}{\sectionNumbering.\arabic{examplesss}} + \renewcommand{\thefactsss}{\sectionNumbering.\arabic{factsss}} + \renewcommand{\thepropositionsss}{\sectionNumbering.\arabic{propositionsss}} + \renewcommand{\theformulasss}{\sectionNumbering.\arabic{formulasss}} + \renewcommand{\theremarksss}{\sectionNumbering.\arabic{remarksss}} + \renewcommand{\theallsss}{\sectionNumbering.\arabic{allsss}} +} +\applySubsectionNumbering + +% ── Label generation ──────────────────────────────────────────────── +\newcommand{\labelSectionGeneration}{% + \ifnum\value{numberSubsections}=1 + \arabic{section}-\arabic{subsection}% + \else + \ifnum\value{numberSubsections}=2 + \arabic{section}-\arabic{subsection}-\arabic{subsubsection}% + \else + \arabic{section}% + \fi + \fi} + +\newcommand{\labelIt}[1]{\refstepcounter{#1\suffix}\edef\tempLabel{\genLabel{#1}{\arabic{#1\suffix}}}\label{\tempLabel}} +\newcommand{\genLabel}[2]{#1:\labelSectionGeneration-#2} + +% ┌ ┐ +% │ Number the counters appropriately │ +% └ ┘ +\newcommand{\usenumberArabic}[1]{% + \ifnum\value{numberingConfig}=1 + \labelIt{#1} + \printcounter{#1\suffix}% + \else + \ifnum\value{numberingConfig}=2 + \ifthenelse{\equal{#1}{definitions}}{% + \labelIt{definition} + \printcounter{definition\suffix}% + }{% + \labelIt{all} + \printcounter{all\suffix}% + }% + \else + \ifnum\value{numberingConfig}=3 + \labelIt{all} + \printcounter{all\suffix}% + \else + \relax% + \fi + \fi + \fi} + + +% ──────────────────────────────────────────────────────────────────── +% ┌ ┐ +% │ Enable or disable numbering │ +% └ ┘ +% Initialize with config file +\newcounter{numberingConfigStore} +\setcounter{numberingConfigStore}{\value{numberingConfig}} + +% For later change +\newcommand{\setNumberingStyle}[1]{ + \typeout{Setting NumberingStyle to #1} + \setcounter{numberingConfig}{#1} + \ifthenelse{\equal{#1}{0}}{}{ + \setcounter{numberingConfigStore}{#1} + } + \applyTableAndFigureNumbering +} + +% Enable / disable numbering +\newcommand{\numberingOff}{ + \setcounter{numberingConfig}{0} + \applyTableAndFigureNumbering +} +\newcommand{\numberingOn}{ + \setcounter{numberingConfig}{\value{numberingConfigStore}} + \applyTableAndFigureNumbering +} + +% ──────────────────────────────────────────────────────────────────── +% ╭────────────────────────────────────────────────╮ +% │ Reset definition, lemma, etc counters, add a │ +% │ new page │ +% ╰────────────────────────────────────────────────╯ +\newcommand{\newsection}{ + \newpage + \newsectionNoPB +} + +% ── Reset definitions, lemma, etc counters, do not add new page ───── +\newcommand{\newsectionNoPB}{ + \setcounter{lemma}{0} + \setcounter{definition}{0} + \setcounter{corollary}{0} + \setcounter{theorem}{0} + \setcounter{axiom}{0} + \setcounter{example}{0} + \setcounter{fact}{0} + \setcounter{proposition}{0} + \setcounter{formula}{0} + \setcounter{remark}{0} + \setcounter{all}{0} + + \setcounter{lemmass}{0} + \setcounter{definitionss}{0} + \setcounter{corollaryss}{0} + \setcounter{theoremss}{0} + \setcounter{axiomss}{0} + \setcounter{exampless}{0} + \setcounter{factss}{0} + \setcounter{propositionss}{0} + \setcounter{formulass}{0} + \setcounter{remarkss}{0} + \setcounter{allss}{0} + + \setcounter{lemmasss}{0} + \setcounter{definitionsss}{0} + \setcounter{corollarysss}{0} + \setcounter{theoremsss}{0} + \setcounter{axiomsss}{0} + \setcounter{examplesss}{0} + \setcounter{factsss}{0} + \setcounter{propositionsss}{0} + \setcounter{formulasss}{0} + \setcounter{remarksss}{0} + \setcounter{allsss}{0} + + % Tables & Figures + \setcounter{table}{0} + \setcounter{figure}{0} +} +\newsectionNoPB % Initializes + + +% ──────────────────────────────────────────────────────────────────── +% ╭────────────────────────────────────────────────╮ +% │ Tcolorboxes │ +% ╰────────────────────────────────────────────────╯ +% ──────────────────────────────────────────────────────────────────── + +% Definitions +\newtcolorbox{definition}[2][]{mainboxstyle,colback=blue!5!white,colframe=blue!75!black,colbacktitle=blue!75!black,title={\large #2},overlay={\node[overlaystyle,draw=blue!75!black,fill=blue!75!black] at (frame.north east) {\large Definition\usenumberArabic{definition}};},#1} + +% Theorems +\newtcolorbox{theorem}[2][]{mainboxstyle,colback=ForestGreen!5!white,colframe=ForestGreen!75!black,colbacktitle=ForestGreen!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=ForestGreen!75!black,fill=ForestGreen!75!black] at (frame.north east) {\large \translate{Theorem}{\theoremde}\usenumberArabic{theorem}};},#1} + +% Lemmas +\newtcolorbox{lemma}[2][]{mainboxstyle,colback=Aquamarine!5!white,colframe=Aquamarine!75!black,colbacktitle=Aquamarine!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=Aquamarine!75!black,fill=Aquamarine!75!black] at (frame.north east) {\large Lemma\usenumberArabic{lemma}};},#1} + +% Corollaries +\newtcolorbox{corollary}[2][]{mainboxstyle,colback=teal!5!white,colframe=teal!75!black,colbacktitle=teal!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=teal!75!black,fill=teal!75!black] at (frame.north east) {\large \translate{Corollary}{Korollar}\usenumberArabic{corollary}};},#1} + +% Axioms +\newtcolorbox{axiom}[2][]{mainboxstyle,colback=JungleGreen!5!white,colframe=JungleGreen!75!black,colbacktitle=JungleGreen!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=JungleGreen!75!black,fill=JungleGreen!75!black] at (frame.north east) {\large Axiom\usenumberArabic{axiom}};},#1} + +% Facts +\newtcolorbox{fact}[2][]{mainboxstyle,colback=SeaGreen!5!white,colframe=SeaGreen!75!black,colbacktitle=SeaGreen!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=SeaGreen!75!black,fill=SeaGreen!75!black] at (frame.north east) {\large \translate{Fact}{Fakt}\usenumberArabic{fact}};},#1} + +% Propositions +\newtcolorbox{proposition}[2][]{mainboxstyle,colback=Cyan!5!white,colframe=Cyan!75!black,colbacktitle=Cyan!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=Cyan!75!black,fill=Cyan!75!black] at (frame.north east) {\large Proposition\usenumberArabic{proposition}};},#1} + +% Examples +\newtcolorbox{example}[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{Example}{Beispiel}\usenumberArabic{example}};},#1} + +% Formula +\newtcolorbox{formula}[2][]{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 \translate{Formula}{Formel}\usenumberArabic{formula}};},#1} + +% Remark +\newtcolorbox{remark}[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{Remark}{Bemerkung} \usenumberArabic{remark}};},#1} + + +% ──────────────────────────────────────────────────────────────────── +% ╭────────────────────────────────────────────────╮ +% │ Inline environments │ +% ╰────────────────────────────────────────────────╯ +% ──────────────────────────────────────────────────────────────────── + + +% Inline environments (inline) +\newcommand{\inlineex}{\bg{gray}{\translate{Example}{Beispiel}\usenumberArabic{example}:}} +\newcommand{\inlinedef}{\bg{blue}{Definition\usenumberArabic{definition}:}} +\newcommand{\inlineformula}{\bg{red}{\translate{Formula}{Formel}\usenumberArabic{formula}:}} +\newcommand{\inlinelemma}{\bg{Aquamarine}{Lemma\usenumberArabic{lemma}:}} +\newcommand{\inlinetheorem}{\bg{ForestGreen}{\translate{Theorem}{\theoremde}\usenumberArabic{theorem}:}} +\newcommand{\inlineaxiom}{\bg{JungleGreen}{Axiom\usenumberArabic{axiom}:}} +\newcommand{\inlinecorollary}{\bg{teal}{\translate{Corollary}{Korollar}\usenumberArabic{corollary}:}} +\newcommand{\inlinefact}{\bg{SeaGreen}{\translate{Fact}{Fakt}\usenumberArabic{fact}:}} +\newcommand{\inlineproposition}{\bg{Cyan}{Proposition\usenumberArabic{proposition}:}} +\newcommand{\inlineremark}{\bg{green}{\translate{Remark}{Bemerkung}\usenumberArabic{remark}:}} +\newcommand{\inlineproof}{\bg{magenta}{\translate{Proof}{Beweis}:}} + +% Enhanced inline environments +\newcommand{\fancyex}[1]{\bg{gray}{\translate{Example}{Beispiel}\usenumberArabic{example}:} \textit{(#1)}} +\newcommand{\fancydef}[1]{\bg{blue}{Definition\usenumberArabic{definition}:} \textit{(#1)}} +\newcommand{\fancyformula}[1]{\bg{red}{\translate{Formula}{Formel}\usenumberArabic{formula}:} \textit{(#1)}} +\newcommand{\fancylemma}[1]{\bg{Aquamarine}{Lemma\usenumberArabic{lemma}:} \textit{(#1)}} +\newcommand{\fancytheorem}[1]{\bg{ForestGreen}{\translate{Theorem}{\theoremde}\usenumberArabic{theorem}:} \textit{(#1)}} +\newcommand{\fancyaxiom}[1]{\bg{JungleGreen}{Axiom\usenumberArabic{axiom}:} \textit{(#1)}} +\newcommand{\fancycorollary}[1]{\bg{teal}{\translate{Corollary}{Korollar}\usenumberArabic{corollary}:} \textit{(#1)}} +\newcommand{\fancyfact}[1]{\bg{SeaGreen}{\translate{Fact}{Fakt}\usenumberArabic{fact}:} \textit{(#1)}} +\newcommand{\fancyproposition}[1]{\bg{Cyan}{Proposition\usenumberArabic{proposition}:} \textit{(#1)}} +\newcommand{\fancyremark}[1]{\bg{green}{\translate{Remark}{Bemerkung}\usenumberArabic{remark}:} \textit{(#1)}} +\newcommand{\fancyproof}[1]{\bg{magenta}{\translate{Proof}{Beweis}: \textit{(#1)}}} + +% short environments (abbreviated) +\newcommand{\shortex}{\bg{gray}{\translate{Ex}{Bsp}\usenumberArabic{example}:}} +\newcommand{\shortdef}{\bg{blue}{D\usenumberArabic{definition}:}} +\newcommand{\short}{\bg{red}{F\usenumberArabic{formula}:}} +\newcommand{\shortlemma}{\bg{Aquamarine}{L\usenumberArabic{lemma}:}} +\newcommand{\shorttheorem}{\bg{ForestGreen}{\translate{T}{\StrMid{\theoremde}{1}{1}}\usenumberArabic{theorem}:}} +\newcommand{\shortaxiom}{\bg{JungleGreen}{A\usenumberArabic{axiom}:}} +\newcommand{\shortcorollary}{\bg{teal}{\translate{C}{K}\usenumberArabic{corollary}:}} +\newcommand{\shortfact}{\bg{SeaGreen}{F\usenumberArabic{fact}:}} +\newcommand{\shortproposition}{\bg{Cyan}{P\usenumberArabic{proposition}:}} +\newcommand{\shortremark}{\bg{green}{\tr{R}{B}\usenumberArabic{remark}:}} +\newcommand{\shortproof}{\bg{magenta}{\translate{Proof}{Beweis}:}} + +% Enhanced short environments (abbreviated) +\newcommand{\compactex}[1]{\bg{gray}{\translate{Ex}{Bsp}\usenumberArabic{example}:} \textit{(#1)}} +\newcommand{\compactdef}[1]{\bg{blue}{D\usenumberArabic{definition}:} \textit{(#1)}} +\newcommand{\compactformula}[1]{\bg{red}{F\usenumberArabic{formula}:} \textit{(#1)}} +\newcommand{\compactlemma}[1]{\bg{Aquamarine}{L\usenumberArabic{lemma}:} \textit{(#1)}} +\newcommand{\compacttheorem}[1]{\bg{ForestGreen}{\translate{T}{\StrMid{\theoremde}{1}{1}} \usenumberArabic{theorem}:} \textit{(#1)}} +\newcommand{\compactaxiom}[1]{\bg{JungleGreen}{A\usenumberArabic{axiom}:} \textit{(#1)}} +\newcommand{\compactcorollary}[1]{\bg{teal}{\translate{C}{K}\usenumberArabic{corollary}:} \textit{(#1)}} +\newcommand{\compactfact}[1]{\bg{SeaGreen}{F\usenumberArabic{fact}:} \textit{(#1)}} +\newcommand{\compactproposition}[1]{\bg{Cyan}{P\usenumberArabic{proposition}:} \textit{(#1)}} +\newcommand{\compactremark}[1]{\bg{green}{\tr{R}{B}\usenumberArabic{remark}:} \textit{(#1)}} +\newcommand{\compactproof}[1]{\bg{magenta}{\translate{Proof}{Beweis}: \textit{(#1)}}} + +% ▄▄ +% ▄▄█▀▀▀█▄█ ██ ▄█▀▀▀█▄█ ██ +% ▄██▀ ▀█ ██ ▄██ ▀█ +% ██▀ ▀ ▄██▀██▄▀████████▄█████▄ ▀████████▄▀███ ▀███ ██████ ▄▄█▀██▀███▄███ ▀███▄ ▄██▀██▀███ ▄▄█▀██▀████████▄ ▄██▀██ ▄▄█▀██ +% ██ ██▀ ▀██ ██ ██ ██ ██ ▀██ ██ ██ ██ ▄█▀ ██ ██▀ ▀▀ ▀█████▄█▀ ██ ██ ▄█▀ ██ ██ ██ ██▀ ██ ▄█▀ ██ +% ██▄ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀▀▀▀▀ ██ ▄ ▀███ ██ ██▀▀▀▀▀▀ ██ ██ ██ ██▀▀▀▀▀▀ +% ▀██▄ ▄▀██▄ ▄██ ██ ██ ██ ██ ▄██ ██ ██ ██ ██▄ ▄ ██ ██ ███▄ ▄ ██ ██▄ ▄ ██ ██ ██▄ ▄██▄ ▄ +% ▀▀█████▀ ▀█████▀▄████ ████ ████▄ ██████▀ ▀████▀███▄ ▀████ ▀█████▀████▄ █▀█████▀ █████▀▄████▄ ▀█████▀████ ████▄█████▀ ▀█████▀ +% ██ +% ▄████▄ + +\usepackage{forest} +\tikzset{algpxIndentLine/.style={draw=lightgray}} +\algrenewcommand{\alglinenumber}[1]{#1} + +\newenvironment{algo}[1]{ + \begin{algorithm} + \begin{spacing}{1.2} + \caption{\textsc{#1}} + \begin{algorithmic}[1] + }{ + \end{algorithmic} + \end{spacing} + \end{algorithm} +} + +% • ▌ ▄ ·. ▄▄▄· ▄▄▄▄▄ ▄ .▄ .▄▄ · ▄▄▄▄▄ ▄· ▄▌▄▄▌ ▄▄▄ . +% ·██ ▐███▪▐█ ▀█ •██ ██▪▐█ ▐█ ▀. •██ ▐█▪██▌██• ▀▄.▀· +% ▐█ ▌▐▌▐█·▄█▀▀█ ▐█.▪██▀▀█ ▄▀▀▀█▄ ▐█.▪▐█▌▐█▪██ ▪ ▐▀▀▪▄ +% ██ ██▌▐█▌▐█▪ ▐▌ ▐█▌·██▌▐▀ ▐█▄▪▐█ ▐█▌· ▐█▀·.▐█▌ ▄▐█▄▄▌ +% ▀▀ █▪▀▀▀ ▀ ▀ ▀▀▀ ▀▀▀ · ▀▀▀▀ ▀▀▀ ▀ • .▀▀▀ ▀▀▀ + +% Replace some commonly used commands with better ones +\renewcommand{\vec}[1]{\overrightarrow{#1}} +\renewcommand{\hat}[1]{\widehat{#1}} +\renewcommand{\tilde}[1]{\widetilde{#1}} +\newcommand{\proven}{$\hspace{17cm}\square$} + + +% ░█▒░▒▄▀▄░█▄░█░▄▀▒░█▒█▒▄▀▄░▄▀▒▒██▀░░░▄▀▀░▀█▀░▀▄▀░█▒░▒██▀ +% ▒█▄▄░█▀█░█▒▀█░▀▄█░▀▄█░█▀█░▀▄█░█▄▄▒░▒▄██░▒█▒░▒█▒▒█▄▄░█▄▄ + +% Specific styles for language summaries and docs +\newtcolorbox{conjugation}[2][]{mainboxstyle,colback=blue!5!white,colframe=blue!75!black,colbacktitle=blue!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=blue!75!black,fill=blue!75!black] at (frame.north east) {\large \translate{Conjugation}{Konjugation}};},#1} + +\newtcolorbox{forms}[2][]{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 \translate{Forms}{Formen}};},#1} + +% ___ _ _____ _ _ +% ( _ \ _( ) (_ _) ( ) ( ) +% | (_) )_) |_ | | __ \ \/ / +% | _ (| | _ \ | | / __ \ ) ( +% | (_) ) | |_) ) | | ( ___// /\ \ +% (____/(_)_ __/ (_) \____)_) (_) + +% Configs if you want to use BibTeX. Not included in any default configs. + +\newcommand{\setupBibtex}[1]{ + \usepackage{biblatex} + \usepackage[nottoc, numbib]{tocbibind} + \addbibresource{#1} +} + +\newcommand{\printbib}{ + \addcontentsline{toc}{section}{\translate{Sources}{Quellen}} + \printbibliography[title=\translate{Sources}{Quellen}] +} + + +%░▒█▀▀█░█░░▄▀▀▄░█▀▀░█▀▀░█▀▀▄░█▀▀▄░█░░█ +%░▒█░▄▄░█░░█░░█░▀▀▄░▀▀▄░█▄▄█░█▄▄▀░█▄▄█ +%░▒█▄▄▀░▀▀░░▀▀░░▀▀▀░▀▀▀░▀░░▀░▀░▀▀░▄▄▄▀ + +% Add glossaries functionality + +\newcommand{\setupGlossary}{ + \usepackage[nonumberlist, toc]{glossaries} + \usepackage[nottoc, numbib]{tocbibind} + \makenoidxglossaries +} + +\newcommand{\printGlossary}{ + \glsaddall + \printnoidxglossaries +} diff --git a/include.tex b/include.tex index 1dc63e2..4ec9ddf 100644 --- a/include.tex +++ b/include.tex @@ -1,41 +1,3 @@ % Loader -\newcommand{\load}[1]{ - \edef\recommended{recommended} - \edef\minimal{minimal} - \edef\most{most} - \edef\full{full} - \edef\letters{letter} - \edef\temp{#1} - \ifx \temp\recommended - \typeout{[CustomLaTeXHelperLoader]: Loading config recommended} - \input{\dir/scopes/recommended.tex} - \loadRecommended - \else - \ifx \temp\minimal - \typeout{[CustomLaTeXHelperLoader]: Loading config minimal} - \input{\dir/scopes/minimal.tex} - \loadMinimal - \else - \ifx \temp\most - \typeout{[CustomLaTeXHelperLoader]: Loading config most} - \input{\dir/scopes/most.tex} - \loadMost - \else - \ifx \temp\full - \typeout{[CustomLaTeXHelperLoader]: Loading config full} - \input{\dir/scopes/full.tex} - \loadFull - \else - \ifx \temp\letters - \typeout{[CustomLaTeXHelperLoader]: Loading config letter} - \input{\dir/scopes/minimal.tex} - \loadMinimal - \input{\dir/scopes/letter.tex} - \else - \typeout{[CustomLaTeXHelperLoader]: INVALID CONFIG SPECIFIED, NOTHING LOADED!} - \fi - \fi - \fi - \fi - \fi -} +\usepackage{currfile} +\usepackage{\currfileabsdir janishutz-helpers} diff --git a/janishutz-helpers.sty b/janishutz-helpers.sty new file mode 100644 index 0000000..a905dc7 --- /dev/null +++ b/janishutz-helpers.sty @@ -0,0 +1,2 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{janishutz-helpers}[2.0.0] diff --git a/main/core.tex b/main/core.tex index 3400d41..c842149 100644 --- a/main/core.tex +++ b/main/core.tex @@ -11,37 +11,39 @@ % Imports % \typeout{[Core] Importing!} -\usepackage[table, dvipsnames]{xcolor} -\usepackage{amsmath} -\usepackage{graphicx} -\usepackage{subcaption} -\usepackage[export]{adjustbox} -\usepackage[most]{tcolorbox} -\usepackage{cancel} -\usepackage{dsfont} -\usepackage{amssymb} -\usepackage{mathrsfs} -\usepackage{lipsum} -\usepackage{ulem} -\usepackage{soul} -\usepackage{parskip} -\usepackage{fancyhdr} -\usepackage{lastpage} -\usepackage{tocloft} -\usepackage{wasysym} -\usepackage{wrapfig} -\usepackage{multicol} -\usepackage{ifthen} -\usepackage[hidelinks]{hyperref} -\usepackage{enumitem} -\usepackage{gensymb} -\usepackage{pifont} +\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} @@ -81,7 +83,7 @@ \newcommand{\setup}[1]{ \typeout{[Setup] Setting up...} \loadLang - \usepackage[a4paper,textwidth=17.5cm,textheight=25cm,includehead]{geometry} + \RequirePackage[a4paper,textwidth=17.5cm,textheight=25cm,includehead]{geometry} \title{\Huge \textbf{#1}} \author{\authorTitle} \makeatletter @@ -112,7 +114,7 @@ % Set up the latex document, only configuring the author, title and page size \newcommand{\setupBarebones}[1]{ \loadLang - \usepackage[a4paper,textwidth=17.5cm,textheight=25cm,includehead]{geometry} + \RequirePackage[a4paper,textwidth=17.5cm,textheight=25cm,includehead]{geometry} \title{\Huge \textbf{#1}} \author{\authorTitle} } @@ -120,7 +122,7 @@ % Set up the latex document for exam summaries (Extra wide body, small margins, no header) \newcommand{\setupCheatSheet}[1]{ \loadLang - \usepackage[a4paper,textwidth=20cm,textheight=28.5cm]{geometry} + \RequirePackage[a4paper,textwidth=20cm,textheight=28.5cm]{geometry} \title{\Huge \textbf{#1}} \author{\authorTitle} } diff --git a/main/cs.tex b/main/cs.tex index e2e09e7..fa54b88 100644 --- a/main/cs.tex +++ b/main/cs.tex @@ -4,13 +4,13 @@ % ░▒█▄▄▀░░▀▀░░▀░░▒▀░█░░░░░▀▀▀░░▀░░▀▀▀░▀░▀▀░░░▒█▄▄▄█░▀▀▀░▀▀▀░▀▀▀░▀░░▀░▀▀▀░▀▀▀ % Extra imports -\usepackage{stmaryrd} -\usepackage{algorithm} -\usepackage{algpseudocodex} -\usepackage{setspace} -\usepackage{verbatim} -\usepackage{turnstile} -\usepackage{forloop} +\RequirePackage{stmaryrd} +\RequirePackage{algorithm} +\RequirePackage{algpseudocodex} +\RequirePackage{setspace} +\RequirePackage{verbatim} +\RequirePackage{turnstile} +\RequirePackage{forloop} \newcommand{\Indent}{\hspace{\algorithmicindent}} diff --git a/main/index.tex b/main/index.tex index e1cb0f3..ab4b364 100644 --- a/main/index.tex +++ b/main/index.tex @@ -10,8 +10,8 @@ % For using index package \newcommand{\prepareIndex}{ - \usepackage[T1]{fontenc} - \usepackage{imakeidx} + \RequirePackage[T1]{fontenc} + \RequirePackage{imakeidx} \makeindex } diff --git a/main/lang/de.tex b/main/lang/de.tex index 0c0a798..ba7a10c 100644 --- a/main/lang/de.tex +++ b/main/lang/de.tex @@ -1 +1 @@ -\usepackage[ngerman]{babel} +\RequirePackage[ngerman]{babel} diff --git a/main/style/counters.tex b/main/style/counters.tex index 4740837..b10c7cc 100644 --- a/main/style/counters.tex +++ b/main/style/counters.tex @@ -5,8 +5,8 @@ % ▐███▌▐█▌.▐▌▐█▄█▌██▐█▌ ▐█▌·▐█▄▄▌▐█•█▌ % ·▀▀▀ ▀█▄▀▪ ▀▀▀ ▀▀ █▪ ▀▀▀ ▀▀▀ .▀ ▀ -\usepackage{xstring} -\usepackage{etoolbox} +\RequirePackage{xstring} +\RequirePackage{etoolbox} % tcolorbox and other stylistic elements (i.e. inline versions of them) that have counters \newcounter{lemma}[section] \newcounter{definition}[section] diff --git a/main/tables.tex b/main/tables.tex index 081c8e2..ca5d5ad 100644 --- a/main/tables.tex +++ b/main/tables.tex @@ -6,8 +6,8 @@ % (_) \__ _)_ __/(___)\____)____/ -\usepackage{booktabs} -\usepackage{tabulary} +\RequirePackage{booktabs} +\RequirePackage{tabulary} % Create new table. #1 Layout, #2 title row \newenvironment{tables}[2]{ diff --git a/scopes/full.tex b/scopes/full.tex deleted file mode 100644 index 475df3c..0000000 --- a/scopes/full.tex +++ /dev/null @@ -1,5 +0,0 @@ -\newcommand{\loadFull}{ - \input{\dir/dist/recommended.tex} - \loadRecommended - \input{\dir/extra/minted.tex} -} diff --git a/scopes/header.tex b/scopes/header.tex deleted file mode 100644 index 85af3c1..0000000 --- a/scopes/header.tex +++ /dev/null @@ -1,5 +0,0 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{janishutz-helpers} - -\usepackage{import} -\import{../}{config/config.tex} diff --git a/scopes/minimal.tex b/scopes/minimal.tex deleted file mode 100644 index a1fcfba..0000000 --- a/scopes/minimal.tex +++ /dev/null @@ -1,7 +0,0 @@ -\newcommand{\loadMinimal}{ - \typeout{[CustomLaTeXHelperLoader]: Loaded minimal} - \input{\dir/main/core.tex} - \input{\dir/config/config.tex} - \input{\dir/main/style/style.tex} - \input{\dir/main/style/common.tex} -} diff --git a/scopes/most.tex b/scopes/most.tex deleted file mode 100644 index 61d4649..0000000 --- a/scopes/most.tex +++ /dev/null @@ -1,13 +0,0 @@ -\newcommand{\loadMost}{ - \typeout{[CustomLaTeXHelperLoader]: Loaded most} - \input{\dir/dist/minimal.tex} - \loadMinimal - \input{\dir/main/math.tex} - \input{\dir/main/cs.tex} - \input{\dir/main/index.tex} - \input{\dir/main/tables.tex} - \input{\dir/main/style/counters.tex} - \input{\dir/main/style/cs.tex} - \input{\dir/main/style/math.tex} - \input{\dir/main/style/language.tex} -} diff --git a/scopes/recommended.tex b/scopes/recommended.tex deleted file mode 100644 index fe4a045..0000000 --- a/scopes/recommended.tex +++ /dev/null @@ -1,7 +0,0 @@ -\newcommand{\loadRecommended}{ - \typeout{[CustomLaTeXHelperLoader]: Loaded recommended} - \input{\dir/dist/most.tex} - \loadMost - \input{\dir/extra/bib.tex} - \input{\dir/extra/glossary.tex} -} diff --git a/setup.sh b/setup.sh new file mode 100644 index 0000000..9baf380 --- /dev/null +++ b/setup.sh @@ -0,0 +1 @@ +# TODO: Make this script extend tex path From a8a06cf62f6817c51ec21820c7afd5703283594b Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Thu, 5 Feb 2026 09:12:17 +0100 Subject: [PATCH 02/32] Start reworking helpers --- README.md | 2 +- build/build-config.json | 0 build/build.py | 0 dist/janishutz-helpers-full.sty | 1021 ------------------------ dist/janishutz-helpers-letters.sty | 32 - dist/janishutz-helpers-minimal.sty | 372 --------- dist/janishutz-helpers-recommended.sty | 1003 ----------------------- extra/bib.tex | 19 - extra/glossary.tex | 17 - extra/minted.tex | 17 - include.tex | 3 - janishutz-helpers.sty | 2 - scopes/letter.tex | 32 - src/config/colors.sty | 23 + src/config/main.sty | 39 + src/config/naming.sty | 41 + src/config/numbering.sty | 37 + src/core.sty | 47 ++ {main => src/core}/core.tex | 25 - {main => src/core}/cs.tex | 0 {main => src/core}/index.tex | 0 {main => src/core}/math.tex | 0 {main => src/core}/tables.tex | 0 src/janishutz-helpers.sty | 16 + {main => src}/lang/de.tex | 0 src/style.sty | 32 + {main => src}/style/common.tex | 0 {main => src}/style/counters.tex | 0 {main => src}/style/cs.tex | 0 {main => src}/style/language.tex | 0 {main => src}/style/math.tex | 0 {main => src}/style/style.tex | 62 -- 32 files changed, 236 insertions(+), 2606 deletions(-) create mode 100644 build/build-config.json create mode 100644 build/build.py delete mode 100644 dist/janishutz-helpers-full.sty delete mode 100644 dist/janishutz-helpers-letters.sty delete mode 100644 dist/janishutz-helpers-minimal.sty delete mode 100644 dist/janishutz-helpers-recommended.sty delete mode 100644 extra/bib.tex delete mode 100644 extra/glossary.tex delete mode 100644 extra/minted.tex delete mode 100644 include.tex delete mode 100644 janishutz-helpers.sty delete mode 100644 scopes/letter.tex create mode 100644 src/config/colors.sty create mode 100644 src/config/main.sty create mode 100644 src/config/naming.sty create mode 100644 src/config/numbering.sty create mode 100644 src/core.sty rename {main => src/core}/core.tex (86%) rename {main => src/core}/cs.tex (100%) rename {main => src/core}/index.tex (100%) rename {main => src/core}/math.tex (100%) rename {main => src/core}/tables.tex (100%) create mode 100644 src/janishutz-helpers.sty rename {main => src}/lang/de.tex (100%) create mode 100644 src/style.sty rename {main => src}/style/common.tex (100%) rename {main => src}/style/counters.tex (100%) rename {main => src}/style/cs.tex (100%) rename {main => src}/style/language.tex (100%) rename {main => src}/style/math.tex (100%) rename {main => src}/style/style.tex (60%) diff --git a/README.md b/README.md index 9b36196..d9ed473 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,11 @@ This repository contains a collection of LaTeX files, helping you get started with LaTeX quickly. + # New import scheme I have done some tweaks to support a new import scheme, making imports much more flexible - # Getting started See the docs [here](https://git.janishutz.com/janishutz/latex/src/branch/main/docs/docs.pdf) to get started. diff --git a/build/build-config.json b/build/build-config.json new file mode 100644 index 0000000..e69de29 diff --git a/build/build.py b/build/build.py new file mode 100644 index 0000000..e69de29 diff --git a/dist/janishutz-helpers-full.sty b/dist/janishutz-helpers-full.sty deleted file mode 100644 index 764d4bb..0000000 --- a/dist/janishutz-helpers-full.sty +++ /dev/null @@ -1,1021 +0,0 @@ -\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} - -% ▄▄ -% ▀████▄ ▄███▀ ██ ███ -% ████ ████ ██ ██ -% █ ██ ▄█ ██ ▄█▀██▄ ██████ ███████▄ -% █ ██ █▀ ██ ██ ██ ██ ██ ██ -% █ ██▄█▀ ██ ▄█████ ██ ██ ██ -% █ ▀██▀ ██ ██ ██ ██ ██ ██ -% ▄███▄ ▀▀ ▄████▄████▀██▄ ▀███████ ████▄ - - -% BB shortcuts (for number spaces, etc) -\newcommand{\C}{\mathbb{C}} -\newcommand{\D}{\mathbb{D}} -\newcommand{\E}{\mathbb{E}} -\newcommand{\I}{\mathbb{I}} -\newcommand{\J}{\mathbb{J}} -\newcommand{\N}{\mathbb{N}} -\newcommand{\Q}{\mathbb{Q}} -\newcommand{\R}{\mathbb{R}} -\newcommand{\V}{\mathbb{V}} -\newcommand{\Z}{\mathbb{Z}} - -% Caligraphic -\newcommand{\cA}{\mathcal{A}} -\newcommand{\cB}{\mathcal{B}} -\newcommand{\cC}{\mathcal{C}} -\newcommand{\cD}{\mathcal{D}} -\newcommand{\cE}{\mathcal{E}} -\newcommand{\cF}{\mathcal{F}} -\newcommand{\cG}{\mathcal{G}} -\newcommand{\cH}{\mathcal{H}} -\newcommand{\cI}{\mathcal{I}} -\newcommand{\cJ}{\mathcal{J}} -\newcommand{\cK}{\mathcal{K}} -\newcommand{\cL}{\mathcal{L}} -\newcommand{\cM}{\mathcal{M}} -\newcommand{\cN}{\mathcal{N}} -\newcommand{\cO}{\mathcal{O}} -\newcommand{\cP}{\mathcal{P}} -\newcommand{\cQ}{\mathcal{Q}} -\newcommand{\cR}{\mathcal{R}} -\newcommand{\cS}{\mathcal{S}} -\newcommand{\cT}{\mathcal{T}} -\newcommand{\cU}{\mathcal{U}} -\newcommand{\cV}{\mathcal{V}} -\newcommand{\cW}{\mathcal{W}} -\newcommand{\cX}{\mathcal{X}} -\newcommand{\cY}{\mathcal{Y}} -\newcommand{\cZ}{\mathcal{Z}} - -% other useful shortcuts -\newcommand{\8}{\infty} -\newcommand{\dx}{\text{ d}} -\newcommand{\floor}[1]{\left\lfloor #1 \right\rfloor} -\newcommand{\ceil}[1]{\left\lceil #1 \right\rceil} -\newcommand{\hastoeq}{\overset{!}{=}} -\newcommand{\Leftrightarrowequiv}{\overset{\cdot}{\Leftrightarrow}} -\newcommand{\Longleftrightarrowequiv}{\overset{\cdot}{\Longleftrightarrow}} -\newcommand{\Rightarrowequiv}{\overset{\cdot}{\Rightarrow}} -\newcommand{\Leftarrowequiv}{\overset{\cdot}{\Leftarrow}} -\newcommand{\defAs}{\overset{\text{def}}{=}} -\newcommand{\der}[1]{\frac{\mbox{d}}{\mbox{d}#1}} -\newcommand{\dern}[2]{\frac{\mbox{d}^{#2}}{\mbox{d}^{#2}#1}} -\newcommand{\parder}[1]{\frac{\partial}{\partial #1}} -\newcommand{\pardern}[2]{\frac{\partial^{#2}}{\partial^{#2} #1}} -\newcommand{\defEquiv}{\overset{\text{def}}{\Leftrightarrow}} -\newcommand{\defImplies}{\overset{\text{def}}{\Rightarrow}} -\newcommand{\divides}{\hspace{0.25em}|\hspace{0.25em}} -\newcommand{\mbeq}{\overset{!}{=}} -\newcommand{\lcm}{\text{lcm}} -\newcommand{\limit}[2]{\lim_{#1 \rightarrow #2}} -\newcommand{\seq}[1]{(#1_n)_{n \geq 1}} -\newcommand{\ser}[2]{\sum_{k = 1}^{#2} #1_k} -\newcommand{\limni}{\limit{n}{\infty}} -\newcommand{\limnz}{\limit{n}{0}} -\newcommand{\limxz}{\limit{x_0}{0}} -\newcommand{\limhz}{\limit{h}{0}} -\newcommand{\liminfni}{\liminf_{n \rightarrow \infty}} -\newcommand{\limsupni}{\limsup_{n \rightarrow \infty}} -\newcommand{\elementstack}[2]{\genfrac{}{}{0pt}{}{#1}{#2}} -\DeclareMathOperator\arctanh{arctanh} -\DeclareMathOperator\arccosh{arccosh} -\DeclareMathOperator\arcsinh{arcsinh} - - -% ░▒█▀▀▄░▄▀▀▄░█▀▄▀█░▄▀▀▄░█░▒█░▀█▀░█▀▀░█▀▀▄░░░▒█▀▀▀█░█▀▄░░▀░░█▀▀░█▀▀▄░█▀▄░█▀▀ -% ░▒█░░░░█░░█░█░▀░█░█▄▄█░█░▒█░░█░░█▀▀░█▄▄▀░░░░▀▀▀▄▄░█░░░░█▀░█▀▀░█░▒█░█░░░█▀▀ -% ░▒█▄▄▀░░▀▀░░▀░░▒▀░█░░░░░▀▀▀░░▀░░▀▀▀░▀░▀▀░░░▒█▄▄▄█░▀▀▀░▀▀▀░▀▀▀░▀░░▀░▀▀▀░▀▀▀ - -% Extra imports -\RequirePackage{stmaryrd} -\RequirePackage{algorithm} -\RequirePackage{algpseudocodex} -\RequirePackage{setspace} -\RequirePackage{verbatim} -\RequirePackage{turnstile} -\RequirePackage{forloop} - -\newcommand{\Indent}{\hspace{\algorithmicindent}} - -\newcommand{\timecomplexity}{\fhlc{orange}{\ifnum\value{lang}<2{Time complexity}\else {Laufzeit}\fi} \hspace{0.5em}} -\newcommand{\tc}[1]{\timecomplexity $\Theta\left(#1\right)$} -\newcommand{\tct}[1]{\Theta\left(#1\right)} -\newcommand{\tco}[1]{\mathcal{O}\left(#1\right)} -\newcommand{\tcl}[1]{\Omega\left(#1\right)} -\newcommand{\wordbool}{(\Sigma_{\text{bool}})^*} -\newcommand{\words}[1]{(\Sigma_{\text{#1}})^*} -\newcommand{\word}{\Sigma^*} -\newcommand{\wordm}[1]{\Sigma_{\text{#1}}^*} -\newcommand{\alphabets}[1]{\Sigma_{\text{#1}}} -\newcommand{\alphabetbool}{\Sigma_{\text{bool}}} -\newcommand{\tR}{\text{R}} -\newcommand{\tC}{\text{C}} -\newcommand{\tN}{\text{N}} -\newcommand{\bigvdash}[2]{\sststile{#1}{#2}} -\newcommand{\class}{\text{\tr{Cl}{Kl}}} - -% ▄▄ -% ▀████▀ ▀███ -% ██ ██ -% ██ ▀████████▄ ▄█▀▀███ ▄▄█▀██▀██▀ ▀██▀ -% ██ ██ ██ ▄██ ██ ▄█▀ ██ ▀██ ▄█▀ -% ██ ██ ██ ███ ██ ██▀▀▀▀▀▀ ███ -% ██ ██ ██ ▀██ ██ ██▄ ▄ ▄█▀ ██▄ -% ▄████▄████ ████▄ ▀████▀███▄ ▀█████▀██▄ ▄██▄ - - -% For using index package -\newcommand{\prepareIndex}{ - \RequirePackage[T1]{fontenc} - \RequirePackage{imakeidx} - \makeindex -} - -\newcommand{\addIndexBold}[1]{\textbf{\index{\MakeLowercase{#1}} #1}} -\newcommand{\addIndexItalic}[1]{\textit{\index{\MakeLowercase{#1}} #1}} -\newcommand{\addIndex}[1]{\index{\MakeLowercase{#1}} #1} - - - -% ▄▄· ▄• ▄▌ ▐ ▄ ▄▄▄▄▄▄▄▄ .▄▄▄ -% ▐█ ▌▪ ▄█▀▄ █▪██▌•█▌▐█•██ ▀▄.▀·▀▄ █· -% ██ ▄▄▐█▌.▐▌█▌▐█▌▐█▐▐▌ ▐█.▪▐▀▀▪▄▐▀▀▄ -% ▐███▌▐█▌.▐▌▐█▄█▌██▐█▌ ▐█▌·▐█▄▄▌▐█•█▌ -% ·▀▀▀ ▀█▄▀▪ ▀▀▀ ▀▀ █▪ ▀▀▀ ▀▀▀ .▀ ▀ - -\RequirePackage{xstring} -\RequirePackage{etoolbox} -% tcolorbox and other stylistic elements (i.e. inline versions of them) that have counters -\newcounter{lemma}[section] -\newcounter{definition}[section] -\newcounter{corollary}[section] -\newcounter{theorem}[section] -\newcounter{axiom}[section] -\newcounter{example}[section] -\newcounter{fact}[section] -\newcounter{proposition}[section] -\newcounter{formula}[section] -\newcounter{remark}[section] -\newcounter{all}[section] - -\newcounter{lemmass}[subsection] -\newcounter{definitionss}[subsection] -\newcounter{corollaryss}[subsection] -\newcounter{theoremss}[subsection] -\newcounter{axiomss}[subsection] -\newcounter{exampless}[subsection] -\newcounter{factss}[subsection] -\newcounter{propositionss}[subsection] -\newcounter{formulass}[subsection] -\newcounter{remarkss}[subsection] -\newcounter{allss}[subsection] - -\newcounter{lemmasss}[subsubsection] -\newcounter{definitionsss}[subsubsection] -\newcounter{corollarysss}[subsubsection] -\newcounter{theoremsss}[subsubsection] -\newcounter{axiomsss}[subsubsection] -\newcounter{examplesss}[subsubsection] -\newcounter{factsss}[subsubsection] -\newcounter{propositionsss}[subsubsection] -\newcounter{formulasss}[subsubsection] -\newcounter{remarksss}[subsubsection] -\newcounter{allsss}[subsubsection] - -% Set the current number of a label -\newcommand{\setLabelNumber}[2]{% - \setcounter{#1}{#2}% - \addtocounter{#1}{-1}% - \setcounter{#1ss}{#2}% - \addtocounter{#1ss}{-1}% - \setcounter{#1sss}{#2}% - \addtocounter{#1sss}{-1}% -} - -\newcommand{\stepLabelNumber}[1]{% - \stepcounter{#1}% - \stepcounter{#1ss}% - \stepcounter{#1sss}% -} - -\newcommand{\printcounter}[1]{% - \csname the#1\endcsname -} - -\newcommand{\suffix}{ss} -\newcommand{\sectionNumbering}{\thesection} - -% ┌ ┐ -% │ Counter numbering │ -% └ ┘ -\newcommand{\preTableAndFigHook}[1]{% - \ifnum\value{numberingConfig}>1 - \ifnum\value{numberSubsections}=1 - \stepcounter{allss} - \else - \ifnum\value{numberSubsections}=2 - \stepcounter{allsss} - \else - \stepcounter{all} - \fi - \fi - \fi -} -\AtBeginEnvironment{table}{\preTableAndFigHook{table}} -\AtBeginEnvironment{figure}{\preTableAndFigHook{figure}} - -\newcommand{\applyTableAndFigureNumbering}{ - % Tables & Figures - \ifnum\value{numberingConfig}=0 - \renewcommand{\thetable}{} - \renewcommand{\thefigure}{} - \else - \ifnum\value{numberingConfig}=1 - \renewcommand{\thetable}{\sectionNumbering.\arabic{table}} - \renewcommand{\thefigure}{\sectionNumbering.\arabic{figure}} - \else - \ifnum\value{numberSubsections}=1 - \renewcommand{\thetable}{\sectionNumbering.\arabic{allss}} - \renewcommand{\thefigure}{\sectionNumbering.\arabic{allss}} - \else - \ifnum\value{numberSubsections}=2 - \renewcommand{\thetable}{\refstepcounter{allsss}\sectionNumbering.\arabic{allsss}} - \renewcommand{\thefigure}{\sectionNumbering.\arabic{allsss}} - \else - \renewcommand{\thetable}{\sectionNumbering.\arabic{all}} - \renewcommand{\thefigure}{\sectionNumbering.\arabic{all}} - \fi - \fi - \fi - \fi -} - -\newcommand{\setSubsectionNumbering}[1]{ - \setcounter{numberSubsections}{#1} - \applySubsectionNumbering -} - -\newcommand{\applySubsectionNumbering}{ - \ifnum\value{numberSubsections}=1 - \renewcommand{\sectionNumbering}{\thesubsection} - \renewcommand{\suffix}{ss} - \typeout{Numbering as section.subsection.number} - \else - \ifnum\value{numberSubsections}=2 - \renewcommand{\sectionNumbering}{\thesubsubsection} - \renewcommand{\suffix}{sss} - \typeout{Numbering as section.subsection.subsubsection.number} - \else - \renewcommand{\sectionNumbering}{\thesection} - \renewcommand{\suffix}{} - \typeout{Numbering as section.number} - \fi - \fi - \applyTableAndFigureNumbering - - \renewcommand{\thelemma}{\sectionNumbering.\arabic{lemma}} - \renewcommand{\thedefinition}{\sectionNumbering.\arabic{definition}} - \renewcommand{\thecorollary}{\sectionNumbering.\arabic{corollary}} - \renewcommand{\thetheorem}{\sectionNumbering.\arabic{theorem}} - \renewcommand{\theaxiom}{\sectionNumbering.\arabic{axiom}} - \renewcommand{\theexample}{\sectionNumbering.\arabic{example}} - \renewcommand{\thefact}{\sectionNumbering.\arabic{fact}} - \renewcommand{\theproposition}{\sectionNumbering.\arabic{proposition}} - \renewcommand{\theformula}{\sectionNumbering.\arabic{formula}} - \renewcommand{\theremark}{\sectionNumbering.\arabic{remark}} - \renewcommand{\theall}{\sectionNumbering.\arabic{all}} - - \renewcommand{\thelemmass}{\sectionNumbering.\arabic{lemmass}} - \renewcommand{\thedefinitionss}{\sectionNumbering.\arabic{definitionss}} - \renewcommand{\thecorollaryss}{\sectionNumbering.\arabic{corollaryss}} - \renewcommand{\thetheoremss}{\sectionNumbering.\arabic{theoremss}} - \renewcommand{\theaxiomss}{\sectionNumbering.\arabic{axiomss}} - \renewcommand{\theexampless}{\sectionNumbering.\arabic{exampless}} - \renewcommand{\thefactss}{\sectionNumbering.\arabic{factss}} - \renewcommand{\thepropositionss}{\sectionNumbering.\arabic{propositionss}} - \renewcommand{\theformulass}{\sectionNumbering.\arabic{formulass}} - \renewcommand{\theremarkss}{\sectionNumbering.\arabic{remarkss}} - \renewcommand{\theallss}{\sectionNumbering.\arabic{allss}} - - \renewcommand{\thelemmasss}{\sectionNumbering.\arabic{lemmasss}} - \renewcommand{\thedefinitionsss}{\sectionNumbering.\arabic{definitionsss}} - \renewcommand{\thecorollarysss}{\sectionNumbering.\arabic{corollarysss}} - \renewcommand{\thetheoremsss}{\sectionNumbering.\arabic{theoremsss}} - \renewcommand{\theaxiomsss}{\sectionNumbering.\arabic{axiomsss}} - \renewcommand{\theexamplesss}{\sectionNumbering.\arabic{examplesss}} - \renewcommand{\thefactsss}{\sectionNumbering.\arabic{factsss}} - \renewcommand{\thepropositionsss}{\sectionNumbering.\arabic{propositionsss}} - \renewcommand{\theformulasss}{\sectionNumbering.\arabic{formulasss}} - \renewcommand{\theremarksss}{\sectionNumbering.\arabic{remarksss}} - \renewcommand{\theallsss}{\sectionNumbering.\arabic{allsss}} -} -\applySubsectionNumbering - -% ── Label generation ──────────────────────────────────────────────── -\newcommand{\labelSectionGeneration}{% - \ifnum\value{numberSubsections}=1 - \arabic{section}-\arabic{subsection}% - \else - \ifnum\value{numberSubsections}=2 - \arabic{section}-\arabic{subsection}-\arabic{subsubsection}% - \else - \arabic{section}% - \fi - \fi} - -\newcommand{\labelIt}[1]{\refstepcounter{#1\suffix}\edef\tempLabel{\genLabel{#1}{\arabic{#1\suffix}}}\label{\tempLabel}} -\newcommand{\genLabel}[2]{#1:\labelSectionGeneration-#2} - -% ┌ ┐ -% │ Number the counters appropriately │ -% └ ┘ -\newcommand{\usenumberArabic}[1]{% - \ifnum\value{numberingConfig}=1 - \labelIt{#1} - \printcounter{#1\suffix}% - \else - \ifnum\value{numberingConfig}=2 - \ifthenelse{\equal{#1}{definitions}}{% - \labelIt{definition} - \printcounter{definition\suffix}% - }{% - \labelIt{all} - \printcounter{all\suffix}% - }% - \else - \ifnum\value{numberingConfig}=3 - \labelIt{all} - \printcounter{all\suffix}% - \else - \relax% - \fi - \fi - \fi} - - -% ──────────────────────────────────────────────────────────────────── -% ┌ ┐ -% │ Enable or disable numbering │ -% └ ┘ -% Initialize with config file -\newcounter{numberingConfigStore} -\setcounter{numberingConfigStore}{\value{numberingConfig}} - -% For later change -\newcommand{\setNumberingStyle}[1]{ - \typeout{Setting NumberingStyle to #1} - \setcounter{numberingConfig}{#1} - \ifthenelse{\equal{#1}{0}}{}{ - \setcounter{numberingConfigStore}{#1} - } - \applyTableAndFigureNumbering -} - -% Enable / disable numbering -\newcommand{\numberingOff}{ - \setcounter{numberingConfig}{0} - \applyTableAndFigureNumbering -} -\newcommand{\numberingOn}{ - \setcounter{numberingConfig}{\value{numberingConfigStore}} - \applyTableAndFigureNumbering -} - -% ──────────────────────────────────────────────────────────────────── -% ╭────────────────────────────────────────────────╮ -% │ Reset definition, lemma, etc counters, add a │ -% │ new page │ -% ╰────────────────────────────────────────────────╯ -\newcommand{\newsection}{ - \newpage - \newsectionNoPB -} - -% ── Reset definitions, lemma, etc counters, do not add new page ───── -\newcommand{\newsectionNoPB}{ - \setcounter{lemma}{0} - \setcounter{definition}{0} - \setcounter{corollary}{0} - \setcounter{theorem}{0} - \setcounter{axiom}{0} - \setcounter{example}{0} - \setcounter{fact}{0} - \setcounter{proposition}{0} - \setcounter{formula}{0} - \setcounter{remark}{0} - \setcounter{all}{0} - - \setcounter{lemmass}{0} - \setcounter{definitionss}{0} - \setcounter{corollaryss}{0} - \setcounter{theoremss}{0} - \setcounter{axiomss}{0} - \setcounter{exampless}{0} - \setcounter{factss}{0} - \setcounter{propositionss}{0} - \setcounter{formulass}{0} - \setcounter{remarkss}{0} - \setcounter{allss}{0} - - \setcounter{lemmasss}{0} - \setcounter{definitionsss}{0} - \setcounter{corollarysss}{0} - \setcounter{theoremsss}{0} - \setcounter{axiomsss}{0} - \setcounter{examplesss}{0} - \setcounter{factsss}{0} - \setcounter{propositionsss}{0} - \setcounter{formulasss}{0} - \setcounter{remarksss}{0} - \setcounter{allsss}{0} - - % Tables & Figures - \setcounter{table}{0} - \setcounter{figure}{0} -} -\newsectionNoPB % Initializes - - -% ──────────────────────────────────────────────────────────────────── -% ╭────────────────────────────────────────────────╮ -% │ Tcolorboxes │ -% ╰────────────────────────────────────────────────╯ -% ──────────────────────────────────────────────────────────────────── - -% Definitions -\newtcolorbox{definition}[2][]{mainboxstyle,colback=blue!5!white,colframe=blue!75!black,colbacktitle=blue!75!black,title={\large #2},overlay={\node[overlaystyle,draw=blue!75!black,fill=blue!75!black] at (frame.north east) {\large Definition\usenumberArabic{definition}};},#1} - -% Theorems -\newtcolorbox{theorem}[2][]{mainboxstyle,colback=ForestGreen!5!white,colframe=ForestGreen!75!black,colbacktitle=ForestGreen!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=ForestGreen!75!black,fill=ForestGreen!75!black] at (frame.north east) {\large \translate{Theorem}{\theoremde}\usenumberArabic{theorem}};},#1} - -% Lemmas -\newtcolorbox{lemma}[2][]{mainboxstyle,colback=Aquamarine!5!white,colframe=Aquamarine!75!black,colbacktitle=Aquamarine!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=Aquamarine!75!black,fill=Aquamarine!75!black] at (frame.north east) {\large Lemma\usenumberArabic{lemma}};},#1} - -% Corollaries -\newtcolorbox{corollary}[2][]{mainboxstyle,colback=teal!5!white,colframe=teal!75!black,colbacktitle=teal!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=teal!75!black,fill=teal!75!black] at (frame.north east) {\large \translate{Corollary}{Korollar}\usenumberArabic{corollary}};},#1} - -% Axioms -\newtcolorbox{axiom}[2][]{mainboxstyle,colback=JungleGreen!5!white,colframe=JungleGreen!75!black,colbacktitle=JungleGreen!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=JungleGreen!75!black,fill=JungleGreen!75!black] at (frame.north east) {\large Axiom\usenumberArabic{axiom}};},#1} - -% Facts -\newtcolorbox{fact}[2][]{mainboxstyle,colback=SeaGreen!5!white,colframe=SeaGreen!75!black,colbacktitle=SeaGreen!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=SeaGreen!75!black,fill=SeaGreen!75!black] at (frame.north east) {\large \translate{Fact}{Fakt}\usenumberArabic{fact}};},#1} - -% Propositions -\newtcolorbox{proposition}[2][]{mainboxstyle,colback=Cyan!5!white,colframe=Cyan!75!black,colbacktitle=Cyan!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=Cyan!75!black,fill=Cyan!75!black] at (frame.north east) {\large Proposition\usenumberArabic{proposition}};},#1} - -% Examples -\newtcolorbox{example}[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{Example}{Beispiel}\usenumberArabic{example}};},#1} - -% Formula -\newtcolorbox{formula}[2][]{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 \translate{Formula}{Formel}\usenumberArabic{formula}};},#1} - -% Remark -\newtcolorbox{remark}[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{Remark}{Bemerkung} \usenumberArabic{remark}};},#1} - - -% ──────────────────────────────────────────────────────────────────── -% ╭────────────────────────────────────────────────╮ -% │ Inline environments │ -% ╰────────────────────────────────────────────────╯ -% ──────────────────────────────────────────────────────────────────── - - -% Inline environments (inline) -\newcommand{\inlineex}{\bg{gray}{\translate{Example}{Beispiel}\usenumberArabic{example}:}} -\newcommand{\inlinedef}{\bg{blue}{Definition\usenumberArabic{definition}:}} -\newcommand{\inlineformula}{\bg{red}{\translate{Formula}{Formel}\usenumberArabic{formula}:}} -\newcommand{\inlinelemma}{\bg{Aquamarine}{Lemma\usenumberArabic{lemma}:}} -\newcommand{\inlinetheorem}{\bg{ForestGreen}{\translate{Theorem}{\theoremde}\usenumberArabic{theorem}:}} -\newcommand{\inlineaxiom}{\bg{JungleGreen}{Axiom\usenumberArabic{axiom}:}} -\newcommand{\inlinecorollary}{\bg{teal}{\translate{Corollary}{Korollar}\usenumberArabic{corollary}:}} -\newcommand{\inlinefact}{\bg{SeaGreen}{\translate{Fact}{Fakt}\usenumberArabic{fact}:}} -\newcommand{\inlineproposition}{\bg{Cyan}{Proposition\usenumberArabic{proposition}:}} -\newcommand{\inlineremark}{\bg{green}{\translate{Remark}{Bemerkung}\usenumberArabic{remark}:}} -\newcommand{\inlineproof}{\bg{magenta}{\translate{Proof}{Beweis}:}} - -% Enhanced inline environments -\newcommand{\fancyex}[1]{\bg{gray}{\translate{Example}{Beispiel}\usenumberArabic{example}:} \textit{(#1)}} -\newcommand{\fancydef}[1]{\bg{blue}{Definition\usenumberArabic{definition}:} \textit{(#1)}} -\newcommand{\fancyformula}[1]{\bg{red}{\translate{Formula}{Formel}\usenumberArabic{formula}:} \textit{(#1)}} -\newcommand{\fancylemma}[1]{\bg{Aquamarine}{Lemma\usenumberArabic{lemma}:} \textit{(#1)}} -\newcommand{\fancytheorem}[1]{\bg{ForestGreen}{\translate{Theorem}{\theoremde}\usenumberArabic{theorem}:} \textit{(#1)}} -\newcommand{\fancyaxiom}[1]{\bg{JungleGreen}{Axiom\usenumberArabic{axiom}:} \textit{(#1)}} -\newcommand{\fancycorollary}[1]{\bg{teal}{\translate{Corollary}{Korollar}\usenumberArabic{corollary}:} \textit{(#1)}} -\newcommand{\fancyfact}[1]{\bg{SeaGreen}{\translate{Fact}{Fakt}\usenumberArabic{fact}:} \textit{(#1)}} -\newcommand{\fancyproposition}[1]{\bg{Cyan}{Proposition\usenumberArabic{proposition}:} \textit{(#1)}} -\newcommand{\fancyremark}[1]{\bg{green}{\translate{Remark}{Bemerkung}\usenumberArabic{remark}:} \textit{(#1)}} -\newcommand{\fancyproof}[1]{\bg{magenta}{\translate{Proof}{Beweis}: \textit{(#1)}}} - -% short environments (abbreviated) -\newcommand{\shortex}{\bg{gray}{\translate{Ex}{Bsp}\usenumberArabic{example}:}} -\newcommand{\shortdef}{\bg{blue}{D\usenumberArabic{definition}:}} -\newcommand{\short}{\bg{red}{F\usenumberArabic{formula}:}} -\newcommand{\shortlemma}{\bg{Aquamarine}{L\usenumberArabic{lemma}:}} -\newcommand{\shorttheorem}{\bg{ForestGreen}{\translate{T}{\StrMid{\theoremde}{1}{1}}\usenumberArabic{theorem}:}} -\newcommand{\shortaxiom}{\bg{JungleGreen}{A\usenumberArabic{axiom}:}} -\newcommand{\shortcorollary}{\bg{teal}{\translate{C}{K}\usenumberArabic{corollary}:}} -\newcommand{\shortfact}{\bg{SeaGreen}{F\usenumberArabic{fact}:}} -\newcommand{\shortproposition}{\bg{Cyan}{P\usenumberArabic{proposition}:}} -\newcommand{\shortremark}{\bg{green}{\tr{R}{B}\usenumberArabic{remark}:}} -\newcommand{\shortproof}{\bg{magenta}{\translate{Proof}{Beweis}:}} - -% Enhanced short environments (abbreviated) -\newcommand{\compactex}[1]{\bg{gray}{\translate{Ex}{Bsp}\usenumberArabic{example}:} \textit{(#1)}} -\newcommand{\compactdef}[1]{\bg{blue}{D\usenumberArabic{definition}:} \textit{(#1)}} -\newcommand{\compactformula}[1]{\bg{red}{F\usenumberArabic{formula}:} \textit{(#1)}} -\newcommand{\compactlemma}[1]{\bg{Aquamarine}{L\usenumberArabic{lemma}:} \textit{(#1)}} -\newcommand{\compacttheorem}[1]{\bg{ForestGreen}{\translate{T}{\StrMid{\theoremde}{1}{1}} \usenumberArabic{theorem}:} \textit{(#1)}} -\newcommand{\compactaxiom}[1]{\bg{JungleGreen}{A\usenumberArabic{axiom}:} \textit{(#1)}} -\newcommand{\compactcorollary}[1]{\bg{teal}{\translate{C}{K}\usenumberArabic{corollary}:} \textit{(#1)}} -\newcommand{\compactfact}[1]{\bg{SeaGreen}{F\usenumberArabic{fact}:} \textit{(#1)}} -\newcommand{\compactproposition}[1]{\bg{Cyan}{P\usenumberArabic{proposition}:} \textit{(#1)}} -\newcommand{\compactremark}[1]{\bg{green}{\tr{R}{B}\usenumberArabic{remark}:} \textit{(#1)}} -\newcommand{\compactproof}[1]{\bg{magenta}{\translate{Proof}{Beweis}: \textit{(#1)}}} - -% ▄▄ -% ▄▄█▀▀▀█▄█ ██ ▄█▀▀▀█▄█ ██ -% ▄██▀ ▀█ ██ ▄██ ▀█ -% ██▀ ▀ ▄██▀██▄▀████████▄█████▄ ▀████████▄▀███ ▀███ ██████ ▄▄█▀██▀███▄███ ▀███▄ ▄██▀██▀███ ▄▄█▀██▀████████▄ ▄██▀██ ▄▄█▀██ -% ██ ██▀ ▀██ ██ ██ ██ ██ ▀██ ██ ██ ██ ▄█▀ ██ ██▀ ▀▀ ▀█████▄█▀ ██ ██ ▄█▀ ██ ██ ██ ██▀ ██ ▄█▀ ██ -% ██▄ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀▀▀▀▀ ██ ▄ ▀███ ██ ██▀▀▀▀▀▀ ██ ██ ██ ██▀▀▀▀▀▀ -% ▀██▄ ▄▀██▄ ▄██ ██ ██ ██ ██ ▄██ ██ ██ ██ ██▄ ▄ ██ ██ ███▄ ▄ ██ ██▄ ▄ ██ ██ ██▄ ▄██▄ ▄ -% ▀▀█████▀ ▀█████▀▄████ ████ ████▄ ██████▀ ▀████▀███▄ ▀████ ▀█████▀████▄ █▀█████▀ █████▀▄████▄ ▀█████▀████ ████▄█████▀ ▀█████▀ -% ██ -% ▄████▄ - -\usepackage{forest} -\tikzset{algpxIndentLine/.style={draw=lightgray}} -\algrenewcommand{\alglinenumber}[1]{#1} - -\newenvironment{algo}[1]{ - \begin{algorithm} - \begin{spacing}{1.2} - \caption{\textsc{#1}} - \begin{algorithmic}[1] - }{ - \end{algorithmic} - \end{spacing} - \end{algorithm} -} - -% • ▌ ▄ ·. ▄▄▄· ▄▄▄▄▄ ▄ .▄ .▄▄ · ▄▄▄▄▄ ▄· ▄▌▄▄▌ ▄▄▄ . -% ·██ ▐███▪▐█ ▀█ •██ ██▪▐█ ▐█ ▀. •██ ▐█▪██▌██• ▀▄.▀· -% ▐█ ▌▐▌▐█·▄█▀▀█ ▐█.▪██▀▀█ ▄▀▀▀█▄ ▐█.▪▐█▌▐█▪██ ▪ ▐▀▀▪▄ -% ██ ██▌▐█▌▐█▪ ▐▌ ▐█▌·██▌▐▀ ▐█▄▪▐█ ▐█▌· ▐█▀·.▐█▌ ▄▐█▄▄▌ -% ▀▀ █▪▀▀▀ ▀ ▀ ▀▀▀ ▀▀▀ · ▀▀▀▀ ▀▀▀ ▀ • .▀▀▀ ▀▀▀ - -% Replace some commonly used commands with better ones -\renewcommand{\vec}[1]{\overrightarrow{#1}} -\renewcommand{\hat}[1]{\widehat{#1}} -\renewcommand{\tilde}[1]{\widetilde{#1}} -\newcommand{\proven}{$\hspace{17cm}\square$} - - -% ░█▒░▒▄▀▄░█▄░█░▄▀▒░█▒█▒▄▀▄░▄▀▒▒██▀░░░▄▀▀░▀█▀░▀▄▀░█▒░▒██▀ -% ▒█▄▄░█▀█░█▒▀█░▀▄█░▀▄█░█▀█░▀▄█░█▄▄▒░▒▄██░▒█▒░▒█▒▒█▄▄░█▄▄ - -% Specific styles for language summaries and docs -\newtcolorbox{conjugation}[2][]{mainboxstyle,colback=blue!5!white,colframe=blue!75!black,colbacktitle=blue!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=blue!75!black,fill=blue!75!black] at (frame.north east) {\large \translate{Conjugation}{Konjugation}};},#1} - -\newtcolorbox{forms}[2][]{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 \translate{Forms}{Formen}};},#1} - -% ___ _ _____ _ _ -% ( _ \ _( ) (_ _) ( ) ( ) -% | (_) )_) |_ | | __ \ \/ / -% | _ (| | _ \ | | / __ \ ) ( -% | (_) ) | |_) ) | | ( ___// /\ \ -% (____/(_)_ __/ (_) \____)_) (_) - -% Configs if you want to use BibTeX. Not included in any default configs. - -\newcommand{\setupBibtex}[1]{ - \usepackage{biblatex} - \usepackage[nottoc, numbib]{tocbibind} - \addbibresource{#1} -} - -\newcommand{\printbib}{ - \addcontentsline{toc}{section}{\translate{Sources}{Quellen}} - \printbibliography[title=\translate{Sources}{Quellen}] -} - - -%░▒█▀▀█░█░░▄▀▀▄░█▀▀░█▀▀░█▀▀▄░█▀▀▄░█░░█ -%░▒█░▄▄░█░░█░░█░▀▀▄░▀▀▄░█▄▄█░█▄▄▀░█▄▄█ -%░▒█▄▄▀░▀▀░░▀▀░░▀▀▀░▀▀▀░▀░░▀░▀░▀▀░▄▄▄▀ - -% Add glossaries functionality - -\newcommand{\setupGlossary}{ - \usepackage[nonumberlist, toc]{glossaries} - \usepackage[nottoc, numbib]{tocbibind} - \makenoidxglossaries -} - -\newcommand{\printGlossary}{ - \glsaddall - \printnoidxglossaries -} - -\usepackage{minted} -\usepackage{fancyvrb} - -\newcommand{\inlinecode}[1]{\shade{gray}{\texttt{#1}}} - -\newenvironment{code}[1]{ - \VerbatimEnvironment - \begin{minted}[ - autogobble, - breaklines, - breakindentnchars=2, - frame=lines, - framesep=2mm, - mathescape, - baselinestretch=1.1, - linenos]{#1}} -{\end{minted}} diff --git a/dist/janishutz-helpers-letters.sty b/dist/janishutz-helpers-letters.sty deleted file mode 100644 index 681290b..0000000 --- a/dist/janishutz-helpers-letters.sty +++ /dev/null @@ -1,32 +0,0 @@ -\usepackage[utf8]{inputenc} -\usepackage[T1]{fontenc} - -\setkomavar{date}{\city, \today} - -\newkomavar{fromplace} % a few koma vars -\setkomavar{fromname}{\name} -\setkomavar{fromaddress}{\street} -\setkomavar{fromplace}{\countrycode -\city} - -\KOMAoptions{foldmarks=off,fromrule=false} -\setkomavar{backaddress}{} - -\makeatletter % indention of the address fields -\setplength{toaddrhpos}{27mm} -\setplength{toaddrwidth}{92mm} -\setplength{sigindent}{0mm} -\makeatother - -\renewcommand*{\raggedsignature}{\raggedright} - -% Define new letter header -\setkomavar{firsthead}{ - \null\hfill - \parbox[t][\headheight][t]{4cm}{% - \vspace*{2cm} - - \usekomavar{fromname} \newline - \usekomavar{fromaddress} \newline - \usekomavar{fromplace} - } -}% diff --git a/dist/janishutz-helpers-minimal.sty b/dist/janishutz-helpers-minimal.sty deleted file mode 100644 index 52b131e..0000000 --- a/dist/janishutz-helpers-minimal.sty +++ /dev/null @@ -1,372 +0,0 @@ -\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} diff --git a/dist/janishutz-helpers-recommended.sty b/dist/janishutz-helpers-recommended.sty deleted file mode 100644 index a6ead4b..0000000 --- a/dist/janishutz-helpers-recommended.sty +++ /dev/null @@ -1,1003 +0,0 @@ -\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} - -% ▄▄ -% ▀████▄ ▄███▀ ██ ███ -% ████ ████ ██ ██ -% █ ██ ▄█ ██ ▄█▀██▄ ██████ ███████▄ -% █ ██ █▀ ██ ██ ██ ██ ██ ██ -% █ ██▄█▀ ██ ▄█████ ██ ██ ██ -% █ ▀██▀ ██ ██ ██ ██ ██ ██ -% ▄███▄ ▀▀ ▄████▄████▀██▄ ▀███████ ████▄ - - -% BB shortcuts (for number spaces, etc) -\newcommand{\C}{\mathbb{C}} -\newcommand{\D}{\mathbb{D}} -\newcommand{\E}{\mathbb{E}} -\newcommand{\I}{\mathbb{I}} -\newcommand{\J}{\mathbb{J}} -\newcommand{\N}{\mathbb{N}} -\newcommand{\Q}{\mathbb{Q}} -\newcommand{\R}{\mathbb{R}} -\newcommand{\V}{\mathbb{V}} -\newcommand{\Z}{\mathbb{Z}} - -% Caligraphic -\newcommand{\cA}{\mathcal{A}} -\newcommand{\cB}{\mathcal{B}} -\newcommand{\cC}{\mathcal{C}} -\newcommand{\cD}{\mathcal{D}} -\newcommand{\cE}{\mathcal{E}} -\newcommand{\cF}{\mathcal{F}} -\newcommand{\cG}{\mathcal{G}} -\newcommand{\cH}{\mathcal{H}} -\newcommand{\cI}{\mathcal{I}} -\newcommand{\cJ}{\mathcal{J}} -\newcommand{\cK}{\mathcal{K}} -\newcommand{\cL}{\mathcal{L}} -\newcommand{\cM}{\mathcal{M}} -\newcommand{\cN}{\mathcal{N}} -\newcommand{\cO}{\mathcal{O}} -\newcommand{\cP}{\mathcal{P}} -\newcommand{\cQ}{\mathcal{Q}} -\newcommand{\cR}{\mathcal{R}} -\newcommand{\cS}{\mathcal{S}} -\newcommand{\cT}{\mathcal{T}} -\newcommand{\cU}{\mathcal{U}} -\newcommand{\cV}{\mathcal{V}} -\newcommand{\cW}{\mathcal{W}} -\newcommand{\cX}{\mathcal{X}} -\newcommand{\cY}{\mathcal{Y}} -\newcommand{\cZ}{\mathcal{Z}} - -% other useful shortcuts -\newcommand{\8}{\infty} -\newcommand{\dx}{\text{ d}} -\newcommand{\floor}[1]{\left\lfloor #1 \right\rfloor} -\newcommand{\ceil}[1]{\left\lceil #1 \right\rceil} -\newcommand{\hastoeq}{\overset{!}{=}} -\newcommand{\Leftrightarrowequiv}{\overset{\cdot}{\Leftrightarrow}} -\newcommand{\Longleftrightarrowequiv}{\overset{\cdot}{\Longleftrightarrow}} -\newcommand{\Rightarrowequiv}{\overset{\cdot}{\Rightarrow}} -\newcommand{\Leftarrowequiv}{\overset{\cdot}{\Leftarrow}} -\newcommand{\defAs}{\overset{\text{def}}{=}} -\newcommand{\der}[1]{\frac{\mbox{d}}{\mbox{d}#1}} -\newcommand{\dern}[2]{\frac{\mbox{d}^{#2}}{\mbox{d}^{#2}#1}} -\newcommand{\parder}[1]{\frac{\partial}{\partial #1}} -\newcommand{\pardern}[2]{\frac{\partial^{#2}}{\partial^{#2} #1}} -\newcommand{\defEquiv}{\overset{\text{def}}{\Leftrightarrow}} -\newcommand{\defImplies}{\overset{\text{def}}{\Rightarrow}} -\newcommand{\divides}{\hspace{0.25em}|\hspace{0.25em}} -\newcommand{\mbeq}{\overset{!}{=}} -\newcommand{\lcm}{\text{lcm}} -\newcommand{\limit}[2]{\lim_{#1 \rightarrow #2}} -\newcommand{\seq}[1]{(#1_n)_{n \geq 1}} -\newcommand{\ser}[2]{\sum_{k = 1}^{#2} #1_k} -\newcommand{\limni}{\limit{n}{\infty}} -\newcommand{\limnz}{\limit{n}{0}} -\newcommand{\limxz}{\limit{x_0}{0}} -\newcommand{\limhz}{\limit{h}{0}} -\newcommand{\liminfni}{\liminf_{n \rightarrow \infty}} -\newcommand{\limsupni}{\limsup_{n \rightarrow \infty}} -\newcommand{\elementstack}[2]{\genfrac{}{}{0pt}{}{#1}{#2}} -\DeclareMathOperator\arctanh{arctanh} -\DeclareMathOperator\arccosh{arccosh} -\DeclareMathOperator\arcsinh{arcsinh} - - -% ░▒█▀▀▄░▄▀▀▄░█▀▄▀█░▄▀▀▄░█░▒█░▀█▀░█▀▀░█▀▀▄░░░▒█▀▀▀█░█▀▄░░▀░░█▀▀░█▀▀▄░█▀▄░█▀▀ -% ░▒█░░░░█░░█░█░▀░█░█▄▄█░█░▒█░░█░░█▀▀░█▄▄▀░░░░▀▀▀▄▄░█░░░░█▀░█▀▀░█░▒█░█░░░█▀▀ -% ░▒█▄▄▀░░▀▀░░▀░░▒▀░█░░░░░▀▀▀░░▀░░▀▀▀░▀░▀▀░░░▒█▄▄▄█░▀▀▀░▀▀▀░▀▀▀░▀░░▀░▀▀▀░▀▀▀ - -% Extra imports -\RequirePackage{stmaryrd} -\RequirePackage{algorithm} -\RequirePackage{algpseudocodex} -\RequirePackage{setspace} -\RequirePackage{verbatim} -\RequirePackage{turnstile} -\RequirePackage{forloop} - -\newcommand{\Indent}{\hspace{\algorithmicindent}} - -\newcommand{\timecomplexity}{\fhlc{orange}{\ifnum\value{lang}<2{Time complexity}\else {Laufzeit}\fi} \hspace{0.5em}} -\newcommand{\tc}[1]{\timecomplexity $\Theta\left(#1\right)$} -\newcommand{\tct}[1]{\Theta\left(#1\right)} -\newcommand{\tco}[1]{\mathcal{O}\left(#1\right)} -\newcommand{\tcl}[1]{\Omega\left(#1\right)} -\newcommand{\wordbool}{(\Sigma_{\text{bool}})^*} -\newcommand{\words}[1]{(\Sigma_{\text{#1}})^*} -\newcommand{\word}{\Sigma^*} -\newcommand{\wordm}[1]{\Sigma_{\text{#1}}^*} -\newcommand{\alphabets}[1]{\Sigma_{\text{#1}}} -\newcommand{\alphabetbool}{\Sigma_{\text{bool}}} -\newcommand{\tR}{\text{R}} -\newcommand{\tC}{\text{C}} -\newcommand{\tN}{\text{N}} -\newcommand{\bigvdash}[2]{\sststile{#1}{#2}} -\newcommand{\class}{\text{\tr{Cl}{Kl}}} - -% ▄▄ -% ▀████▀ ▀███ -% ██ ██ -% ██ ▀████████▄ ▄█▀▀███ ▄▄█▀██▀██▀ ▀██▀ -% ██ ██ ██ ▄██ ██ ▄█▀ ██ ▀██ ▄█▀ -% ██ ██ ██ ███ ██ ██▀▀▀▀▀▀ ███ -% ██ ██ ██ ▀██ ██ ██▄ ▄ ▄█▀ ██▄ -% ▄████▄████ ████▄ ▀████▀███▄ ▀█████▀██▄ ▄██▄ - - -% For using index package -\newcommand{\prepareIndex}{ - \RequirePackage[T1]{fontenc} - \RequirePackage{imakeidx} - \makeindex -} - -\newcommand{\addIndexBold}[1]{\textbf{\index{\MakeLowercase{#1}} #1}} -\newcommand{\addIndexItalic}[1]{\textit{\index{\MakeLowercase{#1}} #1}} -\newcommand{\addIndex}[1]{\index{\MakeLowercase{#1}} #1} - - - -% ▄▄· ▄• ▄▌ ▐ ▄ ▄▄▄▄▄▄▄▄ .▄▄▄ -% ▐█ ▌▪ ▄█▀▄ █▪██▌•█▌▐█•██ ▀▄.▀·▀▄ █· -% ██ ▄▄▐█▌.▐▌█▌▐█▌▐█▐▐▌ ▐█.▪▐▀▀▪▄▐▀▀▄ -% ▐███▌▐█▌.▐▌▐█▄█▌██▐█▌ ▐█▌·▐█▄▄▌▐█•█▌ -% ·▀▀▀ ▀█▄▀▪ ▀▀▀ ▀▀ █▪ ▀▀▀ ▀▀▀ .▀ ▀ - -\RequirePackage{xstring} -\RequirePackage{etoolbox} -% tcolorbox and other stylistic elements (i.e. inline versions of them) that have counters -\newcounter{lemma}[section] -\newcounter{definition}[section] -\newcounter{corollary}[section] -\newcounter{theorem}[section] -\newcounter{axiom}[section] -\newcounter{example}[section] -\newcounter{fact}[section] -\newcounter{proposition}[section] -\newcounter{formula}[section] -\newcounter{remark}[section] -\newcounter{all}[section] - -\newcounter{lemmass}[subsection] -\newcounter{definitionss}[subsection] -\newcounter{corollaryss}[subsection] -\newcounter{theoremss}[subsection] -\newcounter{axiomss}[subsection] -\newcounter{exampless}[subsection] -\newcounter{factss}[subsection] -\newcounter{propositionss}[subsection] -\newcounter{formulass}[subsection] -\newcounter{remarkss}[subsection] -\newcounter{allss}[subsection] - -\newcounter{lemmasss}[subsubsection] -\newcounter{definitionsss}[subsubsection] -\newcounter{corollarysss}[subsubsection] -\newcounter{theoremsss}[subsubsection] -\newcounter{axiomsss}[subsubsection] -\newcounter{examplesss}[subsubsection] -\newcounter{factsss}[subsubsection] -\newcounter{propositionsss}[subsubsection] -\newcounter{formulasss}[subsubsection] -\newcounter{remarksss}[subsubsection] -\newcounter{allsss}[subsubsection] - -% Set the current number of a label -\newcommand{\setLabelNumber}[2]{% - \setcounter{#1}{#2}% - \addtocounter{#1}{-1}% - \setcounter{#1ss}{#2}% - \addtocounter{#1ss}{-1}% - \setcounter{#1sss}{#2}% - \addtocounter{#1sss}{-1}% -} - -\newcommand{\stepLabelNumber}[1]{% - \stepcounter{#1}% - \stepcounter{#1ss}% - \stepcounter{#1sss}% -} - -\newcommand{\printcounter}[1]{% - \csname the#1\endcsname -} - -\newcommand{\suffix}{ss} -\newcommand{\sectionNumbering}{\thesection} - -% ┌ ┐ -% │ Counter numbering │ -% └ ┘ -\newcommand{\preTableAndFigHook}[1]{% - \ifnum\value{numberingConfig}>1 - \ifnum\value{numberSubsections}=1 - \stepcounter{allss} - \else - \ifnum\value{numberSubsections}=2 - \stepcounter{allsss} - \else - \stepcounter{all} - \fi - \fi - \fi -} -\AtBeginEnvironment{table}{\preTableAndFigHook{table}} -\AtBeginEnvironment{figure}{\preTableAndFigHook{figure}} - -\newcommand{\applyTableAndFigureNumbering}{ - % Tables & Figures - \ifnum\value{numberingConfig}=0 - \renewcommand{\thetable}{} - \renewcommand{\thefigure}{} - \else - \ifnum\value{numberingConfig}=1 - \renewcommand{\thetable}{\sectionNumbering.\arabic{table}} - \renewcommand{\thefigure}{\sectionNumbering.\arabic{figure}} - \else - \ifnum\value{numberSubsections}=1 - \renewcommand{\thetable}{\sectionNumbering.\arabic{allss}} - \renewcommand{\thefigure}{\sectionNumbering.\arabic{allss}} - \else - \ifnum\value{numberSubsections}=2 - \renewcommand{\thetable}{\refstepcounter{allsss}\sectionNumbering.\arabic{allsss}} - \renewcommand{\thefigure}{\sectionNumbering.\arabic{allsss}} - \else - \renewcommand{\thetable}{\sectionNumbering.\arabic{all}} - \renewcommand{\thefigure}{\sectionNumbering.\arabic{all}} - \fi - \fi - \fi - \fi -} - -\newcommand{\setSubsectionNumbering}[1]{ - \setcounter{numberSubsections}{#1} - \applySubsectionNumbering -} - -\newcommand{\applySubsectionNumbering}{ - \ifnum\value{numberSubsections}=1 - \renewcommand{\sectionNumbering}{\thesubsection} - \renewcommand{\suffix}{ss} - \typeout{Numbering as section.subsection.number} - \else - \ifnum\value{numberSubsections}=2 - \renewcommand{\sectionNumbering}{\thesubsubsection} - \renewcommand{\suffix}{sss} - \typeout{Numbering as section.subsection.subsubsection.number} - \else - \renewcommand{\sectionNumbering}{\thesection} - \renewcommand{\suffix}{} - \typeout{Numbering as section.number} - \fi - \fi - \applyTableAndFigureNumbering - - \renewcommand{\thelemma}{\sectionNumbering.\arabic{lemma}} - \renewcommand{\thedefinition}{\sectionNumbering.\arabic{definition}} - \renewcommand{\thecorollary}{\sectionNumbering.\arabic{corollary}} - \renewcommand{\thetheorem}{\sectionNumbering.\arabic{theorem}} - \renewcommand{\theaxiom}{\sectionNumbering.\arabic{axiom}} - \renewcommand{\theexample}{\sectionNumbering.\arabic{example}} - \renewcommand{\thefact}{\sectionNumbering.\arabic{fact}} - \renewcommand{\theproposition}{\sectionNumbering.\arabic{proposition}} - \renewcommand{\theformula}{\sectionNumbering.\arabic{formula}} - \renewcommand{\theremark}{\sectionNumbering.\arabic{remark}} - \renewcommand{\theall}{\sectionNumbering.\arabic{all}} - - \renewcommand{\thelemmass}{\sectionNumbering.\arabic{lemmass}} - \renewcommand{\thedefinitionss}{\sectionNumbering.\arabic{definitionss}} - \renewcommand{\thecorollaryss}{\sectionNumbering.\arabic{corollaryss}} - \renewcommand{\thetheoremss}{\sectionNumbering.\arabic{theoremss}} - \renewcommand{\theaxiomss}{\sectionNumbering.\arabic{axiomss}} - \renewcommand{\theexampless}{\sectionNumbering.\arabic{exampless}} - \renewcommand{\thefactss}{\sectionNumbering.\arabic{factss}} - \renewcommand{\thepropositionss}{\sectionNumbering.\arabic{propositionss}} - \renewcommand{\theformulass}{\sectionNumbering.\arabic{formulass}} - \renewcommand{\theremarkss}{\sectionNumbering.\arabic{remarkss}} - \renewcommand{\theallss}{\sectionNumbering.\arabic{allss}} - - \renewcommand{\thelemmasss}{\sectionNumbering.\arabic{lemmasss}} - \renewcommand{\thedefinitionsss}{\sectionNumbering.\arabic{definitionsss}} - \renewcommand{\thecorollarysss}{\sectionNumbering.\arabic{corollarysss}} - \renewcommand{\thetheoremsss}{\sectionNumbering.\arabic{theoremsss}} - \renewcommand{\theaxiomsss}{\sectionNumbering.\arabic{axiomsss}} - \renewcommand{\theexamplesss}{\sectionNumbering.\arabic{examplesss}} - \renewcommand{\thefactsss}{\sectionNumbering.\arabic{factsss}} - \renewcommand{\thepropositionsss}{\sectionNumbering.\arabic{propositionsss}} - \renewcommand{\theformulasss}{\sectionNumbering.\arabic{formulasss}} - \renewcommand{\theremarksss}{\sectionNumbering.\arabic{remarksss}} - \renewcommand{\theallsss}{\sectionNumbering.\arabic{allsss}} -} -\applySubsectionNumbering - -% ── Label generation ──────────────────────────────────────────────── -\newcommand{\labelSectionGeneration}{% - \ifnum\value{numberSubsections}=1 - \arabic{section}-\arabic{subsection}% - \else - \ifnum\value{numberSubsections}=2 - \arabic{section}-\arabic{subsection}-\arabic{subsubsection}% - \else - \arabic{section}% - \fi - \fi} - -\newcommand{\labelIt}[1]{\refstepcounter{#1\suffix}\edef\tempLabel{\genLabel{#1}{\arabic{#1\suffix}}}\label{\tempLabel}} -\newcommand{\genLabel}[2]{#1:\labelSectionGeneration-#2} - -% ┌ ┐ -% │ Number the counters appropriately │ -% └ ┘ -\newcommand{\usenumberArabic}[1]{% - \ifnum\value{numberingConfig}=1 - \labelIt{#1} - \printcounter{#1\suffix}% - \else - \ifnum\value{numberingConfig}=2 - \ifthenelse{\equal{#1}{definitions}}{% - \labelIt{definition} - \printcounter{definition\suffix}% - }{% - \labelIt{all} - \printcounter{all\suffix}% - }% - \else - \ifnum\value{numberingConfig}=3 - \labelIt{all} - \printcounter{all\suffix}% - \else - \relax% - \fi - \fi - \fi} - - -% ──────────────────────────────────────────────────────────────────── -% ┌ ┐ -% │ Enable or disable numbering │ -% └ ┘ -% Initialize with config file -\newcounter{numberingConfigStore} -\setcounter{numberingConfigStore}{\value{numberingConfig}} - -% For later change -\newcommand{\setNumberingStyle}[1]{ - \typeout{Setting NumberingStyle to #1} - \setcounter{numberingConfig}{#1} - \ifthenelse{\equal{#1}{0}}{}{ - \setcounter{numberingConfigStore}{#1} - } - \applyTableAndFigureNumbering -} - -% Enable / disable numbering -\newcommand{\numberingOff}{ - \setcounter{numberingConfig}{0} - \applyTableAndFigureNumbering -} -\newcommand{\numberingOn}{ - \setcounter{numberingConfig}{\value{numberingConfigStore}} - \applyTableAndFigureNumbering -} - -% ──────────────────────────────────────────────────────────────────── -% ╭────────────────────────────────────────────────╮ -% │ Reset definition, lemma, etc counters, add a │ -% │ new page │ -% ╰────────────────────────────────────────────────╯ -\newcommand{\newsection}{ - \newpage - \newsectionNoPB -} - -% ── Reset definitions, lemma, etc counters, do not add new page ───── -\newcommand{\newsectionNoPB}{ - \setcounter{lemma}{0} - \setcounter{definition}{0} - \setcounter{corollary}{0} - \setcounter{theorem}{0} - \setcounter{axiom}{0} - \setcounter{example}{0} - \setcounter{fact}{0} - \setcounter{proposition}{0} - \setcounter{formula}{0} - \setcounter{remark}{0} - \setcounter{all}{0} - - \setcounter{lemmass}{0} - \setcounter{definitionss}{0} - \setcounter{corollaryss}{0} - \setcounter{theoremss}{0} - \setcounter{axiomss}{0} - \setcounter{exampless}{0} - \setcounter{factss}{0} - \setcounter{propositionss}{0} - \setcounter{formulass}{0} - \setcounter{remarkss}{0} - \setcounter{allss}{0} - - \setcounter{lemmasss}{0} - \setcounter{definitionsss}{0} - \setcounter{corollarysss}{0} - \setcounter{theoremsss}{0} - \setcounter{axiomsss}{0} - \setcounter{examplesss}{0} - \setcounter{factsss}{0} - \setcounter{propositionsss}{0} - \setcounter{formulasss}{0} - \setcounter{remarksss}{0} - \setcounter{allsss}{0} - - % Tables & Figures - \setcounter{table}{0} - \setcounter{figure}{0} -} -\newsectionNoPB % Initializes - - -% ──────────────────────────────────────────────────────────────────── -% ╭────────────────────────────────────────────────╮ -% │ Tcolorboxes │ -% ╰────────────────────────────────────────────────╯ -% ──────────────────────────────────────────────────────────────────── - -% Definitions -\newtcolorbox{definition}[2][]{mainboxstyle,colback=blue!5!white,colframe=blue!75!black,colbacktitle=blue!75!black,title={\large #2},overlay={\node[overlaystyle,draw=blue!75!black,fill=blue!75!black] at (frame.north east) {\large Definition\usenumberArabic{definition}};},#1} - -% Theorems -\newtcolorbox{theorem}[2][]{mainboxstyle,colback=ForestGreen!5!white,colframe=ForestGreen!75!black,colbacktitle=ForestGreen!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=ForestGreen!75!black,fill=ForestGreen!75!black] at (frame.north east) {\large \translate{Theorem}{\theoremde}\usenumberArabic{theorem}};},#1} - -% Lemmas -\newtcolorbox{lemma}[2][]{mainboxstyle,colback=Aquamarine!5!white,colframe=Aquamarine!75!black,colbacktitle=Aquamarine!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=Aquamarine!75!black,fill=Aquamarine!75!black] at (frame.north east) {\large Lemma\usenumberArabic{lemma}};},#1} - -% Corollaries -\newtcolorbox{corollary}[2][]{mainboxstyle,colback=teal!5!white,colframe=teal!75!black,colbacktitle=teal!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=teal!75!black,fill=teal!75!black] at (frame.north east) {\large \translate{Corollary}{Korollar}\usenumberArabic{corollary}};},#1} - -% Axioms -\newtcolorbox{axiom}[2][]{mainboxstyle,colback=JungleGreen!5!white,colframe=JungleGreen!75!black,colbacktitle=JungleGreen!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=JungleGreen!75!black,fill=JungleGreen!75!black] at (frame.north east) {\large Axiom\usenumberArabic{axiom}};},#1} - -% Facts -\newtcolorbox{fact}[2][]{mainboxstyle,colback=SeaGreen!5!white,colframe=SeaGreen!75!black,colbacktitle=SeaGreen!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=SeaGreen!75!black,fill=SeaGreen!75!black] at (frame.north east) {\large \translate{Fact}{Fakt}\usenumberArabic{fact}};},#1} - -% Propositions -\newtcolorbox{proposition}[2][]{mainboxstyle,colback=Cyan!5!white,colframe=Cyan!75!black,colbacktitle=Cyan!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=Cyan!75!black,fill=Cyan!75!black] at (frame.north east) {\large Proposition\usenumberArabic{proposition}};},#1} - -% Examples -\newtcolorbox{example}[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{Example}{Beispiel}\usenumberArabic{example}};},#1} - -% Formula -\newtcolorbox{formula}[2][]{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 \translate{Formula}{Formel}\usenumberArabic{formula}};},#1} - -% Remark -\newtcolorbox{remark}[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{Remark}{Bemerkung} \usenumberArabic{remark}};},#1} - - -% ──────────────────────────────────────────────────────────────────── -% ╭────────────────────────────────────────────────╮ -% │ Inline environments │ -% ╰────────────────────────────────────────────────╯ -% ──────────────────────────────────────────────────────────────────── - - -% Inline environments (inline) -\newcommand{\inlineex}{\bg{gray}{\translate{Example}{Beispiel}\usenumberArabic{example}:}} -\newcommand{\inlinedef}{\bg{blue}{Definition\usenumberArabic{definition}:}} -\newcommand{\inlineformula}{\bg{red}{\translate{Formula}{Formel}\usenumberArabic{formula}:}} -\newcommand{\inlinelemma}{\bg{Aquamarine}{Lemma\usenumberArabic{lemma}:}} -\newcommand{\inlinetheorem}{\bg{ForestGreen}{\translate{Theorem}{\theoremde}\usenumberArabic{theorem}:}} -\newcommand{\inlineaxiom}{\bg{JungleGreen}{Axiom\usenumberArabic{axiom}:}} -\newcommand{\inlinecorollary}{\bg{teal}{\translate{Corollary}{Korollar}\usenumberArabic{corollary}:}} -\newcommand{\inlinefact}{\bg{SeaGreen}{\translate{Fact}{Fakt}\usenumberArabic{fact}:}} -\newcommand{\inlineproposition}{\bg{Cyan}{Proposition\usenumberArabic{proposition}:}} -\newcommand{\inlineremark}{\bg{green}{\translate{Remark}{Bemerkung}\usenumberArabic{remark}:}} -\newcommand{\inlineproof}{\bg{magenta}{\translate{Proof}{Beweis}:}} - -% Enhanced inline environments -\newcommand{\fancyex}[1]{\bg{gray}{\translate{Example}{Beispiel}\usenumberArabic{example}:} \textit{(#1)}} -\newcommand{\fancydef}[1]{\bg{blue}{Definition\usenumberArabic{definition}:} \textit{(#1)}} -\newcommand{\fancyformula}[1]{\bg{red}{\translate{Formula}{Formel}\usenumberArabic{formula}:} \textit{(#1)}} -\newcommand{\fancylemma}[1]{\bg{Aquamarine}{Lemma\usenumberArabic{lemma}:} \textit{(#1)}} -\newcommand{\fancytheorem}[1]{\bg{ForestGreen}{\translate{Theorem}{\theoremde}\usenumberArabic{theorem}:} \textit{(#1)}} -\newcommand{\fancyaxiom}[1]{\bg{JungleGreen}{Axiom\usenumberArabic{axiom}:} \textit{(#1)}} -\newcommand{\fancycorollary}[1]{\bg{teal}{\translate{Corollary}{Korollar}\usenumberArabic{corollary}:} \textit{(#1)}} -\newcommand{\fancyfact}[1]{\bg{SeaGreen}{\translate{Fact}{Fakt}\usenumberArabic{fact}:} \textit{(#1)}} -\newcommand{\fancyproposition}[1]{\bg{Cyan}{Proposition\usenumberArabic{proposition}:} \textit{(#1)}} -\newcommand{\fancyremark}[1]{\bg{green}{\translate{Remark}{Bemerkung}\usenumberArabic{remark}:} \textit{(#1)}} -\newcommand{\fancyproof}[1]{\bg{magenta}{\translate{Proof}{Beweis}: \textit{(#1)}}} - -% short environments (abbreviated) -\newcommand{\shortex}{\bg{gray}{\translate{Ex}{Bsp}\usenumberArabic{example}:}} -\newcommand{\shortdef}{\bg{blue}{D\usenumberArabic{definition}:}} -\newcommand{\short}{\bg{red}{F\usenumberArabic{formula}:}} -\newcommand{\shortlemma}{\bg{Aquamarine}{L\usenumberArabic{lemma}:}} -\newcommand{\shorttheorem}{\bg{ForestGreen}{\translate{T}{\StrMid{\theoremde}{1}{1}}\usenumberArabic{theorem}:}} -\newcommand{\shortaxiom}{\bg{JungleGreen}{A\usenumberArabic{axiom}:}} -\newcommand{\shortcorollary}{\bg{teal}{\translate{C}{K}\usenumberArabic{corollary}:}} -\newcommand{\shortfact}{\bg{SeaGreen}{F\usenumberArabic{fact}:}} -\newcommand{\shortproposition}{\bg{Cyan}{P\usenumberArabic{proposition}:}} -\newcommand{\shortremark}{\bg{green}{\tr{R}{B}\usenumberArabic{remark}:}} -\newcommand{\shortproof}{\bg{magenta}{\translate{Proof}{Beweis}:}} - -% Enhanced short environments (abbreviated) -\newcommand{\compactex}[1]{\bg{gray}{\translate{Ex}{Bsp}\usenumberArabic{example}:} \textit{(#1)}} -\newcommand{\compactdef}[1]{\bg{blue}{D\usenumberArabic{definition}:} \textit{(#1)}} -\newcommand{\compactformula}[1]{\bg{red}{F\usenumberArabic{formula}:} \textit{(#1)}} -\newcommand{\compactlemma}[1]{\bg{Aquamarine}{L\usenumberArabic{lemma}:} \textit{(#1)}} -\newcommand{\compacttheorem}[1]{\bg{ForestGreen}{\translate{T}{\StrMid{\theoremde}{1}{1}} \usenumberArabic{theorem}:} \textit{(#1)}} -\newcommand{\compactaxiom}[1]{\bg{JungleGreen}{A\usenumberArabic{axiom}:} \textit{(#1)}} -\newcommand{\compactcorollary}[1]{\bg{teal}{\translate{C}{K}\usenumberArabic{corollary}:} \textit{(#1)}} -\newcommand{\compactfact}[1]{\bg{SeaGreen}{F\usenumberArabic{fact}:} \textit{(#1)}} -\newcommand{\compactproposition}[1]{\bg{Cyan}{P\usenumberArabic{proposition}:} \textit{(#1)}} -\newcommand{\compactremark}[1]{\bg{green}{\tr{R}{B}\usenumberArabic{remark}:} \textit{(#1)}} -\newcommand{\compactproof}[1]{\bg{magenta}{\translate{Proof}{Beweis}: \textit{(#1)}}} - -% ▄▄ -% ▄▄█▀▀▀█▄█ ██ ▄█▀▀▀█▄█ ██ -% ▄██▀ ▀█ ██ ▄██ ▀█ -% ██▀ ▀ ▄██▀██▄▀████████▄█████▄ ▀████████▄▀███ ▀███ ██████ ▄▄█▀██▀███▄███ ▀███▄ ▄██▀██▀███ ▄▄█▀██▀████████▄ ▄██▀██ ▄▄█▀██ -% ██ ██▀ ▀██ ██ ██ ██ ██ ▀██ ██ ██ ██ ▄█▀ ██ ██▀ ▀▀ ▀█████▄█▀ ██ ██ ▄█▀ ██ ██ ██ ██▀ ██ ▄█▀ ██ -% ██▄ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀▀▀▀▀ ██ ▄ ▀███ ██ ██▀▀▀▀▀▀ ██ ██ ██ ██▀▀▀▀▀▀ -% ▀██▄ ▄▀██▄ ▄██ ██ ██ ██ ██ ▄██ ██ ██ ██ ██▄ ▄ ██ ██ ███▄ ▄ ██ ██▄ ▄ ██ ██ ██▄ ▄██▄ ▄ -% ▀▀█████▀ ▀█████▀▄████ ████ ████▄ ██████▀ ▀████▀███▄ ▀████ ▀█████▀████▄ █▀█████▀ █████▀▄████▄ ▀█████▀████ ████▄█████▀ ▀█████▀ -% ██ -% ▄████▄ - -\usepackage{forest} -\tikzset{algpxIndentLine/.style={draw=lightgray}} -\algrenewcommand{\alglinenumber}[1]{#1} - -\newenvironment{algo}[1]{ - \begin{algorithm} - \begin{spacing}{1.2} - \caption{\textsc{#1}} - \begin{algorithmic}[1] - }{ - \end{algorithmic} - \end{spacing} - \end{algorithm} -} - -% • ▌ ▄ ·. ▄▄▄· ▄▄▄▄▄ ▄ .▄ .▄▄ · ▄▄▄▄▄ ▄· ▄▌▄▄▌ ▄▄▄ . -% ·██ ▐███▪▐█ ▀█ •██ ██▪▐█ ▐█ ▀. •██ ▐█▪██▌██• ▀▄.▀· -% ▐█ ▌▐▌▐█·▄█▀▀█ ▐█.▪██▀▀█ ▄▀▀▀█▄ ▐█.▪▐█▌▐█▪██ ▪ ▐▀▀▪▄ -% ██ ██▌▐█▌▐█▪ ▐▌ ▐█▌·██▌▐▀ ▐█▄▪▐█ ▐█▌· ▐█▀·.▐█▌ ▄▐█▄▄▌ -% ▀▀ █▪▀▀▀ ▀ ▀ ▀▀▀ ▀▀▀ · ▀▀▀▀ ▀▀▀ ▀ • .▀▀▀ ▀▀▀ - -% Replace some commonly used commands with better ones -\renewcommand{\vec}[1]{\overrightarrow{#1}} -\renewcommand{\hat}[1]{\widehat{#1}} -\renewcommand{\tilde}[1]{\widetilde{#1}} -\newcommand{\proven}{$\hspace{17cm}\square$} - - -% ░█▒░▒▄▀▄░█▄░█░▄▀▒░█▒█▒▄▀▄░▄▀▒▒██▀░░░▄▀▀░▀█▀░▀▄▀░█▒░▒██▀ -% ▒█▄▄░█▀█░█▒▀█░▀▄█░▀▄█░█▀█░▀▄█░█▄▄▒░▒▄██░▒█▒░▒█▒▒█▄▄░█▄▄ - -% Specific styles for language summaries and docs -\newtcolorbox{conjugation}[2][]{mainboxstyle,colback=blue!5!white,colframe=blue!75!black,colbacktitle=blue!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=blue!75!black,fill=blue!75!black] at (frame.north east) {\large \translate{Conjugation}{Konjugation}};},#1} - -\newtcolorbox{forms}[2][]{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 \translate{Forms}{Formen}};},#1} - -% ___ _ _____ _ _ -% ( _ \ _( ) (_ _) ( ) ( ) -% | (_) )_) |_ | | __ \ \/ / -% | _ (| | _ \ | | / __ \ ) ( -% | (_) ) | |_) ) | | ( ___// /\ \ -% (____/(_)_ __/ (_) \____)_) (_) - -% Configs if you want to use BibTeX. Not included in any default configs. - -\newcommand{\setupBibtex}[1]{ - \usepackage{biblatex} - \usepackage[nottoc, numbib]{tocbibind} - \addbibresource{#1} -} - -\newcommand{\printbib}{ - \addcontentsline{toc}{section}{\translate{Sources}{Quellen}} - \printbibliography[title=\translate{Sources}{Quellen}] -} - - -%░▒█▀▀█░█░░▄▀▀▄░█▀▀░█▀▀░█▀▀▄░█▀▀▄░█░░█ -%░▒█░▄▄░█░░█░░█░▀▀▄░▀▀▄░█▄▄█░█▄▄▀░█▄▄█ -%░▒█▄▄▀░▀▀░░▀▀░░▀▀▀░▀▀▀░▀░░▀░▀░▀▀░▄▄▄▀ - -% Add glossaries functionality - -\newcommand{\setupGlossary}{ - \usepackage[nonumberlist, toc]{glossaries} - \usepackage[nottoc, numbib]{tocbibind} - \makenoidxglossaries -} - -\newcommand{\printGlossary}{ - \glsaddall - \printnoidxglossaries -} diff --git a/extra/bib.tex b/extra/bib.tex deleted file mode 100644 index 18fa5a0..0000000 --- a/extra/bib.tex +++ /dev/null @@ -1,19 +0,0 @@ -% ___ _ _____ _ _ -% ( _ \ _( ) (_ _) ( ) ( ) -% | (_) )_) |_ | | __ \ \/ / -% | _ (| | _ \ | | / __ \ ) ( -% | (_) ) | |_) ) | | ( ___// /\ \ -% (____/(_)_ __/ (_) \____)_) (_) - -% Configs if you want to use BibTeX. Not included in any default configs. - -\newcommand{\setupBibtex}[1]{ - \usepackage{biblatex} - \usepackage[nottoc, numbib]{tocbibind} - \addbibresource{#1} -} - -\newcommand{\printbib}{ - \addcontentsline{toc}{section}{\translate{Sources}{Quellen}} - \printbibliography[title=\translate{Sources}{Quellen}] -} diff --git a/extra/glossary.tex b/extra/glossary.tex deleted file mode 100644 index 3e61fb2..0000000 --- a/extra/glossary.tex +++ /dev/null @@ -1,17 +0,0 @@ - -%░▒█▀▀█░█░░▄▀▀▄░█▀▀░█▀▀░█▀▀▄░█▀▀▄░█░░█ -%░▒█░▄▄░█░░█░░█░▀▀▄░▀▀▄░█▄▄█░█▄▄▀░█▄▄█ -%░▒█▄▄▀░▀▀░░▀▀░░▀▀▀░▀▀▀░▀░░▀░▀░▀▀░▄▄▄▀ - -% Add glossaries functionality - -\newcommand{\setupGlossary}{ - \usepackage[nonumberlist, toc]{glossaries} - \usepackage[nottoc, numbib]{tocbibind} - \makenoidxglossaries -} - -\newcommand{\printGlossary}{ - \glsaddall - \printnoidxglossaries -} diff --git a/extra/minted.tex b/extra/minted.tex deleted file mode 100644 index 765fa42..0000000 --- a/extra/minted.tex +++ /dev/null @@ -1,17 +0,0 @@ -\usepackage{minted} -\usepackage{fancyvrb} - -\newcommand{\inlinecode}[1]{\shade{gray}{\texttt{#1}}} - -\newenvironment{code}[1]{ - \VerbatimEnvironment - \begin{minted}[ - autogobble, - breaklines, - breakindentnchars=2, - frame=lines, - framesep=2mm, - mathescape, - baselinestretch=1.1, - linenos]{#1}} -{\end{minted}} diff --git a/include.tex b/include.tex deleted file mode 100644 index 4ec9ddf..0000000 --- a/include.tex +++ /dev/null @@ -1,3 +0,0 @@ -% Loader -\usepackage{currfile} -\usepackage{\currfileabsdir janishutz-helpers} diff --git a/janishutz-helpers.sty b/janishutz-helpers.sty deleted file mode 100644 index a905dc7..0000000 --- a/janishutz-helpers.sty +++ /dev/null @@ -1,2 +0,0 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{janishutz-helpers}[2.0.0] diff --git a/scopes/letter.tex b/scopes/letter.tex deleted file mode 100644 index 681290b..0000000 --- a/scopes/letter.tex +++ /dev/null @@ -1,32 +0,0 @@ -\usepackage[utf8]{inputenc} -\usepackage[T1]{fontenc} - -\setkomavar{date}{\city, \today} - -\newkomavar{fromplace} % a few koma vars -\setkomavar{fromname}{\name} -\setkomavar{fromaddress}{\street} -\setkomavar{fromplace}{\countrycode -\city} - -\KOMAoptions{foldmarks=off,fromrule=false} -\setkomavar{backaddress}{} - -\makeatletter % indention of the address fields -\setplength{toaddrhpos}{27mm} -\setplength{toaddrwidth}{92mm} -\setplength{sigindent}{0mm} -\makeatother - -\renewcommand*{\raggedsignature}{\raggedright} - -% Define new letter header -\setkomavar{firsthead}{ - \null\hfill - \parbox[t][\headheight][t]{4cm}{% - \vspace*{2cm} - - \usekomavar{fromname} \newline - \usekomavar{fromaddress} \newline - \usekomavar{fromplace} - } -}% diff --git a/src/config/colors.sty b/src/config/colors.sty new file mode 100644 index 0000000..93ba893 --- /dev/null +++ b/src/config/colors.sty @@ -0,0 +1,23 @@ +% ┌ ┐ +% │ Colours │ +% └ ┘ +% You may also use \definecolor{}{rgb}{r, g, b} to define a fully custom color +% see https://www.overleaf.com/learn/latex/Using_colors_in_LaTeX#Creating_your_own_colors for more information +\colorlet{definitioncolor}{blue} +\colorlet{theoremcolor}{ForestGreen} +\colorlet{lemmacolor}{Aquamarine} +\colorlet{corollarycolor}{teal} +\colorlet{axiomcolor}{JungleGreen} +\colorlet{factcolor}{SeaGreen} +\colorlet{propositioncolor}{Cyan} +\colorlet{examplecolor}{gray} +\colorlet{formulacolor}{red} +\colorlet{remarkcolor}{green} +\colorlet{proofcolor}{magenta} +\colorlet{intuitioncolor}{Emerald} +\colorlet{termcolor}{orange} +\colorlet{notationcolor}{Peach} +\colorlet{taskcolor}{gray} +\colorlet{usagecolor}{LimeGreen} +\colorlet{recallcolor}{yellow} +\colorlet{propertiescolor}{purple} diff --git a/src/config/main.sty b/src/config/main.sty new file mode 100644 index 0000000..279d58d --- /dev/null +++ b/src/config/main.sty @@ -0,0 +1,39 @@ +% ┌ ┐ +% │ General config │ +% └ ┘ +% 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} + + +% ┌ ┐ +% │ Rendering │ +% └ ┘ +% Short descriptors are generated from the naming defined in naming.sty +% You may here configure how they are generated. #1 is the full name. +\newcommand{\shortDescriptorNameTemplate}[1]{\StrBefore[1]{#1}} + +% Decide if the numbering should show a space preceding it. +\newcommand{\useSpaceBeforeNumbering}{true} + +% Specify how the inline and short descriptors (e.g. Lemma, etc) are rendered. +% - #1 is the name of the descriptor (or the shortened version, as configured) +% - #2 is the number (correctly rendered according to settings and preceded with space if not disabled) +% - #3 is the corresponding color +% - #4 is the name passed (non-empty) +\newcommand{\shortDescriptorTemplate}[4]{\bg{#3}{#1#2} \textit{(#4)}} +\newcommand{\inlineDescriptorTemplate}[4]{\bg{#3}{#1#2} \textit{(#4)}} + +% These are used if no name is provided and argument #4 from above is the missing argument +\newcommand{\anonymousShortDescriptorTemplate}[3]{\bg{#3}{#1#2}} +\newcommand{\anonymousInlineDescriptorTemplate}[3]{\bg{#3}{#1#2}} + +% background command config (draws a small box around the content) +\newcommand{\backgroundPadding}{2pt} +\newcommand{\backgroundRounding}{0.1pt} diff --git a/src/config/naming.sty b/src/config/naming.sty new file mode 100644 index 0000000..3c81385 --- /dev/null +++ b/src/config/naming.sty @@ -0,0 +1,41 @@ +% ┌ ┐ +% │ Naming │ +% └ ┘ +% Here you may specify how each descriptor is named +\newcommand{\definitionNamingEN}{Definition} +\newcommand{\theoremNamingEN}{Theorem} +\newcommand{\lemmaNamingEN}{Lemma} +\newcommand{\corollaryNamingEN}{Corollary} +\newcommand{\axiomNamingEN}{Axiom} +\newcommand{\factNamingEN}{Fact} +\newcommand{\propositionNamingEN}{Proposition} +\newcommand{\exampleNamingEN}{Example} +\newcommand{\formulaNamingEN}{Formula} +\newcommand{\remarkNamingEN}{Remark} +\newcommand{\proofNamingEN}{Proof} +\newcommand{\intuitionNamingEN}{Intuition} +\newcommand{\termNamingEN}{Term} +\newcommand{\notationNamingEN}{Notation} +\newcommand{\taskNamingEN}{Task} +\newcommand{\usageNamingEN}{Usage} +\newcommand{\recallNamingEN}{Recall} +\newcommand{\propertiesNamingEN}{Properties} + +\newcommand{\definitionNamingDE}{Definition} +\newcommand{\theoremNamingDE}{Theorem} +\newcommand{\lemmaNamingDE}{Lemma} +\newcommand{\corollaryNamingDE}{Korollar} +\newcommand{\axiomNamingDE}{Axiom} +\newcommand{\factNamingDE}{Fakt} +\newcommand{\propositionNamingDE}{Satz} +\newcommand{\exampleNamingDE}{Beispiel} +\newcommand{\formulaNamingDE}{Formel} +\newcommand{\remarkNamingDE}{Bemerkung} +\newcommand{\proofNamingDE}{Beweis} +\newcommand{\intuitionNamingDE}{Intuition} +\newcommand{\termNamingDE}{Begriff} +\newcommand{\notationNamingDE}{Notation} +\newcommand{\taskNamingDE}{Aufgabe} +\newcommand{\usageNamingDE}{Nutzung} +\newcommand{\recallNamingDE}{Repetition} +\newcommand{\propertiesNamingDE}{Eigenschaften} diff --git a/src/config/numbering.sty b/src/config/numbering.sty new file mode 100644 index 0000000..1b0e504 --- /dev/null +++ b/src/config/numbering.sty @@ -0,0 +1,37 @@ +% ┌ ┐ +% │ Numbering │ +% └ ┘ +% Set a preset, can be combined, separate, separatedef (all combined but definitions), custom or off. +% If set to custom, all type specific commands need to be set below. +\newcommand{\numberingpreset}{combined} + +% Specify how elements are to be numbered. Can be (X is the current number of the element): +% - none (X) +% - section (section.X) +% - subsection (section.subsection.X) +% - subsubsection (section.subsection.subsubsection.X) +% - subsubsubsection (section.subsection.subsubsection.subsubsubsection.X) +\newcommand{\subsectionnumbering}{subsection} + + +% Set for a specific type. Can each be combined, separate, default or off: +% If set to anything but 'default', it will override the overarching style +% set by \numberingpreset +\newcommand{\definitionnumbering}{default} +\newcommand{\theoremnumbering}{default} +\newcommand{\lemmanumbering}{default} +\newcommand{\corollarynumbering}{default} +\newcommand{\axiomnumbering}{default} +\newcommand{\factnumbering}{default} +\newcommand{\propositionnumbering}{default} +\newcommand{\examplenumbering}{default} +\newcommand{\formulanumbering}{default} +\newcommand{\remarknumbering}{default} +\newcommand{\proofnumbering}{default} +\newcommand{\intuitionnumbering}{default} +\newcommand{\termnumbering}{default} +\newcommand{\notationnumbering}{default} +\newcommand{\tasknumbering}{default} +\newcommand{\usagenumbering}{default} +\newcommand{\recallnumbering}{default} +\newcommand{\propertiesnumbering}{default} diff --git a/src/core.sty b/src/core.sty new file mode 100644 index 0000000..36cb321 --- /dev/null +++ b/src/core.sty @@ -0,0 +1,47 @@ +% Package imports +\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} +\RequirePackage{xstring} + + +% Add a color shade (similar to \fhlc, but nicer boxes) +\newcommand{\background}[3]{\tcbox[on line, + boxsep=\backgroundPadding, + arc=\backgroundRounding, + left=0pt, + right=0pt, + top=0pt, + bottom=0pt, + 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}} diff --git a/main/core.tex b/src/core/core.tex similarity index 86% rename from main/core.tex rename to src/core/core.tex index c842149..8cac44c 100644 --- a/main/core.tex +++ b/src/core/core.tex @@ -11,31 +11,6 @@ % 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 diff --git a/main/cs.tex b/src/core/cs.tex similarity index 100% rename from main/cs.tex rename to src/core/cs.tex diff --git a/main/index.tex b/src/core/index.tex similarity index 100% rename from main/index.tex rename to src/core/index.tex diff --git a/main/math.tex b/src/core/math.tex similarity index 100% rename from main/math.tex rename to src/core/math.tex diff --git a/main/tables.tex b/src/core/tables.tex similarity index 100% rename from main/tables.tex rename to src/core/tables.tex diff --git a/src/janishutz-helpers.sty b/src/janishutz-helpers.sty new file mode 100644 index 0000000..d055fed --- /dev/null +++ b/src/janishutz-helpers.sty @@ -0,0 +1,16 @@ +%% +%% Copyright (C) 2026 Janis Hutz +%% +%% This file may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either +%% version 1.3 of this license or (at your option) any later +%% version. The latest version of this license is in: +%% http://www.latex-project.org/lppl.txt +%% and version 1.3c or later is part of all distributions of +%% LaTeX version 2008-05-04 or later. + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{janishutz-helpers}[2026-02-10 v1.0.0] + +\newcounter{descriptorShadeStrength} +\newcounter{shadeStrength} diff --git a/main/lang/de.tex b/src/lang/de.tex similarity index 100% rename from main/lang/de.tex rename to src/lang/de.tex diff --git a/src/style.sty b/src/style.sty new file mode 100644 index 0000000..82a2bd2 --- /dev/null +++ b/src/style.sty @@ -0,0 +1,32 @@ +% 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 + } + } +} diff --git a/main/style/common.tex b/src/style/common.tex similarity index 100% rename from main/style/common.tex rename to src/style/common.tex diff --git a/main/style/counters.tex b/src/style/counters.tex similarity index 100% rename from main/style/counters.tex rename to src/style/counters.tex diff --git a/main/style/cs.tex b/src/style/cs.tex similarity index 100% rename from main/style/cs.tex rename to src/style/cs.tex diff --git a/main/style/language.tex b/src/style/language.tex similarity index 100% rename from main/style/language.tex rename to src/style/language.tex diff --git a/main/style/math.tex b/src/style/math.tex similarity index 100% rename from main/style/math.tex rename to src/style/math.tex diff --git a/main/style/style.tex b/src/style/style.tex similarity index 60% rename from main/style/style.tex rename to src/style/style.tex index 2efbd0d..99cdf7f 100644 --- a/main/style/style.tex +++ b/src/style/style.tex @@ -8,39 +8,6 @@ %███ ██████ █████ ████ ███ ███ %██████████████████████ ███████████████████ -% 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 % % -------------------- % @@ -63,35 +30,6 @@ \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}} From 354626cf885e6e421e9ee6658049e407aededc5c Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Thu, 5 Feb 2026 19:54:03 +0100 Subject: [PATCH 03/32] Continue --- src/config/main.sty | 3 + src/core.sty | 20 ---- src/core/core.tex | 126 ----------------------- src/core/{cs.tex => cs.sty} | 3 +- src/core/index.sty | 15 +++ src/core/index.tex | 21 ---- src/core/{math.tex => math.sty} | 36 ++++--- src/core/setup.sty | 56 ++++++++++ src/core/{tables.tex => tables.sty} | 10 +- src/lang/de.sty | 2 + src/lang/de.tex | 1 - src/lang/translation.sty | 18 ++++ src/style.sty | 89 ++++++++++++++++ src/style/{common.tex => common-tcb.sty} | 9 +- src/style/counters.tex | 30 ++---- src/style/cs.sty | 17 +++ src/style/cs.tex | 25 ----- src/style/language.tex | 10 -- src/style/math.sty | 9 ++ src/style/math.tex | 11 -- src/style/style.tex | 27 ----- 21 files changed, 252 insertions(+), 286 deletions(-) delete mode 100644 src/core/core.tex rename src/core/{cs.tex => cs.sty} (89%) create mode 100644 src/core/index.sty delete mode 100644 src/core/index.tex rename src/core/{math.tex => math.sty} (77%) create mode 100644 src/core/setup.sty rename src/core/{tables.tex => tables.sty} (72%) create mode 100644 src/lang/de.sty delete mode 100644 src/lang/de.tex create mode 100644 src/lang/translation.sty rename src/style/{common.tex => common-tcb.sty} (88%) create mode 100644 src/style/cs.sty delete mode 100644 src/style/cs.tex delete mode 100644 src/style/language.tex create mode 100644 src/style/math.sty delete mode 100644 src/style/math.tex diff --git a/src/config/main.sty b/src/config/main.sty index 279d58d..f129c5d 100644 --- a/src/config/main.sty +++ b/src/config/main.sty @@ -11,6 +11,9 @@ \newcommand{\city}{City} \newcommand{\countrycode}{CH} +% Set the default language +\newcommand{\currentLanguage}{en} + % ┌ ┐ % │ Rendering │ diff --git a/src/core.sty b/src/core.sty index 36cb321..0a80e60 100644 --- a/src/core.sty +++ b/src/core.sty @@ -25,23 +25,3 @@ \RequirePackage{gensymb} \RequirePackage{pifont} \RequirePackage{xstring} - - -% Add a color shade (similar to \fhlc, but nicer boxes) -\newcommand{\background}[3]{\tcbox[on line, - boxsep=\backgroundPadding, - arc=\backgroundRounding, - left=0pt, - right=0pt, - top=0pt, - bottom=0pt, - 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}} diff --git a/src/core/core.tex b/src/core/core.tex deleted file mode 100644 index 8cac44c..0000000 --- a/src/core/core.tex +++ /dev/null @@ -1,126 +0,0 @@ - -% ▄▄█▀▀▀█▄█ -% ▄██▀ ▀█ -% ██▀ ▀ ▄██▀██▄▀███▄███ ▄▄█▀██ -% ██ ██▀ ▀██ ██▀ ▀▀ ▄█▀ ██ -% ██▄ ██ ██ ██ ██▀▀▀▀▀▀ -% ▀██▄ ▄▀██▄ ▄██ ██ ██▄ ▄ -% ▀▀█████▀ ▀█████▀▄████▄ ▀█████▀ - -% This file contains all necessary dependencies for the document to compile (at all) and some core macros - -% Imports % -\typeout{[Core] Importing!} - - -% 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 }} diff --git a/src/core/cs.tex b/src/core/cs.sty similarity index 89% rename from src/core/cs.tex rename to src/core/cs.sty index fa54b88..36af193 100644 --- a/src/core/cs.tex +++ b/src/core/cs.sty @@ -14,8 +14,7 @@ \newcommand{\Indent}{\hspace{\algorithmicindent}} -\newcommand{\timecomplexity}{\fhlc{orange}{\ifnum\value{lang}<2{Time complexity}\else {Laufzeit}\fi} \hspace{0.5em}} -\newcommand{\tc}[1]{\timecomplexity $\Theta\left(#1\right)$} +\newcommand{\tc}[]{\tco{#1}} \newcommand{\tct}[1]{\Theta\left(#1\right)} \newcommand{\tco}[1]{\mathcal{O}\left(#1\right)} \newcommand{\tcl}[1]{\Omega\left(#1\right)} diff --git a/src/core/index.sty b/src/core/index.sty new file mode 100644 index 0000000..122f4df --- /dev/null +++ b/src/core/index.sty @@ -0,0 +1,15 @@ +% ┌ ┐ +% │ Index │ +% └ ┘ + +% For using index package +\newcommand{\prepareIndex}{ + \RequirePackage[T1]{fontenc} + \RequirePackage{imakeidx} + \makeindex +} + +\newcommand{\addIndexBold}[1]{\textbf{\index{\MakeLowercase{#1}} #1}} +\newcommand{\addIndexItalic}[1]{\textit{\index{\MakeLowercase{#1}} #1}} +\newcommand{\addIndex}[1]{\index{\MakeLowercase{#1}} #1} + diff --git a/src/core/index.tex b/src/core/index.tex deleted file mode 100644 index ab4b364..0000000 --- a/src/core/index.tex +++ /dev/null @@ -1,21 +0,0 @@ -% ▄▄ -% ▀████▀ ▀███ -% ██ ██ -% ██ ▀████████▄ ▄█▀▀███ ▄▄█▀██▀██▀ ▀██▀ -% ██ ██ ██ ▄██ ██ ▄█▀ ██ ▀██ ▄█▀ -% ██ ██ ██ ███ ██ ██▀▀▀▀▀▀ ███ -% ██ ██ ██ ▀██ ██ ██▄ ▄ ▄█▀ ██▄ -% ▄████▄████ ████▄ ▀████▀███▄ ▀█████▀██▄ ▄██▄ - - -% For using index package -\newcommand{\prepareIndex}{ - \RequirePackage[T1]{fontenc} - \RequirePackage{imakeidx} - \makeindex -} - -\newcommand{\addIndexBold}[1]{\textbf{\index{\MakeLowercase{#1}} #1}} -\newcommand{\addIndexItalic}[1]{\textit{\index{\MakeLowercase{#1}} #1}} -\newcommand{\addIndex}[1]{\index{\MakeLowercase{#1}} #1} - diff --git a/src/core/math.tex b/src/core/math.sty similarity index 77% rename from src/core/math.tex rename to src/core/math.sty index 1c04894..113ef6c 100644 --- a/src/core/math.tex +++ b/src/core/math.sty @@ -1,23 +1,33 @@ -% ▄▄ -% ▀████▄ ▄███▀ ██ ███ -% ████ ████ ██ ██ -% █ ██ ▄█ ██ ▄█▀██▄ ██████ ███████▄ -% █ ██ █▀ ██ ██ ██ ██ ██ ██ -% █ ██▄█▀ ██ ▄█████ ██ ██ ██ -% █ ▀██▀ ██ ██ ██ ██ ██ ██ -% ▄███▄ ▀▀ ▄████▄████▀██▄ ▀███████ ████▄ - +% ┌ ┐ +% │ Math │ +% └ ┘ % BB shortcuts (for number spaces, etc) +\newcommand{\A}{\mathbb{A}} +\newcommand{\B}{\mathbb{B}} \newcommand{\C}{\mathbb{C}} \newcommand{\D}{\mathbb{D}} \newcommand{\E}{\mathbb{E}} +\newcommand{\F}{\mathbb{F}} +\newcommand{\G}{\mathbb{G}} +\renewcommand{\H}{\mathbb{H}} \newcommand{\I}{\mathbb{I}} \newcommand{\J}{\mathbb{J}} +\newcommand{\K}{\mathbb{K}} +\renewcommand{\L}{\mathbb{L}} +\newcommand{\M}{\mathbb{M}} \newcommand{\N}{\mathbb{N}} +\renewcommand{\O}{\mathbb{O}} +\renewcommand{\P}{\mathbb{P}} \newcommand{\Q}{\mathbb{Q}} \newcommand{\R}{\mathbb{R}} +\renewcommand{\S}{\mathbb{S}} +\newcommand{\T}{\mathbb{T}} +\newcommand{\U}{\mathbb{U}} \newcommand{\V}{\mathbb{V}} +\newcommand{\W}{\mathbb{W}} +\newcommand{\X}{\mathbb{X}} +\newcommand{\Y}{\mathbb{Y}} \newcommand{\Z}{\mathbb{Z}} % Caligraphic @@ -49,7 +59,10 @@ \newcommand{\cZ}{\mathcal{Z}} % other useful shortcuts +\newcommand{\elementstack}[2]{\genfrac{}{}{0pt}{}{#1}{#2}} \newcommand{\8}{\infty} +\newcommand{\cond}{\text{cond}} +\newcommand{\argmin}[1]{\underset{#1}{\text{argmin}}} \newcommand{\dx}{\text{ d}} \newcommand{\floor}[1]{\left\lfloor #1 \right\rfloor} \newcommand{\ceil}[1]{\left\lceil #1 \right\rceil} @@ -66,9 +79,8 @@ \newcommand{\defEquiv}{\overset{\text{def}}{\Leftrightarrow}} \newcommand{\defImplies}{\overset{\text{def}}{\Rightarrow}} \newcommand{\divides}{\hspace{0.25em}|\hspace{0.25em}} -\newcommand{\mbeq}{\overset{!}{=}} \newcommand{\lcm}{\text{lcm}} -\newcommand{\limit}[2]{\lim_{#1 \rightarrow #2}} +\newcommand{\limit}[2]{\underset{#1 \rightarrow #2}{\lim}} \newcommand{\seq}[1]{(#1_n)_{n \geq 1}} \newcommand{\ser}[2]{\sum_{k = 1}^{#2} #1_k} \newcommand{\limni}{\limit{n}{\infty}} @@ -77,7 +89,7 @@ \newcommand{\limhz}{\limit{h}{0}} \newcommand{\liminfni}{\liminf_{n \rightarrow \infty}} \newcommand{\limsupni}{\limsup_{n \rightarrow \infty}} -\newcommand{\elementstack}[2]{\genfrac{}{}{0pt}{}{#1}{#2}} + \DeclareMathOperator\arctanh{arctanh} \DeclareMathOperator\arccosh{arccosh} \DeclareMathOperator\arcsinh{arcsinh} diff --git a/src/core/setup.sty b/src/core/setup.sty new file mode 100644 index 0000000..a271823 --- /dev/null +++ b/src/core/setup.sty @@ -0,0 +1,56 @@ +% ┌ ┐ +% │ Setup │ +% └ ┘ +% 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}} + } +} + +% 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} +} + + +% TODO: Use landscape and columns for new version +% 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} +} + + +% ┌ ┐ +% │ Document start │ +% └ ┘ +% Start document command (required) +\newcommand{\startDocument}{ + \maketitle + \pagestyle{fancy} + \thispagestyle{fancy} +} diff --git a/src/core/tables.tex b/src/core/tables.sty similarity index 72% rename from src/core/tables.tex rename to src/core/tables.sty index ca5d5ad..e5b85ee 100644 --- a/src/core/tables.tex +++ b/src/core/tables.sty @@ -1,10 +1,6 @@ -% _____ _ _ -% (_ _) ( ) (_ ) -% | | _ _| |_ | | __ ___ -% | | / _ ) _ \ | | / __ \ __) -% | | ( (_| | |_) )| |( ___/__ \ -% (_) \__ _)_ __/(___)\____)____/ - +% ┌ ┐ +% │ Tables │ +% └ ┘ \RequirePackage{booktabs} \RequirePackage{tabulary} diff --git a/src/lang/de.sty b/src/lang/de.sty new file mode 100644 index 0000000..4ad042e --- /dev/null +++ b/src/lang/de.sty @@ -0,0 +1,2 @@ +\RequirePackage[ngerman]{babel} +\renewcommand{\currentLanguage}{de} diff --git a/src/lang/de.tex b/src/lang/de.tex deleted file mode 100644 index ba7a10c..0000000 --- a/src/lang/de.tex +++ /dev/null @@ -1 +0,0 @@ -\RequirePackage[ngerman]{babel} diff --git a/src/lang/translation.sty b/src/lang/translation.sty new file mode 100644 index 0000000..3fb1004 --- /dev/null +++ b/src/lang/translation.sty @@ -0,0 +1,18 @@ +% ┌ ┐ +% │ Translation │ +% └ ┘ +\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 }} diff --git a/src/style.sty b/src/style.sty index 82a2bd2..2e89f0c 100644 --- a/src/style.sty +++ b/src/style.sty @@ -1,3 +1,6 @@ +% ┌ ┐ +% │ STYLE: Globals │ +% └ ┘ % Global style configs for tcolorbox (to reduce bloat) \newcommand{\usetcolorboxes}{ \tcbset{ @@ -30,3 +33,89 @@ } } } + +% ── Fonts ─────────────────────────────────────────────────────────── +\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} + } + } +} + +% ── Small common style elements ───────────────────────────────────── +% Spacing (vertical) +\newcommand{\hrmvspace}{\vspace{-0.25pc}} +\newcommand{\rmvspace}{\vspace{-0.5pc}} +\newcommand{\mrmvspace}{\vspace{-0.75pc}} +\newcommand{\drmvspace}{\vspace{-1pc}} +\newcommand{\dhrmvspace}{\vspace{-1.25pc}} +\newcommand{\dnrmvspace}{\vspace{-1.5pc}} +\newcommand{\dmrmvspace}{\vspace{-1.75pc}} +\newcommand{\ddrmvspace}{\vspace{-2pc}} + +% Spacing (horizontal) +\newcommand{\smallhspace}{\hspace{2mm}} +\newcommand{\mediumhspace}{\hspace{5mm}} +\newcommand{\largehspace}{\hspace{1cm}} + +% other elements +\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=\backgroundPadding, + arc=\backgroundRounding, + left=0pt, + right=0pt, + top=0pt, + bottom=0pt, + 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 color shade (similar to \fhlc, but nicer boxes) +\newcommand{\background}[3]{\tcbox[on line, + boxsep=\backgroundPadding, + arc=\backgroundRounding, + left=0pt, + right=0pt, + top=0pt, + bottom=0pt, + 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}} + +% 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} +} diff --git a/src/style/common.tex b/src/style/common-tcb.sty similarity index 88% rename from src/style/common.tex rename to src/style/common-tcb.sty index 0f2a3e7..ce030eb 100644 --- a/src/style/common.tex +++ b/src/style/common-tcb.sty @@ -1,8 +1,7 @@ -%▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ -%██░▄▄▀█▀▄▄▀█░▄▀▄░█░▄▀▄░█▀▄▄▀█░▄▄▀ -%██░████░██░█░█▄█░█░█▄█░█░██░█░██░ -%██░▀▀▄██▄▄██▄███▄█▄███▄██▄▄██▄██▄ -%▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +% ┌ ┐ +% │ STYLE: Common tcolorboxes │ +% └ ┘ +% TODO: Update colors \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} diff --git a/src/style/counters.tex b/src/style/counters.tex index b10c7cc..d29efe7 100644 --- a/src/style/counters.tex +++ b/src/style/counters.tex @@ -1,11 +1,3 @@ - -% ▄▄· ▄• ▄▌ ▐ ▄ ▄▄▄▄▄▄▄▄ .▄▄▄ -% ▐█ ▌▪ ▄█▀▄ █▪██▌•█▌▐█•██ ▀▄.▀·▀▄ █· -% ██ ▄▄▐█▌.▐▌█▌▐█▌▐█▐▐▌ ▐█.▪▐▀▀▪▄▐▀▀▄ -% ▐███▌▐█▌.▐▌▐█▄█▌██▐█▌ ▐█▌·▐█▄▄▌▐█•█▌ -% ·▀▀▀ ▀█▄▀▪ ▀▀▀ ▀▀ █▪ ▀▀▀ ▀▀▀ .▀ ▀ - -\RequirePackage{xstring} \RequirePackage{etoolbox} % tcolorbox and other stylistic elements (i.e. inline versions of them) that have counters \newcounter{lemma}[section] @@ -44,7 +36,7 @@ \newcounter{remarksss}[subsubsection] \newcounter{allsss}[subsubsection] -% Set the current number of a label +% ── Set the current number of a label ─────────────────────────────── \newcommand{\setLabelNumber}[2]{% \setcounter{#1}{#2}% \addtocounter{#1}{-1}% @@ -71,14 +63,14 @@ % │ Counter numbering │ % └ ┘ \newcommand{\preTableAndFigHook}[1]{% - \ifnum\value{numberingConfig}>1 - \ifnum\value{numberSubsections}=1 - \stepcounter{allss} + \ifnum\value{numberingConfig}>1% + \ifnum\value{numberSubsections}=1% + \stepcounter{allss}% \else - \ifnum\value{numberSubsections}=2 - \stepcounter{allsss} - \else - \stepcounter{all} + \ifnum\value{numberSubsections}=2% + \stepcounter{allsss}% + \else% + \stepcounter{all}% \fi \fi \fi @@ -89,8 +81,8 @@ \newcommand{\applyTableAndFigureNumbering}{ % Tables & Figures \ifnum\value{numberingConfig}=0 - \renewcommand{\thetable}{} - \renewcommand{\thefigure}{} + \renewcommand{\thetable}{\arabic{table}} + \renewcommand{\thefigure}{\arabic{figure}} \else \ifnum\value{numberingConfig}=1 \renewcommand{\thetable}{\sectionNumbering.\arabic{table}} @@ -395,7 +387,7 @@ \newcommand{\compactdef}[1]{\bg{blue}{D\usenumberArabic{definition}:} \textit{(#1)}} \newcommand{\compactformula}[1]{\bg{red}{F\usenumberArabic{formula}:} \textit{(#1)}} \newcommand{\compactlemma}[1]{\bg{Aquamarine}{L\usenumberArabic{lemma}:} \textit{(#1)}} -\newcommand{\compacttheorem}[1]{\bg{ForestGreen}{\translate{T}{\StrMid{\theoremde}{1}{1}} \usenumberArabic{theorem}:} \textit{(#1)}} +\newcommand{\compacttheorem}[1]{\bg{ForestGreen}{\translate{T}{\StrMid{\theoremde}{1}{1}}\usenumberArabic{theorem}:} \textit{(#1)}} \newcommand{\compactaxiom}[1]{\bg{JungleGreen}{A\usenumberArabic{axiom}:} \textit{(#1)}} \newcommand{\compactcorollary}[1]{\bg{teal}{\translate{C}{K}\usenumberArabic{corollary}:} \textit{(#1)}} \newcommand{\compactfact}[1]{\bg{SeaGreen}{F\usenumberArabic{fact}:} \textit{(#1)}} diff --git a/src/style/cs.sty b/src/style/cs.sty new file mode 100644 index 0000000..2a86816 --- /dev/null +++ b/src/style/cs.sty @@ -0,0 +1,17 @@ +% ┌ ┐ +% │ STYLE: Computer Science │ +% └ ┘ +\RequirePackage{forest} +\tikzset{algpxIndentLine/.style={draw=lightgray}} +\algrenewcommand{\alglinenumber}[1]{#1} + +\newenvironment{algo}[1]{ + \begin{algorithm} + \begin{spacing}{1.2} + \caption{\textsc{#1}} + \begin{algorithmic}[1] + }{ + \end{algorithmic} + \end{spacing} + \end{algorithm} +} diff --git a/src/style/cs.tex b/src/style/cs.tex deleted file mode 100644 index 010a479..0000000 --- a/src/style/cs.tex +++ /dev/null @@ -1,25 +0,0 @@ -% ▄▄ -% ▄▄█▀▀▀█▄█ ██ ▄█▀▀▀█▄█ ██ -% ▄██▀ ▀█ ██ ▄██ ▀█ -% ██▀ ▀ ▄██▀██▄▀████████▄█████▄ ▀████████▄▀███ ▀███ ██████ ▄▄█▀██▀███▄███ ▀███▄ ▄██▀██▀███ ▄▄█▀██▀████████▄ ▄██▀██ ▄▄█▀██ -% ██ ██▀ ▀██ ██ ██ ██ ██ ▀██ ██ ██ ██ ▄█▀ ██ ██▀ ▀▀ ▀█████▄█▀ ██ ██ ▄█▀ ██ ██ ██ ██▀ ██ ▄█▀ ██ -% ██▄ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀▀▀▀▀ ██ ▄ ▀███ ██ ██▀▀▀▀▀▀ ██ ██ ██ ██▀▀▀▀▀▀ -% ▀██▄ ▄▀██▄ ▄██ ██ ██ ██ ██ ▄██ ██ ██ ██ ██▄ ▄ ██ ██ ███▄ ▄ ██ ██▄ ▄ ██ ██ ██▄ ▄██▄ ▄ -% ▀▀█████▀ ▀█████▀▄████ ████ ████▄ ██████▀ ▀████▀███▄ ▀████ ▀█████▀████▄ █▀█████▀ █████▀▄████▄ ▀█████▀████ ████▄█████▀ ▀█████▀ -% ██ -% ▄████▄ - -\usepackage{forest} -\tikzset{algpxIndentLine/.style={draw=lightgray}} -\algrenewcommand{\alglinenumber}[1]{#1} - -\newenvironment{algo}[1]{ - \begin{algorithm} - \begin{spacing}{1.2} - \caption{\textsc{#1}} - \begin{algorithmic}[1] - }{ - \end{algorithmic} - \end{spacing} - \end{algorithm} -} diff --git a/src/style/language.tex b/src/style/language.tex deleted file mode 100644 index cbc28b8..0000000 --- a/src/style/language.tex +++ /dev/null @@ -1,10 +0,0 @@ - -% ░█▒░▒▄▀▄░█▄░█░▄▀▒░█▒█▒▄▀▄░▄▀▒▒██▀░░░▄▀▀░▀█▀░▀▄▀░█▒░▒██▀ -% ▒█▄▄░█▀█░█▒▀█░▀▄█░▀▄█░█▀█░▀▄█░█▄▄▒░▒▄██░▒█▒░▒█▒▒█▄▄░█▄▄ - -% Specific styles for language summaries and docs -\newtcolorbox{conjugation}[2][]{mainboxstyle,colback=blue!5!white,colframe=blue!75!black,colbacktitle=blue!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=blue!75!black,fill=blue!75!black] at (frame.north east) {\large \translate{Conjugation}{Konjugation}};},#1} - -\newtcolorbox{forms}[2][]{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 \translate{Forms}{Formen}};},#1} diff --git a/src/style/math.sty b/src/style/math.sty new file mode 100644 index 0000000..8938ed8 --- /dev/null +++ b/src/style/math.sty @@ -0,0 +1,9 @@ +% ┌ ┐ +% │ STYLE: Math │ +% └ ┘ + +% Add shortcuts to commonly used commands +\newcommand{\vect}[1]{\overrightarrow{#1}} +\renewcommand{\hat}[1]{\widehat{#1}} +\renewcommand{\tilde}[1]{\widetilde{#1}} +\newcommand{\proven}{$\hspace{17cm}\square$} diff --git a/src/style/math.tex b/src/style/math.tex deleted file mode 100644 index c5864eb..0000000 --- a/src/style/math.tex +++ /dev/null @@ -1,11 +0,0 @@ -% • ▌ ▄ ·. ▄▄▄· ▄▄▄▄▄ ▄ .▄ .▄▄ · ▄▄▄▄▄ ▄· ▄▌▄▄▌ ▄▄▄ . -% ·██ ▐███▪▐█ ▀█ •██ ██▪▐█ ▐█ ▀. •██ ▐█▪██▌██• ▀▄.▀· -% ▐█ ▌▐▌▐█·▄█▀▀█ ▐█.▪██▀▀█ ▄▀▀▀█▄ ▐█.▪▐█▌▐█▪██ ▪ ▐▀▀▪▄ -% ██ ██▌▐█▌▐█▪ ▐▌ ▐█▌·██▌▐▀ ▐█▄▪▐█ ▐█▌· ▐█▀·.▐█▌ ▄▐█▄▄▌ -% ▀▀ █▪▀▀▀ ▀ ▀ ▀▀▀ ▀▀▀ · ▀▀▀▀ ▀▀▀ ▀ • .▀▀▀ ▀▀▀ - -% Replace some commonly used commands with better ones -\renewcommand{\vec}[1]{\overrightarrow{#1}} -\renewcommand{\hat}[1]{\widehat{#1}} -\renewcommand{\tilde}[1]{\widetilde{#1}} -\newcommand{\proven}{$\hspace{17cm}\square$} diff --git a/src/style/style.tex b/src/style/style.tex index 99cdf7f..b4f700d 100644 --- a/src/style/style.tex +++ b/src/style/style.tex @@ -8,33 +8,6 @@ %███ ██████ █████ ████ ███ ███ %██████████████████████ ███████████████████ -% -------------------- % -% 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}''} - -% Spacing (horizontal) -\newcommand{\smallhspace}{\hspace{2mm}} -\newcommand{\mediumhspace}{\hspace{5mm}} -\newcommand{\largehspace}{\hspace{1cm}} - % ----------------- % % Table of contents % % ----------------- % From 201423b8a3a12c05eeb258d30f04deae8bea5279 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Thu, 19 Feb 2026 13:49:17 +0100 Subject: [PATCH 04/32] Add new labeller --- src/config/numbering.sty | 4 +- src/core.sty | 2 + src/style.sty | 101 ++++++++++--------- src/style/common-tcb.sty | 4 +- src/style/counters/core.sty | 189 +++++++++++++++++++++++++++++++++++ src/style/counters/label.sty | 33 ++++++ src/style/counters/reset.sty | 53 ++++++++++ src/style/counters/style.sty | 104 +++++++++++++++++++ src/style/style.tex | 25 ----- 9 files changed, 436 insertions(+), 79 deletions(-) create mode 100644 src/style/counters/core.sty create mode 100644 src/style/counters/label.sty create mode 100644 src/style/counters/reset.sty create mode 100644 src/style/counters/style.sty delete mode 100644 src/style/style.tex diff --git a/src/config/numbering.sty b/src/config/numbering.sty index 1b0e504..7fb8cfc 100644 --- a/src/config/numbering.sty +++ b/src/config/numbering.sty @@ -1,7 +1,7 @@ % ┌ ┐ % │ Numbering │ % └ ┘ -% Set a preset, can be combined, separate, separatedef (all combined but definitions), custom or off. +% Set a preset, can be combined, separate, custom or off. % If set to custom, all type specific commands need to be set below. \newcommand{\numberingpreset}{combined} @@ -10,7 +10,7 @@ % - section (section.X) % - subsection (section.subsection.X) % - subsubsection (section.subsection.subsubsection.X) -% - subsubsubsection (section.subsection.subsubsection.subsubsubsection.X) +% - paragraph (section.subsection.subsubsection.paragraph.X) \newcommand{\subsectionnumbering}{subsection} diff --git a/src/core.sty b/src/core.sty index 0a80e60..63db0f6 100644 --- a/src/core.sty +++ b/src/core.sty @@ -25,3 +25,5 @@ \RequirePackage{gensymb} \RequirePackage{pifont} \RequirePackage{xstring} + +\setcounter{secnumdepth}{4} diff --git a/src/style.sty b/src/style.sty index 2e89f0c..76cb494 100644 --- a/src/style.sty +++ b/src/style.sty @@ -2,36 +2,36 @@ % │ STYLE: Globals │ % └ ┘ % 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 - } - } +\AtBeginDocument{ + \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 + } + } } % ── Fonts ─────────────────────────────────────────────────────────── @@ -50,6 +50,7 @@ % ── Small common style elements ───────────────────────────────────── % Spacing (vertical) +% TODO: Rework \newcommand{\hrmvspace}{\vspace{-0.25pc}} \newcommand{\rmvspace}{\vspace{-0.5pc}} \newcommand{\mrmvspace}{\vspace{-0.75pc}} @@ -72,16 +73,16 @@ % Add a color shade (similar to \fhlc, but nicer boxes) \newcommand{\background}[3]{\tcbox[on line, - boxsep=\backgroundPadding, - arc=\backgroundRounding, - left=0pt, - right=0pt, - top=0pt, - bottom=0pt, - frame empty, - colback=#1!#2!white, - highlight math style={enhanced} - ] {\textbf{#3}}} + boxsep=\backgroundPadding, + arc=\backgroundRounding, + left=0pt, + right=0pt, + top=0pt, + bottom=0pt, + 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}} @@ -91,16 +92,16 @@ % Add a color shade (similar to \fhlc, but nicer boxes) \newcommand{\background}[3]{\tcbox[on line, - boxsep=\backgroundPadding, - arc=\backgroundRounding, - left=0pt, - right=0pt, - top=0pt, - bottom=0pt, - frame empty, - colback=#1!#2!white, - highlight math style={enhanced} - ] {\textbf{#3}}} + boxsep=\backgroundPadding, + arc=\backgroundRounding, + left=0pt, + right=0pt, + top=0pt, + bottom=0pt, + 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}} diff --git a/src/style/common-tcb.sty b/src/style/common-tcb.sty index ce030eb..29d0412 100644 --- a/src/style/common-tcb.sty +++ b/src/style/common-tcb.sty @@ -3,8 +3,8 @@ % └ ┘ % TODO: Update colors -\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{recall}[2][]{mainboxstyle,colback=recallcolor!5!white,colframe=recallcolor!75!black,colbacktitle=recallcolor!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=recallcolor!75!black,,fill=recallcolor!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} diff --git a/src/style/counters/core.sty b/src/style/counters/core.sty new file mode 100644 index 0000000..0799334 --- /dev/null +++ b/src/style/counters/core.sty @@ -0,0 +1,189 @@ +\RequirePackage{etoolbox} +% tcolorbox and other stylistic elements (i.e. inline versions of them) that have counters +\newcounter{lemmanone} +\newcounter{definitionnone} +\newcounter{corollarynone} +\newcounter{theoremnone} +\newcounter{axiomnone} +\newcounter{examplenone} +\newcounter{factnone} +\newcounter{propositionnone} +\newcounter{formulanone} +\newcounter{remarknone} +\newcounter{allnone} + +\newcounter{lemmasection}[section] +\newcounter{definitionsection}[section] +\newcounter{corollarysection}[section] +\newcounter{theoremsection}[section] +\newcounter{axiomsection}[section] +\newcounter{examplesection}[section] +\newcounter{factsection}[section] +\newcounter{propositionsection}[section] +\newcounter{formulasection}[section] +\newcounter{remarksection}[section] +\newcounter{allsection}[section] + +\newcounter{lemmasubsection}[subsection] +\newcounter{definitionsubsection}[subsection] +\newcounter{corollarysubsection}[subsection] +\newcounter{theoremsubsection}[subsection] +\newcounter{axiomsubsection}[subsection] +\newcounter{examplesubsection}[subsection] +\newcounter{factsubsection}[subsection] +\newcounter{propositionsubsection}[subsection] +\newcounter{formulasubsection}[subsection] +\newcounter{remarksubsection}[subsection] +\newcounter{allsubsection}[subsection] + +\newcounter{lemmasubsubsection}[subsubsection] +\newcounter{definitionsubsubsection}[subsubsection] +\newcounter{corollarysubsubsection}[subsubsection] +\newcounter{theoremsubsubsection}[subsubsection] +\newcounter{axiomsubsubsection}[subsubsection] +\newcounter{examplesubsubsection}[subsubsection] +\newcounter{factsubsubsection}[subsubsection] +\newcounter{propositionsubsubsection}[subsubsection] +\newcounter{formulasubsubsection}[subsubsection] +\newcounter{remarksubsubsection}[subsubsection] +\newcounter{allsubsubsection}[subsubsection] + +\newcounter{lemmaparagraph}[paragraph] +\newcounter{definitionparagraph}[paragraph] +\newcounter{corollaryparagraph}[paragraph] +\newcounter{theoremparagraph}[paragraph] +\newcounter{axiomparagraph}[paragraph] +\newcounter{exampleparagraph}[paragraph] +\newcounter{factparagraph}[paragraph] +\newcounter{propositionparagraph}[paragraph] +\newcounter{formulaparagraph}[paragraph] +\newcounter{remarkparagraph}[paragraph] +\newcounter{allparagraph}[paragraph] + +% ── Set the current number of a label ─────────────────────────────── +\newcommand{\setLabelNumber}[2]{% + \setcounter{#1none}{#2}% + \addtocounter{#1none}{-1}% + \setcounter{#1section}{#2}% + \addtocounter{#1section}{-1}% + \setcounter{#1subsection}{#2}% + \addtocounter{#1subsection}{-1}% + \setcounter{#1subsubsection}{#2}% + \addtocounter{#1subsubsection}{-1}% + \setcounter{#1paragraph}{#2}% + \addtocounter{#1paragraph}{-1}% +} + +\newcommand{\stepLabelNumber}[1]{% + \stepcounter{#1none}% + \stepcounter{#1section}% + \stepcounter{#1subsection}% + \stepcounter{#1subsubsection}% + \stepcounter{#1paragraph}% +} + +% ┌ ┐ +% │ Counter numbering │ +% └ ┘ +\newcommand{\preTableAndFigHook}[1]{% + \ifnum\value{numberingConfig}>1% + \ifnum\value{numberSubsections}=1% + \stepcounter{allss}% + \else + \ifnum\value{numberSubsections}=2% + \stepcounter{allsss}% + \else% + \stepcounter{all}% + \fi + \fi + \fi +} +\AtBeginEnvironment{table}{\preTableAndFigHook{table}} +\AtBeginEnvironment{figure}{\preTableAndFigHook{figure}} + +\newcommand{\applyTableAndFigureNumbering}{ + % Tables & Figures + \ifnum\value{numberingConfig}=0 + \renewcommand{\thetable}{\arabic{table}} + \renewcommand{\thefigure}{\arabic{figure}} + \else + \ifnum\value{numberingConfig}=1 + \renewcommand{\thetable}{\sectionNumbering.\arabic{table}} + \renewcommand{\thefigure}{\sectionNumbering.\arabic{figure}} + \else + \ifnum\value{numberSubsections}=1 + \renewcommand{\thetable}{\sectionNumbering.\arabic{allss}} + \renewcommand{\thefigure}{\sectionNumbering.\arabic{allss}} + \else + \ifnum\value{numberSubsections}=2 + \renewcommand{\thetable}{\refstepcounter{allsss}\sectionNumbering.\arabic{allsss}} + \renewcommand{\thefigure}{\sectionNumbering.\arabic{allsss}} + \else + \renewcommand{\thetable}{\sectionNumbering.\arabic{all}} + \renewcommand{\thefigure}{\sectionNumbering.\arabic{all}} + \fi + \fi + \fi + \fi +} + +\newcommand{\setSubsectionNumbering}[1]{ + \setcounter{numberSubsections}{#1} + \applySubsectionNumbering +} + +\newcommand{\applySubsectionNumbering}{ + \ifnum\value{numberSubsections}=1 + \renewcommand{\sectionNumbering}{\thesubsection} + \renewcommand{\suffix}{ss} + \typeout{Numbering as section.subsection.number} + \else + \ifnum\value{numberSubsections}=2 + \renewcommand{\sectionNumbering}{\thesubsubsection} + \renewcommand{\suffix}{sss} + \typeout{Numbering as section.subsection.subsubsection.number} + \else + \renewcommand{\sectionNumbering}{\thesection} + \renewcommand{\suffix}{} + \typeout{Numbering as section.number} + \fi + \fi + \applyTableAndFigureNumbering + + \renewcommand{\thelemma}{\sectionNumbering.\arabic{lemma}} + \renewcommand{\thedefinition}{\sectionNumbering.\arabic{definition}} + \renewcommand{\thecorollary}{\sectionNumbering.\arabic{corollary}} + \renewcommand{\thetheorem}{\sectionNumbering.\arabic{theorem}} + \renewcommand{\theaxiom}{\sectionNumbering.\arabic{axiom}} + \renewcommand{\theexample}{\sectionNumbering.\arabic{example}} + \renewcommand{\thefact}{\sectionNumbering.\arabic{fact}} + \renewcommand{\theproposition}{\sectionNumbering.\arabic{proposition}} + \renewcommand{\theformula}{\sectionNumbering.\arabic{formula}} + \renewcommand{\theremark}{\sectionNumbering.\arabic{remark}} + \renewcommand{\theall}{\sectionNumbering.\arabic{all}} + + \renewcommand{\thelemmass}{\sectionNumbering.\arabic{lemmass}} + \renewcommand{\thedefinitionss}{\sectionNumbering.\arabic{definitionss}} + \renewcommand{\thecorollaryss}{\sectionNumbering.\arabic{corollaryss}} + \renewcommand{\thetheoremss}{\sectionNumbering.\arabic{theoremss}} + \renewcommand{\theaxiomss}{\sectionNumbering.\arabic{axiomss}} + \renewcommand{\theexampless}{\sectionNumbering.\arabic{exampless}} + \renewcommand{\thefactss}{\sectionNumbering.\arabic{factss}} + \renewcommand{\thepropositionss}{\sectionNumbering.\arabic{propositionss}} + \renewcommand{\theformulass}{\sectionNumbering.\arabic{formulass}} + \renewcommand{\theremarkss}{\sectionNumbering.\arabic{remarkss}} + \renewcommand{\theallss}{\sectionNumbering.\arabic{allss}} + + \renewcommand{\thelemmasss}{\sectionNumbering.\arabic{lemmasss}} + \renewcommand{\thedefinitionsss}{\sectionNumbering.\arabic{definitionsss}} + \renewcommand{\thecorollarysss}{\sectionNumbering.\arabic{corollarysss}} + \renewcommand{\thetheoremsss}{\sectionNumbering.\arabic{theoremsss}} + \renewcommand{\theaxiomsss}{\sectionNumbering.\arabic{axiomsss}} + \renewcommand{\theexamplesss}{\sectionNumbering.\arabic{examplesss}} + \renewcommand{\thefactsss}{\sectionNumbering.\arabic{factsss}} + \renewcommand{\thepropositionsss}{\sectionNumbering.\arabic{propositionsss}} + \renewcommand{\theformulasss}{\sectionNumbering.\arabic{formulasss}} + \renewcommand{\theremarksss}{\sectionNumbering.\arabic{remarksss}} + \renewcommand{\theallsss}{\sectionNumbering.\arabic{allsss}} +} +\applySubsectionNumbering diff --git a/src/style/counters/label.sty b/src/style/counters/label.sty new file mode 100644 index 0000000..0c76499 --- /dev/null +++ b/src/style/counters/label.sty @@ -0,0 +1,33 @@ +\newcommand{\printNumberingConfigForDescriptor}[2]{\csname #1numbering\endcsname} + +\newcommand{\printLabelWithNumbering}[1]{% + \ifthenelse{\equal{\subsectionnumbering}{none}}{% + #1% + }{% + \ifthenelse{\equal{\subsectionnumbering}{section}}{% + \thesection.#1% + }{% + \ifthenelse{\equal{\subsectionnumbering}{subsection}}{% + \thesection.\thesubsection.#1% + }{% + \ifthenelse{\equal{\subsectionnumbering}{subsubsection}}{% + \thesection.\thesubsection.\thesubsubsection#1% + }{% + \ifthenelse{\equal{\subsectionnumbering}{paragraph}}{% + \thesection.\thesubsection.\thesubsubsection.\theparagraph#1% + }{% + \PackageError{Subsection numbering configuration invalid. Can be one of [none, section, subsection, subsubsection, paragraph], but you passed #1} + subsectionnumbering error + } + } + } + } + } +} + +\newcommand{\printVersionNumber}[1]{% + \ifthenelse{\equal{\numberingpreset}{combined}}{}{} +} + +\newcommand{\printCounter}[1]{\csname the#1\endcsname} +\newcommand{\renderLabel}[1]{} diff --git a/src/style/counters/reset.sty b/src/style/counters/reset.sty new file mode 100644 index 0000000..b19d1f1 --- /dev/null +++ b/src/style/counters/reset.sty @@ -0,0 +1,53 @@ +% ──────────────────────────────────────────────────────────────────── +% ╭────────────────────────────────────────────────╮ +% │ Reset definition, lemma, etc counters, add a │ +% │ new page │ +% ╰────────────────────────────────────────────────╯ +\newcommand{\newsection}{ + \newpage + \newsectionNoPB +} + +% ── Reset definitions, lemma, etc counters, do not add new page ───── +\newcommand{\newsectionNoPB}{ + \setcounter{lemma}{0} + \setcounter{definition}{0} + \setcounter{corollary}{0} + \setcounter{theorem}{0} + \setcounter{axiom}{0} + \setcounter{example}{0} + \setcounter{fact}{0} + \setcounter{proposition}{0} + \setcounter{formula}{0} + \setcounter{remark}{0} + \setcounter{all}{0} + + \setcounter{lemmass}{0} + \setcounter{definitionss}{0} + \setcounter{corollaryss}{0} + \setcounter{theoremss}{0} + \setcounter{axiomss}{0} + \setcounter{exampless}{0} + \setcounter{factss}{0} + \setcounter{propositionss}{0} + \setcounter{formulass}{0} + \setcounter{remarkss}{0} + \setcounter{allss}{0} + + \setcounter{lemmasss}{0} + \setcounter{definitionsss}{0} + \setcounter{corollarysss}{0} + \setcounter{theoremsss}{0} + \setcounter{axiomsss}{0} + \setcounter{examplesss}{0} + \setcounter{factsss}{0} + \setcounter{propositionsss}{0} + \setcounter{formulasss}{0} + \setcounter{remarksss}{0} + \setcounter{allsss}{0} + + % Tables & Figures + \setcounter{table}{0} + \setcounter{figure}{0} +} +\newsectionNoPB % Initializes diff --git a/src/style/counters/style.sty b/src/style/counters/style.sty new file mode 100644 index 0000000..ce0e08e --- /dev/null +++ b/src/style/counters/style.sty @@ -0,0 +1,104 @@ +% ──────────────────────────────────────────────────────────────────── +% ╭────────────────────────────────────────────────╮ +% │ Tcolorboxes │ +% ╰────────────────────────────────────────────────╯ +% ──────────────────────────────────────────────────────────────────── + +% Definitions +\newtcolorbox{definition}[2][]{mainboxstyle,colback=blue!5!white,colframe=blue!75!black,colbacktitle=blue!75!black,title={\large #2},overlay={\node[overlaystyle,draw=blue!75!black,fill=blue!75!black] at (frame.north east) {\large Definition\usenumberArabic{definition}};},#1} + +% Theorems +\newtcolorbox{theorem}[2][]{mainboxstyle,colback=ForestGreen!5!white,colframe=ForestGreen!75!black,colbacktitle=ForestGreen!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=ForestGreen!75!black,fill=ForestGreen!75!black] at (frame.north east) {\large \translate{Theorem}{\theoremde}\usenumberArabic{theorem}};},#1} + +% Lemmas +\newtcolorbox{lemma}[2][]{mainboxstyle,colback=Aquamarine!5!white,colframe=Aquamarine!75!black,colbacktitle=Aquamarine!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=Aquamarine!75!black,fill=Aquamarine!75!black] at (frame.north east) {\large Lemma\usenumberArabic{lemma}};},#1} + +% Corollaries +\newtcolorbox{corollary}[2][]{mainboxstyle,colback=teal!5!white,colframe=teal!75!black,colbacktitle=teal!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=teal!75!black,fill=teal!75!black] at (frame.north east) {\large \translate{Corollary}{Korollar}\usenumberArabic{corollary}};},#1} + +% Axioms +\newtcolorbox{axiom}[2][]{mainboxstyle,colback=JungleGreen!5!white,colframe=JungleGreen!75!black,colbacktitle=JungleGreen!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=JungleGreen!75!black,fill=JungleGreen!75!black] at (frame.north east) {\large Axiom\usenumberArabic{axiom}};},#1} + +% Facts +\newtcolorbox{fact}[2][]{mainboxstyle,colback=SeaGreen!5!white,colframe=SeaGreen!75!black,colbacktitle=SeaGreen!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=SeaGreen!75!black,fill=SeaGreen!75!black] at (frame.north east) {\large \translate{Fact}{Fakt}\usenumberArabic{fact}};},#1} + +% Propositions +\newtcolorbox{proposition}[2][]{mainboxstyle,colback=Cyan!5!white,colframe=Cyan!75!black,colbacktitle=Cyan!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=Cyan!75!black,fill=Cyan!75!black] at (frame.north east) {\large Proposition\usenumberArabic{proposition}};},#1} + +% Examples +\newtcolorbox{example}[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{Example}{Beispiel}\usenumberArabic{example}};},#1} + +% Formula +\newtcolorbox{formula}[2][]{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 \translate{Formula}{Formel}\usenumberArabic{formula}};},#1} + +% Remark +\newtcolorbox{remark}[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{Remark}{Bemerkung} \usenumberArabic{remark}};},#1} + + +% ──────────────────────────────────────────────────────────────────── +% ╭────────────────────────────────────────────────╮ +% │ Inline environments │ +% ╰────────────────────────────────────────────────╯ +% ──────────────────────────────────────────────────────────────────── + + +% Inline environments (inline) +\newcommand{\inlineex}{\bg{gray}{\translate{Example}{Beispiel}\usenumberArabic{example}:}} +\newcommand{\inlinedef}{\bg{blue}{Definition\usenumberArabic{definition}:}} +\newcommand{\inlineformula}{\bg{red}{\translate{Formula}{Formel}\usenumberArabic{formula}:}} +\newcommand{\inlinelemma}{\bg{Aquamarine}{Lemma\usenumberArabic{lemma}:}} +\newcommand{\inlinetheorem}{\bg{ForestGreen}{\translate{Theorem}{\theoremde}\usenumberArabic{theorem}:}} +\newcommand{\inlineaxiom}{\bg{JungleGreen}{Axiom\usenumberArabic{axiom}:}} +\newcommand{\inlinecorollary}{\bg{teal}{\translate{Corollary}{Korollar}\usenumberArabic{corollary}:}} +\newcommand{\inlinefact}{\bg{SeaGreen}{\translate{Fact}{Fakt}\usenumberArabic{fact}:}} +\newcommand{\inlineproposition}{\bg{Cyan}{Proposition\usenumberArabic{proposition}:}} +\newcommand{\inlineremark}{\bg{green}{\translate{Remark}{Bemerkung}\usenumberArabic{remark}:}} +\newcommand{\inlineproof}{\bg{magenta}{\translate{Proof}{Beweis}:}} + +% Enhanced inline environments +\newcommand{\fancyex}[1]{\bg{gray}{\translate{Example}{Beispiel}\usenumberArabic{example}:} \textit{(#1)}} +\newcommand{\fancydef}[1]{\bg{blue}{Definition\usenumberArabic{definition}:} \textit{(#1)}} +\newcommand{\fancyformula}[1]{\bg{red}{\translate{Formula}{Formel}\usenumberArabic{formula}:} \textit{(#1)}} +\newcommand{\fancylemma}[1]{\bg{Aquamarine}{Lemma\usenumberArabic{lemma}:} \textit{(#1)}} +\newcommand{\fancytheorem}[1]{\bg{ForestGreen}{\translate{Theorem}{\theoremde}\usenumberArabic{theorem}:} \textit{(#1)}} +\newcommand{\fancyaxiom}[1]{\bg{JungleGreen}{Axiom\usenumberArabic{axiom}:} \textit{(#1)}} +\newcommand{\fancycorollary}[1]{\bg{teal}{\translate{Corollary}{Korollar}\usenumberArabic{corollary}:} \textit{(#1)}} +\newcommand{\fancyfact}[1]{\bg{SeaGreen}{\translate{Fact}{Fakt}\usenumberArabic{fact}:} \textit{(#1)}} +\newcommand{\fancyproposition}[1]{\bg{Cyan}{Proposition\usenumberArabic{proposition}:} \textit{(#1)}} +\newcommand{\fancyremark}[1]{\bg{green}{\translate{Remark}{Bemerkung}\usenumberArabic{remark}:} \textit{(#1)}} +\newcommand{\fancyproof}[1]{\bg{magenta}{\translate{Proof}{Beweis}: \textit{(#1)}}} + +% short environments (abbreviated) +\newcommand{\shortex}{\bg{gray}{\translate{Ex}{Bsp}\usenumberArabic{example}:}} +\newcommand{\shortdef}{\bg{blue}{D\usenumberArabic{definition}:}} +\newcommand{\short}{\bg{red}{F\usenumberArabic{formula}:}} +\newcommand{\shortlemma}{\bg{Aquamarine}{L\usenumberArabic{lemma}:}} +\newcommand{\shorttheorem}{\bg{ForestGreen}{\translate{T}{\StrMid{\theoremde}{1}{1}}\usenumberArabic{theorem}:}} +\newcommand{\shortaxiom}{\bg{JungleGreen}{A\usenumberArabic{axiom}:}} +\newcommand{\shortcorollary}{\bg{teal}{\translate{C}{K}\usenumberArabic{corollary}:}} +\newcommand{\shortfact}{\bg{SeaGreen}{F\usenumberArabic{fact}:}} +\newcommand{\shortproposition}{\bg{Cyan}{P\usenumberArabic{proposition}:}} +\newcommand{\shortremark}{\bg{green}{\tr{R}{B}\usenumberArabic{remark}:}} +\newcommand{\shortproof}{\bg{magenta}{\translate{Proof}{Beweis}:}} + +% Enhanced short environments (abbreviated) +\newcommand{\compactex}[1]{\bg{gray}{\translate{Ex}{Bsp}\usenumberArabic{example}:} \textit{(#1)}} +\newcommand{\compactdef}[1]{\bg{blue}{D\usenumberArabic{definition}:} \textit{(#1)}} +\newcommand{\compactformula}[1]{\bg{red}{F\usenumberArabic{formula}:} \textit{(#1)}} +\newcommand{\compactlemma}[1]{\bg{Aquamarine}{L\usenumberArabic{lemma}:} \textit{(#1)}} +\newcommand{\compacttheorem}[1]{\bg{ForestGreen}{\translate{T}{\StrMid{\theoremde}{1}{1}}\usenumberArabic{theorem}:} \textit{(#1)}} +\newcommand{\compactaxiom}[1]{\bg{JungleGreen}{A\usenumberArabic{axiom}:} \textit{(#1)}} +\newcommand{\compactcorollary}[1]{\bg{teal}{\translate{C}{K}\usenumberArabic{corollary}:} \textit{(#1)}} +\newcommand{\compactfact}[1]{\bg{SeaGreen}{F\usenumberArabic{fact}:} \textit{(#1)}} +\newcommand{\compactproposition}[1]{\bg{Cyan}{P\usenumberArabic{proposition}:} \textit{(#1)}} +\newcommand{\compactremark}[1]{\bg{green}{\tr{R}{B}\usenumberArabic{remark}:} \textit{(#1)}} +\newcommand{\compactproof}[1]{\bg{magenta}{\translate{Proof}{Beweis}: \textit{(#1)}}} diff --git a/src/style/style.tex b/src/style/style.tex deleted file mode 100644 index b4f700d..0000000 --- a/src/style/style.tex +++ /dev/null @@ -1,25 +0,0 @@ -%░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ -%░░░ ░░░░░ ░░░░░░░░░░░░░ ░░░░░░░░░░░ -%▒ ▒▒▒▒ ▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒ -%▒▒ ▒▒▒▒▒▒▒ ▒ ▒ ▒▒▒ ▒ ▒▒▒▒ ▒▒▒▒ -%▓▓▓▓ ▓▓▓▓▓▓▓ ▓▓▓▓ ▓ ▓▓ ▓▓ ▓▓▓ ▓ -%▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓▓▓▓▓ ▓▓▓ ▓ ▓ -%▓ ▓▓▓▓ ▓▓▓ ▓ ▓▓▓▓▓ ▓▓▓ ▓ ▓▓▓▓▓▓▓▓ -%███ ██████ █████ ████ ███ ███ -%██████████████████████ ███████████████████ - -% ----------------- % -% 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} -} From 811dc9f9eb46f9cebda31008df7886df529123d6 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Thu, 19 Feb 2026 16:52:35 +0100 Subject: [PATCH 05/32] Store to move back to normal tex files --- .gitignore | 1 + build.sh | 58 ---- build/build-config.json | 0 build/build.py | 48 +++ build/labels.py | 61 ++++ config/config.tex | 44 --- docs/docs.pdf | Bin 327369 -> 0 bytes docs/docs.tex | 5 +- install.sh | 22 ++ janishutz-helpers.sty | 353 +++++++++++++++++++ setup.sh | 1 - src/config/{main.sty => 00_main.sty} | 18 +- src/config/colors.sty | 6 + src/config/numbering.sty | 2 +- src/core.sty | 5 + src/core/cs.sty | 2 +- src/{lang => core}/translation.sty | 4 +- src/{janishutz-helpers.sty => header.sty} | 4 - src/lang/de.sty | 2 - src/opts.sty | 5 + src/style.sty | 99 +++--- src/style/counters.sty | 100 ++++++ src/style/counters.tex | 396 ---------------------- src/style/counters/core.sty | 189 ----------- src/style/counters/label.sty | 33 -- src/style/counters/reset.sty | 53 --- src/style/counters/style.sty | 104 ------ uninstall.sh | 12 + 28 files changed, 673 insertions(+), 954 deletions(-) delete mode 100755 build.sh delete mode 100644 build/build-config.json create mode 100644 build/labels.py delete mode 100644 config/config.tex delete mode 100644 docs/docs.pdf create mode 100755 install.sh create mode 100644 janishutz-helpers.sty delete mode 100644 setup.sh rename src/config/{main.sty => 00_main.sty} (70%) rename src/{lang => core}/translation.sty (89%) rename src/{janishutz-helpers.sty => header.sty} (78%) delete mode 100644 src/lang/de.sty create mode 100644 src/opts.sty create mode 100644 src/style/counters.sty delete mode 100644 src/style/counters.tex delete mode 100644 src/style/counters/core.sty delete mode 100644 src/style/counters/label.sty delete mode 100644 src/style/counters/reset.sty delete mode 100644 src/style/counters/style.sty create mode 100644 uninstall.sh diff --git a/.gitignore b/.gitignore index 747d42e..a7ce5b0 100644 --- a/.gitignore +++ b/.gitignore @@ -301,3 +301,4 @@ TSWLatexianTemp* # Uncomment the next line to have this generated file ignored. #*Notes.bib +__pycache__ diff --git a/build.sh b/build.sh deleted file mode 100755 index 9fbb069..0000000 --- a/build.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/sh - -echo " - ▄▄▄ ▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄ ▄▄ ▄▄ ▄▄ ▄▄▄▄▄▄▄ ▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄ ▄▄▄▄▄▄▄ -█ █ █ █ █ █ █▄█ █ █ █ █ █ █ █ █ █ █ ▄ █ █ █ -█ █ █ ▄ █▄ ▄█ ▄▄▄█ █ █ █▄█ █ ▄▄▄█ █ █ ▄ █ ▄▄▄█ █ █ █ █ ▄▄▄▄▄█ -█ █ █ █▄█ █ █ █ █ █▄▄▄█ █ █ █ █▄▄▄█ █ █ █▄█ █ █▄▄▄█ █▄▄█▄█ █▄▄▄▄▄ -█ █▄▄▄█ █ █ █ █ ▄▄▄██ █ █ ▄ █ ▄▄▄█ █▄▄▄█ ▄▄▄█ ▄▄▄█ ▄▄ █▄▄▄▄▄ █ -█ █ ▄ █ █ █ █ █▄▄▄█ ▄ █ █ █ █ █ █▄▄▄█ █ █ █ █▄▄▄█ █ █ █▄▄▄▄▄█ █ -█▄▄▄▄▄▄▄█▄█ █▄▄█ █▄▄▄█ █▄▄▄▄▄▄▄█▄▄█ █▄▄█ █▄▄█ █▄▄█▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█▄▄▄█ █▄▄▄▄▄▄▄█▄▄▄█ █▄█▄▄▄▄▄▄▄█ - - ==> Building <== - -" - -mkdir dist/ -cat ./janishutz-helpers.sty >./dist/janishutz-helpers-minimal.sty - -# Build minimal scope -echo "" >>./dist/janishutz-helpers-minimal.sty -cat ./config/config.tex >>./dist/janishutz-helpers-minimal.sty -echo "" >>./dist/janishutz-helpers-minimal.sty -cat ./main/core.tex >>./dist/janishutz-helpers-minimal.sty -echo "" >>./dist/janishutz-helpers-minimal.sty -cat ./main/style/style.tex >>./dist/janishutz-helpers-minimal.sty -echo "" >>./dist/janishutz-helpers-minimal.sty -cat ./main/style/common.tex >>./dist/janishutz-helpers-minimal.sty - -# Build recommended -cat ./dist/janishutz-helpers-minimal.sty >./dist/janishutz-helpers-recommended.sty -echo "" >>./dist/janishutz-helpers-recommended.sty -cat ./main/math.tex >>./dist/janishutz-helpers-recommended.sty -echo "" >>./dist/janishutz-helpers-recommended.sty -cat ./main/cs.tex >>./dist/janishutz-helpers-recommended.sty -echo "" >>./dist/janishutz-helpers-recommended.sty -cat ./main/index.tex >>./dist/janishutz-helpers-recommended.sty -echo "" >>./dist/janishutz-helpers-recommended.sty -cat ./main/style/counters.tex >>./dist/janishutz-helpers-recommended.sty -echo "" >>./dist/janishutz-helpers-recommended.sty -cat ./main/style/cs.tex >>./dist/janishutz-helpers-recommended.sty -echo "" >>./dist/janishutz-helpers-recommended.sty -cat ./main/style/math.tex >>./dist/janishutz-helpers-recommended.sty -echo "" >>./dist/janishutz-helpers-recommended.sty -cat ./main/style/language.tex >>./dist/janishutz-helpers-recommended.sty -echo "" >>./dist/janishutz-helpers-recommended.sty -cat ./extra/bib.tex >>./dist/janishutz-helpers-recommended.sty -echo "" >>./dist/janishutz-helpers-recommended.sty -cat ./extra/glossary.tex >>./dist/janishutz-helpers-recommended.sty - -# Build full -cat ./dist/janishutz-helpers-recommended.sty >./dist/janishutz-helpers-full.sty -echo "" >>./dist/janishutz-helpers-full.sty -cat ./extra/minted.tex >>./dist/janishutz-helpers-full.sty - -# Copy letter -cp ./scopes/letter.tex ./dist/janishutz-helpers-letters.sty - -echo "==> Done" diff --git a/build/build-config.json b/build/build-config.json deleted file mode 100644 index e69de29..0000000 diff --git a/build/build.py b/build/build.py index e69de29..49bb5e1 100644 --- a/build/build.py +++ b/build/build.py @@ -0,0 +1,48 @@ +import os +from typing import List +import labels +import datetime + +version = "1.0.0" + +print(""" + ▄▄▄ ▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄ ▄▄ ▄▄ ▄▄ ▄▄▄▄▄▄▄ ▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄ ▄▄▄▄▄▄▄ +█ █ █ █ █ █ █▄█ █ █ █ █ █ █ █ █ █ █ ▄ █ █ █ +█ █ █ ▄ █▄ ▄█ ▄▄▄█ █ █ █▄█ █ ▄▄▄█ █ █ ▄ █ ▄▄▄█ █ █ █ █ ▄▄▄▄▄█ +█ █ █ █▄█ █ █ █ █ █▄▄▄█ █ █ █ █▄▄▄█ █ █ █▄█ █ █▄▄▄█ █▄▄█▄█ █▄▄▄▄▄ +█ █▄▄▄█ █ █ █ █ ▄▄▄██ █ █ ▄ █ ▄▄▄█ █▄▄▄█ ▄▄▄█ ▄▄▄█ ▄▄ █▄▄▄▄▄ █ +█ █ ▄ █ █ █ █ █▄▄▄█ ▄ █ █ █ █ █ █▄▄▄█ █ █ █ █▄▄▄█ █ █ █▄▄▄▄▄█ █ +█▄▄▄▄▄▄▄█▄█ █▄▄█ █▄▄▄█ █▄▄▄▄▄▄▄█▄▄█ █▄▄█ █▄▄█ █▄▄█▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█▄▄▄█ █▄▄▄▄▄▄▄█▄▄▄█ █▄█▄▄▄▄▄▄▄█ + + +""") + + +def load_all_files_of_array(dirname: str, files: List[str]): + data = "" + for filename in files: + with open(dirname + "/" + filename, "r") as file: + data += file.read() + "\n\n" + + return data + + +output = load_all_files_of_array("../src/", ["header.sty"]) +output += f"\\ProvidesPackage{{janishutz-helpers}}[{datetime.datetime.now().date().isoformat()} v{version}]\n\n" +output += load_all_files_of_array("../src/", ["core.sty"]) +output += load_all_files_of_array("../src/config/", os.listdir("../src/config/")) +output += load_all_files_of_array("../src/core/", ["translation.sty"]) +output += load_all_files_of_array("../src/", ["opts.sty", "style.sty"]) +# output += load_all_files_of_array("../src/core/", os.listdir("../src/core/")) +# output += load_all_files_of_array("../src/style/", os.listdir("../src/style/")) + +# l = labels.generate_labels() +# output += l[0] + "\n\n" +# output += l[1] + +with open("../janishutz-helpers.sty", "w") as file: + file.write(output) + + +print("==> Built successfully. Output to project-root/janishutz-helpers.sty\n") +print("==> ") diff --git a/build/labels.py b/build/labels.py new file mode 100644 index 0000000..810ebb6 --- /dev/null +++ b/build/labels.py @@ -0,0 +1,61 @@ +# Auto-generate labels and version numbers +def generate_labels(): + data = "" + reset_func = "\\newcommand{\\newsectionNoPB}{" + + for label in [ + "definition", + "example", + "theorem", + "lemma", + "corollary", + "proposition", + "fact", + "formula", + "remark", + "combine", + ]: + data += f"\\newcounter{{{label}none}}\n" + reset_func += f"\n \\setcounter{{{label}none}}{{0}}\n" + + data += f"\\newcounter{{{label}section}}[section]\n" + data += f"\\renewcommand{{\\the{label}section}}{{\\thesection.\\arabic{{{label}section}}}}\n" + reset_func += f" \\setcounter{{{label}section}}{{0}}\n" + + data += f"\\newcounter{{{label}subsection}}[subsection]\n" + data += f"\\renewcommand{{\\the{label}subsection}}{{\\thesection.\\thesubsection.\\arabic{{{label}subsection}}}}\n" + reset_func += f" \\setcounter{{{label}subsection}}{{0}}\n" + + data += f"\\newcounter{{{label}subsubsection}}[subsubsection]\n" + data += f"\\renewcommand{{\\the{label}subsubsection}}{{\\thesection.\\thesubsection.\\thesubsubsection.\\arabic{{{label}subsubsection}}}}\n" + reset_func += f" \\setcounter{{{label}subsubsection}}{{0}}\n" + + data += f"\\newcounter{{{label}paragraph}}[paragraph]\n" + data += f"\\renewcommand{{\\the{label}paragraph}}{{\\thesection.\\thesubsection.\\thesubsubsection.\\theparagraph.\\arabic{{{label}paragraph}}}}\n" + reset_func += f" \\setcounter{{{label}paragraph}}{{0}}\n" + + # Generate tcolorboxes + if label != "combine": + data += f"""\\newtcolorbox{{{label}}}[2][]{{ + mainboxstyle, + colback={label}color!5!white, + colframe={label}color!75!black, + colbacktitle={label}color!75!black, + title={{\\large #2}}, + overlay={{ + \\node[overlaystyle, + draw={label}color!75!black, + fill={label}color!75!black + ] at (frame.north east) + {{ + \\large \\tr{{\\{label}NamingEN}}{{\\{label}NamingDE}}\\printLabel{{{label}}} + }}; + }}, #1 + }}\n\n""" + # TODO: If needed, add aliases for \short{definition} as e.g \shortdefinition + + reset_func += "\n \\setcounter{table}{0}\n" + reset_func += " \\setcounter{figure}{0}\n" + reset_func += "}\n" + + return data, reset_func diff --git a/config/config.tex b/config/config.tex deleted file mode 100644 index e5ba08a..0000000 --- a/config/config.tex +++ /dev/null @@ -1,44 +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} diff --git a/docs/docs.pdf b/docs/docs.pdf deleted file mode 100644 index af4d33911c722d2355d22da4bdf309e3f51c930a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 327369 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�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 Nb_@UpyP^<)e*(E4m#Y8( diff --git a/docs/docs.tex b/docs/docs.tex index 5945223..b490863 100644 --- a/docs/docs.tex +++ b/docs/docs.tex @@ -1,11 +1,8 @@ \documentclass{article} -\newcommand{\dir}{~/projects/latex} -\input{\dir/include.tex} -\load{full} +\usepackage{janishutz-helpers} \setup{Docs - \LaTeX \hspace{0mm} helpers} -\setLang{en} \begin{document} \startDocument diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..747a778 --- /dev/null +++ b/install.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +cd build/ +python build.py +cd .. + +loc="s" +read -p "Local (l) or system (s) installation? (Defaults to system) " loc + +if [[ "$loc" == "l" ]]; then + if [[ -z "${TEXMFHOME+x}" ]]; then + export TEXMFHOME=~/texmf/ + fi + + mkdir -p $TEXMFHOME/tex/latex/janishutz-helpers + cp ./janishutz-helpers.sty $TEXMFHOME/tex/latex/janishutz-helpers/ +else + sudo mkdir -p /usr/share/texmf/tex/latex/janishutz-helpers + sudo cp ./janishutz-helpers.sty /usr/share/texmf/tex/latex/janishutz-helpers/ + echo "Updating file database" + sudo texhash +fi diff --git a/janishutz-helpers.sty b/janishutz-helpers.sty new file mode 100644 index 0000000..a1e89a6 --- /dev/null +++ b/janishutz-helpers.sty @@ -0,0 +1,353 @@ +%% +%% Copyright (C) 2026 Janis Hutz +%% +%% This file may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either +%% version 1.3 of this license or (at your option) any later +%% version. The latest version of this license is in: +%% http://www.latex-project.org/lppl.txt +%% and version 1.3c or later is part of all distributions of +%% LaTeX version 2008-05-04 or later. + +\NeedsTeXFormat{LaTeX2e} + + +\ProvidesPackage{janishutz-helpers}[2026-02-19 v1.0.0] + +% Package imports +\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} +\RequirePackage{xstring} +\RequirePackage{etoolbox} + +\newcounter{descriptorShadeStrength} +\newcounter{shadeStrength} +\newcommand{\currentLanguage}{en} + +\setcounter{secnumdepth}{4} + + +% ┌ ┐ +% │ General config │ +% └ ┘ +% 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} + +% Set the default language +\renewcommand{\currentLanguage}{en} + + +% ┌ ┐ +% │ Rendering │ +% └ ┘ +% Short descriptors are generated from the naming defined in naming.sty +% You may here configure how they are generated. #1 is the full name. +\newcommand{\shortDescriptorNameTemplate}[1]{\StrBefore[1]{#1}} + +% Decide if the numbering should show a space preceding it. +% \newcommand{\useSpaceBeforeNumbering}{true} +% TODO: Remove above if works without + +% Specify how the inline and short descriptors (e.g. Lemma, etc) are rendered. +% - #1 is the name of the descriptor +% - #2 is the number (correctly rendered according to settings and preceded with space if not disabled) +% - #3 is the name passed (non-empty asserted) +\newcommand{\shortDescriptorTemplate}[4]{\bg{#1color}{\shortDescriptorNameTemplate{#1}#2} \textit{(#3)}\ } +\newcommand{\inlineDescriptorTemplate}[4]{\bg{#1color}{#1#2}: \textit{(#3)}\ } + +% These are used if no name is provided and argument #4 from above is the missing argument +\newcommand{\anonymousShortDescriptorTemplate}[3]{\bg{#1color}{\shortDescriptorNameTemplate{#1}#2}\ } +\newcommand{\anonymousInlineDescriptorTemplate}[3]{\bg{#3color}{#1#2}\ } + +% background command config (draws a small box around the content) +\newcommand{\backgroundPadding}{2pt} +\newcommand{\backgroundRounding}{0.1pt} + + +% ┌ ┐ +% │ Colours │ +% └ ┘ +% 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} + +% You may also use \definecolor{}{rgb}{r, g, b} to define a fully custom color +% see https://www.overleaf.com/learn/latex/Using_colors_in_LaTeX#Creating_your_own_colors for more information +\colorlet{definitioncolor}{blue} +\colorlet{theoremcolor}{ForestGreen} +\colorlet{lemmacolor}{Aquamarine} +\colorlet{corollarycolor}{teal} +\colorlet{axiomcolor}{JungleGreen} +\colorlet{factcolor}{SeaGreen} +\colorlet{propositioncolor}{Cyan} +\colorlet{examplecolor}{gray} +\colorlet{formulacolor}{red} +\colorlet{remarkcolor}{green} +\colorlet{proofcolor}{magenta} +\colorlet{intuitioncolor}{Emerald} +\colorlet{termcolor}{orange} +\colorlet{notationcolor}{Peach} +\colorlet{taskcolor}{gray} +\colorlet{usagecolor}{LimeGreen} +\colorlet{recallcolor}{yellow} +\colorlet{propertiescolor}{purple} + + +% ┌ ┐ +% │ Numbering │ +% └ ┘ +% Set a preset, can be combined, separate or off. +% If set to custom, all type specific commands need to be set below. +\newcommand{\numberingpreset}{combined} + +% Specify how elements are to be numbered. Can be (X is the current number of the element): +% - none (X) +% - section (section.X) +% - subsection (section.subsection.X) +% - subsubsection (section.subsection.subsubsection.X) +% - paragraph (section.subsection.subsubsection.paragraph.X) +\newcommand{\subsectionnumbering}{subsection} + + +% Set for a specific type. Can each be combined, separate, default or off: +% If set to anything but 'default', it will override the overarching style +% set by \numberingpreset +\newcommand{\definitionnumbering}{default} +\newcommand{\theoremnumbering}{default} +\newcommand{\lemmanumbering}{default} +\newcommand{\corollarynumbering}{default} +\newcommand{\axiomnumbering}{default} +\newcommand{\factnumbering}{default} +\newcommand{\propositionnumbering}{default} +\newcommand{\examplenumbering}{default} +\newcommand{\formulanumbering}{default} +\newcommand{\remarknumbering}{default} +\newcommand{\proofnumbering}{default} +\newcommand{\intuitionnumbering}{default} +\newcommand{\termnumbering}{default} +\newcommand{\notationnumbering}{default} +\newcommand{\tasknumbering}{default} +\newcommand{\usagenumbering}{default} +\newcommand{\recallnumbering}{default} +\newcommand{\propertiesnumbering}{default} + + +% ┌ ┐ +% │ Naming │ +% └ ┘ +% Here you may specify how each descriptor is named +\newcommand{\definitionNamingEN}{Definition} +\newcommand{\theoremNamingEN}{Theorem} +\newcommand{\lemmaNamingEN}{Lemma} +\newcommand{\corollaryNamingEN}{Corollary} +\newcommand{\axiomNamingEN}{Axiom} +\newcommand{\factNamingEN}{Fact} +\newcommand{\propositionNamingEN}{Proposition} +\newcommand{\exampleNamingEN}{Example} +\newcommand{\formulaNamingEN}{Formula} +\newcommand{\remarkNamingEN}{Remark} +\newcommand{\proofNamingEN}{Proof} +\newcommand{\intuitionNamingEN}{Intuition} +\newcommand{\termNamingEN}{Term} +\newcommand{\notationNamingEN}{Notation} +\newcommand{\taskNamingEN}{Task} +\newcommand{\usageNamingEN}{Usage} +\newcommand{\recallNamingEN}{Recall} +\newcommand{\propertiesNamingEN}{Properties} + +\newcommand{\definitionNamingDE}{Definition} +\newcommand{\theoremNamingDE}{Theorem} +\newcommand{\lemmaNamingDE}{Lemma} +\newcommand{\corollaryNamingDE}{Korollar} +\newcommand{\axiomNamingDE}{Axiom} +\newcommand{\factNamingDE}{Fakt} +\newcommand{\propositionNamingDE}{Satz} +\newcommand{\exampleNamingDE}{Beispiel} +\newcommand{\formulaNamingDE}{Formel} +\newcommand{\remarkNamingDE}{Bemerkung} +\newcommand{\proofNamingDE}{Beweis} +\newcommand{\intuitionNamingDE}{Intuition} +\newcommand{\termNamingDE}{Begriff} +\newcommand{\notationNamingDE}{Notation} +\newcommand{\taskNamingDE}{Aufgabe} +\newcommand{\usageNamingDE}{Nutzung} +\newcommand{\recallNamingDE}{Repetition} +\newcommand{\propertiesNamingDE}{Eigenschaften} + + +% ┌ ┐ +% │ Translation │ +% └ ┘ +\newcommand{\translate}[2]{% + \ifthenelse{\equal{\currentLanguage}{en}}{#1}{#2} +} +\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 }} + + +\DeclareOption{de}{ + \RequirePackage[ngerman]{babel} + \renewcommand{\currentLanguage}{de} +} +\ProcessOptions + + +% ┌ ┐ +% │ STYLE: Globals │ +% └ ┘ +% Global style configs for tcolorbox (to reduce bloat) +% \AtBeginDocument{ +% \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 +% } +% } +% } + +% ── Fonts ─────────────────────────────────────────────────────────── +\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} + } + } +} + +% ── Small common style elements ───────────────────────────────────── +% Spacing (vertical) +% TODO: Rework +\newcommand{\hrmvspace}{\vspace{-0.25pc}} +\newcommand{\rmvspace}{\vspace{-0.5pc}} +\newcommand{\mrmvspace}{\vspace{-0.75pc}} +\newcommand{\drmvspace}{\vspace{-1pc}} +\newcommand{\dhrmvspace}{\vspace{-1.25pc}} +\newcommand{\dnrmvspace}{\vspace{-1.5pc}} +\newcommand{\dmrmvspace}{\vspace{-1.75pc}} +\newcommand{\ddrmvspace}{\vspace{-2pc}} + +% Spacing (horizontal) +\newcommand{\smallhspace}{\hspace{2mm}} +\newcommand{\mediumhspace}{\hspace{5mm}} +\newcommand{\largehspace}{\hspace{1cm}} + +% other elements +\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=\backgroundPadding, + arc=\backgroundRounding, + left=0pt, + right=0pt, + top=0pt, + bottom=0pt, + 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}} + +% 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 \tr{Contents}{Inhaltsverzeichnis}}, + fonttitle=\bfseries, + breakable + ] + \hspace{1cm} + \tableofcontents + \end{tcolorbox} +} + + diff --git a/setup.sh b/setup.sh deleted file mode 100644 index 9baf380..0000000 --- a/setup.sh +++ /dev/null @@ -1 +0,0 @@ -# TODO: Make this script extend tex path diff --git a/src/config/main.sty b/src/config/00_main.sty similarity index 70% rename from src/config/main.sty rename to src/config/00_main.sty index f129c5d..4fbe26f 100644 --- a/src/config/main.sty +++ b/src/config/00_main.sty @@ -12,7 +12,7 @@ \newcommand{\countrycode}{CH} % Set the default language -\newcommand{\currentLanguage}{en} +\renewcommand{\currentLanguage}{en} % ┌ ┐ @@ -23,19 +23,19 @@ \newcommand{\shortDescriptorNameTemplate}[1]{\StrBefore[1]{#1}} % Decide if the numbering should show a space preceding it. -\newcommand{\useSpaceBeforeNumbering}{true} +% \newcommand{\useSpaceBeforeNumbering}{true} +% TODO: Remove above if works without % Specify how the inline and short descriptors (e.g. Lemma, etc) are rendered. -% - #1 is the name of the descriptor (or the shortened version, as configured) +% - #1 is the name of the descriptor % - #2 is the number (correctly rendered according to settings and preceded with space if not disabled) -% - #3 is the corresponding color -% - #4 is the name passed (non-empty) -\newcommand{\shortDescriptorTemplate}[4]{\bg{#3}{#1#2} \textit{(#4)}} -\newcommand{\inlineDescriptorTemplate}[4]{\bg{#3}{#1#2} \textit{(#4)}} +% - #3 is the name passed (non-empty asserted) +\newcommand{\shortDescriptorTemplate}[4]{\bg{#1color}{\shortDescriptorNameTemplate{#1}#2} \textit{(#3)}\ } +\newcommand{\inlineDescriptorTemplate}[4]{\bg{#1color}{#1#2}: \textit{(#3)}\ } % These are used if no name is provided and argument #4 from above is the missing argument -\newcommand{\anonymousShortDescriptorTemplate}[3]{\bg{#3}{#1#2}} -\newcommand{\anonymousInlineDescriptorTemplate}[3]{\bg{#3}{#1#2}} +\newcommand{\anonymousShortDescriptorTemplate}[3]{\bg{#1color}{\shortDescriptorNameTemplate{#1}#2}\ } +\newcommand{\anonymousInlineDescriptorTemplate}[3]{\bg{#3color}{#1#2}\ } % background command config (draws a small box around the content) \newcommand{\backgroundPadding}{2pt} diff --git a/src/config/colors.sty b/src/config/colors.sty index 93ba893..4eae5e7 100644 --- a/src/config/colors.sty +++ b/src/config/colors.sty @@ -1,6 +1,12 @@ % ┌ ┐ % │ Colours │ % └ ┘ +% 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} + % You may also use \definecolor{}{rgb}{r, g, b} to define a fully custom color % see https://www.overleaf.com/learn/latex/Using_colors_in_LaTeX#Creating_your_own_colors for more information \colorlet{definitioncolor}{blue} diff --git a/src/config/numbering.sty b/src/config/numbering.sty index 7fb8cfc..de62377 100644 --- a/src/config/numbering.sty +++ b/src/config/numbering.sty @@ -1,7 +1,7 @@ % ┌ ┐ % │ Numbering │ % └ ┘ -% Set a preset, can be combined, separate, custom or off. +% Set a preset, can be combined, separate or off. % If set to custom, all type specific commands need to be set below. \newcommand{\numberingpreset}{combined} diff --git a/src/core.sty b/src/core.sty index 63db0f6..ecd4898 100644 --- a/src/core.sty +++ b/src/core.sty @@ -25,5 +25,10 @@ \RequirePackage{gensymb} \RequirePackage{pifont} \RequirePackage{xstring} +\RequirePackage{etoolbox} + +\newcounter{descriptorShadeStrength} +\newcounter{shadeStrength} +\newcommand{\currentLanguage}{en} \setcounter{secnumdepth}{4} diff --git a/src/core/cs.sty b/src/core/cs.sty index 36af193..81a0452 100644 --- a/src/core/cs.sty +++ b/src/core/cs.sty @@ -14,7 +14,7 @@ \newcommand{\Indent}{\hspace{\algorithmicindent}} -\newcommand{\tc}[]{\tco{#1}} +\newcommand{\tc}[1]{\tco{#1}} \newcommand{\tct}[1]{\Theta\left(#1\right)} \newcommand{\tco}[1]{\mathcal{O}\left(#1\right)} \newcommand{\tcl}[1]{\Omega\left(#1\right)} diff --git a/src/lang/translation.sty b/src/core/translation.sty similarity index 89% rename from src/lang/translation.sty rename to src/core/translation.sty index 3fb1004..1108eb4 100644 --- a/src/lang/translation.sty +++ b/src/core/translation.sty @@ -1,7 +1,9 @@ % ┌ ┐ % │ Translation │ % └ ┘ -\newcommand{\translate}[2]{\ifnum\value{lang}<2{#1}\else{#2}\fi} +\newcommand{\translate}[2]{% + \ifthenelse{\equal{\currentLanguage}{en}}{#1}{#2} +} \newcommand{\tr}[2]{\translate{#1}{#2}} % Translation aids (commonly used) diff --git a/src/janishutz-helpers.sty b/src/header.sty similarity index 78% rename from src/janishutz-helpers.sty rename to src/header.sty index d055fed..c070d2b 100644 --- a/src/janishutz-helpers.sty +++ b/src/header.sty @@ -10,7 +10,3 @@ %% LaTeX version 2008-05-04 or later. \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{janishutz-helpers}[2026-02-10 v1.0.0] - -\newcounter{descriptorShadeStrength} -\newcounter{shadeStrength} diff --git a/src/lang/de.sty b/src/lang/de.sty deleted file mode 100644 index 4ad042e..0000000 --- a/src/lang/de.sty +++ /dev/null @@ -1,2 +0,0 @@ -\RequirePackage[ngerman]{babel} -\renewcommand{\currentLanguage}{de} diff --git a/src/opts.sty b/src/opts.sty new file mode 100644 index 0000000..4f9796b --- /dev/null +++ b/src/opts.sty @@ -0,0 +1,5 @@ +\DeclareOption{de}{ + \RequirePackage[ngerman]{babel} + \renewcommand{\currentLanguage}{de} +} +\ProcessOptions diff --git a/src/style.sty b/src/style.sty index 76cb494..fe3ae85 100644 --- a/src/style.sty +++ b/src/style.sty @@ -2,37 +2,37 @@ % │ STYLE: Globals │ % └ ┘ % Global style configs for tcolorbox (to reduce bloat) -\AtBeginDocument{ - \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 - } - } -} +% \AtBeginDocument{ +% \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 +% } +% } +% } % ── Fonts ─────────────────────────────────────────────────────────── \newcommand{\setFont}[1]{\fontfamily{#1}\selectfont} @@ -72,7 +72,8 @@ \renewcommand{\quote}[1]{``\textit{#1}''} % Add a color shade (similar to \fhlc, but nicer boxes) -\newcommand{\background}[3]{\tcbox[on line, +\newcommand{\background}[3]{% + \tcbox[on line, boxsep=\backgroundPadding, arc=\backgroundRounding, left=0pt, @@ -82,26 +83,8 @@ 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 color shade (similar to \fhlc, but nicer boxes) -\newcommand{\background}[3]{\tcbox[on line, - boxsep=\backgroundPadding, - arc=\backgroundRounding, - left=0pt, - right=0pt, - top=0pt, - bottom=0pt, - frame empty, - colback=#1!#2!white, - highlight math style={enhanced} - ] {\textbf{#3}}} + ] {\textbf{#3}}% +} % Abstraction of background, where the brightness is set to 20% \newcommand{\shade}[2]{\background{#1}{\arabic{shadeStrength}}{#2}} @@ -114,8 +97,16 @@ \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] + \begin{tcolorbox}[ + colback=black!5!white, + colbacktitle=#1!75!black, + coltitle=black, + enhanced, + attach boxed title to top center={yshift=-2mm}, + title={\Large \tr{Contents}{Inhaltsverzeichnis}}, + fonttitle=\bfseries, + breakable + ] \hspace{1cm} \tableofcontents \end{tcolorbox} diff --git a/src/style/counters.sty b/src/style/counters.sty new file mode 100644 index 0000000..e03f222 --- /dev/null +++ b/src/style/counters.sty @@ -0,0 +1,100 @@ +% ── Label generator ───────────────────────────────────────────────── +\newcommand{\printNumberingConfigForDescriptor}[1]{\csname #1numbering\endcsname} +\newcommand{\printCounter}[1]{\csname the#1\endcsname} + +\newcommand{\printLabel}[1]{% + \ifcsdef{#1numbering}{% Extra config present + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{ + \printCounter{#1\subsectionnumbering}% + }{ + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{separate}}{ + \printCounter{#1\subsectionnumbering}% + }{ + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{ + \printCounter{combined\subsectionnumbering}% + }{} + } + } + }{% + \labelPrintBackendRoutine{#1}% + } +} +\newcommand{\labelPrintBackendRoutine}[1]{ + \ifthenelse{\equal{\numberingpreset}{combined}}{ + \printCounter{combined\subsectionnumbering}% + }{ + \ifthenelse{\equal{\numberingpreset}{separate}}{ + \printCounter{#1\subsectionnumbering}% + }{} + } +} + +% Inline environments (inline) +\newcommand{\printTranslationOptionEN}[1]{\csname #1NamingEN\endcsname} +\newcommand{\printTranslationOptionDE}[1]{\csname #1NamingDE\endcsname} + +\newcommand{\inline}[2][__NONAME__]{% + \ifthenelse{\equal{__NONAME__}{#1}}{% + \anonymousInlineDescriptorTemplate{#2}{\printLabel{#2}}% + }{% + \inlineDescriptorTemplate{#2}{\printLabel{#2}}{#1}% + } +} + +\newcommand{\short}[2][__NONAME__]{% + \ifthenelse{\equal{__NONAME__}{#1}}{% + \anonymousShortDescriptorTemplate{#2}{\printLabel{#2}}% + }{% + \shortDescriptorTemplate{#2}{\printLabel{#2}}{#1}% + } +} + +% ── Set the current number of a label ─────────────────────────────── +\newcommand{\setLabelNumber}[2]{% + \setcounter{#1none}{#2}% + \addtocounter{#1none}{-1}% + \setcounter{#1section}{#2}% + \addtocounter{#1section}{-1}% + \setcounter{#1subsection}{#2}% + \addtocounter{#1subsection}{-1}% + \setcounter{#1subsubsection}{#2}% + \addtocounter{#1subsubsection}{-1}% + \setcounter{#1paragraph}{#2}% + \addtocounter{#1paragraph}{-1}% +} + +\newcommand{\stepLabelNumber}[1]{% + \stepcounter{#1none}% + \stepcounter{#1section}% + \stepcounter{#1subsection}% + \stepcounter{#1subsubsection}% + \stepcounter{#1paragraph}% +} + +% ┌ ┐ +% │ Counter numbering │ +% └ ┘ +% TODO: Update +\newcommand{\preTableAndFigHook}[1]{% + \ifnum\value{numberingConfig}>1% + \ifnum\value{numberSubsections}=1% + \stepcounter{allss}% + \else + \ifnum\value{numberSubsections}=2% + \stepcounter{allsss}% + \else% + \stepcounter{all}% + \fi + \fi + \fi + \renewcommand{\thetable}{\arabic{table}} + \renewcommand{\thefigure}{\arabic{figure}} +} +\AtBeginEnvironment{table}{\preTableAndFigHook{table}} +\AtBeginEnvironment{figure}{\preTableAndFigHook{figure}} + + +\newcommand{\newsection}{ + \newpage + \newsectionNoPB +} diff --git a/src/style/counters.tex b/src/style/counters.tex deleted file mode 100644 index d29efe7..0000000 --- a/src/style/counters.tex +++ /dev/null @@ -1,396 +0,0 @@ -\RequirePackage{etoolbox} -% tcolorbox and other stylistic elements (i.e. inline versions of them) that have counters -\newcounter{lemma}[section] -\newcounter{definition}[section] -\newcounter{corollary}[section] -\newcounter{theorem}[section] -\newcounter{axiom}[section] -\newcounter{example}[section] -\newcounter{fact}[section] -\newcounter{proposition}[section] -\newcounter{formula}[section] -\newcounter{remark}[section] -\newcounter{all}[section] - -\newcounter{lemmass}[subsection] -\newcounter{definitionss}[subsection] -\newcounter{corollaryss}[subsection] -\newcounter{theoremss}[subsection] -\newcounter{axiomss}[subsection] -\newcounter{exampless}[subsection] -\newcounter{factss}[subsection] -\newcounter{propositionss}[subsection] -\newcounter{formulass}[subsection] -\newcounter{remarkss}[subsection] -\newcounter{allss}[subsection] - -\newcounter{lemmasss}[subsubsection] -\newcounter{definitionsss}[subsubsection] -\newcounter{corollarysss}[subsubsection] -\newcounter{theoremsss}[subsubsection] -\newcounter{axiomsss}[subsubsection] -\newcounter{examplesss}[subsubsection] -\newcounter{factsss}[subsubsection] -\newcounter{propositionsss}[subsubsection] -\newcounter{formulasss}[subsubsection] -\newcounter{remarksss}[subsubsection] -\newcounter{allsss}[subsubsection] - -% ── Set the current number of a label ─────────────────────────────── -\newcommand{\setLabelNumber}[2]{% - \setcounter{#1}{#2}% - \addtocounter{#1}{-1}% - \setcounter{#1ss}{#2}% - \addtocounter{#1ss}{-1}% - \setcounter{#1sss}{#2}% - \addtocounter{#1sss}{-1}% -} - -\newcommand{\stepLabelNumber}[1]{% - \stepcounter{#1}% - \stepcounter{#1ss}% - \stepcounter{#1sss}% -} - -\newcommand{\printcounter}[1]{% - \csname the#1\endcsname -} - -\newcommand{\suffix}{ss} -\newcommand{\sectionNumbering}{\thesection} - -% ┌ ┐ -% │ Counter numbering │ -% └ ┘ -\newcommand{\preTableAndFigHook}[1]{% - \ifnum\value{numberingConfig}>1% - \ifnum\value{numberSubsections}=1% - \stepcounter{allss}% - \else - \ifnum\value{numberSubsections}=2% - \stepcounter{allsss}% - \else% - \stepcounter{all}% - \fi - \fi - \fi -} -\AtBeginEnvironment{table}{\preTableAndFigHook{table}} -\AtBeginEnvironment{figure}{\preTableAndFigHook{figure}} - -\newcommand{\applyTableAndFigureNumbering}{ - % Tables & Figures - \ifnum\value{numberingConfig}=0 - \renewcommand{\thetable}{\arabic{table}} - \renewcommand{\thefigure}{\arabic{figure}} - \else - \ifnum\value{numberingConfig}=1 - \renewcommand{\thetable}{\sectionNumbering.\arabic{table}} - \renewcommand{\thefigure}{\sectionNumbering.\arabic{figure}} - \else - \ifnum\value{numberSubsections}=1 - \renewcommand{\thetable}{\sectionNumbering.\arabic{allss}} - \renewcommand{\thefigure}{\sectionNumbering.\arabic{allss}} - \else - \ifnum\value{numberSubsections}=2 - \renewcommand{\thetable}{\refstepcounter{allsss}\sectionNumbering.\arabic{allsss}} - \renewcommand{\thefigure}{\sectionNumbering.\arabic{allsss}} - \else - \renewcommand{\thetable}{\sectionNumbering.\arabic{all}} - \renewcommand{\thefigure}{\sectionNumbering.\arabic{all}} - \fi - \fi - \fi - \fi -} - -\newcommand{\setSubsectionNumbering}[1]{ - \setcounter{numberSubsections}{#1} - \applySubsectionNumbering -} - -\newcommand{\applySubsectionNumbering}{ - \ifnum\value{numberSubsections}=1 - \renewcommand{\sectionNumbering}{\thesubsection} - \renewcommand{\suffix}{ss} - \typeout{Numbering as section.subsection.number} - \else - \ifnum\value{numberSubsections}=2 - \renewcommand{\sectionNumbering}{\thesubsubsection} - \renewcommand{\suffix}{sss} - \typeout{Numbering as section.subsection.subsubsection.number} - \else - \renewcommand{\sectionNumbering}{\thesection} - \renewcommand{\suffix}{} - \typeout{Numbering as section.number} - \fi - \fi - \applyTableAndFigureNumbering - - \renewcommand{\thelemma}{\sectionNumbering.\arabic{lemma}} - \renewcommand{\thedefinition}{\sectionNumbering.\arabic{definition}} - \renewcommand{\thecorollary}{\sectionNumbering.\arabic{corollary}} - \renewcommand{\thetheorem}{\sectionNumbering.\arabic{theorem}} - \renewcommand{\theaxiom}{\sectionNumbering.\arabic{axiom}} - \renewcommand{\theexample}{\sectionNumbering.\arabic{example}} - \renewcommand{\thefact}{\sectionNumbering.\arabic{fact}} - \renewcommand{\theproposition}{\sectionNumbering.\arabic{proposition}} - \renewcommand{\theformula}{\sectionNumbering.\arabic{formula}} - \renewcommand{\theremark}{\sectionNumbering.\arabic{remark}} - \renewcommand{\theall}{\sectionNumbering.\arabic{all}} - - \renewcommand{\thelemmass}{\sectionNumbering.\arabic{lemmass}} - \renewcommand{\thedefinitionss}{\sectionNumbering.\arabic{definitionss}} - \renewcommand{\thecorollaryss}{\sectionNumbering.\arabic{corollaryss}} - \renewcommand{\thetheoremss}{\sectionNumbering.\arabic{theoremss}} - \renewcommand{\theaxiomss}{\sectionNumbering.\arabic{axiomss}} - \renewcommand{\theexampless}{\sectionNumbering.\arabic{exampless}} - \renewcommand{\thefactss}{\sectionNumbering.\arabic{factss}} - \renewcommand{\thepropositionss}{\sectionNumbering.\arabic{propositionss}} - \renewcommand{\theformulass}{\sectionNumbering.\arabic{formulass}} - \renewcommand{\theremarkss}{\sectionNumbering.\arabic{remarkss}} - \renewcommand{\theallss}{\sectionNumbering.\arabic{allss}} - - \renewcommand{\thelemmasss}{\sectionNumbering.\arabic{lemmasss}} - \renewcommand{\thedefinitionsss}{\sectionNumbering.\arabic{definitionsss}} - \renewcommand{\thecorollarysss}{\sectionNumbering.\arabic{corollarysss}} - \renewcommand{\thetheoremsss}{\sectionNumbering.\arabic{theoremsss}} - \renewcommand{\theaxiomsss}{\sectionNumbering.\arabic{axiomsss}} - \renewcommand{\theexamplesss}{\sectionNumbering.\arabic{examplesss}} - \renewcommand{\thefactsss}{\sectionNumbering.\arabic{factsss}} - \renewcommand{\thepropositionsss}{\sectionNumbering.\arabic{propositionsss}} - \renewcommand{\theformulasss}{\sectionNumbering.\arabic{formulasss}} - \renewcommand{\theremarksss}{\sectionNumbering.\arabic{remarksss}} - \renewcommand{\theallsss}{\sectionNumbering.\arabic{allsss}} -} -\applySubsectionNumbering - -% ── Label generation ──────────────────────────────────────────────── -\newcommand{\labelSectionGeneration}{% - \ifnum\value{numberSubsections}=1 - \arabic{section}-\arabic{subsection}% - \else - \ifnum\value{numberSubsections}=2 - \arabic{section}-\arabic{subsection}-\arabic{subsubsection}% - \else - \arabic{section}% - \fi - \fi} - -\newcommand{\labelIt}[1]{\refstepcounter{#1\suffix}\edef\tempLabel{\genLabel{#1}{\arabic{#1\suffix}}}\label{\tempLabel}} -\newcommand{\genLabel}[2]{#1:\labelSectionGeneration-#2} - -% ┌ ┐ -% │ Number the counters appropriately │ -% └ ┘ -\newcommand{\usenumberArabic}[1]{% - \ifnum\value{numberingConfig}=1 - \labelIt{#1} - \printcounter{#1\suffix}% - \else - \ifnum\value{numberingConfig}=2 - \ifthenelse{\equal{#1}{definitions}}{% - \labelIt{definition} - \printcounter{definition\suffix}% - }{% - \labelIt{all} - \printcounter{all\suffix}% - }% - \else - \ifnum\value{numberingConfig}=3 - \labelIt{all} - \printcounter{all\suffix}% - \else - \relax% - \fi - \fi - \fi} - - -% ──────────────────────────────────────────────────────────────────── -% ┌ ┐ -% │ Enable or disable numbering │ -% └ ┘ -% Initialize with config file -\newcounter{numberingConfigStore} -\setcounter{numberingConfigStore}{\value{numberingConfig}} - -% For later change -\newcommand{\setNumberingStyle}[1]{ - \typeout{Setting NumberingStyle to #1} - \setcounter{numberingConfig}{#1} - \ifthenelse{\equal{#1}{0}}{}{ - \setcounter{numberingConfigStore}{#1} - } - \applyTableAndFigureNumbering -} - -% Enable / disable numbering -\newcommand{\numberingOff}{ - \setcounter{numberingConfig}{0} - \applyTableAndFigureNumbering -} -\newcommand{\numberingOn}{ - \setcounter{numberingConfig}{\value{numberingConfigStore}} - \applyTableAndFigureNumbering -} - -% ──────────────────────────────────────────────────────────────────── -% ╭────────────────────────────────────────────────╮ -% │ Reset definition, lemma, etc counters, add a │ -% │ new page │ -% ╰────────────────────────────────────────────────╯ -\newcommand{\newsection}{ - \newpage - \newsectionNoPB -} - -% ── Reset definitions, lemma, etc counters, do not add new page ───── -\newcommand{\newsectionNoPB}{ - \setcounter{lemma}{0} - \setcounter{definition}{0} - \setcounter{corollary}{0} - \setcounter{theorem}{0} - \setcounter{axiom}{0} - \setcounter{example}{0} - \setcounter{fact}{0} - \setcounter{proposition}{0} - \setcounter{formula}{0} - \setcounter{remark}{0} - \setcounter{all}{0} - - \setcounter{lemmass}{0} - \setcounter{definitionss}{0} - \setcounter{corollaryss}{0} - \setcounter{theoremss}{0} - \setcounter{axiomss}{0} - \setcounter{exampless}{0} - \setcounter{factss}{0} - \setcounter{propositionss}{0} - \setcounter{formulass}{0} - \setcounter{remarkss}{0} - \setcounter{allss}{0} - - \setcounter{lemmasss}{0} - \setcounter{definitionsss}{0} - \setcounter{corollarysss}{0} - \setcounter{theoremsss}{0} - \setcounter{axiomsss}{0} - \setcounter{examplesss}{0} - \setcounter{factsss}{0} - \setcounter{propositionsss}{0} - \setcounter{formulasss}{0} - \setcounter{remarksss}{0} - \setcounter{allsss}{0} - - % Tables & Figures - \setcounter{table}{0} - \setcounter{figure}{0} -} -\newsectionNoPB % Initializes - - -% ──────────────────────────────────────────────────────────────────── -% ╭────────────────────────────────────────────────╮ -% │ Tcolorboxes │ -% ╰────────────────────────────────────────────────╯ -% ──────────────────────────────────────────────────────────────────── - -% Definitions -\newtcolorbox{definition}[2][]{mainboxstyle,colback=blue!5!white,colframe=blue!75!black,colbacktitle=blue!75!black,title={\large #2},overlay={\node[overlaystyle,draw=blue!75!black,fill=blue!75!black] at (frame.north east) {\large Definition\usenumberArabic{definition}};},#1} - -% Theorems -\newtcolorbox{theorem}[2][]{mainboxstyle,colback=ForestGreen!5!white,colframe=ForestGreen!75!black,colbacktitle=ForestGreen!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=ForestGreen!75!black,fill=ForestGreen!75!black] at (frame.north east) {\large \translate{Theorem}{\theoremde}\usenumberArabic{theorem}};},#1} - -% Lemmas -\newtcolorbox{lemma}[2][]{mainboxstyle,colback=Aquamarine!5!white,colframe=Aquamarine!75!black,colbacktitle=Aquamarine!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=Aquamarine!75!black,fill=Aquamarine!75!black] at (frame.north east) {\large Lemma\usenumberArabic{lemma}};},#1} - -% Corollaries -\newtcolorbox{corollary}[2][]{mainboxstyle,colback=teal!5!white,colframe=teal!75!black,colbacktitle=teal!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=teal!75!black,fill=teal!75!black] at (frame.north east) {\large \translate{Corollary}{Korollar}\usenumberArabic{corollary}};},#1} - -% Axioms -\newtcolorbox{axiom}[2][]{mainboxstyle,colback=JungleGreen!5!white,colframe=JungleGreen!75!black,colbacktitle=JungleGreen!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=JungleGreen!75!black,fill=JungleGreen!75!black] at (frame.north east) {\large Axiom\usenumberArabic{axiom}};},#1} - -% Facts -\newtcolorbox{fact}[2][]{mainboxstyle,colback=SeaGreen!5!white,colframe=SeaGreen!75!black,colbacktitle=SeaGreen!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=SeaGreen!75!black,fill=SeaGreen!75!black] at (frame.north east) {\large \translate{Fact}{Fakt}\usenumberArabic{fact}};},#1} - -% Propositions -\newtcolorbox{proposition}[2][]{mainboxstyle,colback=Cyan!5!white,colframe=Cyan!75!black,colbacktitle=Cyan!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=Cyan!75!black,fill=Cyan!75!black] at (frame.north east) {\large Proposition\usenumberArabic{proposition}};},#1} - -% Examples -\newtcolorbox{example}[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{Example}{Beispiel}\usenumberArabic{example}};},#1} - -% Formula -\newtcolorbox{formula}[2][]{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 \translate{Formula}{Formel}\usenumberArabic{formula}};},#1} - -% Remark -\newtcolorbox{remark}[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{Remark}{Bemerkung} \usenumberArabic{remark}};},#1} - - -% ──────────────────────────────────────────────────────────────────── -% ╭────────────────────────────────────────────────╮ -% │ Inline environments │ -% ╰────────────────────────────────────────────────╯ -% ──────────────────────────────────────────────────────────────────── - - -% Inline environments (inline) -\newcommand{\inlineex}{\bg{gray}{\translate{Example}{Beispiel}\usenumberArabic{example}:}} -\newcommand{\inlinedef}{\bg{blue}{Definition\usenumberArabic{definition}:}} -\newcommand{\inlineformula}{\bg{red}{\translate{Formula}{Formel}\usenumberArabic{formula}:}} -\newcommand{\inlinelemma}{\bg{Aquamarine}{Lemma\usenumberArabic{lemma}:}} -\newcommand{\inlinetheorem}{\bg{ForestGreen}{\translate{Theorem}{\theoremde}\usenumberArabic{theorem}:}} -\newcommand{\inlineaxiom}{\bg{JungleGreen}{Axiom\usenumberArabic{axiom}:}} -\newcommand{\inlinecorollary}{\bg{teal}{\translate{Corollary}{Korollar}\usenumberArabic{corollary}:}} -\newcommand{\inlinefact}{\bg{SeaGreen}{\translate{Fact}{Fakt}\usenumberArabic{fact}:}} -\newcommand{\inlineproposition}{\bg{Cyan}{Proposition\usenumberArabic{proposition}:}} -\newcommand{\inlineremark}{\bg{green}{\translate{Remark}{Bemerkung}\usenumberArabic{remark}:}} -\newcommand{\inlineproof}{\bg{magenta}{\translate{Proof}{Beweis}:}} - -% Enhanced inline environments -\newcommand{\fancyex}[1]{\bg{gray}{\translate{Example}{Beispiel}\usenumberArabic{example}:} \textit{(#1)}} -\newcommand{\fancydef}[1]{\bg{blue}{Definition\usenumberArabic{definition}:} \textit{(#1)}} -\newcommand{\fancyformula}[1]{\bg{red}{\translate{Formula}{Formel}\usenumberArabic{formula}:} \textit{(#1)}} -\newcommand{\fancylemma}[1]{\bg{Aquamarine}{Lemma\usenumberArabic{lemma}:} \textit{(#1)}} -\newcommand{\fancytheorem}[1]{\bg{ForestGreen}{\translate{Theorem}{\theoremde}\usenumberArabic{theorem}:} \textit{(#1)}} -\newcommand{\fancyaxiom}[1]{\bg{JungleGreen}{Axiom\usenumberArabic{axiom}:} \textit{(#1)}} -\newcommand{\fancycorollary}[1]{\bg{teal}{\translate{Corollary}{Korollar}\usenumberArabic{corollary}:} \textit{(#1)}} -\newcommand{\fancyfact}[1]{\bg{SeaGreen}{\translate{Fact}{Fakt}\usenumberArabic{fact}:} \textit{(#1)}} -\newcommand{\fancyproposition}[1]{\bg{Cyan}{Proposition\usenumberArabic{proposition}:} \textit{(#1)}} -\newcommand{\fancyremark}[1]{\bg{green}{\translate{Remark}{Bemerkung}\usenumberArabic{remark}:} \textit{(#1)}} -\newcommand{\fancyproof}[1]{\bg{magenta}{\translate{Proof}{Beweis}: \textit{(#1)}}} - -% short environments (abbreviated) -\newcommand{\shortex}{\bg{gray}{\translate{Ex}{Bsp}\usenumberArabic{example}:}} -\newcommand{\shortdef}{\bg{blue}{D\usenumberArabic{definition}:}} -\newcommand{\short}{\bg{red}{F\usenumberArabic{formula}:}} -\newcommand{\shortlemma}{\bg{Aquamarine}{L\usenumberArabic{lemma}:}} -\newcommand{\shorttheorem}{\bg{ForestGreen}{\translate{T}{\StrMid{\theoremde}{1}{1}}\usenumberArabic{theorem}:}} -\newcommand{\shortaxiom}{\bg{JungleGreen}{A\usenumberArabic{axiom}:}} -\newcommand{\shortcorollary}{\bg{teal}{\translate{C}{K}\usenumberArabic{corollary}:}} -\newcommand{\shortfact}{\bg{SeaGreen}{F\usenumberArabic{fact}:}} -\newcommand{\shortproposition}{\bg{Cyan}{P\usenumberArabic{proposition}:}} -\newcommand{\shortremark}{\bg{green}{\tr{R}{B}\usenumberArabic{remark}:}} -\newcommand{\shortproof}{\bg{magenta}{\translate{Proof}{Beweis}:}} - -% Enhanced short environments (abbreviated) -\newcommand{\compactex}[1]{\bg{gray}{\translate{Ex}{Bsp}\usenumberArabic{example}:} \textit{(#1)}} -\newcommand{\compactdef}[1]{\bg{blue}{D\usenumberArabic{definition}:} \textit{(#1)}} -\newcommand{\compactformula}[1]{\bg{red}{F\usenumberArabic{formula}:} \textit{(#1)}} -\newcommand{\compactlemma}[1]{\bg{Aquamarine}{L\usenumberArabic{lemma}:} \textit{(#1)}} -\newcommand{\compacttheorem}[1]{\bg{ForestGreen}{\translate{T}{\StrMid{\theoremde}{1}{1}}\usenumberArabic{theorem}:} \textit{(#1)}} -\newcommand{\compactaxiom}[1]{\bg{JungleGreen}{A\usenumberArabic{axiom}:} \textit{(#1)}} -\newcommand{\compactcorollary}[1]{\bg{teal}{\translate{C}{K}\usenumberArabic{corollary}:} \textit{(#1)}} -\newcommand{\compactfact}[1]{\bg{SeaGreen}{F\usenumberArabic{fact}:} \textit{(#1)}} -\newcommand{\compactproposition}[1]{\bg{Cyan}{P\usenumberArabic{proposition}:} \textit{(#1)}} -\newcommand{\compactremark}[1]{\bg{green}{\tr{R}{B}\usenumberArabic{remark}:} \textit{(#1)}} -\newcommand{\compactproof}[1]{\bg{magenta}{\translate{Proof}{Beweis}: \textit{(#1)}}} diff --git a/src/style/counters/core.sty b/src/style/counters/core.sty deleted file mode 100644 index 0799334..0000000 --- a/src/style/counters/core.sty +++ /dev/null @@ -1,189 +0,0 @@ -\RequirePackage{etoolbox} -% tcolorbox and other stylistic elements (i.e. inline versions of them) that have counters -\newcounter{lemmanone} -\newcounter{definitionnone} -\newcounter{corollarynone} -\newcounter{theoremnone} -\newcounter{axiomnone} -\newcounter{examplenone} -\newcounter{factnone} -\newcounter{propositionnone} -\newcounter{formulanone} -\newcounter{remarknone} -\newcounter{allnone} - -\newcounter{lemmasection}[section] -\newcounter{definitionsection}[section] -\newcounter{corollarysection}[section] -\newcounter{theoremsection}[section] -\newcounter{axiomsection}[section] -\newcounter{examplesection}[section] -\newcounter{factsection}[section] -\newcounter{propositionsection}[section] -\newcounter{formulasection}[section] -\newcounter{remarksection}[section] -\newcounter{allsection}[section] - -\newcounter{lemmasubsection}[subsection] -\newcounter{definitionsubsection}[subsection] -\newcounter{corollarysubsection}[subsection] -\newcounter{theoremsubsection}[subsection] -\newcounter{axiomsubsection}[subsection] -\newcounter{examplesubsection}[subsection] -\newcounter{factsubsection}[subsection] -\newcounter{propositionsubsection}[subsection] -\newcounter{formulasubsection}[subsection] -\newcounter{remarksubsection}[subsection] -\newcounter{allsubsection}[subsection] - -\newcounter{lemmasubsubsection}[subsubsection] -\newcounter{definitionsubsubsection}[subsubsection] -\newcounter{corollarysubsubsection}[subsubsection] -\newcounter{theoremsubsubsection}[subsubsection] -\newcounter{axiomsubsubsection}[subsubsection] -\newcounter{examplesubsubsection}[subsubsection] -\newcounter{factsubsubsection}[subsubsection] -\newcounter{propositionsubsubsection}[subsubsection] -\newcounter{formulasubsubsection}[subsubsection] -\newcounter{remarksubsubsection}[subsubsection] -\newcounter{allsubsubsection}[subsubsection] - -\newcounter{lemmaparagraph}[paragraph] -\newcounter{definitionparagraph}[paragraph] -\newcounter{corollaryparagraph}[paragraph] -\newcounter{theoremparagraph}[paragraph] -\newcounter{axiomparagraph}[paragraph] -\newcounter{exampleparagraph}[paragraph] -\newcounter{factparagraph}[paragraph] -\newcounter{propositionparagraph}[paragraph] -\newcounter{formulaparagraph}[paragraph] -\newcounter{remarkparagraph}[paragraph] -\newcounter{allparagraph}[paragraph] - -% ── Set the current number of a label ─────────────────────────────── -\newcommand{\setLabelNumber}[2]{% - \setcounter{#1none}{#2}% - \addtocounter{#1none}{-1}% - \setcounter{#1section}{#2}% - \addtocounter{#1section}{-1}% - \setcounter{#1subsection}{#2}% - \addtocounter{#1subsection}{-1}% - \setcounter{#1subsubsection}{#2}% - \addtocounter{#1subsubsection}{-1}% - \setcounter{#1paragraph}{#2}% - \addtocounter{#1paragraph}{-1}% -} - -\newcommand{\stepLabelNumber}[1]{% - \stepcounter{#1none}% - \stepcounter{#1section}% - \stepcounter{#1subsection}% - \stepcounter{#1subsubsection}% - \stepcounter{#1paragraph}% -} - -% ┌ ┐ -% │ Counter numbering │ -% └ ┘ -\newcommand{\preTableAndFigHook}[1]{% - \ifnum\value{numberingConfig}>1% - \ifnum\value{numberSubsections}=1% - \stepcounter{allss}% - \else - \ifnum\value{numberSubsections}=2% - \stepcounter{allsss}% - \else% - \stepcounter{all}% - \fi - \fi - \fi -} -\AtBeginEnvironment{table}{\preTableAndFigHook{table}} -\AtBeginEnvironment{figure}{\preTableAndFigHook{figure}} - -\newcommand{\applyTableAndFigureNumbering}{ - % Tables & Figures - \ifnum\value{numberingConfig}=0 - \renewcommand{\thetable}{\arabic{table}} - \renewcommand{\thefigure}{\arabic{figure}} - \else - \ifnum\value{numberingConfig}=1 - \renewcommand{\thetable}{\sectionNumbering.\arabic{table}} - \renewcommand{\thefigure}{\sectionNumbering.\arabic{figure}} - \else - \ifnum\value{numberSubsections}=1 - \renewcommand{\thetable}{\sectionNumbering.\arabic{allss}} - \renewcommand{\thefigure}{\sectionNumbering.\arabic{allss}} - \else - \ifnum\value{numberSubsections}=2 - \renewcommand{\thetable}{\refstepcounter{allsss}\sectionNumbering.\arabic{allsss}} - \renewcommand{\thefigure}{\sectionNumbering.\arabic{allsss}} - \else - \renewcommand{\thetable}{\sectionNumbering.\arabic{all}} - \renewcommand{\thefigure}{\sectionNumbering.\arabic{all}} - \fi - \fi - \fi - \fi -} - -\newcommand{\setSubsectionNumbering}[1]{ - \setcounter{numberSubsections}{#1} - \applySubsectionNumbering -} - -\newcommand{\applySubsectionNumbering}{ - \ifnum\value{numberSubsections}=1 - \renewcommand{\sectionNumbering}{\thesubsection} - \renewcommand{\suffix}{ss} - \typeout{Numbering as section.subsection.number} - \else - \ifnum\value{numberSubsections}=2 - \renewcommand{\sectionNumbering}{\thesubsubsection} - \renewcommand{\suffix}{sss} - \typeout{Numbering as section.subsection.subsubsection.number} - \else - \renewcommand{\sectionNumbering}{\thesection} - \renewcommand{\suffix}{} - \typeout{Numbering as section.number} - \fi - \fi - \applyTableAndFigureNumbering - - \renewcommand{\thelemma}{\sectionNumbering.\arabic{lemma}} - \renewcommand{\thedefinition}{\sectionNumbering.\arabic{definition}} - \renewcommand{\thecorollary}{\sectionNumbering.\arabic{corollary}} - \renewcommand{\thetheorem}{\sectionNumbering.\arabic{theorem}} - \renewcommand{\theaxiom}{\sectionNumbering.\arabic{axiom}} - \renewcommand{\theexample}{\sectionNumbering.\arabic{example}} - \renewcommand{\thefact}{\sectionNumbering.\arabic{fact}} - \renewcommand{\theproposition}{\sectionNumbering.\arabic{proposition}} - \renewcommand{\theformula}{\sectionNumbering.\arabic{formula}} - \renewcommand{\theremark}{\sectionNumbering.\arabic{remark}} - \renewcommand{\theall}{\sectionNumbering.\arabic{all}} - - \renewcommand{\thelemmass}{\sectionNumbering.\arabic{lemmass}} - \renewcommand{\thedefinitionss}{\sectionNumbering.\arabic{definitionss}} - \renewcommand{\thecorollaryss}{\sectionNumbering.\arabic{corollaryss}} - \renewcommand{\thetheoremss}{\sectionNumbering.\arabic{theoremss}} - \renewcommand{\theaxiomss}{\sectionNumbering.\arabic{axiomss}} - \renewcommand{\theexampless}{\sectionNumbering.\arabic{exampless}} - \renewcommand{\thefactss}{\sectionNumbering.\arabic{factss}} - \renewcommand{\thepropositionss}{\sectionNumbering.\arabic{propositionss}} - \renewcommand{\theformulass}{\sectionNumbering.\arabic{formulass}} - \renewcommand{\theremarkss}{\sectionNumbering.\arabic{remarkss}} - \renewcommand{\theallss}{\sectionNumbering.\arabic{allss}} - - \renewcommand{\thelemmasss}{\sectionNumbering.\arabic{lemmasss}} - \renewcommand{\thedefinitionsss}{\sectionNumbering.\arabic{definitionsss}} - \renewcommand{\thecorollarysss}{\sectionNumbering.\arabic{corollarysss}} - \renewcommand{\thetheoremsss}{\sectionNumbering.\arabic{theoremsss}} - \renewcommand{\theaxiomsss}{\sectionNumbering.\arabic{axiomsss}} - \renewcommand{\theexamplesss}{\sectionNumbering.\arabic{examplesss}} - \renewcommand{\thefactsss}{\sectionNumbering.\arabic{factsss}} - \renewcommand{\thepropositionsss}{\sectionNumbering.\arabic{propositionsss}} - \renewcommand{\theformulasss}{\sectionNumbering.\arabic{formulasss}} - \renewcommand{\theremarksss}{\sectionNumbering.\arabic{remarksss}} - \renewcommand{\theallsss}{\sectionNumbering.\arabic{allsss}} -} -\applySubsectionNumbering diff --git a/src/style/counters/label.sty b/src/style/counters/label.sty deleted file mode 100644 index 0c76499..0000000 --- a/src/style/counters/label.sty +++ /dev/null @@ -1,33 +0,0 @@ -\newcommand{\printNumberingConfigForDescriptor}[2]{\csname #1numbering\endcsname} - -\newcommand{\printLabelWithNumbering}[1]{% - \ifthenelse{\equal{\subsectionnumbering}{none}}{% - #1% - }{% - \ifthenelse{\equal{\subsectionnumbering}{section}}{% - \thesection.#1% - }{% - \ifthenelse{\equal{\subsectionnumbering}{subsection}}{% - \thesection.\thesubsection.#1% - }{% - \ifthenelse{\equal{\subsectionnumbering}{subsubsection}}{% - \thesection.\thesubsection.\thesubsubsection#1% - }{% - \ifthenelse{\equal{\subsectionnumbering}{paragraph}}{% - \thesection.\thesubsection.\thesubsubsection.\theparagraph#1% - }{% - \PackageError{Subsection numbering configuration invalid. Can be one of [none, section, subsection, subsubsection, paragraph], but you passed #1} - subsectionnumbering error - } - } - } - } - } -} - -\newcommand{\printVersionNumber}[1]{% - \ifthenelse{\equal{\numberingpreset}{combined}}{}{} -} - -\newcommand{\printCounter}[1]{\csname the#1\endcsname} -\newcommand{\renderLabel}[1]{} diff --git a/src/style/counters/reset.sty b/src/style/counters/reset.sty deleted file mode 100644 index b19d1f1..0000000 --- a/src/style/counters/reset.sty +++ /dev/null @@ -1,53 +0,0 @@ -% ──────────────────────────────────────────────────────────────────── -% ╭────────────────────────────────────────────────╮ -% │ Reset definition, lemma, etc counters, add a │ -% │ new page │ -% ╰────────────────────────────────────────────────╯ -\newcommand{\newsection}{ - \newpage - \newsectionNoPB -} - -% ── Reset definitions, lemma, etc counters, do not add new page ───── -\newcommand{\newsectionNoPB}{ - \setcounter{lemma}{0} - \setcounter{definition}{0} - \setcounter{corollary}{0} - \setcounter{theorem}{0} - \setcounter{axiom}{0} - \setcounter{example}{0} - \setcounter{fact}{0} - \setcounter{proposition}{0} - \setcounter{formula}{0} - \setcounter{remark}{0} - \setcounter{all}{0} - - \setcounter{lemmass}{0} - \setcounter{definitionss}{0} - \setcounter{corollaryss}{0} - \setcounter{theoremss}{0} - \setcounter{axiomss}{0} - \setcounter{exampless}{0} - \setcounter{factss}{0} - \setcounter{propositionss}{0} - \setcounter{formulass}{0} - \setcounter{remarkss}{0} - \setcounter{allss}{0} - - \setcounter{lemmasss}{0} - \setcounter{definitionsss}{0} - \setcounter{corollarysss}{0} - \setcounter{theoremsss}{0} - \setcounter{axiomsss}{0} - \setcounter{examplesss}{0} - \setcounter{factsss}{0} - \setcounter{propositionsss}{0} - \setcounter{formulasss}{0} - \setcounter{remarksss}{0} - \setcounter{allsss}{0} - - % Tables & Figures - \setcounter{table}{0} - \setcounter{figure}{0} -} -\newsectionNoPB % Initializes diff --git a/src/style/counters/style.sty b/src/style/counters/style.sty deleted file mode 100644 index ce0e08e..0000000 --- a/src/style/counters/style.sty +++ /dev/null @@ -1,104 +0,0 @@ -% ──────────────────────────────────────────────────────────────────── -% ╭────────────────────────────────────────────────╮ -% │ Tcolorboxes │ -% ╰────────────────────────────────────────────────╯ -% ──────────────────────────────────────────────────────────────────── - -% Definitions -\newtcolorbox{definition}[2][]{mainboxstyle,colback=blue!5!white,colframe=blue!75!black,colbacktitle=blue!75!black,title={\large #2},overlay={\node[overlaystyle,draw=blue!75!black,fill=blue!75!black] at (frame.north east) {\large Definition\usenumberArabic{definition}};},#1} - -% Theorems -\newtcolorbox{theorem}[2][]{mainboxstyle,colback=ForestGreen!5!white,colframe=ForestGreen!75!black,colbacktitle=ForestGreen!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=ForestGreen!75!black,fill=ForestGreen!75!black] at (frame.north east) {\large \translate{Theorem}{\theoremde}\usenumberArabic{theorem}};},#1} - -% Lemmas -\newtcolorbox{lemma}[2][]{mainboxstyle,colback=Aquamarine!5!white,colframe=Aquamarine!75!black,colbacktitle=Aquamarine!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=Aquamarine!75!black,fill=Aquamarine!75!black] at (frame.north east) {\large Lemma\usenumberArabic{lemma}};},#1} - -% Corollaries -\newtcolorbox{corollary}[2][]{mainboxstyle,colback=teal!5!white,colframe=teal!75!black,colbacktitle=teal!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=teal!75!black,fill=teal!75!black] at (frame.north east) {\large \translate{Corollary}{Korollar}\usenumberArabic{corollary}};},#1} - -% Axioms -\newtcolorbox{axiom}[2][]{mainboxstyle,colback=JungleGreen!5!white,colframe=JungleGreen!75!black,colbacktitle=JungleGreen!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=JungleGreen!75!black,fill=JungleGreen!75!black] at (frame.north east) {\large Axiom\usenumberArabic{axiom}};},#1} - -% Facts -\newtcolorbox{fact}[2][]{mainboxstyle,colback=SeaGreen!5!white,colframe=SeaGreen!75!black,colbacktitle=SeaGreen!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=SeaGreen!75!black,fill=SeaGreen!75!black] at (frame.north east) {\large \translate{Fact}{Fakt}\usenumberArabic{fact}};},#1} - -% Propositions -\newtcolorbox{proposition}[2][]{mainboxstyle,colback=Cyan!5!white,colframe=Cyan!75!black,colbacktitle=Cyan!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=Cyan!75!black,fill=Cyan!75!black] at (frame.north east) {\large Proposition\usenumberArabic{proposition}};},#1} - -% Examples -\newtcolorbox{example}[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{Example}{Beispiel}\usenumberArabic{example}};},#1} - -% Formula -\newtcolorbox{formula}[2][]{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 \translate{Formula}{Formel}\usenumberArabic{formula}};},#1} - -% Remark -\newtcolorbox{remark}[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{Remark}{Bemerkung} \usenumberArabic{remark}};},#1} - - -% ──────────────────────────────────────────────────────────────────── -% ╭────────────────────────────────────────────────╮ -% │ Inline environments │ -% ╰────────────────────────────────────────────────╯ -% ──────────────────────────────────────────────────────────────────── - - -% Inline environments (inline) -\newcommand{\inlineex}{\bg{gray}{\translate{Example}{Beispiel}\usenumberArabic{example}:}} -\newcommand{\inlinedef}{\bg{blue}{Definition\usenumberArabic{definition}:}} -\newcommand{\inlineformula}{\bg{red}{\translate{Formula}{Formel}\usenumberArabic{formula}:}} -\newcommand{\inlinelemma}{\bg{Aquamarine}{Lemma\usenumberArabic{lemma}:}} -\newcommand{\inlinetheorem}{\bg{ForestGreen}{\translate{Theorem}{\theoremde}\usenumberArabic{theorem}:}} -\newcommand{\inlineaxiom}{\bg{JungleGreen}{Axiom\usenumberArabic{axiom}:}} -\newcommand{\inlinecorollary}{\bg{teal}{\translate{Corollary}{Korollar}\usenumberArabic{corollary}:}} -\newcommand{\inlinefact}{\bg{SeaGreen}{\translate{Fact}{Fakt}\usenumberArabic{fact}:}} -\newcommand{\inlineproposition}{\bg{Cyan}{Proposition\usenumberArabic{proposition}:}} -\newcommand{\inlineremark}{\bg{green}{\translate{Remark}{Bemerkung}\usenumberArabic{remark}:}} -\newcommand{\inlineproof}{\bg{magenta}{\translate{Proof}{Beweis}:}} - -% Enhanced inline environments -\newcommand{\fancyex}[1]{\bg{gray}{\translate{Example}{Beispiel}\usenumberArabic{example}:} \textit{(#1)}} -\newcommand{\fancydef}[1]{\bg{blue}{Definition\usenumberArabic{definition}:} \textit{(#1)}} -\newcommand{\fancyformula}[1]{\bg{red}{\translate{Formula}{Formel}\usenumberArabic{formula}:} \textit{(#1)}} -\newcommand{\fancylemma}[1]{\bg{Aquamarine}{Lemma\usenumberArabic{lemma}:} \textit{(#1)}} -\newcommand{\fancytheorem}[1]{\bg{ForestGreen}{\translate{Theorem}{\theoremde}\usenumberArabic{theorem}:} \textit{(#1)}} -\newcommand{\fancyaxiom}[1]{\bg{JungleGreen}{Axiom\usenumberArabic{axiom}:} \textit{(#1)}} -\newcommand{\fancycorollary}[1]{\bg{teal}{\translate{Corollary}{Korollar}\usenumberArabic{corollary}:} \textit{(#1)}} -\newcommand{\fancyfact}[1]{\bg{SeaGreen}{\translate{Fact}{Fakt}\usenumberArabic{fact}:} \textit{(#1)}} -\newcommand{\fancyproposition}[1]{\bg{Cyan}{Proposition\usenumberArabic{proposition}:} \textit{(#1)}} -\newcommand{\fancyremark}[1]{\bg{green}{\translate{Remark}{Bemerkung}\usenumberArabic{remark}:} \textit{(#1)}} -\newcommand{\fancyproof}[1]{\bg{magenta}{\translate{Proof}{Beweis}: \textit{(#1)}}} - -% short environments (abbreviated) -\newcommand{\shortex}{\bg{gray}{\translate{Ex}{Bsp}\usenumberArabic{example}:}} -\newcommand{\shortdef}{\bg{blue}{D\usenumberArabic{definition}:}} -\newcommand{\short}{\bg{red}{F\usenumberArabic{formula}:}} -\newcommand{\shortlemma}{\bg{Aquamarine}{L\usenumberArabic{lemma}:}} -\newcommand{\shorttheorem}{\bg{ForestGreen}{\translate{T}{\StrMid{\theoremde}{1}{1}}\usenumberArabic{theorem}:}} -\newcommand{\shortaxiom}{\bg{JungleGreen}{A\usenumberArabic{axiom}:}} -\newcommand{\shortcorollary}{\bg{teal}{\translate{C}{K}\usenumberArabic{corollary}:}} -\newcommand{\shortfact}{\bg{SeaGreen}{F\usenumberArabic{fact}:}} -\newcommand{\shortproposition}{\bg{Cyan}{P\usenumberArabic{proposition}:}} -\newcommand{\shortremark}{\bg{green}{\tr{R}{B}\usenumberArabic{remark}:}} -\newcommand{\shortproof}{\bg{magenta}{\translate{Proof}{Beweis}:}} - -% Enhanced short environments (abbreviated) -\newcommand{\compactex}[1]{\bg{gray}{\translate{Ex}{Bsp}\usenumberArabic{example}:} \textit{(#1)}} -\newcommand{\compactdef}[1]{\bg{blue}{D\usenumberArabic{definition}:} \textit{(#1)}} -\newcommand{\compactformula}[1]{\bg{red}{F\usenumberArabic{formula}:} \textit{(#1)}} -\newcommand{\compactlemma}[1]{\bg{Aquamarine}{L\usenumberArabic{lemma}:} \textit{(#1)}} -\newcommand{\compacttheorem}[1]{\bg{ForestGreen}{\translate{T}{\StrMid{\theoremde}{1}{1}}\usenumberArabic{theorem}:} \textit{(#1)}} -\newcommand{\compactaxiom}[1]{\bg{JungleGreen}{A\usenumberArabic{axiom}:} \textit{(#1)}} -\newcommand{\compactcorollary}[1]{\bg{teal}{\translate{C}{K}\usenumberArabic{corollary}:} \textit{(#1)}} -\newcommand{\compactfact}[1]{\bg{SeaGreen}{F\usenumberArabic{fact}:} \textit{(#1)}} -\newcommand{\compactproposition}[1]{\bg{Cyan}{P\usenumberArabic{proposition}:} \textit{(#1)}} -\newcommand{\compactremark}[1]{\bg{green}{\tr{R}{B}\usenumberArabic{remark}:} \textit{(#1)}} -\newcommand{\compactproof}[1]{\bg{magenta}{\translate{Proof}{Beweis}: \textit{(#1)}}} diff --git a/uninstall.sh b/uninstall.sh new file mode 100644 index 0000000..aa9f02f --- /dev/null +++ b/uninstall.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +if [[ -z "${TEXMFHOME+x}" ]]; then + export TEXMFHOME=~/texmf/ +fi + +echo "Removing helper files" +rm -rf $TEXMFHOME/tex/latex/janishutz-helpers +sudo rm -rf /usr/share/texmf/tex/latex/janishutz-helpers/ + +echo "Updating file database" +sudo texhash From 5fb9574af58f7f2add68a560ed6a418fb2a074aa Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Thu, 19 Feb 2026 17:04:45 +0100 Subject: [PATCH 06/32] Add compile to tex file --- build.sh | 4 + build/build.py | 23 +- janishutz-helpers.tex | 1078 +++++++++++++++++++++++++++++++++++++++++ lang-de.tex | 2 + 4 files changed, 1095 insertions(+), 12 deletions(-) create mode 100755 build.sh create mode 100644 janishutz-helpers.tex create mode 100644 lang-de.tex diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..2da00a4 --- /dev/null +++ b/build.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +cd build/ +python build.py diff --git a/build/build.py b/build/build.py index 49bb5e1..520a60f 100644 --- a/build/build.py +++ b/build/build.py @@ -27,22 +27,21 @@ def load_all_files_of_array(dirname: str, files: List[str]): return data -output = load_all_files_of_array("../src/", ["header.sty"]) -output += f"\\ProvidesPackage{{janishutz-helpers}}[{datetime.datetime.now().date().isoformat()} v{version}]\n\n" -output += load_all_files_of_array("../src/", ["core.sty"]) +output = load_all_files_of_array("../src/", ["header.sty", "core.sty"]) output += load_all_files_of_array("../src/config/", os.listdir("../src/config/")) -output += load_all_files_of_array("../src/core/", ["translation.sty"]) -output += load_all_files_of_array("../src/", ["opts.sty", "style.sty"]) -# output += load_all_files_of_array("../src/core/", os.listdir("../src/core/")) -# output += load_all_files_of_array("../src/style/", os.listdir("../src/style/")) +output += load_all_files_of_array("../src/", ["style.sty"]) +output += load_all_files_of_array("../src/core/", os.listdir("../src/core/")) +output += load_all_files_of_array("../src/style/", os.listdir("../src/style/")) -# l = labels.generate_labels() -# output += l[0] + "\n\n" -# output += l[1] +l = labels.generate_labels() +output += l[0] + "\n\n" +output += l[1] + +with open("../janishutz-helpers.tex", "w") as file: + file.write(output) with open("../janishutz-helpers.sty", "w") as file: file.write(output) -print("==> Built successfully. Output to project-root/janishutz-helpers.sty\n") -print("==> ") +print("==> Built successfully. Output to project-root/janishutz-helpers.tex\n") diff --git a/janishutz-helpers.tex b/janishutz-helpers.tex new file mode 100644 index 0000000..61bafc6 --- /dev/null +++ b/janishutz-helpers.tex @@ -0,0 +1,1078 @@ +%% +%% Copyright (C) 2026 Janis Hutz +%% +%% This file may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either +%% version 1.3 of this license or (at your option) any later +%% version. The latest version of this license is in: +%% http://www.latex-project.org/lppl.txt +%% and version 1.3c or later is part of all distributions of +%% LaTeX version 2008-05-04 or later. + + +% Package imports +\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} +\RequirePackage{xstring} +\RequirePackage{etoolbox} + +\newcounter{descriptorShadeStrength} +\newcounter{shadeStrength} +\newcommand{\currentLanguage}{en} + +\setcounter{secnumdepth}{4} + + +% ┌ ┐ +% │ Naming │ +% └ ┘ +% Here you may specify how each descriptor is named +\newcommand{\definitionNamingEN}{Definition} +\newcommand{\theoremNamingEN}{Theorem} +\newcommand{\lemmaNamingEN}{Lemma} +\newcommand{\corollaryNamingEN}{Corollary} +\newcommand{\axiomNamingEN}{Axiom} +\newcommand{\factNamingEN}{Fact} +\newcommand{\propositionNamingEN}{Proposition} +\newcommand{\exampleNamingEN}{Example} +\newcommand{\formulaNamingEN}{Formula} +\newcommand{\remarkNamingEN}{Remark} +\newcommand{\proofNamingEN}{Proof} +\newcommand{\intuitionNamingEN}{Intuition} +\newcommand{\termNamingEN}{Term} +\newcommand{\notationNamingEN}{Notation} +\newcommand{\taskNamingEN}{Task} +\newcommand{\usageNamingEN}{Usage} +\newcommand{\recallNamingEN}{Recall} +\newcommand{\propertiesNamingEN}{Properties} + +\newcommand{\definitionNamingDE}{Definition} +\newcommand{\theoremNamingDE}{Theorem} +\newcommand{\lemmaNamingDE}{Lemma} +\newcommand{\corollaryNamingDE}{Korollar} +\newcommand{\axiomNamingDE}{Axiom} +\newcommand{\factNamingDE}{Fakt} +\newcommand{\propositionNamingDE}{Satz} +\newcommand{\exampleNamingDE}{Beispiel} +\newcommand{\formulaNamingDE}{Formel} +\newcommand{\remarkNamingDE}{Bemerkung} +\newcommand{\proofNamingDE}{Beweis} +\newcommand{\intuitionNamingDE}{Intuition} +\newcommand{\termNamingDE}{Begriff} +\newcommand{\notationNamingDE}{Notation} +\newcommand{\taskNamingDE}{Aufgabe} +\newcommand{\usageNamingDE}{Nutzung} +\newcommand{\recallNamingDE}{Repetition} +\newcommand{\propertiesNamingDE}{Eigenschaften} + + +% ┌ ┐ +% │ Colours │ +% └ ┘ +% 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} + +% You may also use \definecolor{}{rgb}{r, g, b} to define a fully custom color +% see https://www.overleaf.com/learn/latex/Using_colors_in_LaTeX#Creating_your_own_colors for more information +\colorlet{definitioncolor}{blue} +\colorlet{theoremcolor}{ForestGreen} +\colorlet{lemmacolor}{Aquamarine} +\colorlet{corollarycolor}{teal} +\colorlet{axiomcolor}{JungleGreen} +\colorlet{factcolor}{SeaGreen} +\colorlet{propositioncolor}{Cyan} +\colorlet{examplecolor}{gray} +\colorlet{formulacolor}{red} +\colorlet{remarkcolor}{green} +\colorlet{proofcolor}{magenta} +\colorlet{intuitioncolor}{Emerald} +\colorlet{termcolor}{orange} +\colorlet{notationcolor}{Peach} +\colorlet{taskcolor}{gray} +\colorlet{usagecolor}{LimeGreen} +\colorlet{recallcolor}{yellow} +\colorlet{propertiescolor}{purple} + + +% ┌ ┐ +% │ Numbering │ +% └ ┘ +% Set a preset, can be combined, separate or off. +% If set to custom, all type specific commands need to be set below. +\newcommand{\numberingpreset}{combined} + +% Specify how elements are to be numbered. Can be (X is the current number of the element): +% - none (X) +% - section (section.X) +% - subsection (section.subsection.X) +% - subsubsection (section.subsection.subsubsection.X) +% - paragraph (section.subsection.subsubsection.paragraph.X) +\newcommand{\subsectionnumbering}{subsection} + + +% Set for a specific type. Can each be combined, separate, default or off: +% If set to anything but 'default', it will override the overarching style +% set by \numberingpreset +\newcommand{\definitionnumbering}{default} +\newcommand{\theoremnumbering}{default} +\newcommand{\lemmanumbering}{default} +\newcommand{\corollarynumbering}{default} +\newcommand{\axiomnumbering}{default} +\newcommand{\factnumbering}{default} +\newcommand{\propositionnumbering}{default} +\newcommand{\examplenumbering}{default} +\newcommand{\formulanumbering}{default} +\newcommand{\remarknumbering}{default} +\newcommand{\proofnumbering}{default} +\newcommand{\intuitionnumbering}{default} +\newcommand{\termnumbering}{default} +\newcommand{\notationnumbering}{default} +\newcommand{\tasknumbering}{default} +\newcommand{\usagenumbering}{default} +\newcommand{\recallnumbering}{default} +\newcommand{\propertiesnumbering}{default} + + +% ┌ ┐ +% │ General config │ +% └ ┘ +% 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} + +% Set the default language +\renewcommand{\currentLanguage}{en} + + +% ┌ ┐ +% │ Rendering │ +% └ ┘ +% Short descriptors are generated from the naming defined in naming.sty +% You may here configure how they are generated. #1 is the full name. +\newcommand{\shortDescriptorNameTemplate}[1]{\StrBefore[1]{#1}} + +% Decide if the numbering should show a space preceding it. +% \newcommand{\useSpaceBeforeNumbering}{true} +% TODO: Remove above if works without + +% Specify how the inline and short descriptors (e.g. Lemma, etc) are rendered. +% - #1 is the name of the descriptor +% - #2 is the number (correctly rendered according to settings and preceded with space if not disabled) +% - #3 is the name passed (non-empty asserted) +\newcommand{\shortDescriptorTemplate}[4]{\bg{#1color}{\shortDescriptorNameTemplate{#1}#2} \textit{(#3)}\ } +\newcommand{\inlineDescriptorTemplate}[4]{\bg{#1color}{#1#2}: \textit{(#3)}\ } + +% These are used if no name is provided and argument #4 from above is the missing argument +\newcommand{\anonymousShortDescriptorTemplate}[3]{\bg{#1color}{\shortDescriptorNameTemplate{#1}#2}\ } +\newcommand{\anonymousInlineDescriptorTemplate}[3]{\bg{#3color}{#1#2}\ } + +% background command config (draws a small box around the content) +\newcommand{\backgroundPadding}{2pt} +\newcommand{\backgroundRounding}{0.1pt} + + +% ┌ ┐ +% │ STYLE: Globals │ +% └ ┘ +% Global style configs for tcolorbox (to reduce bloat) +\AtBeginDocument{ + \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 + } + } +} + +% ── Fonts ─────────────────────────────────────────────────────────── +\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} + } + } +} + +% ── Small common style elements ───────────────────────────────────── +% Spacing (vertical) +% TODO: Rework +\newcommand{\hrmvspace}{\vspace{-0.25pc}} +\newcommand{\rmvspace}{\vspace{-0.5pc}} +\newcommand{\mrmvspace}{\vspace{-0.75pc}} +\newcommand{\drmvspace}{\vspace{-1pc}} +\newcommand{\dhrmvspace}{\vspace{-1.25pc}} +\newcommand{\dnrmvspace}{\vspace{-1.5pc}} +\newcommand{\dmrmvspace}{\vspace{-1.75pc}} +\newcommand{\ddrmvspace}{\vspace{-2pc}} + +% Spacing (horizontal) +\newcommand{\smallhspace}{\hspace{2mm}} +\newcommand{\mediumhspace}{\hspace{5mm}} +\newcommand{\largehspace}{\hspace{1cm}} + +% other elements +\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=\backgroundPadding, + arc=\backgroundRounding, + left=0pt, + right=0pt, + top=0pt, + bottom=0pt, + 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}} + +% 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 \tr{Contents}{Inhaltsverzeichnis}}, + fonttitle=\bfseries, + breakable + ] + \hspace{1cm} + \tableofcontents + \end{tcolorbox} +} + + +% ┌ ┐ +% │ Index │ +% └ ┘ + +% For using index package +\newcommand{\prepareIndex}{ + \RequirePackage[T1]{fontenc} + \RequirePackage{imakeidx} + \makeindex +} + +\newcommand{\addIndexBold}[1]{\textbf{\index{\MakeLowercase{#1}} #1}} +\newcommand{\addIndexItalic}[1]{\textit{\index{\MakeLowercase{#1}} #1}} +\newcommand{\addIndex}[1]{\index{\MakeLowercase{#1}} #1} + + + +% ┌ ┐ +% │ Setup │ +% └ ┘ +% 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}} + } +} + +% 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} +} + + +% TODO: Use landscape and columns for new version +% 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} +} + + +% ┌ ┐ +% │ Document start │ +% └ ┘ +% Start document command (required) +\newcommand{\startDocument}{ + \maketitle + \pagestyle{fancy} + \thispagestyle{fancy} +} + + +% ┌ ┐ +% │ Translation │ +% └ ┘ +\newcommand{\translate}[2]{% + \ifthenelse{\equal{\currentLanguage}{en}}{#1}{#2} +} +\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 }} + + +% ┌ ┐ +% │ Math │ +% └ ┘ + +% BB shortcuts (for number spaces, etc) +\newcommand{\A}{\mathbb{A}} +\newcommand{\B}{\mathbb{B}} +\newcommand{\C}{\mathbb{C}} +\newcommand{\D}{\mathbb{D}} +\newcommand{\E}{\mathbb{E}} +\newcommand{\F}{\mathbb{F}} +\newcommand{\G}{\mathbb{G}} +\renewcommand{\H}{\mathbb{H}} +\newcommand{\I}{\mathbb{I}} +\newcommand{\J}{\mathbb{J}} +\newcommand{\K}{\mathbb{K}} +\renewcommand{\L}{\mathbb{L}} +\newcommand{\M}{\mathbb{M}} +\newcommand{\N}{\mathbb{N}} +\renewcommand{\O}{\mathbb{O}} +\renewcommand{\P}{\mathbb{P}} +\newcommand{\Q}{\mathbb{Q}} +\newcommand{\R}{\mathbb{R}} +\renewcommand{\S}{\mathbb{S}} +\newcommand{\T}{\mathbb{T}} +\newcommand{\U}{\mathbb{U}} +\newcommand{\V}{\mathbb{V}} +\newcommand{\W}{\mathbb{W}} +\newcommand{\X}{\mathbb{X}} +\newcommand{\Y}{\mathbb{Y}} +\newcommand{\Z}{\mathbb{Z}} + +% Caligraphic +\newcommand{\cA}{\mathcal{A}} +\newcommand{\cB}{\mathcal{B}} +\newcommand{\cC}{\mathcal{C}} +\newcommand{\cD}{\mathcal{D}} +\newcommand{\cE}{\mathcal{E}} +\newcommand{\cF}{\mathcal{F}} +\newcommand{\cG}{\mathcal{G}} +\newcommand{\cH}{\mathcal{H}} +\newcommand{\cI}{\mathcal{I}} +\newcommand{\cJ}{\mathcal{J}} +\newcommand{\cK}{\mathcal{K}} +\newcommand{\cL}{\mathcal{L}} +\newcommand{\cM}{\mathcal{M}} +\newcommand{\cN}{\mathcal{N}} +\newcommand{\cO}{\mathcal{O}} +\newcommand{\cP}{\mathcal{P}} +\newcommand{\cQ}{\mathcal{Q}} +\newcommand{\cR}{\mathcal{R}} +\newcommand{\cS}{\mathcal{S}} +\newcommand{\cT}{\mathcal{T}} +\newcommand{\cU}{\mathcal{U}} +\newcommand{\cV}{\mathcal{V}} +\newcommand{\cW}{\mathcal{W}} +\newcommand{\cX}{\mathcal{X}} +\newcommand{\cY}{\mathcal{Y}} +\newcommand{\cZ}{\mathcal{Z}} + +% other useful shortcuts +\newcommand{\elementstack}[2]{\genfrac{}{}{0pt}{}{#1}{#2}} +\newcommand{\8}{\infty} +\newcommand{\cond}{\text{cond}} +\newcommand{\argmin}[1]{\underset{#1}{\text{argmin}}} +\newcommand{\dx}{\text{ d}} +\newcommand{\floor}[1]{\left\lfloor #1 \right\rfloor} +\newcommand{\ceil}[1]{\left\lceil #1 \right\rceil} +\newcommand{\hastoeq}{\overset{!}{=}} +\newcommand{\Leftrightarrowequiv}{\overset{\cdot}{\Leftrightarrow}} +\newcommand{\Longleftrightarrowequiv}{\overset{\cdot}{\Longleftrightarrow}} +\newcommand{\Rightarrowequiv}{\overset{\cdot}{\Rightarrow}} +\newcommand{\Leftarrowequiv}{\overset{\cdot}{\Leftarrow}} +\newcommand{\defAs}{\overset{\text{def}}{=}} +\newcommand{\der}[1]{\frac{\mbox{d}}{\mbox{d}#1}} +\newcommand{\dern}[2]{\frac{\mbox{d}^{#2}}{\mbox{d}^{#2}#1}} +\newcommand{\parder}[1]{\frac{\partial}{\partial #1}} +\newcommand{\pardern}[2]{\frac{\partial^{#2}}{\partial^{#2} #1}} +\newcommand{\defEquiv}{\overset{\text{def}}{\Leftrightarrow}} +\newcommand{\defImplies}{\overset{\text{def}}{\Rightarrow}} +\newcommand{\divides}{\hspace{0.25em}|\hspace{0.25em}} +\newcommand{\lcm}{\text{lcm}} +\newcommand{\limit}[2]{\underset{#1 \rightarrow #2}{\lim}} +\newcommand{\seq}[1]{(#1_n)_{n \geq 1}} +\newcommand{\ser}[2]{\sum_{k = 1}^{#2} #1_k} +\newcommand{\limni}{\limit{n}{\infty}} +\newcommand{\limnz}{\limit{n}{0}} +\newcommand{\limxz}{\limit{x_0}{0}} +\newcommand{\limhz}{\limit{h}{0}} +\newcommand{\liminfni}{\liminf_{n \rightarrow \infty}} +\newcommand{\limsupni}{\limsup_{n \rightarrow \infty}} + +\DeclareMathOperator\arctanh{arctanh} +\DeclareMathOperator\arccosh{arccosh} +\DeclareMathOperator\arcsinh{arcsinh} + + +% ┌ ┐ +% │ Tables │ +% └ ┘ + +\RequirePackage{booktabs} +\RequirePackage{tabulary} + +% Create new table. #1 Layout, #2 title row +\newenvironment{tables}[2]{ + \begin{center} + \begin{tabular}{#1} + \toprule + #2 \\ + \midrule + }{ + \bottomrule + \end{tabular} + \end{center} +} + +% Create new table in table env. #1 layout, #2 title row, #3 caption +\newenvironment{fullTable}[3]{ + \edef\tableCaption{#3} + \begin{table}[h!] + \begin{tables}{#1}{#2} + }{ + \end{tables} + \caption{\tableCaption} + \end{table} +} + + + +% ░▒█▀▀▄░▄▀▀▄░█▀▄▀█░▄▀▀▄░█░▒█░▀█▀░█▀▀░█▀▀▄░░░▒█▀▀▀█░█▀▄░░▀░░█▀▀░█▀▀▄░█▀▄░█▀▀ +% ░▒█░░░░█░░█░█░▀░█░█▄▄█░█░▒█░░█░░█▀▀░█▄▄▀░░░░▀▀▀▄▄░█░░░░█▀░█▀▀░█░▒█░█░░░█▀▀ +% ░▒█▄▄▀░░▀▀░░▀░░▒▀░█░░░░░▀▀▀░░▀░░▀▀▀░▀░▀▀░░░▒█▄▄▄█░▀▀▀░▀▀▀░▀▀▀░▀░░▀░▀▀▀░▀▀▀ + +% Extra imports +\RequirePackage{stmaryrd} +\RequirePackage{algorithm} +\RequirePackage{algpseudocodex} +\RequirePackage{setspace} +\RequirePackage{verbatim} +\RequirePackage{turnstile} +\RequirePackage{forloop} + +\newcommand{\Indent}{\hspace{\algorithmicindent}} + +\newcommand{\tc}[1]{\tco{#1}} +\newcommand{\tct}[1]{\Theta\left(#1\right)} +\newcommand{\tco}[1]{\mathcal{O}\left(#1\right)} +\newcommand{\tcl}[1]{\Omega\left(#1\right)} +\newcommand{\wordbool}{(\Sigma_{\text{bool}})^*} +\newcommand{\words}[1]{(\Sigma_{\text{#1}})^*} +\newcommand{\word}{\Sigma^*} +\newcommand{\wordm}[1]{\Sigma_{\text{#1}}^*} +\newcommand{\alphabets}[1]{\Sigma_{\text{#1}}} +\newcommand{\alphabetbool}{\Sigma_{\text{bool}}} +\newcommand{\tR}{\text{R}} +\newcommand{\tC}{\text{C}} +\newcommand{\tN}{\text{N}} +\newcommand{\bigvdash}[2]{\sststile{#1}{#2}} +\newcommand{\class}{\text{\tr{Cl}{Kl}}} + + +% ┌ ┐ +% │ STYLE: Math │ +% └ ┘ + +% Add shortcuts to commonly used commands +\newcommand{\vect}[1]{\overrightarrow{#1}} +\renewcommand{\hat}[1]{\widehat{#1}} +\renewcommand{\tilde}[1]{\widetilde{#1}} +\newcommand{\proven}{$\hspace{17cm}\square$} + + +% ── Label generator ───────────────────────────────────────────────── +\newcommand{\printNumberingConfigForDescriptor}[1]{\csname #1numbering\endcsname} +\newcommand{\printCounter}[1]{\csname the#1\endcsname} + +\newcommand{\printLabel}[1]{% + \ifcsdef{#1numbering}{% Extra config present + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{ + \printCounter{#1\subsectionnumbering}% + }{ + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{separate}}{ + \printCounter{#1\subsectionnumbering}% + }{ + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{ + \printCounter{combined\subsectionnumbering}% + }{} + } + } + }{% + \labelPrintBackendRoutine{#1}% + } +} +\newcommand{\labelPrintBackendRoutine}[1]{ + \ifthenelse{\equal{\numberingpreset}{combined}}{ + \printCounter{combined\subsectionnumbering}% + }{ + \ifthenelse{\equal{\numberingpreset}{separate}}{ + \printCounter{#1\subsectionnumbering}% + }{} + } +} + +% Inline environments (inline) +\newcommand{\printTranslationOptionEN}[1]{\csname #1NamingEN\endcsname} +\newcommand{\printTranslationOptionDE}[1]{\csname #1NamingDE\endcsname} + +\newcommand{\inline}[2][__NONAME__]{% + \ifthenelse{\equal{__NONAME__}{#1}}{% + \anonymousInlineDescriptorTemplate{#2}{\printLabel{#2}}% + }{% + \inlineDescriptorTemplate{#2}{\printLabel{#2}}{#1}% + } +} + +\newcommand{\short}[2][__NONAME__]{% + \ifthenelse{\equal{__NONAME__}{#1}}{% + \anonymousShortDescriptorTemplate{#2}{\printLabel{#2}}% + }{% + \shortDescriptorTemplate{#2}{\printLabel{#2}}{#1}% + } +} + +% ── Set the current number of a label ─────────────────────────────── +\newcommand{\setLabelNumber}[2]{% + \setcounter{#1none}{#2}% + \addtocounter{#1none}{-1}% + \setcounter{#1section}{#2}% + \addtocounter{#1section}{-1}% + \setcounter{#1subsection}{#2}% + \addtocounter{#1subsection}{-1}% + \setcounter{#1subsubsection}{#2}% + \addtocounter{#1subsubsection}{-1}% + \setcounter{#1paragraph}{#2}% + \addtocounter{#1paragraph}{-1}% +} + +\newcommand{\stepLabelNumber}[1]{% + \stepcounter{#1none}% + \stepcounter{#1section}% + \stepcounter{#1subsection}% + \stepcounter{#1subsubsection}% + \stepcounter{#1paragraph}% +} + +% ┌ ┐ +% │ Counter numbering │ +% └ ┘ +% TODO: Update +\newcommand{\preTableAndFigHook}[1]{% + \ifnum\value{numberingConfig}>1% + \ifnum\value{numberSubsections}=1% + \stepcounter{allss}% + \else + \ifnum\value{numberSubsections}=2% + \stepcounter{allsss}% + \else% + \stepcounter{all}% + \fi + \fi + \fi + \renewcommand{\thetable}{\arabic{table}} + \renewcommand{\thefigure}{\arabic{figure}} +} +\AtBeginEnvironment{table}{\preTableAndFigHook{table}} +\AtBeginEnvironment{figure}{\preTableAndFigHook{figure}} + + +\newcommand{\newsection}{ + \newpage + \newsectionNoPB +} + + +% ┌ ┐ +% │ STYLE: Computer Science │ +% └ ┘ +\RequirePackage{forest} +\tikzset{algpxIndentLine/.style={draw=lightgray}} +\algrenewcommand{\alglinenumber}[1]{#1} + +\newenvironment{algo}[1]{ + \begin{algorithm} + \begin{spacing}{1.2} + \caption{\textsc{#1}} + \begin{algorithmic}[1] + }{ + \end{algorithmic} + \end{spacing} + \end{algorithm} +} + + +% ┌ ┐ +% │ STYLE: Common tcolorboxes │ +% └ ┘ +% TODO: Update colors + +\newtcolorbox{recall}[2][]{mainboxstyle,colback=recallcolor!5!white,colframe=recallcolor!75!black,colbacktitle=recallcolor!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=recallcolor!75!black,,fill=recallcolor!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} + + +\newcounter{definitionnone} +\newcounter{definitionsection}[section] +\renewcommand{\thedefinitionsection}{\thesection.\arabic{definitionsection}} +\newcounter{definitionsubsection}[subsection] +\renewcommand{\thedefinitionsubsection}{\thesection.\thesubsection.\arabic{definitionsubsection}} +\newcounter{definitionsubsubsection}[subsubsection] +\renewcommand{\thedefinitionsubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{definitionsubsubsection}} +\newcounter{definitionparagraph}[paragraph] +\renewcommand{\thedefinitionparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{definitionparagraph}} +\newtcolorbox{definition}[2][]{ + mainboxstyle, + colback=definitioncolor!5!white, + colframe=definitioncolor!75!black, + colbacktitle=definitioncolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=definitioncolor!75!black, + fill=definitioncolor!75!black + ] at (frame.north east) + { + \large \tr{\definitionNamingEN}{\definitionNamingDE}\printLabel{definition} + }; + }, #1 + } + +\newcounter{examplenone} +\newcounter{examplesection}[section] +\renewcommand{\theexamplesection}{\thesection.\arabic{examplesection}} +\newcounter{examplesubsection}[subsection] +\renewcommand{\theexamplesubsection}{\thesection.\thesubsection.\arabic{examplesubsection}} +\newcounter{examplesubsubsection}[subsubsection] +\renewcommand{\theexamplesubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{examplesubsubsection}} +\newcounter{exampleparagraph}[paragraph] +\renewcommand{\theexampleparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{exampleparagraph}} +\newtcolorbox{example}[2][]{ + mainboxstyle, + colback=examplecolor!5!white, + colframe=examplecolor!75!black, + colbacktitle=examplecolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=examplecolor!75!black, + fill=examplecolor!75!black + ] at (frame.north east) + { + \large \tr{\exampleNamingEN}{\exampleNamingDE}\printLabel{example} + }; + }, #1 + } + +\newcounter{theoremnone} +\newcounter{theoremsection}[section] +\renewcommand{\thetheoremsection}{\thesection.\arabic{theoremsection}} +\newcounter{theoremsubsection}[subsection] +\renewcommand{\thetheoremsubsection}{\thesection.\thesubsection.\arabic{theoremsubsection}} +\newcounter{theoremsubsubsection}[subsubsection] +\renewcommand{\thetheoremsubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{theoremsubsubsection}} +\newcounter{theoremparagraph}[paragraph] +\renewcommand{\thetheoremparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{theoremparagraph}} +\newtcolorbox{theorem}[2][]{ + mainboxstyle, + colback=theoremcolor!5!white, + colframe=theoremcolor!75!black, + colbacktitle=theoremcolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=theoremcolor!75!black, + fill=theoremcolor!75!black + ] at (frame.north east) + { + \large \tr{\theoremNamingEN}{\theoremNamingDE}\printLabel{theorem} + }; + }, #1 + } + +\newcounter{lemmanone} +\newcounter{lemmasection}[section] +\renewcommand{\thelemmasection}{\thesection.\arabic{lemmasection}} +\newcounter{lemmasubsection}[subsection] +\renewcommand{\thelemmasubsection}{\thesection.\thesubsection.\arabic{lemmasubsection}} +\newcounter{lemmasubsubsection}[subsubsection] +\renewcommand{\thelemmasubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{lemmasubsubsection}} +\newcounter{lemmaparagraph}[paragraph] +\renewcommand{\thelemmaparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{lemmaparagraph}} +\newtcolorbox{lemma}[2][]{ + mainboxstyle, + colback=lemmacolor!5!white, + colframe=lemmacolor!75!black, + colbacktitle=lemmacolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=lemmacolor!75!black, + fill=lemmacolor!75!black + ] at (frame.north east) + { + \large \tr{\lemmaNamingEN}{\lemmaNamingDE}\printLabel{lemma} + }; + }, #1 + } + +\newcounter{corollarynone} +\newcounter{corollarysection}[section] +\renewcommand{\thecorollarysection}{\thesection.\arabic{corollarysection}} +\newcounter{corollarysubsection}[subsection] +\renewcommand{\thecorollarysubsection}{\thesection.\thesubsection.\arabic{corollarysubsection}} +\newcounter{corollarysubsubsection}[subsubsection] +\renewcommand{\thecorollarysubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{corollarysubsubsection}} +\newcounter{corollaryparagraph}[paragraph] +\renewcommand{\thecorollaryparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{corollaryparagraph}} +\newtcolorbox{corollary}[2][]{ + mainboxstyle, + colback=corollarycolor!5!white, + colframe=corollarycolor!75!black, + colbacktitle=corollarycolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=corollarycolor!75!black, + fill=corollarycolor!75!black + ] at (frame.north east) + { + \large \tr{\corollaryNamingEN}{\corollaryNamingDE}\printLabel{corollary} + }; + }, #1 + } + +\newcounter{propositionnone} +\newcounter{propositionsection}[section] +\renewcommand{\thepropositionsection}{\thesection.\arabic{propositionsection}} +\newcounter{propositionsubsection}[subsection] +\renewcommand{\thepropositionsubsection}{\thesection.\thesubsection.\arabic{propositionsubsection}} +\newcounter{propositionsubsubsection}[subsubsection] +\renewcommand{\thepropositionsubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{propositionsubsubsection}} +\newcounter{propositionparagraph}[paragraph] +\renewcommand{\thepropositionparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{propositionparagraph}} +\newtcolorbox{proposition}[2][]{ + mainboxstyle, + colback=propositioncolor!5!white, + colframe=propositioncolor!75!black, + colbacktitle=propositioncolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=propositioncolor!75!black, + fill=propositioncolor!75!black + ] at (frame.north east) + { + \large \tr{\propositionNamingEN}{\propositionNamingDE}\printLabel{proposition} + }; + }, #1 + } + +\newcounter{factnone} +\newcounter{factsection}[section] +\renewcommand{\thefactsection}{\thesection.\arabic{factsection}} +\newcounter{factsubsection}[subsection] +\renewcommand{\thefactsubsection}{\thesection.\thesubsection.\arabic{factsubsection}} +\newcounter{factsubsubsection}[subsubsection] +\renewcommand{\thefactsubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{factsubsubsection}} +\newcounter{factparagraph}[paragraph] +\renewcommand{\thefactparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{factparagraph}} +\newtcolorbox{fact}[2][]{ + mainboxstyle, + colback=factcolor!5!white, + colframe=factcolor!75!black, + colbacktitle=factcolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=factcolor!75!black, + fill=factcolor!75!black + ] at (frame.north east) + { + \large \tr{\factNamingEN}{\factNamingDE}\printLabel{fact} + }; + }, #1 + } + +\newcounter{formulanone} +\newcounter{formulasection}[section] +\renewcommand{\theformulasection}{\thesection.\arabic{formulasection}} +\newcounter{formulasubsection}[subsection] +\renewcommand{\theformulasubsection}{\thesection.\thesubsection.\arabic{formulasubsection}} +\newcounter{formulasubsubsection}[subsubsection] +\renewcommand{\theformulasubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{formulasubsubsection}} +\newcounter{formulaparagraph}[paragraph] +\renewcommand{\theformulaparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{formulaparagraph}} +\newtcolorbox{formula}[2][]{ + mainboxstyle, + colback=formulacolor!5!white, + colframe=formulacolor!75!black, + colbacktitle=formulacolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=formulacolor!75!black, + fill=formulacolor!75!black + ] at (frame.north east) + { + \large \tr{\formulaNamingEN}{\formulaNamingDE}\printLabel{formula} + }; + }, #1 + } + +\newcounter{remarknone} +\newcounter{remarksection}[section] +\renewcommand{\theremarksection}{\thesection.\arabic{remarksection}} +\newcounter{remarksubsection}[subsection] +\renewcommand{\theremarksubsection}{\thesection.\thesubsection.\arabic{remarksubsection}} +\newcounter{remarksubsubsection}[subsubsection] +\renewcommand{\theremarksubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{remarksubsubsection}} +\newcounter{remarkparagraph}[paragraph] +\renewcommand{\theremarkparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{remarkparagraph}} +\newtcolorbox{remark}[2][]{ + mainboxstyle, + colback=remarkcolor!5!white, + colframe=remarkcolor!75!black, + colbacktitle=remarkcolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=remarkcolor!75!black, + fill=remarkcolor!75!black + ] at (frame.north east) + { + \large \tr{\remarkNamingEN}{\remarkNamingDE}\printLabel{remark} + }; + }, #1 + } + +\newcounter{combinenone} +\newcounter{combinesection}[section] +\renewcommand{\thecombinesection}{\thesection.\arabic{combinesection}} +\newcounter{combinesubsection}[subsection] +\renewcommand{\thecombinesubsection}{\thesection.\thesubsection.\arabic{combinesubsection}} +\newcounter{combinesubsubsection}[subsubsection] +\renewcommand{\thecombinesubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{combinesubsubsection}} +\newcounter{combineparagraph}[paragraph] +\renewcommand{\thecombineparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{combineparagraph}} + + +\newcommand{\newsectionNoPB}{ + \setcounter{definitionnone}{0} + \setcounter{definitionsection}{0} + \setcounter{definitionsubsection}{0} + \setcounter{definitionsubsubsection}{0} + \setcounter{definitionparagraph}{0} + + \setcounter{examplenone}{0} + \setcounter{examplesection}{0} + \setcounter{examplesubsection}{0} + \setcounter{examplesubsubsection}{0} + \setcounter{exampleparagraph}{0} + + \setcounter{theoremnone}{0} + \setcounter{theoremsection}{0} + \setcounter{theoremsubsection}{0} + \setcounter{theoremsubsubsection}{0} + \setcounter{theoremparagraph}{0} + + \setcounter{lemmanone}{0} + \setcounter{lemmasection}{0} + \setcounter{lemmasubsection}{0} + \setcounter{lemmasubsubsection}{0} + \setcounter{lemmaparagraph}{0} + + \setcounter{corollarynone}{0} + \setcounter{corollarysection}{0} + \setcounter{corollarysubsection}{0} + \setcounter{corollarysubsubsection}{0} + \setcounter{corollaryparagraph}{0} + + \setcounter{propositionnone}{0} + \setcounter{propositionsection}{0} + \setcounter{propositionsubsection}{0} + \setcounter{propositionsubsubsection}{0} + \setcounter{propositionparagraph}{0} + + \setcounter{factnone}{0} + \setcounter{factsection}{0} + \setcounter{factsubsection}{0} + \setcounter{factsubsubsection}{0} + \setcounter{factparagraph}{0} + + \setcounter{formulanone}{0} + \setcounter{formulasection}{0} + \setcounter{formulasubsection}{0} + \setcounter{formulasubsubsection}{0} + \setcounter{formulaparagraph}{0} + + \setcounter{remarknone}{0} + \setcounter{remarksection}{0} + \setcounter{remarksubsection}{0} + \setcounter{remarksubsubsection}{0} + \setcounter{remarkparagraph}{0} + + \setcounter{combinenone}{0} + \setcounter{combinesection}{0} + \setcounter{combinesubsection}{0} + \setcounter{combinesubsubsection}{0} + \setcounter{combineparagraph}{0} + + \setcounter{table}{0} + \setcounter{figure}{0} +} diff --git a/lang-de.tex b/lang-de.tex new file mode 100644 index 0000000..e653379 --- /dev/null +++ b/lang-de.tex @@ -0,0 +1,2 @@ +\usepackage[ngerman]{babel} +\setLang{de} From 36ced5e37a5e25080b146e800f65c348c8537925 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Thu, 19 Feb 2026 17:21:10 +0100 Subject: [PATCH 07/32] Some fixes --- build/build.py | 4 +- install.sh | 7 +- janishutz-helpers.sty | 787 ++++++++++++++++++++++++++++++++++++++++-- janishutz-helpers.tex | 530 ++++++++++++++-------------- uninstall.sh | 1 + 5 files changed, 1034 insertions(+), 295 deletions(-) mode change 100644 => 100755 uninstall.sh diff --git a/build/build.py b/build/build.py index 520a60f..5c4d544 100644 --- a/build/build.py +++ b/build/build.py @@ -27,7 +27,9 @@ def load_all_files_of_array(dirname: str, files: List[str]): return data -output = load_all_files_of_array("../src/", ["header.sty", "core.sty"]) +output = load_all_files_of_array("../src/", ["header.sty"]) +output += f"\\ProvidesPackage{{janishutz-helpers}}[{datetime.datetime.now().date().isoformat()} v{version}]\n\n" +output += load_all_files_of_array("../src/", ["core.sty"]) output += load_all_files_of_array("../src/config/", os.listdir("../src/config/")) output += load_all_files_of_array("../src/", ["style.sty"]) output += load_all_files_of_array("../src/core/", os.listdir("../src/core/")) diff --git a/install.sh b/install.sh index 747a778..294a8db 100755 --- a/install.sh +++ b/install.sh @@ -15,8 +15,11 @@ if [[ "$loc" == "l" ]]; then mkdir -p $TEXMFHOME/tex/latex/janishutz-helpers cp ./janishutz-helpers.sty $TEXMFHOME/tex/latex/janishutz-helpers/ else - sudo mkdir -p /usr/share/texmf/tex/latex/janishutz-helpers - sudo cp ./janishutz-helpers.sty /usr/share/texmf/tex/latex/janishutz-helpers/ + # sudo mkdir -p /usr/share/texmf/tex/latex/janishutz-helpers + # sudo cp ./janishutz-helpers.sty /usr/share/texmf/tex/latex/janishutz-helpers/ + sudo mkdir -p /usr/share/texmf-dist/tex/latex/janishutz-helpers/ + sudo cp ./janishutz-helpers.sty /usr/share/texmf-dist/tex/latex/janishutz-helpers/ + sudo chmod -R 777 /usr/share/texmf-dist/tex/latex/janishutz-helpers echo "Updating file database" sudo texhash fi diff --git a/janishutz-helpers.sty b/janishutz-helpers.sty index a1e89a6..01be5fc 100644 --- a/janishutz-helpers.sty +++ b/janishutz-helpers.sty @@ -207,35 +207,6 @@ \newcommand{\propertiesNamingDE}{Eigenschaften} -% ┌ ┐ -% │ Translation │ -% └ ┘ -\newcommand{\translate}[2]{% - \ifthenelse{\equal{\currentLanguage}{en}}{#1}{#2} -} -\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 }} - - -\DeclareOption{de}{ - \RequirePackage[ngerman]{babel} - \renewcommand{\currentLanguage}{de} -} -\ProcessOptions - - % ┌ ┐ % │ STYLE: Globals │ % └ ┘ @@ -351,3 +322,761 @@ } +% ┌ ┐ +% │ Math │ +% └ ┘ + +% BB shortcuts (for number spaces, etc) +\newcommand{\A}{\mathbb{A}} +\newcommand{\B}{\mathbb{B}} +\newcommand{\C}{\mathbb{C}} +\newcommand{\D}{\mathbb{D}} +\newcommand{\E}{\mathbb{E}} +\newcommand{\F}{\mathbb{F}} +\newcommand{\G}{\mathbb{G}} +\renewcommand{\H}{\mathbb{H}} +\newcommand{\I}{\mathbb{I}} +\newcommand{\J}{\mathbb{J}} +\newcommand{\K}{\mathbb{K}} +\renewcommand{\L}{\mathbb{L}} +\newcommand{\M}{\mathbb{M}} +\newcommand{\N}{\mathbb{N}} +\renewcommand{\O}{\mathbb{O}} +\renewcommand{\P}{\mathbb{P}} +\newcommand{\Q}{\mathbb{Q}} +\newcommand{\R}{\mathbb{R}} +\renewcommand{\S}{\mathbb{S}} +\newcommand{\T}{\mathbb{T}} +\newcommand{\U}{\mathbb{U}} +\newcommand{\V}{\mathbb{V}} +\newcommand{\W}{\mathbb{W}} +\newcommand{\X}{\mathbb{X}} +\newcommand{\Y}{\mathbb{Y}} +\newcommand{\Z}{\mathbb{Z}} + +% Caligraphic +\newcommand{\cA}{\mathcal{A}} +\newcommand{\cB}{\mathcal{B}} +\newcommand{\cC}{\mathcal{C}} +\newcommand{\cD}{\mathcal{D}} +\newcommand{\cE}{\mathcal{E}} +\newcommand{\cF}{\mathcal{F}} +\newcommand{\cG}{\mathcal{G}} +\newcommand{\cH}{\mathcal{H}} +\newcommand{\cI}{\mathcal{I}} +\newcommand{\cJ}{\mathcal{J}} +\newcommand{\cK}{\mathcal{K}} +\newcommand{\cL}{\mathcal{L}} +\newcommand{\cM}{\mathcal{M}} +\newcommand{\cN}{\mathcal{N}} +\newcommand{\cO}{\mathcal{O}} +\newcommand{\cP}{\mathcal{P}} +\newcommand{\cQ}{\mathcal{Q}} +\newcommand{\cR}{\mathcal{R}} +\newcommand{\cS}{\mathcal{S}} +\newcommand{\cT}{\mathcal{T}} +\newcommand{\cU}{\mathcal{U}} +\newcommand{\cV}{\mathcal{V}} +\newcommand{\cW}{\mathcal{W}} +\newcommand{\cX}{\mathcal{X}} +\newcommand{\cY}{\mathcal{Y}} +\newcommand{\cZ}{\mathcal{Z}} + +% other useful shortcuts +\newcommand{\elementstack}[2]{\genfrac{}{}{0pt}{}{#1}{#2}} +\newcommand{\8}{\infty} +\newcommand{\cond}{\text{cond}} +\newcommand{\argmin}[1]{\underset{#1}{\text{argmin}}} +\newcommand{\dx}{\text{ d}} +\newcommand{\floor}[1]{\left\lfloor #1 \right\rfloor} +\newcommand{\ceil}[1]{\left\lceil #1 \right\rceil} +\newcommand{\hastoeq}{\overset{!}{=}} +\newcommand{\Leftrightarrowequiv}{\overset{\cdot}{\Leftrightarrow}} +\newcommand{\Longleftrightarrowequiv}{\overset{\cdot}{\Longleftrightarrow}} +\newcommand{\Rightarrowequiv}{\overset{\cdot}{\Rightarrow}} +\newcommand{\Leftarrowequiv}{\overset{\cdot}{\Leftarrow}} +\newcommand{\defAs}{\overset{\text{def}}{=}} +\newcommand{\der}[1]{\frac{\mbox{d}}{\mbox{d}#1}} +\newcommand{\dern}[2]{\frac{\mbox{d}^{#2}}{\mbox{d}^{#2}#1}} +\newcommand{\parder}[1]{\frac{\partial}{\partial #1}} +\newcommand{\pardern}[2]{\frac{\partial^{#2}}{\partial^{#2} #1}} +\newcommand{\defEquiv}{\overset{\text{def}}{\Leftrightarrow}} +\newcommand{\defImplies}{\overset{\text{def}}{\Rightarrow}} +\newcommand{\divides}{\hspace{0.25em}|\hspace{0.25em}} +\newcommand{\lcm}{\text{lcm}} +\newcommand{\limit}[2]{\underset{#1 \rightarrow #2}{\lim}} +\newcommand{\seq}[1]{(#1_n)_{n \geq 1}} +\newcommand{\ser}[2]{\sum_{k = 1}^{#2} #1_k} +\newcommand{\limni}{\limit{n}{\infty}} +\newcommand{\limnz}{\limit{n}{0}} +\newcommand{\limxz}{\limit{x_0}{0}} +\newcommand{\limhz}{\limit{h}{0}} +\newcommand{\liminfni}{\liminf_{n \rightarrow \infty}} +\newcommand{\limsupni}{\limsup_{n \rightarrow \infty}} + +\DeclareMathOperator\arctanh{arctanh} +\DeclareMathOperator\arccosh{arccosh} +\DeclareMathOperator\arcsinh{arcsinh} + + +% ┌ ┐ +% │ Index │ +% └ ┘ + +% For using index package +\newcommand{\prepareIndex}{ + \RequirePackage[T1]{fontenc} + \RequirePackage{imakeidx} + \makeindex +} + +\newcommand{\addIndexBold}[1]{\textbf{\index{\MakeLowercase{#1}} #1}} +\newcommand{\addIndexItalic}[1]{\textit{\index{\MakeLowercase{#1}} #1}} +\newcommand{\addIndex}[1]{\index{\MakeLowercase{#1}} #1} + + + +% ┌ ┐ +% │ Tables │ +% └ ┘ + +\RequirePackage{booktabs} +\RequirePackage{tabulary} + +% Create new table. #1 Layout, #2 title row +\newenvironment{tables}[2]{ + \begin{center} + \begin{tabular}{#1} + \toprule + #2 \\ + \midrule + }{ + \bottomrule + \end{tabular} + \end{center} +} + +% Create new table in table env. #1 layout, #2 title row, #3 caption +\newenvironment{fullTable}[3]{ + \edef\tableCaption{#3} + \begin{table}[h!] + \begin{tables}{#1}{#2} + }{ + \end{tables} + \caption{\tableCaption} + \end{table} +} + + +% ┌ ┐ +% │ Translation │ +% └ ┘ +\newcommand{\translate}[2]{% + \ifthenelse{\equal{\currentLanguage}{en}}{#1}{#2} +} +\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 }} + + +% ┌ ┐ +% │ Setup │ +% └ ┘ +% 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}} + } +} + +% 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} +} + + +% TODO: Use landscape and columns for new version +% 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} +} + + +% ┌ ┐ +% │ Document start │ +% └ ┘ +% Start document command (required) +\newcommand{\startDocument}{ + \maketitle + \pagestyle{fancy} + \thispagestyle{fancy} +} + + + +% ░▒█▀▀▄░▄▀▀▄░█▀▄▀█░▄▀▀▄░█░▒█░▀█▀░█▀▀░█▀▀▄░░░▒█▀▀▀█░█▀▄░░▀░░█▀▀░█▀▀▄░█▀▄░█▀▀ +% ░▒█░░░░█░░█░█░▀░█░█▄▄█░█░▒█░░█░░█▀▀░█▄▄▀░░░░▀▀▀▄▄░█░░░░█▀░█▀▀░█░▒█░█░░░█▀▀ +% ░▒█▄▄▀░░▀▀░░▀░░▒▀░█░░░░░▀▀▀░░▀░░▀▀▀░▀░▀▀░░░▒█▄▄▄█░▀▀▀░▀▀▀░▀▀▀░▀░░▀░▀▀▀░▀▀▀ + +% Extra imports +\RequirePackage{stmaryrd} +\RequirePackage{algorithm} +\RequirePackage{algpseudocodex} +\RequirePackage{setspace} +\RequirePackage{verbatim} +\RequirePackage{turnstile} +\RequirePackage{forloop} + +\newcommand{\Indent}{\hspace{\algorithmicindent}} + +\newcommand{\tc}[1]{\tco{#1}} +\newcommand{\tct}[1]{\Theta\left(#1\right)} +\newcommand{\tco}[1]{\mathcal{O}\left(#1\right)} +\newcommand{\tcl}[1]{\Omega\left(#1\right)} +\newcommand{\wordbool}{(\Sigma_{\text{bool}})^*} +\newcommand{\words}[1]{(\Sigma_{\text{#1}})^*} +\newcommand{\word}{\Sigma^*} +\newcommand{\wordm}[1]{\Sigma_{\text{#1}}^*} +\newcommand{\alphabets}[1]{\Sigma_{\text{#1}}} +\newcommand{\alphabetbool}{\Sigma_{\text{bool}}} +\newcommand{\tR}{\text{R}} +\newcommand{\tC}{\text{C}} +\newcommand{\tN}{\text{N}} +\newcommand{\bigvdash}[2]{\sststile{#1}{#2}} +\newcommand{\class}{\text{\tr{Cl}{Kl}}} + + +% ┌ ┐ +% │ STYLE: Math │ +% └ ┘ + +% Add shortcuts to commonly used commands +\newcommand{\vect}[1]{\overrightarrow{#1}} +\renewcommand{\hat}[1]{\widehat{#1}} +\renewcommand{\tilde}[1]{\widetilde{#1}} +\newcommand{\proven}{$\hspace{17cm}\square$} + + +% ┌ ┐ +% │ STYLE: Common tcolorboxes │ +% └ ┘ +% TODO: Update colors + +\newtcolorbox{recall}[2][]{mainboxstyle,colback=recallcolor!5!white,colframe=recallcolor!75!black,colbacktitle=recallcolor!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=recallcolor!75!black,,fill=recallcolor!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} + + +% ── Label generator ───────────────────────────────────────────────── +\newcommand{\printNumberingConfigForDescriptor}[1]{\csname #1numbering\endcsname} +\newcommand{\printCounter}[1]{\csname the#1\endcsname} + +\newcommand{\printLabel}[1]{% + \ifcsdef{#1numbering}{% Extra config present + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{ + \printCounter{#1\subsectionnumbering}% + }{ + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{separate}}{ + \printCounter{#1\subsectionnumbering}% + }{ + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{ + \printCounter{combined\subsectionnumbering}% + }{} + } + } + }{% + \labelPrintBackendRoutine{#1}% + } +} +\newcommand{\labelPrintBackendRoutine}[1]{ + \ifthenelse{\equal{\numberingpreset}{combined}}{ + \printCounter{combined\subsectionnumbering}% + }{ + \ifthenelse{\equal{\numberingpreset}{separate}}{ + \printCounter{#1\subsectionnumbering}% + }{} + } +} + +% Inline environments (inline) +\newcommand{\printTranslationOptionEN}[1]{\csname #1NamingEN\endcsname} +\newcommand{\printTranslationOptionDE}[1]{\csname #1NamingDE\endcsname} + +\newcommand{\inline}[2][__NONAME__]{% + \ifthenelse{\equal{__NONAME__}{#1}}{% + \anonymousInlineDescriptorTemplate{#2}{\printLabel{#2}}% + }{% + \inlineDescriptorTemplate{#2}{\printLabel{#2}}{#1}% + } +} + +\newcommand{\short}[2][__NONAME__]{% + \ifthenelse{\equal{__NONAME__}{#1}}{% + \anonymousShortDescriptorTemplate{#2}{\printLabel{#2}}% + }{% + \shortDescriptorTemplate{#2}{\printLabel{#2}}{#1}% + } +} + +% ── Set the current number of a label ─────────────────────────────── +\newcommand{\setLabelNumber}[2]{% + \setcounter{#1none}{#2}% + \addtocounter{#1none}{-1}% + \setcounter{#1section}{#2}% + \addtocounter{#1section}{-1}% + \setcounter{#1subsection}{#2}% + \addtocounter{#1subsection}{-1}% + \setcounter{#1subsubsection}{#2}% + \addtocounter{#1subsubsection}{-1}% + \setcounter{#1paragraph}{#2}% + \addtocounter{#1paragraph}{-1}% +} + +\newcommand{\stepLabelNumber}[1]{% + \stepcounter{#1none}% + \stepcounter{#1section}% + \stepcounter{#1subsection}% + \stepcounter{#1subsubsection}% + \stepcounter{#1paragraph}% +} + +% ┌ ┐ +% │ Counter numbering │ +% └ ┘ +% TODO: Update +\newcommand{\preTableAndFigHook}[1]{% + \ifnum\value{numberingConfig}>1% + \ifnum\value{numberSubsections}=1% + \stepcounter{allss}% + \else + \ifnum\value{numberSubsections}=2% + \stepcounter{allsss}% + \else% + \stepcounter{all}% + \fi + \fi + \fi + \renewcommand{\thetable}{\arabic{table}} + \renewcommand{\thefigure}{\arabic{figure}} +} +\AtBeginEnvironment{table}{\preTableAndFigHook{table}} +\AtBeginEnvironment{figure}{\preTableAndFigHook{figure}} + + +\newcommand{\newsection}{ + \newpage + \newsectionNoPB +} + + +% ┌ ┐ +% │ STYLE: Computer Science │ +% └ ┘ +\RequirePackage{forest} +\tikzset{algpxIndentLine/.style={draw=lightgray}} +\algrenewcommand{\alglinenumber}[1]{#1} + +\newenvironment{algo}[1]{ + \begin{algorithm} + \begin{spacing}{1.2} + \caption{\textsc{#1}} + \begin{algorithmic}[1] + }{ + \end{algorithmic} + \end{spacing} + \end{algorithm} +} + + +\newcounter{definitionnone} +\newcounter{definitionsection}[section] +\renewcommand{\thedefinitionsection}{\thesection.\arabic{definitionsection}} +\newcounter{definitionsubsection}[subsection] +\renewcommand{\thedefinitionsubsection}{\thesection.\thesubsection.\arabic{definitionsubsection}} +\newcounter{definitionsubsubsection}[subsubsection] +\renewcommand{\thedefinitionsubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{definitionsubsubsection}} +\newcounter{definitionparagraph}[paragraph] +\renewcommand{\thedefinitionparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{definitionparagraph}} +\newtcolorbox{definition}[2][]{ + mainboxstyle, + colback=definitioncolor!5!white, + colframe=definitioncolor!75!black, + colbacktitle=definitioncolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=definitioncolor!75!black, + fill=definitioncolor!75!black + ] at (frame.north east) + { + \large \tr{\definitionNamingEN}{\definitionNamingDE}\printLabel{definition} + }; + }, #1 + } + +\newcounter{examplenone} +\newcounter{examplesection}[section] +\renewcommand{\theexamplesection}{\thesection.\arabic{examplesection}} +\newcounter{examplesubsection}[subsection] +\renewcommand{\theexamplesubsection}{\thesection.\thesubsection.\arabic{examplesubsection}} +\newcounter{examplesubsubsection}[subsubsection] +\renewcommand{\theexamplesubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{examplesubsubsection}} +\newcounter{exampleparagraph}[paragraph] +\renewcommand{\theexampleparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{exampleparagraph}} +\newtcolorbox{example}[2][]{ + mainboxstyle, + colback=examplecolor!5!white, + colframe=examplecolor!75!black, + colbacktitle=examplecolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=examplecolor!75!black, + fill=examplecolor!75!black + ] at (frame.north east) + { + \large \tr{\exampleNamingEN}{\exampleNamingDE}\printLabel{example} + }; + }, #1 + } + +\newcounter{theoremnone} +\newcounter{theoremsection}[section] +\renewcommand{\thetheoremsection}{\thesection.\arabic{theoremsection}} +\newcounter{theoremsubsection}[subsection] +\renewcommand{\thetheoremsubsection}{\thesection.\thesubsection.\arabic{theoremsubsection}} +\newcounter{theoremsubsubsection}[subsubsection] +\renewcommand{\thetheoremsubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{theoremsubsubsection}} +\newcounter{theoremparagraph}[paragraph] +\renewcommand{\thetheoremparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{theoremparagraph}} +\newtcolorbox{theorem}[2][]{ + mainboxstyle, + colback=theoremcolor!5!white, + colframe=theoremcolor!75!black, + colbacktitle=theoremcolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=theoremcolor!75!black, + fill=theoremcolor!75!black + ] at (frame.north east) + { + \large \tr{\theoremNamingEN}{\theoremNamingDE}\printLabel{theorem} + }; + }, #1 + } + +\newcounter{lemmanone} +\newcounter{lemmasection}[section] +\renewcommand{\thelemmasection}{\thesection.\arabic{lemmasection}} +\newcounter{lemmasubsection}[subsection] +\renewcommand{\thelemmasubsection}{\thesection.\thesubsection.\arabic{lemmasubsection}} +\newcounter{lemmasubsubsection}[subsubsection] +\renewcommand{\thelemmasubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{lemmasubsubsection}} +\newcounter{lemmaparagraph}[paragraph] +\renewcommand{\thelemmaparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{lemmaparagraph}} +\newtcolorbox{lemma}[2][]{ + mainboxstyle, + colback=lemmacolor!5!white, + colframe=lemmacolor!75!black, + colbacktitle=lemmacolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=lemmacolor!75!black, + fill=lemmacolor!75!black + ] at (frame.north east) + { + \large \tr{\lemmaNamingEN}{\lemmaNamingDE}\printLabel{lemma} + }; + }, #1 + } + +\newcounter{corollarynone} +\newcounter{corollarysection}[section] +\renewcommand{\thecorollarysection}{\thesection.\arabic{corollarysection}} +\newcounter{corollarysubsection}[subsection] +\renewcommand{\thecorollarysubsection}{\thesection.\thesubsection.\arabic{corollarysubsection}} +\newcounter{corollarysubsubsection}[subsubsection] +\renewcommand{\thecorollarysubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{corollarysubsubsection}} +\newcounter{corollaryparagraph}[paragraph] +\renewcommand{\thecorollaryparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{corollaryparagraph}} +\newtcolorbox{corollary}[2][]{ + mainboxstyle, + colback=corollarycolor!5!white, + colframe=corollarycolor!75!black, + colbacktitle=corollarycolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=corollarycolor!75!black, + fill=corollarycolor!75!black + ] at (frame.north east) + { + \large \tr{\corollaryNamingEN}{\corollaryNamingDE}\printLabel{corollary} + }; + }, #1 + } + +\newcounter{propositionnone} +\newcounter{propositionsection}[section] +\renewcommand{\thepropositionsection}{\thesection.\arabic{propositionsection}} +\newcounter{propositionsubsection}[subsection] +\renewcommand{\thepropositionsubsection}{\thesection.\thesubsection.\arabic{propositionsubsection}} +\newcounter{propositionsubsubsection}[subsubsection] +\renewcommand{\thepropositionsubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{propositionsubsubsection}} +\newcounter{propositionparagraph}[paragraph] +\renewcommand{\thepropositionparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{propositionparagraph}} +\newtcolorbox{proposition}[2][]{ + mainboxstyle, + colback=propositioncolor!5!white, + colframe=propositioncolor!75!black, + colbacktitle=propositioncolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=propositioncolor!75!black, + fill=propositioncolor!75!black + ] at (frame.north east) + { + \large \tr{\propositionNamingEN}{\propositionNamingDE}\printLabel{proposition} + }; + }, #1 + } + +\newcounter{factnone} +\newcounter{factsection}[section] +\renewcommand{\thefactsection}{\thesection.\arabic{factsection}} +\newcounter{factsubsection}[subsection] +\renewcommand{\thefactsubsection}{\thesection.\thesubsection.\arabic{factsubsection}} +\newcounter{factsubsubsection}[subsubsection] +\renewcommand{\thefactsubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{factsubsubsection}} +\newcounter{factparagraph}[paragraph] +\renewcommand{\thefactparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{factparagraph}} +\newtcolorbox{fact}[2][]{ + mainboxstyle, + colback=factcolor!5!white, + colframe=factcolor!75!black, + colbacktitle=factcolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=factcolor!75!black, + fill=factcolor!75!black + ] at (frame.north east) + { + \large \tr{\factNamingEN}{\factNamingDE}\printLabel{fact} + }; + }, #1 + } + +\newcounter{formulanone} +\newcounter{formulasection}[section] +\renewcommand{\theformulasection}{\thesection.\arabic{formulasection}} +\newcounter{formulasubsection}[subsection] +\renewcommand{\theformulasubsection}{\thesection.\thesubsection.\arabic{formulasubsection}} +\newcounter{formulasubsubsection}[subsubsection] +\renewcommand{\theformulasubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{formulasubsubsection}} +\newcounter{formulaparagraph}[paragraph] +\renewcommand{\theformulaparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{formulaparagraph}} +\newtcolorbox{formula}[2][]{ + mainboxstyle, + colback=formulacolor!5!white, + colframe=formulacolor!75!black, + colbacktitle=formulacolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=formulacolor!75!black, + fill=formulacolor!75!black + ] at (frame.north east) + { + \large \tr{\formulaNamingEN}{\formulaNamingDE}\printLabel{formula} + }; + }, #1 + } + +\newcounter{remarknone} +\newcounter{remarksection}[section] +\renewcommand{\theremarksection}{\thesection.\arabic{remarksection}} +\newcounter{remarksubsection}[subsection] +\renewcommand{\theremarksubsection}{\thesection.\thesubsection.\arabic{remarksubsection}} +\newcounter{remarksubsubsection}[subsubsection] +\renewcommand{\theremarksubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{remarksubsubsection}} +\newcounter{remarkparagraph}[paragraph] +\renewcommand{\theremarkparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{remarkparagraph}} +\newtcolorbox{remark}[2][]{ + mainboxstyle, + colback=remarkcolor!5!white, + colframe=remarkcolor!75!black, + colbacktitle=remarkcolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=remarkcolor!75!black, + fill=remarkcolor!75!black + ] at (frame.north east) + { + \large \tr{\remarkNamingEN}{\remarkNamingDE}\printLabel{remark} + }; + }, #1 + } + +\newcounter{combinenone} +\newcounter{combinesection}[section] +\renewcommand{\thecombinesection}{\thesection.\arabic{combinesection}} +\newcounter{combinesubsection}[subsection] +\renewcommand{\thecombinesubsection}{\thesection.\thesubsection.\arabic{combinesubsection}} +\newcounter{combinesubsubsection}[subsubsection] +\renewcommand{\thecombinesubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{combinesubsubsection}} +\newcounter{combineparagraph}[paragraph] +\renewcommand{\thecombineparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{combineparagraph}} + + +\newcommand{\newsectionNoPB}{ + \setcounter{definitionnone}{0} + \setcounter{definitionsection}{0} + \setcounter{definitionsubsection}{0} + \setcounter{definitionsubsubsection}{0} + \setcounter{definitionparagraph}{0} + + \setcounter{examplenone}{0} + \setcounter{examplesection}{0} + \setcounter{examplesubsection}{0} + \setcounter{examplesubsubsection}{0} + \setcounter{exampleparagraph}{0} + + \setcounter{theoremnone}{0} + \setcounter{theoremsection}{0} + \setcounter{theoremsubsection}{0} + \setcounter{theoremsubsubsection}{0} + \setcounter{theoremparagraph}{0} + + \setcounter{lemmanone}{0} + \setcounter{lemmasection}{0} + \setcounter{lemmasubsection}{0} + \setcounter{lemmasubsubsection}{0} + \setcounter{lemmaparagraph}{0} + + \setcounter{corollarynone}{0} + \setcounter{corollarysection}{0} + \setcounter{corollarysubsection}{0} + \setcounter{corollarysubsubsection}{0} + \setcounter{corollaryparagraph}{0} + + \setcounter{propositionnone}{0} + \setcounter{propositionsection}{0} + \setcounter{propositionsubsection}{0} + \setcounter{propositionsubsubsection}{0} + \setcounter{propositionparagraph}{0} + + \setcounter{factnone}{0} + \setcounter{factsection}{0} + \setcounter{factsubsection}{0} + \setcounter{factsubsubsection}{0} + \setcounter{factparagraph}{0} + + \setcounter{formulanone}{0} + \setcounter{formulasection}{0} + \setcounter{formulasubsection}{0} + \setcounter{formulasubsubsection}{0} + \setcounter{formulaparagraph}{0} + + \setcounter{remarknone}{0} + \setcounter{remarksection}{0} + \setcounter{remarksubsection}{0} + \setcounter{remarksubsubsection}{0} + \setcounter{remarkparagraph}{0} + + \setcounter{combinenone}{0} + \setcounter{combinesection}{0} + \setcounter{combinesubsection}{0} + \setcounter{combinesubsubsection}{0} + \setcounter{combineparagraph}{0} + + \setcounter{table}{0} + \setcounter{figure}{0} +} diff --git a/janishutz-helpers.tex b/janishutz-helpers.tex index 61bafc6..01be5fc 100644 --- a/janishutz-helpers.tex +++ b/janishutz-helpers.tex @@ -9,6 +9,10 @@ %% and version 1.3c or later is part of all distributions of %% LaTeX version 2008-05-04 or later. +\NeedsTeXFormat{LaTeX2e} + + +\ProvidesPackage{janishutz-helpers}[2026-02-19 v1.0.0] % Package imports \RequirePackage[table, dvipsnames]{xcolor} @@ -47,46 +51,47 @@ % ┌ ┐ -% │ Naming │ +% │ General config │ % └ ┘ -% Here you may specify how each descriptor is named -\newcommand{\definitionNamingEN}{Definition} -\newcommand{\theoremNamingEN}{Theorem} -\newcommand{\lemmaNamingEN}{Lemma} -\newcommand{\corollaryNamingEN}{Corollary} -\newcommand{\axiomNamingEN}{Axiom} -\newcommand{\factNamingEN}{Fact} -\newcommand{\propositionNamingEN}{Proposition} -\newcommand{\exampleNamingEN}{Example} -\newcommand{\formulaNamingEN}{Formula} -\newcommand{\remarkNamingEN}{Remark} -\newcommand{\proofNamingEN}{Proof} -\newcommand{\intuitionNamingEN}{Intuition} -\newcommand{\termNamingEN}{Term} -\newcommand{\notationNamingEN}{Notation} -\newcommand{\taskNamingEN}{Task} -\newcommand{\usageNamingEN}{Usage} -\newcommand{\recallNamingEN}{Recall} -\newcommand{\propertiesNamingEN}{Properties} +% Configure your author name here +\newcommand{\authorTitle}{Janis Hutz\\\url{https://janishutz.com}} +\newcommand{\authorHeaders}{Janis Hutz} -\newcommand{\definitionNamingDE}{Definition} -\newcommand{\theoremNamingDE}{Theorem} -\newcommand{\lemmaNamingDE}{Lemma} -\newcommand{\corollaryNamingDE}{Korollar} -\newcommand{\axiomNamingDE}{Axiom} -\newcommand{\factNamingDE}{Fakt} -\newcommand{\propositionNamingDE}{Satz} -\newcommand{\exampleNamingDE}{Beispiel} -\newcommand{\formulaNamingDE}{Formel} -\newcommand{\remarkNamingDE}{Bemerkung} -\newcommand{\proofNamingDE}{Beweis} -\newcommand{\intuitionNamingDE}{Intuition} -\newcommand{\termNamingDE}{Begriff} -\newcommand{\notationNamingDE}{Notation} -\newcommand{\taskNamingDE}{Aufgabe} -\newcommand{\usageNamingDE}{Nutzung} -\newcommand{\recallNamingDE}{Repetition} -\newcommand{\propertiesNamingDE}{Eigenschaften} +% Configure your address here +\newcommand{\name}{Janis Hutz} +\newcommand{\street}{Street} +\newcommand{\city}{City} +\newcommand{\countrycode}{CH} + +% Set the default language +\renewcommand{\currentLanguage}{en} + + +% ┌ ┐ +% │ Rendering │ +% └ ┘ +% Short descriptors are generated from the naming defined in naming.sty +% You may here configure how they are generated. #1 is the full name. +\newcommand{\shortDescriptorNameTemplate}[1]{\StrBefore[1]{#1}} + +% Decide if the numbering should show a space preceding it. +% \newcommand{\useSpaceBeforeNumbering}{true} +% TODO: Remove above if works without + +% Specify how the inline and short descriptors (e.g. Lemma, etc) are rendered. +% - #1 is the name of the descriptor +% - #2 is the number (correctly rendered according to settings and preceded with space if not disabled) +% - #3 is the name passed (non-empty asserted) +\newcommand{\shortDescriptorTemplate}[4]{\bg{#1color}{\shortDescriptorNameTemplate{#1}#2} \textit{(#3)}\ } +\newcommand{\inlineDescriptorTemplate}[4]{\bg{#1color}{#1#2}: \textit{(#3)}\ } + +% These are used if no name is provided and argument #4 from above is the missing argument +\newcommand{\anonymousShortDescriptorTemplate}[3]{\bg{#1color}{\shortDescriptorNameTemplate{#1}#2}\ } +\newcommand{\anonymousInlineDescriptorTemplate}[3]{\bg{#3color}{#1#2}\ } + +% background command config (draws a small box around the content) +\newcommand{\backgroundPadding}{2pt} +\newcommand{\backgroundRounding}{0.1pt} % ┌ ┐ @@ -160,84 +165,83 @@ % ┌ ┐ -% │ General config │ +% │ Naming │ % └ ┘ -% Configure your author name here -\newcommand{\authorTitle}{Janis Hutz\\\url{https://janishutz.com}} -\newcommand{\authorHeaders}{Janis Hutz} +% Here you may specify how each descriptor is named +\newcommand{\definitionNamingEN}{Definition} +\newcommand{\theoremNamingEN}{Theorem} +\newcommand{\lemmaNamingEN}{Lemma} +\newcommand{\corollaryNamingEN}{Corollary} +\newcommand{\axiomNamingEN}{Axiom} +\newcommand{\factNamingEN}{Fact} +\newcommand{\propositionNamingEN}{Proposition} +\newcommand{\exampleNamingEN}{Example} +\newcommand{\formulaNamingEN}{Formula} +\newcommand{\remarkNamingEN}{Remark} +\newcommand{\proofNamingEN}{Proof} +\newcommand{\intuitionNamingEN}{Intuition} +\newcommand{\termNamingEN}{Term} +\newcommand{\notationNamingEN}{Notation} +\newcommand{\taskNamingEN}{Task} +\newcommand{\usageNamingEN}{Usage} +\newcommand{\recallNamingEN}{Recall} +\newcommand{\propertiesNamingEN}{Properties} -% Configure your address here -\newcommand{\name}{Janis Hutz} -\newcommand{\street}{Street} -\newcommand{\city}{City} -\newcommand{\countrycode}{CH} - -% Set the default language -\renewcommand{\currentLanguage}{en} - - -% ┌ ┐ -% │ Rendering │ -% └ ┘ -% Short descriptors are generated from the naming defined in naming.sty -% You may here configure how they are generated. #1 is the full name. -\newcommand{\shortDescriptorNameTemplate}[1]{\StrBefore[1]{#1}} - -% Decide if the numbering should show a space preceding it. -% \newcommand{\useSpaceBeforeNumbering}{true} -% TODO: Remove above if works without - -% Specify how the inline and short descriptors (e.g. Lemma, etc) are rendered. -% - #1 is the name of the descriptor -% - #2 is the number (correctly rendered according to settings and preceded with space if not disabled) -% - #3 is the name passed (non-empty asserted) -\newcommand{\shortDescriptorTemplate}[4]{\bg{#1color}{\shortDescriptorNameTemplate{#1}#2} \textit{(#3)}\ } -\newcommand{\inlineDescriptorTemplate}[4]{\bg{#1color}{#1#2}: \textit{(#3)}\ } - -% These are used if no name is provided and argument #4 from above is the missing argument -\newcommand{\anonymousShortDescriptorTemplate}[3]{\bg{#1color}{\shortDescriptorNameTemplate{#1}#2}\ } -\newcommand{\anonymousInlineDescriptorTemplate}[3]{\bg{#3color}{#1#2}\ } - -% background command config (draws a small box around the content) -\newcommand{\backgroundPadding}{2pt} -\newcommand{\backgroundRounding}{0.1pt} +\newcommand{\definitionNamingDE}{Definition} +\newcommand{\theoremNamingDE}{Theorem} +\newcommand{\lemmaNamingDE}{Lemma} +\newcommand{\corollaryNamingDE}{Korollar} +\newcommand{\axiomNamingDE}{Axiom} +\newcommand{\factNamingDE}{Fakt} +\newcommand{\propositionNamingDE}{Satz} +\newcommand{\exampleNamingDE}{Beispiel} +\newcommand{\formulaNamingDE}{Formel} +\newcommand{\remarkNamingDE}{Bemerkung} +\newcommand{\proofNamingDE}{Beweis} +\newcommand{\intuitionNamingDE}{Intuition} +\newcommand{\termNamingDE}{Begriff} +\newcommand{\notationNamingDE}{Notation} +\newcommand{\taskNamingDE}{Aufgabe} +\newcommand{\usageNamingDE}{Nutzung} +\newcommand{\recallNamingDE}{Repetition} +\newcommand{\propertiesNamingDE}{Eigenschaften} % ┌ ┐ % │ STYLE: Globals │ % └ ┘ % Global style configs for tcolorbox (to reduce bloat) -\AtBeginDocument{ - \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 - } - } -} +% \AtBeginDocument{ +% \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 +% } +% } +% } % ── Fonts ─────────────────────────────────────────────────────────── \newcommand{\setFont}[1]{\fontfamily{#1}\selectfont} @@ -318,103 +322,6 @@ } -% ┌ ┐ -% │ Index │ -% └ ┘ - -% For using index package -\newcommand{\prepareIndex}{ - \RequirePackage[T1]{fontenc} - \RequirePackage{imakeidx} - \makeindex -} - -\newcommand{\addIndexBold}[1]{\textbf{\index{\MakeLowercase{#1}} #1}} -\newcommand{\addIndexItalic}[1]{\textit{\index{\MakeLowercase{#1}} #1}} -\newcommand{\addIndex}[1]{\index{\MakeLowercase{#1}} #1} - - - -% ┌ ┐ -% │ Setup │ -% └ ┘ -% 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}} - } -} - -% 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} -} - - -% TODO: Use landscape and columns for new version -% 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} -} - - -% ┌ ┐ -% │ Document start │ -% └ ┘ -% Start document command (required) -\newcommand{\startDocument}{ - \maketitle - \pagestyle{fancy} - \thispagestyle{fancy} -} - - -% ┌ ┐ -% │ Translation │ -% └ ┘ -\newcommand{\translate}[2]{% - \ifthenelse{\equal{\currentLanguage}{en}}{#1}{#2} -} -\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 }} - - % ┌ ┐ % │ Math │ % └ ┘ @@ -512,6 +419,23 @@ \DeclareMathOperator\arcsinh{arcsinh} +% ┌ ┐ +% │ Index │ +% └ ┘ + +% For using index package +\newcommand{\prepareIndex}{ + \RequirePackage[T1]{fontenc} + \RequirePackage{imakeidx} + \makeindex +} + +\newcommand{\addIndexBold}[1]{\textbf{\index{\MakeLowercase{#1}} #1}} +\newcommand{\addIndexItalic}[1]{\textit{\index{\MakeLowercase{#1}} #1}} +\newcommand{\addIndex}[1]{\index{\MakeLowercase{#1}} #1} + + + % ┌ ┐ % │ Tables │ % └ ┘ @@ -544,6 +468,86 @@ } +% ┌ ┐ +% │ Translation │ +% └ ┘ +\newcommand{\translate}[2]{% + \ifthenelse{\equal{\currentLanguage}{en}}{#1}{#2} +} +\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 }} + + +% ┌ ┐ +% │ Setup │ +% └ ┘ +% 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}} + } +} + +% 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} +} + + +% TODO: Use landscape and columns for new version +% 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} +} + + +% ┌ ┐ +% │ Document start │ +% └ ┘ +% Start document command (required) +\newcommand{\startDocument}{ + \maketitle + \pagestyle{fancy} + \thispagestyle{fancy} +} + + % ░▒█▀▀▄░▄▀▀▄░█▀▄▀█░▄▀▀▄░█░▒█░▀█▀░█▀▀░█▀▀▄░░░▒█▀▀▀█░█▀▄░░▀░░█▀▀░█▀▀▄░█▀▄░█▀▀ % ░▒█░░░░█░░█░█░▀░█░█▄▄█░█░▒█░░█░░█▀▀░█▄▄▀░░░░▀▀▀▄▄░█░░░░█▀░█▀▀░█░▒█░█░░░█▀▀ @@ -588,6 +592,64 @@ \newcommand{\proven}{$\hspace{17cm}\square$} +% ┌ ┐ +% │ STYLE: Common tcolorboxes │ +% └ ┘ +% TODO: Update colors + +\newtcolorbox{recall}[2][]{mainboxstyle,colback=recallcolor!5!white,colframe=recallcolor!75!black,colbacktitle=recallcolor!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=recallcolor!75!black,,fill=recallcolor!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} + + % ── Label generator ───────────────────────────────────────────────── \newcommand{\printNumberingConfigForDescriptor}[1]{\csname #1numbering\endcsname} \newcommand{\printCounter}[1]{\csname the#1\endcsname} @@ -709,64 +771,6 @@ } -% ┌ ┐ -% │ STYLE: Common tcolorboxes │ -% └ ┘ -% TODO: Update colors - -\newtcolorbox{recall}[2][]{mainboxstyle,colback=recallcolor!5!white,colframe=recallcolor!75!black,colbacktitle=recallcolor!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=recallcolor!75!black,,fill=recallcolor!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} - - \newcounter{definitionnone} \newcounter{definitionsection}[section] \renewcommand{\thedefinitionsection}{\thesection.\arabic{definitionsection}} diff --git a/uninstall.sh b/uninstall.sh old mode 100644 new mode 100755 index aa9f02f..61d7c26 --- a/uninstall.sh +++ b/uninstall.sh @@ -1,5 +1,6 @@ #!/bin/sh + if [[ -z "${TEXMFHOME+x}" ]]; then export TEXMFHOME=~/texmf/ fi From 165dedfe3011fbd18b9854f884d8509b0e43189a Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Thu, 19 Feb 2026 17:59:21 +0100 Subject: [PATCH 08/32] Some more attempted fixes --- build/build.py | 4 +++- install.sh | 13 +++++-------- janishutz-helpers.sty | 3 ++- janishutz-helpers.tex | 3 ++- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/build/build.py b/build/build.py index 5c4d544..17b35ab 100644 --- a/build/build.py +++ b/build/build.py @@ -3,7 +3,7 @@ from typing import List import labels import datetime -version = "1.0.0" +version = "1.0.1" print(""" ▄▄▄ ▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄ ▄▄ ▄▄ ▄▄ ▄▄▄▄▄▄▄ ▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄ ▄▄▄▄▄▄▄ @@ -39,6 +39,8 @@ l = labels.generate_labels() output += l[0] + "\n\n" output += l[1] +output += "\\endinput" + with open("../janishutz-helpers.tex", "w") as file: file.write(output) diff --git a/install.sh b/install.sh index 294a8db..c90bbcc 100755 --- a/install.sh +++ b/install.sh @@ -4,10 +4,10 @@ cd build/ python build.py cd .. -loc="s" -read -p "Local (l) or system (s) installation? (Defaults to system) " loc +loc="l" +read -p "Local (l) or system (s) installation? (Defaults to local) " loc -if [[ "$loc" == "l" ]]; then +if [[ "$loc" != "s" ]]; then if [[ -z "${TEXMFHOME+x}" ]]; then export TEXMFHOME=~/texmf/ fi @@ -15,11 +15,8 @@ if [[ "$loc" == "l" ]]; then mkdir -p $TEXMFHOME/tex/latex/janishutz-helpers cp ./janishutz-helpers.sty $TEXMFHOME/tex/latex/janishutz-helpers/ else - # sudo mkdir -p /usr/share/texmf/tex/latex/janishutz-helpers - # sudo cp ./janishutz-helpers.sty /usr/share/texmf/tex/latex/janishutz-helpers/ - sudo mkdir -p /usr/share/texmf-dist/tex/latex/janishutz-helpers/ - sudo cp ./janishutz-helpers.sty /usr/share/texmf-dist/tex/latex/janishutz-helpers/ - sudo chmod -R 777 /usr/share/texmf-dist/tex/latex/janishutz-helpers + sudo mkdir -p /usr/share/texmf/tex/latex/janishutz-helpers + sudo cp ./janishutz-helpers.sty /usr/share/texmf/tex/latex/janishutz-helpers/ echo "Updating file database" sudo texhash fi diff --git a/janishutz-helpers.sty b/janishutz-helpers.sty index 01be5fc..f390be2 100644 --- a/janishutz-helpers.sty +++ b/janishutz-helpers.sty @@ -12,7 +12,7 @@ \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{janishutz-helpers}[2026-02-19 v1.0.0] +\ProvidesPackage{janishutz-helpers}[2026-02-19 v1.0.1] % Package imports \RequirePackage[table, dvipsnames]{xcolor} @@ -1080,3 +1080,4 @@ \setcounter{table}{0} \setcounter{figure}{0} } +\endinput \ No newline at end of file diff --git a/janishutz-helpers.tex b/janishutz-helpers.tex index 01be5fc..f390be2 100644 --- a/janishutz-helpers.tex +++ b/janishutz-helpers.tex @@ -12,7 +12,7 @@ \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{janishutz-helpers}[2026-02-19 v1.0.0] +\ProvidesPackage{janishutz-helpers}[2026-02-19 v1.0.1] % Package imports \RequirePackage[table, dvipsnames]{xcolor} @@ -1080,3 +1080,4 @@ \setcounter{table}{0} \setcounter{figure}{0} } +\endinput \ No newline at end of file From c4c0266fd87809e6f2000201b1b4a18dee79d026 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Thu, 19 Feb 2026 18:07:27 +0100 Subject: [PATCH 09/32] Improve build --- build/build.py | 20 +++++++++++++++----- install.sh | 2 +- janishutz-helpers.sty | 3 --- janishutz-helpers.tex | 5 ----- src/core/setup.sty | 3 --- 5 files changed, 16 insertions(+), 17 deletions(-) diff --git a/build/build.py b/build/build.py index 17b35ab..676089f 100644 --- a/build/build.py +++ b/build/build.py @@ -2,6 +2,7 @@ import os from typing import List import labels import datetime +import sys version = "1.0.1" @@ -17,6 +18,12 @@ print(""" """) +build_sty = False +try: + build_sty = sys.argv.index("sty") > -1 +except: + pass + def load_all_files_of_array(dirname: str, files: List[str]): data = "" @@ -28,7 +35,8 @@ def load_all_files_of_array(dirname: str, files: List[str]): output = load_all_files_of_array("../src/", ["header.sty"]) -output += f"\\ProvidesPackage{{janishutz-helpers}}[{datetime.datetime.now().date().isoformat()} v{version}]\n\n" +if build_sty: + output += f"\\ProvidesPackage{{janishutz-helpers}}[{datetime.datetime.now().date().isoformat()} v{version}]\n\n" output += load_all_files_of_array("../src/", ["core.sty"]) output += load_all_files_of_array("../src/config/", os.listdir("../src/config/")) output += load_all_files_of_array("../src/", ["style.sty"]) @@ -41,11 +49,13 @@ output += l[1] output += "\\endinput" -with open("../janishutz-helpers.tex", "w") as file: - file.write(output) -with open("../janishutz-helpers.sty", "w") as file: - file.write(output) +if not build_sty: + with open("../janishutz-helpers.tex", "w") as file: + file.write(output) +else: + with open("../janishutz-helpers.sty", "w") as file: + file.write(output) print("==> Built successfully. Output to project-root/janishutz-helpers.tex\n") diff --git a/install.sh b/install.sh index c90bbcc..6352b40 100755 --- a/install.sh +++ b/install.sh @@ -1,7 +1,7 @@ #!/bin/sh cd build/ -python build.py +python build.py sty cd .. loc="l" diff --git a/janishutz-helpers.sty b/janishutz-helpers.sty index f390be2..7f655c2 100644 --- a/janishutz-helpers.sty +++ b/janishutz-helpers.sty @@ -496,7 +496,6 @@ % 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} @@ -520,7 +519,6 @@ % 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} @@ -530,7 +528,6 @@ % TODO: Use landscape and columns for new version % 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} diff --git a/janishutz-helpers.tex b/janishutz-helpers.tex index f390be2..f488a38 100644 --- a/janishutz-helpers.tex +++ b/janishutz-helpers.tex @@ -12,8 +12,6 @@ \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{janishutz-helpers}[2026-02-19 v1.0.1] - % Package imports \RequirePackage[table, dvipsnames]{xcolor} \RequirePackage{amsmath} @@ -496,7 +494,6 @@ % 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} @@ -520,7 +517,6 @@ % 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} @@ -530,7 +526,6 @@ % TODO: Use landscape and columns for new version % 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} diff --git a/src/core/setup.sty b/src/core/setup.sty index a271823..d29dc8e 100644 --- a/src/core/setup.sty +++ b/src/core/setup.sty @@ -4,7 +4,6 @@ % 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} @@ -28,7 +27,6 @@ % 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} @@ -38,7 +36,6 @@ % TODO: Use landscape and columns for new version % 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} From b7b365dd369f51a5ade20338241ea19fa1828812 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Thu, 19 Feb 2026 18:27:43 +0100 Subject: [PATCH 10/32] Fix some errors --- janishutz-helpers.tex | 12 ++++++++---- src/style/counters.sty | 5 +++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/janishutz-helpers.tex b/janishutz-helpers.tex index f488a38..8c40f78 100644 --- a/janishutz-helpers.tex +++ b/janishutz-helpers.tex @@ -651,6 +651,7 @@ \newcommand{\printLabel}[1]{% \ifcsdef{#1numbering}{% Extra config present + % TODO: Increment \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{ \printCounter{#1\subsectionnumbering}% }{ @@ -680,11 +681,14 @@ \newcommand{\printTranslationOptionEN}[1]{\csname #1NamingEN\endcsname} \newcommand{\printTranslationOptionDE}[1]{\csname #1NamingDE\endcsname} -\newcommand{\inline}[2][__NONAME__]{% - \ifthenelse{\equal{__NONAME__}{#1}}{% - \anonymousInlineDescriptorTemplate{#2}{\printLabel{#2}}% +\newcommand{\inline}[2][NONAME]{% + \ifthenelse{\equal{NONAME}{#1}}{% + % \anonymousInlineDescriptorTemplate{#2}{\printLabel{#2}}% + \anonymousInlineDescriptorTemplate{#2}{Test} + \printLabel{#2} }{% - \inlineDescriptorTemplate{#2}{\printLabel{#2}}{#1}% + % \inlineDescriptorTemplate{#2}{\printLabel{#2}}{#1}% + #2 } } diff --git a/src/style/counters.sty b/src/style/counters.sty index e03f222..585c894 100644 --- a/src/style/counters.sty +++ b/src/style/counters.sty @@ -4,6 +4,7 @@ \newcommand{\printLabel}[1]{% \ifcsdef{#1numbering}{% Extra config present + % TODO: Increment \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{ \printCounter{#1\subsectionnumbering}% }{ @@ -33,8 +34,8 @@ \newcommand{\printTranslationOptionEN}[1]{\csname #1NamingEN\endcsname} \newcommand{\printTranslationOptionDE}[1]{\csname #1NamingDE\endcsname} -\newcommand{\inline}[2][__NONAME__]{% - \ifthenelse{\equal{__NONAME__}{#1}}{% +\newcommand{\inline}[2][NONAME]{% + \ifthenelse{\equal{NONAME}{#1}}{% \anonymousInlineDescriptorTemplate{#2}{\printLabel{#2}}% }{% \inlineDescriptorTemplate{#2}{\printLabel{#2}}{#1}% From 35bd979c98800dcbfe010afbc4547d531f757f63 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Thu, 19 Feb 2026 19:49:59 +0100 Subject: [PATCH 11/32] Get working --- build/build.py | 9 +- build/labels.py | 9 +- janishutz-helpers.sty | 64 +-- janishutz-helpers.tex | 821 +++++++++++++++++++-------------------- src/config/00_main.sty | 14 +- src/core.sty | 3 + src/core/setup.sty | 31 ++ src/core/translation.sty | 3 +- src/style.sty | 33 -- src/style/counters.sty | 28 +- 10 files changed, 500 insertions(+), 515 deletions(-) diff --git a/build/build.py b/build/build.py index 676089f..2ba7ec9 100644 --- a/build/build.py +++ b/build/build.py @@ -29,7 +29,7 @@ def load_all_files_of_array(dirname: str, files: List[str]): data = "" for filename in files: with open(dirname + "/" + filename, "r") as file: - data += file.read() + "\n\n" + data += (file.read() + "\n\n").replace( 'RequirePackage', 'usepackage' ) return data @@ -39,13 +39,12 @@ if build_sty: output += f"\\ProvidesPackage{{janishutz-helpers}}[{datetime.datetime.now().date().isoformat()} v{version}]\n\n" output += load_all_files_of_array("../src/", ["core.sty"]) output += load_all_files_of_array("../src/config/", os.listdir("../src/config/")) -output += load_all_files_of_array("../src/", ["style.sty"]) -output += load_all_files_of_array("../src/core/", os.listdir("../src/core/")) -output += load_all_files_of_array("../src/style/", os.listdir("../src/style/")) - l = labels.generate_labels() output += l[0] + "\n\n" output += l[1] +output += load_all_files_of_array("../src/", ["style.sty"]) +output += load_all_files_of_array("../src/core/", os.listdir("../src/core/")) +output += load_all_files_of_array("../src/style/", os.listdir("../src/style/")) output += "\\endinput" diff --git a/build/labels.py b/build/labels.py index 810ebb6..9978e55 100644 --- a/build/labels.py +++ b/build/labels.py @@ -23,15 +23,15 @@ def generate_labels(): reset_func += f" \\setcounter{{{label}section}}{{0}}\n" data += f"\\newcounter{{{label}subsection}}[subsection]\n" - data += f"\\renewcommand{{\\the{label}subsection}}{{\\thesection.\\thesubsection.\\arabic{{{label}subsection}}}}\n" + data += f"\\renewcommand{{\\the{label}subsection}}{{\\thesubsection.\\arabic{{{label}subsection}}}}\n" reset_func += f" \\setcounter{{{label}subsection}}{{0}}\n" data += f"\\newcounter{{{label}subsubsection}}[subsubsection]\n" - data += f"\\renewcommand{{\\the{label}subsubsection}}{{\\thesection.\\thesubsection.\\thesubsubsection.\\arabic{{{label}subsubsection}}}}\n" + data += f"\\renewcommand{{\\the{label}subsubsection}}{{\\thesubsubsection.\\arabic{{{label}subsubsection}}}}\n" reset_func += f" \\setcounter{{{label}subsubsection}}{{0}}\n" data += f"\\newcounter{{{label}paragraph}}[paragraph]\n" - data += f"\\renewcommand{{\\the{label}paragraph}}{{\\thesection.\\thesubsection.\\thesubsubsection.\\theparagraph.\\arabic{{{label}paragraph}}}}\n" + data += f"\\renewcommand{{\\the{label}paragraph}}{{\\theparagraph.\\arabic{{{label}paragraph}}}}\n" reset_func += f" \\setcounter{{{label}paragraph}}{{0}}\n" # Generate tcolorboxes @@ -52,7 +52,8 @@ def generate_labels(): }}; }}, #1 }}\n\n""" - # TODO: If needed, add aliases for \short{definition} as e.g \shortdefinition + data += f"\\newcommand{{\\inline{label}}}[1][NONAME]{{\\inline[#1]{{{label}}}}}" + data += f"\\newcommand{{\\short{label}}}[1][NONAME]{{\\short[#1]{{{label}}}}}" reset_func += "\n \\setcounter{table}{0}\n" reset_func += " \\setcounter{figure}{0}\n" diff --git a/janishutz-helpers.sty b/janishutz-helpers.sty index 7f655c2..4eb3aae 100644 --- a/janishutz-helpers.sty +++ b/janishutz-helpers.sty @@ -211,37 +211,37 @@ % │ STYLE: Globals │ % └ ┘ % Global style configs for tcolorbox (to reduce bloat) -% \AtBeginDocument{ -% \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 -% } -% } -% } +\AtBeginDocument{ + \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 + } + } +} % ── Fonts ─────────────────────────────────────────────────────────── \newcommand{\setFont}[1]{\fontfamily{#1}\selectfont} @@ -1077,4 +1077,4 @@ \setcounter{table}{0} \setcounter{figure}{0} } -\endinput \ No newline at end of file +\endinput diff --git a/janishutz-helpers.tex b/janishutz-helpers.tex index 8c40f78..ce02df0 100644 --- a/janishutz-helpers.tex +++ b/janishutz-helpers.tex @@ -13,33 +13,33 @@ % Package imports -\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} -\RequirePackage{xstring} -\RequirePackage{etoolbox} +\usepackage[table, dvipsnames]{xcolor} +\usepackage{amsmath} +\usepackage{graphicx} +\usepackage{subcaption} +\usepackage[export]{adjustbox} +\usepackage[most]{tcolorbox} +\usepackage{cancel} +\usepackage{dsfont} +\usepackage{amssymb} +\usepackage{mathrsfs} +\usepackage{lipsum} +\usepackage{ulem} +\usepackage{soul} +\usepackage{parskip} +\usepackage{fancyhdr} +\usepackage{lastpage} +\usepackage{tocloft} +\usepackage{wasysym} +\usepackage{wrapfig} +\usepackage{multicol} +\usepackage{ifthen} +\usepackage[hidelinks]{hyperref} +\usepackage{enumitem} +\usepackage{gensymb} +\usepackage{pifont} +\usepackage{xstring} +\usepackage{etoolbox} \newcounter{descriptorShadeStrength} \newcounter{shadeStrength} @@ -47,6 +47,9 @@ \setcounter{secnumdepth}{4} +\newcommand{\printTranslationOptionEN}[1]{\csname #1NamingEN\endcsname} +\newcommand{\printTranslationOptionDE}[1]{\csname #1NamingDE\endcsname} + % ┌ ┐ % │ General config │ @@ -72,24 +75,20 @@ % You may here configure how they are generated. #1 is the full name. \newcommand{\shortDescriptorNameTemplate}[1]{\StrBefore[1]{#1}} -% Decide if the numbering should show a space preceding it. -% \newcommand{\useSpaceBeforeNumbering}{true} -% TODO: Remove above if works without - % Specify how the inline and short descriptors (e.g. Lemma, etc) are rendered. % - #1 is the name of the descriptor % - #2 is the number (correctly rendered according to settings and preceded with space if not disabled) % - #3 is the name passed (non-empty asserted) -\newcommand{\shortDescriptorTemplate}[4]{\bg{#1color}{\shortDescriptorNameTemplate{#1}#2} \textit{(#3)}\ } -\newcommand{\inlineDescriptorTemplate}[4]{\bg{#1color}{#1#2}: \textit{(#3)}\ } +\newcommand{\shortDescriptorTemplate}[3]{\bg{#1color}{\shortDescriptorNameTemplate{\namingTranslate{#1}} #2} \textit{(#3)}} +\newcommand{\inlineDescriptorTemplate}[3]{\bg{#1color}{\namingTranslate{#1} #2}: \textit{(#3)}} % These are used if no name is provided and argument #4 from above is the missing argument -\newcommand{\anonymousShortDescriptorTemplate}[3]{\bg{#1color}{\shortDescriptorNameTemplate{#1}#2}\ } -\newcommand{\anonymousInlineDescriptorTemplate}[3]{\bg{#3color}{#1#2}\ } +\newcommand{\anonymousShortDescriptorTemplate}[2]{\bg{#1color}{\shortDescriptorNameTemplate{\namingTranslate{#1}} #2}} +\newcommand{\anonymousInlineDescriptorTemplate}[2]{\bg{#1color}{\namingTranslate{#1} #2}} % background command config (draws a small box around the content) \newcommand{\backgroundPadding}{2pt} -\newcommand{\backgroundRounding}{0.1pt} +\newcommand{\backgroundRounding}{1pt} % ┌ ┐ @@ -205,42 +204,318 @@ \newcommand{\propertiesNamingDE}{Eigenschaften} +\newcounter{definitionnone} +\newcounter{definitionsection}[section] +\renewcommand{\thedefinitionsection}{\thesection.\arabic{definitionsection}} +\newcounter{definitionsubsection}[subsection] +\renewcommand{\thedefinitionsubsection}{\thesubsection.\arabic{definitionsubsection}} +\newcounter{definitionsubsubsection}[subsubsection] +\renewcommand{\thedefinitionsubsubsection}{\thesubsubsection.\arabic{definitionsubsubsection}} +\newcounter{definitionparagraph}[paragraph] +\renewcommand{\thedefinitionparagraph}{\theparagraph.\arabic{definitionparagraph}} +\newtcolorbox{definition}[2][]{ + mainboxstyle, + colback=definitioncolor!5!white, + colframe=definitioncolor!75!black, + colbacktitle=definitioncolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=definitioncolor!75!black, + fill=definitioncolor!75!black + ] at (frame.north east) + { + \large \tr{\definitionNamingEN}{\definitionNamingDE}\printLabel{definition} + }; + }, #1 + } + +\newcommand{\inlinedefinition}[1][NONAME]{\inline[#1]{definition}}\newcommand{\shortdefinition}[1][NONAME]{\short[#1]{definition}}\newcounter{examplenone} +\newcounter{examplesection}[section] +\renewcommand{\theexamplesection}{\thesection.\arabic{examplesection}} +\newcounter{examplesubsection}[subsection] +\renewcommand{\theexamplesubsection}{\thesubsection.\arabic{examplesubsection}} +\newcounter{examplesubsubsection}[subsubsection] +\renewcommand{\theexamplesubsubsection}{\thesubsubsection.\arabic{examplesubsubsection}} +\newcounter{exampleparagraph}[paragraph] +\renewcommand{\theexampleparagraph}{\theparagraph.\arabic{exampleparagraph}} +\newtcolorbox{example}[2][]{ + mainboxstyle, + colback=examplecolor!5!white, + colframe=examplecolor!75!black, + colbacktitle=examplecolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=examplecolor!75!black, + fill=examplecolor!75!black + ] at (frame.north east) + { + \large \tr{\exampleNamingEN}{\exampleNamingDE}\printLabel{example} + }; + }, #1 + } + +\newcommand{\inlineexample}[1][NONAME]{\inline[#1]{example}}\newcommand{\shortexample}[1][NONAME]{\short[#1]{example}}\newcounter{theoremnone} +\newcounter{theoremsection}[section] +\renewcommand{\thetheoremsection}{\thesection.\arabic{theoremsection}} +\newcounter{theoremsubsection}[subsection] +\renewcommand{\thetheoremsubsection}{\thesubsection.\arabic{theoremsubsection}} +\newcounter{theoremsubsubsection}[subsubsection] +\renewcommand{\thetheoremsubsubsection}{\thesubsubsection.\arabic{theoremsubsubsection}} +\newcounter{theoremparagraph}[paragraph] +\renewcommand{\thetheoremparagraph}{\theparagraph.\arabic{theoremparagraph}} +\newtcolorbox{theorem}[2][]{ + mainboxstyle, + colback=theoremcolor!5!white, + colframe=theoremcolor!75!black, + colbacktitle=theoremcolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=theoremcolor!75!black, + fill=theoremcolor!75!black + ] at (frame.north east) + { + \large \tr{\theoremNamingEN}{\theoremNamingDE}\printLabel{theorem} + }; + }, #1 + } + +\newcommand{\inlinetheorem}[1][NONAME]{\inline[#1]{theorem}}\newcommand{\shorttheorem}[1][NONAME]{\short[#1]{theorem}}\newcounter{lemmanone} +\newcounter{lemmasection}[section] +\renewcommand{\thelemmasection}{\thesection.\arabic{lemmasection}} +\newcounter{lemmasubsection}[subsection] +\renewcommand{\thelemmasubsection}{\thesubsection.\arabic{lemmasubsection}} +\newcounter{lemmasubsubsection}[subsubsection] +\renewcommand{\thelemmasubsubsection}{\thesubsubsection.\arabic{lemmasubsubsection}} +\newcounter{lemmaparagraph}[paragraph] +\renewcommand{\thelemmaparagraph}{\theparagraph.\arabic{lemmaparagraph}} +\newtcolorbox{lemma}[2][]{ + mainboxstyle, + colback=lemmacolor!5!white, + colframe=lemmacolor!75!black, + colbacktitle=lemmacolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=lemmacolor!75!black, + fill=lemmacolor!75!black + ] at (frame.north east) + { + \large \tr{\lemmaNamingEN}{\lemmaNamingDE}\printLabel{lemma} + }; + }, #1 + } + +\newcommand{\inlinelemma}[1][NONAME]{\inline[#1]{lemma}}\newcommand{\shortlemma}[1][NONAME]{\short[#1]{lemma}}\newcounter{corollarynone} +\newcounter{corollarysection}[section] +\renewcommand{\thecorollarysection}{\thesection.\arabic{corollarysection}} +\newcounter{corollarysubsection}[subsection] +\renewcommand{\thecorollarysubsection}{\thesubsection.\arabic{corollarysubsection}} +\newcounter{corollarysubsubsection}[subsubsection] +\renewcommand{\thecorollarysubsubsection}{\thesubsubsection.\arabic{corollarysubsubsection}} +\newcounter{corollaryparagraph}[paragraph] +\renewcommand{\thecorollaryparagraph}{\theparagraph.\arabic{corollaryparagraph}} +\newtcolorbox{corollary}[2][]{ + mainboxstyle, + colback=corollarycolor!5!white, + colframe=corollarycolor!75!black, + colbacktitle=corollarycolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=corollarycolor!75!black, + fill=corollarycolor!75!black + ] at (frame.north east) + { + \large \tr{\corollaryNamingEN}{\corollaryNamingDE}\printLabel{corollary} + }; + }, #1 + } + +\newcommand{\inlinecorollary}[1][NONAME]{\inline[#1]{corollary}}\newcommand{\shortcorollary}[1][NONAME]{\short[#1]{corollary}}\newcounter{propositionnone} +\newcounter{propositionsection}[section] +\renewcommand{\thepropositionsection}{\thesection.\arabic{propositionsection}} +\newcounter{propositionsubsection}[subsection] +\renewcommand{\thepropositionsubsection}{\thesubsection.\arabic{propositionsubsection}} +\newcounter{propositionsubsubsection}[subsubsection] +\renewcommand{\thepropositionsubsubsection}{\thesubsubsection.\arabic{propositionsubsubsection}} +\newcounter{propositionparagraph}[paragraph] +\renewcommand{\thepropositionparagraph}{\theparagraph.\arabic{propositionparagraph}} +\newtcolorbox{proposition}[2][]{ + mainboxstyle, + colback=propositioncolor!5!white, + colframe=propositioncolor!75!black, + colbacktitle=propositioncolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=propositioncolor!75!black, + fill=propositioncolor!75!black + ] at (frame.north east) + { + \large \tr{\propositionNamingEN}{\propositionNamingDE}\printLabel{proposition} + }; + }, #1 + } + +\newcommand{\inlineproposition}[1][NONAME]{\inline[#1]{proposition}}\newcommand{\shortproposition}[1][NONAME]{\short[#1]{proposition}}\newcounter{factnone} +\newcounter{factsection}[section] +\renewcommand{\thefactsection}{\thesection.\arabic{factsection}} +\newcounter{factsubsection}[subsection] +\renewcommand{\thefactsubsection}{\thesubsection.\arabic{factsubsection}} +\newcounter{factsubsubsection}[subsubsection] +\renewcommand{\thefactsubsubsection}{\thesubsubsection.\arabic{factsubsubsection}} +\newcounter{factparagraph}[paragraph] +\renewcommand{\thefactparagraph}{\theparagraph.\arabic{factparagraph}} +\newtcolorbox{fact}[2][]{ + mainboxstyle, + colback=factcolor!5!white, + colframe=factcolor!75!black, + colbacktitle=factcolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=factcolor!75!black, + fill=factcolor!75!black + ] at (frame.north east) + { + \large \tr{\factNamingEN}{\factNamingDE}\printLabel{fact} + }; + }, #1 + } + +\newcommand{\inlinefact}[1][NONAME]{\inline[#1]{fact}}\newcommand{\shortfact}[1][NONAME]{\short[#1]{fact}}\newcounter{formulanone} +\newcounter{formulasection}[section] +\renewcommand{\theformulasection}{\thesection.\arabic{formulasection}} +\newcounter{formulasubsection}[subsection] +\renewcommand{\theformulasubsection}{\thesubsection.\arabic{formulasubsection}} +\newcounter{formulasubsubsection}[subsubsection] +\renewcommand{\theformulasubsubsection}{\thesubsubsection.\arabic{formulasubsubsection}} +\newcounter{formulaparagraph}[paragraph] +\renewcommand{\theformulaparagraph}{\theparagraph.\arabic{formulaparagraph}} +\newtcolorbox{formula}[2][]{ + mainboxstyle, + colback=formulacolor!5!white, + colframe=formulacolor!75!black, + colbacktitle=formulacolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=formulacolor!75!black, + fill=formulacolor!75!black + ] at (frame.north east) + { + \large \tr{\formulaNamingEN}{\formulaNamingDE}\printLabel{formula} + }; + }, #1 + } + +\newcommand{\inlineformula}[1][NONAME]{\inline[#1]{formula}}\newcommand{\shortformula}[1][NONAME]{\short[#1]{formula}}\newcounter{remarknone} +\newcounter{remarksection}[section] +\renewcommand{\theremarksection}{\thesection.\arabic{remarksection}} +\newcounter{remarksubsection}[subsection] +\renewcommand{\theremarksubsection}{\thesubsection.\arabic{remarksubsection}} +\newcounter{remarksubsubsection}[subsubsection] +\renewcommand{\theremarksubsubsection}{\thesubsubsection.\arabic{remarksubsubsection}} +\newcounter{remarkparagraph}[paragraph] +\renewcommand{\theremarkparagraph}{\theparagraph.\arabic{remarkparagraph}} +\newtcolorbox{remark}[2][]{ + mainboxstyle, + colback=remarkcolor!5!white, + colframe=remarkcolor!75!black, + colbacktitle=remarkcolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=remarkcolor!75!black, + fill=remarkcolor!75!black + ] at (frame.north east) + { + \large \tr{\remarkNamingEN}{\remarkNamingDE}\printLabel{remark} + }; + }, #1 + } + +\newcommand{\inlineremark}[1][NONAME]{\inline[#1]{remark}}\newcommand{\shortremark}[1][NONAME]{\short[#1]{remark}}\newcounter{combinenone} +\newcounter{combinesection}[section] +\renewcommand{\thecombinesection}{\thesection.\arabic{combinesection}} +\newcounter{combinesubsection}[subsection] +\renewcommand{\thecombinesubsection}{\thesubsection.\arabic{combinesubsection}} +\newcounter{combinesubsubsection}[subsubsection] +\renewcommand{\thecombinesubsubsection}{\thesubsubsection.\arabic{combinesubsubsection}} +\newcounter{combineparagraph}[paragraph] +\renewcommand{\thecombineparagraph}{\theparagraph.\arabic{combineparagraph}} +\newcommand{\inlinecombine}[1][NONAME]{\inline[#1]{combine}}\newcommand{\shortcombine}[1][NONAME]{\short[#1]{combine}} + +\newcommand{\newsectionNoPB}{ + \setcounter{definitionnone}{0} + \setcounter{definitionsection}{0} + \setcounter{definitionsubsection}{0} + \setcounter{definitionsubsubsection}{0} + \setcounter{definitionparagraph}{0} + + \setcounter{examplenone}{0} + \setcounter{examplesection}{0} + \setcounter{examplesubsection}{0} + \setcounter{examplesubsubsection}{0} + \setcounter{exampleparagraph}{0} + + \setcounter{theoremnone}{0} + \setcounter{theoremsection}{0} + \setcounter{theoremsubsection}{0} + \setcounter{theoremsubsubsection}{0} + \setcounter{theoremparagraph}{0} + + \setcounter{lemmanone}{0} + \setcounter{lemmasection}{0} + \setcounter{lemmasubsection}{0} + \setcounter{lemmasubsubsection}{0} + \setcounter{lemmaparagraph}{0} + + \setcounter{corollarynone}{0} + \setcounter{corollarysection}{0} + \setcounter{corollarysubsection}{0} + \setcounter{corollarysubsubsection}{0} + \setcounter{corollaryparagraph}{0} + + \setcounter{propositionnone}{0} + \setcounter{propositionsection}{0} + \setcounter{propositionsubsection}{0} + \setcounter{propositionsubsubsection}{0} + \setcounter{propositionparagraph}{0} + + \setcounter{factnone}{0} + \setcounter{factsection}{0} + \setcounter{factsubsection}{0} + \setcounter{factsubsubsection}{0} + \setcounter{factparagraph}{0} + + \setcounter{formulanone}{0} + \setcounter{formulasection}{0} + \setcounter{formulasubsection}{0} + \setcounter{formulasubsubsection}{0} + \setcounter{formulaparagraph}{0} + + \setcounter{remarknone}{0} + \setcounter{remarksection}{0} + \setcounter{remarksubsection}{0} + \setcounter{remarksubsubsection}{0} + \setcounter{remarkparagraph}{0} + + \setcounter{combinenone}{0} + \setcounter{combinesection}{0} + \setcounter{combinesubsection}{0} + \setcounter{combinesubsubsection}{0} + \setcounter{combineparagraph}{0} + + \setcounter{table}{0} + \setcounter{figure}{0} +} % ┌ ┐ % │ STYLE: Globals │ % └ ┘ -% Global style configs for tcolorbox (to reduce bloat) -% \AtBeginDocument{ -% \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 -% } -% } -% } - % ── Fonts ─────────────────────────────────────────────────────────── \newcommand{\setFont}[1]{\fontfamily{#1}\selectfont} \newcommand{\setFontType}[1]{ @@ -423,8 +698,8 @@ % For using index package \newcommand{\prepareIndex}{ - \RequirePackage[T1]{fontenc} - \RequirePackage{imakeidx} + \usepackage[T1]{fontenc} + \usepackage{imakeidx} \makeindex } @@ -438,8 +713,8 @@ % │ Tables │ % └ ┘ -\RequirePackage{booktabs} -\RequirePackage{tabulary} +\usepackage{booktabs} +\usepackage{tabulary} % Create new table. #1 Layout, #2 title row \newenvironment{tables}[2]{ @@ -470,9 +745,10 @@ % │ Translation │ % └ ┘ \newcommand{\translate}[2]{% - \ifthenelse{\equal{\currentLanguage}{en}}{#1}{#2} + \ifthenelse{\equal{\currentLanguage}{en}}{#1}{#2}% } \newcommand{\tr}[2]{\translate{#1}{#2}} +\newcommand{\namingTranslate}[1]{\translate{\printTranslationOptionEN{#1}}{\printTranslationOptionEN{#1}}} % Translation aids (commonly used) \newcommand{\trif}{\translate{if }{falls }} @@ -494,7 +770,7 @@ % Set up the latex document, configure author, title (as first argument), as well as headers and footers \newcommand{\setup}[1]{ \typeout{[Setup] Setting up...} - \RequirePackage[a4paper,textwidth=17.5cm,textheight=25cm,includehead]{geometry} + \usepackage[a4paper,textwidth=17.5cm,textheight=25cm,includehead]{geometry} \title{\Huge \textbf{#1}} \author{\authorTitle} \makeatletter @@ -517,7 +793,7 @@ % Set up the latex document, only configuring the author, title and page size \newcommand{\setupBarebones}[1]{ - \RequirePackage[a4paper,textwidth=17.5cm,textheight=25cm,includehead]{geometry} + \usepackage[a4paper,textwidth=17.5cm,textheight=25cm,includehead]{geometry} \title{\Huge \textbf{#1}} \author{\authorTitle} } @@ -526,7 +802,7 @@ % TODO: Use landscape and columns for new version % Set up the latex document for exam summaries (Extra wide body, small margins, no header) \newcommand{\setupCheatSheet}[1]{ - \RequirePackage[a4paper,textwidth=20cm,textheight=28.5cm]{geometry} + \usepackage[a4paper,textwidth=20cm,textheight=28.5cm]{geometry} \title{\Huge \textbf{#1}} \author{\authorTitle} } @@ -537,9 +813,40 @@ % └ ┘ % Start document command (required) \newcommand{\startDocument}{ + % TODO: Cheat sheet needs different setup \maketitle \pagestyle{fancy} \thispagestyle{fancy} + + \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 + } + } } @@ -549,13 +856,13 @@ % ░▒█▄▄▀░░▀▀░░▀░░▒▀░█░░░░░▀▀▀░░▀░░▀▀▀░▀░▀▀░░░▒█▄▄▄█░▀▀▀░▀▀▀░▀▀▀░▀░░▀░▀▀▀░▀▀▀ % Extra imports -\RequirePackage{stmaryrd} -\RequirePackage{algorithm} -\RequirePackage{algpseudocodex} -\RequirePackage{setspace} -\RequirePackage{verbatim} -\RequirePackage{turnstile} -\RequirePackage{forloop} +\usepackage{stmaryrd} +\usepackage{algorithm} +\usepackage{algpseudocodex} +\usepackage{setspace} +\usepackage{verbatim} +\usepackage{turnstile} +\usepackage{forloop} \newcommand{\Indent}{\hspace{\algorithmicindent}} @@ -647,25 +954,24 @@ % ── Label generator ───────────────────────────────────────────────── \newcommand{\printNumberingConfigForDescriptor}[1]{\csname #1numbering\endcsname} -\newcommand{\printCounter}[1]{\csname the#1\endcsname} +\newcommand{\printCounter}[1]{\refstepcounter{#1}\csname the#1\endcsname} \newcommand{\printLabel}[1]{% \ifcsdef{#1numbering}{% Extra config present - % TODO: Increment - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{ + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{% \printCounter{#1\subsectionnumbering}% - }{ - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{separate}}{ + }{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{separate}}{% \printCounter{#1\subsectionnumbering}% - }{ - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{ + }{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{% \printCounter{combined\subsectionnumbering}% - }{} - } - } + }{}% + }% + }% }{% \labelPrintBackendRoutine{#1}% - } + }% } \newcommand{\labelPrintBackendRoutine}[1]{ \ifthenelse{\equal{\numberingpreset}{combined}}{ @@ -678,22 +984,16 @@ } % Inline environments (inline) -\newcommand{\printTranslationOptionEN}[1]{\csname #1NamingEN\endcsname} -\newcommand{\printTranslationOptionDE}[1]{\csname #1NamingDE\endcsname} - \newcommand{\inline}[2][NONAME]{% \ifthenelse{\equal{NONAME}{#1}}{% - % \anonymousInlineDescriptorTemplate{#2}{\printLabel{#2}}% - \anonymousInlineDescriptorTemplate{#2}{Test} - \printLabel{#2} + \anonymousInlineDescriptorTemplate{#2}{\printLabel{#2}}% }{% - % \inlineDescriptorTemplate{#2}{\printLabel{#2}}{#1}% - #2 + \inlineDescriptorTemplate{#2}{\printLabel{#2}}{#1}% } } -\newcommand{\short}[2][__NONAME__]{% - \ifthenelse{\equal{__NONAME__}{#1}}{% +\newcommand{\short}[2][NONAME]{% + \ifthenelse{\equal{NONAME}{#1}}{% \anonymousShortDescriptorTemplate{#2}{\printLabel{#2}}% }{% \shortDescriptorTemplate{#2}{\printLabel{#2}}{#1}% @@ -754,7 +1054,7 @@ % ┌ ┐ % │ STYLE: Computer Science │ % └ ┘ -\RequirePackage{forest} +\usepackage{forest} \tikzset{algpxIndentLine/.style={draw=lightgray}} \algrenewcommand{\alglinenumber}[1]{#1} @@ -770,313 +1070,4 @@ } -\newcounter{definitionnone} -\newcounter{definitionsection}[section] -\renewcommand{\thedefinitionsection}{\thesection.\arabic{definitionsection}} -\newcounter{definitionsubsection}[subsection] -\renewcommand{\thedefinitionsubsection}{\thesection.\thesubsection.\arabic{definitionsubsection}} -\newcounter{definitionsubsubsection}[subsubsection] -\renewcommand{\thedefinitionsubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{definitionsubsubsection}} -\newcounter{definitionparagraph}[paragraph] -\renewcommand{\thedefinitionparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{definitionparagraph}} -\newtcolorbox{definition}[2][]{ - mainboxstyle, - colback=definitioncolor!5!white, - colframe=definitioncolor!75!black, - colbacktitle=definitioncolor!75!black, - title={\large #2}, - overlay={ - \node[overlaystyle, - draw=definitioncolor!75!black, - fill=definitioncolor!75!black - ] at (frame.north east) - { - \large \tr{\definitionNamingEN}{\definitionNamingDE}\printLabel{definition} - }; - }, #1 - } - -\newcounter{examplenone} -\newcounter{examplesection}[section] -\renewcommand{\theexamplesection}{\thesection.\arabic{examplesection}} -\newcounter{examplesubsection}[subsection] -\renewcommand{\theexamplesubsection}{\thesection.\thesubsection.\arabic{examplesubsection}} -\newcounter{examplesubsubsection}[subsubsection] -\renewcommand{\theexamplesubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{examplesubsubsection}} -\newcounter{exampleparagraph}[paragraph] -\renewcommand{\theexampleparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{exampleparagraph}} -\newtcolorbox{example}[2][]{ - mainboxstyle, - colback=examplecolor!5!white, - colframe=examplecolor!75!black, - colbacktitle=examplecolor!75!black, - title={\large #2}, - overlay={ - \node[overlaystyle, - draw=examplecolor!75!black, - fill=examplecolor!75!black - ] at (frame.north east) - { - \large \tr{\exampleNamingEN}{\exampleNamingDE}\printLabel{example} - }; - }, #1 - } - -\newcounter{theoremnone} -\newcounter{theoremsection}[section] -\renewcommand{\thetheoremsection}{\thesection.\arabic{theoremsection}} -\newcounter{theoremsubsection}[subsection] -\renewcommand{\thetheoremsubsection}{\thesection.\thesubsection.\arabic{theoremsubsection}} -\newcounter{theoremsubsubsection}[subsubsection] -\renewcommand{\thetheoremsubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{theoremsubsubsection}} -\newcounter{theoremparagraph}[paragraph] -\renewcommand{\thetheoremparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{theoremparagraph}} -\newtcolorbox{theorem}[2][]{ - mainboxstyle, - colback=theoremcolor!5!white, - colframe=theoremcolor!75!black, - colbacktitle=theoremcolor!75!black, - title={\large #2}, - overlay={ - \node[overlaystyle, - draw=theoremcolor!75!black, - fill=theoremcolor!75!black - ] at (frame.north east) - { - \large \tr{\theoremNamingEN}{\theoremNamingDE}\printLabel{theorem} - }; - }, #1 - } - -\newcounter{lemmanone} -\newcounter{lemmasection}[section] -\renewcommand{\thelemmasection}{\thesection.\arabic{lemmasection}} -\newcounter{lemmasubsection}[subsection] -\renewcommand{\thelemmasubsection}{\thesection.\thesubsection.\arabic{lemmasubsection}} -\newcounter{lemmasubsubsection}[subsubsection] -\renewcommand{\thelemmasubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{lemmasubsubsection}} -\newcounter{lemmaparagraph}[paragraph] -\renewcommand{\thelemmaparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{lemmaparagraph}} -\newtcolorbox{lemma}[2][]{ - mainboxstyle, - colback=lemmacolor!5!white, - colframe=lemmacolor!75!black, - colbacktitle=lemmacolor!75!black, - title={\large #2}, - overlay={ - \node[overlaystyle, - draw=lemmacolor!75!black, - fill=lemmacolor!75!black - ] at (frame.north east) - { - \large \tr{\lemmaNamingEN}{\lemmaNamingDE}\printLabel{lemma} - }; - }, #1 - } - -\newcounter{corollarynone} -\newcounter{corollarysection}[section] -\renewcommand{\thecorollarysection}{\thesection.\arabic{corollarysection}} -\newcounter{corollarysubsection}[subsection] -\renewcommand{\thecorollarysubsection}{\thesection.\thesubsection.\arabic{corollarysubsection}} -\newcounter{corollarysubsubsection}[subsubsection] -\renewcommand{\thecorollarysubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{corollarysubsubsection}} -\newcounter{corollaryparagraph}[paragraph] -\renewcommand{\thecorollaryparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{corollaryparagraph}} -\newtcolorbox{corollary}[2][]{ - mainboxstyle, - colback=corollarycolor!5!white, - colframe=corollarycolor!75!black, - colbacktitle=corollarycolor!75!black, - title={\large #2}, - overlay={ - \node[overlaystyle, - draw=corollarycolor!75!black, - fill=corollarycolor!75!black - ] at (frame.north east) - { - \large \tr{\corollaryNamingEN}{\corollaryNamingDE}\printLabel{corollary} - }; - }, #1 - } - -\newcounter{propositionnone} -\newcounter{propositionsection}[section] -\renewcommand{\thepropositionsection}{\thesection.\arabic{propositionsection}} -\newcounter{propositionsubsection}[subsection] -\renewcommand{\thepropositionsubsection}{\thesection.\thesubsection.\arabic{propositionsubsection}} -\newcounter{propositionsubsubsection}[subsubsection] -\renewcommand{\thepropositionsubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{propositionsubsubsection}} -\newcounter{propositionparagraph}[paragraph] -\renewcommand{\thepropositionparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{propositionparagraph}} -\newtcolorbox{proposition}[2][]{ - mainboxstyle, - colback=propositioncolor!5!white, - colframe=propositioncolor!75!black, - colbacktitle=propositioncolor!75!black, - title={\large #2}, - overlay={ - \node[overlaystyle, - draw=propositioncolor!75!black, - fill=propositioncolor!75!black - ] at (frame.north east) - { - \large \tr{\propositionNamingEN}{\propositionNamingDE}\printLabel{proposition} - }; - }, #1 - } - -\newcounter{factnone} -\newcounter{factsection}[section] -\renewcommand{\thefactsection}{\thesection.\arabic{factsection}} -\newcounter{factsubsection}[subsection] -\renewcommand{\thefactsubsection}{\thesection.\thesubsection.\arabic{factsubsection}} -\newcounter{factsubsubsection}[subsubsection] -\renewcommand{\thefactsubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{factsubsubsection}} -\newcounter{factparagraph}[paragraph] -\renewcommand{\thefactparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{factparagraph}} -\newtcolorbox{fact}[2][]{ - mainboxstyle, - colback=factcolor!5!white, - colframe=factcolor!75!black, - colbacktitle=factcolor!75!black, - title={\large #2}, - overlay={ - \node[overlaystyle, - draw=factcolor!75!black, - fill=factcolor!75!black - ] at (frame.north east) - { - \large \tr{\factNamingEN}{\factNamingDE}\printLabel{fact} - }; - }, #1 - } - -\newcounter{formulanone} -\newcounter{formulasection}[section] -\renewcommand{\theformulasection}{\thesection.\arabic{formulasection}} -\newcounter{formulasubsection}[subsection] -\renewcommand{\theformulasubsection}{\thesection.\thesubsection.\arabic{formulasubsection}} -\newcounter{formulasubsubsection}[subsubsection] -\renewcommand{\theformulasubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{formulasubsubsection}} -\newcounter{formulaparagraph}[paragraph] -\renewcommand{\theformulaparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{formulaparagraph}} -\newtcolorbox{formula}[2][]{ - mainboxstyle, - colback=formulacolor!5!white, - colframe=formulacolor!75!black, - colbacktitle=formulacolor!75!black, - title={\large #2}, - overlay={ - \node[overlaystyle, - draw=formulacolor!75!black, - fill=formulacolor!75!black - ] at (frame.north east) - { - \large \tr{\formulaNamingEN}{\formulaNamingDE}\printLabel{formula} - }; - }, #1 - } - -\newcounter{remarknone} -\newcounter{remarksection}[section] -\renewcommand{\theremarksection}{\thesection.\arabic{remarksection}} -\newcounter{remarksubsection}[subsection] -\renewcommand{\theremarksubsection}{\thesection.\thesubsection.\arabic{remarksubsection}} -\newcounter{remarksubsubsection}[subsubsection] -\renewcommand{\theremarksubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{remarksubsubsection}} -\newcounter{remarkparagraph}[paragraph] -\renewcommand{\theremarkparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{remarkparagraph}} -\newtcolorbox{remark}[2][]{ - mainboxstyle, - colback=remarkcolor!5!white, - colframe=remarkcolor!75!black, - colbacktitle=remarkcolor!75!black, - title={\large #2}, - overlay={ - \node[overlaystyle, - draw=remarkcolor!75!black, - fill=remarkcolor!75!black - ] at (frame.north east) - { - \large \tr{\remarkNamingEN}{\remarkNamingDE}\printLabel{remark} - }; - }, #1 - } - -\newcounter{combinenone} -\newcounter{combinesection}[section] -\renewcommand{\thecombinesection}{\thesection.\arabic{combinesection}} -\newcounter{combinesubsection}[subsection] -\renewcommand{\thecombinesubsection}{\thesection.\thesubsection.\arabic{combinesubsection}} -\newcounter{combinesubsubsection}[subsubsection] -\renewcommand{\thecombinesubsubsection}{\thesection.\thesubsection.\thesubsubsection.\arabic{combinesubsubsection}} -\newcounter{combineparagraph}[paragraph] -\renewcommand{\thecombineparagraph}{\thesection.\thesubsection.\thesubsubsection.\theparagraph.\arabic{combineparagraph}} - - -\newcommand{\newsectionNoPB}{ - \setcounter{definitionnone}{0} - \setcounter{definitionsection}{0} - \setcounter{definitionsubsection}{0} - \setcounter{definitionsubsubsection}{0} - \setcounter{definitionparagraph}{0} - - \setcounter{examplenone}{0} - \setcounter{examplesection}{0} - \setcounter{examplesubsection}{0} - \setcounter{examplesubsubsection}{0} - \setcounter{exampleparagraph}{0} - - \setcounter{theoremnone}{0} - \setcounter{theoremsection}{0} - \setcounter{theoremsubsection}{0} - \setcounter{theoremsubsubsection}{0} - \setcounter{theoremparagraph}{0} - - \setcounter{lemmanone}{0} - \setcounter{lemmasection}{0} - \setcounter{lemmasubsection}{0} - \setcounter{lemmasubsubsection}{0} - \setcounter{lemmaparagraph}{0} - - \setcounter{corollarynone}{0} - \setcounter{corollarysection}{0} - \setcounter{corollarysubsection}{0} - \setcounter{corollarysubsubsection}{0} - \setcounter{corollaryparagraph}{0} - - \setcounter{propositionnone}{0} - \setcounter{propositionsection}{0} - \setcounter{propositionsubsection}{0} - \setcounter{propositionsubsubsection}{0} - \setcounter{propositionparagraph}{0} - - \setcounter{factnone}{0} - \setcounter{factsection}{0} - \setcounter{factsubsection}{0} - \setcounter{factsubsubsection}{0} - \setcounter{factparagraph}{0} - - \setcounter{formulanone}{0} - \setcounter{formulasection}{0} - \setcounter{formulasubsection}{0} - \setcounter{formulasubsubsection}{0} - \setcounter{formulaparagraph}{0} - - \setcounter{remarknone}{0} - \setcounter{remarksection}{0} - \setcounter{remarksubsection}{0} - \setcounter{remarksubsubsection}{0} - \setcounter{remarkparagraph}{0} - - \setcounter{combinenone}{0} - \setcounter{combinesection}{0} - \setcounter{combinesubsection}{0} - \setcounter{combinesubsubsection}{0} - \setcounter{combineparagraph}{0} - - \setcounter{table}{0} - \setcounter{figure}{0} -} \endinput \ No newline at end of file diff --git a/src/config/00_main.sty b/src/config/00_main.sty index 4fbe26f..fd99a2c 100644 --- a/src/config/00_main.sty +++ b/src/config/00_main.sty @@ -22,21 +22,17 @@ % You may here configure how they are generated. #1 is the full name. \newcommand{\shortDescriptorNameTemplate}[1]{\StrBefore[1]{#1}} -% Decide if the numbering should show a space preceding it. -% \newcommand{\useSpaceBeforeNumbering}{true} -% TODO: Remove above if works without - % Specify how the inline and short descriptors (e.g. Lemma, etc) are rendered. % - #1 is the name of the descriptor % - #2 is the number (correctly rendered according to settings and preceded with space if not disabled) % - #3 is the name passed (non-empty asserted) -\newcommand{\shortDescriptorTemplate}[4]{\bg{#1color}{\shortDescriptorNameTemplate{#1}#2} \textit{(#3)}\ } -\newcommand{\inlineDescriptorTemplate}[4]{\bg{#1color}{#1#2}: \textit{(#3)}\ } +\newcommand{\shortDescriptorTemplate}[3]{\bg{#1color}{\shortDescriptorNameTemplate{\namingTranslate{#1}} #2} \textit{(#3)}} +\newcommand{\inlineDescriptorTemplate}[3]{\bg{#1color}{\namingTranslate{#1} #2}: \textit{(#3)}} % These are used if no name is provided and argument #4 from above is the missing argument -\newcommand{\anonymousShortDescriptorTemplate}[3]{\bg{#1color}{\shortDescriptorNameTemplate{#1}#2}\ } -\newcommand{\anonymousInlineDescriptorTemplate}[3]{\bg{#3color}{#1#2}\ } +\newcommand{\anonymousShortDescriptorTemplate}[2]{\bg{#1color}{\shortDescriptorNameTemplate{\namingTranslate{#1}} #2}} +\newcommand{\anonymousInlineDescriptorTemplate}[2]{\bg{#1color}{\namingTranslate{#1} #2}} % background command config (draws a small box around the content) \newcommand{\backgroundPadding}{2pt} -\newcommand{\backgroundRounding}{0.1pt} +\newcommand{\backgroundRounding}{1pt} diff --git a/src/core.sty b/src/core.sty index ecd4898..038814a 100644 --- a/src/core.sty +++ b/src/core.sty @@ -32,3 +32,6 @@ \newcommand{\currentLanguage}{en} \setcounter{secnumdepth}{4} + +\newcommand{\printTranslationOptionEN}[1]{\csname #1NamingEN\endcsname} +\newcommand{\printTranslationOptionDE}[1]{\csname #1NamingDE\endcsname} diff --git a/src/core/setup.sty b/src/core/setup.sty index d29dc8e..7707e7e 100644 --- a/src/core/setup.sty +++ b/src/core/setup.sty @@ -47,7 +47,38 @@ % └ ┘ % Start document command (required) \newcommand{\startDocument}{ + % TODO: Cheat sheet needs different setup \maketitle \pagestyle{fancy} \thispagestyle{fancy} + + \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 + } + } } diff --git a/src/core/translation.sty b/src/core/translation.sty index 1108eb4..48bf535 100644 --- a/src/core/translation.sty +++ b/src/core/translation.sty @@ -2,9 +2,10 @@ % │ Translation │ % └ ┘ \newcommand{\translate}[2]{% - \ifthenelse{\equal{\currentLanguage}{en}}{#1}{#2} + \ifthenelse{\equal{\currentLanguage}{en}}{#1}{#2}% } \newcommand{\tr}[2]{\translate{#1}{#2}} +\newcommand{\namingTranslate}[1]{\translate{\printTranslationOptionEN{#1}}{\printTranslationOptionEN{#1}}} % Translation aids (commonly used) \newcommand{\trif}{\translate{if }{falls }} diff --git a/src/style.sty b/src/style.sty index fe3ae85..1b99ce4 100644 --- a/src/style.sty +++ b/src/style.sty @@ -1,39 +1,6 @@ % ┌ ┐ % │ STYLE: Globals │ % └ ┘ -% Global style configs for tcolorbox (to reduce bloat) -% \AtBeginDocument{ -% \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 -% } -% } -% } - % ── Fonts ─────────────────────────────────────────────────────────── \newcommand{\setFont}[1]{\fontfamily{#1}\selectfont} \newcommand{\setFontType}[1]{ diff --git a/src/style/counters.sty b/src/style/counters.sty index 585c894..2f31b03 100644 --- a/src/style/counters.sty +++ b/src/style/counters.sty @@ -1,24 +1,23 @@ % ── Label generator ───────────────────────────────────────────────── \newcommand{\printNumberingConfigForDescriptor}[1]{\csname #1numbering\endcsname} -\newcommand{\printCounter}[1]{\csname the#1\endcsname} +\newcommand{\printCounter}[1]{\refstepcounter{#1}\csname the#1\endcsname} \newcommand{\printLabel}[1]{% \ifcsdef{#1numbering}{% Extra config present - % TODO: Increment - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{ + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{% \printCounter{#1\subsectionnumbering}% - }{ - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{separate}}{ + }{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{separate}}{% \printCounter{#1\subsectionnumbering}% - }{ - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{ + }{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{% \printCounter{combined\subsectionnumbering}% - }{} - } - } + }{}% + }% + }% }{% \labelPrintBackendRoutine{#1}% - } + }% } \newcommand{\labelPrintBackendRoutine}[1]{ \ifthenelse{\equal{\numberingpreset}{combined}}{ @@ -31,9 +30,6 @@ } % Inline environments (inline) -\newcommand{\printTranslationOptionEN}[1]{\csname #1NamingEN\endcsname} -\newcommand{\printTranslationOptionDE}[1]{\csname #1NamingDE\endcsname} - \newcommand{\inline}[2][NONAME]{% \ifthenelse{\equal{NONAME}{#1}}{% \anonymousInlineDescriptorTemplate{#2}{\printLabel{#2}}% @@ -42,8 +38,8 @@ } } -\newcommand{\short}[2][__NONAME__]{% - \ifthenelse{\equal{__NONAME__}{#1}}{% +\newcommand{\short}[2][NONAME]{% + \ifthenelse{\equal{NONAME}{#1}}{% \anonymousShortDescriptorTemplate{#2}{\printLabel{#2}}% }{% \shortDescriptorTemplate{#2}{\printLabel{#2}}{#1}% From 2c37a724eeee0837444eb6ee4b5270978a860038 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Fri, 20 Feb 2026 18:28:34 +0100 Subject: [PATCH 12/32] Add minted back --- janishutz-helpers.tex | 49 +++++++++++++++++++++++++++++++++++++++++++ src/core/minted.sty | 47 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 src/core/minted.sty diff --git a/janishutz-helpers.tex b/janishutz-helpers.tex index ce02df0..2414119 100644 --- a/janishutz-helpers.tex +++ b/janishutz-helpers.tex @@ -692,6 +692,55 @@ \DeclareMathOperator\arcsinh{arcsinh} +% ┌ ┐ +% │ Minted │ +% └ ┘ +\usepackage{minted} +\usepackage{fancyvrb} + +% Args: Code. +% Alternative: Use \mint{}|code| +\newcommand{\inlinecode}[1]{\shade{gray}{\texttt{#1}}} + +% Args: Language, Code +\newenvironment{code}[1]{ + \VerbatimEnvironment + \begin{minted}[ + autogobble, + breaklines, + breakindentnchars=2, + frame=lines, + framesep=2mm, + mathescape, + baselinestretch=1.1, + linenos + ]{#1}} +{\end{minted}} + +% Args: Language, file relative to root file +\newcommand{\inputcode}[2]{ + \inputminted[ + autogobble, + breaklines, + breakindentnchars=2, + frame=lines, + framesep=2mm, + mathescape, + baselinestretch=1.1, + linenos + ]{#1}{#2} +} + +% Args: Language, Base directory (with trailing slash), file (no slash at start) +\newcommand{\inputcodewithfilename}[3]{ + \begin{figure}[h!] + \texttt{File: \detokenize{#3}} + \rmvspace + \inputcode{#1}{#2#3} + \end{figure} +} + + % ┌ ┐ % │ Index │ % └ ┘ diff --git a/src/core/minted.sty b/src/core/minted.sty new file mode 100644 index 0000000..8c85cce --- /dev/null +++ b/src/core/minted.sty @@ -0,0 +1,47 @@ +% ┌ ┐ +% │ Minted │ +% └ ┘ +\RequirePackage{minted} +\RequirePackage{fancyvrb} + +% Args: Code. +% Alternative: Use \mint{}|code| +\newcommand{\inlinecode}[1]{\shade{gray}{\texttt{#1}}} + +% Args: Language, Code +\newenvironment{code}[1]{ + \VerbatimEnvironment + \begin{minted}[ + autogobble, + breaklines, + breakindentnchars=2, + frame=lines, + framesep=2mm, + mathescape, + baselinestretch=1.1, + linenos + ]{#1}} +{\end{minted}} + +% Args: Language, file relative to root file +\newcommand{\inputcode}[2]{ + \inputminted[ + autogobble, + breaklines, + breakindentnchars=2, + frame=lines, + framesep=2mm, + mathescape, + baselinestretch=1.1, + linenos + ]{#1}{#2} +} + +% Args: Language, Base directory (with trailing slash), file (no slash at start) +\newcommand{\inputcodewithfilename}[3]{ + \begin{figure}[h!] + \texttt{File: \detokenize{#3}} + \rmvspace + \inputcode{#1}{#2#3} + \end{figure} +} From 2a592753bf36d8c30023e10b372797cbfa6ffec4 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sat, 21 Feb 2026 11:32:53 +0100 Subject: [PATCH 13/32] Update some old commands --- build/labels.py | 2 +- janishutz-helpers.tex | 306 +++++++++++++++++--------- src/config/numbering.sty | 2 + src/core/bib.sty | 19 ++ src/core/counters.sty | 148 +++++++++++++ src/core/glossary.sty | 12 + src/style/counters.sty | 97 -------- src/style/environments.sty | 16 ++ src/style/{common-tcb.sty => tcb.sty} | 0 9 files changed, 404 insertions(+), 198 deletions(-) create mode 100644 src/core/bib.sty create mode 100644 src/core/counters.sty create mode 100644 src/core/glossary.sty delete mode 100644 src/style/counters.sty create mode 100644 src/style/environments.sty rename src/style/{common-tcb.sty => tcb.sty} (100%) diff --git a/build/labels.py b/build/labels.py index 9978e55..d896ba9 100644 --- a/build/labels.py +++ b/build/labels.py @@ -1,7 +1,7 @@ # Auto-generate labels and version numbers def generate_labels(): data = "" - reset_func = "\\newcommand{\\newsectionNoPB}{" + reset_func = "\\newcommand{\\resetNumbering}{" for label in [ "definition", diff --git a/janishutz-helpers.tex b/janishutz-helpers.tex index 2414119..59f9127 100644 --- a/janishutz-helpers.tex +++ b/janishutz-helpers.tex @@ -159,6 +159,8 @@ \newcommand{\usagenumbering}{default} \newcommand{\recallnumbering}{default} \newcommand{\propertiesnumbering}{default} +\newcommand{\tablenumbering}{default} +\newcommand{\figurenumbering}{default} % ┌ ┐ @@ -449,7 +451,7 @@ \renewcommand{\thecombineparagraph}{\theparagraph.\arabic{combineparagraph}} \newcommand{\inlinecombine}[1][NONAME]{\inline[#1]{combine}}\newcommand{\shortcombine}[1][NONAME]{\short[#1]{combine}} -\newcommand{\newsectionNoPB}{ +\newcommand{\resetNumbering}{ \setcounter{definitionnone}{0} \setcounter{definitionsection}{0} \setcounter{definitionsubsection}{0} @@ -595,6 +597,27 @@ } +% ___ _ _____ _ _ +% ( _ \ _( ) (_ _) ( ) ( ) +% | (_) )_) |_ | | __ \ \/ / +% | _ (| | _ \ | | / __ \ ) ( +% | (_) ) | |_) ) | | ( ___// /\ \ +% (____/(_)_ __/ (_) \____)_) (_) + +% Configs if you want to use BibTeX + +\newcommand{\setupBibtex}[1]{ + \usepackage{biblatex} + \usepackage[nottoc, numbib]{tocbibind} + \addbibresource{#1} +} + +\newcommand{\printbib}{ + \addcontentsline{toc}{section}{\translate{Sources}{Quellen}} + \printbibliography[title=\translate{Sources}{Quellen}] +} + + % ┌ ┐ % │ Math │ % └ ┘ @@ -790,6 +813,170 @@ } +% ── Label generator ───────────────────────────────────────────────── +\newcommand{\printNumberingConfigForDescriptor}[1]{\csname #1numbering\endcsname} +\newcommand{\printCounter}[1]{\refstepcounter{#1}\csname the#1\endcsname} + +\newcommand{\printLabel}[1]{% + \ifthenelse{\boolean{numberingDisabled}}{}{ + \ifcsdef{#1numbering}{% Extra config present + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{% + \labelPrintBackendRoutine{#1}% + }{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{separate}}{% + \printCounter{#1\subsectionnumbering}% + }{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{% + \printCounter{combined\subsectionnumbering}% + }{}% + }% + }% + }{% + \labelPrintBackendRoutine{#1}% + }% + }% +} + +\newcommand{\labelPrintBackendRoutine}[1]{% + \ifthenelse{\equal{\numberingpreset}{combined}}{% + \printCounter{combined\subsectionnumbering}% + }{ + \ifthenelse{\equal{\numberingpreset}{separate}}{% + \printCounter{#1\subsectionnumbering}% + }{}% + }% +} + +% ── Set the current number of a label ─────────────────────────────── +\newcommand{\setLabelNumber}[2]{% + \setcounter{#1none}{#2}% + \addtocounter{#1none}{-1}% + \setcounter{#1section}{#2}% + \addtocounter{#1section}{-1}% + \setcounter{#1subsection}{#2}% + \addtocounter{#1subsection}{-1}% + \setcounter{#1subsubsection}{#2}% + \addtocounter{#1subsubsection}{-1}% + \setcounter{#1paragraph}{#2}% + \addtocounter{#1paragraph}{-1}% +} + +\newcommand{\stepLabelNumber}[1]{% + \stepcounter{#1none}% + \stepcounter{#1section}% + \stepcounter{#1subsection}% + \stepcounter{#1subsubsection}% + \stepcounter{#1paragraph}% +} + +% ┌ ┐ +% │ Counter numbering │ +% └ ┘ +\newcommand{\preEnvHook}[1]{% + \ifthenelse{\boolean{numberingDisabled}}{}{ + \ifthenelse{\equal{\numberingpreset}{combined} \AND \equal{\printNumberingConfigForDescriptor{#1}}{default}}{% + \stepLabelNumber{combined}% + }{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{% + \stepLabelNumber{combined}% + }{}% + }% + }% +} + +% Decides on the numbering to use (combined or not) +\newcommand{\tableAndFigureNumberingHelper}[1]{% + \ifthenelse{\boolean{numberingDisabled}}{}{ + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}{default}}}{% Using default + \ifthenelse{\equal{\numberingpreset}{combined}}{% + \tableAndFigureSubsectionPrinting{\value{combined\subsectionnumbering}}% + }{% + \ifthenelse{\equal{\numberingpreset}{separate}}{% + \tableAndFigureSubsectionPrinting{\value{#1}}% + }{}% + }% + }{% if we get here, default has been changed + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}{combined}}}{% + \tableAndFigureSubsectionPrinting{\value{combined\subsectionnumbering}}% + }{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}{separate}}}{% + \tableAndFigureSubsectionPrinting{\value{#1}}% + }{}% + }% + }% + }% +} + +% Prints the preceding subsection numbers +\newcommand{\tableAndFigureSubsectionPrinting}[1]{% + \ifthenelse{\equal{\subsectionnumbering}{section}}{% + \thesection.#1% + }{% + \ifthenelse{\equal{\subsectionnumbering}{subsection}}{% + \thesubsection.#1% + }{% + \ifthenelse{\equal{\subsectionnumbering}{subsubsection}}{% + \thesubsubsection.#1% + }{% + \ifthenelse{\equal{\subsectionnumbering}{paragraph}}{% + \theparagraph.#1 + }{% + #1 + }% + }% + }% + }% +} + +\renewcommand{\thetable}{\tableAndFigureNumberingHelper{table}} +\renewcommand{\thefigure}{\tableAndFigureNumberingHelper{figure}} + +\AtBeginEnvironment{table}{\preEnvHook{table}} +\AtBeginEnvironment{figure}{\preEnvHook{figure}} + + +\newcommand{\newsection}{% + \newpage + \newsectionNoPB +} + +\newcommand{\newsectionNoPB}{ + \ifthenelse{\equal{\numberingpreset}{off}}{}{% + \resetNumbering% + }% +} + +\newcommand{\resetTableAndFigureNumbering}{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{table}}{combined} \OR \equal{\printNumberingConfigForDescriptor{table}{default}}}{% + \setcounter{table}{0} + }{}% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{figure}}{combined} \OR \equal{\printNumberingConfigForDescriptor{figure}{default}}}{% + \setcounter{figure}{0} + }{}% +} + + +% Numbering toggling +\newboolean{numberingDisabled} +\setboolean{numberingDisabled}{false} +\newcommand{\numberingOff}{\setboolean{numberingDisabled}{true}} +\newcommand{\numberingOn}{\setboolean{numberingDisabled}{false}} + + +% Add glossaries functionality + +\newcommand{\setupGlossary}{ + \usepackage[nonumberlist, toc]{glossaries} + \usepackage[nottoc, numbib]{tocbibind} + \makenoidxglossaries +} + +\newcommand{\printGlossary}{ + \glsaddall + \printnoidxglossaries +} + + % ┌ ┐ % │ Translation │ % └ ┘ @@ -943,6 +1130,24 @@ \newcommand{\proven}{$\hspace{17cm}\square$} +% ── Inline environments ───────────────────────────────────────────── +\newcommand{\inline}[2][NONAME]{% + \ifthenelse{\equal{NONAME}{#1}}{% + \anonymousInlineDescriptorTemplate{#2}{\printLabel{#2}}% + }{% + \inlineDescriptorTemplate{#2}{\printLabel{#2}}{#1}% + } +} + +\newcommand{\short}[2][NONAME]{% + \ifthenelse{\equal{NONAME}{#1}}{% + \anonymousShortDescriptorTemplate{#2}{\printLabel{#2}}% + }{% + \shortDescriptorTemplate{#2}{\printLabel{#2}}{#1}% + } +} + + % ┌ ┐ % │ STYLE: Common tcolorboxes │ % └ ┘ @@ -1001,105 +1206,6 @@ \newtcolorbox{simplebox}[2][]{colback=#2!5!white,colframe=#2!75!black,#1} -% ── Label generator ───────────────────────────────────────────────── -\newcommand{\printNumberingConfigForDescriptor}[1]{\csname #1numbering\endcsname} -\newcommand{\printCounter}[1]{\refstepcounter{#1}\csname the#1\endcsname} - -\newcommand{\printLabel}[1]{% - \ifcsdef{#1numbering}{% Extra config present - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{% - \printCounter{#1\subsectionnumbering}% - }{% - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{separate}}{% - \printCounter{#1\subsectionnumbering}% - }{% - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{% - \printCounter{combined\subsectionnumbering}% - }{}% - }% - }% - }{% - \labelPrintBackendRoutine{#1}% - }% -} -\newcommand{\labelPrintBackendRoutine}[1]{ - \ifthenelse{\equal{\numberingpreset}{combined}}{ - \printCounter{combined\subsectionnumbering}% - }{ - \ifthenelse{\equal{\numberingpreset}{separate}}{ - \printCounter{#1\subsectionnumbering}% - }{} - } -} - -% Inline environments (inline) -\newcommand{\inline}[2][NONAME]{% - \ifthenelse{\equal{NONAME}{#1}}{% - \anonymousInlineDescriptorTemplate{#2}{\printLabel{#2}}% - }{% - \inlineDescriptorTemplate{#2}{\printLabel{#2}}{#1}% - } -} - -\newcommand{\short}[2][NONAME]{% - \ifthenelse{\equal{NONAME}{#1}}{% - \anonymousShortDescriptorTemplate{#2}{\printLabel{#2}}% - }{% - \shortDescriptorTemplate{#2}{\printLabel{#2}}{#1}% - } -} - -% ── Set the current number of a label ─────────────────────────────── -\newcommand{\setLabelNumber}[2]{% - \setcounter{#1none}{#2}% - \addtocounter{#1none}{-1}% - \setcounter{#1section}{#2}% - \addtocounter{#1section}{-1}% - \setcounter{#1subsection}{#2}% - \addtocounter{#1subsection}{-1}% - \setcounter{#1subsubsection}{#2}% - \addtocounter{#1subsubsection}{-1}% - \setcounter{#1paragraph}{#2}% - \addtocounter{#1paragraph}{-1}% -} - -\newcommand{\stepLabelNumber}[1]{% - \stepcounter{#1none}% - \stepcounter{#1section}% - \stepcounter{#1subsection}% - \stepcounter{#1subsubsection}% - \stepcounter{#1paragraph}% -} - -% ┌ ┐ -% │ Counter numbering │ -% └ ┘ -% TODO: Update -\newcommand{\preTableAndFigHook}[1]{% - \ifnum\value{numberingConfig}>1% - \ifnum\value{numberSubsections}=1% - \stepcounter{allss}% - \else - \ifnum\value{numberSubsections}=2% - \stepcounter{allsss}% - \else% - \stepcounter{all}% - \fi - \fi - \fi - \renewcommand{\thetable}{\arabic{table}} - \renewcommand{\thefigure}{\arabic{figure}} -} -\AtBeginEnvironment{table}{\preTableAndFigHook{table}} -\AtBeginEnvironment{figure}{\preTableAndFigHook{figure}} - - -\newcommand{\newsection}{ - \newpage - \newsectionNoPB -} - - % ┌ ┐ % │ STYLE: Computer Science │ % └ ┘ diff --git a/src/config/numbering.sty b/src/config/numbering.sty index de62377..cfb9e71 100644 --- a/src/config/numbering.sty +++ b/src/config/numbering.sty @@ -35,3 +35,5 @@ \newcommand{\usagenumbering}{default} \newcommand{\recallnumbering}{default} \newcommand{\propertiesnumbering}{default} +\newcommand{\tablenumbering}{default} +\newcommand{\figurenumbering}{default} diff --git a/src/core/bib.sty b/src/core/bib.sty new file mode 100644 index 0000000..66418fd --- /dev/null +++ b/src/core/bib.sty @@ -0,0 +1,19 @@ +% ___ _ _____ _ _ +% ( _ \ _( ) (_ _) ( ) ( ) +% | (_) )_) |_ | | __ \ \/ / +% | _ (| | _ \ | | / __ \ ) ( +% | (_) ) | |_) ) | | ( ___// /\ \ +% (____/(_)_ __/ (_) \____)_) (_) + +% Configs if you want to use BibTeX + +\newcommand{\setupBibtex}[1]{ + \RequirePackage{biblatex} + \RequirePackage[nottoc, numbib]{tocbibind} + \addbibresource{#1} +} + +\newcommand{\printbib}{ + \addcontentsline{toc}{section}{\translate{Sources}{Quellen}} + \printbibliography[title=\translate{Sources}{Quellen}] +} diff --git a/src/core/counters.sty b/src/core/counters.sty new file mode 100644 index 0000000..c885a32 --- /dev/null +++ b/src/core/counters.sty @@ -0,0 +1,148 @@ +% ── Label generator ───────────────────────────────────────────────── +\newcommand{\printNumberingConfigForDescriptor}[1]{\csname #1numbering\endcsname} +\newcommand{\printCounter}[1]{\refstepcounter{#1}\csname the#1\endcsname} + +\newcommand{\printLabel}[1]{% + \ifthenelse{\boolean{numberingDisabled}}{}{ + \ifcsdef{#1numbering}{% Extra config present + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{% + \labelPrintBackendRoutine{#1}% + }{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{separate}}{% + \printCounter{#1\subsectionnumbering}% + }{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{% + \printCounter{combined\subsectionnumbering}% + }{}% + }% + }% + }{% + \labelPrintBackendRoutine{#1}% + }% + }% +} + +\newcommand{\labelPrintBackendRoutine}[1]{% + \ifthenelse{\equal{\numberingpreset}{combined}}{% + \printCounter{combined\subsectionnumbering}% + }{ + \ifthenelse{\equal{\numberingpreset}{separate}}{% + \printCounter{#1\subsectionnumbering}% + }{}% + }% +} + +% ── Set the current number of a label ─────────────────────────────── +\newcommand{\setLabelNumber}[2]{% + \setcounter{#1none}{#2}% + \addtocounter{#1none}{-1}% + \setcounter{#1section}{#2}% + \addtocounter{#1section}{-1}% + \setcounter{#1subsection}{#2}% + \addtocounter{#1subsection}{-1}% + \setcounter{#1subsubsection}{#2}% + \addtocounter{#1subsubsection}{-1}% + \setcounter{#1paragraph}{#2}% + \addtocounter{#1paragraph}{-1}% +} + +\newcommand{\stepLabelNumber}[1]{% + \stepcounter{#1none}% + \stepcounter{#1section}% + \stepcounter{#1subsection}% + \stepcounter{#1subsubsection}% + \stepcounter{#1paragraph}% +} + +% ┌ ┐ +% │ Counter numbering │ +% └ ┘ +\newcommand{\preEnvHook}[1]{% + \ifthenelse{\boolean{numberingDisabled}}{}{ + \ifthenelse{\equal{\numberingpreset}{combined} \AND \equal{\printNumberingConfigForDescriptor{#1}}{default}}{% + \stepLabelNumber{combined}% + }{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{% + \stepLabelNumber{combined}% + }{}% + }% + }% +} + +% Decides on the numbering to use (combined or not) +\newcommand{\tableAndFigureNumberingHelper}[1]{% + \ifthenelse{\boolean{numberingDisabled}}{}{ + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}{default}}}{% Using default + \ifthenelse{\equal{\numberingpreset}{combined}}{% + \tableAndFigureSubsectionPrinting{\value{combined\subsectionnumbering}}% + }{% + \ifthenelse{\equal{\numberingpreset}{separate}}{% + \tableAndFigureSubsectionPrinting{\value{#1}}% + }{}% + }% + }{% if we get here, default has been changed + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}{combined}}}{% + \tableAndFigureSubsectionPrinting{\value{combined\subsectionnumbering}}% + }{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}{separate}}}{% + \tableAndFigureSubsectionPrinting{\value{#1}}% + }{}% + }% + }% + }% +} + +% Prints the preceding subsection numbers +\newcommand{\tableAndFigureSubsectionPrinting}[1]{% + \ifthenelse{\equal{\subsectionnumbering}{section}}{% + \thesection.#1% + }{% + \ifthenelse{\equal{\subsectionnumbering}{subsection}}{% + \thesubsection.#1% + }{% + \ifthenelse{\equal{\subsectionnumbering}{subsubsection}}{% + \thesubsubsection.#1% + }{% + \ifthenelse{\equal{\subsectionnumbering}{paragraph}}{% + \theparagraph.#1 + }{% + #1 + }% + }% + }% + }% +} + +\renewcommand{\thetable}{\tableAndFigureNumberingHelper{table}} +\renewcommand{\thefigure}{\tableAndFigureNumberingHelper{figure}} + +\AtBeginEnvironment{table}{\preEnvHook{table}} +\AtBeginEnvironment{figure}{\preEnvHook{figure}} + + +\newcommand{\newsection}{% + \newpage + \newsectionNoPB +} + +\newcommand{\newsectionNoPB}{ + \ifthenelse{\equal{\numberingpreset}{off}}{}{% + \resetNumbering% + }% +} + +\newcommand{\resetTableAndFigureNumbering}{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{table}}{combined} \OR \equal{\printNumberingConfigForDescriptor{table}{default}}}{% + \setcounter{table}{0} + }{}% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{figure}}{combined} \OR \equal{\printNumberingConfigForDescriptor{figure}{default}}}{% + \setcounter{figure}{0} + }{}% +} + + +% Numbering toggling +\newboolean{numberingDisabled} +\setboolean{numberingDisabled}{false} +\newcommand{\numberingOff}{\setboolean{numberingDisabled}{true}} +\newcommand{\numberingOn}{\setboolean{numberingDisabled}{false}} diff --git a/src/core/glossary.sty b/src/core/glossary.sty new file mode 100644 index 0000000..6345f21 --- /dev/null +++ b/src/core/glossary.sty @@ -0,0 +1,12 @@ +% Add glossaries functionality + +\newcommand{\setupGlossary}{ + \RequirePackage[nonumberlist, toc]{glossaries} + \RequirePackage[nottoc, numbib]{tocbibind} + \makenoidxglossaries +} + +\newcommand{\printGlossary}{ + \glsaddall + \printnoidxglossaries +} diff --git a/src/style/counters.sty b/src/style/counters.sty deleted file mode 100644 index 2f31b03..0000000 --- a/src/style/counters.sty +++ /dev/null @@ -1,97 +0,0 @@ -% ── Label generator ───────────────────────────────────────────────── -\newcommand{\printNumberingConfigForDescriptor}[1]{\csname #1numbering\endcsname} -\newcommand{\printCounter}[1]{\refstepcounter{#1}\csname the#1\endcsname} - -\newcommand{\printLabel}[1]{% - \ifcsdef{#1numbering}{% Extra config present - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{% - \printCounter{#1\subsectionnumbering}% - }{% - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{separate}}{% - \printCounter{#1\subsectionnumbering}% - }{% - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{% - \printCounter{combined\subsectionnumbering}% - }{}% - }% - }% - }{% - \labelPrintBackendRoutine{#1}% - }% -} -\newcommand{\labelPrintBackendRoutine}[1]{ - \ifthenelse{\equal{\numberingpreset}{combined}}{ - \printCounter{combined\subsectionnumbering}% - }{ - \ifthenelse{\equal{\numberingpreset}{separate}}{ - \printCounter{#1\subsectionnumbering}% - }{} - } -} - -% Inline environments (inline) -\newcommand{\inline}[2][NONAME]{% - \ifthenelse{\equal{NONAME}{#1}}{% - \anonymousInlineDescriptorTemplate{#2}{\printLabel{#2}}% - }{% - \inlineDescriptorTemplate{#2}{\printLabel{#2}}{#1}% - } -} - -\newcommand{\short}[2][NONAME]{% - \ifthenelse{\equal{NONAME}{#1}}{% - \anonymousShortDescriptorTemplate{#2}{\printLabel{#2}}% - }{% - \shortDescriptorTemplate{#2}{\printLabel{#2}}{#1}% - } -} - -% ── Set the current number of a label ─────────────────────────────── -\newcommand{\setLabelNumber}[2]{% - \setcounter{#1none}{#2}% - \addtocounter{#1none}{-1}% - \setcounter{#1section}{#2}% - \addtocounter{#1section}{-1}% - \setcounter{#1subsection}{#2}% - \addtocounter{#1subsection}{-1}% - \setcounter{#1subsubsection}{#2}% - \addtocounter{#1subsubsection}{-1}% - \setcounter{#1paragraph}{#2}% - \addtocounter{#1paragraph}{-1}% -} - -\newcommand{\stepLabelNumber}[1]{% - \stepcounter{#1none}% - \stepcounter{#1section}% - \stepcounter{#1subsection}% - \stepcounter{#1subsubsection}% - \stepcounter{#1paragraph}% -} - -% ┌ ┐ -% │ Counter numbering │ -% └ ┘ -% TODO: Update -\newcommand{\preTableAndFigHook}[1]{% - \ifnum\value{numberingConfig}>1% - \ifnum\value{numberSubsections}=1% - \stepcounter{allss}% - \else - \ifnum\value{numberSubsections}=2% - \stepcounter{allsss}% - \else% - \stepcounter{all}% - \fi - \fi - \fi - \renewcommand{\thetable}{\arabic{table}} - \renewcommand{\thefigure}{\arabic{figure}} -} -\AtBeginEnvironment{table}{\preTableAndFigHook{table}} -\AtBeginEnvironment{figure}{\preTableAndFigHook{figure}} - - -\newcommand{\newsection}{ - \newpage - \newsectionNoPB -} diff --git a/src/style/environments.sty b/src/style/environments.sty new file mode 100644 index 0000000..28baab2 --- /dev/null +++ b/src/style/environments.sty @@ -0,0 +1,16 @@ +% ── Inline environments ───────────────────────────────────────────── +\newcommand{\inline}[2][NONAME]{% + \ifthenelse{\equal{NONAME}{#1}}{% + \anonymousInlineDescriptorTemplate{#2}{\printLabel{#2}}% + }{% + \inlineDescriptorTemplate{#2}{\printLabel{#2}}{#1}% + } +} + +\newcommand{\short}[2][NONAME]{% + \ifthenelse{\equal{NONAME}{#1}}{% + \anonymousShortDescriptorTemplate{#2}{\printLabel{#2}}% + }{% + \shortDescriptorTemplate{#2}{\printLabel{#2}}{#1}% + } +} diff --git a/src/style/common-tcb.sty b/src/style/tcb.sty similarity index 100% rename from src/style/common-tcb.sty rename to src/style/tcb.sty From baebaa99d0cd3cecd08fd4638db03cedbb1b60ba Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sat, 21 Feb 2026 16:24:21 +0100 Subject: [PATCH 14/32] Update docs (mostly), fixes, etc --- .gitea/workflows/update-docs.yml | 35 + .gitea/workflows/update-helpers.yml | 35 + build/build.py | 3 +- build/labels.py | 5 +- {src/config => config}/colors.sty | 0 src/config/00_main.sty => config/main.sty | 17 +- {src/config => config}/naming.sty | 40 ++ {src/config => config}/numbering.sty | 2 - docs/docs.pdf | Bin 0 -> 313387 bytes docs/docs.tex | 72 +- docs/parts/custom-loader.tex | 6 - docs/parts/intro.tex | 20 + docs/parts/migration/00_intro.tex | 0 docs/parts/reference/cs.tex | 43 +- docs/parts/reference/extras.tex | 36 +- docs/parts/reference/intro.tex | 5 +- docs/parts/reference/loading.tex | 55 +- docs/parts/reference/math.tex | 9 +- docs/parts/reference/style/descriptors.tex | 53 +- docs/parts/reference/style/intro.tex | 8 - docs/parts/reference/style/spacing.tex | 80 +++ .../reference/style/tcolorbox/counter.tex | 3 +- .../reference/style/tcolorbox/default.tex | 23 +- .../parts/reference/style/tcolorbox/other.tex | 25 +- docs/parts/reference/tables-index.tex | 7 +- docs/parts/usage.tex | 28 +- examples/letter/letter.tex | 4 +- janishutz-helpers.sty | 15 +- janishutz-helpers.tex | 618 +++++++++++------- lang-de.tex | 2 - letter.tex | 41 ++ src/core.sty | 10 + src/core/counters.sty | 148 ----- src/core/cs.sty | 1 - src/core/math.sty | 15 +- src/core/minted.sty | 4 - src/core/setup.sty | 17 +- src/core/translation.sty | 1 + src/counters/figures-tables.sty | 69 ++ src/counters/generator.sty | 33 + src/counters/usercommands.sty | 70 ++ src/style.sty | 20 +- src/style/environments.sty | 20 +- src/style/spacing.sty | 24 + src/style/tcb.sty | 7 - 45 files changed, 1038 insertions(+), 691 deletions(-) create mode 100644 .gitea/workflows/update-docs.yml create mode 100644 .gitea/workflows/update-helpers.yml rename {src/config => config}/colors.sty (100%) rename src/config/00_main.sty => config/main.sty (67%) rename {src/config => config}/naming.sty (52%) rename {src/config => config}/numbering.sty (95%) create mode 100644 docs/docs.pdf delete mode 100644 docs/parts/custom-loader.tex create mode 100644 docs/parts/intro.tex create mode 100644 docs/parts/migration/00_intro.tex create mode 100644 docs/parts/reference/style/spacing.tex delete mode 100644 lang-de.tex create mode 100644 letter.tex delete mode 100644 src/core/counters.sty create mode 100644 src/counters/figures-tables.sty create mode 100644 src/counters/generator.sty create mode 100644 src/counters/usercommands.sty create mode 100644 src/style/spacing.sty diff --git a/.gitea/workflows/update-docs.yml b/.gitea/workflows/update-docs.yml new file mode 100644 index 0000000..296baf0 --- /dev/null +++ b/.gitea/workflows/update-docs.yml @@ -0,0 +1,35 @@ +name: Update docs +on: + push: + paths: + - 'docs/**' +jobs: + build_docs: + runs-on: ubuntu-latest + steps: + - name: Set up Git repository + uses: actions/checkout@v6 + - name: Sign into gitea registry + uses: https://github.com/docker/login-action@v3 + with: + username: ${{ vars.REGISTRY_USER_USERNAME }} + password: ${{ secrets.REGISTRY_USER_PASSWORD }} + registry: ${{ vars.REGISTRY_BASE_URL }} + - name: Run format of docs + uses: actions/latex-format@main + with: + workdir: docs + - name: Run build + uses: actions/latex-full@main + with: + workdir: docs + include_helpers: true + - name: Upload compiled docs + uses: actions/git-auto-commit-action@v7 + with: + commit_message: "[skip ci] Build docs on push" + file_pattern: '*.pdf' + commit_user_name: LaTeX compiler [bot] + commit_user_email: actions@janishutz.com + commit_author: LaTeX compiler [bot] + push_options: "--force" diff --git a/.gitea/workflows/update-helpers.yml b/.gitea/workflows/update-helpers.yml new file mode 100644 index 0000000..d0b6f6d --- /dev/null +++ b/.gitea/workflows/update-helpers.yml @@ -0,0 +1,35 @@ +name: Update helpers +on: + push: + paths: + - 'src/**' +jobs: + build_helpers: + runs-on: ubuntu-latest + steps: + - name: Set up Git repository + uses: actions/checkout@v6 + - name: Sign into gitea registry + uses: https://github.com/docker/login-action@v3 + with: + username: ${{ vars.REGISTRY_USER_USERNAME }} + password: ${{ secrets.REGISTRY_USER_PASSWORD }} + registry: ${{ vars.REGISTRY_BASE_URL }} + - name: Run format of main + uses: actions/latex-format@main + with: + workdir: main + - name: Run format of extra + uses: actions/latex-format@main + with: + workdir: extra + - name: Run build + run: ./build.sh + - name: Upload compiled helpers + uses: actions/git-auto-commit-action@v7 + with: + commit_message: "[skip ci] Build helpers on push" + commit_user_name: Helpers compiler [bot] + commit_user_email: actions@janishutz.com + commit_author: Helpers compiler [bot] + push_options: "--force" diff --git a/build/build.py b/build/build.py index 2ba7ec9..358b149 100644 --- a/build/build.py +++ b/build/build.py @@ -38,12 +38,13 @@ output = load_all_files_of_array("../src/", ["header.sty"]) if build_sty: output += f"\\ProvidesPackage{{janishutz-helpers}}[{datetime.datetime.now().date().isoformat()} v{version}]\n\n" output += load_all_files_of_array("../src/", ["core.sty"]) -output += load_all_files_of_array("../src/config/", os.listdir("../src/config/")) +output += load_all_files_of_array("../config/", os.listdir("../config/")) l = labels.generate_labels() output += l[0] + "\n\n" output += l[1] output += load_all_files_of_array("../src/", ["style.sty"]) output += load_all_files_of_array("../src/core/", os.listdir("../src/core/")) +output += load_all_files_of_array("../src/counters/", os.listdir("../src/counters/")) output += load_all_files_of_array("../src/style/", os.listdir("../src/style/")) output += "\\endinput" diff --git a/build/labels.py b/build/labels.py index d896ba9..020d388 100644 --- a/build/labels.py +++ b/build/labels.py @@ -10,10 +10,11 @@ def generate_labels(): "lemma", "corollary", "proposition", + "axiom", "fact", "formula", "remark", - "combine", + "combined", ]: data += f"\\newcounter{{{label}none}}\n" reset_func += f"\n \\setcounter{{{label}none}}{{0}}\n" @@ -35,7 +36,7 @@ def generate_labels(): reset_func += f" \\setcounter{{{label}paragraph}}{{0}}\n" # Generate tcolorboxes - if label != "combine": + if label != "combined": data += f"""\\newtcolorbox{{{label}}}[2][]{{ mainboxstyle, colback={label}color!5!white, diff --git a/src/config/colors.sty b/config/colors.sty similarity index 100% rename from src/config/colors.sty rename to config/colors.sty diff --git a/src/config/00_main.sty b/config/main.sty similarity index 67% rename from src/config/00_main.sty rename to config/main.sty index fd99a2c..01c85ec 100644 --- a/src/config/00_main.sty +++ b/config/main.sty @@ -5,32 +5,19 @@ \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} - -% Set the default language -\renewcommand{\currentLanguage}{en} - % ┌ ┐ % │ Rendering │ % └ ┘ -% Short descriptors are generated from the naming defined in naming.sty -% You may here configure how they are generated. #1 is the full name. -\newcommand{\shortDescriptorNameTemplate}[1]{\StrBefore[1]{#1}} - % Specify how the inline and short descriptors (e.g. Lemma, etc) are rendered. % - #1 is the name of the descriptor % - #2 is the number (correctly rendered according to settings and preceded with space if not disabled) % - #3 is the name passed (non-empty asserted) -\newcommand{\shortDescriptorTemplate}[3]{\bg{#1color}{\shortDescriptorNameTemplate{\namingTranslate{#1}} #2} \textit{(#3)}} +\newcommand{\shortDescriptorTemplate}[3]{\bg{#1color}{\shortNamingTranslate{#1} #2} \textit{(#3)}} \newcommand{\inlineDescriptorTemplate}[3]{\bg{#1color}{\namingTranslate{#1} #2}: \textit{(#3)}} % These are used if no name is provided and argument #4 from above is the missing argument -\newcommand{\anonymousShortDescriptorTemplate}[2]{\bg{#1color}{\shortDescriptorNameTemplate{\namingTranslate{#1}} #2}} +\newcommand{\anonymousShortDescriptorTemplate}[2]{\bg{#1color}{\shortNamingTranslate{#1} #2}} \newcommand{\anonymousInlineDescriptorTemplate}[2]{\bg{#1color}{\namingTranslate{#1} #2}} % background command config (draws a small box around the content) diff --git a/src/config/naming.sty b/config/naming.sty similarity index 52% rename from src/config/naming.sty rename to config/naming.sty index 3c81385..2e16085 100644 --- a/src/config/naming.sty +++ b/config/naming.sty @@ -39,3 +39,43 @@ \newcommand{\usageNamingDE}{Nutzung} \newcommand{\recallNamingDE}{Repetition} \newcommand{\propertiesNamingDE}{Eigenschaften} + + +% Specify here what they should be shortened to +\newcommand{\definitionShortNamingEN}{D} +\newcommand{\theoremShortNamingEN}{T} +\newcommand{\lemmaShortNamingEN}{L} +\newcommand{\corollaryShortNamingEN}{C} +\newcommand{\axiomShortNamingEN}{A} +\newcommand{\factShortNamingEN}{F} +\newcommand{\propositionShortNamingEN}{P} +\newcommand{\exampleShortNamingEN}{E} +\newcommand{\formulaShortNamingEN}{F} +\newcommand{\remarkShortNamingEN}{R} +\newcommand{\proofShortNamingEN}{Proof} +\newcommand{\intuitionShortNamingEN}{Intuition} +\newcommand{\termShortNamingEN}{Term} +\newcommand{\notationShortNamingEN}{Not.} +\newcommand{\taskShortNamingEN}{Task} +\newcommand{\usageShortNamingEN}{Usage} +\newcommand{\recallShortNamingEN}{Recall} +\newcommand{\propertiesShortNamingEN}{Prop.} + +\newcommand{\definitionShortNamingDE}{D} +\newcommand{\theoremShortNamingDE}{T} +\newcommand{\lemmaShortNamingDE}{L} +\newcommand{\corollaryShortNamingDE}{K} +\newcommand{\axiomShortNamingDE}{A} +\newcommand{\factShortNamingDE}{F} +\newcommand{\propositionShortNamingDE}{S} +\newcommand{\exampleShortNamingDE}{Bsp} +\newcommand{\formulaShortNamingDE}{F} +\newcommand{\remarkShortNamingDE}{B} +\newcommand{\proofShortNamingDE}{Bew.} +\newcommand{\intuitionShortNamingDE}{Int.} +\newcommand{\termShortNamingDE}{Begriff} +\newcommand{\notationShortNamingDE}{Not.} +\newcommand{\taskShortNamingDE}{Aufg.} +\newcommand{\usageShortNamingDE}{Nutz.} +\newcommand{\recallShortNamingDE}{Rep.} +\newcommand{\propertiesShortNamingDE}{Eig.} diff --git a/src/config/numbering.sty b/config/numbering.sty similarity index 95% rename from src/config/numbering.sty rename to config/numbering.sty index cfb9e71..de62377 100644 --- a/src/config/numbering.sty +++ b/config/numbering.sty @@ -35,5 +35,3 @@ \newcommand{\usagenumbering}{default} \newcommand{\recallnumbering}{default} \newcommand{\propertiesnumbering}{default} -\newcommand{\tablenumbering}{default} -\newcommand{\figurenumbering}{default} diff --git a/docs/docs.pdf b/docs/docs.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1732ecb817b64e1925715673fa4aa81e65c39731 GIT binary patch literal 313387 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%0AMUq5 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

1KU*XCNN<;)d;_B!I}!#p*#UkEs4Te>+wG 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 z

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\{\textit{string}\} Configure translations for descriptors on the fly (for DE) + \item \verb|\renewcommand{\NamingEN}|\{\textit{string}\} Configure translations for descriptors on the fly (for EN) + \item \verb|\setnumberingpreset|\{\textit{string}\} + Change the numbering preset of definitions, lemmas, etc for this document. + Value can be \texttt{off}, \texttt{separate}, \texttt{combined}. + \item \verb|\renewcommand{numbering}|\{\textit{string}\} + Change the numbering for an individual descriptor, passed as first argument. + The second value can be \texttt{off}, \texttt{separate}, \texttt{combined} or \texttt{default}. + If set to \texttt{default}, it will follow the \verb|\numberingpreset| setting. + If you do not override it here, it will follow your global config as set in the config directory + and if unset there, it will follow the \verb|\numberingpreset| setting. + \item \verb|\renew|\{\textit{string}\} Change the format of the numbering of definitions, etc. + The value can be set to any of the below + \begin{itemize}[noitemsep] + \item none = $<$section$>$.$<$number$>$ + \item section = $<$section$>$.$<$number$>$ + \item subsection = $<$section$>$.$<$subsection$>$.$<$number$>$ + \item subsubsection = $<$section$>$.$<$subsection$>$.$<$subsubsection$>$.$<$number$>$ + \item paragraph = $<$section$>$.$<$subsection$>$.$<$subsubsection$>$.$<$paragraph$>$.$<$number$>$ + \end{itemize} + Changing this won't affect all of numbering prior to the command, only after. You can change this setting (and the ones above) at any point in the document + \item \verb|\setcounter{descriptorShadeStrength}|\{\textit{number}\} Change the colour saturation of the inline descriptors + \item \verb|\setcounter{shadeStrength}|\{\textit{number}\} Change the colour saturation of the \verb|\shade| command + \item \verb|\loadGerman| Load german configuration. Needs to be in preamble and you may only use it once + \item To change the font for the entire document, load the font package using \verb|\usepackage|, with the last occurrence of a font package determining the active one. + Then select the type by using \verb|\setFontType|\textit{\{mono $|$ serif $|$ sans\}}. + A list of fonts is available \color{Cyan}\href{https://www.overleaf.com/learn/latex/Font_typefaces#Reference_guide}{here}\color{black}. + You may change the font only for a specific section, by enclosing \verb|\setFont| and the text that should be written in said typeface in curly braces. +\end{itemize} +\subsubsection{Letters} +\begin{itemize} \item \verb|\renewcommand{\name}|\{\textit{string}\} Change the name (for letters) for this document only \item \verb|\renewcommand{\street}|\{\textit{string}\} Change the street (for letters) for this document only \item \verb|\renewcommand{\city}|\{\textit{string}\} Change the city (for letters) for this document only \item \verb|\renewcommand{\countrycode}|\{\textit{string}\} Change the country-code (for letters) for this document only - \item \verb|\renewcommand{\theoremde}|\{\textit{string}\} Change the translation for theorem in German (usually either ``Satz'' or ``Theorem'') - \item \verb|\setNumberingStyle|\{\textit{number}\} Change the numbering of definitions, lemmas, etc for this document. 0 = off, 1 = Separately, 2 = Combined (except for definition), 3 = Combined - \item \verb|\setcounter{numberSubsections}|\{\textit{number}\} Change the format of the numbering of definition, lemma, etc. - 0 = $<$section$>$.$<$number$>$,\\ - 1 = $<$section$>$.$<$subsection$>$.$<$number$>$,\\ - 2 = $<$section$>$.$<$subsection$>$.$<$subsubsection$>$.$<$number$>$\\ - Changing this won't affect all of numbering prior to the command, only after. You can change this setting (and the one above) at any point in the document - \item \verb|\setcounter{descriptorShadeStrength}|\{\textit{number}\} Change the colour saturation of the inline descriptors - \item \verb|\setcounter{shadeStrength}|\{\textit{number}\} Change the colour saturation of the \verb|\shade| command - \item \verb|\setLang|\{\textit{language}\} Change the language. Will automatically load babel in German. Can only be used once and only at the start of the document or in the preamble, as repeated usage leads to undefined behaviour - \item To change the font for the entire document, load the font package using \verb|\usepackage|, with the last occurrence of a font package determining the active one. - Then select the type by using \verb|\setFontType|\textit{\{mono $|$ serif $|$ sans\}}. - A list of fonts is available \color{Cyan}\href{https://www.overleaf.com/learn/latex/Font_typefaces#Reference_guide}{here}\color{black}. - You may change the font only for a specific section, by enclosing \verb|\setFont| and the text that should be written in said typeface in curly braces. \end{itemize} \newpage \subsection{Setup, Loading \& Translation} \begin{itemize} - \item \verb|\load|\{\textit{scope}\} Load the selected \textit{scope} \item \verb|\setup|\{\textit{string}\} Prepare the document with the \textit{string} being the title - \item \verb|\setupCheatSheet|\{\textit{string}\} Prepare the document with smaller borders and no headers / footers. \textit{string} is the title + \item \verb|\setupCheatSheet|[\textit{boolean}]\{\textit{string}\} Prepare the document with smaller borders and no headers / footers. + The mandatory argument is the title, the optional argument will, if set to \texttt{true} use a landscape layout (default) + and a horizontal layout if set to \texttt{false}. \item \verb|\setupBarebones|\{\textit{string}\} Minimal setup, only borders and title set \item \verb|\startDocument| Initialize the document. Has to be called after \verb|\begin{document}| - \item \verb|\usetcolorboxes| Initialize tcolorboxes. In main body, if you want to use fancy boxes. (requires \texttt{most} or up) \item \verb|\translate|\{\textit{string}\}\{\textit{string}\} First \textit{string} is English, second \textit{string} is German. Switches automatically based on language selected \item \verb|\tr|\{\textit{string}\}\{\textit{string}\} Shorthand for \verb|\translate| - \item \verb|\numberingOn| Turn on the numbering (will set back to config previously set by \verb|\setNumberingStyle|) - \item \verb|\numberingOff| Turn off the numbering (if you want to temporarily not use it. Do not use \verb|\setNumberingStyle| for that) + \item \verb|\numberingOn| Turn on the numbering (if previously turned off using \verb|\numberingOff| or set in the config) + \item \verb|\numberingOff| Turn off the numbering (useful to temporarily turn off numbering) \end{itemize} diff --git a/docs/parts/reference/math.tex b/docs/parts/reference/math.tex index 8990b11..62aa5bb 100644 --- a/docs/parts/reference/math.tex +++ b/docs/parts/reference/math.tex @@ -5,14 +5,13 @@ All these have to be executed in the math environment. \item \verb|\R| Prints $\R$. Same goes for \verb|\C| printing $\C$, etc. \item \verb|\floor|\{\textit{math}\} Round down symbol, e.g. $\floor{n}$ \item \verb|\ceil|\{\textit{math}\} Round up symbol, e.g. $\ceil{n}$ - \item \verb|\hastoeq| or \verb|\mbeq| Has to equal symbol (non-standard), $\hastoeq$ \item \verb|\Leftrightarrowequiv| Equivalence transformation symbol, $\Leftrightarrowequiv$. \item \verb|\Rightarrowequiv| Equivalence transformation symbol, $\Rightarrowequiv$. \item \verb|\Leftarrowequiv| Equivalence transformation symbol, $\Leftarrowequiv$. \item \verb|\defAs| Define as, i.e. $\defAs$ \item \verb|\defEquiv| Define as, but with a two-sided implication instead of equality, i.e. $\defEquiv$ \item \verb|\defImplies| Define as, but with one-sided implication, i.e. $\defImplies$ - \item \verb|\divides| Divider or divides symbol, e.g. $a \divides b$ + \item \verb|\divider| Divider or divides symbol, e.g. $a \divider b$ \item \verb|\lcm| Least common multiple, $\lcm$ \item \verb|\arcsinh| Inverse of hyperbolic sine, $\arcsinh$ \item \verb|\arccosh| Inverse of hyperbolic cosine, $\arccosh$ @@ -21,8 +20,10 @@ All these have to be executed in the math environment. \item \verb|\limni| Shortened limit notation for $n \rightarrow \infty$, $\displaystyle \limni$ \item \verb|\liminfni| Shortened limit inferior notation for $n \rightarrow \infty$, $\displaystyle \liminfni$ \item \verb|\limsupni| Shortened limit superior notation for $n \rightarrow \infty$, $\displaystyle \limsupni$ - \item \verb|\der|\{\textit{math}\} Derivative, $\displaystyle \der{x}$ - \item \verb|\dern|\{\textit{math}\}\{\textit{math}\} Higher derivative, $\displaystyle \dern{x}{2}$ + \item \verb|\diff|\{\textit{math}\} Derivative, $\displaystyle \diff{x}$ + \item \verb|\diffn|\{\textit{math}\}\{\textit{math}\} Higher derivative, $\displaystyle \diffn{x}{2}$ + \item \verb|\pardiff|\{\textit{math}\} Partial derivative, $\displaystyle \pardiff{x}$ + \item \verb|\pardiffn|\{\textit{math}\}\{\textit{math}\} Higher partial derivative, $\displaystyle \pardiffn{x}{2}$ \item \verb|\elementstack|\{\textit{math}\}\{\textit{math}\} Stack two elements on top of eachother. Uses \verb|\genfrac| under the hood. Can be used for example in limits as an alternative to \verb|\atop| or \verb|\substack|. \end{itemize} diff --git a/docs/parts/reference/style/descriptors.tex b/docs/parts/reference/style/descriptors.tex index 1a29468..83b0eb3 100644 --- a/docs/parts/reference/style/descriptors.tex +++ b/docs/parts/reference/style/descriptors.tex @@ -1,13 +1,11 @@ \newpage \subsubsection{Inline \& Shortened descriptors} -\textit{Included in \texttt{most} and up} - See \ref{sec:counters} for a guide on how to change the current number. -\fhlc{Aquamarine}{Inline} +\paragraph{Inline} \begin{tables}{ll}{Command & Output} - \verb|\inlineex| & \inlineex \\ - \verb|\inlinedef| & \inlinedef \\ + \verb|\inlineexample| & \inlineexample \\ + \verb|\inlinedefinition| & \inlinedefinition \\ \verb|\inlinetheorem| & \inlinetheorem \\ \verb|\inlinelemma| & \inlinelemma \\ \verb|\inlinecorollary| & \inlinecorollary \\ @@ -18,10 +16,10 @@ See \ref{sec:counters} for a guide on how to change the current number. \verb|\inlineproof| & \inlineproof \\ \end{tables} -\fhlc{Aquamarine}{Shortened} +\paragraph{Shortened} \begin{tables}{ll}{Command & Output} - \verb|\shortex| & \shortex \\ - \verb|\shortdef| & \shortdef \\ + \verb|\shortexample| & \shortexample \\ + \verb|\shortdefinition| & \shortdefinition \\ \verb|\shorttheorem| & \shorttheorem \\ \verb|\shortlemma| & \shortlemma \\ \verb|\shortcorollary| & \shortcorollary \\ @@ -31,45 +29,14 @@ See \ref{sec:counters} for a guide on how to change the current number. \verb|\shortremark| & \shortremark \\ \verb|\shortproof| & \shortproof \\ \end{tables} + \newpage -\fhlc{Aquamarine}{Inline (Named)} -\begin{tables}{ll}{Command & Output} - \verb|\fancyex|\{\textit{string}\} & \fancyex{Exercise} \\ - \verb|\fancydef|\{\textit{string}\} & \fancydef{Definition} \\ - \verb|\fancytheorem|\{\textit{string}\} & \fancytheorem{Theorem} \\ - \verb|\fancylemma|\{\textit{string}\} & \fancylemma{Lemma} \\ - \verb|\fancycorollary|\{\textit{string}\} & \fancycorollary{Corollary} \\ - \verb|\fancyproposition|\{\textit{string}\} & \fancyproposition{Proposition} \\ - \verb|\fancyfact|\{\textit{string}\} & \fancyfact{Fact} \\ - \verb|\fancyaxiom|\{\textit{string}\} & \fancyaxiom{Axiom} \\ - \verb|\fancyremark|\{\textit{string}\} & \fancyremark{Remark} \\ - \verb|\fancyproof|\{\textit{string}\} & \fancyproof{Proof} \\ -\end{tables} - -\fhlc{Aquamarine}{Shortened (Named)} -\begin{tables}{ll}{Command & Output} - \verb|\compactex|\{\textit{string}\} & \compactex{Exercise} \\ - \verb|\compactdef|\{\textit{string}\} & \compactdef{Definition} \\ - \verb|\compacttheorem|\{\textit{string}\} & \compacttheorem{Theorem} \\ - \verb|\compactlemma|\{\textit{string}\} & \compactlemma{Lemma} \\ - \verb|\compactcorollary|\{\textit{string}\} & \compactcorollary{Corollary} \\ - \verb|\compactproposition|\{\textit{string}\} & \compactproposition{Proposition} \\ - \verb|\compactfact|\{\textit{string}\} & \compactfact{Fact} \\ - \verb|\compactaxiom|\{\textit{string}\} & \compactaxiom{Axiom} \\ - \verb|\compactremark|\{\textit{string}\} & \compactremark{Remark} \\ - \verb|\compactproof|\{\textit{string}\} & \compactproof{Proof} \\ -\end{tables} - - \subsubsection{Changing the counters} \label{sec:counters} -\textit{Included in \texttt{most} and up} - -\textit{Starting from the version of October 18, 2025, you may no longer use \texttt{$\backslash$setcounter} directly} You may set the current number for the elements by setting their corresponding counter to the selected number. -You can do this using \verb|\setLabelNumber|\{\textit{name of the environment}\}\{\textit{number}\}, +You can do this using \verb|\setLabelNumber|\{\textit{name of the environment}\}\{\textit{number}\}, where you replace \textit{name of the environment} with one of the following: \texttt{definition}, \texttt{lemma}, \texttt{theorem}, \texttt{corollary}, \texttt{proposition}, \texttt{fact}, \texttt{formula}, \texttt{axiom}, \texttt{example}, \texttt{remark} @@ -81,9 +48,9 @@ You may also use \verb|\stepLabelNumber|\{\textit{name of the environment}\} to \subsubsection{Referencing counters} -\textit{Included in \texttt{most} and up, introduced on October 18, 2025} +\hl{\textit{With recent overhaul has not been re-introduced yet, will be a feature again soon, with some changes}} -If you wish to reference a counter, you can do so by writing +If you wish to reference a counter, you can do so by writing \verb|\ref{:

---}|, diff --git a/docs/parts/reference/style/intro.tex b/docs/parts/reference/style/intro.tex index 758cbbe..8425d00 100644 --- a/docs/parts/reference/style/intro.tex +++ b/docs/parts/reference/style/intro.tex @@ -1,17 +1,9 @@ \newpage \subsection{Style} -General styling commands. All other commands, except these ones require at least \texttt{most} to be the selected \textit{scope} \begin{itemize} \item \verb|\TODO| Print a highlighted \TODO \item \verb|\background|\{\textit{color}\}\{\textit{number}\}\{\textit{string}\} Print \background{ForestGreen}{50}{shaded text, with colour saturation} \item \verb|\shade|\{\textit{color}\}\{\textit{string}\} Print \shade{ForestGreen}{shaded text} \item \verb|\backdrop|\{\textit{string}\} Print \backdrop{text with gray backdrop} - \item \verb|\fhlc|\{\textit{color}\}\{\textit{string}\} Print \fhlc{ForestGreen}{bold, underlined text in a coloured box} - \item \verb|\fhl|\{\textit{string}\} Print \fhl{bold, underlined text in a white box} \item \verb|\printtoc|\{\textit{color}\} Print the table of contents (as seen on the first page). The normal \verb|\tableofcontents| still works as expected - \item \verb|\smallhspace| Prints a 2mm hspace - \item \verb|\mediumhspace| Prints a 5mm hspace - \item \verb|\largehspace| Prints a 10mm = 1cm hspace - \item \verb|\rmvspace| Removes some of the vertical whitespace printed by environments like \verb|align| - \item \verb|\drmvspace| Removes some of the vertical whitespace printed by environments like \verb|align| (double the amount) \end{itemize} diff --git a/docs/parts/reference/style/spacing.tex b/docs/parts/reference/style/spacing.tex new file mode 100644 index 0000000..5a589d1 --- /dev/null +++ b/docs/parts/reference/style/spacing.tex @@ -0,0 +1,80 @@ +\subsubsection{Spacing} +For spacing in math mode, prefer using the methods described \hlhref{https://www.overleaf.com/learn/latex/Spacing_in_math_mode}{here}, +for vertical spacing prefer the commands described below +\begin{itemize} + \item \verb|\smallhspace| Prints a 2mm hspace + \item \verb|\mediumhspace| Prints a 5mm hspace + \item \verb|\largehspace| Prints a 10mm = 1cm hspace + \item \verb|\rmvspace|[\textit{number}] Removes an amount of vertical space. Should not be used unless can be avoided with general settings. Defaults to 0.5 +\end{itemize} + +Vertical spacing config for the entire document. By default, the \LaTeX\ defaults are used. +\begin{itemize} + \item \verb|\noverticalspacing| + \item \verb|\smallverticalspacing| + \item \verb|\mediumverticalspacing| (approximately the same as the \LaTeX defaults) + \item \verb|\largeverticalspacing| +\end{itemize} +You are of course free to redefine commands like \verb|\parskip|, etc to your liking, these commands are just provided for your convenience. +See \hlhref{https://www.overleaf.com/learn/latex/\%5Cabovedisplayskip_and_related_commands}{here}\ for more details +and \hlhref{https://latex-tutorial.com/latex-space/}{here for a good guide on spacing}. + +To control paragraph spacing, see \hlhref{https://mirror.ox.ac.uk/sites/ctan.org/macros/latex/contrib/parskip/parskip.pdf}{here}\ +and \hlhref{https://www.overleaf.com/learn/latex/Articles/How_to_change_paragraph_spacing_in_LaTeX}{here} + +To make use of \TeX's automatic wrapping of short alignment environments, use the \texttt{aligned} +(or, if no alignment is needed, use the normal \verb|\[ \]|) instead of the \texttt{align} environment for short equations. + +\newpage +Below a demonstration on the effects of the different settings: + +\shade{Aquamarine}{No vertical spacing}\noverticalspacing + +This is text: +\[ + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x +\] +This is very long introductory text that exceeds the limit (same applies to long equations) +\[ + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x +\] +Text following the equation (no paragraph break!) + + +\shade{Aquamarine}{Small vertical spacing}\smallverticalspacing + +This is text: +\[ + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x +\] +This is very long introductory text that exceeds the limit (same applies to long equations) +\[ + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x +\] +Text following the equation (no paragraph break!) + + +\shade{Aquamarine}{Medium vertical spacing}\mediumverticalspacing + +This is text: +\[ + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x +\] +This is very long introductory text that exceeds the limit (same applies to long equations) +\[ + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x +\] +Text following the equation (no paragraph break!) + + +\shade{Aquamarine}{Large vertical spacing}\largeverticalspacing + +This is text: +\[ + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x +\] +This is very long introductory text that exceeds the limit (same applies to long equations) +\[ + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x +\] +Text following the equation (no paragraph break!) diff --git a/docs/parts/reference/style/tcolorbox/counter.tex b/docs/parts/reference/style/tcolorbox/counter.tex index 590f37e..9655378 100644 --- a/docs/parts/reference/style/tcolorbox/counter.tex +++ b/docs/parts/reference/style/tcolorbox/counter.tex @@ -1,6 +1,5 @@ \newpage -\fhlc{Aquamarine}{Counter-enabled} - +\paragraph{Counter-enabled} These ones also have two settings, namely, you can change the counter behaviour and the inclusion of subsections in the numbering. See \ref{sec:perFileConf}. See \ref{sec:counters} for a guide on how to change the current number and how to reference them. diff --git a/docs/parts/reference/style/tcolorbox/default.tex b/docs/parts/reference/style/tcolorbox/default.tex index 3dde12b..32eab31 100644 --- a/docs/parts/reference/style/tcolorbox/default.tex +++ b/docs/parts/reference/style/tcolorbox/default.tex @@ -1,10 +1,8 @@ \newpage \subsubsection{Tcolorboxes} -\textit{Included in \texttt{most} and up} +\paragraph{General boxes} +These tcolorboxes can be created using the code displayed inside them. -Put \verb|\usetcolorboxes| right after \verb|\startDocument| (right after \verb|\begin{document}|) if you plan to use them. - -\fhlc{Aquamarine}{General} \begin{terms}[]{Title here} \begin{minted}{latex} \begin{terms}[]{Title here} @@ -29,14 +27,6 @@ Put \verb|\usetcolorboxes| right after \verb|\startDocument| (right after \verb| \end{minted} \end{recall} -\begin{remarks}[]{Title here} - \begin{minted}{latex} - \begin{remarks}[]{Title here} - - \end{remarks} - \end{minted} -\end{remarks} - \begin{usage}[]{Title here} \begin{minted}{latex} \begin{usage}[]{Title here} @@ -45,15 +35,6 @@ Put \verb|\usetcolorboxes| right after \verb|\startDocument| (right after \verb| \end{minted} \end{usage} -\begin{guides}[]{Title here}{Tutorial} - \begin{minted}{latex} - \begin{guides}[]{Title here}{Tutorial} - % You can also change the right title on this one - - \end{guides} - \end{minted} -\end{guides} - \begin{properties}[]{Title here} \begin{minted}{latex} \begin{properties}[]{Title here} diff --git a/docs/parts/reference/style/tcolorbox/other.tex b/docs/parts/reference/style/tcolorbox/other.tex index 796552d..0ce3010 100644 --- a/docs/parts/reference/style/tcolorbox/other.tex +++ b/docs/parts/reference/style/tcolorbox/other.tex @@ -1,26 +1,9 @@ -\vspace{1cm} -\fhlc{Aquamarine}{Language-Specific} -\begin{conjugation}[]{Title here} - \begin{minted}{latex} - \begin{conjugation}[]{Title here} - - \end{conjugation} - \end{minted} -\end{conjugation} +\paragraph{Flexible} +This tcolorbox has all the styles applied, but allows configuring the colour and both title boxes -\begin{forms}[]{Title here} - \begin{minted}{latex} - \begin{forms}[]{Title here} - - \end{forms} - \end{minted} -\end{forms} - - - -\fhlc{Aquamarine}{Flexible} \begin{general}[]{title}{second title}{red} - This Tcolorbox is flexible and can take any main and secondary title, as well as any colour.\\ + This Tcolorbox is flexible and can take any main and secondary title, as well as any colour. + \begin{minted}{latex} \begin{general}[]{title}{second title}{red} diff --git a/docs/parts/reference/tables-index.tex b/docs/parts/reference/tables-index.tex index a24e35f..627167b 100644 --- a/docs/parts/reference/tables-index.tex +++ b/docs/parts/reference/tables-index.tex @@ -1,7 +1,5 @@ \newpage \subsection{Tables} -\textit{Included in \texttt{most} and up} - You can set up nice looking tables using the \texttt{booktab} and \texttt{tabulary} environments. \textit{New as of October 28 2025:} Tables and figures are now also numbered according to your settings @@ -24,16 +22,15 @@ This doesn't use the \texttt{table} environment, so no captions are possible, as \end{fullTable} \end{minted} +% TODO: Get it working again (generate new \thetable and \thefigure) for This outputs as + \begin{fullTable}{ll}{Left & Right}{This is a caption} Left content & Right Content\\ \end{fullTable} - \subsection{Index} -\textit{Included in \texttt{most} and up} - If you want to use index, add \verb|\prepareIndex| to the preamble. Using \verb|\addIndexBold|\{\textit{string}\}, you can add entries to the index. They are printed in bold typeface in your document. Using \verb|\addIndex|\{\textit{string}\}, you can do the same, but the text remains normal and using \verb|\addIndexItalic|\{\textit{string}\}, it is printed in italics diff --git a/docs/parts/usage.tex b/docs/parts/usage.tex index 2a2a1a9..8cae9e4 100644 --- a/docs/parts/usage.tex +++ b/docs/parts/usage.tex @@ -5,9 +5,7 @@ You can type \texttt{latex-prepare} and press tab, if you have installed the VSC \begin{minted}{latex} \documentclass{article} -\newcommand{\dir}{~/path/to/helper} % TODO: Change your path here! No trailing slashes! -\input{\dir/include.tex} -\load{recommended} % TODO: Change the inclusion level (if necessary), see below +\input{~/path/to/helpers/janishutz-helpers.tex} % TODO: Change your path here \setup{Type your title here} @@ -19,30 +17,26 @@ Type your \LaTeX here \end{document} \end{minted} -The \verb|\load| command takes one parameter, which can be one of the following: -\begin{itemize} - \item \texttt{minimal} Just the core styling and core functionality. - \item \texttt{most} Includes Math, CS, Language and all styling. - \item \texttt{recommended} The recommended setup. Includes BibTeX in addition to what is in most - \item \texttt{all} If you want to also include glossaries or code with highlighting - \item \texttt{letter} If you want to typeset a letter (see \ref{sec:letters}) -\end{itemize} \subsection{Configuration} -You can set a global config in config file in helper files directory. The file is located at +You can set a global config in the config files in the helper files directory. They are located at + +\texttt{//config/}. +All config options are documented there. +After changing them, run \texttt{build.sh} in the main directory. + +Each of the options can also be overridden directly on a per-document +(see \ref{sec:perFileConf}) basis using +\mint{latex}|\renewcommand{\}{}| -\texttt{//config/config.tex}. All configs are documented there. Simply open that file using any text editor and edit your config. \subsection{Letters} -\label{sec:letters} Letters require a different setup compared to a normal \LaTeX document: \begin{minted}{latex} \documentclass[12pt,a4paper]{scrlttr2} -\newcommand{\dir}{~/path/to/helper} % TODO: Change your path here! No trailing slashes! -\input{\dir/include.tex} -\load{letter} +\input{~/path/to/helper/letter.tex} % TODO: Change your path here \setkomavar{subject}{} % type your subject here \begin{document}\raggedright diff --git a/examples/letter/letter.tex b/examples/letter/letter.tex index d1bd8f4..9e96b2f 100644 --- a/examples/letter/letter.tex +++ b/examples/letter/letter.tex @@ -1,8 +1,6 @@ \documentclass[12pt,a4paper]{scrlttr2} -\newcommand{\dir}{~/projects/latex} % IMPORTANT: No trailing slashes! -\input{\dir/include.tex} -\load{letter} +\input{~/projects/latex/letter.tex} % Subject \setkomavar{subject}{Test} diff --git a/janishutz-helpers.sty b/janishutz-helpers.sty index 4eb3aae..d796344 100644 --- a/janishutz-helpers.sty +++ b/janishutz-helpers.sty @@ -390,29 +390,28 @@ \newcommand{\dx}{\text{ d}} \newcommand{\floor}[1]{\left\lfloor #1 \right\rfloor} \newcommand{\ceil}[1]{\left\lceil #1 \right\rceil} -\newcommand{\hastoeq}{\overset{!}{=}} \newcommand{\Leftrightarrowequiv}{\overset{\cdot}{\Leftrightarrow}} \newcommand{\Longleftrightarrowequiv}{\overset{\cdot}{\Longleftrightarrow}} \newcommand{\Rightarrowequiv}{\overset{\cdot}{\Rightarrow}} \newcommand{\Leftarrowequiv}{\overset{\cdot}{\Leftarrow}} \newcommand{\defAs}{\overset{\text{def}}{=}} -\newcommand{\der}[1]{\frac{\mbox{d}}{\mbox{d}#1}} -\newcommand{\dern}[2]{\frac{\mbox{d}^{#2}}{\mbox{d}^{#2}#1}} -\newcommand{\parder}[1]{\frac{\partial}{\partial #1}} -\newcommand{\pardern}[2]{\frac{\partial^{#2}}{\partial^{#2} #1}} \newcommand{\defEquiv}{\overset{\text{def}}{\Leftrightarrow}} \newcommand{\defImplies}{\overset{\text{def}}{\Rightarrow}} -\newcommand{\divides}{\hspace{0.25em}|\hspace{0.25em}} +\newcommand{\diff}[1]{\frac{\mbox{d}}{\mbox{d}#1}} +\newcommand{\diffn}[2]{\frac{\mbox{d}^{#2}}{\mbox{d}^{#2}#1}} +\newcommand{\pardiff}[1]{\frac{\partial}{\partial #1}} +\newcommand{\pardiffn}[2]{\frac{\partial^{#2}}{\partial^{#2} #1}} +\newcommand{\divider}{\hspace{0.25em}|\hspace{0.25em}} \newcommand{\lcm}{\text{lcm}} \newcommand{\limit}[2]{\underset{#1 \rightarrow #2}{\lim}} -\newcommand{\seq}[1]{(#1_n)_{n \geq 1}} -\newcommand{\ser}[2]{\sum_{k = 1}^{#2} #1_k} \newcommand{\limni}{\limit{n}{\infty}} \newcommand{\limnz}{\limit{n}{0}} \newcommand{\limxz}{\limit{x_0}{0}} \newcommand{\limhz}{\limit{h}{0}} \newcommand{\liminfni}{\liminf_{n \rightarrow \infty}} \newcommand{\limsupni}{\limsup_{n \rightarrow \infty}} +\newcommand{\sequence}[1]{(#1_n)_{n \geq 1}} +\newcommand{\series}[2]{\sum_{k = 1}^{#2} #1_k} \DeclareMathOperator\arctanh{arctanh} \DeclareMathOperator\arccosh{arccosh} diff --git a/janishutz-helpers.tex b/janishutz-helpers.tex index 59f9127..13db9f0 100644 --- a/janishutz-helpers.tex +++ b/janishutz-helpers.tex @@ -49,46 +49,16 @@ \newcommand{\printTranslationOptionEN}[1]{\csname #1NamingEN\endcsname} \newcommand{\printTranslationOptionDE}[1]{\csname #1NamingDE\endcsname} +\newcommand{\printShortTranslationOptionEN}[1]{\csname #1ShortNamingEN\endcsname} +\newcommand{\printShortTranslationOptionDE}[1]{\csname #1ShortNamingDE\endcsname} +\newboolean{numberingDisabled} +\setboolean{numberingDisabled}{false} -% ┌ ┐ -% │ General config │ -% └ ┘ -% 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} - -% Set the default language -\renewcommand{\currentLanguage}{en} - - -% ┌ ┐ -% │ Rendering │ -% └ ┘ -% Short descriptors are generated from the naming defined in naming.sty -% You may here configure how they are generated. #1 is the full name. -\newcommand{\shortDescriptorNameTemplate}[1]{\StrBefore[1]{#1}} - -% Specify how the inline and short descriptors (e.g. Lemma, etc) are rendered. -% - #1 is the name of the descriptor -% - #2 is the number (correctly rendered according to settings and preceded with space if not disabled) -% - #3 is the name passed (non-empty asserted) -\newcommand{\shortDescriptorTemplate}[3]{\bg{#1color}{\shortDescriptorNameTemplate{\namingTranslate{#1}} #2} \textit{(#3)}} -\newcommand{\inlineDescriptorTemplate}[3]{\bg{#1color}{\namingTranslate{#1} #2}: \textit{(#3)}} - -% These are used if no name is provided and argument #4 from above is the missing argument -\newcommand{\anonymousShortDescriptorTemplate}[2]{\bg{#1color}{\shortDescriptorNameTemplate{\namingTranslate{#1}} #2}} -\newcommand{\anonymousInlineDescriptorTemplate}[2]{\bg{#1color}{\namingTranslate{#1} #2}} - -% background command config (draws a small box around the content) -\newcommand{\backgroundPadding}{2pt} -\newcommand{\backgroundRounding}{1pt} +\newcommand{\loadGerman}{ + \usepackage[ngerman]{babel} + \renewcommand{\currentLanguage}{de} +} % ┌ ┐ @@ -122,6 +92,33 @@ \colorlet{propertiescolor}{purple} +% ┌ ┐ +% │ General config │ +% └ ┘ +% Configure your author name here +\newcommand{\authorTitle}{Janis Hutz\\\url{https://janishutz.com}} +\newcommand{\authorHeaders}{Janis Hutz} + + +% ┌ ┐ +% │ Rendering │ +% └ ┘ +% Specify how the inline and short descriptors (e.g. Lemma, etc) are rendered. +% - #1 is the name of the descriptor +% - #2 is the number (correctly rendered according to settings and preceded with space if not disabled) +% - #3 is the name passed (non-empty asserted) +\newcommand{\shortDescriptorTemplate}[3]{\bg{#1color}{\shortNamingTranslate{#1} #2} \textit{(#3)}} +\newcommand{\inlineDescriptorTemplate}[3]{\bg{#1color}{\namingTranslate{#1} #2}: \textit{(#3)}} + +% These are used if no name is provided and argument #4 from above is the missing argument +\newcommand{\anonymousShortDescriptorTemplate}[2]{\bg{#1color}{\shortNamingTranslate{#1} #2}} +\newcommand{\anonymousInlineDescriptorTemplate}[2]{\bg{#1color}{\namingTranslate{#1} #2}} + +% background command config (draws a small box around the content) +\newcommand{\backgroundPadding}{2pt} +\newcommand{\backgroundRounding}{1pt} + + % ┌ ┐ % │ Numbering │ % └ ┘ @@ -159,8 +156,6 @@ \newcommand{\usagenumbering}{default} \newcommand{\recallnumbering}{default} \newcommand{\propertiesnumbering}{default} -\newcommand{\tablenumbering}{default} -\newcommand{\figurenumbering}{default} % ┌ ┐ @@ -206,6 +201,46 @@ \newcommand{\propertiesNamingDE}{Eigenschaften} +% Specify here what they should be shortened to +\newcommand{\definitionShortNamingEN}{D} +\newcommand{\theoremShortNamingEN}{T} +\newcommand{\lemmaShortNamingEN}{L} +\newcommand{\corollaryShortNamingEN}{C} +\newcommand{\axiomShortNamingEN}{A} +\newcommand{\factShortNamingEN}{F} +\newcommand{\propositionShortNamingEN}{P} +\newcommand{\exampleShortNamingEN}{E} +\newcommand{\formulaShortNamingEN}{F} +\newcommand{\remarkShortNamingEN}{R} +\newcommand{\proofShortNamingEN}{Proof} +\newcommand{\intuitionShortNamingEN}{Intuition} +\newcommand{\termShortNamingEN}{Term} +\newcommand{\notationShortNamingEN}{Not.} +\newcommand{\taskShortNamingEN}{Task} +\newcommand{\usageShortNamingEN}{Usage} +\newcommand{\recallShortNamingEN}{Recall} +\newcommand{\propertiesShortNamingEN}{Prop.} + +\newcommand{\definitionShortNamingDE}{D} +\newcommand{\theoremShortNamingDE}{T} +\newcommand{\lemmaShortNamingDE}{L} +\newcommand{\corollaryShortNamingDE}{K} +\newcommand{\axiomShortNamingDE}{A} +\newcommand{\factShortNamingDE}{F} +\newcommand{\propositionShortNamingDE}{S} +\newcommand{\exampleShortNamingDE}{Bsp} +\newcommand{\formulaShortNamingDE}{F} +\newcommand{\remarkShortNamingDE}{B} +\newcommand{\proofShortNamingDE}{Bew.} +\newcommand{\intuitionShortNamingDE}{Int.} +\newcommand{\termShortNamingDE}{Begriff} +\newcommand{\notationShortNamingDE}{Not.} +\newcommand{\taskShortNamingDE}{Aufg.} +\newcommand{\usageShortNamingDE}{Nutz.} +\newcommand{\recallShortNamingDE}{Rep.} +\newcommand{\propertiesShortNamingDE}{Eig.} + + \newcounter{definitionnone} \newcounter{definitionsection}[section] \renewcommand{\thedefinitionsection}{\thesection.\arabic{definitionsection}} @@ -362,7 +397,33 @@ }, #1 } -\newcommand{\inlineproposition}[1][NONAME]{\inline[#1]{proposition}}\newcommand{\shortproposition}[1][NONAME]{\short[#1]{proposition}}\newcounter{factnone} +\newcommand{\inlineproposition}[1][NONAME]{\inline[#1]{proposition}}\newcommand{\shortproposition}[1][NONAME]{\short[#1]{proposition}}\newcounter{axiomnone} +\newcounter{axiomsection}[section] +\renewcommand{\theaxiomsection}{\thesection.\arabic{axiomsection}} +\newcounter{axiomsubsection}[subsection] +\renewcommand{\theaxiomsubsection}{\thesubsection.\arabic{axiomsubsection}} +\newcounter{axiomsubsubsection}[subsubsection] +\renewcommand{\theaxiomsubsubsection}{\thesubsubsection.\arabic{axiomsubsubsection}} +\newcounter{axiomparagraph}[paragraph] +\renewcommand{\theaxiomparagraph}{\theparagraph.\arabic{axiomparagraph}} +\newtcolorbox{axiom}[2][]{ + mainboxstyle, + colback=axiomcolor!5!white, + colframe=axiomcolor!75!black, + colbacktitle=axiomcolor!75!black, + title={\large #2}, + overlay={ + \node[overlaystyle, + draw=axiomcolor!75!black, + fill=axiomcolor!75!black + ] at (frame.north east) + { + \large \tr{\axiomNamingEN}{\axiomNamingDE}\printLabel{axiom} + }; + }, #1 + } + +\newcommand{\inlineaxiom}[1][NONAME]{\inline[#1]{axiom}}\newcommand{\shortaxiom}[1][NONAME]{\short[#1]{axiom}}\newcounter{factnone} \newcounter{factsection}[section] \renewcommand{\thefactsection}{\thesection.\arabic{factsection}} \newcounter{factsubsection}[subsection] @@ -440,16 +501,16 @@ }, #1 } -\newcommand{\inlineremark}[1][NONAME]{\inline[#1]{remark}}\newcommand{\shortremark}[1][NONAME]{\short[#1]{remark}}\newcounter{combinenone} -\newcounter{combinesection}[section] -\renewcommand{\thecombinesection}{\thesection.\arabic{combinesection}} -\newcounter{combinesubsection}[subsection] -\renewcommand{\thecombinesubsection}{\thesubsection.\arabic{combinesubsection}} -\newcounter{combinesubsubsection}[subsubsection] -\renewcommand{\thecombinesubsubsection}{\thesubsubsection.\arabic{combinesubsubsection}} -\newcounter{combineparagraph}[paragraph] -\renewcommand{\thecombineparagraph}{\theparagraph.\arabic{combineparagraph}} -\newcommand{\inlinecombine}[1][NONAME]{\inline[#1]{combine}}\newcommand{\shortcombine}[1][NONAME]{\short[#1]{combine}} +\newcommand{\inlineremark}[1][NONAME]{\inline[#1]{remark}}\newcommand{\shortremark}[1][NONAME]{\short[#1]{remark}}\newcounter{combinednone} +\newcounter{combinedsection}[section] +\renewcommand{\thecombinedsection}{\thesection.\arabic{combinedsection}} +\newcounter{combinedsubsection}[subsection] +\renewcommand{\thecombinedsubsection}{\thesubsection.\arabic{combinedsubsection}} +\newcounter{combinedsubsubsection}[subsubsection] +\renewcommand{\thecombinedsubsubsection}{\thesubsubsection.\arabic{combinedsubsubsection}} +\newcounter{combinedparagraph}[paragraph] +\renewcommand{\thecombinedparagraph}{\theparagraph.\arabic{combinedparagraph}} +\newcommand{\inlinecombined}[1][NONAME]{\inline[#1]{combined}}\newcommand{\shortcombined}[1][NONAME]{\short[#1]{combined}} \newcommand{\resetNumbering}{ \setcounter{definitionnone}{0} @@ -488,6 +549,12 @@ \setcounter{propositionsubsubsection}{0} \setcounter{propositionparagraph}{0} + \setcounter{axiomnone}{0} + \setcounter{axiomsection}{0} + \setcounter{axiomsubsection}{0} + \setcounter{axiomsubsubsection}{0} + \setcounter{axiomparagraph}{0} + \setcounter{factnone}{0} \setcounter{factsection}{0} \setcounter{factsubsection}{0} @@ -506,11 +573,11 @@ \setcounter{remarksubsubsection}{0} \setcounter{remarkparagraph}{0} - \setcounter{combinenone}{0} - \setcounter{combinesection}{0} - \setcounter{combinesubsection}{0} - \setcounter{combinesubsubsection}{0} - \setcounter{combineparagraph}{0} + \setcounter{combinednone}{0} + \setcounter{combinedsection}{0} + \setcounter{combinedsubsection}{0} + \setcounter{combinedsubsubsection}{0} + \setcounter{combinedparagraph}{0} \setcounter{table}{0} \setcounter{figure}{0} @@ -534,15 +601,7 @@ % ── Small common style elements ───────────────────────────────────── % Spacing (vertical) -% TODO: Rework -\newcommand{\hrmvspace}{\vspace{-0.25pc}} -\newcommand{\rmvspace}{\vspace{-0.5pc}} -\newcommand{\mrmvspace}{\vspace{-0.75pc}} -\newcommand{\drmvspace}{\vspace{-1pc}} -\newcommand{\dhrmvspace}{\vspace{-1.25pc}} -\newcommand{\dnrmvspace}{\vspace{-1.5pc}} -\newcommand{\dmrmvspace}{\vspace{-1.75pc}} -\newcommand{\ddrmvspace}{\vspace{-2pc}} +\newcommand{\rmvspace}[1][0.5]{\vspace{-#1pc}} % Spacing (horizontal) \newcommand{\smallhspace}{\hspace{2mm}} @@ -576,6 +635,9 @@ % 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}} + % Print a table of contents as a tcolorbox \newcommand{\printtoc}[1]{ \renewcommand{\cfttoctitlefont}{} @@ -597,6 +659,13 @@ } +% Draw box around links. First arg link, second arg display +\newcommand{\hlhref}[2]{\color{MidnightBlue}\fbox{\href{#1}{#2}}\color{black}} + +% Same for urls (just one arg tho) +\newcommand{\hlurl}[1]{\color{MidnightBlue}\fbox{\url{#1}}\color{black}} + + % ___ _ _____ _ _ % ( _ \ _( ) (_ _) ( ) ( ) % | (_) )_) |_ | | __ \ \/ / @@ -686,29 +755,28 @@ \newcommand{\dx}{\text{ d}} \newcommand{\floor}[1]{\left\lfloor #1 \right\rfloor} \newcommand{\ceil}[1]{\left\lceil #1 \right\rceil} -\newcommand{\hastoeq}{\overset{!}{=}} \newcommand{\Leftrightarrowequiv}{\overset{\cdot}{\Leftrightarrow}} \newcommand{\Longleftrightarrowequiv}{\overset{\cdot}{\Longleftrightarrow}} \newcommand{\Rightarrowequiv}{\overset{\cdot}{\Rightarrow}} \newcommand{\Leftarrowequiv}{\overset{\cdot}{\Leftarrow}} \newcommand{\defAs}{\overset{\text{def}}{=}} -\newcommand{\der}[1]{\frac{\mbox{d}}{\mbox{d}#1}} -\newcommand{\dern}[2]{\frac{\mbox{d}^{#2}}{\mbox{d}^{#2}#1}} -\newcommand{\parder}[1]{\frac{\partial}{\partial #1}} -\newcommand{\pardern}[2]{\frac{\partial^{#2}}{\partial^{#2} #1}} \newcommand{\defEquiv}{\overset{\text{def}}{\Leftrightarrow}} \newcommand{\defImplies}{\overset{\text{def}}{\Rightarrow}} -\newcommand{\divides}{\hspace{0.25em}|\hspace{0.25em}} +\newcommand{\diff}[1]{\frac{\mbox{d}}{\mbox{d}#1}} +\newcommand{\diffn}[2]{\frac{\mbox{d}^{#2}}{\mbox{d}^{#2}#1}} +\newcommand{\pardiff}[1]{\frac{\partial}{\partial #1}} +\newcommand{\pardiffn}[2]{\frac{\partial^{#2}}{\partial^{#2} #1}} +\newcommand{\divider}{\hspace{0.25em}|\hspace{0.25em}} \newcommand{\lcm}{\text{lcm}} \newcommand{\limit}[2]{\underset{#1 \rightarrow #2}{\lim}} -\newcommand{\seq}[1]{(#1_n)_{n \geq 1}} -\newcommand{\ser}[2]{\sum_{k = 1}^{#2} #1_k} \newcommand{\limni}{\limit{n}{\infty}} \newcommand{\limnz}{\limit{n}{0}} \newcommand{\limxz}{\limit{x_0}{0}} \newcommand{\limhz}{\limit{h}{0}} \newcommand{\liminfni}{\liminf_{n \rightarrow \infty}} \newcommand{\limsupni}{\limsup_{n \rightarrow \infty}} +\newcommand{\sequence}[1]{(#1_n)_{n \geq 1}} +\newcommand{\series}[2]{\sum_{k = 1}^{#2} #1_k} \DeclareMathOperator\arctanh{arctanh} \DeclareMathOperator\arccosh{arccosh} @@ -721,10 +789,6 @@ \usepackage{minted} \usepackage{fancyvrb} -% Args: Code. -% Alternative: Use \mint{}|code| -\newcommand{\inlinecode}[1]{\shade{gray}{\texttt{#1}}} - % Args: Language, Code \newenvironment{code}[1]{ \VerbatimEnvironment @@ -813,156 +877,6 @@ } -% ── Label generator ───────────────────────────────────────────────── -\newcommand{\printNumberingConfigForDescriptor}[1]{\csname #1numbering\endcsname} -\newcommand{\printCounter}[1]{\refstepcounter{#1}\csname the#1\endcsname} - -\newcommand{\printLabel}[1]{% - \ifthenelse{\boolean{numberingDisabled}}{}{ - \ifcsdef{#1numbering}{% Extra config present - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{% - \labelPrintBackendRoutine{#1}% - }{% - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{separate}}{% - \printCounter{#1\subsectionnumbering}% - }{% - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{% - \printCounter{combined\subsectionnumbering}% - }{}% - }% - }% - }{% - \labelPrintBackendRoutine{#1}% - }% - }% -} - -\newcommand{\labelPrintBackendRoutine}[1]{% - \ifthenelse{\equal{\numberingpreset}{combined}}{% - \printCounter{combined\subsectionnumbering}% - }{ - \ifthenelse{\equal{\numberingpreset}{separate}}{% - \printCounter{#1\subsectionnumbering}% - }{}% - }% -} - -% ── Set the current number of a label ─────────────────────────────── -\newcommand{\setLabelNumber}[2]{% - \setcounter{#1none}{#2}% - \addtocounter{#1none}{-1}% - \setcounter{#1section}{#2}% - \addtocounter{#1section}{-1}% - \setcounter{#1subsection}{#2}% - \addtocounter{#1subsection}{-1}% - \setcounter{#1subsubsection}{#2}% - \addtocounter{#1subsubsection}{-1}% - \setcounter{#1paragraph}{#2}% - \addtocounter{#1paragraph}{-1}% -} - -\newcommand{\stepLabelNumber}[1]{% - \stepcounter{#1none}% - \stepcounter{#1section}% - \stepcounter{#1subsection}% - \stepcounter{#1subsubsection}% - \stepcounter{#1paragraph}% -} - -% ┌ ┐ -% │ Counter numbering │ -% └ ┘ -\newcommand{\preEnvHook}[1]{% - \ifthenelse{\boolean{numberingDisabled}}{}{ - \ifthenelse{\equal{\numberingpreset}{combined} \AND \equal{\printNumberingConfigForDescriptor{#1}}{default}}{% - \stepLabelNumber{combined}% - }{% - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{% - \stepLabelNumber{combined}% - }{}% - }% - }% -} - -% Decides on the numbering to use (combined or not) -\newcommand{\tableAndFigureNumberingHelper}[1]{% - \ifthenelse{\boolean{numberingDisabled}}{}{ - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}{default}}}{% Using default - \ifthenelse{\equal{\numberingpreset}{combined}}{% - \tableAndFigureSubsectionPrinting{\value{combined\subsectionnumbering}}% - }{% - \ifthenelse{\equal{\numberingpreset}{separate}}{% - \tableAndFigureSubsectionPrinting{\value{#1}}% - }{}% - }% - }{% if we get here, default has been changed - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}{combined}}}{% - \tableAndFigureSubsectionPrinting{\value{combined\subsectionnumbering}}% - }{% - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}{separate}}}{% - \tableAndFigureSubsectionPrinting{\value{#1}}% - }{}% - }% - }% - }% -} - -% Prints the preceding subsection numbers -\newcommand{\tableAndFigureSubsectionPrinting}[1]{% - \ifthenelse{\equal{\subsectionnumbering}{section}}{% - \thesection.#1% - }{% - \ifthenelse{\equal{\subsectionnumbering}{subsection}}{% - \thesubsection.#1% - }{% - \ifthenelse{\equal{\subsectionnumbering}{subsubsection}}{% - \thesubsubsection.#1% - }{% - \ifthenelse{\equal{\subsectionnumbering}{paragraph}}{% - \theparagraph.#1 - }{% - #1 - }% - }% - }% - }% -} - -\renewcommand{\thetable}{\tableAndFigureNumberingHelper{table}} -\renewcommand{\thefigure}{\tableAndFigureNumberingHelper{figure}} - -\AtBeginEnvironment{table}{\preEnvHook{table}} -\AtBeginEnvironment{figure}{\preEnvHook{figure}} - - -\newcommand{\newsection}{% - \newpage - \newsectionNoPB -} - -\newcommand{\newsectionNoPB}{ - \ifthenelse{\equal{\numberingpreset}{off}}{}{% - \resetNumbering% - }% -} - -\newcommand{\resetTableAndFigureNumbering}{% - \ifthenelse{\equal{\printNumberingConfigForDescriptor{table}}{combined} \OR \equal{\printNumberingConfigForDescriptor{table}{default}}}{% - \setcounter{table}{0} - }{}% - \ifthenelse{\equal{\printNumberingConfigForDescriptor{figure}}{combined} \OR \equal{\printNumberingConfigForDescriptor{figure}{default}}}{% - \setcounter{figure}{0} - }{}% -} - - -% Numbering toggling -\newboolean{numberingDisabled} -\setboolean{numberingDisabled}{false} -\newcommand{\numberingOff}{\setboolean{numberingDisabled}{true}} -\newcommand{\numberingOn}{\setboolean{numberingDisabled}{false}} - - % Add glossaries functionality \newcommand{\setupGlossary}{ @@ -985,6 +899,7 @@ } \newcommand{\tr}[2]{\translate{#1}{#2}} \newcommand{\namingTranslate}[1]{\translate{\printTranslationOptionEN{#1}}{\printTranslationOptionEN{#1}}} +\newcommand{\shortNamingTranslate}[1]{\translate{\printShortTranslationOptionEN{#1}}{\printShortTranslationOptionEN{#1}}} % Translation aids (commonly used) \newcommand{\trif}{\translate{if }{falls }} @@ -1035,11 +950,18 @@ } -% TODO: Use landscape and columns for new version % Set up the latex document for exam summaries (Extra wide body, small margins, no header) -\newcommand{\setupCheatSheet}[1]{ - \usepackage[a4paper,textwidth=20cm,textheight=28.5cm]{geometry} - \title{\Huge \textbf{#1}} +\newcommand{\setupCheatSheet}[2][true]{ + \ifthenelse{\equal{#1}{true}}{ + \usepackage[a4paper,textwidth=28.5cm,textheight=20cm,landscape]{geometry} + \usepackage{flowfram} + \ffvadjustfalse + \setlength{\columnsep}{1cm} + \Ncolumn{3} + }{ + \usepackage[a4paper,textwidth=28.5cm,textheight=20cm]{geometry} + } + \title{\Huge \textbf{#2}} \author{\authorTitle} } @@ -1049,7 +971,7 @@ % └ ┘ % Start document command (required) \newcommand{\startDocument}{ - % TODO: Cheat sheet needs different setup + % TODO: Cheat sheet needs different setup? \maketitle \pagestyle{fancy} \thispagestyle{fancy} @@ -1102,7 +1024,6 @@ \newcommand{\Indent}{\hspace{\algorithmicindent}} -\newcommand{\tc}[1]{\tco{#1}} \newcommand{\tct}[1]{\Theta\left(#1\right)} \newcommand{\tco}[1]{\mathcal{O}\left(#1\right)} \newcommand{\tcl}[1]{\Omega\left(#1\right)} @@ -1119,6 +1040,184 @@ \newcommand{\class}{\text{\tr{Cl}{Kl}}} +% ── Set the current number of a label ─────────────────────────────── +\newcommand{\setLabelNumber}[2]{% + \setcounter{#1none}{#2}% + \addtocounter{#1none}{-1}% + \setcounter{#1section}{#2}% + \addtocounter{#1section}{-1}% + \setcounter{#1subsection}{#2}% + \addtocounter{#1subsection}{-1}% + \setcounter{#1subsubsection}{#2}% + \addtocounter{#1subsubsection}{-1}% + \setcounter{#1paragraph}{#2}% + \addtocounter{#1paragraph}{-1}% +} + +\newcommand{\stepLabelNumber}[1]{% + \stepcounter{#1none}% + \stepcounter{#1section}% + \stepcounter{#1subsection}% + \stepcounter{#1subsubsection}% + \stepcounter{#1paragraph}% +} + + +\newcommand{\newsection}{% + \newpage + \newsectionNoPB +} + +\newcommand{\newsectionNoPB}{ + \ifthenelse{\equal{\numberingpreset}{off}}{}{% + \resetNumbering% + \resetTableAndFigureNumbering% + }% +} + +\newcommand{\resetTableAndFigureNumbering}{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{table}}{combined}}{ + \setcounter{table}{0} + }{}% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{table}}{default}}{ + \setcounter{table}{0} + }{}% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{figure}}{combined}}{% + \setcounter{figure}{0} + }{}% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{figure}}{default}}{ + \setcounter{figure}{0} + }{}% +} + + +% Numbering toggling +\newcommand{\numberingOff}{ + \setboolean{numberingDisabled}{true} + \loadNumberingConfig +} +\newcommand{\numberingOn}{ + \setboolean{numberingDisabled}{false} + \loadNumberingConfig +} + +\newcommand{\setsubsectionnumbering}[1]{ + \renewcommand{\subsectionnumbering}{#1} + \loadNumberingConfig +} + +\newcommand{\setnumberingpreset}[1]{ + \renewcommand{\numberingpreset}{#1} + \loadNumberingConfig +} + + +% ── Label generator ───────────────────────────────────────────────── +\newcommand{\printNumberingConfigForDescriptor}[1]{\csname #1numbering\endcsname} +\newcommand{\printCounter}[1]{\refstepcounter{#1}\csname the#1\endcsname} + +\newcommand{\printLabel}[1]{% + \ifthenelse{\boolean{numberingDisabled}}{}{ + \ifcsdef{#1numbering}{% Extra config present + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{% + \labelPrintBackendRoutine{#1}% + }{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{separate}}{% + \printCounter{#1\subsectionnumbering}% + }{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{% + \printCounter{combined\subsectionnumbering}% + }{}% + }% + }% + }{% + \labelPrintBackendRoutine{#1}% + }% + }% +} + +\newcommand{\labelPrintBackendRoutine}[1]{% + \ifthenelse{\equal{\numberingpreset}{combined}}{% + \printCounter{combined\subsectionnumbering}% + }{ + \ifthenelse{\equal{\numberingpreset}{separate}}{% + \printCounter{#1\subsectionnumbering}% + }{}% + }% +} + + +% ┌ ┐ +% │ Counter numbering │ +% └ ┘ +\newcommand{\preEnvHook}[1]{% + \stepLabelNumber{combined}% + \ifthenelse{\equal{\numberingpreset}{combined}}{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{ + \stepLabelNumber{combined}% + }{}% + }{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{% + \stepLabelNumber{combined}% + }{}% + }% +} + +% Decides on the numbering to use (combined or not) +\newcommand{\loadNumberingConfiguration}{% + \ifthenelse{\boolean{numberingDisabled}}{% + \renewcommand{\thetable}{\arabic{table}} + \renewcommand{\thefigure}{\arabic{figure}} + }{ + \ifthenelse{\equal{\numberingpreset}{combined}}{% + \ifthenelse{\equal{\subsectionnumbering}{none}}{ + \renewcommand{\thetable}{\arabic{combinednone}} + \renewcommand{\thefigure}{\arabic{combinednone}} + }{% + \renewcommand{\thetable}{\ssprinter.\arabic{combined\subsectionnumbering}} + \renewcommand{\thefigure}{\ssprinter.\arabic{combined\subsectionnumbering}} + }% + }{% + \ifthenelse{\equal{\numberingpreset}{separate}}{ + \ifthenelse{\equal{\subsectionnumbering}{none}}{}{ + \renewcommand{\thetable}{\ssprinter.\arabic{table}} + \renewcommand{\thefigure}{\ssprinter.\arabic{figure}} + } + }{% + \renewcommand{\thetable}{\arabic{table}} + \renewcommand{\thefigure}{\arabic{figure}} + }% + }% + }% +} + +% Prints the preceding subsection numbers +\newcommand{\ssprinter}{\thesection} +\newcommand{\generateSubsection}{% + \ifthenelse{\equal{\subsectionnumbering}{section}}{% + \renewcommand{\ssprinter}{\thesection} + }{% + \ifthenelse{\equal{\subsectionnumbering}{subsection}}{% + \renewcommand{\ssprinter}{\thesubsection} + }{% + \ifthenelse{\equal{\subsectionnumbering}{subsubsection}}{% + \renewcommand{\ssprinter}{\thesubsubsection} + }{% + \ifthenelse{\equal{\subsectionnumbering}{paragraph}}{% + \renewcommand{\ssprinter}{\theparagraph} + }{ + \renewcommand{\ssprinter}{} + }% + }% + }% + }% +} +\loadNumberingConfiguration + +\AtBeginEnvironment{table}{\preEnvHook{table}} +\AtBeginEnvironment{figure}{\preEnvHook{figure}} + + % ┌ ┐ % │ STYLE: Math │ % └ ┘ @@ -1130,13 +1229,46 @@ \newcommand{\proven}{$\hspace{17cm}\square$} +\newcommand{\noverticalspacing}{ + \abovedisplayskip 1pt plus 2pt minus 1pt + \belowdisplayskip 1pt plus 2pt minus 1pt + \abovedisplayshortskip -10pt + \belowdisplayshortskip 1pt plus 2pt minus 1pt +} +\newcommand{\smallverticalspacing}{ + \abovedisplayskip 4pt plus 3pt minus 2pt + \belowdisplayskip 5pt plus 5pt minus 2pt + \abovedisplayshortskip -5pt + \belowdisplayshortskip 3pt plus 4pt minus 2pt +} +\newcommand{\mediumverticalspacing}{ + \abovedisplayskip 7pt plus 4pt minus 3pt + \belowdisplayskip 9pt plus 6pt minus 3pt + \abovedisplayshortskip 0pt + \belowdisplayshortskip 5pt plus 4pt minus 2pt +} +\newcommand{\largeverticalspacing}{ + \abovedisplayskip 13pt plus 3pt minus 1pt + \belowdisplayskip 15pt plus 9pt minus 6pt + \abovedisplayshortskip 5pt plus 2pt minus 3pt + \belowdisplayshortskip 7pt plus 5pt minus 2pt +} + + % ── Inline environments ───────────────────────────────────────────── +% TODO: ref label generation \newcommand{\inline}[2][NONAME]{% \ifthenelse{\equal{NONAME}{#1}}{% \anonymousInlineDescriptorTemplate{#2}{\printLabel{#2}}% }{% \inlineDescriptorTemplate{#2}{\printLabel{#2}}{#1}% - } + }% +} + +\newcommand{\labeledInline}[3][NONAME]{% + \edef{\tempLabel}{#3} + \label{\tempLabel} + \inline[#1]{#2} } \newcommand{\short}[2][NONAME]{% @@ -1144,9 +1276,18 @@ \anonymousShortDescriptorTemplate{#2}{\printLabel{#2}}% }{% \shortDescriptorTemplate{#2}{\printLabel{#2}}{#1}% - } + }% } +\newcommand{\labeledShort}[3][NONAME]{% + \edef{\tempLabel}{#3} + \label{\tempLabel} + \short[#1]{#2} +} + +\newcommand{\inlineproof}{\anonymousInlineDescriptorTemplate{proof}{}} +\newcommand{\shortproof}{\anonymousShortDescriptorTemplate{proof}{}} + % ┌ ┐ % │ STYLE: Common tcolorboxes │ @@ -1156,13 +1297,6 @@ \newtcolorbox{recall}[2][]{mainboxstyle,colback=recallcolor!5!white,colframe=recallcolor!75!black,colbacktitle=recallcolor!75!black,title={\large #2}, overlay={\node[overlaystyle,draw=recallcolor!75!black,,fill=recallcolor!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} diff --git a/lang-de.tex b/lang-de.tex deleted file mode 100644 index e653379..0000000 --- a/lang-de.tex +++ /dev/null @@ -1,2 +0,0 @@ -\usepackage[ngerman]{babel} -\setLang{de} diff --git a/letter.tex b/letter.tex new file mode 100644 index 0000000..15c9a21 --- /dev/null +++ b/letter.tex @@ -0,0 +1,41 @@ +% ┌ ┐ +% │ Configure your address here │ +% └ ┘ +\newcommand{\name}{Janis Hutz} +\newcommand{\street}{Street} +\newcommand{\city}{City} +\newcommand{\countrycode}{CH} + + +% ──────────────────────────────────────────────────────────────────── +\RequirePackage[utf8]{inputenc} +\RequirePackage[T1]{fontenc} +\setkomavar{date}{\city, \today} + +\newkomavar{fromplace} % a few koma vars +\setkomavar{fromname}{\name} +\setkomavar{fromaddress}{\street} +\setkomavar{fromplace}{\countrycode -\city} + +\KOMAoptions{foldmarks=off,fromrule=false} +\setkomavar{backaddress}{} + +\makeatletter % indention of the address fields +\setplength{toaddrhpos}{27mm} +\setplength{toaddrwidth}{92mm} +\setplength{sigindent}{0mm} +\makeatother + +\renewcommand*{\raggedsignature}{\raggedright} + +% Define new letter header +\setkomavar{firsthead}{ + \null\hfill + \parbox[t][\headheight][t]{4cm}{% + \vspace*{2cm} + + \usekomavar{fromname} \newline + \usekomavar{fromaddress} \newline + \usekomavar{fromplace} + } +}% diff --git a/src/core.sty b/src/core.sty index 038814a..775efb8 100644 --- a/src/core.sty +++ b/src/core.sty @@ -35,3 +35,13 @@ \newcommand{\printTranslationOptionEN}[1]{\csname #1NamingEN\endcsname} \newcommand{\printTranslationOptionDE}[1]{\csname #1NamingDE\endcsname} +\newcommand{\printShortTranslationOptionEN}[1]{\csname #1ShortNamingEN\endcsname} +\newcommand{\printShortTranslationOptionDE}[1]{\csname #1ShortNamingDE\endcsname} + +\newboolean{numberingDisabled} +\setboolean{numberingDisabled}{false} + +\newcommand{\loadGerman}{ + \usepackage[ngerman]{babel} + \renewcommand{\currentLanguage}{de} +} diff --git a/src/core/counters.sty b/src/core/counters.sty deleted file mode 100644 index c885a32..0000000 --- a/src/core/counters.sty +++ /dev/null @@ -1,148 +0,0 @@ -% ── Label generator ───────────────────────────────────────────────── -\newcommand{\printNumberingConfigForDescriptor}[1]{\csname #1numbering\endcsname} -\newcommand{\printCounter}[1]{\refstepcounter{#1}\csname the#1\endcsname} - -\newcommand{\printLabel}[1]{% - \ifthenelse{\boolean{numberingDisabled}}{}{ - \ifcsdef{#1numbering}{% Extra config present - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{% - \labelPrintBackendRoutine{#1}% - }{% - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{separate}}{% - \printCounter{#1\subsectionnumbering}% - }{% - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{% - \printCounter{combined\subsectionnumbering}% - }{}% - }% - }% - }{% - \labelPrintBackendRoutine{#1}% - }% - }% -} - -\newcommand{\labelPrintBackendRoutine}[1]{% - \ifthenelse{\equal{\numberingpreset}{combined}}{% - \printCounter{combined\subsectionnumbering}% - }{ - \ifthenelse{\equal{\numberingpreset}{separate}}{% - \printCounter{#1\subsectionnumbering}% - }{}% - }% -} - -% ── Set the current number of a label ─────────────────────────────── -\newcommand{\setLabelNumber}[2]{% - \setcounter{#1none}{#2}% - \addtocounter{#1none}{-1}% - \setcounter{#1section}{#2}% - \addtocounter{#1section}{-1}% - \setcounter{#1subsection}{#2}% - \addtocounter{#1subsection}{-1}% - \setcounter{#1subsubsection}{#2}% - \addtocounter{#1subsubsection}{-1}% - \setcounter{#1paragraph}{#2}% - \addtocounter{#1paragraph}{-1}% -} - -\newcommand{\stepLabelNumber}[1]{% - \stepcounter{#1none}% - \stepcounter{#1section}% - \stepcounter{#1subsection}% - \stepcounter{#1subsubsection}% - \stepcounter{#1paragraph}% -} - -% ┌ ┐ -% │ Counter numbering │ -% └ ┘ -\newcommand{\preEnvHook}[1]{% - \ifthenelse{\boolean{numberingDisabled}}{}{ - \ifthenelse{\equal{\numberingpreset}{combined} \AND \equal{\printNumberingConfigForDescriptor{#1}}{default}}{% - \stepLabelNumber{combined}% - }{% - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{% - \stepLabelNumber{combined}% - }{}% - }% - }% -} - -% Decides on the numbering to use (combined or not) -\newcommand{\tableAndFigureNumberingHelper}[1]{% - \ifthenelse{\boolean{numberingDisabled}}{}{ - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}{default}}}{% Using default - \ifthenelse{\equal{\numberingpreset}{combined}}{% - \tableAndFigureSubsectionPrinting{\value{combined\subsectionnumbering}}% - }{% - \ifthenelse{\equal{\numberingpreset}{separate}}{% - \tableAndFigureSubsectionPrinting{\value{#1}}% - }{}% - }% - }{% if we get here, default has been changed - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}{combined}}}{% - \tableAndFigureSubsectionPrinting{\value{combined\subsectionnumbering}}% - }{% - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}{separate}}}{% - \tableAndFigureSubsectionPrinting{\value{#1}}% - }{}% - }% - }% - }% -} - -% Prints the preceding subsection numbers -\newcommand{\tableAndFigureSubsectionPrinting}[1]{% - \ifthenelse{\equal{\subsectionnumbering}{section}}{% - \thesection.#1% - }{% - \ifthenelse{\equal{\subsectionnumbering}{subsection}}{% - \thesubsection.#1% - }{% - \ifthenelse{\equal{\subsectionnumbering}{subsubsection}}{% - \thesubsubsection.#1% - }{% - \ifthenelse{\equal{\subsectionnumbering}{paragraph}}{% - \theparagraph.#1 - }{% - #1 - }% - }% - }% - }% -} - -\renewcommand{\thetable}{\tableAndFigureNumberingHelper{table}} -\renewcommand{\thefigure}{\tableAndFigureNumberingHelper{figure}} - -\AtBeginEnvironment{table}{\preEnvHook{table}} -\AtBeginEnvironment{figure}{\preEnvHook{figure}} - - -\newcommand{\newsection}{% - \newpage - \newsectionNoPB -} - -\newcommand{\newsectionNoPB}{ - \ifthenelse{\equal{\numberingpreset}{off}}{}{% - \resetNumbering% - }% -} - -\newcommand{\resetTableAndFigureNumbering}{% - \ifthenelse{\equal{\printNumberingConfigForDescriptor{table}}{combined} \OR \equal{\printNumberingConfigForDescriptor{table}{default}}}{% - \setcounter{table}{0} - }{}% - \ifthenelse{\equal{\printNumberingConfigForDescriptor{figure}}{combined} \OR \equal{\printNumberingConfigForDescriptor{figure}{default}}}{% - \setcounter{figure}{0} - }{}% -} - - -% Numbering toggling -\newboolean{numberingDisabled} -\setboolean{numberingDisabled}{false} -\newcommand{\numberingOff}{\setboolean{numberingDisabled}{true}} -\newcommand{\numberingOn}{\setboolean{numberingDisabled}{false}} diff --git a/src/core/cs.sty b/src/core/cs.sty index 81a0452..409f08f 100644 --- a/src/core/cs.sty +++ b/src/core/cs.sty @@ -14,7 +14,6 @@ \newcommand{\Indent}{\hspace{\algorithmicindent}} -\newcommand{\tc}[1]{\tco{#1}} \newcommand{\tct}[1]{\Theta\left(#1\right)} \newcommand{\tco}[1]{\mathcal{O}\left(#1\right)} \newcommand{\tcl}[1]{\Omega\left(#1\right)} diff --git a/src/core/math.sty b/src/core/math.sty index 113ef6c..5f257b6 100644 --- a/src/core/math.sty +++ b/src/core/math.sty @@ -66,29 +66,28 @@ \newcommand{\dx}{\text{ d}} \newcommand{\floor}[1]{\left\lfloor #1 \right\rfloor} \newcommand{\ceil}[1]{\left\lceil #1 \right\rceil} -\newcommand{\hastoeq}{\overset{!}{=}} \newcommand{\Leftrightarrowequiv}{\overset{\cdot}{\Leftrightarrow}} \newcommand{\Longleftrightarrowequiv}{\overset{\cdot}{\Longleftrightarrow}} \newcommand{\Rightarrowequiv}{\overset{\cdot}{\Rightarrow}} \newcommand{\Leftarrowequiv}{\overset{\cdot}{\Leftarrow}} \newcommand{\defAs}{\overset{\text{def}}{=}} -\newcommand{\der}[1]{\frac{\mbox{d}}{\mbox{d}#1}} -\newcommand{\dern}[2]{\frac{\mbox{d}^{#2}}{\mbox{d}^{#2}#1}} -\newcommand{\parder}[1]{\frac{\partial}{\partial #1}} -\newcommand{\pardern}[2]{\frac{\partial^{#2}}{\partial^{#2} #1}} \newcommand{\defEquiv}{\overset{\text{def}}{\Leftrightarrow}} \newcommand{\defImplies}{\overset{\text{def}}{\Rightarrow}} -\newcommand{\divides}{\hspace{0.25em}|\hspace{0.25em}} +\newcommand{\diff}[1]{\frac{\mbox{d}}{\mbox{d}#1}} +\newcommand{\diffn}[2]{\frac{\mbox{d}^{#2}}{\mbox{d}^{#2}#1}} +\newcommand{\pardiff}[1]{\frac{\partial}{\partial #1}} +\newcommand{\pardiffn}[2]{\frac{\partial^{#2}}{\partial^{#2} #1}} +\newcommand{\divider}{\hspace{0.25em}|\hspace{0.25em}} \newcommand{\lcm}{\text{lcm}} \newcommand{\limit}[2]{\underset{#1 \rightarrow #2}{\lim}} -\newcommand{\seq}[1]{(#1_n)_{n \geq 1}} -\newcommand{\ser}[2]{\sum_{k = 1}^{#2} #1_k} \newcommand{\limni}{\limit{n}{\infty}} \newcommand{\limnz}{\limit{n}{0}} \newcommand{\limxz}{\limit{x_0}{0}} \newcommand{\limhz}{\limit{h}{0}} \newcommand{\liminfni}{\liminf_{n \rightarrow \infty}} \newcommand{\limsupni}{\limsup_{n \rightarrow \infty}} +\newcommand{\sequence}[1]{(#1_n)_{n \geq 1}} +\newcommand{\series}[2]{\sum_{k = 1}^{#2} #1_k} \DeclareMathOperator\arctanh{arctanh} \DeclareMathOperator\arccosh{arccosh} diff --git a/src/core/minted.sty b/src/core/minted.sty index 8c85cce..7777c99 100644 --- a/src/core/minted.sty +++ b/src/core/minted.sty @@ -4,10 +4,6 @@ \RequirePackage{minted} \RequirePackage{fancyvrb} -% Args: Code. -% Alternative: Use \mint{}|code| -\newcommand{\inlinecode}[1]{\shade{gray}{\texttt{#1}}} - % Args: Language, Code \newenvironment{code}[1]{ \VerbatimEnvironment diff --git a/src/core/setup.sty b/src/core/setup.sty index 7707e7e..6a5c06d 100644 --- a/src/core/setup.sty +++ b/src/core/setup.sty @@ -33,11 +33,18 @@ } -% TODO: Use landscape and columns for new version % Set up the latex document for exam summaries (Extra wide body, small margins, no header) -\newcommand{\setupCheatSheet}[1]{ - \RequirePackage[a4paper,textwidth=20cm,textheight=28.5cm]{geometry} - \title{\Huge \textbf{#1}} +\newcommand{\setupCheatSheet}[2][true]{ + \ifthenelse{\equal{#1}{true}}{ + \RequirePackage[a4paper,textwidth=28.5cm,textheight=20cm,landscape]{geometry} + \RequirePackage{flowfram} + \ffvadjustfalse + \setlength{\columnsep}{1cm} + \Ncolumn{3} + }{ + \RequirePackage[a4paper,textwidth=28.5cm,textheight=20cm]{geometry} + } + \title{\Huge \textbf{#2}} \author{\authorTitle} } @@ -47,7 +54,7 @@ % └ ┘ % Start document command (required) \newcommand{\startDocument}{ - % TODO: Cheat sheet needs different setup + % TODO: Cheat sheet needs different setup? \maketitle \pagestyle{fancy} \thispagestyle{fancy} diff --git a/src/core/translation.sty b/src/core/translation.sty index 48bf535..2e0691f 100644 --- a/src/core/translation.sty +++ b/src/core/translation.sty @@ -6,6 +6,7 @@ } \newcommand{\tr}[2]{\translate{#1}{#2}} \newcommand{\namingTranslate}[1]{\translate{\printTranslationOptionEN{#1}}{\printTranslationOptionEN{#1}}} +\newcommand{\shortNamingTranslate}[1]{\translate{\printShortTranslationOptionEN{#1}}{\printShortTranslationOptionEN{#1}}} % Translation aids (commonly used) \newcommand{\trif}{\translate{if }{falls }} diff --git a/src/counters/figures-tables.sty b/src/counters/figures-tables.sty new file mode 100644 index 0000000..d2ea58a --- /dev/null +++ b/src/counters/figures-tables.sty @@ -0,0 +1,69 @@ +% ┌ ┐ +% │ Counter numbering │ +% └ ┘ +\newcommand{\preEnvHook}[1]{% + \stepLabelNumber{combined}% + \ifthenelse{\equal{\numberingpreset}{combined}}{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{ + \stepLabelNumber{combined}% + }{}% + }{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{% + \stepLabelNumber{combined}% + }{}% + }% +} + +% Decides on the numbering to use (combined or not) +\newcommand{\loadNumberingConfiguration}{% + \ifthenelse{\boolean{numberingDisabled}}{% + \renewcommand{\thetable}{\arabic{table}} + \renewcommand{\thefigure}{\arabic{figure}} + }{ + \ifthenelse{\equal{\numberingpreset}{combined}}{% + \ifthenelse{\equal{\subsectionnumbering}{none}}{ + \renewcommand{\thetable}{\arabic{combinednone}} + \renewcommand{\thefigure}{\arabic{combinednone}} + }{% + \renewcommand{\thetable}{\ssprinter.\arabic{combined\subsectionnumbering}} + \renewcommand{\thefigure}{\ssprinter.\arabic{combined\subsectionnumbering}} + }% + }{% + \ifthenelse{\equal{\numberingpreset}{separate}}{ + \ifthenelse{\equal{\subsectionnumbering}{none}}{}{ + \renewcommand{\thetable}{\ssprinter.\arabic{table}} + \renewcommand{\thefigure}{\ssprinter.\arabic{figure}} + } + }{% + \renewcommand{\thetable}{\arabic{table}} + \renewcommand{\thefigure}{\arabic{figure}} + }% + }% + }% +} + +% Prints the preceding subsection numbers +\newcommand{\ssprinter}{\thesection} +\newcommand{\generateSubsection}{% + \ifthenelse{\equal{\subsectionnumbering}{section}}{% + \renewcommand{\ssprinter}{\thesection} + }{% + \ifthenelse{\equal{\subsectionnumbering}{subsection}}{% + \renewcommand{\ssprinter}{\thesubsection} + }{% + \ifthenelse{\equal{\subsectionnumbering}{subsubsection}}{% + \renewcommand{\ssprinter}{\thesubsubsection} + }{% + \ifthenelse{\equal{\subsectionnumbering}{paragraph}}{% + \renewcommand{\ssprinter}{\theparagraph} + }{ + \renewcommand{\ssprinter}{} + }% + }% + }% + }% +} +\loadNumberingConfiguration + +\AtBeginEnvironment{table}{\preEnvHook{table}} +\AtBeginEnvironment{figure}{\preEnvHook{figure}} diff --git a/src/counters/generator.sty b/src/counters/generator.sty new file mode 100644 index 0000000..779ed33 --- /dev/null +++ b/src/counters/generator.sty @@ -0,0 +1,33 @@ +% ── Label generator ───────────────────────────────────────────────── +\newcommand{\printNumberingConfigForDescriptor}[1]{\csname #1numbering\endcsname} +\newcommand{\printCounter}[1]{\refstepcounter{#1}\csname the#1\endcsname} + +\newcommand{\printLabel}[1]{% + \ifthenelse{\boolean{numberingDisabled}}{}{ + \ifcsdef{#1numbering}{% Extra config present + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{% + \labelPrintBackendRoutine{#1}% + }{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{separate}}{% + \printCounter{#1\subsectionnumbering}% + }{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{% + \printCounter{combined\subsectionnumbering}% + }{}% + }% + }% + }{% + \labelPrintBackendRoutine{#1}% + }% + }% +} + +\newcommand{\labelPrintBackendRoutine}[1]{% + \ifthenelse{\equal{\numberingpreset}{combined}}{% + \printCounter{combined\subsectionnumbering}% + }{ + \ifthenelse{\equal{\numberingpreset}{separate}}{% + \printCounter{#1\subsectionnumbering}% + }{}% + }% +} diff --git a/src/counters/usercommands.sty b/src/counters/usercommands.sty new file mode 100644 index 0000000..226084f --- /dev/null +++ b/src/counters/usercommands.sty @@ -0,0 +1,70 @@ +% ── Set the current number of a label ─────────────────────────────── +\newcommand{\setLabelNumber}[2]{% + \setcounter{#1none}{#2}% + \addtocounter{#1none}{-1}% + \setcounter{#1section}{#2}% + \addtocounter{#1section}{-1}% + \setcounter{#1subsection}{#2}% + \addtocounter{#1subsection}{-1}% + \setcounter{#1subsubsection}{#2}% + \addtocounter{#1subsubsection}{-1}% + \setcounter{#1paragraph}{#2}% + \addtocounter{#1paragraph}{-1}% +} + +\newcommand{\stepLabelNumber}[1]{% + \stepcounter{#1none}% + \stepcounter{#1section}% + \stepcounter{#1subsection}% + \stepcounter{#1subsubsection}% + \stepcounter{#1paragraph}% +} + + +\newcommand{\newsection}{% + \newpage + \newsectionNoPB +} + +\newcommand{\newsectionNoPB}{ + \ifthenelse{\equal{\numberingpreset}{off}}{}{% + \resetNumbering% + \resetTableAndFigureNumbering% + }% +} + +\newcommand{\resetTableAndFigureNumbering}{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{table}}{combined}}{ + \setcounter{table}{0} + }{}% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{table}}{default}}{ + \setcounter{table}{0} + }{}% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{figure}}{combined}}{% + \setcounter{figure}{0} + }{}% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{figure}}{default}}{ + \setcounter{figure}{0} + }{}% +} + + +% Numbering toggling +\newcommand{\numberingOff}{ + \setboolean{numberingDisabled}{true} + \loadNumberingConfig +} +\newcommand{\numberingOn}{ + \setboolean{numberingDisabled}{false} + \loadNumberingConfig +} + +\newcommand{\setsubsectionnumbering}[1]{ + \renewcommand{\subsectionnumbering}{#1} + \loadNumberingConfig +} + +\newcommand{\setnumberingpreset}[1]{ + \renewcommand{\numberingpreset}{#1} + \loadNumberingConfig +} diff --git a/src/style.sty b/src/style.sty index 1b99ce4..b149533 100644 --- a/src/style.sty +++ b/src/style.sty @@ -17,15 +17,7 @@ % ── Small common style elements ───────────────────────────────────── % Spacing (vertical) -% TODO: Rework -\newcommand{\hrmvspace}{\vspace{-0.25pc}} -\newcommand{\rmvspace}{\vspace{-0.5pc}} -\newcommand{\mrmvspace}{\vspace{-0.75pc}} -\newcommand{\drmvspace}{\vspace{-1pc}} -\newcommand{\dhrmvspace}{\vspace{-1.25pc}} -\newcommand{\dnrmvspace}{\vspace{-1.5pc}} -\newcommand{\dmrmvspace}{\vspace{-1.75pc}} -\newcommand{\ddrmvspace}{\vspace{-2pc}} +\newcommand{\rmvspace}[1][0.5]{\vspace{-#1pc}} % Spacing (horizontal) \newcommand{\smallhspace}{\hspace{2mm}} @@ -59,6 +51,9 @@ % 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}} + % Print a table of contents as a tcolorbox \newcommand{\printtoc}[1]{ \renewcommand{\cfttoctitlefont}{} @@ -78,3 +73,10 @@ \tableofcontents \end{tcolorbox} } + + +% Draw box around links. First arg link, second arg display +\newcommand{\hlhref}[2]{\color{MidnightBlue}\fbox{\href{#1}{#2}}\color{black}} + +% Same for urls (just one arg tho) +\newcommand{\hlurl}[1]{\color{MidnightBlue}\fbox{\url{#1}}\color{black}} diff --git a/src/style/environments.sty b/src/style/environments.sty index 28baab2..7c432b4 100644 --- a/src/style/environments.sty +++ b/src/style/environments.sty @@ -1,10 +1,17 @@ % ── Inline environments ───────────────────────────────────────────── +% TODO: ref label generation \newcommand{\inline}[2][NONAME]{% \ifthenelse{\equal{NONAME}{#1}}{% \anonymousInlineDescriptorTemplate{#2}{\printLabel{#2}}% }{% \inlineDescriptorTemplate{#2}{\printLabel{#2}}{#1}% - } + }% +} + +\newcommand{\labeledInline}[3][NONAME]{% + \edef{\tempLabel}{#3} + \label{\tempLabel} + \inline[#1]{#2} } \newcommand{\short}[2][NONAME]{% @@ -12,5 +19,14 @@ \anonymousShortDescriptorTemplate{#2}{\printLabel{#2}}% }{% \shortDescriptorTemplate{#2}{\printLabel{#2}}{#1}% - } + }% } + +\newcommand{\labeledShort}[3][NONAME]{% + \edef{\tempLabel}{#3} + \label{\tempLabel} + \short[#1]{#2} +} + +\newcommand{\inlineproof}{\anonymousInlineDescriptorTemplate{proof}{}} +\newcommand{\shortproof}{\anonymousShortDescriptorTemplate{proof}{}} diff --git a/src/style/spacing.sty b/src/style/spacing.sty new file mode 100644 index 0000000..3a10022 --- /dev/null +++ b/src/style/spacing.sty @@ -0,0 +1,24 @@ +\newcommand{\noverticalspacing}{ + \abovedisplayskip 1pt plus 2pt minus 1pt + \belowdisplayskip 1pt plus 2pt minus 1pt + \abovedisplayshortskip -10pt + \belowdisplayshortskip 1pt plus 2pt minus 1pt +} +\newcommand{\smallverticalspacing}{ + \abovedisplayskip 4pt plus 3pt minus 2pt + \belowdisplayskip 5pt plus 5pt minus 2pt + \abovedisplayshortskip -5pt + \belowdisplayshortskip 3pt plus 4pt minus 2pt +} +\newcommand{\mediumverticalspacing}{ + \abovedisplayskip 7pt plus 4pt minus 3pt + \belowdisplayskip 9pt plus 6pt minus 3pt + \abovedisplayshortskip 0pt + \belowdisplayshortskip 5pt plus 4pt minus 2pt +} +\newcommand{\largeverticalspacing}{ + \abovedisplayskip 13pt plus 3pt minus 1pt + \belowdisplayskip 15pt plus 9pt minus 6pt + \abovedisplayshortskip 5pt plus 2pt minus 3pt + \belowdisplayshortskip 7pt plus 5pt minus 2pt +} diff --git a/src/style/tcb.sty b/src/style/tcb.sty index 29d0412..92f9dd7 100644 --- a/src/style/tcb.sty +++ b/src/style/tcb.sty @@ -6,13 +6,6 @@ \newtcolorbox{recall}[2][]{mainboxstyle,colback=recallcolor!5!white,colframe=recallcolor!75!black,colbacktitle=recallcolor!75!black,title={\large #2}, overlay={\node[overlaystyle,draw=recallcolor!75!black,,fill=recallcolor!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} From 31e92b012b23aadd96d15baffc24eda98faa2370 Mon Sep 17 00:00:00 2001 From: "Helpers compiler [bot]" Date: Sat, 21 Feb 2026 15:26:29 +0000 Subject: [PATCH 15/32] [skip ci] Build helpers on push --- docs/docs.tex | 10 +- docs/parts/intro.tex | 2 +- docs/parts/reference/cs.tex | 40 +- docs/parts/reference/intro.tex | 10 +- docs/parts/reference/loading.tex | 88 +-- docs/parts/reference/math.tex | 48 +- docs/parts/reference/style/descriptors.tex | 40 +- docs/parts/reference/style/intro.tex | 10 +- docs/parts/reference/style/spacing.tex | 34 +- .../reference/style/tcolorbox/counter.tex | 20 +- .../reference/style/tcolorbox/default.tex | 16 +- .../parts/reference/style/tcolorbox/other.tex | 4 +- docs/parts/reference/tables-index.tex | 6 +- examples/letter/letter.tex | 6 +- janishutz-helpers.tex | 538 +++++++++--------- letter.tex | 14 +- 16 files changed, 443 insertions(+), 443 deletions(-) diff --git a/docs/docs.tex b/docs/docs.tex index 3aeebd7..2352e47 100644 --- a/docs/docs.tex +++ b/docs/docs.tex @@ -11,17 +11,17 @@ \vspace{2cm} \begin{center} - \includegraphics[width=0.5\linewidth]{../assets/logo.jpg} + \includegraphics[width=0.5\linewidth]{../assets/logo.jpg} \end{center} \vspace{5cm} \begin{center} - \begin{Large} - \textsc{Usage guide for Version 2.0.0} - \end{Large} + \begin{Large} + \textsc{Usage guide for Version 2.0.0} + \end{Large} - \hlurl{https://git.janishutz.com/janishutz/latex} + \hlurl{https://git.janishutz.com/janishutz/latex} \end{center} diff --git a/docs/parts/intro.tex b/docs/parts/intro.tex index 268bba4..7d724e4 100644 --- a/docs/parts/intro.tex +++ b/docs/parts/intro.tex @@ -3,7 +3,7 @@ This set of \LaTeX files is designed to give you a good looking, pre-configured \LaTeX setup, which helps you get started much more quickly. There are quite a lot of configuration options, but it is likely that more are to come in the future. -If you have any suggestions as to what should be added, don't hesitate to open a \hlhref{https://support.janishutz.com?a=add}{support ticket}\ +If you have any suggestions as to what should be added, don't hesitate to open a \hlhref{https://support.janishutz.com?a=add}{support ticket}\ or contacting me via email to \texttt{development@janishutz.com}. diff --git a/docs/parts/reference/cs.tex b/docs/parts/reference/cs.tex index a2bf0e6..199046a 100644 --- a/docs/parts/reference/cs.tex +++ b/docs/parts/reference/cs.tex @@ -2,16 +2,16 @@ \subsection{CS-Commands} These commands have to be executed inside math environment \begin{itemize} - \item \verb|\tct| Time complexity in $\tct{}$-notation (average case) - \item \verb|\tco| Time complexity in $\tco{}$-notation (worst case / upper bound) - \item \verb|\tcl| Time complexity in $\tcl{}$-notation (best case / lower bound) - \item \verb|\t[R, C, N]| Simply prints a capital R, C or N in math mode as normal text. So e.g. use $\tR$ to print an R - \item \verb|\wordbool| Prints $\wordbool$ - \item \verb|\words|\{\textit{string}\} Prints $\words{test}$ - \item \verb|\wordm|\{\textit{math}\} Prints $\wordm{1}$ - \item \verb|\word| Prints $\word$ - \item \verb|\alphabets|\{\textit{string}\} Prints $\alphabets{test}$ - \item \verb|\alphabetbool| Prints $\alphabetbool$ + \item \verb|\tct| Time complexity in $\tct{}$-notation (average case) + \item \verb|\tco| Time complexity in $\tco{}$-notation (worst case / upper bound) + \item \verb|\tcl| Time complexity in $\tcl{}$-notation (best case / lower bound) + \item \verb|\t[R, C, N]| Simply prints a capital R, C or N in math mode as normal text. So e.g. use $\tR$ to print an R + \item \verb|\wordbool| Prints $\wordbool$ + \item \verb|\words|\{\textit{string}\} Prints $\words{test}$ + \item \verb|\wordm|\{\textit{math}\} Prints $\wordm{1}$ + \item \verb|\word| Prints $\word$ + \item \verb|\alphabets|\{\textit{string}\} Prints $\alphabets{test}$ + \item \verb|\alphabetbool| Prints $\alphabetbool$ \end{itemize} \subsubsection{Algorithms} @@ -24,9 +24,9 @@ These commands have to be executed inside math environment \end{minted} \begin{algo}{functionName(A)} - \Procedure{functionName}{$(A)$} - \State\Return "Hello World" - \EndProcedure + \Procedure{functionName}{$(A)$} + \State\Return "Hello World" + \EndProcedure \end{algo} @@ -47,19 +47,19 @@ This is nothing different than a wrapper for a minted environment with a box dra Example (in python): \begin{code}{python} - def hello_world(): - print("hello world!") + def hello_world(): + print("hello world!") \end{code} \paragraph{Code in separate files} It is also possible to load code from a source file using the provided commands: \begin{itemize} - \item \verb|\inputcode|\{\textit{language}\}\{\textit{file}\}, where \textit{language} is the programming language - and \textit{file} is the file name of the file to be loaded, relative to the main tex file. - \item \verb|\inputcodewithfilename|\{\textit{language}\}\{\textit{hidden-path}\}\{\textit{shown-path}\}, where \textit{language} is the programming language, - \textit{hidden-path} is the part of the path you want to hide of the file to be loaded, relative to the main tex file - and \textit{shown-path} is the displayed part. + \item \verb|\inputcode|\{\textit{language}\}\{\textit{file}\}, where \textit{language} is the programming language + and \textit{file} is the file name of the file to be loaded, relative to the main tex file. + \item \verb|\inputcodewithfilename|\{\textit{language}\}\{\textit{hidden-path}\}\{\textit{shown-path}\}, where \textit{language} is the programming language, + \textit{hidden-path} is the part of the path you want to hide of the file to be loaded, relative to the main tex file + and \textit{shown-path} is the displayed part. \end{itemize} \inlineexample \begin{minted}{latex} diff --git a/docs/parts/reference/intro.tex b/docs/parts/reference/intro.tex index 0d02ae9..560869f 100644 --- a/docs/parts/reference/intro.tex +++ b/docs/parts/reference/intro.tex @@ -2,10 +2,10 @@ \section{Full Command Reference} \subsection{Variables} \begin{itemize} - \item \textit{string}: Any normal text - \item \textit{boolean}: \texttt{true} or \texttt{false} - \item \textit{math}: Any math input - \item \textit{number}: Any non-negative integer, i.e. no commas - \item \textit{color}: Any of the \texttt{dvipsnames} colours of \texttt{xcolor} or as defined in the color config file + \item \textit{string}: Any normal text + \item \textit{boolean}: \texttt{true} or \texttt{false} + \item \textit{math}: Any math input + \item \textit{number}: Any non-negative integer, i.e. no commas + \item \textit{color}: Any of the \texttt{dvipsnames} colours of \texttt{xcolor} or as defined in the color config file \end{itemize} diff --git a/docs/parts/reference/loading.tex b/docs/parts/reference/loading.tex index fbeb125..8194cf3 100644 --- a/docs/parts/reference/loading.tex +++ b/docs/parts/reference/loading.tex @@ -1,56 +1,56 @@ \subsection{Per-File config} \label{sec:perFileConf} \begin{itemize} - \item \verb|\renewcommand{\authorTitle}|\{\textit{string}\} Change the author (in the title) for this document only - \item \verb|\renewcommand{\authorHeaders}|\{\textit{string}\} Change the author (in the header) for this document only - \item \verb|\renewcommand{\NamingDE}|\{\textit{string}\} Configure translations for descriptors on the fly (for DE) - \item \verb|\renewcommand{\NamingEN}|\{\textit{string}\} Configure translations for descriptors on the fly (for EN) - \item \verb|\setnumberingpreset|\{\textit{string}\} - Change the numbering preset of definitions, lemmas, etc for this document. - Value can be \texttt{off}, \texttt{separate}, \texttt{combined}. - \item \verb|\renewcommand{numbering}|\{\textit{string}\} - Change the numbering for an individual descriptor, passed as first argument. - The second value can be \texttt{off}, \texttt{separate}, \texttt{combined} or \texttt{default}. - If set to \texttt{default}, it will follow the \verb|\numberingpreset| setting. - If you do not override it here, it will follow your global config as set in the config directory - and if unset there, it will follow the \verb|\numberingpreset| setting. - \item \verb|\renew|\{\textit{string}\} Change the format of the numbering of definitions, etc. - The value can be set to any of the below - \begin{itemize}[noitemsep] - \item none = $<$section$>$.$<$number$>$ - \item section = $<$section$>$.$<$number$>$ - \item subsection = $<$section$>$.$<$subsection$>$.$<$number$>$ - \item subsubsection = $<$section$>$.$<$subsection$>$.$<$subsubsection$>$.$<$number$>$ - \item paragraph = $<$section$>$.$<$subsection$>$.$<$subsubsection$>$.$<$paragraph$>$.$<$number$>$ - \end{itemize} - Changing this won't affect all of numbering prior to the command, only after. You can change this setting (and the ones above) at any point in the document - \item \verb|\setcounter{descriptorShadeStrength}|\{\textit{number}\} Change the colour saturation of the inline descriptors - \item \verb|\setcounter{shadeStrength}|\{\textit{number}\} Change the colour saturation of the \verb|\shade| command - \item \verb|\loadGerman| Load german configuration. Needs to be in preamble and you may only use it once - \item To change the font for the entire document, load the font package using \verb|\usepackage|, with the last occurrence of a font package determining the active one. - Then select the type by using \verb|\setFontType|\textit{\{mono $|$ serif $|$ sans\}}. - A list of fonts is available \color{Cyan}\href{https://www.overleaf.com/learn/latex/Font_typefaces#Reference_guide}{here}\color{black}. - You may change the font only for a specific section, by enclosing \verb|\setFont| and the text that should be written in said typeface in curly braces. + \item \verb|\renewcommand{\authorTitle}|\{\textit{string}\} Change the author (in the title) for this document only + \item \verb|\renewcommand{\authorHeaders}|\{\textit{string}\} Change the author (in the header) for this document only + \item \verb|\renewcommand{\NamingDE}|\{\textit{string}\} Configure translations for descriptors on the fly (for DE) + \item \verb|\renewcommand{\NamingEN}|\{\textit{string}\} Configure translations for descriptors on the fly (for EN) + \item \verb|\setnumberingpreset|\{\textit{string}\} + Change the numbering preset of definitions, lemmas, etc for this document. + Value can be \texttt{off}, \texttt{separate}, \texttt{combined}. + \item \verb|\renewcommand{numbering}|\{\textit{string}\} + Change the numbering for an individual descriptor, passed as first argument. + The second value can be \texttt{off}, \texttt{separate}, \texttt{combined} or \texttt{default}. + If set to \texttt{default}, it will follow the \verb|\numberingpreset| setting. + If you do not override it here, it will follow your global config as set in the config directory + and if unset there, it will follow the \verb|\numberingpreset| setting. + \item \verb|\renew|\{\textit{string}\} Change the format of the numbering of definitions, etc. + The value can be set to any of the below + \begin{itemize}[noitemsep] + \item none = $<$section$>$.$<$number$>$ + \item section = $<$section$>$.$<$number$>$ + \item subsection = $<$section$>$.$<$subsection$>$.$<$number$>$ + \item subsubsection = $<$section$>$.$<$subsection$>$.$<$subsubsection$>$.$<$number$>$ + \item paragraph = $<$section$>$.$<$subsection$>$.$<$subsubsection$>$.$<$paragraph$>$.$<$number$>$ + \end{itemize} + Changing this won't affect all of numbering prior to the command, only after. You can change this setting (and the ones above) at any point in the document + \item \verb|\setcounter{descriptorShadeStrength}|\{\textit{number}\} Change the colour saturation of the inline descriptors + \item \verb|\setcounter{shadeStrength}|\{\textit{number}\} Change the colour saturation of the \verb|\shade| command + \item \verb|\loadGerman| Load german configuration. Needs to be in preamble and you may only use it once + \item To change the font for the entire document, load the font package using \verb|\usepackage|, with the last occurrence of a font package determining the active one. + Then select the type by using \verb|\setFontType|\textit{\{mono $|$ serif $|$ sans\}}. + A list of fonts is available \color{Cyan}\href{https://www.overleaf.com/learn/latex/Font_typefaces#Reference_guide}{here}\color{black}. + You may change the font only for a specific section, by enclosing \verb|\setFont| and the text that should be written in said typeface in curly braces. \end{itemize} \subsubsection{Letters} \begin{itemize} - \item \verb|\renewcommand{\name}|\{\textit{string}\} Change the name (for letters) for this document only - \item \verb|\renewcommand{\street}|\{\textit{string}\} Change the street (for letters) for this document only - \item \verb|\renewcommand{\city}|\{\textit{string}\} Change the city (for letters) for this document only - \item \verb|\renewcommand{\countrycode}|\{\textit{string}\} Change the country-code (for letters) for this document only + \item \verb|\renewcommand{\name}|\{\textit{string}\} Change the name (for letters) for this document only + \item \verb|\renewcommand{\street}|\{\textit{string}\} Change the street (for letters) for this document only + \item \verb|\renewcommand{\city}|\{\textit{string}\} Change the city (for letters) for this document only + \item \verb|\renewcommand{\countrycode}|\{\textit{string}\} Change the country-code (for letters) for this document only \end{itemize} \newpage \subsection{Setup, Loading \& Translation} \begin{itemize} - \item \verb|\setup|\{\textit{string}\} Prepare the document with the \textit{string} being the title - \item \verb|\setupCheatSheet|[\textit{boolean}]\{\textit{string}\} Prepare the document with smaller borders and no headers / footers. - The mandatory argument is the title, the optional argument will, if set to \texttt{true} use a landscape layout (default) - and a horizontal layout if set to \texttt{false}. - \item \verb|\setupBarebones|\{\textit{string}\} Minimal setup, only borders and title set - \item \verb|\startDocument| Initialize the document. Has to be called after \verb|\begin{document}| - \item \verb|\translate|\{\textit{string}\}\{\textit{string}\} First \textit{string} is English, second \textit{string} is German. Switches automatically based on language selected - \item \verb|\tr|\{\textit{string}\}\{\textit{string}\} Shorthand for \verb|\translate| - \item \verb|\numberingOn| Turn on the numbering (if previously turned off using \verb|\numberingOff| or set in the config) - \item \verb|\numberingOff| Turn off the numbering (useful to temporarily turn off numbering) + \item \verb|\setup|\{\textit{string}\} Prepare the document with the \textit{string} being the title + \item \verb|\setupCheatSheet|[\textit{boolean}]\{\textit{string}\} Prepare the document with smaller borders and no headers / footers. + The mandatory argument is the title, the optional argument will, if set to \texttt{true} use a landscape layout (default) + and a horizontal layout if set to \texttt{false}. + \item \verb|\setupBarebones|\{\textit{string}\} Minimal setup, only borders and title set + \item \verb|\startDocument| Initialize the document. Has to be called after \verb|\begin{document}| + \item \verb|\translate|\{\textit{string}\}\{\textit{string}\} First \textit{string} is English, second \textit{string} is German. Switches automatically based on language selected + \item \verb|\tr|\{\textit{string}\}\{\textit{string}\} Shorthand for \verb|\translate| + \item \verb|\numberingOn| Turn on the numbering (if previously turned off using \verb|\numberingOff| or set in the config) + \item \verb|\numberingOff| Turn off the numbering (useful to temporarily turn off numbering) \end{itemize} diff --git a/docs/parts/reference/math.tex b/docs/parts/reference/math.tex index 62aa5bb..5f1bebe 100644 --- a/docs/parts/reference/math.tex +++ b/docs/parts/reference/math.tex @@ -2,29 +2,29 @@ \subsection{Math-Commands} All these have to be executed in the math environment. \begin{itemize} - \item \verb|\R| Prints $\R$. Same goes for \verb|\C| printing $\C$, etc. - \item \verb|\floor|\{\textit{math}\} Round down symbol, e.g. $\floor{n}$ - \item \verb|\ceil|\{\textit{math}\} Round up symbol, e.g. $\ceil{n}$ - \item \verb|\Leftrightarrowequiv| Equivalence transformation symbol, $\Leftrightarrowequiv$. - \item \verb|\Rightarrowequiv| Equivalence transformation symbol, $\Rightarrowequiv$. - \item \verb|\Leftarrowequiv| Equivalence transformation symbol, $\Leftarrowequiv$. - \item \verb|\defAs| Define as, i.e. $\defAs$ - \item \verb|\defEquiv| Define as, but with a two-sided implication instead of equality, i.e. $\defEquiv$ - \item \verb|\defImplies| Define as, but with one-sided implication, i.e. $\defImplies$ - \item \verb|\divider| Divider or divides symbol, e.g. $a \divider b$ - \item \verb|\lcm| Least common multiple, $\lcm$ - \item \verb|\arcsinh| Inverse of hyperbolic sine, $\arcsinh$ - \item \verb|\arccosh| Inverse of hyperbolic cosine, $\arccosh$ - \item \verb|\arctanh| Inverse of hyperbolic tangent, $\arctanh$ - \item \verb|\limit|\{\textit{math}\}\{\textit{math}\} Shortened limit notation, $\displaystyle \limit{x}{x_0}$ - \item \verb|\limni| Shortened limit notation for $n \rightarrow \infty$, $\displaystyle \limni$ - \item \verb|\liminfni| Shortened limit inferior notation for $n \rightarrow \infty$, $\displaystyle \liminfni$ - \item \verb|\limsupni| Shortened limit superior notation for $n \rightarrow \infty$, $\displaystyle \limsupni$ - \item \verb|\diff|\{\textit{math}\} Derivative, $\displaystyle \diff{x}$ - \item \verb|\diffn|\{\textit{math}\}\{\textit{math}\} Higher derivative, $\displaystyle \diffn{x}{2}$ - \item \verb|\pardiff|\{\textit{math}\} Partial derivative, $\displaystyle \pardiff{x}$ - \item \verb|\pardiffn|\{\textit{math}\}\{\textit{math}\} Higher partial derivative, $\displaystyle \pardiffn{x}{2}$ - \item \verb|\elementstack|\{\textit{math}\}\{\textit{math}\} Stack two elements on top of eachother. Uses \verb|\genfrac| under the hood. - Can be used for example in limits as an alternative to \verb|\atop| or \verb|\substack|. + \item \verb|\R| Prints $\R$. Same goes for \verb|\C| printing $\C$, etc. + \item \verb|\floor|\{\textit{math}\} Round down symbol, e.g. $\floor{n}$ + \item \verb|\ceil|\{\textit{math}\} Round up symbol, e.g. $\ceil{n}$ + \item \verb|\Leftrightarrowequiv| Equivalence transformation symbol, $\Leftrightarrowequiv$. + \item \verb|\Rightarrowequiv| Equivalence transformation symbol, $\Rightarrowequiv$. + \item \verb|\Leftarrowequiv| Equivalence transformation symbol, $\Leftarrowequiv$. + \item \verb|\defAs| Define as, i.e. $\defAs$ + \item \verb|\defEquiv| Define as, but with a two-sided implication instead of equality, i.e. $\defEquiv$ + \item \verb|\defImplies| Define as, but with one-sided implication, i.e. $\defImplies$ + \item \verb|\divider| Divider or divides symbol, e.g. $a \divider b$ + \item \verb|\lcm| Least common multiple, $\lcm$ + \item \verb|\arcsinh| Inverse of hyperbolic sine, $\arcsinh$ + \item \verb|\arccosh| Inverse of hyperbolic cosine, $\arccosh$ + \item \verb|\arctanh| Inverse of hyperbolic tangent, $\arctanh$ + \item \verb|\limit|\{\textit{math}\}\{\textit{math}\} Shortened limit notation, $\displaystyle \limit{x}{x_0}$ + \item \verb|\limni| Shortened limit notation for $n \rightarrow \infty$, $\displaystyle \limni$ + \item \verb|\liminfni| Shortened limit inferior notation for $n \rightarrow \infty$, $\displaystyle \liminfni$ + \item \verb|\limsupni| Shortened limit superior notation for $n \rightarrow \infty$, $\displaystyle \limsupni$ + \item \verb|\diff|\{\textit{math}\} Derivative, $\displaystyle \diff{x}$ + \item \verb|\diffn|\{\textit{math}\}\{\textit{math}\} Higher derivative, $\displaystyle \diffn{x}{2}$ + \item \verb|\pardiff|\{\textit{math}\} Partial derivative, $\displaystyle \pardiff{x}$ + \item \verb|\pardiffn|\{\textit{math}\}\{\textit{math}\} Higher partial derivative, $\displaystyle \pardiffn{x}{2}$ + \item \verb|\elementstack|\{\textit{math}\}\{\textit{math}\} Stack two elements on top of eachother. Uses \verb|\genfrac| under the hood. + Can be used for example in limits as an alternative to \verb|\atop| or \verb|\substack|. \end{itemize} diff --git a/docs/parts/reference/style/descriptors.tex b/docs/parts/reference/style/descriptors.tex index 83b0eb3..9d65323 100644 --- a/docs/parts/reference/style/descriptors.tex +++ b/docs/parts/reference/style/descriptors.tex @@ -4,30 +4,30 @@ See \ref{sec:counters} for a guide on how to change the current number. \paragraph{Inline} \begin{tables}{ll}{Command & Output} - \verb|\inlineexample| & \inlineexample \\ - \verb|\inlinedefinition| & \inlinedefinition \\ - \verb|\inlinetheorem| & \inlinetheorem \\ - \verb|\inlinelemma| & \inlinelemma \\ - \verb|\inlinecorollary| & \inlinecorollary \\ - \verb|\inlineproposition| & \inlineproposition \\ - \verb|\inlinefact| & \inlinefact \\ - \verb|\inlineaxiom| & \inlineaxiom \\ - \verb|\inlineremark| & \inlineremark \\ - \verb|\inlineproof| & \inlineproof \\ + \verb|\inlineexample| & \inlineexample \\ + \verb|\inlinedefinition| & \inlinedefinition \\ + \verb|\inlinetheorem| & \inlinetheorem \\ + \verb|\inlinelemma| & \inlinelemma \\ + \verb|\inlinecorollary| & \inlinecorollary \\ + \verb|\inlineproposition| & \inlineproposition \\ + \verb|\inlinefact| & \inlinefact \\ + \verb|\inlineaxiom| & \inlineaxiom \\ + \verb|\inlineremark| & \inlineremark \\ + \verb|\inlineproof| & \inlineproof \\ \end{tables} \paragraph{Shortened} \begin{tables}{ll}{Command & Output} - \verb|\shortexample| & \shortexample \\ - \verb|\shortdefinition| & \shortdefinition \\ - \verb|\shorttheorem| & \shorttheorem \\ - \verb|\shortlemma| & \shortlemma \\ - \verb|\shortcorollary| & \shortcorollary \\ - \verb|\shortproposition| & \shortproposition \\ - \verb|\shortfact| & \shortfact \\ - \verb|\shortaxiom| & \shortaxiom \\ - \verb|\shortremark| & \shortremark \\ - \verb|\shortproof| & \shortproof \\ + \verb|\shortexample| & \shortexample \\ + \verb|\shortdefinition| & \shortdefinition \\ + \verb|\shorttheorem| & \shorttheorem \\ + \verb|\shortlemma| & \shortlemma \\ + \verb|\shortcorollary| & \shortcorollary \\ + \verb|\shortproposition| & \shortproposition \\ + \verb|\shortfact| & \shortfact \\ + \verb|\shortaxiom| & \shortaxiom \\ + \verb|\shortremark| & \shortremark \\ + \verb|\shortproof| & \shortproof \\ \end{tables} \newpage diff --git a/docs/parts/reference/style/intro.tex b/docs/parts/reference/style/intro.tex index 8425d00..b177714 100644 --- a/docs/parts/reference/style/intro.tex +++ b/docs/parts/reference/style/intro.tex @@ -1,9 +1,9 @@ \newpage \subsection{Style} \begin{itemize} - \item \verb|\TODO| Print a highlighted \TODO - \item \verb|\background|\{\textit{color}\}\{\textit{number}\}\{\textit{string}\} Print \background{ForestGreen}{50}{shaded text, with colour saturation} - \item \verb|\shade|\{\textit{color}\}\{\textit{string}\} Print \shade{ForestGreen}{shaded text} - \item \verb|\backdrop|\{\textit{string}\} Print \backdrop{text with gray backdrop} - \item \verb|\printtoc|\{\textit{color}\} Print the table of contents (as seen on the first page). The normal \verb|\tableofcontents| still works as expected + \item \verb|\TODO| Print a highlighted \TODO + \item \verb|\background|\{\textit{color}\}\{\textit{number}\}\{\textit{string}\} Print \background{ForestGreen}{50}{shaded text, with colour saturation} + \item \verb|\shade|\{\textit{color}\}\{\textit{string}\} Print \shade{ForestGreen}{shaded text} + \item \verb|\backdrop|\{\textit{string}\} Print \backdrop{text with gray backdrop} + \item \verb|\printtoc|\{\textit{color}\} Print the table of contents (as seen on the first page). The normal \verb|\tableofcontents| still works as expected \end{itemize} diff --git a/docs/parts/reference/style/spacing.tex b/docs/parts/reference/style/spacing.tex index 5a589d1..8e766df 100644 --- a/docs/parts/reference/style/spacing.tex +++ b/docs/parts/reference/style/spacing.tex @@ -2,24 +2,24 @@ For spacing in math mode, prefer using the methods described \hlhref{https://www.overleaf.com/learn/latex/Spacing_in_math_mode}{here}, for vertical spacing prefer the commands described below \begin{itemize} - \item \verb|\smallhspace| Prints a 2mm hspace - \item \verb|\mediumhspace| Prints a 5mm hspace - \item \verb|\largehspace| Prints a 10mm = 1cm hspace - \item \verb|\rmvspace|[\textit{number}] Removes an amount of vertical space. Should not be used unless can be avoided with general settings. Defaults to 0.5 + \item \verb|\smallhspace| Prints a 2mm hspace + \item \verb|\mediumhspace| Prints a 5mm hspace + \item \verb|\largehspace| Prints a 10mm = 1cm hspace + \item \verb|\rmvspace|[\textit{number}] Removes an amount of vertical space. Should not be used unless can be avoided with general settings. Defaults to 0.5 \end{itemize} Vertical spacing config for the entire document. By default, the \LaTeX\ defaults are used. \begin{itemize} - \item \verb|\noverticalspacing| - \item \verb|\smallverticalspacing| - \item \verb|\mediumverticalspacing| (approximately the same as the \LaTeX defaults) - \item \verb|\largeverticalspacing| + \item \verb|\noverticalspacing| + \item \verb|\smallverticalspacing| + \item \verb|\mediumverticalspacing| (approximately the same as the \LaTeX defaults) + \item \verb|\largeverticalspacing| \end{itemize} You are of course free to redefine commands like \verb|\parskip|, etc to your liking, these commands are just provided for your convenience. See \hlhref{https://www.overleaf.com/learn/latex/\%5Cabovedisplayskip_and_related_commands}{here}\ for more details and \hlhref{https://latex-tutorial.com/latex-space/}{here for a good guide on spacing}. -To control paragraph spacing, see \hlhref{https://mirror.ox.ac.uk/sites/ctan.org/macros/latex/contrib/parskip/parskip.pdf}{here}\ +To control paragraph spacing, see \hlhref{https://mirror.ox.ac.uk/sites/ctan.org/macros/latex/contrib/parskip/parskip.pdf}{here}\ and \hlhref{https://www.overleaf.com/learn/latex/Articles/How_to_change_paragraph_spacing_in_LaTeX}{here} To make use of \TeX's automatic wrapping of short alignment environments, use the \texttt{aligned} @@ -32,11 +32,11 @@ Below a demonstration on the effects of the different settings: This is text: \[ - \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x \] This is very long introductory text that exceeds the limit (same applies to long equations) \[ - \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x \] Text following the equation (no paragraph break!) @@ -45,11 +45,11 @@ Text following the equation (no paragraph break!) This is text: \[ - \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x \] This is very long introductory text that exceeds the limit (same applies to long equations) \[ - \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x \] Text following the equation (no paragraph break!) @@ -58,11 +58,11 @@ Text following the equation (no paragraph break!) This is text: \[ - \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x \] This is very long introductory text that exceeds the limit (same applies to long equations) \[ - \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x \] Text following the equation (no paragraph break!) @@ -71,10 +71,10 @@ Text following the equation (no paragraph break!) This is text: \[ - \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x \] This is very long introductory text that exceeds the limit (same applies to long equations) \[ - \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x \] Text following the equation (no paragraph break!) diff --git a/docs/parts/reference/style/tcolorbox/counter.tex b/docs/parts/reference/style/tcolorbox/counter.tex index 9655378..6837c7f 100644 --- a/docs/parts/reference/style/tcolorbox/counter.tex +++ b/docs/parts/reference/style/tcolorbox/counter.tex @@ -5,7 +5,7 @@ These ones also have two settings, namely, you can change the counter behaviour See \ref{sec:counters} for a guide on how to change the current number and how to reference them. \begin{definition}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{definition}[]{Title here} \end{definition} @@ -13,7 +13,7 @@ See \ref{sec:counters} for a guide on how to change the current number and how t \end{definition} \begin{theorem}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{theorem}[]{Title here} \end{theorem} @@ -21,7 +21,7 @@ See \ref{sec:counters} for a guide on how to change the current number and how t \end{theorem} \begin{lemma}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{lemma}[]{Title here} \end{lemma} @@ -29,7 +29,7 @@ See \ref{sec:counters} for a guide on how to change the current number and how t \end{lemma} \begin{corollary}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{corollary}[]{Title here} \end{corollary} @@ -37,7 +37,7 @@ See \ref{sec:counters} for a guide on how to change the current number and how t \end{corollary} \begin{proposition}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{proposition}[]{Title here} \end{proposition} @@ -45,7 +45,7 @@ See \ref{sec:counters} for a guide on how to change the current number and how t \end{proposition} \begin{fact}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{fact}[]{Title here} \end{fact} @@ -53,7 +53,7 @@ See \ref{sec:counters} for a guide on how to change the current number and how t \end{fact} \begin{axiom}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{axiom}[]{Title here} \end{axiom} @@ -61,7 +61,7 @@ See \ref{sec:counters} for a guide on how to change the current number and how t \end{axiom} \begin{example}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{example}[]{Title here} \end{example} @@ -69,7 +69,7 @@ See \ref{sec:counters} for a guide on how to change the current number and how t \end{example} \begin{remark}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{remark}[]{Title here} \end{remark} @@ -77,7 +77,7 @@ See \ref{sec:counters} for a guide on how to change the current number and how t \end{remark} \begin{formula}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{formula}[]{Title here} \end{formula} diff --git a/docs/parts/reference/style/tcolorbox/default.tex b/docs/parts/reference/style/tcolorbox/default.tex index 32eab31..9b3c24d 100644 --- a/docs/parts/reference/style/tcolorbox/default.tex +++ b/docs/parts/reference/style/tcolorbox/default.tex @@ -4,7 +4,7 @@ These tcolorboxes can be created using the code displayed inside them. \begin{terms}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{terms}[]{Title here} \end{terms} @@ -12,7 +12,7 @@ These tcolorboxes can be created using the code displayed inside them. \end{terms} \begin{notation}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{notation}[]{Title here} \end{notation} @@ -20,7 +20,7 @@ These tcolorboxes can be created using the code displayed inside them. \end{notation} \begin{recall}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{recall}[]{Title here} \end{recall} @@ -28,7 +28,7 @@ These tcolorboxes can be created using the code displayed inside them. \end{recall} \begin{usage}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{usage}[]{Title here} \end{usage} @@ -36,7 +36,7 @@ These tcolorboxes can be created using the code displayed inside them. \end{usage} \begin{properties}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{properties}[]{Title here} \end{properties} @@ -44,7 +44,7 @@ These tcolorboxes can be created using the code displayed inside them. \end{properties} \begin{restrictions}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{restrictions}[]{Title here} \end{restrictions} @@ -52,7 +52,7 @@ These tcolorboxes can be created using the code displayed inside them. \end{restrictions} \begin{limitations}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{limitations}[]{Title here} \end{limitations} @@ -60,7 +60,7 @@ These tcolorboxes can be created using the code displayed inside them. \end{limitations} \begin{intuition}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{intuition}[]{Title here} \end{intuition} diff --git a/docs/parts/reference/style/tcolorbox/other.tex b/docs/parts/reference/style/tcolorbox/other.tex index 0ce3010..9e32437 100644 --- a/docs/parts/reference/style/tcolorbox/other.tex +++ b/docs/parts/reference/style/tcolorbox/other.tex @@ -2,9 +2,9 @@ This tcolorbox has all the styles applied, but allows configuring the colour and both title boxes \begin{general}[]{title}{second title}{red} - This Tcolorbox is flexible and can take any main and secondary title, as well as any colour. + This Tcolorbox is flexible and can take any main and secondary title, as well as any colour. - \begin{minted}{latex} + \begin{minted}{latex} \begin{general}[]{title}{second title}{red} \end{general} diff --git a/docs/parts/reference/tables-index.tex b/docs/parts/reference/tables-index.tex index 627167b..9bb0283 100644 --- a/docs/parts/reference/tables-index.tex +++ b/docs/parts/reference/tables-index.tex @@ -1,6 +1,6 @@ \newpage \subsection{Tables} -You can set up nice looking tables using the \texttt{booktab} and \texttt{tabulary} environments. +You can set up nice looking tables using the \texttt{booktab} and \texttt{tabulary} environments. \textit{New as of October 28 2025:} Tables and figures are now also numbered according to your settings @@ -12,7 +12,7 @@ You can set up nice looking tables using the \texttt{booktab} and \texttt{tabula This outputs as \begin{tables}{ll}{Left & Right} - Left content & Right Content \\ + Left content & Right Content \\ \end{tables} This doesn't use the \texttt{table} environment, so no captions are possible, as to why there is also @@ -27,7 +27,7 @@ This outputs as \begin{fullTable}{ll}{Left & Right}{This is a caption} - Left content & Right Content\\ + Left content & Right Content\\ \end{fullTable} diff --git a/examples/letter/letter.tex b/examples/letter/letter.tex index 9e96b2f..d462192 100644 --- a/examples/letter/letter.tex +++ b/examples/letter/letter.tex @@ -6,10 +6,10 @@ \setkomavar{subject}{Test} \begin{document}\raggedright \begin{letter}{Company \\ Name \\ Address \\ CH-Place} - \opening{Intro} + \opening{Intro} - Test + Test - \closing{Kind regards} + \closing{Kind regards} \end{letter} \end{document} diff --git a/janishutz-helpers.tex b/janishutz-helpers.tex index 13db9f0..cedfbaa 100644 --- a/janishutz-helpers.tex +++ b/janishutz-helpers.tex @@ -92,72 +92,6 @@ \colorlet{propertiescolor}{purple} -% ┌ ┐ -% │ General config │ -% └ ┘ -% Configure your author name here -\newcommand{\authorTitle}{Janis Hutz\\\url{https://janishutz.com}} -\newcommand{\authorHeaders}{Janis Hutz} - - -% ┌ ┐ -% │ Rendering │ -% └ ┘ -% Specify how the inline and short descriptors (e.g. Lemma, etc) are rendered. -% - #1 is the name of the descriptor -% - #2 is the number (correctly rendered according to settings and preceded with space if not disabled) -% - #3 is the name passed (non-empty asserted) -\newcommand{\shortDescriptorTemplate}[3]{\bg{#1color}{\shortNamingTranslate{#1} #2} \textit{(#3)}} -\newcommand{\inlineDescriptorTemplate}[3]{\bg{#1color}{\namingTranslate{#1} #2}: \textit{(#3)}} - -% These are used if no name is provided and argument #4 from above is the missing argument -\newcommand{\anonymousShortDescriptorTemplate}[2]{\bg{#1color}{\shortNamingTranslate{#1} #2}} -\newcommand{\anonymousInlineDescriptorTemplate}[2]{\bg{#1color}{\namingTranslate{#1} #2}} - -% background command config (draws a small box around the content) -\newcommand{\backgroundPadding}{2pt} -\newcommand{\backgroundRounding}{1pt} - - -% ┌ ┐ -% │ Numbering │ -% └ ┘ -% Set a preset, can be combined, separate or off. -% If set to custom, all type specific commands need to be set below. -\newcommand{\numberingpreset}{combined} - -% Specify how elements are to be numbered. Can be (X is the current number of the element): -% - none (X) -% - section (section.X) -% - subsection (section.subsection.X) -% - subsubsection (section.subsection.subsubsection.X) -% - paragraph (section.subsection.subsubsection.paragraph.X) -\newcommand{\subsectionnumbering}{subsection} - - -% Set for a specific type. Can each be combined, separate, default or off: -% If set to anything but 'default', it will override the overarching style -% set by \numberingpreset -\newcommand{\definitionnumbering}{default} -\newcommand{\theoremnumbering}{default} -\newcommand{\lemmanumbering}{default} -\newcommand{\corollarynumbering}{default} -\newcommand{\axiomnumbering}{default} -\newcommand{\factnumbering}{default} -\newcommand{\propositionnumbering}{default} -\newcommand{\examplenumbering}{default} -\newcommand{\formulanumbering}{default} -\newcommand{\remarknumbering}{default} -\newcommand{\proofnumbering}{default} -\newcommand{\intuitionnumbering}{default} -\newcommand{\termnumbering}{default} -\newcommand{\notationnumbering}{default} -\newcommand{\tasknumbering}{default} -\newcommand{\usagenumbering}{default} -\newcommand{\recallnumbering}{default} -\newcommand{\propertiesnumbering}{default} - - % ┌ ┐ % │ Naming │ % └ ┘ @@ -241,6 +175,72 @@ \newcommand{\propertiesShortNamingDE}{Eig.} +% ┌ ┐ +% │ Numbering │ +% └ ┘ +% Set a preset, can be combined, separate or off. +% If set to custom, all type specific commands need to be set below. +\newcommand{\numberingpreset}{combined} + +% Specify how elements are to be numbered. Can be (X is the current number of the element): +% - none (X) +% - section (section.X) +% - subsection (section.subsection.X) +% - subsubsection (section.subsection.subsubsection.X) +% - paragraph (section.subsection.subsubsection.paragraph.X) +\newcommand{\subsectionnumbering}{subsection} + + +% Set for a specific type. Can each be combined, separate, default or off: +% If set to anything but 'default', it will override the overarching style +% set by \numberingpreset +\newcommand{\definitionnumbering}{default} +\newcommand{\theoremnumbering}{default} +\newcommand{\lemmanumbering}{default} +\newcommand{\corollarynumbering}{default} +\newcommand{\axiomnumbering}{default} +\newcommand{\factnumbering}{default} +\newcommand{\propositionnumbering}{default} +\newcommand{\examplenumbering}{default} +\newcommand{\formulanumbering}{default} +\newcommand{\remarknumbering}{default} +\newcommand{\proofnumbering}{default} +\newcommand{\intuitionnumbering}{default} +\newcommand{\termnumbering}{default} +\newcommand{\notationnumbering}{default} +\newcommand{\tasknumbering}{default} +\newcommand{\usagenumbering}{default} +\newcommand{\recallnumbering}{default} +\newcommand{\propertiesnumbering}{default} + + +% ┌ ┐ +% │ General config │ +% └ ┘ +% Configure your author name here +\newcommand{\authorTitle}{Janis Hutz\\\url{https://janishutz.com}} +\newcommand{\authorHeaders}{Janis Hutz} + + +% ┌ ┐ +% │ Rendering │ +% └ ┘ +% Specify how the inline and short descriptors (e.g. Lemma, etc) are rendered. +% - #1 is the name of the descriptor +% - #2 is the number (correctly rendered according to settings and preceded with space if not disabled) +% - #3 is the name passed (non-empty asserted) +\newcommand{\shortDescriptorTemplate}[3]{\bg{#1color}{\shortNamingTranslate{#1} #2} \textit{(#3)}} +\newcommand{\inlineDescriptorTemplate}[3]{\bg{#1color}{\namingTranslate{#1} #2}: \textit{(#3)}} + +% These are used if no name is provided and argument #4 from above is the missing argument +\newcommand{\anonymousShortDescriptorTemplate}[2]{\bg{#1color}{\shortNamingTranslate{#1} #2}} +\newcommand{\anonymousInlineDescriptorTemplate}[2]{\bg{#1color}{\namingTranslate{#1} #2}} + +% background command config (draws a small box around the content) +\newcommand{\backgroundPadding}{2pt} +\newcommand{\backgroundRounding}{1pt} + + \newcounter{definitionnone} \newcounter{definitionsection}[section] \renewcommand{\thedefinitionsection}{\thesection.\arabic{definitionsection}} @@ -687,6 +687,20 @@ } +% Add glossaries functionality + +\newcommand{\setupGlossary}{ + \usepackage[nonumberlist, toc]{glossaries} + \usepackage[nottoc, numbib]{tocbibind} + \makenoidxglossaries +} + +\newcommand{\printGlossary}{ + \glsaddall + \printnoidxglossaries +} + + % ┌ ┐ % │ Math │ % └ ┘ @@ -828,93 +842,6 @@ } -% ┌ ┐ -% │ Index │ -% └ ┘ - -% For using index package -\newcommand{\prepareIndex}{ - \usepackage[T1]{fontenc} - \usepackage{imakeidx} - \makeindex -} - -\newcommand{\addIndexBold}[1]{\textbf{\index{\MakeLowercase{#1}} #1}} -\newcommand{\addIndexItalic}[1]{\textit{\index{\MakeLowercase{#1}} #1}} -\newcommand{\addIndex}[1]{\index{\MakeLowercase{#1}} #1} - - - -% ┌ ┐ -% │ Tables │ -% └ ┘ - -\usepackage{booktabs} -\usepackage{tabulary} - -% Create new table. #1 Layout, #2 title row -\newenvironment{tables}[2]{ - \begin{center} - \begin{tabular}{#1} - \toprule - #2 \\ - \midrule - }{ - \bottomrule - \end{tabular} - \end{center} -} - -% Create new table in table env. #1 layout, #2 title row, #3 caption -\newenvironment{fullTable}[3]{ - \edef\tableCaption{#3} - \begin{table}[h!] - \begin{tables}{#1}{#2} - }{ - \end{tables} - \caption{\tableCaption} - \end{table} -} - - -% Add glossaries functionality - -\newcommand{\setupGlossary}{ - \usepackage[nonumberlist, toc]{glossaries} - \usepackage[nottoc, numbib]{tocbibind} - \makenoidxglossaries -} - -\newcommand{\printGlossary}{ - \glsaddall - \printnoidxglossaries -} - - -% ┌ ┐ -% │ Translation │ -% └ ┘ -\newcommand{\translate}[2]{% - \ifthenelse{\equal{\currentLanguage}{en}}{#1}{#2}% -} -\newcommand{\tr}[2]{\translate{#1}{#2}} -\newcommand{\namingTranslate}[1]{\translate{\printTranslationOptionEN{#1}}{\printTranslationOptionEN{#1}}} -\newcommand{\shortNamingTranslate}[1]{\translate{\printShortTranslationOptionEN{#1}}{\printShortTranslationOptionEN{#1}}} - -% 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 }} - - % ┌ ┐ % │ Setup │ % └ ┘ @@ -1008,6 +935,47 @@ } +% ┌ ┐ +% │ Translation │ +% └ ┘ +\newcommand{\translate}[2]{% + \ifthenelse{\equal{\currentLanguage}{en}}{#1}{#2}% +} +\newcommand{\tr}[2]{\translate{#1}{#2}} +\newcommand{\namingTranslate}[1]{\translate{\printTranslationOptionEN{#1}}{\printTranslationOptionEN{#1}}} +\newcommand{\shortNamingTranslate}[1]{\translate{\printShortTranslationOptionEN{#1}}{\printShortTranslationOptionEN{#1}}} + +% 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 }} + + +% ┌ ┐ +% │ Index │ +% └ ┘ + +% For using index package +\newcommand{\prepareIndex}{ + \usepackage[T1]{fontenc} + \usepackage{imakeidx} + \makeindex +} + +\newcommand{\addIndexBold}[1]{\textbf{\index{\MakeLowercase{#1}} #1}} +\newcommand{\addIndexItalic}[1]{\textit{\index{\MakeLowercase{#1}} #1}} +\newcommand{\addIndex}[1]{\index{\MakeLowercase{#1}} #1} + + + % ░▒█▀▀▄░▄▀▀▄░█▀▄▀█░▄▀▀▄░█░▒█░▀█▀░█▀▀░█▀▀▄░░░▒█▀▀▀█░█▀▄░░▀░░█▀▀░█▀▀▄░█▀▄░█▀▀ % ░▒█░░░░█░░█░█░▀░█░█▄▄█░█░▒█░░█░░█▀▀░█▄▄▀░░░░▀▀▀▄▄░█░░░░█▀░█▀▀░█░▒█░█░░░█▀▀ @@ -1040,6 +1008,109 @@ \newcommand{\class}{\text{\tr{Cl}{Kl}}} +% ┌ ┐ +% │ Tables │ +% └ ┘ + +\usepackage{booktabs} +\usepackage{tabulary} + +% Create new table. #1 Layout, #2 title row +\newenvironment{tables}[2]{ + \begin{center} + \begin{tabular}{#1} + \toprule + #2 \\ + \midrule + }{ + \bottomrule + \end{tabular} + \end{center} +} + +% Create new table in table env. #1 layout, #2 title row, #3 caption +\newenvironment{fullTable}[3]{ + \edef\tableCaption{#3} + \begin{table}[h!] + \begin{tables}{#1}{#2} + }{ + \end{tables} + \caption{\tableCaption} + \end{table} +} + + +% ┌ ┐ +% │ Counter numbering │ +% └ ┘ +\newcommand{\preEnvHook}[1]{% + \stepLabelNumber{combined}% + \ifthenelse{\equal{\numberingpreset}{combined}}{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{ + \stepLabelNumber{combined}% + }{}% + }{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{% + \stepLabelNumber{combined}% + }{}% + }% +} + +% Decides on the numbering to use (combined or not) +\newcommand{\loadNumberingConfiguration}{% + \ifthenelse{\boolean{numberingDisabled}}{% + \renewcommand{\thetable}{\arabic{table}} + \renewcommand{\thefigure}{\arabic{figure}} + }{ + \ifthenelse{\equal{\numberingpreset}{combined}}{% + \ifthenelse{\equal{\subsectionnumbering}{none}}{ + \renewcommand{\thetable}{\arabic{combinednone}} + \renewcommand{\thefigure}{\arabic{combinednone}} + }{% + \renewcommand{\thetable}{\ssprinter.\arabic{combined\subsectionnumbering}} + \renewcommand{\thefigure}{\ssprinter.\arabic{combined\subsectionnumbering}} + }% + }{% + \ifthenelse{\equal{\numberingpreset}{separate}}{ + \ifthenelse{\equal{\subsectionnumbering}{none}}{}{ + \renewcommand{\thetable}{\ssprinter.\arabic{table}} + \renewcommand{\thefigure}{\ssprinter.\arabic{figure}} + } + }{% + \renewcommand{\thetable}{\arabic{table}} + \renewcommand{\thefigure}{\arabic{figure}} + }% + }% + }% +} + +% Prints the preceding subsection numbers +\newcommand{\ssprinter}{\thesection} +\newcommand{\generateSubsection}{% + \ifthenelse{\equal{\subsectionnumbering}{section}}{% + \renewcommand{\ssprinter}{\thesection} + }{% + \ifthenelse{\equal{\subsectionnumbering}{subsection}}{% + \renewcommand{\ssprinter}{\thesubsection} + }{% + \ifthenelse{\equal{\subsectionnumbering}{subsubsection}}{% + \renewcommand{\ssprinter}{\thesubsubsection} + }{% + \ifthenelse{\equal{\subsectionnumbering}{paragraph}}{% + \renewcommand{\ssprinter}{\theparagraph} + }{ + \renewcommand{\ssprinter}{} + }% + }% + }% + }% +} +\loadNumberingConfiguration + +\AtBeginEnvironment{table}{\preEnvHook{table}} +\AtBeginEnvironment{figure}{\preEnvHook{figure}} + + % ── Set the current number of a label ─────────────────────────────── \newcommand{\setLabelNumber}[2]{% \setcounter{#1none}{#2}% @@ -1147,88 +1218,6 @@ } -% ┌ ┐ -% │ Counter numbering │ -% └ ┘ -\newcommand{\preEnvHook}[1]{% - \stepLabelNumber{combined}% - \ifthenelse{\equal{\numberingpreset}{combined}}{% - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{ - \stepLabelNumber{combined}% - }{}% - }{% - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{% - \stepLabelNumber{combined}% - }{}% - }% -} - -% Decides on the numbering to use (combined or not) -\newcommand{\loadNumberingConfiguration}{% - \ifthenelse{\boolean{numberingDisabled}}{% - \renewcommand{\thetable}{\arabic{table}} - \renewcommand{\thefigure}{\arabic{figure}} - }{ - \ifthenelse{\equal{\numberingpreset}{combined}}{% - \ifthenelse{\equal{\subsectionnumbering}{none}}{ - \renewcommand{\thetable}{\arabic{combinednone}} - \renewcommand{\thefigure}{\arabic{combinednone}} - }{% - \renewcommand{\thetable}{\ssprinter.\arabic{combined\subsectionnumbering}} - \renewcommand{\thefigure}{\ssprinter.\arabic{combined\subsectionnumbering}} - }% - }{% - \ifthenelse{\equal{\numberingpreset}{separate}}{ - \ifthenelse{\equal{\subsectionnumbering}{none}}{}{ - \renewcommand{\thetable}{\ssprinter.\arabic{table}} - \renewcommand{\thefigure}{\ssprinter.\arabic{figure}} - } - }{% - \renewcommand{\thetable}{\arabic{table}} - \renewcommand{\thefigure}{\arabic{figure}} - }% - }% - }% -} - -% Prints the preceding subsection numbers -\newcommand{\ssprinter}{\thesection} -\newcommand{\generateSubsection}{% - \ifthenelse{\equal{\subsectionnumbering}{section}}{% - \renewcommand{\ssprinter}{\thesection} - }{% - \ifthenelse{\equal{\subsectionnumbering}{subsection}}{% - \renewcommand{\ssprinter}{\thesubsection} - }{% - \ifthenelse{\equal{\subsectionnumbering}{subsubsection}}{% - \renewcommand{\ssprinter}{\thesubsubsection} - }{% - \ifthenelse{\equal{\subsectionnumbering}{paragraph}}{% - \renewcommand{\ssprinter}{\theparagraph} - }{ - \renewcommand{\ssprinter}{} - }% - }% - }% - }% -} -\loadNumberingConfiguration - -\AtBeginEnvironment{table}{\preEnvHook{table}} -\AtBeginEnvironment{figure}{\preEnvHook{figure}} - - -% ┌ ┐ -% │ STYLE: Math │ -% └ ┘ - -% Add shortcuts to commonly used commands -\newcommand{\vect}[1]{\overrightarrow{#1}} -\renewcommand{\hat}[1]{\widehat{#1}} -\renewcommand{\tilde}[1]{\widetilde{#1}} -\newcommand{\proven}{$\hspace{17cm}\square$} - - \newcommand{\noverticalspacing}{ \abovedisplayskip 1pt plus 2pt minus 1pt \belowdisplayskip 1pt plus 2pt minus 1pt @@ -1255,40 +1244,6 @@ } -% ── Inline environments ───────────────────────────────────────────── -% TODO: ref label generation -\newcommand{\inline}[2][NONAME]{% - \ifthenelse{\equal{NONAME}{#1}}{% - \anonymousInlineDescriptorTemplate{#2}{\printLabel{#2}}% - }{% - \inlineDescriptorTemplate{#2}{\printLabel{#2}}{#1}% - }% -} - -\newcommand{\labeledInline}[3][NONAME]{% - \edef{\tempLabel}{#3} - \label{\tempLabel} - \inline[#1]{#2} -} - -\newcommand{\short}[2][NONAME]{% - \ifthenelse{\equal{NONAME}{#1}}{% - \anonymousShortDescriptorTemplate{#2}{\printLabel{#2}}% - }{% - \shortDescriptorTemplate{#2}{\printLabel{#2}}{#1}% - }% -} - -\newcommand{\labeledShort}[3][NONAME]{% - \edef{\tempLabel}{#3} - \label{\tempLabel} - \short[#1]{#2} -} - -\newcommand{\inlineproof}{\anonymousInlineDescriptorTemplate{proof}{}} -\newcommand{\shortproof}{\anonymousShortDescriptorTemplate{proof}{}} - - % ┌ ┐ % │ STYLE: Common tcolorboxes │ % └ ┘ @@ -1340,6 +1295,51 @@ \newtcolorbox{simplebox}[2][]{colback=#2!5!white,colframe=#2!75!black,#1} +% ── Inline environments ───────────────────────────────────────────── +% TODO: ref label generation +\newcommand{\inline}[2][NONAME]{% + \ifthenelse{\equal{NONAME}{#1}}{% + \anonymousInlineDescriptorTemplate{#2}{\printLabel{#2}}% + }{% + \inlineDescriptorTemplate{#2}{\printLabel{#2}}{#1}% + }% +} + +\newcommand{\labeledInline}[3][NONAME]{% + \edef{\tempLabel}{#3} + \label{\tempLabel} + \inline[#1]{#2} +} + +\newcommand{\short}[2][NONAME]{% + \ifthenelse{\equal{NONAME}{#1}}{% + \anonymousShortDescriptorTemplate{#2}{\printLabel{#2}}% + }{% + \shortDescriptorTemplate{#2}{\printLabel{#2}}{#1}% + }% +} + +\newcommand{\labeledShort}[3][NONAME]{% + \edef{\tempLabel}{#3} + \label{\tempLabel} + \short[#1]{#2} +} + +\newcommand{\inlineproof}{\anonymousInlineDescriptorTemplate{proof}{}} +\newcommand{\shortproof}{\anonymousShortDescriptorTemplate{proof}{}} + + +% ┌ ┐ +% │ STYLE: Math │ +% └ ┘ + +% Add shortcuts to commonly used commands +\newcommand{\vect}[1]{\overrightarrow{#1}} +\renewcommand{\hat}[1]{\widehat{#1}} +\renewcommand{\tilde}[1]{\widetilde{#1}} +\newcommand{\proven}{$\hspace{17cm}\square$} + + % ┌ ┐ % │ STYLE: Computer Science │ % └ ┘ diff --git a/letter.tex b/letter.tex index 15c9a21..c387b12 100644 --- a/letter.tex +++ b/letter.tex @@ -30,12 +30,12 @@ % Define new letter header \setkomavar{firsthead}{ - \null\hfill - \parbox[t][\headheight][t]{4cm}{% - \vspace*{2cm} + \null\hfill + \parbox[t][\headheight][t]{4cm}{% + \vspace*{2cm} - \usekomavar{fromname} \newline - \usekomavar{fromaddress} \newline - \usekomavar{fromplace} - } + \usekomavar{fromname} \newline + \usekomavar{fromaddress} \newline + \usekomavar{fromplace} + } }% From 37b3fb0bd2239226eb3cd36f8c6aa0e9a47bd805 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sat, 21 Feb 2026 15:30:14 +0000 Subject: [PATCH 16/32] revert 31e92b012b23aadd96d15baffc24eda98faa2370 revert [skip ci] Build helpers on push --- docs/docs.tex | 10 +- docs/parts/intro.tex | 2 +- docs/parts/reference/cs.tex | 40 +- docs/parts/reference/intro.tex | 10 +- docs/parts/reference/loading.tex | 88 +-- docs/parts/reference/math.tex | 48 +- docs/parts/reference/style/descriptors.tex | 40 +- docs/parts/reference/style/intro.tex | 10 +- docs/parts/reference/style/spacing.tex | 34 +- .../reference/style/tcolorbox/counter.tex | 20 +- .../reference/style/tcolorbox/default.tex | 16 +- .../parts/reference/style/tcolorbox/other.tex | 4 +- docs/parts/reference/tables-index.tex | 6 +- examples/letter/letter.tex | 6 +- janishutz-helpers.tex | 538 +++++++++--------- letter.tex | 14 +- 16 files changed, 443 insertions(+), 443 deletions(-) diff --git a/docs/docs.tex b/docs/docs.tex index 2352e47..3aeebd7 100644 --- a/docs/docs.tex +++ b/docs/docs.tex @@ -11,17 +11,17 @@ \vspace{2cm} \begin{center} - \includegraphics[width=0.5\linewidth]{../assets/logo.jpg} + \includegraphics[width=0.5\linewidth]{../assets/logo.jpg} \end{center} \vspace{5cm} \begin{center} - \begin{Large} - \textsc{Usage guide for Version 2.0.0} - \end{Large} + \begin{Large} + \textsc{Usage guide for Version 2.0.0} + \end{Large} - \hlurl{https://git.janishutz.com/janishutz/latex} + \hlurl{https://git.janishutz.com/janishutz/latex} \end{center} diff --git a/docs/parts/intro.tex b/docs/parts/intro.tex index 7d724e4..268bba4 100644 --- a/docs/parts/intro.tex +++ b/docs/parts/intro.tex @@ -3,7 +3,7 @@ This set of \LaTeX files is designed to give you a good looking, pre-configured \LaTeX setup, which helps you get started much more quickly. There are quite a lot of configuration options, but it is likely that more are to come in the future. -If you have any suggestions as to what should be added, don't hesitate to open a \hlhref{https://support.janishutz.com?a=add}{support ticket}\ +If you have any suggestions as to what should be added, don't hesitate to open a \hlhref{https://support.janishutz.com?a=add}{support ticket}\ or contacting me via email to \texttt{development@janishutz.com}. diff --git a/docs/parts/reference/cs.tex b/docs/parts/reference/cs.tex index 199046a..a2bf0e6 100644 --- a/docs/parts/reference/cs.tex +++ b/docs/parts/reference/cs.tex @@ -2,16 +2,16 @@ \subsection{CS-Commands} These commands have to be executed inside math environment \begin{itemize} - \item \verb|\tct| Time complexity in $\tct{}$-notation (average case) - \item \verb|\tco| Time complexity in $\tco{}$-notation (worst case / upper bound) - \item \verb|\tcl| Time complexity in $\tcl{}$-notation (best case / lower bound) - \item \verb|\t[R, C, N]| Simply prints a capital R, C or N in math mode as normal text. So e.g. use $\tR$ to print an R - \item \verb|\wordbool| Prints $\wordbool$ - \item \verb|\words|\{\textit{string}\} Prints $\words{test}$ - \item \verb|\wordm|\{\textit{math}\} Prints $\wordm{1}$ - \item \verb|\word| Prints $\word$ - \item \verb|\alphabets|\{\textit{string}\} Prints $\alphabets{test}$ - \item \verb|\alphabetbool| Prints $\alphabetbool$ + \item \verb|\tct| Time complexity in $\tct{}$-notation (average case) + \item \verb|\tco| Time complexity in $\tco{}$-notation (worst case / upper bound) + \item \verb|\tcl| Time complexity in $\tcl{}$-notation (best case / lower bound) + \item \verb|\t[R, C, N]| Simply prints a capital R, C or N in math mode as normal text. So e.g. use $\tR$ to print an R + \item \verb|\wordbool| Prints $\wordbool$ + \item \verb|\words|\{\textit{string}\} Prints $\words{test}$ + \item \verb|\wordm|\{\textit{math}\} Prints $\wordm{1}$ + \item \verb|\word| Prints $\word$ + \item \verb|\alphabets|\{\textit{string}\} Prints $\alphabets{test}$ + \item \verb|\alphabetbool| Prints $\alphabetbool$ \end{itemize} \subsubsection{Algorithms} @@ -24,9 +24,9 @@ These commands have to be executed inside math environment \end{minted} \begin{algo}{functionName(A)} - \Procedure{functionName}{$(A)$} - \State\Return "Hello World" - \EndProcedure + \Procedure{functionName}{$(A)$} + \State\Return "Hello World" + \EndProcedure \end{algo} @@ -47,19 +47,19 @@ This is nothing different than a wrapper for a minted environment with a box dra Example (in python): \begin{code}{python} - def hello_world(): - print("hello world!") + def hello_world(): + print("hello world!") \end{code} \paragraph{Code in separate files} It is also possible to load code from a source file using the provided commands: \begin{itemize} - \item \verb|\inputcode|\{\textit{language}\}\{\textit{file}\}, where \textit{language} is the programming language - and \textit{file} is the file name of the file to be loaded, relative to the main tex file. - \item \verb|\inputcodewithfilename|\{\textit{language}\}\{\textit{hidden-path}\}\{\textit{shown-path}\}, where \textit{language} is the programming language, - \textit{hidden-path} is the part of the path you want to hide of the file to be loaded, relative to the main tex file - and \textit{shown-path} is the displayed part. + \item \verb|\inputcode|\{\textit{language}\}\{\textit{file}\}, where \textit{language} is the programming language + and \textit{file} is the file name of the file to be loaded, relative to the main tex file. + \item \verb|\inputcodewithfilename|\{\textit{language}\}\{\textit{hidden-path}\}\{\textit{shown-path}\}, where \textit{language} is the programming language, + \textit{hidden-path} is the part of the path you want to hide of the file to be loaded, relative to the main tex file + and \textit{shown-path} is the displayed part. \end{itemize} \inlineexample \begin{minted}{latex} diff --git a/docs/parts/reference/intro.tex b/docs/parts/reference/intro.tex index 560869f..0d02ae9 100644 --- a/docs/parts/reference/intro.tex +++ b/docs/parts/reference/intro.tex @@ -2,10 +2,10 @@ \section{Full Command Reference} \subsection{Variables} \begin{itemize} - \item \textit{string}: Any normal text - \item \textit{boolean}: \texttt{true} or \texttt{false} - \item \textit{math}: Any math input - \item \textit{number}: Any non-negative integer, i.e. no commas - \item \textit{color}: Any of the \texttt{dvipsnames} colours of \texttt{xcolor} or as defined in the color config file + \item \textit{string}: Any normal text + \item \textit{boolean}: \texttt{true} or \texttt{false} + \item \textit{math}: Any math input + \item \textit{number}: Any non-negative integer, i.e. no commas + \item \textit{color}: Any of the \texttt{dvipsnames} colours of \texttt{xcolor} or as defined in the color config file \end{itemize} diff --git a/docs/parts/reference/loading.tex b/docs/parts/reference/loading.tex index 8194cf3..fbeb125 100644 --- a/docs/parts/reference/loading.tex +++ b/docs/parts/reference/loading.tex @@ -1,56 +1,56 @@ \subsection{Per-File config} \label{sec:perFileConf} \begin{itemize} - \item \verb|\renewcommand{\authorTitle}|\{\textit{string}\} Change the author (in the title) for this document only - \item \verb|\renewcommand{\authorHeaders}|\{\textit{string}\} Change the author (in the header) for this document only - \item \verb|\renewcommand{\NamingDE}|\{\textit{string}\} Configure translations for descriptors on the fly (for DE) - \item \verb|\renewcommand{\NamingEN}|\{\textit{string}\} Configure translations for descriptors on the fly (for EN) - \item \verb|\setnumberingpreset|\{\textit{string}\} - Change the numbering preset of definitions, lemmas, etc for this document. - Value can be \texttt{off}, \texttt{separate}, \texttt{combined}. - \item \verb|\renewcommand{numbering}|\{\textit{string}\} - Change the numbering for an individual descriptor, passed as first argument. - The second value can be \texttt{off}, \texttt{separate}, \texttt{combined} or \texttt{default}. - If set to \texttt{default}, it will follow the \verb|\numberingpreset| setting. - If you do not override it here, it will follow your global config as set in the config directory - and if unset there, it will follow the \verb|\numberingpreset| setting. - \item \verb|\renew|\{\textit{string}\} Change the format of the numbering of definitions, etc. - The value can be set to any of the below - \begin{itemize}[noitemsep] - \item none = $<$section$>$.$<$number$>$ - \item section = $<$section$>$.$<$number$>$ - \item subsection = $<$section$>$.$<$subsection$>$.$<$number$>$ - \item subsubsection = $<$section$>$.$<$subsection$>$.$<$subsubsection$>$.$<$number$>$ - \item paragraph = $<$section$>$.$<$subsection$>$.$<$subsubsection$>$.$<$paragraph$>$.$<$number$>$ - \end{itemize} - Changing this won't affect all of numbering prior to the command, only after. You can change this setting (and the ones above) at any point in the document - \item \verb|\setcounter{descriptorShadeStrength}|\{\textit{number}\} Change the colour saturation of the inline descriptors - \item \verb|\setcounter{shadeStrength}|\{\textit{number}\} Change the colour saturation of the \verb|\shade| command - \item \verb|\loadGerman| Load german configuration. Needs to be in preamble and you may only use it once - \item To change the font for the entire document, load the font package using \verb|\usepackage|, with the last occurrence of a font package determining the active one. - Then select the type by using \verb|\setFontType|\textit{\{mono $|$ serif $|$ sans\}}. - A list of fonts is available \color{Cyan}\href{https://www.overleaf.com/learn/latex/Font_typefaces#Reference_guide}{here}\color{black}. - You may change the font only for a specific section, by enclosing \verb|\setFont| and the text that should be written in said typeface in curly braces. + \item \verb|\renewcommand{\authorTitle}|\{\textit{string}\} Change the author (in the title) for this document only + \item \verb|\renewcommand{\authorHeaders}|\{\textit{string}\} Change the author (in the header) for this document only + \item \verb|\renewcommand{\NamingDE}|\{\textit{string}\} Configure translations for descriptors on the fly (for DE) + \item \verb|\renewcommand{\NamingEN}|\{\textit{string}\} Configure translations for descriptors on the fly (for EN) + \item \verb|\setnumberingpreset|\{\textit{string}\} + Change the numbering preset of definitions, lemmas, etc for this document. + Value can be \texttt{off}, \texttt{separate}, \texttt{combined}. + \item \verb|\renewcommand{numbering}|\{\textit{string}\} + Change the numbering for an individual descriptor, passed as first argument. + The second value can be \texttt{off}, \texttt{separate}, \texttt{combined} or \texttt{default}. + If set to \texttt{default}, it will follow the \verb|\numberingpreset| setting. + If you do not override it here, it will follow your global config as set in the config directory + and if unset there, it will follow the \verb|\numberingpreset| setting. + \item \verb|\renew|\{\textit{string}\} Change the format of the numbering of definitions, etc. + The value can be set to any of the below + \begin{itemize}[noitemsep] + \item none = $<$section$>$.$<$number$>$ + \item section = $<$section$>$.$<$number$>$ + \item subsection = $<$section$>$.$<$subsection$>$.$<$number$>$ + \item subsubsection = $<$section$>$.$<$subsection$>$.$<$subsubsection$>$.$<$number$>$ + \item paragraph = $<$section$>$.$<$subsection$>$.$<$subsubsection$>$.$<$paragraph$>$.$<$number$>$ + \end{itemize} + Changing this won't affect all of numbering prior to the command, only after. You can change this setting (and the ones above) at any point in the document + \item \verb|\setcounter{descriptorShadeStrength}|\{\textit{number}\} Change the colour saturation of the inline descriptors + \item \verb|\setcounter{shadeStrength}|\{\textit{number}\} Change the colour saturation of the \verb|\shade| command + \item \verb|\loadGerman| Load german configuration. Needs to be in preamble and you may only use it once + \item To change the font for the entire document, load the font package using \verb|\usepackage|, with the last occurrence of a font package determining the active one. + Then select the type by using \verb|\setFontType|\textit{\{mono $|$ serif $|$ sans\}}. + A list of fonts is available \color{Cyan}\href{https://www.overleaf.com/learn/latex/Font_typefaces#Reference_guide}{here}\color{black}. + You may change the font only for a specific section, by enclosing \verb|\setFont| and the text that should be written in said typeface in curly braces. \end{itemize} \subsubsection{Letters} \begin{itemize} - \item \verb|\renewcommand{\name}|\{\textit{string}\} Change the name (for letters) for this document only - \item \verb|\renewcommand{\street}|\{\textit{string}\} Change the street (for letters) for this document only - \item \verb|\renewcommand{\city}|\{\textit{string}\} Change the city (for letters) for this document only - \item \verb|\renewcommand{\countrycode}|\{\textit{string}\} Change the country-code (for letters) for this document only + \item \verb|\renewcommand{\name}|\{\textit{string}\} Change the name (for letters) for this document only + \item \verb|\renewcommand{\street}|\{\textit{string}\} Change the street (for letters) for this document only + \item \verb|\renewcommand{\city}|\{\textit{string}\} Change the city (for letters) for this document only + \item \verb|\renewcommand{\countrycode}|\{\textit{string}\} Change the country-code (for letters) for this document only \end{itemize} \newpage \subsection{Setup, Loading \& Translation} \begin{itemize} - \item \verb|\setup|\{\textit{string}\} Prepare the document with the \textit{string} being the title - \item \verb|\setupCheatSheet|[\textit{boolean}]\{\textit{string}\} Prepare the document with smaller borders and no headers / footers. - The mandatory argument is the title, the optional argument will, if set to \texttt{true} use a landscape layout (default) - and a horizontal layout if set to \texttt{false}. - \item \verb|\setupBarebones|\{\textit{string}\} Minimal setup, only borders and title set - \item \verb|\startDocument| Initialize the document. Has to be called after \verb|\begin{document}| - \item \verb|\translate|\{\textit{string}\}\{\textit{string}\} First \textit{string} is English, second \textit{string} is German. Switches automatically based on language selected - \item \verb|\tr|\{\textit{string}\}\{\textit{string}\} Shorthand for \verb|\translate| - \item \verb|\numberingOn| Turn on the numbering (if previously turned off using \verb|\numberingOff| or set in the config) - \item \verb|\numberingOff| Turn off the numbering (useful to temporarily turn off numbering) + \item \verb|\setup|\{\textit{string}\} Prepare the document with the \textit{string} being the title + \item \verb|\setupCheatSheet|[\textit{boolean}]\{\textit{string}\} Prepare the document with smaller borders and no headers / footers. + The mandatory argument is the title, the optional argument will, if set to \texttt{true} use a landscape layout (default) + and a horizontal layout if set to \texttt{false}. + \item \verb|\setupBarebones|\{\textit{string}\} Minimal setup, only borders and title set + \item \verb|\startDocument| Initialize the document. Has to be called after \verb|\begin{document}| + \item \verb|\translate|\{\textit{string}\}\{\textit{string}\} First \textit{string} is English, second \textit{string} is German. Switches automatically based on language selected + \item \verb|\tr|\{\textit{string}\}\{\textit{string}\} Shorthand for \verb|\translate| + \item \verb|\numberingOn| Turn on the numbering (if previously turned off using \verb|\numberingOff| or set in the config) + \item \verb|\numberingOff| Turn off the numbering (useful to temporarily turn off numbering) \end{itemize} diff --git a/docs/parts/reference/math.tex b/docs/parts/reference/math.tex index 5f1bebe..62aa5bb 100644 --- a/docs/parts/reference/math.tex +++ b/docs/parts/reference/math.tex @@ -2,29 +2,29 @@ \subsection{Math-Commands} All these have to be executed in the math environment. \begin{itemize} - \item \verb|\R| Prints $\R$. Same goes for \verb|\C| printing $\C$, etc. - \item \verb|\floor|\{\textit{math}\} Round down symbol, e.g. $\floor{n}$ - \item \verb|\ceil|\{\textit{math}\} Round up symbol, e.g. $\ceil{n}$ - \item \verb|\Leftrightarrowequiv| Equivalence transformation symbol, $\Leftrightarrowequiv$. - \item \verb|\Rightarrowequiv| Equivalence transformation symbol, $\Rightarrowequiv$. - \item \verb|\Leftarrowequiv| Equivalence transformation symbol, $\Leftarrowequiv$. - \item \verb|\defAs| Define as, i.e. $\defAs$ - \item \verb|\defEquiv| Define as, but with a two-sided implication instead of equality, i.e. $\defEquiv$ - \item \verb|\defImplies| Define as, but with one-sided implication, i.e. $\defImplies$ - \item \verb|\divider| Divider or divides symbol, e.g. $a \divider b$ - \item \verb|\lcm| Least common multiple, $\lcm$ - \item \verb|\arcsinh| Inverse of hyperbolic sine, $\arcsinh$ - \item \verb|\arccosh| Inverse of hyperbolic cosine, $\arccosh$ - \item \verb|\arctanh| Inverse of hyperbolic tangent, $\arctanh$ - \item \verb|\limit|\{\textit{math}\}\{\textit{math}\} Shortened limit notation, $\displaystyle \limit{x}{x_0}$ - \item \verb|\limni| Shortened limit notation for $n \rightarrow \infty$, $\displaystyle \limni$ - \item \verb|\liminfni| Shortened limit inferior notation for $n \rightarrow \infty$, $\displaystyle \liminfni$ - \item \verb|\limsupni| Shortened limit superior notation for $n \rightarrow \infty$, $\displaystyle \limsupni$ - \item \verb|\diff|\{\textit{math}\} Derivative, $\displaystyle \diff{x}$ - \item \verb|\diffn|\{\textit{math}\}\{\textit{math}\} Higher derivative, $\displaystyle \diffn{x}{2}$ - \item \verb|\pardiff|\{\textit{math}\} Partial derivative, $\displaystyle \pardiff{x}$ - \item \verb|\pardiffn|\{\textit{math}\}\{\textit{math}\} Higher partial derivative, $\displaystyle \pardiffn{x}{2}$ - \item \verb|\elementstack|\{\textit{math}\}\{\textit{math}\} Stack two elements on top of eachother. Uses \verb|\genfrac| under the hood. - Can be used for example in limits as an alternative to \verb|\atop| or \verb|\substack|. + \item \verb|\R| Prints $\R$. Same goes for \verb|\C| printing $\C$, etc. + \item \verb|\floor|\{\textit{math}\} Round down symbol, e.g. $\floor{n}$ + \item \verb|\ceil|\{\textit{math}\} Round up symbol, e.g. $\ceil{n}$ + \item \verb|\Leftrightarrowequiv| Equivalence transformation symbol, $\Leftrightarrowequiv$. + \item \verb|\Rightarrowequiv| Equivalence transformation symbol, $\Rightarrowequiv$. + \item \verb|\Leftarrowequiv| Equivalence transformation symbol, $\Leftarrowequiv$. + \item \verb|\defAs| Define as, i.e. $\defAs$ + \item \verb|\defEquiv| Define as, but with a two-sided implication instead of equality, i.e. $\defEquiv$ + \item \verb|\defImplies| Define as, but with one-sided implication, i.e. $\defImplies$ + \item \verb|\divider| Divider or divides symbol, e.g. $a \divider b$ + \item \verb|\lcm| Least common multiple, $\lcm$ + \item \verb|\arcsinh| Inverse of hyperbolic sine, $\arcsinh$ + \item \verb|\arccosh| Inverse of hyperbolic cosine, $\arccosh$ + \item \verb|\arctanh| Inverse of hyperbolic tangent, $\arctanh$ + \item \verb|\limit|\{\textit{math}\}\{\textit{math}\} Shortened limit notation, $\displaystyle \limit{x}{x_0}$ + \item \verb|\limni| Shortened limit notation for $n \rightarrow \infty$, $\displaystyle \limni$ + \item \verb|\liminfni| Shortened limit inferior notation for $n \rightarrow \infty$, $\displaystyle \liminfni$ + \item \verb|\limsupni| Shortened limit superior notation for $n \rightarrow \infty$, $\displaystyle \limsupni$ + \item \verb|\diff|\{\textit{math}\} Derivative, $\displaystyle \diff{x}$ + \item \verb|\diffn|\{\textit{math}\}\{\textit{math}\} Higher derivative, $\displaystyle \diffn{x}{2}$ + \item \verb|\pardiff|\{\textit{math}\} Partial derivative, $\displaystyle \pardiff{x}$ + \item \verb|\pardiffn|\{\textit{math}\}\{\textit{math}\} Higher partial derivative, $\displaystyle \pardiffn{x}{2}$ + \item \verb|\elementstack|\{\textit{math}\}\{\textit{math}\} Stack two elements on top of eachother. Uses \verb|\genfrac| under the hood. + Can be used for example in limits as an alternative to \verb|\atop| or \verb|\substack|. \end{itemize} diff --git a/docs/parts/reference/style/descriptors.tex b/docs/parts/reference/style/descriptors.tex index 9d65323..83b0eb3 100644 --- a/docs/parts/reference/style/descriptors.tex +++ b/docs/parts/reference/style/descriptors.tex @@ -4,30 +4,30 @@ See \ref{sec:counters} for a guide on how to change the current number. \paragraph{Inline} \begin{tables}{ll}{Command & Output} - \verb|\inlineexample| & \inlineexample \\ - \verb|\inlinedefinition| & \inlinedefinition \\ - \verb|\inlinetheorem| & \inlinetheorem \\ - \verb|\inlinelemma| & \inlinelemma \\ - \verb|\inlinecorollary| & \inlinecorollary \\ - \verb|\inlineproposition| & \inlineproposition \\ - \verb|\inlinefact| & \inlinefact \\ - \verb|\inlineaxiom| & \inlineaxiom \\ - \verb|\inlineremark| & \inlineremark \\ - \verb|\inlineproof| & \inlineproof \\ + \verb|\inlineexample| & \inlineexample \\ + \verb|\inlinedefinition| & \inlinedefinition \\ + \verb|\inlinetheorem| & \inlinetheorem \\ + \verb|\inlinelemma| & \inlinelemma \\ + \verb|\inlinecorollary| & \inlinecorollary \\ + \verb|\inlineproposition| & \inlineproposition \\ + \verb|\inlinefact| & \inlinefact \\ + \verb|\inlineaxiom| & \inlineaxiom \\ + \verb|\inlineremark| & \inlineremark \\ + \verb|\inlineproof| & \inlineproof \\ \end{tables} \paragraph{Shortened} \begin{tables}{ll}{Command & Output} - \verb|\shortexample| & \shortexample \\ - \verb|\shortdefinition| & \shortdefinition \\ - \verb|\shorttheorem| & \shorttheorem \\ - \verb|\shortlemma| & \shortlemma \\ - \verb|\shortcorollary| & \shortcorollary \\ - \verb|\shortproposition| & \shortproposition \\ - \verb|\shortfact| & \shortfact \\ - \verb|\shortaxiom| & \shortaxiom \\ - \verb|\shortremark| & \shortremark \\ - \verb|\shortproof| & \shortproof \\ + \verb|\shortexample| & \shortexample \\ + \verb|\shortdefinition| & \shortdefinition \\ + \verb|\shorttheorem| & \shorttheorem \\ + \verb|\shortlemma| & \shortlemma \\ + \verb|\shortcorollary| & \shortcorollary \\ + \verb|\shortproposition| & \shortproposition \\ + \verb|\shortfact| & \shortfact \\ + \verb|\shortaxiom| & \shortaxiom \\ + \verb|\shortremark| & \shortremark \\ + \verb|\shortproof| & \shortproof \\ \end{tables} \newpage diff --git a/docs/parts/reference/style/intro.tex b/docs/parts/reference/style/intro.tex index b177714..8425d00 100644 --- a/docs/parts/reference/style/intro.tex +++ b/docs/parts/reference/style/intro.tex @@ -1,9 +1,9 @@ \newpage \subsection{Style} \begin{itemize} - \item \verb|\TODO| Print a highlighted \TODO - \item \verb|\background|\{\textit{color}\}\{\textit{number}\}\{\textit{string}\} Print \background{ForestGreen}{50}{shaded text, with colour saturation} - \item \verb|\shade|\{\textit{color}\}\{\textit{string}\} Print \shade{ForestGreen}{shaded text} - \item \verb|\backdrop|\{\textit{string}\} Print \backdrop{text with gray backdrop} - \item \verb|\printtoc|\{\textit{color}\} Print the table of contents (as seen on the first page). The normal \verb|\tableofcontents| still works as expected + \item \verb|\TODO| Print a highlighted \TODO + \item \verb|\background|\{\textit{color}\}\{\textit{number}\}\{\textit{string}\} Print \background{ForestGreen}{50}{shaded text, with colour saturation} + \item \verb|\shade|\{\textit{color}\}\{\textit{string}\} Print \shade{ForestGreen}{shaded text} + \item \verb|\backdrop|\{\textit{string}\} Print \backdrop{text with gray backdrop} + \item \verb|\printtoc|\{\textit{color}\} Print the table of contents (as seen on the first page). The normal \verb|\tableofcontents| still works as expected \end{itemize} diff --git a/docs/parts/reference/style/spacing.tex b/docs/parts/reference/style/spacing.tex index 8e766df..5a589d1 100644 --- a/docs/parts/reference/style/spacing.tex +++ b/docs/parts/reference/style/spacing.tex @@ -2,24 +2,24 @@ For spacing in math mode, prefer using the methods described \hlhref{https://www.overleaf.com/learn/latex/Spacing_in_math_mode}{here}, for vertical spacing prefer the commands described below \begin{itemize} - \item \verb|\smallhspace| Prints a 2mm hspace - \item \verb|\mediumhspace| Prints a 5mm hspace - \item \verb|\largehspace| Prints a 10mm = 1cm hspace - \item \verb|\rmvspace|[\textit{number}] Removes an amount of vertical space. Should not be used unless can be avoided with general settings. Defaults to 0.5 + \item \verb|\smallhspace| Prints a 2mm hspace + \item \verb|\mediumhspace| Prints a 5mm hspace + \item \verb|\largehspace| Prints a 10mm = 1cm hspace + \item \verb|\rmvspace|[\textit{number}] Removes an amount of vertical space. Should not be used unless can be avoided with general settings. Defaults to 0.5 \end{itemize} Vertical spacing config for the entire document. By default, the \LaTeX\ defaults are used. \begin{itemize} - \item \verb|\noverticalspacing| - \item \verb|\smallverticalspacing| - \item \verb|\mediumverticalspacing| (approximately the same as the \LaTeX defaults) - \item \verb|\largeverticalspacing| + \item \verb|\noverticalspacing| + \item \verb|\smallverticalspacing| + \item \verb|\mediumverticalspacing| (approximately the same as the \LaTeX defaults) + \item \verb|\largeverticalspacing| \end{itemize} You are of course free to redefine commands like \verb|\parskip|, etc to your liking, these commands are just provided for your convenience. See \hlhref{https://www.overleaf.com/learn/latex/\%5Cabovedisplayskip_and_related_commands}{here}\ for more details and \hlhref{https://latex-tutorial.com/latex-space/}{here for a good guide on spacing}. -To control paragraph spacing, see \hlhref{https://mirror.ox.ac.uk/sites/ctan.org/macros/latex/contrib/parskip/parskip.pdf}{here}\ +To control paragraph spacing, see \hlhref{https://mirror.ox.ac.uk/sites/ctan.org/macros/latex/contrib/parskip/parskip.pdf}{here}\ and \hlhref{https://www.overleaf.com/learn/latex/Articles/How_to_change_paragraph_spacing_in_LaTeX}{here} To make use of \TeX's automatic wrapping of short alignment environments, use the \texttt{aligned} @@ -32,11 +32,11 @@ Below a demonstration on the effects of the different settings: This is text: \[ - \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x \] This is very long introductory text that exceeds the limit (same applies to long equations) \[ - \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x \] Text following the equation (no paragraph break!) @@ -45,11 +45,11 @@ Text following the equation (no paragraph break!) This is text: \[ - \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x \] This is very long introductory text that exceeds the limit (same applies to long equations) \[ - \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x \] Text following the equation (no paragraph break!) @@ -58,11 +58,11 @@ Text following the equation (no paragraph break!) This is text: \[ - \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x \] This is very long introductory text that exceeds the limit (same applies to long equations) \[ - \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x \] Text following the equation (no paragraph break!) @@ -71,10 +71,10 @@ Text following the equation (no paragraph break!) This is text: \[ - \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x \] This is very long introductory text that exceeds the limit (same applies to long equations) \[ - \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x + \int_{0}^{10} 4x^2 + 3x \cdot \frac{3 \ln(10)}{x^3} \dx x \] Text following the equation (no paragraph break!) diff --git a/docs/parts/reference/style/tcolorbox/counter.tex b/docs/parts/reference/style/tcolorbox/counter.tex index 6837c7f..9655378 100644 --- a/docs/parts/reference/style/tcolorbox/counter.tex +++ b/docs/parts/reference/style/tcolorbox/counter.tex @@ -5,7 +5,7 @@ These ones also have two settings, namely, you can change the counter behaviour See \ref{sec:counters} for a guide on how to change the current number and how to reference them. \begin{definition}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{definition}[]{Title here} \end{definition} @@ -13,7 +13,7 @@ See \ref{sec:counters} for a guide on how to change the current number and how t \end{definition} \begin{theorem}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{theorem}[]{Title here} \end{theorem} @@ -21,7 +21,7 @@ See \ref{sec:counters} for a guide on how to change the current number and how t \end{theorem} \begin{lemma}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{lemma}[]{Title here} \end{lemma} @@ -29,7 +29,7 @@ See \ref{sec:counters} for a guide on how to change the current number and how t \end{lemma} \begin{corollary}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{corollary}[]{Title here} \end{corollary} @@ -37,7 +37,7 @@ See \ref{sec:counters} for a guide on how to change the current number and how t \end{corollary} \begin{proposition}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{proposition}[]{Title here} \end{proposition} @@ -45,7 +45,7 @@ See \ref{sec:counters} for a guide on how to change the current number and how t \end{proposition} \begin{fact}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{fact}[]{Title here} \end{fact} @@ -53,7 +53,7 @@ See \ref{sec:counters} for a guide on how to change the current number and how t \end{fact} \begin{axiom}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{axiom}[]{Title here} \end{axiom} @@ -61,7 +61,7 @@ See \ref{sec:counters} for a guide on how to change the current number and how t \end{axiom} \begin{example}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{example}[]{Title here} \end{example} @@ -69,7 +69,7 @@ See \ref{sec:counters} for a guide on how to change the current number and how t \end{example} \begin{remark}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{remark}[]{Title here} \end{remark} @@ -77,7 +77,7 @@ See \ref{sec:counters} for a guide on how to change the current number and how t \end{remark} \begin{formula}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{formula}[]{Title here} \end{formula} diff --git a/docs/parts/reference/style/tcolorbox/default.tex b/docs/parts/reference/style/tcolorbox/default.tex index 9b3c24d..32eab31 100644 --- a/docs/parts/reference/style/tcolorbox/default.tex +++ b/docs/parts/reference/style/tcolorbox/default.tex @@ -4,7 +4,7 @@ These tcolorboxes can be created using the code displayed inside them. \begin{terms}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{terms}[]{Title here} \end{terms} @@ -12,7 +12,7 @@ These tcolorboxes can be created using the code displayed inside them. \end{terms} \begin{notation}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{notation}[]{Title here} \end{notation} @@ -20,7 +20,7 @@ These tcolorboxes can be created using the code displayed inside them. \end{notation} \begin{recall}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{recall}[]{Title here} \end{recall} @@ -28,7 +28,7 @@ These tcolorboxes can be created using the code displayed inside them. \end{recall} \begin{usage}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{usage}[]{Title here} \end{usage} @@ -36,7 +36,7 @@ These tcolorboxes can be created using the code displayed inside them. \end{usage} \begin{properties}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{properties}[]{Title here} \end{properties} @@ -44,7 +44,7 @@ These tcolorboxes can be created using the code displayed inside them. \end{properties} \begin{restrictions}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{restrictions}[]{Title here} \end{restrictions} @@ -52,7 +52,7 @@ These tcolorboxes can be created using the code displayed inside them. \end{restrictions} \begin{limitations}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{limitations}[]{Title here} \end{limitations} @@ -60,7 +60,7 @@ These tcolorboxes can be created using the code displayed inside them. \end{limitations} \begin{intuition}[]{Title here} - \begin{minted}{latex} + \begin{minted}{latex} \begin{intuition}[]{Title here} \end{intuition} diff --git a/docs/parts/reference/style/tcolorbox/other.tex b/docs/parts/reference/style/tcolorbox/other.tex index 9e32437..0ce3010 100644 --- a/docs/parts/reference/style/tcolorbox/other.tex +++ b/docs/parts/reference/style/tcolorbox/other.tex @@ -2,9 +2,9 @@ This tcolorbox has all the styles applied, but allows configuring the colour and both title boxes \begin{general}[]{title}{second title}{red} - This Tcolorbox is flexible and can take any main and secondary title, as well as any colour. + This Tcolorbox is flexible and can take any main and secondary title, as well as any colour. - \begin{minted}{latex} + \begin{minted}{latex} \begin{general}[]{title}{second title}{red} \end{general} diff --git a/docs/parts/reference/tables-index.tex b/docs/parts/reference/tables-index.tex index 9bb0283..627167b 100644 --- a/docs/parts/reference/tables-index.tex +++ b/docs/parts/reference/tables-index.tex @@ -1,6 +1,6 @@ \newpage \subsection{Tables} -You can set up nice looking tables using the \texttt{booktab} and \texttt{tabulary} environments. +You can set up nice looking tables using the \texttt{booktab} and \texttt{tabulary} environments. \textit{New as of October 28 2025:} Tables and figures are now also numbered according to your settings @@ -12,7 +12,7 @@ You can set up nice looking tables using the \texttt{booktab} and \texttt{tabula This outputs as \begin{tables}{ll}{Left & Right} - Left content & Right Content \\ + Left content & Right Content \\ \end{tables} This doesn't use the \texttt{table} environment, so no captions are possible, as to why there is also @@ -27,7 +27,7 @@ This outputs as \begin{fullTable}{ll}{Left & Right}{This is a caption} - Left content & Right Content\\ + Left content & Right Content\\ \end{fullTable} diff --git a/examples/letter/letter.tex b/examples/letter/letter.tex index d462192..9e96b2f 100644 --- a/examples/letter/letter.tex +++ b/examples/letter/letter.tex @@ -6,10 +6,10 @@ \setkomavar{subject}{Test} \begin{document}\raggedright \begin{letter}{Company \\ Name \\ Address \\ CH-Place} - \opening{Intro} + \opening{Intro} - Test + Test - \closing{Kind regards} + \closing{Kind regards} \end{letter} \end{document} diff --git a/janishutz-helpers.tex b/janishutz-helpers.tex index cedfbaa..13db9f0 100644 --- a/janishutz-helpers.tex +++ b/janishutz-helpers.tex @@ -92,6 +92,72 @@ \colorlet{propertiescolor}{purple} +% ┌ ┐ +% │ General config │ +% └ ┘ +% Configure your author name here +\newcommand{\authorTitle}{Janis Hutz\\\url{https://janishutz.com}} +\newcommand{\authorHeaders}{Janis Hutz} + + +% ┌ ┐ +% │ Rendering │ +% └ ┘ +% Specify how the inline and short descriptors (e.g. Lemma, etc) are rendered. +% - #1 is the name of the descriptor +% - #2 is the number (correctly rendered according to settings and preceded with space if not disabled) +% - #3 is the name passed (non-empty asserted) +\newcommand{\shortDescriptorTemplate}[3]{\bg{#1color}{\shortNamingTranslate{#1} #2} \textit{(#3)}} +\newcommand{\inlineDescriptorTemplate}[3]{\bg{#1color}{\namingTranslate{#1} #2}: \textit{(#3)}} + +% These are used if no name is provided and argument #4 from above is the missing argument +\newcommand{\anonymousShortDescriptorTemplate}[2]{\bg{#1color}{\shortNamingTranslate{#1} #2}} +\newcommand{\anonymousInlineDescriptorTemplate}[2]{\bg{#1color}{\namingTranslate{#1} #2}} + +% background command config (draws a small box around the content) +\newcommand{\backgroundPadding}{2pt} +\newcommand{\backgroundRounding}{1pt} + + +% ┌ ┐ +% │ Numbering │ +% └ ┘ +% Set a preset, can be combined, separate or off. +% If set to custom, all type specific commands need to be set below. +\newcommand{\numberingpreset}{combined} + +% Specify how elements are to be numbered. Can be (X is the current number of the element): +% - none (X) +% - section (section.X) +% - subsection (section.subsection.X) +% - subsubsection (section.subsection.subsubsection.X) +% - paragraph (section.subsection.subsubsection.paragraph.X) +\newcommand{\subsectionnumbering}{subsection} + + +% Set for a specific type. Can each be combined, separate, default or off: +% If set to anything but 'default', it will override the overarching style +% set by \numberingpreset +\newcommand{\definitionnumbering}{default} +\newcommand{\theoremnumbering}{default} +\newcommand{\lemmanumbering}{default} +\newcommand{\corollarynumbering}{default} +\newcommand{\axiomnumbering}{default} +\newcommand{\factnumbering}{default} +\newcommand{\propositionnumbering}{default} +\newcommand{\examplenumbering}{default} +\newcommand{\formulanumbering}{default} +\newcommand{\remarknumbering}{default} +\newcommand{\proofnumbering}{default} +\newcommand{\intuitionnumbering}{default} +\newcommand{\termnumbering}{default} +\newcommand{\notationnumbering}{default} +\newcommand{\tasknumbering}{default} +\newcommand{\usagenumbering}{default} +\newcommand{\recallnumbering}{default} +\newcommand{\propertiesnumbering}{default} + + % ┌ ┐ % │ Naming │ % └ ┘ @@ -175,72 +241,6 @@ \newcommand{\propertiesShortNamingDE}{Eig.} -% ┌ ┐ -% │ Numbering │ -% └ ┘ -% Set a preset, can be combined, separate or off. -% If set to custom, all type specific commands need to be set below. -\newcommand{\numberingpreset}{combined} - -% Specify how elements are to be numbered. Can be (X is the current number of the element): -% - none (X) -% - section (section.X) -% - subsection (section.subsection.X) -% - subsubsection (section.subsection.subsubsection.X) -% - paragraph (section.subsection.subsubsection.paragraph.X) -\newcommand{\subsectionnumbering}{subsection} - - -% Set for a specific type. Can each be combined, separate, default or off: -% If set to anything but 'default', it will override the overarching style -% set by \numberingpreset -\newcommand{\definitionnumbering}{default} -\newcommand{\theoremnumbering}{default} -\newcommand{\lemmanumbering}{default} -\newcommand{\corollarynumbering}{default} -\newcommand{\axiomnumbering}{default} -\newcommand{\factnumbering}{default} -\newcommand{\propositionnumbering}{default} -\newcommand{\examplenumbering}{default} -\newcommand{\formulanumbering}{default} -\newcommand{\remarknumbering}{default} -\newcommand{\proofnumbering}{default} -\newcommand{\intuitionnumbering}{default} -\newcommand{\termnumbering}{default} -\newcommand{\notationnumbering}{default} -\newcommand{\tasknumbering}{default} -\newcommand{\usagenumbering}{default} -\newcommand{\recallnumbering}{default} -\newcommand{\propertiesnumbering}{default} - - -% ┌ ┐ -% │ General config │ -% └ ┘ -% Configure your author name here -\newcommand{\authorTitle}{Janis Hutz\\\url{https://janishutz.com}} -\newcommand{\authorHeaders}{Janis Hutz} - - -% ┌ ┐ -% │ Rendering │ -% └ ┘ -% Specify how the inline and short descriptors (e.g. Lemma, etc) are rendered. -% - #1 is the name of the descriptor -% - #2 is the number (correctly rendered according to settings and preceded with space if not disabled) -% - #3 is the name passed (non-empty asserted) -\newcommand{\shortDescriptorTemplate}[3]{\bg{#1color}{\shortNamingTranslate{#1} #2} \textit{(#3)}} -\newcommand{\inlineDescriptorTemplate}[3]{\bg{#1color}{\namingTranslate{#1} #2}: \textit{(#3)}} - -% These are used if no name is provided and argument #4 from above is the missing argument -\newcommand{\anonymousShortDescriptorTemplate}[2]{\bg{#1color}{\shortNamingTranslate{#1} #2}} -\newcommand{\anonymousInlineDescriptorTemplate}[2]{\bg{#1color}{\namingTranslate{#1} #2}} - -% background command config (draws a small box around the content) -\newcommand{\backgroundPadding}{2pt} -\newcommand{\backgroundRounding}{1pt} - - \newcounter{definitionnone} \newcounter{definitionsection}[section] \renewcommand{\thedefinitionsection}{\thesection.\arabic{definitionsection}} @@ -687,20 +687,6 @@ } -% Add glossaries functionality - -\newcommand{\setupGlossary}{ - \usepackage[nonumberlist, toc]{glossaries} - \usepackage[nottoc, numbib]{tocbibind} - \makenoidxglossaries -} - -\newcommand{\printGlossary}{ - \glsaddall - \printnoidxglossaries -} - - % ┌ ┐ % │ Math │ % └ ┘ @@ -842,6 +828,93 @@ } +% ┌ ┐ +% │ Index │ +% └ ┘ + +% For using index package +\newcommand{\prepareIndex}{ + \usepackage[T1]{fontenc} + \usepackage{imakeidx} + \makeindex +} + +\newcommand{\addIndexBold}[1]{\textbf{\index{\MakeLowercase{#1}} #1}} +\newcommand{\addIndexItalic}[1]{\textit{\index{\MakeLowercase{#1}} #1}} +\newcommand{\addIndex}[1]{\index{\MakeLowercase{#1}} #1} + + + +% ┌ ┐ +% │ Tables │ +% └ ┘ + +\usepackage{booktabs} +\usepackage{tabulary} + +% Create new table. #1 Layout, #2 title row +\newenvironment{tables}[2]{ + \begin{center} + \begin{tabular}{#1} + \toprule + #2 \\ + \midrule + }{ + \bottomrule + \end{tabular} + \end{center} +} + +% Create new table in table env. #1 layout, #2 title row, #3 caption +\newenvironment{fullTable}[3]{ + \edef\tableCaption{#3} + \begin{table}[h!] + \begin{tables}{#1}{#2} + }{ + \end{tables} + \caption{\tableCaption} + \end{table} +} + + +% Add glossaries functionality + +\newcommand{\setupGlossary}{ + \usepackage[nonumberlist, toc]{glossaries} + \usepackage[nottoc, numbib]{tocbibind} + \makenoidxglossaries +} + +\newcommand{\printGlossary}{ + \glsaddall + \printnoidxglossaries +} + + +% ┌ ┐ +% │ Translation │ +% └ ┘ +\newcommand{\translate}[2]{% + \ifthenelse{\equal{\currentLanguage}{en}}{#1}{#2}% +} +\newcommand{\tr}[2]{\translate{#1}{#2}} +\newcommand{\namingTranslate}[1]{\translate{\printTranslationOptionEN{#1}}{\printTranslationOptionEN{#1}}} +\newcommand{\shortNamingTranslate}[1]{\translate{\printShortTranslationOptionEN{#1}}{\printShortTranslationOptionEN{#1}}} + +% 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 }} + + % ┌ ┐ % │ Setup │ % └ ┘ @@ -935,47 +1008,6 @@ } -% ┌ ┐ -% │ Translation │ -% └ ┘ -\newcommand{\translate}[2]{% - \ifthenelse{\equal{\currentLanguage}{en}}{#1}{#2}% -} -\newcommand{\tr}[2]{\translate{#1}{#2}} -\newcommand{\namingTranslate}[1]{\translate{\printTranslationOptionEN{#1}}{\printTranslationOptionEN{#1}}} -\newcommand{\shortNamingTranslate}[1]{\translate{\printShortTranslationOptionEN{#1}}{\printShortTranslationOptionEN{#1}}} - -% 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 }} - - -% ┌ ┐ -% │ Index │ -% └ ┘ - -% For using index package -\newcommand{\prepareIndex}{ - \usepackage[T1]{fontenc} - \usepackage{imakeidx} - \makeindex -} - -\newcommand{\addIndexBold}[1]{\textbf{\index{\MakeLowercase{#1}} #1}} -\newcommand{\addIndexItalic}[1]{\textit{\index{\MakeLowercase{#1}} #1}} -\newcommand{\addIndex}[1]{\index{\MakeLowercase{#1}} #1} - - - % ░▒█▀▀▄░▄▀▀▄░█▀▄▀█░▄▀▀▄░█░▒█░▀█▀░█▀▀░█▀▀▄░░░▒█▀▀▀█░█▀▄░░▀░░█▀▀░█▀▀▄░█▀▄░█▀▀ % ░▒█░░░░█░░█░█░▀░█░█▄▄█░█░▒█░░█░░█▀▀░█▄▄▀░░░░▀▀▀▄▄░█░░░░█▀░█▀▀░█░▒█░█░░░█▀▀ @@ -1008,109 +1040,6 @@ \newcommand{\class}{\text{\tr{Cl}{Kl}}} -% ┌ ┐ -% │ Tables │ -% └ ┘ - -\usepackage{booktabs} -\usepackage{tabulary} - -% Create new table. #1 Layout, #2 title row -\newenvironment{tables}[2]{ - \begin{center} - \begin{tabular}{#1} - \toprule - #2 \\ - \midrule - }{ - \bottomrule - \end{tabular} - \end{center} -} - -% Create new table in table env. #1 layout, #2 title row, #3 caption -\newenvironment{fullTable}[3]{ - \edef\tableCaption{#3} - \begin{table}[h!] - \begin{tables}{#1}{#2} - }{ - \end{tables} - \caption{\tableCaption} - \end{table} -} - - -% ┌ ┐ -% │ Counter numbering │ -% └ ┘ -\newcommand{\preEnvHook}[1]{% - \stepLabelNumber{combined}% - \ifthenelse{\equal{\numberingpreset}{combined}}{% - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{ - \stepLabelNumber{combined}% - }{}% - }{% - \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{% - \stepLabelNumber{combined}% - }{}% - }% -} - -% Decides on the numbering to use (combined or not) -\newcommand{\loadNumberingConfiguration}{% - \ifthenelse{\boolean{numberingDisabled}}{% - \renewcommand{\thetable}{\arabic{table}} - \renewcommand{\thefigure}{\arabic{figure}} - }{ - \ifthenelse{\equal{\numberingpreset}{combined}}{% - \ifthenelse{\equal{\subsectionnumbering}{none}}{ - \renewcommand{\thetable}{\arabic{combinednone}} - \renewcommand{\thefigure}{\arabic{combinednone}} - }{% - \renewcommand{\thetable}{\ssprinter.\arabic{combined\subsectionnumbering}} - \renewcommand{\thefigure}{\ssprinter.\arabic{combined\subsectionnumbering}} - }% - }{% - \ifthenelse{\equal{\numberingpreset}{separate}}{ - \ifthenelse{\equal{\subsectionnumbering}{none}}{}{ - \renewcommand{\thetable}{\ssprinter.\arabic{table}} - \renewcommand{\thefigure}{\ssprinter.\arabic{figure}} - } - }{% - \renewcommand{\thetable}{\arabic{table}} - \renewcommand{\thefigure}{\arabic{figure}} - }% - }% - }% -} - -% Prints the preceding subsection numbers -\newcommand{\ssprinter}{\thesection} -\newcommand{\generateSubsection}{% - \ifthenelse{\equal{\subsectionnumbering}{section}}{% - \renewcommand{\ssprinter}{\thesection} - }{% - \ifthenelse{\equal{\subsectionnumbering}{subsection}}{% - \renewcommand{\ssprinter}{\thesubsection} - }{% - \ifthenelse{\equal{\subsectionnumbering}{subsubsection}}{% - \renewcommand{\ssprinter}{\thesubsubsection} - }{% - \ifthenelse{\equal{\subsectionnumbering}{paragraph}}{% - \renewcommand{\ssprinter}{\theparagraph} - }{ - \renewcommand{\ssprinter}{} - }% - }% - }% - }% -} -\loadNumberingConfiguration - -\AtBeginEnvironment{table}{\preEnvHook{table}} -\AtBeginEnvironment{figure}{\preEnvHook{figure}} - - % ── Set the current number of a label ─────────────────────────────── \newcommand{\setLabelNumber}[2]{% \setcounter{#1none}{#2}% @@ -1218,6 +1147,88 @@ } +% ┌ ┐ +% │ Counter numbering │ +% └ ┘ +\newcommand{\preEnvHook}[1]{% + \stepLabelNumber{combined}% + \ifthenelse{\equal{\numberingpreset}{combined}}{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{ + \stepLabelNumber{combined}% + }{}% + }{% + \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{combined}}{% + \stepLabelNumber{combined}% + }{}% + }% +} + +% Decides on the numbering to use (combined or not) +\newcommand{\loadNumberingConfiguration}{% + \ifthenelse{\boolean{numberingDisabled}}{% + \renewcommand{\thetable}{\arabic{table}} + \renewcommand{\thefigure}{\arabic{figure}} + }{ + \ifthenelse{\equal{\numberingpreset}{combined}}{% + \ifthenelse{\equal{\subsectionnumbering}{none}}{ + \renewcommand{\thetable}{\arabic{combinednone}} + \renewcommand{\thefigure}{\arabic{combinednone}} + }{% + \renewcommand{\thetable}{\ssprinter.\arabic{combined\subsectionnumbering}} + \renewcommand{\thefigure}{\ssprinter.\arabic{combined\subsectionnumbering}} + }% + }{% + \ifthenelse{\equal{\numberingpreset}{separate}}{ + \ifthenelse{\equal{\subsectionnumbering}{none}}{}{ + \renewcommand{\thetable}{\ssprinter.\arabic{table}} + \renewcommand{\thefigure}{\ssprinter.\arabic{figure}} + } + }{% + \renewcommand{\thetable}{\arabic{table}} + \renewcommand{\thefigure}{\arabic{figure}} + }% + }% + }% +} + +% Prints the preceding subsection numbers +\newcommand{\ssprinter}{\thesection} +\newcommand{\generateSubsection}{% + \ifthenelse{\equal{\subsectionnumbering}{section}}{% + \renewcommand{\ssprinter}{\thesection} + }{% + \ifthenelse{\equal{\subsectionnumbering}{subsection}}{% + \renewcommand{\ssprinter}{\thesubsection} + }{% + \ifthenelse{\equal{\subsectionnumbering}{subsubsection}}{% + \renewcommand{\ssprinter}{\thesubsubsection} + }{% + \ifthenelse{\equal{\subsectionnumbering}{paragraph}}{% + \renewcommand{\ssprinter}{\theparagraph} + }{ + \renewcommand{\ssprinter}{} + }% + }% + }% + }% +} +\loadNumberingConfiguration + +\AtBeginEnvironment{table}{\preEnvHook{table}} +\AtBeginEnvironment{figure}{\preEnvHook{figure}} + + +% ┌ ┐ +% │ STYLE: Math │ +% └ ┘ + +% Add shortcuts to commonly used commands +\newcommand{\vect}[1]{\overrightarrow{#1}} +\renewcommand{\hat}[1]{\widehat{#1}} +\renewcommand{\tilde}[1]{\widetilde{#1}} +\newcommand{\proven}{$\hspace{17cm}\square$} + + \newcommand{\noverticalspacing}{ \abovedisplayskip 1pt plus 2pt minus 1pt \belowdisplayskip 1pt plus 2pt minus 1pt @@ -1244,6 +1255,40 @@ } +% ── Inline environments ───────────────────────────────────────────── +% TODO: ref label generation +\newcommand{\inline}[2][NONAME]{% + \ifthenelse{\equal{NONAME}{#1}}{% + \anonymousInlineDescriptorTemplate{#2}{\printLabel{#2}}% + }{% + \inlineDescriptorTemplate{#2}{\printLabel{#2}}{#1}% + }% +} + +\newcommand{\labeledInline}[3][NONAME]{% + \edef{\tempLabel}{#3} + \label{\tempLabel} + \inline[#1]{#2} +} + +\newcommand{\short}[2][NONAME]{% + \ifthenelse{\equal{NONAME}{#1}}{% + \anonymousShortDescriptorTemplate{#2}{\printLabel{#2}}% + }{% + \shortDescriptorTemplate{#2}{\printLabel{#2}}{#1}% + }% +} + +\newcommand{\labeledShort}[3][NONAME]{% + \edef{\tempLabel}{#3} + \label{\tempLabel} + \short[#1]{#2} +} + +\newcommand{\inlineproof}{\anonymousInlineDescriptorTemplate{proof}{}} +\newcommand{\shortproof}{\anonymousShortDescriptorTemplate{proof}{}} + + % ┌ ┐ % │ STYLE: Common tcolorboxes │ % └ ┘ @@ -1295,51 +1340,6 @@ \newtcolorbox{simplebox}[2][]{colback=#2!5!white,colframe=#2!75!black,#1} -% ── Inline environments ───────────────────────────────────────────── -% TODO: ref label generation -\newcommand{\inline}[2][NONAME]{% - \ifthenelse{\equal{NONAME}{#1}}{% - \anonymousInlineDescriptorTemplate{#2}{\printLabel{#2}}% - }{% - \inlineDescriptorTemplate{#2}{\printLabel{#2}}{#1}% - }% -} - -\newcommand{\labeledInline}[3][NONAME]{% - \edef{\tempLabel}{#3} - \label{\tempLabel} - \inline[#1]{#2} -} - -\newcommand{\short}[2][NONAME]{% - \ifthenelse{\equal{NONAME}{#1}}{% - \anonymousShortDescriptorTemplate{#2}{\printLabel{#2}}% - }{% - \shortDescriptorTemplate{#2}{\printLabel{#2}}{#1}% - }% -} - -\newcommand{\labeledShort}[3][NONAME]{% - \edef{\tempLabel}{#3} - \label{\tempLabel} - \short[#1]{#2} -} - -\newcommand{\inlineproof}{\anonymousInlineDescriptorTemplate{proof}{}} -\newcommand{\shortproof}{\anonymousShortDescriptorTemplate{proof}{}} - - -% ┌ ┐ -% │ STYLE: Math │ -% └ ┘ - -% Add shortcuts to commonly used commands -\newcommand{\vect}[1]{\overrightarrow{#1}} -\renewcommand{\hat}[1]{\widehat{#1}} -\renewcommand{\tilde}[1]{\widetilde{#1}} -\newcommand{\proven}{$\hspace{17cm}\square$} - - % ┌ ┐ % │ STYLE: Computer Science │ % └ ┘ diff --git a/letter.tex b/letter.tex index c387b12..15c9a21 100644 --- a/letter.tex +++ b/letter.tex @@ -30,12 +30,12 @@ % Define new letter header \setkomavar{firsthead}{ - \null\hfill - \parbox[t][\headheight][t]{4cm}{% - \vspace*{2cm} + \null\hfill + \parbox[t][\headheight][t]{4cm}{% + \vspace*{2cm} - \usekomavar{fromname} \newline - \usekomavar{fromaddress} \newline - \usekomavar{fromplace} - } + \usekomavar{fromname} \newline + \usekomavar{fromaddress} \newline + \usekomavar{fromplace} + } }% From 1f1e51b29cc7edace54ac5e2e250289fe5f6d4cf Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sat, 21 Feb 2026 16:37:57 +0100 Subject: [PATCH 17/32] Fix issue with spacing, remove pipeline for now --- .gitea/workflows/update-docs.yml | 35 ------------------- .gitea/workflows/update-helpers.yml | 35 ------------------- janishutz-helpers.tex | 2 +- src/counters/generator.sty | 2 +- ...ments.sty => environments-descriptors.sty} | 0 5 files changed, 2 insertions(+), 72 deletions(-) delete mode 100644 .gitea/workflows/update-docs.yml delete mode 100644 .gitea/workflows/update-helpers.yml rename src/style/{environments.sty => environments-descriptors.sty} (100%) diff --git a/.gitea/workflows/update-docs.yml b/.gitea/workflows/update-docs.yml deleted file mode 100644 index 296baf0..0000000 --- a/.gitea/workflows/update-docs.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: Update docs -on: - push: - paths: - - 'docs/**' -jobs: - build_docs: - runs-on: ubuntu-latest - steps: - - name: Set up Git repository - uses: actions/checkout@v6 - - name: Sign into gitea registry - uses: https://github.com/docker/login-action@v3 - with: - username: ${{ vars.REGISTRY_USER_USERNAME }} - password: ${{ secrets.REGISTRY_USER_PASSWORD }} - registry: ${{ vars.REGISTRY_BASE_URL }} - - name: Run format of docs - uses: actions/latex-format@main - with: - workdir: docs - - name: Run build - uses: actions/latex-full@main - with: - workdir: docs - include_helpers: true - - name: Upload compiled docs - uses: actions/git-auto-commit-action@v7 - with: - commit_message: "[skip ci] Build docs on push" - file_pattern: '*.pdf' - commit_user_name: LaTeX compiler [bot] - commit_user_email: actions@janishutz.com - commit_author: LaTeX compiler [bot] - push_options: "--force" diff --git a/.gitea/workflows/update-helpers.yml b/.gitea/workflows/update-helpers.yml deleted file mode 100644 index d0b6f6d..0000000 --- a/.gitea/workflows/update-helpers.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: Update helpers -on: - push: - paths: - - 'src/**' -jobs: - build_helpers: - runs-on: ubuntu-latest - steps: - - name: Set up Git repository - uses: actions/checkout@v6 - - name: Sign into gitea registry - uses: https://github.com/docker/login-action@v3 - with: - username: ${{ vars.REGISTRY_USER_USERNAME }} - password: ${{ secrets.REGISTRY_USER_PASSWORD }} - registry: ${{ vars.REGISTRY_BASE_URL }} - - name: Run format of main - uses: actions/latex-format@main - with: - workdir: main - - name: Run format of extra - uses: actions/latex-format@main - with: - workdir: extra - - name: Run build - run: ./build.sh - - name: Upload compiled helpers - uses: actions/git-auto-commit-action@v7 - with: - commit_message: "[skip ci] Build helpers on push" - commit_user_name: Helpers compiler [bot] - commit_user_email: actions@janishutz.com - commit_author: Helpers compiler [bot] - push_options: "--force" diff --git a/janishutz-helpers.tex b/janishutz-helpers.tex index 13db9f0..a548a98 100644 --- a/janishutz-helpers.tex +++ b/janishutz-helpers.tex @@ -1117,7 +1117,7 @@ \newcommand{\printCounter}[1]{\refstepcounter{#1}\csname the#1\endcsname} \newcommand{\printLabel}[1]{% - \ifthenelse{\boolean{numberingDisabled}}{}{ + \ifthenelse{\boolean{numberingDisabled}}{}{% \ifcsdef{#1numbering}{% Extra config present \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{% \labelPrintBackendRoutine{#1}% diff --git a/src/counters/generator.sty b/src/counters/generator.sty index 779ed33..8688921 100644 --- a/src/counters/generator.sty +++ b/src/counters/generator.sty @@ -3,7 +3,7 @@ \newcommand{\printCounter}[1]{\refstepcounter{#1}\csname the#1\endcsname} \newcommand{\printLabel}[1]{% - \ifthenelse{\boolean{numberingDisabled}}{}{ + \ifthenelse{\boolean{numberingDisabled}}{}{% \ifcsdef{#1numbering}{% Extra config present \ifthenelse{\equal{\printNumberingConfigForDescriptor{#1}}{default}}{% \labelPrintBackendRoutine{#1}% diff --git a/src/style/environments.sty b/src/style/environments-descriptors.sty similarity index 100% rename from src/style/environments.sty rename to src/style/environments-descriptors.sty From 921f3447ba693003730d1d301cfbbde5308e9cbd Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sat, 21 Feb 2026 16:42:45 +0100 Subject: [PATCH 18/32] fix incorrect command --- janishutz-helpers.tex | 4 ++-- src/counters/usercommands.sty | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/janishutz-helpers.tex b/janishutz-helpers.tex index a548a98..d3a32fd 100644 --- a/janishutz-helpers.tex +++ b/janishutz-helpers.tex @@ -1103,12 +1103,12 @@ \newcommand{\setsubsectionnumbering}[1]{ \renewcommand{\subsectionnumbering}{#1} - \loadNumberingConfig + \loadNumberingConfiguration } \newcommand{\setnumberingpreset}[1]{ \renewcommand{\numberingpreset}{#1} - \loadNumberingConfig + \loadNumberingConfiguration } diff --git a/src/counters/usercommands.sty b/src/counters/usercommands.sty index 226084f..77d543d 100644 --- a/src/counters/usercommands.sty +++ b/src/counters/usercommands.sty @@ -61,10 +61,10 @@ \newcommand{\setsubsectionnumbering}[1]{ \renewcommand{\subsectionnumbering}{#1} - \loadNumberingConfig + \loadNumberingConfiguration } \newcommand{\setnumberingpreset}[1]{ \renewcommand{\numberingpreset}{#1} - \loadNumberingConfig + \loadNumberingConfiguration } From 96739ec7eb041ef727a18472ef76d9acf4b46709 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sat, 21 Feb 2026 16:47:44 +0100 Subject: [PATCH 19/32] Update colors --- janishutz-helpers.tex | 39 +++++++++++++++++++-------------------- src/style/tcb.sty | 39 +++++++++++++++++++-------------------- 2 files changed, 38 insertions(+), 40 deletions(-) diff --git a/janishutz-helpers.tex b/janishutz-helpers.tex index d3a32fd..a5b6483 100644 --- a/janishutz-helpers.tex +++ b/janishutz-helpers.tex @@ -1292,49 +1292,48 @@ % ┌ ┐ % │ STYLE: Common tcolorboxes │ % └ ┘ -% TODO: Update colors \newtcolorbox{recall}[2][]{mainboxstyle,colback=recallcolor!5!white,colframe=recallcolor!75!black,colbacktitle=recallcolor!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=recallcolor!75!black,,fill=recallcolor!75!black] at (frame.north east) {\large \translate{Recall }{Repetition }};},#1} + overlay={\node[overlaystyle,draw=recallcolor!75!black,fill=recallcolor!75!black] at (frame.north east) {\large \translate{Recall }{Repetition }};},#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{properties}[2][]{mainboxstyle,colback=propertiescolor!5!white,colframe=propertiescolor!75!black,colbacktitle=propertiescolor!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=propertiescolor!75!black,fill=propertiescolor!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{restrictions}[2][]{mainboxstyle,colback=propertiescolor!5!white,colframe=propertiescolor!75!black,colbacktitle=propertiescolor!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=propertiescolor!75!black,fill=propertiescolor!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{limitations}[2][]{mainboxstyle,colback=propertiescolor!5!white,colframe=propertiescolor!75!black,colbacktitle=propertiescolor!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=propertiescolor!75!black,fill=propertiescolor!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} +\newtcolorbox{intuition}[2][]{mainboxstyle,colback=intuitioncolor!5!white,colframe=intuitioncolor!75!black,colbacktitle=intuitioncolor!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=intuitioncolor!75!black,fill=intuitioncolor!75!black] at (frame.north east) {\large Intuition};},#1} -\newcommand{\inlineintuition}{\bg{Emerald}{Intuition:}} +\newcommand{\inlineintuition}{\bg{intuitioncolor}{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{terms}[2][]{mainboxstyle,colback=termcolor!5!white,colframe=termcolor!75!black,colbacktitle=termcolor!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=termcolor!75!black,fill=termcolor!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{notation}[2][]{mainboxstyle,colback=notationcolor!5!white,colframe=notationcolor!75!black,colbacktitle=notationcolor!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=notationcolor!75!black,fill=notationcolor!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} +\newtcolorbox{usage}[2][]{mainboxstyle,colback=usagecolor!5!white,colframe=usagecolor!75!black,colbacktitle=usagecolor!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=usagecolor!75!black,fill=usagecolor!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} +\newtcolorbox{task}[2][]{mainboxstyle,colback=taskcolor!5!white,colframe=taskcolor!75!black,colbacktitle=taskcolor!75!black,title={\large #2},overlay={\node[overlaystyle,draw=taskcolor!75!black,fill=taskcolor!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} +\newtcolorbox{proof}[2][]{mainboxstyle,colback=proofcolor!5!white,colframe=proofcolor!75!black,colbacktitle=proofcolor!75!black,title={\large #2},overlay={\node[overlaystyle,draw=proofcolor!75!black,fill=proofcolor!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} + 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} diff --git a/src/style/tcb.sty b/src/style/tcb.sty index 92f9dd7..4c313b7 100644 --- a/src/style/tcb.sty +++ b/src/style/tcb.sty @@ -1,49 +1,48 @@ % ┌ ┐ % │ STYLE: Common tcolorboxes │ % └ ┘ -% TODO: Update colors \newtcolorbox{recall}[2][]{mainboxstyle,colback=recallcolor!5!white,colframe=recallcolor!75!black,colbacktitle=recallcolor!75!black,title={\large #2}, - overlay={\node[overlaystyle,draw=recallcolor!75!black,,fill=recallcolor!75!black] at (frame.north east) {\large \translate{Recall }{Repetition }};},#1} + overlay={\node[overlaystyle,draw=recallcolor!75!black,fill=recallcolor!75!black] at (frame.north east) {\large \translate{Recall }{Repetition }};},#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{properties}[2][]{mainboxstyle,colback=propertiescolor!5!white,colframe=propertiescolor!75!black,colbacktitle=propertiescolor!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=propertiescolor!75!black,fill=propertiescolor!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{restrictions}[2][]{mainboxstyle,colback=propertiescolor!5!white,colframe=propertiescolor!75!black,colbacktitle=propertiescolor!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=propertiescolor!75!black,fill=propertiescolor!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{limitations}[2][]{mainboxstyle,colback=propertiescolor!5!white,colframe=propertiescolor!75!black,colbacktitle=propertiescolor!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=propertiescolor!75!black,fill=propertiescolor!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} +\newtcolorbox{intuition}[2][]{mainboxstyle,colback=intuitioncolor!5!white,colframe=intuitioncolor!75!black,colbacktitle=intuitioncolor!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=intuitioncolor!75!black,fill=intuitioncolor!75!black] at (frame.north east) {\large Intuition};},#1} -\newcommand{\inlineintuition}{\bg{Emerald}{Intuition:}} +\newcommand{\inlineintuition}{\bg{intuitioncolor}{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{terms}[2][]{mainboxstyle,colback=termcolor!5!white,colframe=termcolor!75!black,colbacktitle=termcolor!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=termcolor!75!black,fill=termcolor!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{notation}[2][]{mainboxstyle,colback=notationcolor!5!white,colframe=notationcolor!75!black,colbacktitle=notationcolor!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=notationcolor!75!black,fill=notationcolor!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} +\newtcolorbox{usage}[2][]{mainboxstyle,colback=usagecolor!5!white,colframe=usagecolor!75!black,colbacktitle=usagecolor!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=usagecolor!75!black,fill=usagecolor!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} +\newtcolorbox{task}[2][]{mainboxstyle,colback=taskcolor!5!white,colframe=taskcolor!75!black,colbacktitle=taskcolor!75!black,title={\large #2},overlay={\node[overlaystyle,draw=taskcolor!75!black,fill=taskcolor!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} +\newtcolorbox{proof}[2][]{mainboxstyle,colback=proofcolor!5!white,colframe=proofcolor!75!black,colbacktitle=proofcolor!75!black,title={\large #2},overlay={\node[overlaystyle,draw=proofcolor!75!black,fill=proofcolor!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} + 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} From 14e3825368d4107860ef59d4b44fff5ac783df28 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sat, 21 Feb 2026 16:57:56 +0100 Subject: [PATCH 20/32] [Docs] Update --- docs/docs.pdf | Bin 313387 -> 319519 bytes docs/docs.tex | 6 ++---- docs/parts/reference/extras.tex | 5 ++--- docs/parts/reference/style/spacing.tex | 4 +++- docs/parts/troubleshooting.tex | 16 +--------------- 5 files changed, 8 insertions(+), 23 deletions(-) diff --git a/docs/docs.pdf b/docs/docs.pdf index 1732ecb817b64e1925715673fa4aa81e65c39731..d8299f5a57cd2dcd5d56194f4c5f5b75974877eb 100644 GIT binary patch delta 98789 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 A9RL6T delta 92786 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

-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 \]|) instead of the \texttt{align} environment for short equations. diff --git a/docs/parts/troubleshooting.tex b/docs/parts/troubleshooting.tex index 06c9eb5..5697d1c 100644 --- a/docs/parts/troubleshooting.tex +++ b/docs/parts/troubleshooting.tex @@ -3,27 +3,13 @@ \subsection{Visual Errors} \subsubsection{Missing headers \& footers} -You have most likely forgotten about \verb|\startDocument| after \verb|\begin{document}|, or you are using \verb|\setupbarebones| or \verb|\setupexams|. +You have most likely forgotten about \verb|\startDocument| after \verb|\begin{document}|, or you are using \verb|\setupBarebones| or \verb|\setupexams|. You can easily distinguish from simply looking at the PDF. If the title is missing too, it's the first one, if it is there, it is most likely the second. \subsubsection{Right box of guides tcolorbox is a weird title} You have most likely forgotten about the second argument. Then, the first letter is removed from the body and used as the title. -\subsection{pgfkeys: Don't know mainboxstyle} -You have most likely forgotten about \verb|\usetcolorboxes| after \verb|\startDocument|. - -\subsection{Numbering incorrect after numberingOn} -Check the start of the document and make sure you have used \verb|\setNumberingStyle| to set the numbering style and not -\verb|\setcounter{numberingConfig}| - - - -\subsection{Undefined commands} -You have most likely loaded a too small \textit{scope} - -\subsection{Lots of errors and no compile} -You have most likely selected a non-existant \textit{scope} in the \verb|\load| function. You can verify by searching the \texttt{.log} file for any mention of \texttt{INVALID CONFIG SPECIFIED, NOTHING LOADED!} \subsection{Minted} \texttt{minted} is a syntax highlighting library. It can cause issues when running, as it needs extra configuration for the compiler. From 28301eb82d615f8a7530d21851330bcab30068a0 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sat, 21 Feb 2026 17:11:21 +0100 Subject: [PATCH 21/32] [Snippets] Update --- vscode-snippets/tex.json | 720 ++++++++++++++++----------------------- 1 file changed, 293 insertions(+), 427 deletions(-) diff --git a/vscode-snippets/tex.json b/vscode-snippets/tex.json index c89d848..5b659bd 100755 --- a/vscode-snippets/tex.json +++ b/vscode-snippets/tex.json @@ -1,200 +1,198 @@ { - "prepare LaTeX Document": { - "prefix": "latex-prepare", - "body": [ - "\\documentclass{article}\n", - "\\newcommand{\\dir}{~/projects/latex} % IMPORTANT: No trailing slashes!", - "\\input{\\dir/include.tex}", - "\\load{recommended}\n", - "\\setup{$1}\n", - "\\begin{document}", - "\\startDocument", - "\\usetcolorboxes", - "$2\n\n", - "\\end{document}" - ], - "description": "Prepares a full LaTeX Document for use and compiling" - }, - "Fancy table": { - "prefix": "table", - "body": [ - "\\begin{tables}{$1}{$2}\n", - "\t$3\\\\", - "\\end{tables}" - ], - "description": "Insert a table (without environment)" - }, - "Formula": { - "prefix": "formula", - "body": [ - "\\begin{formula}[]{$1}", - "\t$2", - "\\end{formula}" - ], - "description": "Inserts a tcolorbox to provide a formula (red)" - }, - "Definition": { - "prefix": "definition", - "body": [ - "\\begin{definition}[]{$1}", - "\t$2", - "\\end{definition}" - ], - "description": "Inserts a tcolorbox to provide a definition (blue)" - }, - "Recall": { - "prefix": "recall", - "body": [ - "\\begin{recall}[]{$1}", - "\t$2", - "\\end{recall}" - ], - "description": "Inserts a tcolorbox to provide a recall / revision of previous knowledge (yellow)" - }, - "Important Remarks": { - "prefix": "remarks", - "body": [ - "\\begin{remark}[]{$1}", - "\t$2", - "\\end{remark}" - ], - "description": "Inserts a tcolorbox to provide remarks (green), but here numbered" - }, - "Remark (numbered)": { - "prefix": "remark", - "body": [ - "\\begin{remarks}[]{$1}", - "\t$2", - "\\end{remarks}" - ], - "description": "Inserts a tcolorbox to provide remarks (green)" - }, - "Guides": { - "prefix": "guides", - "body": [ - "\\begin{guides}[]{$1}{${2:Usage}}", - "\t$2", - "\\end{guides}" - ], - "description": "Inserts a tcolorbox to provide guides / instructions on how to use (red)" - }, - "Properties": { - "prefix": "properties", - "body": [ - "\\begin{properties}[]{$1}", - "\t$2", - "\\end{properties}" - ], - "description": "Inserts a tcolorbox to inform about properties" - }, - "Restrictions": { - "prefix": "restrictions", - "body": [ - "\\begin{restrictions}[]{$1}", - "\t$2", - "\\end{restrictions}" - ], - "description": "Inserts a tcolorbox to inform about restrictions" - }, - "Intuition": { - "prefix": "restrictions", - "body": [ - "\\begin{intuition}[]{$1}", - "\t$2", - "\\end{intuition}" - ], - "description": "Tcolorbox to highlight sections about intuition" - }, - "Limitations": { - "prefix": "limitations", - "body": [ - "\\begin{limitations}[]{$1}", - "\t$2", - "\\end{limitations}" - ], - "description": "Inserts a tcolorbox to inform about limitations" - }, - "Theorem": { - "prefix": "theorem", - "body": [ - "\\begin{theorem}[]{$1}", - "\t$2", - "\\end{theorem}" - ], - "description": "Inserts a tcolorbox to inform about theorems" - }, - "Lemma": { - "prefix": "lemma", - "body": [ - "\\begin{lemma}[]{$1}", - "\t$2", - "\\end{lemma}" - ], - "description": "Inserts a tcolorbox to inform about lemmas" - }, - "Corollary": { - "prefix": "corollary", - "body": [ - "\\begin{corollary}[]{$1}", - "\t$2", - "\\end{corollary}" - ], - "description": "Inserts a tcolorbox to inform about corollaries" - }, - "Proposition": { - "prefix": "proposition", - "body": [ - "\\begin{proposition}[]{$1}", - "\t$2", - "\\end{proposition}" - ], - "description": "Inserts a tcolorbox to inform about propositions" - }, - "Fact": { - "prefix": "fact", - "body": [ - "\\begin{fact}[]{$1}", - "\t$2", - "\\end{fact}" - ], - "description": "Inserts a tcolorbox to inform about facts" - }, - "Terms": { - "prefix": "terms", - "body": [ - "\\begin{terms}[]{$1}", - "\t$2", - "\\end{terms}" - ], - "description": "Inserts a tcolorbox to inform about terms" - }, - "Proof": { - "prefix": "proof", - "body": [ - "\\begin{proof}[]{$1}", - "\t$2", - "\\end{proof}" - ], - "description": "Inserts a tcolorbox to show a proof" - }, - "Axiom": { - "prefix": "axiom", - "body": [ - "\\begin{axiom}[]{$1}", - "\t$2", - "\\end{axiom}" - ], - "description": "Inserts a tcolorbox to show an axiom" - }, - "Notation": { - "prefix": "notation", - "body": [ - "\\begin{notation}[]{$1}", - "\t$2", - "\\end{notation}" - ], - "description": "Inserts a tcolorbox to show notation" - }, + "prepare LaTeX Document": { + "prefix": "latex-prepare", + "body": [ + "\\documentclass{article}\n", + "\\newcommand{\\input}{~/projects/latex/janishutz-helpers.tex}\n", + "\\usepackage{lmodern}", + "\\setFontType{sans}\n", + "\\setup{$1}\n", + "\\begin{document}", + "\\startDocument\n\n", + "\\vspace{2cm}", + "\\begin{center}\n\n", + "\\includegraphics[width=0.6\\linewidth]{~/projects/latex/assets/logo.jpg}", + "\\end{center}\n\n", + "\\vspace{3cm}", + "\\begin{center}", + "\t\\begin{Large}", + "\t\t\\quote{A funny quote by a professor}", + "\t\\end{Large}", + "\\hspace{3cm} - Prof. Dr. Professor Name, YEAR", + "\\end{center}\n", + "\\vspace{2cm}", + "\\begin{center}", + "\tSEMESTER, ETHZ\\\\[0.2cm]", + "\t\\begin{Large}", + "\t\tSummary of the Script and Lectures", + "\t\\end{Large}\\\\[0.2cm]", + "\\end{center}", + "\\end{document}" + ], + "description": "Prepares a full LaTeX Document for use and compiling" + }, + "Fancy table": { + "prefix": "table", + "body": [ + "\\begin{tables}{$1}{$2}\n", + "\t$3\\\\", + "\\end{tables}" + ], + "description": "Insert a table (without environment)" + }, + "Formula": { + "prefix": "formula", + "body": [ + "\\begin{formula}[]{$1}", + "\t$2", + "\\end{formula}" + ], + "description": "Inserts a tcolorbox to provide a formula (red)" + }, + "Definition": { + "prefix": "definition", + "body": [ + "\\begin{definition}[]{$1}", + "\t$2", + "\\end{definition}" + ], + "description": "Inserts a tcolorbox to provide a definition (blue)" + }, + "Recall": { + "prefix": "recall", + "body": [ + "\\begin{recall}[]{$1}", + "\t$2", + "\\end{recall}" + ], + "description": "Inserts a tcolorbox to point out / revise of previous knowledge (yellow)" + }, + "Remark": { + "prefix": "remark", + "body": [ + "\\begin{remarks}[]{$1}", + "\t$2", + "\\end{remarks}" + ], + "description": "Inserts a tcolorbox to provide remarks (green)" + }, + "Properties": { + "prefix": "properties", + "body": [ + "\\begin{properties}[]{$1}", + "\t$2", + "\\end{properties}" + ], + "description": "Inserts a tcolorbox to inform about properties" + }, + "Restrictions": { + "prefix": "restrictions", + "body": [ + "\\begin{restrictions}[]{$1}", + "\t$2", + "\\end{restrictions}" + ], + "description": "Inserts a tcolorbox to inform about restrictions" + }, + "Intuition": { + "prefix": "restrictions", + "body": [ + "\\begin{intuition}[]{$1}", + "\t$2", + "\\end{intuition}" + ], + "description": "Tcolorbox to highlight sections about intuition" + }, + "Limitations": { + "prefix": "limitations", + "body": [ + "\\begin{limitations}[]{$1}", + "\t$2", + "\\end{limitations}" + ], + "description": "Inserts a tcolorbox to inform about limitations" + }, + "Theorem": { + "prefix": "theorem", + "body": [ + "\\begin{theorem}[]{$1}", + "\t$2", + "\\end{theorem}" + ], + "description": "Inserts a tcolorbox to state a theorem" + }, + "Lemma": { + "prefix": "lemma", + "body": [ + "\\begin{lemma}[]{$1}", + "\t$2", + "\\end{lemma}" + ], + "description": "Inserts a tcolorbox to state a lemma" + }, + "Corollary": { + "prefix": "corollary", + "body": [ + "\\begin{corollary}[]{$1}", + "\t$2", + "\\end{corollary}" + ], + "description": "Inserts a tcolorbox to state a corollary" + }, + "Proposition": { + "prefix": "proposition", + "body": [ + "\\begin{proposition}[]{$1}", + "\t$2", + "\\end{proposition}" + ], + "description": "Inserts a tcolorbox to state a proposition" + }, + "Fact": { + "prefix": "fact", + "body": [ + "\\begin{fact}[]{$1}", + "\t$2", + "\\end{fact}" + ], + "description": "Inserts a tcolorbox to state a fact" + }, + "Terms": { + "prefix": "terms", + "body": [ + "\\begin{terms}[]{$1}", + "\t$2", + "\\end{terms}" + ], + "description": "Inserts a tcolorbox to inform about terms" + }, + "Proof": { + "prefix": "proof", + "body": [ + "\\begin{proof}[]{$1}", + "\t$2", + "\\end{proof}" + ], + "description": "Inserts a tcolorbox to show a proof" + }, + "Axiom": { + "prefix": "axiom", + "body": [ + "\\begin{axiom}[]{$1}", + "\t$2", + "\\end{axiom}" + ], + "description": "Inserts a tcolorbox to show an axiom" + }, + "Notation": { + "prefix": "notation", + "body": [ + "\\begin{notation}[]{$1}", + "\t$2", + "\\end{notation}" + ], + "description": "Inserts a tcolorbox to show notation" + }, "Example": { "prefix": "example", "body": [ @@ -213,235 +211,103 @@ ], "description": "Inserts a tcolorbox to show example" }, - "Usage": { - "prefix": "usage", - "body": [ - "\\begin{usage}[]{$1}", - "\t$2", - "\\end{usage}" - ], - "description": "Inserts a tcolorbox to inform about usage" - }, - "Conjugation": { - "prefix": "conjugation", - "body": [ - "\\begin{conjugation}[]{$1}", - "\t$2", - "\\end{conjugation}" - ], - "description": "Inserts a tcolorbox to inform about conjugation" - }, - "Forms": { - "prefix": "forms", - "body": [ - "\\begin{forms}[]{$1}", - "\t$2", - "\\end{forms}" - ], - "description": "Inserts a tcolorbox to inform about forms of e.g. grammatical structures" - }, - "General-Tcolorbox": { - "prefix": "general-tcb", - "body": [ - "\\begin{general}[]{${1:title}}{${2:second title}}{${3|red,green,blue,cyan,magenta,yellow,black,gray,white,darkgray,lightgray,brown,lime,olive,orange,pink,purple,teal,violet|}}", - "\t$4", - "\\end{general}" - ], - "description": "Inserts a tcolorbox for general purposes. First bracket is title, second one is second title, third one colour" - }, - "Simple-Tcolorbox": { - "prefix": "simple-tcb", - "body": [ - "\\begin{simplebox}[]{${1|red,green,blue,cyan,magenta,yellow,black,gray,white,darkgray,lightgray,brown,lime,olive,orange,pink,purple,teal,violet|}}", - "\t$2", - "\\end{simplebox}" - ], - "description": "Inserts a simple tcolorbox. No title, first argument the colour colour" - }, - "Derivative": { - "prefix": "derivative", - "body": [ - "\\frac{\\mbox{d}}{\\mbox{d}x}$1" - ] - }, - "Example (inline)": { - "prefix": "example-inline", - "body": [ - "\\inlineex" - ] - }, - "Example (short)": { - "prefix": "example-short", - "body": [ - "\\shortex" - ] - }, - "Definition (inline)": { - "prefix": "definition-inline", - "body": [ - "\\inlinedef" - ] - }, - "Definition (short)": { - "prefix": "definition-short", - "body": [ - "\\shortdef" - ] - }, - "Theorem (inline)": { - "prefix": "theorem-inline", - "body": [ - "\\inlinetheorem" - ] - }, - "Theorem (short)": { - "prefix": "theorem-short", - "body": [ - "\\shorttheorem" - ] - }, - "Lemma (inline)": { - "prefix": "lemma-inline", - "body": [ - "\\inlinelemma" - ] - }, - "Lemma (short)": { - "prefix": "lemma-short", - "body": [ - "\\shortlemma" - ] - }, - "Corollary (inline)": { - "prefix": "corollary-inline", - "body": [ - "\\inlinecorollary" - ] - }, - "Corollary (short)": { - "prefix": "corollary-short", - "body": [ - "\\shortcorollary" - ] - }, - "Proposition (inline)": { - "prefix": "proposition-inline", - "body": [ - "\\inlineproposition" - ] - }, - "Proposition (short)": { - "prefix": "proposition-short", - "body": [ - "\\shortproposition" - ] - }, - "Fact (inline)": { - "prefix": "fact-inline", - "body": [ - "\\inlinefact" - ] - }, - "Fact (short)": { - "prefix": "fact-short", - "body": [ - "\\shortfact" - ] - }, - "Axiom (inline)": { - "prefix": "axiom-inline", - "body": [ - "\\inlineaxiom" - ] - }, - "Axiom (short)": { - "prefix": "axiom-short", - "body": [ - "\\shortaxiom" - ] - }, - "Proof (inline)": { - "prefix": "proof-inline", - "body": [ - "\\inlineproof" - ] - }, - "Proof (short)": { - "prefix": "proof-short", - "body": [ - "\\shortproof" - ] - }, - "bold": { - "prefix": "#bold", - "body": [ - "\\textbf{$1}" - ] - }, - "italic": { - "prefix": "#i", - "body": [ - "\\textit{$1}" - ] - }, - "bolditalic": { - "prefix": "#bi", - "body": [ - "\\textbf{\\textit{$1}}" - ] - }, - "underlinie": { - "prefix": "#u", - "body": [ - "\\underbar{$1}" - ] - }, - "angles": { - "prefix": "angles", - "body": [ - "\\langle $1 \\rangle" - ] - }, - "fill-width": { - "prefix": "#fill", - "body": [ - "\\hspace{\\fill}$1" - ] - }, - "Latex-Colour": { - "prefix": "colour", - "body": [ - "${1|red,green,blue,cyan,magenta,yellow,black,gray,white,darkgray,lightgray,brown,lime,olive,orange,pink,purple,teal,violet|}" - ] - }, - "Latex-Text-Colour": { - "prefix": "colour-text", - "body": [ - "\\color{${1|red,green,blue,cyan,magenta,yellow,black,gray,white,darkgray,lightgray,brown,lime,olive,orange,pink,purple,teal,violet|}}" - ] - }, - "Set Language": { - "prefix": "setLang", - "body": [ - "\\setLang{$1}" - ] - }, - "Letter": { - "prefix": "latex-letter", - "body": [ - "\\documentclass[12pt,a4paper]{scrlttr2}\n", - "\\newcommand{\\dir}{~/projects/latex} % IMPORTANT: No trailing slashes!", - "\\input{\\dir/include.tex}", - "\\load{letter}\n", - "% Subject", - "\\setkomavar{subject}{$1}", - "\\begin{document}\\raggedright", - "\t\\begin{letter}{Company \\\\\\ Name \\\\\\ Address \\\\\\ CH-Place}", - "\t\t\\opening{Intro}\n", - "\t\t$2\n", - "\t\t\\closing{Kind regards}", - "\t\\end{letter}", - "\\end{document}" - ] - } + "Usage": { + "prefix": "usage", + "body": [ + "\\begin{usage}[]{$1}", + "\t$2", + "\\end{usage}" + ], + "description": "Inserts a tcolorbox to inform about usage" + }, + "General-Tcolorbox": { + "prefix": "general-tcb", + "body": [ + "\\begin{general}[]{${1:title}}{${2:second title}}{${3|red,green,blue,cyan,magenta,yellow,black,gray,white,darkgray,lightgray,brown,lime,olive,orange,pink,purple,teal,violet|}}", + "\t$4", + "\\end{general}" + ], + "description": "Inserts a tcolorbox for general purposes. First bracket is title, second one is second title, third one colour" + }, + "Simple-Tcolorbox": { + "prefix": "simple-tcb", + "body": [ + "\\begin{simplebox}[]{${1|red,green,blue,cyan,magenta,yellow,black,gray,white,darkgray,lightgray,brown,lime,olive,orange,pink,purple,teal,violet|}}", + "\t$2", + "\\end{simplebox}" + ], + "description": "Inserts a simple tcolorbox. No title, first argument the colour colour" + }, + "bold": { + "prefix": "#bold", + "body": [ + "\\textbf{$1}" + ] + }, + "italic": { + "prefix": "#i", + "body": [ + "\\textit{$1}" + ] + }, + "bolditalic": { + "prefix": "#bi", + "body": [ + "\\textbf{\\textit{$1}}" + ] + }, + "underlinie": { + "prefix": "#u", + "body": [ + "\\underbar{$1}" + ] + }, + "angles": { + "prefix": "angles", + "body": [ + "\\langle $1 \\rangle" + ] + }, + "fill-width": { + "prefix": "#fill", + "body": [ + "\\hspace{\\fill}$1" + ] + }, + "Latex-Colour": { + "prefix": "colour", + "body": [ + "${1|red,green,blue,cyan,magenta,yellow,black,gray,white,darkgray,lightgray,brown,lime,olive,orange,pink,purple,teal,violet|}" + ] + }, + "Latex-Text-Colour": { + "prefix": "colour-text", + "body": [ + "\\color{${1|red,green,blue,cyan,magenta,yellow,black,gray,white,darkgray,lightgray,brown,lime,olive,orange,pink,purple,teal,violet|}}" + ] + }, + "Set Language": { + "prefix": "setLang", + "body": [ + "\\setLang{$1}" + ] + }, + "Letter": { + "prefix": "latex-letter", + "body": [ + "\\documentclass[12pt,a4paper]{scrlttr2}\n", + "\\newcommand{\\dir}{~/projects/latex} % IMPORTANT: No trailing slashes!", + "\\input{\\dir/include.tex}", + "\\load{letter}\n", + "% Subject", + "\\setkomavar{subject}{$1}", + "\\begin{document}\\raggedright", + "\t\\begin{letter}{Company \\\\\\ Name \\\\\\ Address \\\\\\ CH-Place}", + "\t\t\\opening{Intro}\n", + "\t\t$2\n", + "\t\t\\closing{Kind regards}", + "\t\\end{letter}", + "\\end{document}" + ] + } } From c6d00748cddaea8747083f8ed6e7e6b24451d55a Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sat, 21 Feb 2026 17:26:26 +0100 Subject: [PATCH 22/32] [General] Various fixes --- config/main.sty | 8 +++--- janishutz-helpers.tex | 35 ++++++++++++++++++++------ src/core/translation.sty | 4 +-- src/style/environments-descriptors.sty | 23 +++++++++++++++-- 4 files changed, 54 insertions(+), 16 deletions(-) diff --git a/config/main.sty b/config/main.sty index 01c85ec..c17caea 100644 --- a/config/main.sty +++ b/config/main.sty @@ -13,12 +13,12 @@ % - #1 is the name of the descriptor % - #2 is the number (correctly rendered according to settings and preceded with space if not disabled) % - #3 is the name passed (non-empty asserted) -\newcommand{\shortDescriptorTemplate}[3]{\bg{#1color}{\shortNamingTranslate{#1} #2} \textit{(#3)}} -\newcommand{\inlineDescriptorTemplate}[3]{\bg{#1color}{\namingTranslate{#1} #2}: \textit{(#3)}} +\newcommand{\shortDescriptorTemplate}[3]{\bg{#1color}{\shortNamingTranslate{#1} #2} \textit{(#3)}\ } +\newcommand{\inlineDescriptorTemplate}[3]{\bg{#1color}{\namingTranslate{#1} #2}: \textit{(#3)}\ } % These are used if no name is provided and argument #4 from above is the missing argument -\newcommand{\anonymousShortDescriptorTemplate}[2]{\bg{#1color}{\shortNamingTranslate{#1} #2}} -\newcommand{\anonymousInlineDescriptorTemplate}[2]{\bg{#1color}{\namingTranslate{#1} #2}} +\newcommand{\anonymousShortDescriptorTemplate}[2]{\bg{#1color}{\shortNamingTranslate{#1} #2}\ } +\newcommand{\anonymousInlineDescriptorTemplate}[2]{\bg{#1color}{\namingTranslate{#1} #2}\ } % background command config (draws a small box around the content) \newcommand{\backgroundPadding}{2pt} diff --git a/janishutz-helpers.tex b/janishutz-helpers.tex index a5b6483..ef0ce84 100644 --- a/janishutz-helpers.tex +++ b/janishutz-helpers.tex @@ -107,12 +107,12 @@ % - #1 is the name of the descriptor % - #2 is the number (correctly rendered according to settings and preceded with space if not disabled) % - #3 is the name passed (non-empty asserted) -\newcommand{\shortDescriptorTemplate}[3]{\bg{#1color}{\shortNamingTranslate{#1} #2} \textit{(#3)}} -\newcommand{\inlineDescriptorTemplate}[3]{\bg{#1color}{\namingTranslate{#1} #2}: \textit{(#3)}} +\newcommand{\shortDescriptorTemplate}[3]{\bg{#1color}{\shortNamingTranslate{#1} #2} \textit{(#3)}\ } +\newcommand{\inlineDescriptorTemplate}[3]{\bg{#1color}{\namingTranslate{#1} #2}: \textit{(#3)}\ } % These are used if no name is provided and argument #4 from above is the missing argument -\newcommand{\anonymousShortDescriptorTemplate}[2]{\bg{#1color}{\shortNamingTranslate{#1} #2}} -\newcommand{\anonymousInlineDescriptorTemplate}[2]{\bg{#1color}{\namingTranslate{#1} #2}} +\newcommand{\anonymousShortDescriptorTemplate}[2]{\bg{#1color}{\shortNamingTranslate{#1} #2}\ } +\newcommand{\anonymousInlineDescriptorTemplate}[2]{\bg{#1color}{\namingTranslate{#1} #2}\ } % background command config (draws a small box around the content) \newcommand{\backgroundPadding}{2pt} @@ -898,8 +898,8 @@ \ifthenelse{\equal{\currentLanguage}{en}}{#1}{#2}% } \newcommand{\tr}[2]{\translate{#1}{#2}} -\newcommand{\namingTranslate}[1]{\translate{\printTranslationOptionEN{#1}}{\printTranslationOptionEN{#1}}} -\newcommand{\shortNamingTranslate}[1]{\translate{\printShortTranslationOptionEN{#1}}{\printShortTranslationOptionEN{#1}}} +\newcommand{\namingTranslate}[1]{\translate{\printTranslationOptionEN{#1}}{\printTranslationOptionDE{#1}}} +\newcommand{\shortNamingTranslate}[1]{\translate{\printShortTranslationOptionEN{#1}}{\printShortTranslationOptionDE{#1}}} % Translation aids (commonly used) \newcommand{\trif}{\translate{if }{falls }} @@ -1271,6 +1271,14 @@ \inline[#1]{#2} } +\newcommand{\unnumberedInline}[2][NONAME]{% + \ifthenelse{\equal{NONAME}{#1}}{% + \anonymousInlineDescriptorTemplate{#2}{}% + }{% + \inlineDescriptorTemplate{#2}{}{#1}% + }% +} + \newcommand{\short}[2][NONAME]{% \ifthenelse{\equal{NONAME}{#1}}{% \anonymousShortDescriptorTemplate{#2}{\printLabel{#2}}% @@ -1285,8 +1293,19 @@ \short[#1]{#2} } -\newcommand{\inlineproof}{\anonymousInlineDescriptorTemplate{proof}{}} -\newcommand{\shortproof}{\anonymousShortDescriptorTemplate{proof}{}} +\newcommand{\unnumberedShort}[2][NONAME]{% + \ifthenelse{\equal{NONAME}{#1}}{% + \anonymousShortDescriptorTemplate{#2}{}% + }{% + \shortDescriptorTemplate{#2}{}{#1}% + }% +} + +\newcommand{\inlineproof}[1][NONAME]{\unnumberedInline[#1]{proof}} +\newcommand{\inlineterm}[1][NONAME]{\unnumberedInline[#1]{term}} + +\newcommand{\shortproof}[1][NONAME]{\unnumberedShort[#1]{proof}} +\newcommand{\shortterm}[1][NONAME]{\unnumberedShort[#1]{term}} % ┌ ┐ diff --git a/src/core/translation.sty b/src/core/translation.sty index 2e0691f..92cf2c2 100644 --- a/src/core/translation.sty +++ b/src/core/translation.sty @@ -5,8 +5,8 @@ \ifthenelse{\equal{\currentLanguage}{en}}{#1}{#2}% } \newcommand{\tr}[2]{\translate{#1}{#2}} -\newcommand{\namingTranslate}[1]{\translate{\printTranslationOptionEN{#1}}{\printTranslationOptionEN{#1}}} -\newcommand{\shortNamingTranslate}[1]{\translate{\printShortTranslationOptionEN{#1}}{\printShortTranslationOptionEN{#1}}} +\newcommand{\namingTranslate}[1]{\translate{\printTranslationOptionEN{#1}}{\printTranslationOptionDE{#1}}} +\newcommand{\shortNamingTranslate}[1]{\translate{\printShortTranslationOptionEN{#1}}{\printShortTranslationOptionDE{#1}}} % Translation aids (commonly used) \newcommand{\trif}{\translate{if }{falls }} diff --git a/src/style/environments-descriptors.sty b/src/style/environments-descriptors.sty index 7c432b4..d6e3bde 100644 --- a/src/style/environments-descriptors.sty +++ b/src/style/environments-descriptors.sty @@ -14,6 +14,14 @@ \inline[#1]{#2} } +\newcommand{\unnumberedInline}[2][NONAME]{% + \ifthenelse{\equal{NONAME}{#1}}{% + \anonymousInlineDescriptorTemplate{#2}{}% + }{% + \inlineDescriptorTemplate{#2}{}{#1}% + }% +} + \newcommand{\short}[2][NONAME]{% \ifthenelse{\equal{NONAME}{#1}}{% \anonymousShortDescriptorTemplate{#2}{\printLabel{#2}}% @@ -28,5 +36,16 @@ \short[#1]{#2} } -\newcommand{\inlineproof}{\anonymousInlineDescriptorTemplate{proof}{}} -\newcommand{\shortproof}{\anonymousShortDescriptorTemplate{proof}{}} +\newcommand{\unnumberedShort}[2][NONAME]{% + \ifthenelse{\equal{NONAME}{#1}}{% + \anonymousShortDescriptorTemplate{#2}{}% + }{% + \shortDescriptorTemplate{#2}{}{#1}% + }% +} + +\newcommand{\inlineproof}[1][NONAME]{\unnumberedInline[#1]{proof}} +\newcommand{\inlineterm}[1][NONAME]{\unnumberedInline[#1]{term}} + +\newcommand{\shortproof}[1][NONAME]{\unnumberedShort[#1]{proof}} +\newcommand{\shortterm}[1][NONAME]{\unnumberedShort[#1]{term}} From f4ae32c7e0592f0d4fb46c7aaf441611b5360af6 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sat, 21 Feb 2026 17:27:52 +0100 Subject: [PATCH 23/32] [Index] Add new command --- src/core/index.sty | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/index.sty b/src/core/index.sty index 122f4df..65d4418 100644 --- a/src/core/index.sty +++ b/src/core/index.sty @@ -10,6 +10,7 @@ } \newcommand{\addIndexBold}[1]{\textbf{\index{\MakeLowercase{#1}} #1}} +\newcommand{\addIndexBI}[1]{\textbf\textit{{\index{\MakeLowercase{#1}} #1}}} \newcommand{\addIndexItalic}[1]{\textit{\index{\MakeLowercase{#1}} #1}} \newcommand{\addIndex}[1]{\index{\MakeLowercase{#1}} #1} From ee409a6dbee12a47e4a43d2ab97b27c5ac1b7b10 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sat, 21 Feb 2026 17:45:28 +0100 Subject: [PATCH 24/32] [Spacing] Add more changes --- janishutz-helpers.tex | 5 +++++ src/style/spacing.sty | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/janishutz-helpers.tex b/janishutz-helpers.tex index ef0ce84..286d449 100644 --- a/janishutz-helpers.tex +++ b/janishutz-helpers.tex @@ -840,6 +840,7 @@ } \newcommand{\addIndexBold}[1]{\textbf{\index{\MakeLowercase{#1}} #1}} +\newcommand{\addIndexBI}[1]{\textbf\textit{{\index{\MakeLowercase{#1}} #1}}} \newcommand{\addIndexItalic}[1]{\textit{\index{\MakeLowercase{#1}} #1}} \newcommand{\addIndex}[1]{\index{\MakeLowercase{#1}} #1} @@ -1234,24 +1235,28 @@ \belowdisplayskip 1pt plus 2pt minus 1pt \abovedisplayshortskip -10pt \belowdisplayshortskip 1pt plus 2pt minus 1pt + \setlist{noitemsep,topsep=1pt,partopsep=0pt} } \newcommand{\smallverticalspacing}{ \abovedisplayskip 4pt plus 3pt minus 2pt \belowdisplayskip 5pt plus 5pt minus 2pt \abovedisplayshortskip -5pt \belowdisplayshortskip 3pt plus 4pt minus 2pt + \setlist{itemsep=2pt,topsep=2pt,partopsep=1pt} } \newcommand{\mediumverticalspacing}{ \abovedisplayskip 7pt plus 4pt minus 3pt \belowdisplayskip 9pt plus 6pt minus 3pt \abovedisplayshortskip 0pt \belowdisplayshortskip 5pt plus 4pt minus 2pt + \setlist{itemsep=4pt,topsep=4pt,partopsep=2pt} } \newcommand{\largeverticalspacing}{ \abovedisplayskip 13pt plus 3pt minus 1pt \belowdisplayskip 15pt plus 9pt minus 6pt \abovedisplayshortskip 5pt plus 2pt minus 3pt \belowdisplayshortskip 7pt plus 5pt minus 2pt + \setlist{itemsep=6pt,topsep=6pt,partopsep=2pt} } diff --git a/src/style/spacing.sty b/src/style/spacing.sty index 3a10022..fa39caf 100644 --- a/src/style/spacing.sty +++ b/src/style/spacing.sty @@ -3,22 +3,26 @@ \belowdisplayskip 1pt plus 2pt minus 1pt \abovedisplayshortskip -10pt \belowdisplayshortskip 1pt plus 2pt minus 1pt + \setlist{noitemsep,topsep=1pt,partopsep=0pt} } \newcommand{\smallverticalspacing}{ \abovedisplayskip 4pt plus 3pt minus 2pt \belowdisplayskip 5pt plus 5pt minus 2pt \abovedisplayshortskip -5pt \belowdisplayshortskip 3pt plus 4pt minus 2pt + \setlist{itemsep=2pt,topsep=2pt,partopsep=1pt} } \newcommand{\mediumverticalspacing}{ \abovedisplayskip 7pt plus 4pt minus 3pt \belowdisplayskip 9pt plus 6pt minus 3pt \abovedisplayshortskip 0pt \belowdisplayshortskip 5pt plus 4pt minus 2pt + \setlist{itemsep=4pt,topsep=4pt,partopsep=2pt} } \newcommand{\largeverticalspacing}{ \abovedisplayskip 13pt plus 3pt minus 1pt \belowdisplayskip 15pt plus 9pt minus 6pt \abovedisplayshortskip 5pt plus 2pt minus 3pt \belowdisplayshortskip 7pt plus 5pt minus 2pt + \setlist{itemsep=6pt,topsep=6pt,partopsep=2pt} } From 5012eb934d40c2aab5aff739fae2dae4dd1fec8e Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sat, 21 Feb 2026 18:06:09 +0100 Subject: [PATCH 25/32] [Core] Try to fix tocloft warning --- src/core.sty | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core.sty b/src/core.sty index 775efb8..d3ad696 100644 --- a/src/core.sty +++ b/src/core.sty @@ -1,4 +1,5 @@ % Package imports +\RequirePackage{tocloft} \RequirePackage[table, dvipsnames]{xcolor} \RequirePackage{amsmath} \RequirePackage{graphicx} @@ -12,10 +13,8 @@ \RequirePackage{lipsum} \RequirePackage{ulem} \RequirePackage{soul} -\RequirePackage{parskip} \RequirePackage{fancyhdr} \RequirePackage{lastpage} -\RequirePackage{tocloft} \RequirePackage{wasysym} \RequirePackage{wrapfig} \RequirePackage{multicol} @@ -26,6 +25,7 @@ \RequirePackage{pifont} \RequirePackage{xstring} \RequirePackage{etoolbox} +\RequirePackage{parskip} \newcounter{descriptorShadeStrength} \newcounter{shadeStrength} From 4bfd6107b7ffb5c4fb933b575452ce5a6a40e3ab Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sat, 21 Feb 2026 18:07:50 +0100 Subject: [PATCH 26/32] [Core] tocloft warning fixed --- janishutz-helpers.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/janishutz-helpers.tex b/janishutz-helpers.tex index 286d449..dc9907c 100644 --- a/janishutz-helpers.tex +++ b/janishutz-helpers.tex @@ -13,6 +13,7 @@ % Package imports +\usepackage{tocloft} \usepackage[table, dvipsnames]{xcolor} \usepackage{amsmath} \usepackage{graphicx} @@ -26,10 +27,8 @@ \usepackage{lipsum} \usepackage{ulem} \usepackage{soul} -\usepackage{parskip} \usepackage{fancyhdr} \usepackage{lastpage} -\usepackage{tocloft} \usepackage{wasysym} \usepackage{wrapfig} \usepackage{multicol} @@ -40,6 +39,7 @@ \usepackage{pifont} \usepackage{xstring} \usepackage{etoolbox} +\usepackage{parskip} \newcounter{descriptorShadeStrength} \newcounter{shadeStrength} From 2f12f17c4e72f6ffaa409dbc177a5ebdcd78c72e Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sun, 22 Feb 2026 08:41:44 +0100 Subject: [PATCH 27/32] [Docs] Start migration guide --- config/naming.sty | 4 ++-- docs/parts/migration.tex | 7 +++++++ docs/parts/migration/00_intro.tex | 0 janishutz-helpers.tex | 5 +++-- src/core.sty | 1 + 5 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 docs/parts/migration.tex delete mode 100644 docs/parts/migration/00_intro.tex diff --git a/config/naming.sty b/config/naming.sty index 2e16085..5fe772b 100644 --- a/config/naming.sty +++ b/config/naming.sty @@ -59,7 +59,7 @@ \newcommand{\taskShortNamingEN}{Task} \newcommand{\usageShortNamingEN}{Usage} \newcommand{\recallShortNamingEN}{Recall} -\newcommand{\propertiesShortNamingEN}{Prop.} +\newcommand{\propertiesShortNamingEN}{P} \newcommand{\definitionShortNamingDE}{D} \newcommand{\theoremShortNamingDE}{T} @@ -78,4 +78,4 @@ \newcommand{\taskShortNamingDE}{Aufg.} \newcommand{\usageShortNamingDE}{Nutz.} \newcommand{\recallShortNamingDE}{Rep.} -\newcommand{\propertiesShortNamingDE}{Eig.} +\newcommand{\propertiesShortNamingDE}{E} diff --git a/docs/parts/migration.tex b/docs/parts/migration.tex new file mode 100644 index 0000000..c3d257a --- /dev/null +++ b/docs/parts/migration.tex @@ -0,0 +1,7 @@ +\section{Migration von janishutz-helpers V1.X} +Please be aware that this section might be missing some details + +\begin{enumerate} + \item Update the import path to \texttt{/path/to/helpers/janishutz-helpers.tex} + \item Remove \verb|\usetcolorboxes| if it was used (now integrated into \verb|\startDocument|) +\end{enumerate} diff --git a/docs/parts/migration/00_intro.tex b/docs/parts/migration/00_intro.tex deleted file mode 100644 index e69de29..0000000 diff --git a/janishutz-helpers.tex b/janishutz-helpers.tex index dc9907c..5693743 100644 --- a/janishutz-helpers.tex +++ b/janishutz-helpers.tex @@ -39,6 +39,7 @@ \usepackage{pifont} \usepackage{xstring} \usepackage{etoolbox} +\usepackage{makecell} \usepackage{parskip} \newcounter{descriptorShadeStrength} @@ -219,7 +220,7 @@ \newcommand{\taskShortNamingEN}{Task} \newcommand{\usageShortNamingEN}{Usage} \newcommand{\recallShortNamingEN}{Recall} -\newcommand{\propertiesShortNamingEN}{Prop.} +\newcommand{\propertiesShortNamingEN}{P} \newcommand{\definitionShortNamingDE}{D} \newcommand{\theoremShortNamingDE}{T} @@ -238,7 +239,7 @@ \newcommand{\taskShortNamingDE}{Aufg.} \newcommand{\usageShortNamingDE}{Nutz.} \newcommand{\recallShortNamingDE}{Rep.} -\newcommand{\propertiesShortNamingDE}{Eig.} +\newcommand{\propertiesShortNamingDE}{E} \newcounter{definitionnone} diff --git a/src/core.sty b/src/core.sty index d3ad696..ed297b8 100644 --- a/src/core.sty +++ b/src/core.sty @@ -25,6 +25,7 @@ \RequirePackage{pifont} \RequirePackage{xstring} \RequirePackage{etoolbox} +\RequirePackage{makecell} \RequirePackage{parskip} \newcounter{descriptorShadeStrength} From d0541b4ce73d089ce1c33802b5c0b747d8a4ec51 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sun, 22 Feb 2026 10:16:09 +0100 Subject: [PATCH 28/32] [Docs] Finish migration guide --- docs/docs.pdf | Bin 319519 -> 322979 bytes docs/docs.tex | 1 + docs/parts/migration.tex | 25 +++++++++++++++++++-- docs/parts/reference/cs.tex | 1 + docs/parts/reference/math.tex | 2 ++ docs/parts/reference/style/descriptors.tex | 17 ++++++++------ docs/parts/reference/tables-index.tex | 8 +++---- 7 files changed, 41 insertions(+), 13 deletions(-) diff --git a/docs/docs.pdf b/docs/docs.pdf index d8299f5a57cd2dcd5d56194f4c5f5b75974877eb..0404d5238d871645cb6e1490036c2b07310295b7 100644 GIT binary patch delta 135259 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%0DseD*(VofNVLWOyb%&72vvIH0qL+I@UYix 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 delta 131764 zcmZ6yQ*b8E6R4dx$;P&A8ynlUZQFTc+qO5hjg4)4V_VB9O zQ>leSS$ZWiCcsgoYBkH8^J2=!FZS!EsmPtVv|^Q|&zP2f;pWBd#N~@z@gnz2mjY|$ ztSBO-CBv{9+z5Zy#&WRGh$V^ZnoOtO#;DYuWpt$Fi#|qtPSCJ0UdR+{t=Gbls?j88 zh^)eGJ{W6p=K^&+^4TZ%#yxLeK)@iS9e1^Ij4G4Hjc?!SrOR%wy@FV(Oz#IA83I&H zB^6)wC{Kf%0L~!xQY1;{8BFwNH$d==Jc=+E!w{#0vhioai3A__zL}|DOv#KXBy#9N zCZsv?gor@Ij=t9y(?r`=_mya=o*Xt5*Av_>k>8gU&ZXjXQeAHn5LgZo(#o+=-bX~nKs3*S~f{X9< zCgB<{miB*2svnBO*un0OF{VT#me0d@x&~Ev!T||EN(GXhl!-A!Pbu`WeCtGl#J5N- zN`y>EIYbyOD2p75@JCo`3P8BdQ1zg1A$*0%xhJxOV{*?V#cB9SUl{333qlul9#deHYIY9AF!p?otx&jTK*K?k)I6Xe7K0H3RQ@))Ps;MM@15Cbnh2Owo=w)DdD$s}Z8&|9b`)Nani9U!Wud5NLt z^N%6$Y<%-YQWb(Fl+t{6rwxyJDEntt%msNT%V(iHp+4w%#KJ4dF{@qIul}9R+5RAB z^s=P00WqQy{j&e$eSx7SYau6!>k7HTAgT#v$9QERw>SxQ3z87qK~r(iMJ~LvCmpiF z&+S@qR0Qs&^s)=jBWc7Yu!VLq6;DeASyxUtop{}zXTZlEMQ=7(%k7oa4;d)+5;(_ z#aSJoDx#M}{lEy#?vAl+u5N|N+C`a$l#?U-my;iErY|g8$Y?Z@x*(A5{nV|_rE$r~ z{m$B!aMs(%ks?j`nyx-N#)(#4d1=pK6w->u3p0IJ-V@%}wS3Y9m1ecO+OYOSn$%qn zg^rPilaJ3>NZ^N`=`;UAauvf>-qf%dFIGg(F6o?oIS`0^5)wdog~i8g9*=z?f)B|5 zjdLB_i9L{eJ(m4jM1ZmD>3G(i@}`-(jKcun^E19M`Wvcc#98ell3>?Gb42_Ii9qoL z#81ifVM*?n;c(7h6VqPxl)o<$=GUyV4^Vp07~V0RoFH2I$WdNUBZwDTi|X6Hg@qKK z8S?s&TR=Tnj`h&drv|>K%ruTs0=btoA_1mVXn|F?-+w+zSbxV2Gdq0uK9qEl3`Zat z&oD+uj&nQv$53&y__YWSA`@@KP|9sL-^l*8YKHV(nv@bBVLtF}NC06P{W$Dkl4=%z zU2m*SI~L#Z<#*Vq)lF0R;G)+^Ztc9p>8Vc?{sLxX;5M%jH)rI3J<3~ZTDZD!!pdho zDeIK$eKLz(+jX-u-HR|eLl*BE!ARPJ{zdM&aZw3544fkJ$PCmv?)2jjT6TKx`?Aj( zK>CQ)?lkgj%}FDCx}j}sI`rSPLlBb0Ou-G3Smrr|JEq+`eY8B;#r*MKBs}XOVe!@G z`~y^*_Xid8^p_3ngMBw}8z#L(p4BA0Yo6Agg?I6x*>d%sXo0L`Ga=KB8h+bJR;6L3 zxH}1m{!S^^u8H25*;5erTx+F}n1bf+T<3&y^>=)No(o?-jka!qd0XtJD|?PXZ&XSj zHCW5d8a-A`+97o$#hYgc@ppS`%$k-UBLuo*)O%)HQBQ}`TU=Oc*Xl0xHIcROe#<)< zt@CH7v{$)BSJa+A?!`CL^x6v13G`=Uh-#c3t-n1!0B6?vD{e3sKZDy9ZEy}qC%_Te zu@s(G!{2*%WS*bsOw-XI$rs(06K(l-B=EhOqLLn-WDllBP5ClK1Z1swe>171y) zEc<1(Vf890{jo5K<50h22l~##io2dL_26S1=sRg6tbmYC7g2|WJSkt4jFP}lK~~XY zH-3*Z2kFfl-GzT5>A|~5$X}U3AGH0a!{7xTR~ywh&D6-32#?St?j3~!ZUJF_MbeiS zkSkDa1z>-_e|c4jBqqx|{zl;BhGCR7v$t@yBw}IZP8Ry6{;!1VIc#!a_`THanZVkT z>nne1ga6u)U8J9z!H_ba%j7_`ucpYOa5tRXcJ=?tqn%7KlWARS@0X<%6j4TTyWamI znN}8;+z%xtmpsUy0OyQt4eC~85fKu`b^s@^QkJHoY-Sg-q-HsGQi+^WSy{|v`aRTw zKH4Q~N@h!;1hlBQV`3e|v6{nf5yuZ{p@Aw^1e>)q!WWDcvoo9JS^{7yYt{k6fIQ393KfJOAZP=jd1Eg!T;0YvHbl{WlD&ANH^t4i5_6_nZ<_BxP;EkH&*e$$L z97&s9|0N!J;M+=mQpy-Yq8UG-Hj#}C1+dQ_ykI4>`7raQ{p~k{Y9&MSL|h5+rr)J~ z!fhn@wNiAlQ>e-=E@-P^rX}95GtmIQUN8|{2R!)DMj;Vx>>ZbEM#~1#lok#%U)8Xc zwadB2$9r5zp8PiC>O_Ks1ih-Fame-W84pD{+kds@!DR3Iy9!nl@^#`6sCV0BD;pSov-BqA9wNoAcv+oxZFs$t>=Rit4;Cm#B z0B)+b0mZ)_E88(K5ao8jZ0`JVF|uaInvgG$IuPolh7)LU2M+e5=ifXN9(>3&hdw<< z9m*K(qkY+sZUmm{$~vef?*|skdmgV$ef^U#`(<~(UCCy=+usg1fysF{!7T~~+9U5u zmyGJXd&J*AT6aGh^*%u`Ksui347 zzTUMd0Q2(|){B<8 zZNNJZC1Gv?3yrNy>&=-X@MX6)5_x%7_#u{Ow>wU6%f`nU_)ILp zd+Eu06wxOg7w{(b?(F*;!tKs7D?M21A9LURzhHL^;58Uo-+}S4*uY3gG&3d`gSl?b zSozSa>tnl0gf`|qukfkvW5+8VK;{fn*Eb>a=sh8Na;@cBv6ufUt%eic5ob)PNPnaV z*ak4a5cZFJ{mQa|9lSIFw_+Uy8qw!PDFOd+C)O!CDS_6+c@B#P(#IdV;YkQ+H{LN-CI2l2^-5hIJkoMI2_u0}R9# zJlz$h4=o5GSGKmB2?|B9&n8gxZyO91^d`J^VTWoe*@TD3SFMk8Da}pBuQqU@w$VcXLpBdj}%>E**g8GTXjWS&v?E^xs8xQziEXfygZ=-REDRgYDI{#(ZP?Lj-rAK$Gx z1!qOIwefQ;={Xs^0+~e52Cgx?$IPvGSm(ix${$TKwWbjB% zC;k21TL5{Y)1xhteAulU1b0=V!kPz;B@iM);UjM60G#NhVu<*xCZ3!&AnO42so}hG#O5L zbzA{k07nWE4!yNy!@=zSGiafy^*i4%ceS_rkYhbZYP~O=pHKnftz-j9`X{+p8ga4* z^S6oeX{cvivvdM$=ybj43R&}Vq_S^SR??JHU-J4GXvW#a{y&%Z%e{h>1b$lhguIeI zyuO1ziF7fb6YG~p*7rOie0h4)!R(Q*?-y1{Z!G3p!mW``(Xb>VOJr)`K3EG)gZ6Ij z%1FH=&XRS}nOfgphpq~BXHn{kT<%m%*b{M!NYd|ow%lJvEZMh(HdiRp`eSA)yizr#V+*!mP1n}W{Qd|7Hr6$1&Ujlt+Sw+aztK8;h$SkB z3r{l|Y+*1ez)+QJ${tU9X_}RLrKexSK^-vd5sO--Um)iIO zH^j6G1S16GuWG4j>|@)iX&B-7s?CN^hWDPbtF=^F>n&@kWmmPTT~%#pxP?lf6R3Hr z?koL2hpIsp^t`HD)zESpUNer8e4eqmX_S=+70FBAIf39l5mNbdcdOXElhGS}Ey+}@ zXW^NIL1fU4*I2xz9d1n^BEn~8&~xNbycXz!b8BMAjsSG<)Ga%{kM%=jnz7st2S7O~H_Y>w>Yo(it6PH5%qui7? zi!URt5V;?-M9_`sGj5C=05|Fm?s}DHu=CmTS&n6o6dhD|+`QjQ9V(hQyXu_(C^vo; z`1K}2SFN6~3K#U-R&ja)<5j=1--?_!v|54JW<(L?5{~GGQn%$Lt)uoOM=t5qm$nPur^r@ddpU<_mR#Wh2DpMy@Zo@M*rWL% zY`j&HROv8WH#ORSciwCdn!?o{w4dxEr--tDfodbwyB8D^6YmS`f@$AuT-PU}D)Kv3 zzi1U&-fSRcA77`UqU{J0{e(1PLL3C)#(o*-9s<_t7Q65?!qPSi96q>9n+P0jgXk9= zrE)~!LXS$0H*rPOB|3l?Lc@$`*KW=rKYEebwJm?KEF-@d7r2`aveuMuIOXYPQssl} z;Zoq?tMMQOxP_ilk9O2437%JMlWrO8O^b7y>`|9DAr4OHO<+2ab6jn57@u(J(Xi4Mc1ck`{F=6k>lkb-DGtfLkuo zO$?pM1wIHqmsu^{Y&6h7`G^!#)T4#c5+R6JR9I#cLI~d!yoUQaA|AJJl_vdV4_rkg z88GUGVsI*hvS;fu+b!5(SbL&T!p`U}mjbT3gO&P2Wxg;V?#6Lcm$J!gl907Y-S@1U zqvm0G;n}%hXGO2EWNX_OZ1s_X{WXcGe-{r+6n%9tmF?vf8rA5H7<<8!wM~{ZH+mkE z%4o8azz#YXYe(RoIyIMR|4sH(J5|Y{3opVqF&R~xU@M?Y7L${lmD(Cs&Vj&ZCk0g4 zzt&y8wpoP}_zsn^hP;Rrfy~KNSY28%aKNsxs`2E2Cq~DZik>-cGj&0cNbl+nR0d82 z3EdQQt(dHG@BRiOt|;%!GY28^O~yq(R@;6Kq;gD=!8X#FtN{I&_iqB?b7KgpqcSK? zg!>Z8J6^?xLH8a}$Xf;JWa%V;uN6q@yLRNJmFlJ8?}SLzwWEehB0xQ;#3C28Zfmy{ z*a}o^snw+GGkQ8Z zn+CX*PU4mNGf6LRk#8sH@SBPVv8SBtoJkM47~~&Mr9P{7RcjKfhqe0LFRsvDFJCMCNa zs-2{svub$7y>AUZX%+qD2QM%qCcXQdxpXDxAlh;x6{H*Jft{xanCCQG!?*tj-C`xN zs}J&?)p9ZnT&<)0ULMX8?X6U}RNMcpId+RQSo@D~wK+VUp?){@7h52y+8b9$ecRKy z?&Wi8HfYF1r{d+<)EmZ{?0}mJ=8B-wBce&INC%NvMc42uK0E0Oexj(Chzi@1l6c&o z!!1Gx()Iv}LxI=6+kb@gp<0NDvl{+*JFX@>zc^F7p#l_F#wONcf^W|lZ4r7& zdFth1HAZ!r@nyA2Y>fJwYVfMcCFmAhmz>FL;Up>6uRNWc%*-pakgfTqvZy#0_K_)B zCHAB=@+Pd~jhUb4gJDg1d&(?eRYlFHsmbi#VB@$=sI!fuBRhx1np+10PE(p5k=k#_ zd83$xxh(OY2p;W2f_uSmDpdg{6j}?Whsok`#UvQ3m<1vxNrS_HBVHTM>Le|x>`|gt z4#!k5ka0qvY{MWJEmQI?mc;tw*$cvISz1A^^9E&AH(JEOL4${^i6>o*`;L1t$Duc! zV;7s-*34WX!`L>XdCGJs2mm|K5J-6)Hr~n~(T=(Kj`G!*K#t3Dn^_aNm&Z=OUR8lG zsDEmlpAQ*<#av-mP69pS3A}lYs}2-~q-pK*_40$Z;>9c;y+pch%h1ZlAko-ZS( zVyJP~ODra-L?#?+GsJW7&nf}MA9Y2oTWenS18|ry*906j_0>ux`2LafZU_J~5S%(1 z$)mwsr>V-haYw~DmPF+rk;$pMRvh`W(C@6>?O*icJiDv&&pUXp+_dTs4a0R6&^`Tp z41tK`xsLIEuLms)LB?c{^p#B6o9_zPq0-}F8;Y>vOtDKI@v|iu;e(X{s`d0$%fI$c zB;idonwLGViuTg%lujzN;?wA1(rqCDaxgxHt4uz^5x%dZ=|hkJPGEt9$Q~<2sh#0B z_oG{Y_GwU$Lo`F$+{{9MDww0xVX67FDj~;`ovMPNNbHeMHZ22(-d{YMD_`M+ba9Qd zs{@5c_ao_^?NUpZ2NwU6aBAg)K6Q45dK!9@*FYAD{3cElSHGw)Z2~1_6{s!;1Y;*T z3Tf)l9|LQslTwb2A7D0!IwUN1#=&BRQ&I>ljz~BbxqLMmFp}9cDWwopUA6= zwyMhO>)1P)7jlsPuBUD4j`8*;zh6qcy7s*hcsYR?TDMoqdgbN)aTv*; z3HSwV326}wy&^vMF@kz1D9Xs%2mhz>aDhG#^jpPk!-i7J%KA1;{?@@;K7oZV+(>2c zzg?7^#%ZTvh?6gZo~#aYfDA}{00E7+h$M!vH-wp8!kHF z0D>^1v#?QiGI>AeFcboAhnL8`@(sBr?oDLn2XwGO8|r_lGyM(vzi<&e05br<)#io| z-~uBc`6i2VOwl|xk|GFtxDID>8p5=fA>)Jpa(M9@T=`!VC=e zA+!lyP6i`EFE+5-7rsf2C@{qe$ePVuVuhv{!tLgg?_HJ4j<(Okg*uSS$$IM_|O zRp&eJz3cr|j%u37u&UnJTunzDO;QpGvP`#r!8O}G#mM=z8)oY2#Qn}oA{YpEucj3g z5f^02-uWI8OdZpMz+{|=U{8MxLq$HAG;m{f>;L!x)do1?B?1={p5q7t3X=$tP(}*+ z@)Czc-L|#s%jTi~QOi;IgJA2(M2wU6{Et3e{@XiIy>iG8IbP@(_hEl`DU`I+-LO6U zkwK2b?YEnP*0mI-zvnM!&p}^VHP7T&DNT$wm{F+=+-vs62=*#|e<3OdDd~O@u8c$~ zG-ih}#FV`+seqAHDGk&>pwnw0(|4`N8!heJCX363k1t3Y9}a>048pwUAUERf7;XI2 zmS-)@;soDJ)I!r1>I9uli1!NZQYSLa@<)~=S% zNvN6WX$w0L@=LVRaR+v=%Q)F5JPQLNR_8{2IX%_O6+x2@H*_8k=*BSE0iw;>NUO0^ zDe6qImc*vRPi39m@=+_BaAgd!|MEA`3xtC}ULk;<4@M^>gA2cv^Q@Yo>8&VkvawxG zz@af)|CsTz0?DXb_FRl!^l2bBJu() z0@L_XBKB56X@VC7gmMlSCP~7eu0A@Gy7nm`V?Kz|N?CGBAqihdQ%(>P9I&TEe-W${ zVtAV4f)1oYBMR<@b{rgXB!L>l@;8iLt>lthTwkoh%sV}Ul=Zyk>}$XG;u4`gr&@th zCknRbfvLYSL{Ngn_1%>7=dUIo*!wk1V--~akk-d@4JP0N)^WCcIAybs$X!knbZKSA z8!MZsXrSLQ>C~iaEjVY>)t$3Fk9TIg`F?t#WXkqjkzF80Vy8Y=Trrol zWN&B7HRmhGPp^*uSan-PX-;n;*T)y3Mm_J<vuo`)tPG3176J{d>Dx zh0Em?cX>rrP^gDymU|+X=9aXP@1?}Ku5N85&g-!y-#kDM$9v3iQ6gghlXgtVrZ_<6iZU*aM-!hzTsY?Cyg$JKh^ zQhq=h2*&Un{n+xN+{Ay`ATH`0-cy%%Z+{toWes1x|7!MTixk4dNZ({$?gJ&*1EOdk zX_j^)td4?a^hKXw#|1CZx={^DtYepjI&}kCmskj^A6oDQPmv%O`RZ`%EuTUp1=$R? zZtMQ7l67hbYDsSfwb%7Ev2p+?L}50wUMctMAPThV*nES+9UVu}~SarA(SDK`q$p9-A#zp`XAE|gtgH|Y!`gDv;lPg}h= z7b81)z~VXWdoX+NcAhwbp`tLA6`-m^*1*QX@ILE!Ou}x_M6LB9%Qk~=J^-*dc&wv= z=htf#!iG@}M37597wx_oj=nbMqwUpAo*gC@`&ZRHxi28ZbMN~Vc8`?!&!%%?5+sK8 z#nw;_L-REK2RzSPTJ`&4#Zb^yS?rX131fpQLJpIea?x4$g=MdVA^+Z8d6eamO?T8+ z{1&iDaX?HZlfL)NGK8cdifv+uDDl{U93d0|+YXoXj7+)eV@E+nU6rkf!}ihVnwQRw z%qpWInS*a<;qzxKdZk`^%TD)akghmzZVMTLo9P*J-_YH^7M};U*OIu%Kc5Q78&Z>q z=~uo-ru@p|7KE0NdbIouu^Ox`qtQ#|8S7p}cgIfEuDGObmE&63we{>Ak)u$VBZX&)kyQ>#j zcCQ0^0~rtu+(#iAdSCh6RkZDDb>duak-9G?a!o3nj;J}Wdw^;MHObMKCYHks7tW~Z z26#{@ug>YlG&Oug=SWNr-(&>{Tel{VbV?sZKVXw1Czk)GLUOXU-BJOh0Kh%NYsK@o z=RdfoY7N_?UdpkOqb+zigM->M7tPY>U$7bW*%uTq=@3(7jh4~YQF+m^nr}$$i!Px%Jxk)6b?$Z9@&pB>ZEoCXodX|zApoAe1;NG zp7(mMhpCB{x}{LS6akHLxt-E=`e;-}($@lH!f-qShdYRNsOZr3{6Wx>Np2h8=OI)wg+b}(KH=Xw; zvGc)in9gIdoDuBj-BfKbf7#C1tji!>B~m*v=GBe~@M*g0n+N)sR5Wus=5OwZa3t zKE2DC#;(v)S#Gm3D1*e45e4u$lX21`g?TdIC`U>M54R-yswM=Z`c+C3mJaPzLfU_n z^3lSct%d*k5}CTI{_T&3Y%fjdFs>B;gO5y4x@Dpcc^hH*mI*8}BNoMZR4UreBh|JF zHVJ|ck{W149>6Jl1{d6Sgb-E&En*A|d>oh~YKL~46Y3)&4P6GHpB|7v=NhFJ`~Ct| zFEjC#Q>i)C?QFO+Z;QKGdjTkhNW%2A20_1g4pRY$S>S>2Sr6V-*X-Z zaFz&9zFIu3FKvWG?%C{pn)_qM*-Z+Bnz-#b2_sc?|N=nsQc`r&m*`8>xPcqu^-c9>v(zigK1q=AB(iylU$p53Bl6|y(7IiE; z|NdKnpzu|GEW_J!k@ro&QO3j!{W@3$LJd1bEr^P%rh4J!1A_Wx{^QR^(%qw@ZphY( z5|P{2cO($4(PZZa3k)v))#>U@JZi zJWop5x8PU!{*B)$jPo;c0t$}N-$TKzDXL+?%^9p==NMQhd5#rXBpfKZNjFFbvfrhgIKky)2E-u$ zhpYssy@aL;3vyu~{56V4n3HZ^WOKTamjSe(+CgUc;;jmr&_ zTrf}(qpuHfmD2WcwfZ|y9PXyZ#-#!inSx~M?XzECtgVHr*|)b*U?aMbC`hm;c99Ri zyiYlfNUHo|j{@Y!E3%;XODv7$?}z9tYup7w9TZxD1vX_=zZHdSpDRjYU0d0iE{qpBjTQL+jmfE}U4 zPF3!aS<14l^HVN)PAsuxR{(l@_zh?skDn2(K`>2SSF2CV!=h_|ZdIDMVwIVP+bUq> z`^6O*|2h_Dzf~)j&$>vS-VFjfqhZZ7KDQ=_S4C4i`Ea4>q3nvduQw@x|a?K{vV2EMR0 z&o)blXPpSNYj*z9K-S%xFCvJ(CX9i_ENRC3BWvJAw-ULqROYeuvB=F)A=gQOI$6^`vdbBRYimRxClR;U%#N3O| zP-$?!@9CFzwGXpIeui2sQq+v%jx*R!&l(OHk}M?e@$IOt5u#a|E=2sH8H$iXSPli< zKyxa}!#LMTBvTVeH)~KUXuzq6^6QvmM5jN0>P@(>0j%5K4-4>-kZ z@_WM>+~k*{*N#kjJ_PQ}I~XX^E*^FKCYeA}33>L(Y!#wUSEP4Z#M3Cud7l7LCm+kE z3CokH!p+N)`HOyEc68TV)i#qvHl3RbR~OGlQvR-Uad6wRZmb>5{cjr?{)7&PiDQmD zpGNP1PL(Hu)!X}z5|_$vQYQgIgFKy|cOAqAp- zyR`nhdXz&r!a9O1sxy&L8(RwOd3k8t>4LklJ zNP@HWhbx}$5wI@1G-$x>bxtje{f4u-}!TI1!a)c+0CpR}G(3aVr5B^gH;nGKwronT?)BE!NulwjggG#aS;~t76jy>B@ooZ%QR)T-$ z`8V}LHg^S;m$$+7p)yeTpVF6K!KwFs6I^t31c>v)y6f5pZwkcFPCpP}xf}I=UXAHO ze*e)JS2h3}02mpmTT5l;^xCTLjN?BZb6iIL@W^duOhgQ`fJsDB6$mSFfL}aMjbOWY zs9SqL1+%Nfz@X3P!%qAxLmRnz%x@4hWnDh96z$x%ZFalc%Z%HVn5^6ZzctOsh#_yS zVR_h+`fXlvk>_T(EORmIYCb{Rau`&#nA|bqaO8EjDBn%V0l1u$T}G zX*;@q0_b40O$H$##MDbnA`ThyCx8&?(yiXpdrSYzFIO3qO0B*?RPk2~Yx_MH;N@H} zWr%@of6rVbqb%k;0EM1A{U1KvN;TyiU?rfGIwV@Mfgq}xO%xZO9LyAa1gXdSp0EF| z-rW<*#$&=;aZFC3)2!WMKqNqU><{ERm^Tc)KF|YyNJq7x5f(#Z;2;+LDN+@%Kog6K zOpe6Sp;*DBi~RO8^zk%Mc{v=tVIyNVf|j66qDfs9Q6jm}N%M>PF>I;!KDxS2t;-c` z-gJaLy#Bt!Kd6o5v$@U#p&dfNN*c0ep_6*i+u$g9W?NrklzRi^)q4@v=(wc*eE62) z7Wm`*!Q&)rasDT;=EDVnPYNa|QQtVscGfFC!&vOzZ*bghfG86l;xo+~WJR772*#o*S}eq63D{#o;R=f>@gYh`GQ?pE z1alP(u*4QQIC3cR+?Ck-~Cpvc@;0zZEkwD@>~Zm7fW`QjU!?m@1DQ1^|_ru~a~U{pF(Mi=*T_vnz8$h^MT1zowej{ksD)F3Iuw#*F!zZxM9Cg3pabDS%HQU=}u)7lf?6*5t zr2%&@3O)+B%9l4?4MvU9^TZ2vh(GIuZ6Vbs-9z=(9Km0BAlLK>{AEot1e`Eghg3w< zRr8dri3T~^8zsX9Q>!hY<4rr6@LVdpkI=7l@2T`4D0NPVtz0?&4(4g&aTP_0eM0r% zLm%7uKzn=uT`Fvc^C)98P~hgW0N-K=Li+n;CxVcmPNv3rh@}$XPqHs6q~QS@`Zw%= z>^n=iT9WSR&~nWsM`-^D4>*5W58I)PVkMpAC=h+W(PiD@AN*`J;oT?S1kLlWg;(*a zlM8Rb_pnTvmcUAw{E1+1`c8Cp<>X66y+8)o=_3r@1LMk%fBJGJ++Wj#PcXc-4WU}B zgv^7tismemQFA-I{8| z)t`we$-1LEKT61$*)fqT7&3s9uR~aIceou>y%x**xG1#joG0Zqp%}V|3IENa^k*SCy-w+t0_D^{Lewy?aT3=${IWyBHr_E$lE14Zn_wyM#)!F3j%!#EFoP1B zV`($cazCF-ooG4yS$6S0aVImOfS(7uJP7$Y37I(Ctnf;!?yZS?ZL`;@+1n3`>phN5 zKFoYwn8oW~=0rTV(F-nNon&oUKQP#8%KTi9$0M;Cg3B5JU|(?CI?{(G2hpV+VCq?9$Jwk zMKTG9G1ne4uI#DdKPJ(m5W~Mp%UJDfp=-C?^w`XfjWkN{JUG1j?-y+0!UDFM|M-y` zoVYhm|<%OcF z)Y#G)zs+Wg?}OlRj7m;jOe;g-TkGE;942y)=vcZU_@Oh&0gmW~SG->;g^_V@Az_IT z0gi*{5ez3D|0pTo@P1Ol_P8YF3B-zdrncGS5n1cZ0D7t+Cp=3mcd=3CqErYKm---H3iE#A%seWy&1i%h27zH2xRD~7pPXTufb!K>WB53zT{UAOUTL+lNU z|6gmB6RRE%DcmT@2sDMxqgq|~5WCo`5nV3M|?*wjs_SC+HCoEk(_$Xra{HLq=e46ld4mUu{gZ~wQfDjsQ zr?|af_XfJz)vCpZ-OjTW!V!V}v)O!4g`$7Zi|q`Ku*9NmnT(%je5t>ZcaqPnioPtf z=~G;u*r5~TmcMW+E|naof-b20CH!U(a8rDw#+@EIFAd~<_=wG3vAmZG z65+NP;Jwy`Aw0->TLw^u;PUigW1ZB%2YVO^8;S@KwrR(vhX|w^63W* zww5~Z|G+$MmjB!CV&hCVngyo;YHvFK=f3%!Y7{suG>d}Jfq;5hv&t=um*n0JBj!?g z8Io-*h_*?(GJL%=Fpv>zIV;P|)Yn?rChHS`SOjj55R-{BK$FfkQJ$_BTMQz})L>-g z7$8|ynrES@E9+1>^HbD8_A!KaFa^(>XMpt+d0=vTa{KyxgX&<4lA^@`ZQuoC>qQkQ z#4JB#MD1dQ1}u{(D_p`!qG%LnX3X&3tc(?=fDk0f)~)wbRZpW}1KQT@!mGTOVjUUc zGkto?Kpx5GN8XPFCsC$B9t-Z{(WH4^pRcq;W_}+btY0>NDdTfUl~u|BHx@@~?r9Bm z@&ya3PPh@gmFAPg_n&A$^IEu^(f?+a)|M_B^B6D(&}y9(6{-v?c9;;BE8^_w7~S*Y z%L(dhF=~H)^KPrU@#*Q>6L1pTyu;>bBhBn0g6nz7cMD{CXcf-RT;?g(mfA$s9v<_J z6Vxy;`V*w)kob$R$dixFI9icGnmOfZqe9ZKwFNw+Zopw~A<4%AA?8A4Xi|{%AZv_5 zYOspam{a?84d8rKswL}ZOshFqu!-1z5fsmHXlCD;S2ma}!_On#REWYpuQZU?qf^?G(Y8TBp&K*nK?Y_8mKhI1+^{RtRd_~QZxuYEB$1=J zfP@jPQ>Saa8J+xD$xp2WdQG@9-pI2d?s53E98D(*IV&iQsmgPgFD`Z3Jhqdxw-wD} zqLuu<=M?@`5Z${Z&pWCaU!@81)V~y%8S-LyxmT4@ShFxdoAT0XDo|+%v=Uo=ME)D> z98$6Bl_X~ZNK7B`IaORoU+txMP5w}e!ApjZSmc>Mrg zC5H8LvJTV8@GtCXb-!wh?6zvCkYbIhPRN(ALn4H}Az>OC9OdF|zwvGebyW>5SQ!)i zGT%274O0m)0mHmkBGy4SvDuEn5fYsXmm4D2`lZ80>BZ^aOC96DZyn=z&kr`V$Cgd+ z=z&*jRYou>aO;58WR@MZds0iAve{f+Et3c~>G$k83bR|eTNjDL;ZXJpjDI}}@ppXlnVxs@9 z-P!;+J-J@JEXr$Hboi(!d;rCl0{$q(SK?F{+TKDWJWzTRO!Qt>h4{>2Mp&1VnVjMm z%2*$ICb2%IkM`G}s;FZVSH3QSPVJJI^I9I6nqJZ6ez61sL*L$2KpAWsMT`(F@gOKD zsF#*RX>Jgvi!?H1zz-!vk_ZU0fOJ;Pqc8<6TV_ z`(U+#+mF9A$rQiUh=~1`o_)YQ$`4rwF)K5P#a+)MXT`mex ziy?HIpB!}BF|<`aQhRZQTB-gz2Sv=%SsE=|Qa+L-^@A+3-;gAu&ewh=z;~;cZZ&`lR)W*;=!G)b|ELpoW?9Ug`+*e-H)c#9 zkN}`!F>w$v5&h4W=H>nW4J%ewX0HEP(rt4(0B8UJIekMHFa?C^&VyqfhDL^`24_ob zh?+d6F<$iS@NVz0tQLK!P48W)i>01?HJem2+cZb~qlT}yY~zw5>%Xo!P}N&4G*5TY zM~*d_E4i|OQqvrNv`YiE(54o#qy%ODYyNWoH6CTd*WUjFiN8P?A**5!y)A_G8l45H zc>3q~rfIWEZygw3Z5Curp*0IxeZH(&Z~j-@2aQs^OPagra&g+KS++6DQqCj+lQh9Y zL-BGt{m*3IRGI$MvK|{uBbbG-h%gKxc?s4;Y(NPbKkYx8G#4mH67r_jAUv`T(@H%5 zJT+1)b~05NEl{Dz5ZQ{3M20}-J8mPGV`%9oA3x}ki4!1s1jaFrFjx}ufYUP6Ot zuL_Kwj=#7Pm788H!vmii6UZx}Z89cy;uMs+H%j3`c7#xIri*ev)^Nwto{$*TGDRB; zz%HKzCr2>2pFm+IphXJJlh6dA;0Yt(9#zlDxVo?K$KJLNjH@iGY(*6+y27VOuK?CO1+mQ+vVxfb_%L``|1S-`w z-dAX6VyA0G3y!71i)pddq)q1p)m2A5M3?ds7gC|pYDM9$#y4=Io8aLU+tG*>Q#OL( z?P~S9$42n$FnYkuNr-pDbJ`_NBT&z-|8oICZ59m*v=Sosq{%h0RKv&HLexX4DPEFK zfZ{NrBpvM?`QaUZKu7DVhL$Spw7W4>{=`kJsU&MPv?MQWEk$F#%AnXeACXZ?O>y*+ z_5%fa;0bdAtG`LC82~UCO1lW$i zD-;A2A^GC`e`LK=cp$+REgaj>dt%$kq+{E*ZQC{`=ES!1=bZE3`*QoG zANuS1YFBslu3oj)+9-&=e4FA-kR<9vrd4B3&+B*)S>QVOidO29%iY-tX|n4)%NQ$v?y^7FDF0 zW~qRUWAwjSk~TBJ8}9vw!qC`6NoQ24;0LN#op8e6_jyL-1JfIB3{$$fNzA7x5Pm8b zZR_*;Y9uw`&#{Kfy#&HOw|0REua1#=DkBAc&QnA5i2ZR#Cm`%zk)H(GE%?1XWUkq0 z(hy4BQom;#jOhmYggXkQB(3D$@9r+PIF17fGorGntd(zs;BIlGEi5<{(e|}uoC8m6 zOgvW)zy6&=I0V4;#eBZ6=2mzU;Jp39R0-97onbTB3l?Vo@K~^0s%0XJ)wbVfIeiyZbw5?P9v$_bm>7XiQ^rqDhTPs_@MEH%pP_Ld?+$%E&#v|#8{YVo zpXR^3iA4pY|GJEQ#ZvJ06^rO|d+mD{!)|nLy_hO)aqK0JfE(2)%gJ-=76PGzmvA8X zm=)#1`E$*F6{Ms=L~QK!4~(Bpu?cACBXO<)GGc@ zb=Tm1KCVs`k*x0CORlwb6%lXEMR(BoVG-Ms70GLyM?cuI+VsB{MrbDS;V4nDttlJ~ zk0sb@wB>CIy z<59k!-bji5v0f>ZxZdh$~aTm?T7-^bb^PM=w$Mq$o@b{BEZ+b44$l>Oca@4*=BV=yD1MymPBj z7HCI?wg6TaHs>jZ2VE@wGvW_oozsO6R66`N)!wMflP<4v1w=|}d3jLk)Q#7@d=Y~P z2hfNZS#^#Ei8)|Q-Iat;?4S5VMf!c3YQj(p@G04oyBaP`S$P{F zclN^x;LS_%y6*7@{7~n-R>hn2;JA=rN`UJ;X#Z!yl`XFZ4D3yGwm+cXjwiu?$+5T3v+V zdNgX@;JVcs(9-CTPf8;Q8gxW-oGR+)Tyu?q98{pbO93j9^m6)Zu5aiGdeu6Oy7F_S z57OB)K~k|9`5qlhD~)v3L3KVTkq^3k*6^Z{ojw|$9653s`VRC1y#Iy*t3213;f5CV z{QOpf09Gk>9aq3~aOYFM?%O>1+{m7-a+clW?2ns`d#--!f$ELhU zk#{c8xi=e=JRfGzY_b;MhYtMU`xE>(rkbF3W>7@WZ-2HKY9=IC`A9|}gNrL`>Vofa zxpN)p{#DohquYEO)@tlfwMqA}HubfC@FYK@s~bWMS>jS}J+^(t8PMnA3EdlTSt% zCZwA(R!<)sZksx7fW$F z5H(diWG%pr{EqkYT!?)`dJCBU6Rq!!weVW^N*pMBeL4Qg-}%m5&G+8)e%WT5sKvuZ zv}O;6cb;3ew8qI^XIq57-AC{JRhsB3A@d@B%$Q3;qY)aIInqFz!@3JC+Z1AAb^D|4}UTeg@bj*naifK)<7H3 z<$K~llnFpFoa!?7&gHdgDlJG74NNW!B8eEj+wY z87y;ZqGI1*>4Mh?`?-VVL_jElyHjpQT0!grybB&_`Sv84dv+-)>p+u7sZLmlmG;52 zatbKzeE7pivhLg{gp2ht$kWB6c&SnMJj*G^pK$uqi7`XgXhVLw_t9-%W8}ldTro;H zQ9>4Qlo$!#w4ejvGad-35U@}K1V(tbQ`pFz#!kFyfNC5`L=s)&NmM#@Sp|UZ@7}aA%zTsA$v_iE$s)+Mw~97 z$KW9;pyAu$`Rn$gpZW!1ha8&6U$W1bGTOVXJ;|*0;#o~-c97syBev=`g~~H&WPwt` zdNOLLf^b`N-9zkWfuPWetkXTUX$7t1oLPSN02BOvY{NlXomue``@6Oa>qZ`A1o}MQ zDtrdO4zEL|)X{?v?0p|cztTsqBYQ%-a*up>ZUzc>ayjSJ+iJJnNM9S~H&-_V-Q0+m zPJHH+=9pj^N!eEs$&rx)nTd({>o-p*32oG&=liLb5Q543T#ckoi_4R2kLQS70(^1wL!R*7uhJI3tRs1U0aJ+}mLcf8}Z0C|r^DDqrte5Px+RHMk zBJ=1G4o(2=*_K-huk`@?=3NI79Q%`oi=bklPtH-U{fA|bHIIIJlC}?uCkfWQqJ$Bk zr5?0FAb9XktnhqQ_fDx(j5^FluY5Nd_<&~$iHZYy)&qF$TpXR9o8nXk!(Ym57)Fd0Vr7?KjtIO03%mRJ2!`UPT%XjrVdRclG;DSN*~%L}trX@eQjP zKeZ~*K3q+fkE=3=4$9L#FN|Z+x_k;)LVSYri1e{pQmuFK9nR;aH_=?+m@J5s_I5wM zTzqbL>*`X;{4Ii{^K;}cBWJ%!^%#^6u^xx?wT%T9j<$ofFIj1Jf~i)q-CD+X7Nv*V zjPJ6`aUbFkxoElLSme;CBhQV8b`Pmg1n^;d`S~^hyDfY2_L^^d_wqN7lg4Yn6gEH~ zHaO{}%Tf8^%9Tz}Z@c<=BKhZi`G(=&^K)~sI4fLdNE1~$&k6>r5lP_%DIRLu*oqjD zhSm7D*bT=Rov6H+d1Q${m+U2%lU)mknD@7Q3jkv&3{9y-%>jB7*I(Z{Xyg5-5g%O} z*O>z(Tk`uRf!<{!R}`;stB?_3F$V2E_FgEj#|;D`8C|%WsP~qlcRmZ^QM$#!t#x|! z0{@1F3kx#cDnSt2m*i|N@nT2%bvT;H`8~U=wQTIMt_-_`wSE_l#bHf$P~F2b8dm#l z$N9d?&m-Q#%bta=8p-DP@eO2p8`^CMYsII-?`2ecG#&9V&N(FXm)tafhW`Bu@!?na ze#E-_F#Ogp!B@S5Z)`+)T%!D<%h|}5b-@$RGz{p5e+Q!)3&9bs%$U3_a9HPlV5pOlUJjNt zjFvPo(1wt;Gg&j(r3Ij;;iCc%xvUmBaM{X3~KGUjq$ z>0HhY%?L4B`#yei4}OCS)&~>(n+Q6pB9LQ#WzdZqPcQlW-&0!`z>~EZxzVR6s}y&x znKJCK;8P9L!RCHcupPZ4_Kf5@T^#gD!^lIr$qX`-h1vR-7-H(p zId^J4zYtkv>&!I^a1ezJHdJB_7SNft+0cibI?OGEFN(@+yG-8cFfrhz2FMp?Wp{6h z({%3 z9o3KF51zBMvnT?W@QQ-i*|)8M*M5AqgUS3MtA}+3P9lQ}AnE+Ji&z60egCxgtU2gF zkK%1MzAbh4u;sAez+dM27F_8qH&JQ=3Hed%?eX}BL67K;bMwzjtcW4j#uFTz|e?Fl{u-%^i zgBD^WBgcXwH1C;#N<(~|8LUCwAP5~4W3^WoH0NR+m%6J^%RWD3^>hO8Y(YMu)g&AP z{s%I$F#W$EBQyK|Kt|v^L)vjo9BugW4TIBKQDywPgQ%I)+i3Y;S)?IB6ZNQXE~OS` zm@;K)+*$D!p}t8QXe{yXpAJclr6UPxlUYOCpZ!kYq}M0E2FougwzA}PI}*F#Xw}Wj zZ^xyeOeRuZVdOu&N& ztG0KhS63@deYSMJ$~&cYaAm)-qi*-o_(Id9T;*zN%X`12s$pMkwuiA`dfj`TyCY^L z*_Us>s@&V({O$veA>dN{gIUaISx8t@aZFOV(_w!<-DRIHE_%S4yR*G(dCks8XLGEz z|MPI4RcAu`T|0-S5DHdia= z7p$lBH@$7WTh>@@>GRHSz22z;J6<#R8(X$)l24y5bZ!B;_xJbvRHu2pZ3IqE@CwOB zKJ1us)(L3oBHz#l(SiE7VwUcvDYT4lCfj$MRjJK+o@v^4|5znKi($Q|ijQ-<#6Z|I zW~>xst`nBaC-3jSWNo&Fx}R;`?XBIOB}o~<_fcGiZSH0y$(imjI5rX_^t&-r2lB$l zf<+?ahP< z8zIA{JXBwklN^MKE&(>ijtO?K08>b4ci|uqqYI7kQ))%Zj3P1_CkF>>aljD^EJo7` zWfb0|!R1?|KCCZKbZ=>)NMir__?gIMtAHi4zUL9e?0-a z5eV!UxVtxYwYB?|FY^;36!hJr^8Tgv4z=JxfbUI+K+|fp+BDDUfD!kL--h@~T2d}G zL+a|nVfHF`nRT1_vz~VTONnj5^(3MrI zlLhQ^<1G|mx+OX^2!t2t|~y!l*FP77iZmk`I`N&z2UBeit7X7l!06@?!KD!*S%K zqK-2`QV>eK?^;4<&V^?2HH`WVmbf+?U>AY6Vr)>mVxwCA{4m|AEedPzXhiVuwEEnU z11C+RkQrIb_DY4N`g6 zBn!PyoADTcRHI(%KXA05bVMmG4E=w*PRAW*hBPBoc+Up|*Ap`jR8VURoaqbNJu&&@ z_;@}s+6_8>2$6bo>8+nbk}geOq+n@tYb7h|<>vWiO}4wCN2@ARFd~Niz{FJVi1$-g zUQnVgGaz%yF&u-=FOFae{#8~|XYjIPc6@TKQ8Qms@EZ4iR&V&DAuqB9T@KT znFF8wY2UcA=8ty@q_RugZ+}w(CLra5Qte|4lXL`%C(` zCp`Ay+aS~9H*${)HYubZV&ZX=pv)yLx=V3VmSVKUAcz7ui1@Au-zc~FStAU4dDR)d z-l*q?MXQjPrgO)w24^HJh>JB2>)xY|Z45YMK-k4kv=}RZ1dj@1kV!-_ z&y@13bx1L^2~f(C3U9N408C{Z83-iqAeaPeB2-P0R7@8qob>TdK{J$R)K0O)_Ha{O z(gXu3w?j?N0n-n5yHIgVTU^|uUMVLFDoza2UQmKx{5X8Z5nNt6_-=06gmKzPSAt@Y zonrHv+DHcg2=v-0C^C;=5A+TTXmMIQO0&fX`P^1H!nNV*EuXz#(a+^RKb-#;_ox;=tIsfs5mr}n>r9&@C2fNtoYhtT#RSC z{_eBtV=5}`G#)f%CGu&(6d26p^aQiQ3-k42`OWG8X;7)uv&VBiIG5Tn^s@fc1=vXW zU*kO&7OQPK!}QO8_SaBKKNW2|niHJHM4i%uwn?0pw7jj|VB*^mjqH!PjW+6pk0{=);s46g|D;_iYFp+~x1 zr>}zzM|fK-9pJ*7vV^8c>lA7haZXOcMS?DCr~O?C>PMjH+$1PjN!t`Gn!^`ea}$S5 zp@r`!WlNdlvXH?ezb`^S7}eY2Bdj1-wVxu8=>fYWgIGxE+v}75g@v;>5+khq{7o5! z8-&I;ui(H*^)1c_X+|*cK5HfiYTjorG8a^3O$59nK%blSZ0mbWD2hFH!=Et%u;^NL zPPFxrGi6}WP!HJ8S@acoAC$i zd#I&W7p#zxc^QAV%Q|gE`N%*7J6hkxTf@2`;P*&4x0_#9&eGv0#1%z~)GFYA zGsFwt57}@Ei{fOZ%D_UBWd3Te?$V=Y+t$;+SL1F2_p}+Kraio1Qd4{D44xEKbRPaSaK}i*x zXgFsII3sSPQsgA7gjl<_IL<%+zAp&mZ}aX=U(WzJEVNHson9+E%p{3S;WBX@Ero1no@PXJSPYm|qt z*2w;P4DbBn-y@m^L6%FU2Uq3U(?YmXNM;Q1HONI^9byL`MaBI&8|$0UFUb^h=imcY zRz?H^?ac`N^@PzBYWXN}uGo3f0tt{GSzw`9t3N-TK7rli4^sb_1qTp_vQh@OmMvJ8 z0I(OU>|qIkj}X(>%;9-18FDmf?#Tc~#tI*_;^)Fd!_U4xBu3PnPM{g=fLPxdRxR!y z!`kaXGI~Oq)b-;XqV37#i*H14H_msb+mG;rOG2ln{63>kY@Ugj-v2H)!PwaU%Xb3j zWdEO0Ri(yS)PD$1k7`GXPzFJ2k_dhv)*iC{VAj}X;RVQ=>ALWV%jQuTJP@u~4>OE@yM4;?(A+=xfnKmq$J=OCz4GQ48&ZKL*i4N1f6PyLf+ zFQXsSnP?Jf(vg0rUdO9H6kdlXx&nz4+IoAeXG8={B*d!w)%b2PB%d0wKT^;)WmH8# z#*-{e^vkmX5pZY>N==8NuPFf{T)TzP?FcYj{=Ip4#MZNqp2+>+)r4OwJv9C);!M@H?GCTdi;wGGcQjL@)P- zSQ|7fF8JuuhxGKAOUf>|az0K1s5QHxlA30qYcd&lcqU(z>7W_fW+cv3`xP#bw9MME zl{)5z$g8fyZ&Ah^%&U_=E2hSrhfNu2)kE1!k0S#eSF!Tj(lF4s$lB_?o5PpW&*S@$ zrcIQ%uI5_%a8oDF76&9hUj1ZP#pu|sAC|ajm}p>)&C^VUWUQE`s)>N>w~V}r+Xjym z_#1`9;JOc@x14dOjR_qjA$voiM+I~?Kapy6}XJtH2y@0XE@v|D83^MC3Ekr zVO6gf?X;&o@AOZ@4M_bc8hhm^x6OS0jGC$d2qy$`Rb1Us8$J9*i(tqrt1auA7`4z`*-9gwKCU zhDv>{>H}08v91b^3pfLD+A|4Wa|wZmTIWz>o5v9x&88Em)so>&@wbA`+OeV%#ZD59 z$5YcL;f}@X0>-@WqNY2JOyAycd7Hd(3e1JSPZs=SC9gM6J3nL;_y!#jmolEi-0KpP z?994)V2nz^nCO<%y&7+Z7L8MwYdq}h8U$0Q?Rr6?$U{{&$p_7e6S8O@9UR6aV^4>>N>5D<9&8OUV2 zOWd8&uvq(PYWCs#_*q+uK1I0O>Z3XB?-JW0$x$%!2Pt?1BQ1w>$VKk#u~;OS(N#DA zmoUQDii{4@G>OGbC_>8P`jNli`s-(_kJaYekN7#Y{US^oOsfgLLj{pLqfs-2EK&Go zfw&MF%{)P1V9rTD6mF&0N!5=cXTHAQiG-8_CRuHr5|p9NF<6M!#F0}-CVOrPGO~1l z(?OJLV*H$o1sZx_pe;FtW0=b{J;qMZTTB3Z&H&B-iZBOGg zK+ecX)->c?B5a2MlLLmElvaz$ey)9Xv9P*SE@Bc8?k{9*C*+V!ZBOz(5E}|pjCeG> zU4U;9waAI1@n|17K#&E=6rP3|pR=yLxcuv#=PwyrB2%rd)}s zGD038FEiC0nukVwT=jmjH|`#$R^zHL+ECMQ++k6uMlu_BOI-Q5oufZ3GYF$m%k;e8 zHMU-AN_nxkujAizA)3nO`6W>BJlpZ|=#cmdEA;BzU`1nJg>)qCq+-1aXW=q;lMg31 zalSaucGFPVc~B`u%U!M!jABu>HfJ)cDw(a&EZu~;fRyXMMd(G~)-BR9uf`nWtbD#0Yoqb9vOCGb4J<%&L zaBx=ezbwoCwXgMMq65ys#{R#O8X8*h^XwSj)74kM>`g+J;%N2UXcClgiZbUI3+u18 z$yNva4GX)RBzfL1`6MJE6W?kvCqu8&Kbhr8N__Ctty)isZlZ zIXZ9p62ye|2hB(3)ZOO;U5`KYhtOl6ZasKom0r-_0zSsC+mGQ>2s}{%ghbe>q&RYt zdkA=8A;)gl{D%j9=FpB&{RIpO_b{qbg(;Ed+j(CvVsDYK3a8rIwBxcSaO1SP02st;aT)xbx4}5zZR5veI^(nVFkK6mB8=Y;soXbFL##D;UMuOI$SX6it z*z>+u>$_7*959?9!b4g>MG65`8TA)0xhzKbF#1%WUwlz+_9UDR5h%qK1+VWP^EskD z(U+n^@QM1kZ;duEpDrSP%-NO}m_|Qt`5BVQ%*}p$)4Lp?k!^QWaB6-pJkP+rB|IQd zyqv3wPYj=r|81aUwD>S!b$sf8K>d-ZR-|pn^N^m_dQT?MLt;`2I1%2|cR_8a?3%Lu znZ)!q{7iN?G%+0Pg)I>wyTF6FKPn-lM$v}`arHs!8Gnat+=AlOZc23NidR9}n#<{0 zmeX7q3RPU~yJKTF(f9uwjJsYfXo3gNVa(65XkZG-0ff)XXx%?p>xVc;EB1h02^3uk zn5jr#3f`Qo9L=Br1a@&gp5w-x^Wz-_keOSXM!!?urZ>q@SUXQQokD?27tgK* zwMjacOiGx`OC+q?KDB3u#dRG(9)cDVY+_8K#DKY6WvYsw!#IEZbzy-$d)-6h)Z*## z;Yc1zBBD3lb9yns>ch30FRlcdiCxE;*KpNjo?S<-^wAk`-Qt5o16z^|z^0l)OT>3j z$Qa^-wohdqb)Oa@if;z_kR@e+^X&lRa!Nos8qvhAx4mUTf3O&d8SF8Hwg>>H?r8lc z%#158!bTg9EA=`6LA*}_1J$-7B#&^vdZ*znWnLo&;p#u#H#O^m;WJ0g+i>bvqO$xC zy!f}4W!(*+!QANW8YhK3iX!(sQ|psEC_O*>Su`r!I{h=ZyVl6?gge-p@Ikj(f?=5^ zz;lfS7&dV~Ec|JdEzQ0w9W$w-g)xuRW9xO>_;gV9@~a^SY=grQL2T+Z64Z9W=lY#x zn-5|h77fGodvCo_3E2_xVrNXQUl_H_MPFbTJfkGwz@S|MHkE*)mj&OiECfq$1FmCt z!z4I@Q>IuFzn21Ou2FHcSjMBav>RMygj~4NkdL-)vV%gp08!mPSZNgSo zA8=YgZlR46CExMaF=EX%RU-XkQ%|~|bx(y=BsWMHLQi}jU|oJ&@9E3zl095xr#WiJ zIn&LpDxvq{{OjKGayo@9w41l6>2j(&IP;HR4^$pl{8ev-e`Ox%`SR^-eJ$=K1I(3E9%*_@1uJ7EWdFJLzWjzKHJ)Q)e_eWWs5y^T?`eO9_yO2l|cZS zkr>H2fssP`blxe`2U)r9XD2Clo$QvAVCGtw#Wr(}n!G9-|EWQ!t?D`x=h>8SI=72K z+H9SLqdwy7wc*M%Uj$yY*;{2bWqcpp@;!Y`NYp}wqHV%E`oQzw6yMeqaT=bSQxPjr z#Ft*B;+nJjK=NCJjOCAO*LqX0Q&@mYKb%N@k@V@Xb=q<(!&dun+JTqUeuH)Xbc2eY z$)!29>abB5|G>+84 zcTC{pDrrrfk!mriJj21ZM0SB|NfDO` zFHhU$!V9oQrVXuz3ni7ML065#a3M+Sz}E||3Y%)hvT(l*%D?X0dG8vagE!ZY$LT|D zGK2I>(-py_T!j=VLK0xTy|FdpcYHbnkg?&MXFqE6eY8Z*&^Td|GohMHZI;yg}z z|Fq}_fs6vPhHIQ&dwkx0orx7!@cD; zpuWIxev~VP3Lc+4a!lOHJif9pv#zl45iok2628NxxUAPKkiQhl+>UX~Qm zTCaC(qq65-*aE3!rky^CtP{uF|92y2vf?)gOf(iorvJkRVJ2qc^$4k;y|xM&wtI2GiUM=-pChup9m2JF8^RCDHCWIN`QjpJ+r#scbmb7J zKG{4eyI|wb+>385qZ&@kz^1Wt*9N1%wrDwOU)bu9=zKJv^Ax{72E{Hmg#s}WT)+PX1=km0+GB7bQyE!`0ySCbk zrvKX-8iG=CjHS)JbrxI(f8vvwwbs!Y0(ee$OHp4-P4Pqc;BSK!R1$^M2QzrG^{z6Z zUy`$_il|z00ql)lXb?&!(2x!cq8=Uup*hq7x~G2FoP)7~FK(nCZ%sBj+ub=`y(8Dv zxG*+9g$K2^qsIsNH`engh`(*I6QlMKrIODe_Vi9nObm`9f^dWT=$fd?0OSgffD711 zrO~rA!tVCv>HZN!4ah9WivoQc`;9N87Pa zm9Q{w4^S^$PEJsS3j7HWEG#(}00jG}_Y>HoOjrMW#s9oYw6C#)xOzKn$>DxK93lM7 z0zCm3U=X(fLn>}R3T&9150;~s3H%9@9EPON>AjEU@y~9mPnxmM)11#Objh~0mG{cx zkL2FZ=*@x6)v4DltejD2S8!`zKThL9wrCc(ui? z)FH3z^f?$?vN2Kp{FV%ivVCZ>@>oLW)a94o>#4!}_y(pve;x_08Jobj@oNjQJU7F^ zXl8xNQtjv;n0+iK)qWYA@9rAxMuJ!{!`Op(X$YR0A>F-rhJngNAVt{_V}pcb2=w&L zLhe*YIXL)09Wu;zqx=ATB=3-S!5Bl|h1NkRt_4D%d&sW!1_lxI4W>-j^764x`^n(@B$(pHEqZQ)h<)+Zu7L>6K&e7FxkAP*=X8=1{{1W4d0ln%Mfp8;VPucwakl$V;crT#0FA_uf*d`7zCL$bxAyL*_#kk?G$hHO$g@q9u^_ zh6E8L!tMVBzT7_8Advzmnab>;NWGu5QI!K~uHkGS_M4`iQkjd5*q`8C^n^_NbVE-F ziPcAnZL}A8wkykjWqk*EtG+}bi8H?Y?p(5f*A0j{!%E1i0LZ&I6ZhHJHjWZT*be zY;YCBf;|+(gFM{&46w+eA0Yt_evd5x!;Kq3w7V87%zF6XFQ@yndW6&<*|dWtBrxp1 zEZb>kHh+WT5A7c|_MgE^em3$4tGJJ)U#S~V_TO`9S(iin$)fE!ZoDqZ%7txbwX1Yg zB?mIAaN+XZBq4O~(3%VQx`a>1AgQJG$XkD!+-^yaU@Zy&2c+w1zm*X<>5%7ujB@9o z_~b&CG~fDE%XJ|;&-v>ZEqao3u#@(F<59g*&f!~2it!NI0MrcLn-r(MZ`NJ~+_4z8 zJF$5)XO!+34>gg5_Ljy8#5cF4XR~y5QwQU}DnyjxNR4;B`+ju$r3=v{V`=Q1=%S#J zRZqOeg`c`4@$ZgG@YEBT5BvTF{3)qIY0DZP2hfVdg&){q6epzCoWx;n9s5!klhW0A zYWbd$GsVe4tt?AqW+P*=Ovxd7r&_*L7ZN$NUM1{S~ME#DL@hK&M9B$q(z&m!h zQK%S)wEl5j|2*f&4##ojV;lRHKR?Qz9yvYDfbm?bRLA1&V}O5zGVvgEMZ2;2r1-6e z+QXoA>F9ZFp-HWd9T}BLy|!$jFNk4NJA`C5DkJK)BCcf%ZI`(B@fs`h!G3R-7aV{> zjn|bmMh?8Ul$dqITpR|NgKeK)hVG%LnR35(NKo>eTEAzwJRwaK@$Ni8WvVUT70b{V zlfQ5ial+mm`LU7ZQF%8EQDabNDw4`CvV?V8jW3@mZy#^X*}w}t)%>A-mtxBtdS<%| zV>3jgXbVP5i{d^%sJD)>=gWFJ!29*iD4IscHuTfM%g>r3?H3{tmVTYNQ+xDS4AYVM z%>Czh+XtOMCcpirc7KS&s>M`>WlVPg#DcaC6G9_eObtW%bK*PUA>_3GG2PY%*pyww ziRAJqhEw1S?GrRLX3(WvHj;q2qL?X_!lENvUUP17`>_qb$Zu-Q{vHlElt_;i7jF82uOk$ zuN6)krnHPd;v2P~CVg}GJXw_0o&u@JMPwm?P)GyC=Gh}4xTt~i{Jx}mHNxFo4?H6v zBEZj=vp*~}Om^ypTv+@SiHxPqHl+bDSIN4IpsUfNO*qA(b9Mccyv-aNBT#IOd* z(cDsS3(pNi^g{3c<^dN#Vx7-vCvLc8ogU)YmyV=e5KO=jI)O3@Comx%Fk=+{E9ygz zu)`1yse2%}*?4up<;QT6S3IBOeTfQH-=I#dAN(A^CZzJGcse@yU-<(P?;fp&JOb+D zE9CUwe;#I|DBCKB{v%tlNE=oyC_8_lFqb-Ay}E)3XKdk*bsJ%bcuNha!ZqPPHq-g( zT6wkZLlzP;ma%K=Djg@Rs)9C!$9IBA0)0pP+BymXkDrC`3n@i%b`{6^k#^><2?x8} zY>6TOIJ@nl?^x4(E39ldnp6IN4!bjEa+=n=bv)K{=-E{bCPU0U>4voKnT-8SHpTGU zjeCAASKOah_yUY^T{00&5i_Sy2CJb+=V!#G1L)l~!_>OLpbs9|B=)Nike(1e&xKah zRPzYg0?eM%R$0k=|Av39kM)^@rtGjUlft$FciH`n>s6d(%U3JAN{~PIy5(JV85%`) zl5!syo{mesH>=S1VUj}o5h_QV&0EE8gzL+iZYb6o7x91LRUL%I2zeD)|$@@><6EQDiigZF;QD5Q5d9bDuv_!QvI~T~R^{4G5 z@`i_)$Di8j->F#Nyq?Z%ne6Y~pQstxt-Is1h4JF@e$(=h{G?-H|Ee<_GfElC2Ef#K z@KokWjqxm%00&^|w$ZCtw|E{W!eLU!plgv@8ah&L9`muI@!~JS*P1qlZ~ebzysYhi z%I-s#iEf=OzkZ=D=4F>-wRPmX_c}q1>M<_|CUFG6q>Gq(J6y5zlFUVi^Q-UL1J!8# zqYaCV0?$Cvrl!VAb2-+}g5X*50iF^*mfhz`Q3?iL?Vs&~m7VilTjEmnOw`V!-y$P$ zwN=lO(9IZlGI|A!zlxQi(ls-PVYhu38V&c=nj*R4P8sWy;2&*9=KO(DfYge=YKQa1 zx=^JovtS>|BlO+_Gq8P^aw;k2UCSyPTzHN>;6H0ZNs+6A!wen&$Y(Q22DVbQ$7PkX zs}%~)Kv%c_jbod|y=V!;cc9AK+6tIg2yeyPMS|daw`bYMa|Bu%9LbQ?ToB*EFE0)@ z71Al^r%w4Ej=Bqtj;8oVm_-{UhM?jtym2^zh3prfXv%?|*k1?^khXvLB(wZ&BpRXa0`KZpeVPvs`q-ie1810=aL$gXkxlHGE1q zjkxAbWQV&VuVfZ@s2!+^T0ulooYC`57TWbrXM4|0L6o}N_V`A?1DH{X=vx>GKX)#W zol8Wmb`T-cFGT0_7-sYcouvO9DSlbVS4=wSu3)H_M>!Tw<9T5Xqp_3>Nmy&2^sJ$# z50Fschx-{+IQ1dsvpJmNEk1!-Tp4CG(eSdMasWSWs6E*k7@3Ar&r(AY`dyCv(|mo} z>?6{?pp1B>f8R*j8W8Z0miBj8PeOK3Ba~ELc4IxhDYTA;Zl^fYwg=^WU<%4meKn$gbk?xY7r-;&ePVg(mq9D)Ym%0Zu8Zpor@p$MY=YbhIC?Omdi^`Jf9=t9cCpq{aWc9)mh95dP z`8oOB|Gm5{z54PxhMmCfGAg4!`kLP6?n70GsTVdKjDXBF=uL4u2hk;Ddp7H3_5Quj zV!2i;AUsjJ5wq!x=sCPn0pDW0WWdN0f&irDtZ#^9C(!A7dEd3Yj;}2$j7lgyfen9@ z_o6i1baawZxhr2P-eXqjy`hyS^VoJyDQbcmM2bZ}a6ffJBKfvQ93;s9gr4xb)O%)U z@qXmptuNp{ddfc@4w%cwO`$(i5x;yOOxNlHlwu$6}ct zRZ3?xhxkq`e@?^jdca$Hg+BYrny_|(z0Pd?n_Icdm67I;HILeQ@ReuA@z zm0b&yPEoSff;9Ear)nAYR(T9-+T#l3Z!ED#Ask8y`B@a4h`+29{ z4K%D@RpD8i;8z~n6vieZka_US-3dzP!Sj*M)gC$8l2>Nh{ygSnv|%DZuhEaC+s>F@ z^dsj{&>)v9YG37J_#wy1Y`NqL0K%QqdIgaj2_eHNo}%1zf7XL0C?e6hAh1;F)9u!f zODFDQGQ^q0<8q{yEsAP&BrB@A5alu@L{{HOzMGnLNv-^q{y3GT3sSVHA;}(#9_Q+F z)IGrjs9vcq`;$x-A`E^%&ZTF*(-yOocgeVItBPB_e)}srt-<78Py>qxOo9l5lC+R4 z$I_~SQ!PweV^!U}L$-<&X~Ob%Ob*Y&@;VtxNU5PspsIYQmcrM*74w0vaD>4{obgcHY=<*c1()L(diA3)Onn;rN617|>(zh(|L zb#b&|WT;(KQ;Irp%X$x2Z%?LFON3vz^=LO+pqBGas0Q=c5)3`|1G4(4RQZ1?Mqx0s zqN_Z|?K0TpagsdgZ}(`1cyP`IOCygb2n6{9#}bK})*nRyGBk~HWNg~klb&4|h+y(6 z_xl*W_kEdelfYC)!aK7c`V4TTBKabjeILQt6i`Pn{nqPu*MY_5PB(R~*qDagax9t8 z-n5oXsh0y~D_m74Y5*jDYb<{~o8eTmfmbaLxe|E%;nifFxMC3Fd+*lJ z=eH5dWX*PXN9fc@dO|v2r~w&AP9~+BP~>OBt_D;YHLE)YIkvyg`_&rdFTKw;jNWV> z#xhkGoB1zy0l&uE=HXnJS}OZ+vn^r!*1U;#H{`z1V<+}IVsWTRBU69K<)h;2Q6Vi> z;T_zV4I&lbL;vFA&o*x(MT7cYzq#{6WclMU9TB&%x3`MgsrxAUW$Ki+&s(1T@iLp& z;!Tvb99i5qSNE9dWb>GYWdRpFu{v#`-*%lLY2%uKTISyCs~obZi48MHwri)%r!xG(@$T@^XV&IDou1%e>PQVR_?z*)WXf>4*NEE)gtt`;1 zU0E8z85uMcFo#7~pD;*`YR^CTG#t@M`6a^@S{Nm}7)VGZt!|n)uja&CCYIX6&l@x; zIDC1}fb*cP6|aA1YP?yIH?2euJdRm3-?>~?{l>Q{l`SM>BKuua9d-N7+wf@h+k1=U z7yE#%&&Kt-tg%Pi(~*8L(9^zqBC=)~Dyk2~NX`!C)ElU)Io?^nTJ9XhCydoAWW^Go z)_zMz_^6t!-3-kUE5FpgepyUKTRe#x_4<(`CfxBBo1%Zs_ouf9)_pgeF?;WJ9D`| zTfX+I=H+cc(}Y$`6jkce@Ie__lQz9Fk*X1wMyWaf!1;mQO}?`Utwz=qya}OG=0Z^h zPi!H_xygToQ7#Le{>L{Y!630@Zv?wEIIfR*_7*9KRE>_KEQ8zSykQ5{Z?j?L==<)( z^~m;p>p;b+An^Pw2w@gJfT-y68TN(0E_LBgTta0`wq9^Si>N&~pz26+X2->*%iTUbime z+!}(E(Ea)jVeko%AUC$ry}6nD7#Wpq%PIYZ8(rL)KIKO@)x$cf9-9Kv&9*DdfZGBS z=2S&rt2z?j;YIRuGpZOLcB+B6c%3`*It1(&r1@f%7d-)=ptsQy+@$RB2|*wAuSnXQgT%tuB%e5w~n=0u(^|kAGN1Zmsz{a zbi$Jj^Xlu0>O(>|xUt2n7r`bSvXx%m0d3s)!|qN^MSjTbLL8U1`0pR|Xk1?v&G~aF z;%lb2jx{P3eo}K!Ba>vAO7y6lN@MK9pt*lB_FHfs5}Yj*e%HVnUqTwnr`<2~+6|n_ zSF&DAG;VQW(l>LQic;epr+^X?}A>(|1a7>1!L zkSv_i1MT=}UD3vW$Toh$KkqEc>9&6$n5Q*!Mp5!7TnY>L-i%>D*J2{4Y{gCQVJ=Qy zjhB`G#+8X4HP~yPdH^AfqrT4-8;2Rd8}U(Xe3iFQrKp%`ZFew7!$Flp!@oeI(2li& zTpqD9##GY7-T*RW?4FcGr>Snm2q#+R(*RM6Vn@*NM8FjL_8Y`#MEc~VaHM|##)Ah# z@GlyEv&A|ew6`Gf_F*xeZu&Ns1^QAL*1c-G%sc@_MEjrZfWLgVl#;`S5}RvPFPdz z$7t0!&9BeLzri*Z_l9?^pNfBTM0B;%1ErVoZOABj8Dz7yADtl%E8ia*dJ?)*n8+?Z zUKV7zL0(@A9io{^2?vbf*@#0IG(e2W4HLeqn-ND>OOya^1r#|Dz=4)>F!WSO=TIHLVKD~d!ybI}KyP%@c1pSjhWSkE zZ3>>@u-UkAifOF(AWM#yT*#1dq$F+T)LTpxrVW|`c$LG zZV|$pP?gIPreyHQABaYPMeJbJsK!2K))prl`SjH@v-k%_u=yj-Zja<-m?jg0_yY__ zK0g65I)AITbuE7vGVa~NQx*Kg7=WO~_5MdsGJNlbB zqB!3b{y2Ymv!Yc%id;ya`A$6>Tjj67ZJhuv(-H6s#iXxJN<}Jm$a2*I%dN&E)`ppi zlLfmzXEndBp_GFje6o#Yegsn66{j^ljRb$HSd&XJMn(-{7Ba@_%|lF%BPH61T8E>?hd?U3%c=B+bpW!PfTRM#=bBGOmqzZE;gqaiz$<+ z4@MV$PGK=TgK7F@<^7j-6sLi)C(y7L5&l;6_l3bTQ4%9CMhUOmbt}Q;@L35syx-D> z?aY7pVTDnd`eitMpyObxbOs5MtK;3wMu0VxYSZzJTbG8KSEW(C9I2Eh2@f?_086kQ zcNG@aUM%UD7}wuave8DABmZ8UjoTsrxp4xnqr^okv&}|LA~h#Djxf&a?SB_=S``vsvLg@4 z@8<*uu^5WejPpv*@nRwXWtwm%}}>H6*rI*9VMJBTQ)HPDG>MzE2dKr zr%>@n7^n@9>-&e?lM^t}?R=;g?!?=V{;=l1F5_enSLxn6<#l)k=Hz&6v=SgNv88`f zahwj#{p9@73Te1b7E3=5kNF|56$fTD`IQ_HD+-Jx8!bh2X<;dUDS#u)^SkY1HD-+w z#fH_Fk{RTox2FxUqJXRJ7WYklGxj$t2WJGedXAX z9EUr`iiGN$!j|k~x6X5~cXpTi(bIpb#2{C3FC4LgVx;|yQhL=Qwfb;@kCkdD_qxSJ zSf%DW5pg(vv7&LGgmi6+4?6a$9jjHEjzw28k+l6wPc~D`k0s{!49uaix(od;DWY7c z(VPzG4Hiy_T|5#5(=hb*L>B^*LQQwt2_7HRApaS@Rc#J6-;?1z znAtRpqQWrmLYo1GDrGa^+f?vV|51wYhHZPWre_iNWl1zjAXbe)e^9$GNoqG(-H$xc zues*UOrX~cgVf6bX#hZwEWCu-tQ;i|cc9}jbw1>)(UQVulQp` zi%4AlkRIa*tM8Bk2&j$COZite}wbdZW<$t8m@Pks1#}G((pi<@M{kgr*iF z7;nq!Nb6Czyq6V$li1)FI+AgGdOg|_9ZgDvH6*Mx}H1lYc*)H zfnvjzi-F2uvg^z%8wd7HIK>WuBW>VGpYVM>YOny=ub(h!M~{CIm5Qd_=OZ@!#th+9 zsZO>KqFl28{ zI*9yPId5v&$1{Jb1BhLkQ3Odxed=NFeR@e47x$&|OA#_Y5hjcFAPU?ZnQrL;;f1X= zxYoi_n~KXLGK%I(@Gd`HUD!RkIF|Ey27tVAN&X79Z@F$gwCnm-JcrDhMf=0_*A9fG zc?;UG!*CK$r_Oj;Z<1DZ<6hMiH;3_w%I^mmY2a1|NOONB=bFnmdFSZWulH}FSnuIi zWJ2~I6PNEOhPl+z`O6HW#1VE^;P2Dc`RCypp?`G2jt3m~>||oww&E52Y_P``)WZ$2 zc|fed2S|Jr#Q3Gu3d@~(qmOO|wv2_It23!q<(uFfgn3M^Nz_nd)v7G=V*XBjJ!;?J zJ-=ORjck9&5+@}-zZSx`LVK3%dTc6>D=1!1w^4P_2lYiu`7G%>+5Q2CA;uA>Pju{R zv0}7(^q3lMMLk$z1M<{parfS5^U&4DAf2}OUr4ae2*4~6D)12)UG)s+0v+t&yxr<9 zZTvamWkZ#UJg72z+fYzCU>JJ0#LhQ8{jB2rFZF zjfOez_nx+$HSF982LqvFGq?buFDy&#CyiOCq6*!@bqGLg{wtL%TycJb=#wm+k%c5z zfd7A~D8>uc0xk+CfswB4X*cQW+!xWEM=|Jnd#Rkr57n@n`i%p$Qp0Hip*;kr5#)fhu=bx>eAV66IJIHk1j*f{%xsZGyH4;atG`@~2=w-m#`sq;C^<^I@UUu)x-A(ck#_-{K|1k6+As)d4Y$N5RtjmUpm zN!z+n5|mxEvGl%fuQo-R=aDBz#v$rO6S0&ApGkg<*wYwufy?ky3olT+7h`LgK_mH+ zW6RWH+~}@Qe)Nox7QdHtTPNP}$*f)`K=RO;SOn8PD8-?XscqymcvU-@SrX1xZnv^( zXKg|--XWEBh1se8!I?~E^CLs`u+o2}j*usG*JKbXiR9Y&2pqb@L!~K`EsET>ULj*c z0|gQ7b|r8vz0qWDGLF!tsF&#eG`{EeC5Qh4qRKsh3K?zBB zz#gpmcfBJM?!^gCd<0_}ZJVTh6mp&oOEyfIhGe&!Vg?fet*IXnEbtcQa3Fv0BWHeg zzhR%DxniGsz0Wltzu^%L&FVWj(rQNp$`rTfQVA0YnU6Zor*QimTfAsLJ#ZJNB}`&PIwkGIyE0vxQ$FaYe{Yr8i#*D_ zR-~u)hU4f$41=ehE%=gv*ExS#Lpz&;KGdbN?(`&E>z9{VyS^wce{#h#_z-r2U|?9% z>yont7@%Gj;wMgoOYW(8ZQw=?35#=+GmA-3 z)?!~H(Hg>=W!3Byi!AE01If>mLxGaipW=0#_30jyA6_Xn!8MK%cIq&fVrq? zy3AkkRjWf8T}d!G714hQ7Af(gKBU|?f~1nKn&OHb2++%{HO2cb_9S#@BsI-0=Nn!{ z$!Z@|z^%xwvF@Rert>>!w)8wQPt%pJd!1;r`% z2PHECMh#VzJ??*!}7eoG1}#YGa12RnGu zBfh!THXkg*i?$M$ig*0tD|xFpQ~N*=vZ<>`RBUu)sbn%TM{hA7yed{4?GQf-yelPgdc4#Wiz2{yq3j@-ohk z+>ygZ1nqyS-&oKXYJB+U&m8o9eN{8@F3;gDxxa+@*U(V<*Ka*J;VNeAJhZ=_ z>>7^h;oUdO4pxk2RFBYK%0#2DQ|BVA$EOnYnaWU9+qY(YGOj_B-w#`2?(NXvH-isf zS0=dSA(fAxJT_%WG@sajrE~B!XCA2uR$;bOCPROE6B!FYuHf0=+WzQ8M1#9W0vA^R ztqHbw^i97YXW(}?v9g?U3@do=qxJD6Y&~7K05iA?;X128tsC23%`pUV*fjUT+eJUh zu=oz;qXjh)COF#NmleB#vDT0~Ghr{0S4JxXosZfa6IBy|6ynkiNOLDJUm>X07*;>@ z%DR6E9Ps&sq)Fx}6O0#q85}Jh_i~SPYQ!L+SN*zvc3GD;3AX920b49$MWWW+jE5^I z2X))oABw9%7s_gC@mw{9PV<*GBSIH^BQJWXfdwpadl zBga0sE0U7Cu7&!{;5o)VOe96IQhu|~PpwIwN=%T)FB3108Pd}79!0*XFRlIQ%e)3$ zKQ)oVgA3&KMdf9kT^=Jj)m~iTm7s<>C_5hz`12SloyJiiITl|ve?B!?9sXW!ut!F;zpNQ9`kbw2ha!5Urn!Gyjvxui z&ZE(Z-*PhdP`|-x3%0azL#JoinWeL2b0tDdKxbyY_2QT1yyZjE1mw|`f+f=;p-y5k z>hd17*BU0kb<4A(am@2Y(?hOrU>+Mc}mnm z>u8Q_;phu}vIOt7%o1nZ4px5>rcM))bWnI#iGM#1z9Nyhz1t z-U%cT+R)c}D4VFrK>7kF)lzJR5$1h48_}xoi?{c-XOOyMRW!-b&J15HUc|mWN!?a4 zLTmal^a4Iblx}sUhcQ7$vpc?6X6AUH2ADQ*w33FFoRgXl`+Jp$7`1=l$`>+{1j zre8-Vl+cLd`G?=JUTKXXC8crjQ@1wn4oOmSPA3-c+-oJin%^_KD>?gpe$No1OB9pG z^vpu75C<4)F-?6X^dA(z%+!K26n3HSPXY%kDZ-f6r~aN97}gK@S-WKE&Fw6Y_s3!Y zF(VZpqnl1mIxG^7+I@eZE|YxzkX}p{3Nxi=QkR`~f4T1?bDmv*xksWPyl~JIy@ba| zKeKFv=~TBasKZlizm=?Ib-=5}`}!zDp9^f8c-sq5ad0<{1h#)CO0s;KmyI$U44eJP zO_xadGsxkw?aZ6oZyoBPx`AnnZlrdJjDGWYJ$_`ON}+%J?JQoZOicY{$nf62bg34c zs6U49E`Gvg30}Q*qs%orNBc0ycA%5+@CTo#mpN*K`|F-_M7`TSL^9_%_~o{2O|&p$ zaxxKs_uJ||l7D}oNi*!w#r*&Lpve|A=iq$#G?!(RI*@6ee< zZkm^vL0&QgQbJ3%GyUGyhN*fsLYbHL&h|B<&Cko30SlBNFRyOw`T_)EzUpRRrMOja zSj!=7#~!wLE%{EyRt)KW4?DD<8(-EG1{Gz??pD`$ncsiRJ7cuxNBRPuqS|Qbz@1JC~=xfYtDc z6BE-1Ku;zdS3);_?!&R1gH9^Q6PhDNN>mT#F;E zw!KXoNQ8eU23OctLbAyh;;QG$7paa-jILVKv@R$nz937LRKgTtNBda|q~~ZFrmIye zZCQ98@T*WR6)0InpLD!g-or*H@OFArR{o)NqKjh)i;?JnduY#ibb(eGhq|*REnEvz zQ0Emm8079S?l{ap}>3`B}wEJ%GQDZQuPb%(w(4HZjUbbLWKqC{pN zL+I2`M{(y`k-u`D9(k}JPO45dN6<%jUNtJH59nkemQ3~Gf9oe6|@?lk^#V_`r zS`jo-6D4;_eJ*UIHUeHd{XnK~9(;KxTl zXY?-2HmOm$%uR9!q-IW$F;{1U+J=*gG@1MoTCBW;r5CfMqzL>|8SItcQ#NgO>%xD1 zt;=Dx#dVshx*-d_oc8vQp2E+~p^WtopugR3P}PMvxI{C%62dWF`)QAH%oKI8g4pAw z^4N-n=8|j!mn4~Jd6G+0m_1I*&!0+sQM6l@L&fkp<*-iN@@-=sor=gE$s@TTDiE*< zvkc8V(93h^flQ^RZhb=UeoWuvt4)8YvK^W{cgup2%qWXWOuSgWFnL#%o;q(zBibrx zAPZ@Xxx+-q)%|c&+guy0T_~dOlv8zU?c)nH1C)m98$(oeQ!hC|rTC&F6_1yER8Pw@bQWJ-UuDwmh- z;`_$V#+HUki&-}{63_TiedIR<+^_6jsFiuXxIkfdBI<-5QO9CV7Dzw248D!B>~v)v zKB>(G1iah}t*H8O!+_ulxu+ev(f~Akd+oD{(4^U^$^GpNt~BYwiU_+oT0=rS|B{&_ z*m$h-r!P!0;qOI;}hr7&y4!_y%ZA`RNHfpz=a?F3yuI*B1HOe6f z>DURWze&osY^Od7IAA*Jm-eS&J=PP2c0=k8md?rQFZ+zW#gPg>oQo32_!Z3R3jNbD zw`#{r6yf++uWA?5mr$eedqIi!?zd5E2Z@@sC0^)Zf8(0ov`&5r51pMf6}4}p;es*u zzsj>#D^#A8j^RwCU5bC!qbZPn!CZ)sf0R`DSbUbBauP5gfzuXR`sr4@9zRkWo&HjT zh3&ZJvq_ecGSR9y1`gwNn5s8t;>T0hkTkcp%V{iDxknOOy?B4^{JtLkRwx;+h?UtI zj0Hr<)|10la}SP)@4=4B74jFg{AjH(?s(!>d*1AN*pT)UwUU2}yZwhEL^^u1TJbBa z1=ps0$hR1b1nGWLb5oIKJX8B$vET&k#6Omw$!b5`HquU>4_ySI1qL9;e0Z@SfJARb z`ySxkypXZ{+se49_xdvmT|x$JNlkk3lO?OFOLBO62?zF+`shvZ|uX3ZAjf%udIVj5~38 z)kPAqj-l49X>mBf0{I9P*#ka_khU7UD-2-=NN2v*ag%?t+dHX-t8&BFIQ99IU(2ZK zWp_Q*e3xkSySwhO!I7LD%^rpR$=DqdhVCcD^reUMl-)>RUGz0E!|%uqPN9SXd(l#c z3_WCYyukdI>nm>O+ef;5yh7LT z_pg6O!ZF4+Oqy!+1TWwkKWD*|T+)_|iDG#;x1u|KDTGT(@T-^L7VqTJ_73zCgGr{u ziOXy!s9~IWgZ|AaFkGi6`BV6;`I?6WnPLi0Yg0_PLc(O9ueAh53-%=o*7Yux!a@d% zeYn3A5QNoJn8lq9Dy~AS(Fs!>^sEpojmm#_J4GS4)b9+G);6J(*%pt874M>?OyXOt z{+T>$gkC;G`!NS)Qk7+M`On(I$%Po2H!C6^84WlSj8oISB$cRFT(iBji}b!Pr47<1z;@aSN0Cs)h0E@ z>w;odis=`MD&gpY_~T6y4uVr11vQFf;YU(_Ary7=gFw|J6AUrK(~@*Uxk0qqKjt!B?{# zZ=XDoGnBawm+iu~uZkBkYDSDIi<@qx%Y!+MW*zOzPLD>&^`$8l~wg)>=k z6h3kqQHN4yY&p7I%xgbRj_ZF`jJM=M**(_Y8k7>L9DSGMNjblE`;PHVuWf%kUT3vS#2?wL z?-%(*{9W|0y%ONg&V}`@hd^u->~?^&(xoN}LKdK|I3|lx)Ze{45vReaoR%wHXJJIT zwvskKOZ%yo5zEWg3cRNCL1>ob!BU?(*OX4(2~yHx#;k@#i`lO}0n)+N=NnNc&kOAb zDhgu{k8@Y}zPR}mb0Z!Sp23am zeR4;_E#&;B-(IjA8!=&;gtO@Aq!^?tQ(|G)(1VE7b26q^o0l4=v5S9HKP3m`5_&^|O9YbTZz=Lc9`%1TEL!YDdj&QDk>z|5|DqX<@BmHVso)rZ8z20z>(ecIC}WdT1N!?6>AE=*mx}{gEgmhaNg^3 zoO4QwMSYR6*x^l~B;BLcZx}!|Xq@Tpq)b2yw;<}`&`uPQbGBYL;jD^zcxvm{!AGOu z@?pMh?7M$sOI6ME!$Jj{^=37few&A}t&LiHWiHWn3*@|;XIqdWG-=Cph#*cun}Q4L z$PF`{H<}fpl<3pb=0-WQ9zB1I$BB+J!kBH1mUW&VFA(KbJ6Cj9R#4|eL4H7pz`$+bX?^E+jMZfS-S1Oq}WHkXzc0hrWGy*ABs9%9|G#*iTf7=VmaTVRb>3`;xVojISJ$=)b(F zQMCI-c(dO2t#acXhR|6R2k?in(GPbI(SH{jMHc`!z=Jyuiytp*Qbx>Zl*cY}Ki*Z- zwse2ZC-g#N(*QKLm?JCZa#&|33lM4Jz_^L2O8}c7j)Ui#;=l9=KrD ztei0%M4A;Pcd=6EHaNSJB;P;6=1t&jn4FXfJDFrC8m<;@=RTT*cId0;L#pwm_brXg zdc`ja#o;K*LU}DQUp1JFRn1d?_)qE}ya|5;7d^s>!FupoN>QPyj(OQG69T?V2!rsf zvz2`ZuWbi()xtH7G%ax@aLKuQd>b_Zgu2CWpB%$b!^fKv=UP@H8wvG$%JT zM3k6~#dHD`3B|p6IWjk7+v19H0#i`7=96e~1?S$+8z_G8(@TV7JPqQyyI`8vSzP&s?uM8Zg*d>68Op#cUUzfG;k1Eu zuX6P|2zJEz-X3V&Eyqkavhb4|{Wg8M4VHG^s2T})Q~WeaH+6!e#f$kPi(D`|Pnodq zpzqW+o=FVRHdz%vrH4P(vs%Ew`kjAx{wrIi1*`HJu9o-nE01@0mt8a=Qc*Mf>y);3 zUN7!q3T|p(6In!5z{!D>3yNLVHSL9T8yc}*5fbTiVY}3_S+j(y)tp?Bj%+yMt@3(H z4pcaZ?v7y??gKA2rPjZnv1Uq?Sxl(iku9AsPo>5_n*gx~Z0Q-<_rrpB-S2-UbobF= zjqZ=ZEmj*aOEDM2C3mgOPbKR4&zSh%#ptdR|8h*&Y9p=GWH(|sU?%cFf{2YW0*8gH}IooRPH&qm2Y?+2KfF?3V^q{5r@C4pqAb!R)Jh3Oc< z#0_Czb%l)2PDrk#P%0r6 zHsc$Zjl=P-_pCsE7o&iE)%wE`$tGnK+MzOxXh9ruOmVT*=`0x zxfJgrwZmnZdvR~%dpCbbPTV&>q7$=6LR~I(f}ICdLQvp-e?_lf}{sec4WDrU0L$y$d6CkNE*)%<|jZ zQAyr|GtMolo!;}T>ln!FatcsT<{LCJOLg%)4?@# zZ~A{2p4j>r$IV8hmu9BmaK>*86{ZBUxTARg#16KarIsj*y^SCu-O)|IbArWHtv`<4 z6{M8p-9<$j zBpwhm0)2lIxfozkTsaJNXpUqMN7f2J&QimsXcoj4{pD!0Op~A&qec;o^VMY;V`>jcd8# z^;?spnmXrE#Y>;(eeBQ&hULFg8lc??H8)C1j<|o_uCG16+60ASC27>!vSktFo9cO) z2_R506Q-5+v0CbApA)uUHbq<&BV84?eHD3cXQOZBlP%7F1za<}nS( z#-4xHrWzd4PrP~m)x_u3qKXPaXQx~&DCkY47!qVJT<>HUc5)lt7*o{6LP%xC!b)CG zq_fAa?S*rH&Jx@f($>W<)st??xv_8-14s)tKG}|uN>3Sv6s&oD1gCWtndO%AOUV8} zm>d5Yyo_oN8s9K9kDGoNy7&;u#EHCrBPxG>+Qvi{IG{Vp1F$+44O1h~dkckCmq%<%VX_dT^w%PStOV;S3Poi(oq0dELCtq=pa1d4DL2A~=79 zX}rxcuY@}np+lPS7nJNG>gVTqmN6up%!yjb*?QB6q2k+^4l0IWU_~~>IOUQu2NlKbsmmQW4D?~o@ zPhhgZ>kjr7ha@L#C8QN~n3dQ00Nl@gVK?}MyY#Z{4axOD-$QAu9NE5_>1bvo3E{sWZz z^&Vuqd+l)?($aDYaimil%Cq}9FCRIRdcu$3Y%*G$_NSJhF3xU^hH-!Q941d}5x5HB z&ORRVsR9{5!*=BHIsQ-i5EdzvYg(kh6J}+jU-jG1`Y{68*Q2G8(MeJOTR4)&C5}-T zZZm}kn}cV zUA<`Camx^Xqj{tm4@rMfZS~>wXz?lIi{ihh5#59QQ6j!qq9t&SCh?!Q0!@eVj!oA4 z@cczrUy087qR`6!QeM%cR%syUccs~!?5gRY_0tt2QYzR7?==%{k@Iz-`tGCs0hBpr8NXB0d<_7ta?Aeaw>SF0sF63g7QexGgp79whb%?Qbf|)qkJu2 zd6ouezWLY?l`NfPp+my?BS1jQ5S<}*F1m%`g8`^~-st_5>TD#QZ+AGIow!u_j_+_H z9()CBw(Ixz72h zB%c+OXd^WtZF+w!&kH|FfHozdBDGjiuFizT;7e=t`7?%em;5X6eXn$OFO>X(Jts zK4f$0Oi)F)vcmf1iC|d^SDCx7fnM99?m2JBXuJ(*)gFJ0=`X*hZZ34_ivB~Zd^%zG z7%7eB{MR<=cYoSeWc8hWjV&0e1RQ5n3Od@x z&z$jVA^U%wRm#^jMpbA%%w^XWoB?q~!l+cZVvt`_v_E63s@&1JsIh zuv^7fXV4$fx;@G<2#O$E*?X4nWHUZ`v#=@L&NQ3Zk#U3*e}6+RQHL@+&5HWpgr!S^ z|LYRX%@m3Y5XW}>QT7MS?*QiG9pbam(r zbf2jjx_3l5y~^Sep4|&s1>C453owx!%egTmk1m85Q&=CqNB6`gG!u{K^s*_l3IscH zD~>OD)b&4d7xS5f2V;;xe>n$T0vG;m@J4@k#pR~6u4ZbutqD=CGgBMPf=IyCj|}OD zV+nBj8cBr$F9|X)JCXIXVYlY9bA+g&2oX}&AuiZ<-wOcJaA~k{f$H1Z^fym`;2FJh zzqF22Bt>c3V#3>`B>tg?R9_(c!nV0sZk>r$8t!H7&Lt5CLojjLouTC{`+}anqGA>B zgG8?|o9O0Dy4nV}9SEMLHLP$Um%&E?69PFfmk`Ko#1Z4 z-GaNz<;fY+A?tYd(Yp=E6Zc0*RHAYcWdt;E4y`2jqD-#PJKwLpgo0Sc~ z!otqP!or3?NvUq>Vgve*9D!030%%NV z0j#{d+zkJ62Z-8&oGeX%b^rySiv`H`J);TG2B2ndVhM8b{GSjs0v0YV4t&ha?(XhP zKwD=fdna=tS_XiByQPZ-Ko#T+a&iNi0{)^5Pz2h7{!NVuffAr@Vd?z0Le1XH#U1Db z0=x@sEKNXm&hIX+cBUXFzKsj=kH|c0nlZ6A3s(A%U`eme$#)SFjIRw8_z%H z|2kskPihLv8e;VSru<)}n3%l>z?+ei9l*%O$qHb9Wo73DaC5Q%eE&C&GSKqhb+G*L zm9aCk2k`z~?t7p9Q?lE?XMpD43qlL{-&l(F?~@Ax(EJ&6Jr+(DllM2)|Ig$8FPHy+ zQ~pSSDi@4FysXKwS~Hd;DMS$cp>l`UONEdCyszvUW#Et-v`9Z1>U+48Te1;EJ4 z!t#G~@7rZ!{eFEozt7~qRG|0e`QMb1b|&_we{C5XCl>(d;@2pLK z{);%?^S)nmwtr&$b%M;M|A6nE0R0!f9}x53!}G`BotD`j_!qMLW6%B^C(u9o_fEjY-TogA?;KqJ(f)V+Kft#KZ*WzOTI7YfAGH^dmxYp$OK_=-rj^i#HuEw?f!=-fji@W?zrF# z<*rsLEu;6MQ@iUU3TzT>Rc6q-)2(RIP!HP5wj|As$P&qm_fc~lY{W5eAwHK*Gsb8{>jf5n%~IwXXU*Y~!MHFI!O@|gd!WwV+|Hn9PrQ-HexXP3 zJ&s{7^w!y6i+z~$S}j*+bMC^Uz|+Acg1kW=oucvbn_{!F;1o zJ1WqTqnfmHQJ{2WVsixdw_%`oDeCrASe%K<7NywGZyUAj4qWt{TJEBM=@(YRd<18e zj{O&Guc(UIOs8PseruN#Ww!9N-UJ)skQ*9dn2v++gXCXa3wU|`KY9J8sp}Hn{6)Sj zuo>sN=yrPpJ&;d2Ah_=@d?zNP?cl!YUaNmP5mKK7BOD?J4zpU2X7j@soqW?8?5{+B z0AfI$zq1wsCn$-Tf{?QstzMVyfAm6m>s9=AWD+dAWFWBjAc6$3@yk(t*EM9pv{V-~ z6`O9wC);fYH6r))nVd~6?}u*U(a$U~V|3xsas}`p`;Z#$s$w9pAUQIR8ow#r{JQ8) znTT(^ZmMKD0`a$Lm6&OQ&y-B*ia`Td-;$BGg2^+48g;C?Z!PkM>giK8UfrwS zF18V#>nP%PdMCH^HnkL)#0zOOr}fSh_x1>L+IyPVKcGO*iV9!a7@|3MmneiOH{O*Z zcEoy`sd*M}&UYGbd>HFBf8uo|a)|A}Ro)tm|DovWG*2rp=xR|CI~O!PC^5d6+tRH( z8)Z=Bi`&>l0^QX$i?G93Jnp4IH?~a7UcT>lyZy1y9VggpSA`E^ZV0xO1Z946j45#n z%fzFl6g%GyH>DJxCOrsUKu6#+*Frj{-12OCE%*$**YgMI_FNWlf7&j8r%&ZyKlA;n z!W=Tm1IHFaF3IJV(VPo>fu7&Z(RypnP}N7S&*bfc*3rozvh^{+u@4Eajt?9PlF_pb zQv?h1vr9`n+&w|M&B0^Q!+SB4N6K)5T9}7QY712Ad-H=^S{*xy&8X-?1&8DZ51|>R zUfLrGOzAeO4n}@ve=ao9N(q)o9eBYj<^c~LepKzJ(L*f`X&J}JgX&wH?o5BCa5%^K zN;*kKv~tB;8?6cuJQS30U?#rjfCfBFze=m*T8;^rs_-iMC< zy)xbT6P7`+g?^+|QwqmqkNqe6j}g299_yco7RQFrCondxSo@-OaPjNF^xgWP##_a% z0p!_EzVqB7-871^Y*W5TOB1a5G^-c!Ck3`0qft($O8K}ezI@!B+JeEyjf##jzl~Ru z9Q0obM)1WOe~}oZX1s<%%7<0Ha8d;&w-rLr3wx;;Ne!v6yKo#|+lY9)KoA;m^s=}o z&<}XlAMlU_gcv^hRT`8Hf@=s>`F%iN^P`30#YvXVX2diMp`Vxyhe=_(Z;Q80x7>Re z&te60s!l37zWynsQ+7JKCOi>4#x|I`yH0~TpTRa2iha|D=ZERUbBbwgA ztiEeIab0D`^P&x1)9fe#-zUO)Mj=9nA@19xCi#}9x`73qZv*0fwF5Rc4>#qX z(OXT^e^?8~_?QD90p_F(m;(syE50$gC@SOh=dir&n%;npB$XJO`6KDd`i3oJZZJ}Q z5(sclNBYgZvJ2#C*}5cu(IaRW_&v8fD`uz3xuwit9U^5kT8egMv7 z-8fYp3IU58@iq6qK-N_UqTM5o~08Oi85YAMzVg{GSeQU%E?K_YT=S`clLkyS2GhC__9?TG`3 zf5t@P`QiCjI;L^wB^Key@ikF#eL^0JCnb4n4%>0gkl(YKrR4(_l?p9{uCizBW3Fe8 za*DI?yTF!Y`OjtP^=uKwNeE@}p15#_d#v#=V&`oGdC6cDkpM;#)7`r5=YRtXE_ZKH zR1*QgwMsYNj8Rl&F!925xM{l2KF*@Qe^QRk_I;P)}F4J)jxymcGjSCw4kNKTG8?MU2zlaCP2n%pte-uI^ zsv~(h7uB8ky2=|RD=Y+*c93y@lk1p4ggm|5Z@t_JTjlXo0z`RVUd9*rgo(#`|&MTqUM$e=f_(>{`0W;8~B8GdziWd(jO`H}um)9WB;Aw%m?d zp#fo?pIviWg#y0z69W%bJ~t4#-<0AtWi<)Wz=c^0J#fKuqSL>#54Q;Js+^-qMb4Xc zQE&__R7;}GRH)S+A9T2+li{$Kgl`$b2tpN6PLO{yj`JzMC3k=(^~ywE>_}oUPM{uVSnNy|p{}XGdSUBB_=& zdq%5U+h7Z|P;b2|I)us zr%QQ^*kKSn_Sdh5?@m?1gUa#1kRjA@`LEQBkOV&wCQPtClt!)Gf3ZvZ7OI2e?Ng^O z<;K}{kq;UOLBvhx%v0wuW;8(stOcw{-FLVvD5=L+NjS@0;` zY7U^OjBQ*Dtyp7>f16sinx^5bm1rPi>axOwRas^=e)EpWCP!r!+-gXQ(ki=HxekH# zwAIU)ZK$$ZD_~85-d3(Lq`7~hnn6@iciIr(R@ z1JYwUGhF%%Qg98?$S)Ja5J(Kd?C4$F9^A%#q%wN}~J8M_S0Uwp`^h)%Mj5oLEC~lnuJ7~v*f8&|IOvq!`;&L>?bl&G(9q${ka!lLV8)j-wd?I;?GBF;#7= zA9c?v(|4qRkS%I%BGdVnzZ=~5r#;DEOw->WdPdH|&?udU*Znf|AVCk2_cQu5v1dyN ze7l!Gf3}ta;VF!j74OiT-EHaY`EPI{HGKWKHsy~$oq>Bi2a6rjEz_Ex&04QzKeXkp zbQ~3q%76Z3ZLHS^D|x@VZ%uKs!JhDflid7Z0*$OIQzD7{%yiJGq()tzYopSvHFj74Z0sdPV?_L{^p8ywt) zLnk9y6Kq!Bb~iFma|Z0olG4-Hz<|n|Hd=Eq%hzUvOG-uvS&jZ2U9%tR+T63ue@ytH zCgIpofp8j75e#=0+-E!rc^ngmgz#PmynNfEwVPJ2woYz08OqnO(2LHI8;6$BL6=C)^J5mw9@GUbP?t&Zqb?djV?Ns}lvD*bTOYQI*^clz~2 zHrxww$~o-wT*J=i&3P*v_~Nx%Kd%gVZ%0u*Fx6=b3fd?>FGV$3`BhIsD}!%+i315l z_2BXSgv7Md>XUwxaypQrSdYpq&~ZU9vdY+gG(vv7TU5P;Yi`|J25)3=f5FflwC&;A zocjcV7Lbb5K|n>cg_;t|7*^=5c{do=6>~S?{QwTGTJFG)w_mW2NMEn&6|Y~qt@5^% zIEaedF&8_GSKoFEnq$CSa-}XkFZXJ9Z!W0Lysz9PGHX+bAZ;BwEZQI&0 ztXnDANt($Z*&-IJN)uISe?V2#eL|_?=}Es=48+{(@^)FGTTk9@w0p-D-6yaS8X5+kVN)y$(z_3lbHc}|M;O)!wTwY8}p3fvJim0xJ z>RE^BtPMycRHt;%paMk$sv=hzpPPpe`nP$Ol6o>kK1A?%QyewefAfm69*WT74`m|!2aUl7x7biBQTVtTLFNSH!!kxqC<2B;f! z;On}_41tv9rpSJ+{_)1!2Xb1oWk(u0USXHuw|P;+idkWKw+u3XNzkb!{62(@P{Z?n z#iq%2epnYYJ+qBif6kO2CZt#B9phdOVuvDhrWO{4mPxBq+$6^D&`6wUVgDXY2Gam= zJqrHsIr%6*}^1Gp&{TGI9d zteM$l8muF!D~jA9jRi)y0 zadZ^_xg;MP!vRLyvB{M`=*t<{;Xq zP?5&e4JSf*oW?HdM-uiCKBGcWZt*xjZF(I+y*Ty?IKY~(!5FC{`eVRJ?UZeQ=M|K0{)fApN9N6U`zJ@lH#aIMa{DM-) z{?+5gtkyVNwZRhZeLOgdmvq(1Gr&?YXL`Ks<;Byi-B9g~Y*FZm$=v7`UyMt7AK_*2 zNGyr?e|gYU`!v2D^Cq@gThbS-I`bqnbPuG3-fDP|ZDXTSg2D9yV`*O;5||(*P#cfW zKAZNe1NpkTrAUdrrUGN&K90K@9M$WcK_yuc&6j5_2tbYeO>mJ;C{|qEDC1L@gplnw zx0F$3CRbu9IWSHrG#45E}31eRl9M)YA_v%Oa$qaxgIt%{vQq-Ev za9}zWu6NbRWgnAzQZ>8Kb4D?zz+C3XUtz5@bqH?=osh#b zZ%(|W7EKd_dqi9LcJ0%Yh;n`cD#9ciy?W_6LUllAU=tE=QAC{+3f3N8E@bd6kJZl1Rc6ndsTpQKHje{bXo zi?~Q@D2e6P95%i%q;K0fbYm0C`)Ntg`#2AqYDsfd)_AhQ8kb?hYI8u#Nf*|T_nmT2 z?X%A@I$@)sec>RpLmn4Rmc3d;CxA)XB*Efm@&k{PkedS^S+Nh&`98^??{4gI)pmp( zO!^$sqs45S)HB@KPmm(H(Z=d>e};`Ij^n0}z#gSAcTR7>b+<5aXYuW42Wg#}zs!cb zdee8Dphq^(AVv!~4A|1yDyCYf2z}#9Hz)q~P0q;c>a7;9xOjq=-%2}~_06_uZIegr z*^V^yNbtFXeS7V1-iwher7Z+1wh`S>lln;nIPAcMlf+?5u|) zn=|KBsy--Wko?_mdp=Vne-}lrBz=yUA+S0X6rzfOMbln*P7+x0N0ir#Z#tR~`YTa| zLAfLp+BuZT3Q=ZZdd%s#2^Dm;s^7{*m5j5l&Gk)$r%X@;iP!VQ znn&NFa=DTY_O_zrCmh!Yb4(b~XPD>>mlS=%xqW0PqECFx9PTMsul@?qVX08tA+~hc z!k!qsis>QY5S>yP6r2-tOq|kot50d|tF-rT-RG8Dx=Z;Vf1CGF0{G?yrHghRZq7gA zL=~DR|LzlYdmEg}XWGKHUaPAogFS=la))_;oW-*$PyW11?5*+mZVT5g;79)w_E~U8koo+UwXuAVx#lxBQAF@*Kwb|n1jkXc@ZBWnk|U{d~K2+G;w z#@%EV%U};uf2}qD9oM%X5*U5k1Y4*)OcvpK8P!9Esp{&mkX7S54{lAd13HOvWa+6g z95&PtrazN7enhh%2ZP5HgfFsop95p^9HG@=GtZ|5)Qwj);qi4d7TBw}G$@f@&Te06 z`#zvLaj#ZOUrcOlYMZcvbICH&t5_{5CbS}xjs}7NXk=hrv+S-@*<_CQ0i96Ap z(;~7r)n|(VAaNy@$@Yo-7dKSd;lMozie&V zVYTQze+^OQ2-BPTPH3_)H12NUv)z5C%-qS3u(k0JM=ck)Gj94&N#GLgTHz;+s-vjZ z3UJU@B{!u!5vH&%rxE&YRvKL&)QvY)1&tU}^|s)mBEJ@J=<4m+>Tn4J7Pd`+52}sv6u0H30M(pbN+k8fO0h*3#$NwERNl|SXD0}c zL%CyGL|kIjhbNa(UbBGLK5x1e!KCq-m7M~YBCP5=FciE<*yKZaF!Xi_EUuQy&|CBP zE9&O`ZKi3Dtc3mLx1xf`OEUIYCibTd;2Rn%!*9WWX%Yr#CYUdRxQ?D5e;yFT)<0?f z#z7t>(9@Q^+57FFws(eTABAp5;yzSfFRan@{x8SG-v9A}&TD@tgLSC%gA%5W=s_Oa zCPHQEoAWUvDlh?_)~zwhfj)kE!QKFGt*+5 zqv(uBc2EN0$FWY{E`RQLf8lJc^^&1|4cgBPxWH5`t-$tnxPW0AK6iRWf44Dik2&%4 zFw)=2WduRI+zO{PMLf!QA77)qJte=(<^=q}!+8QxA;lh?#i)Fk*tBqF+F|O3LUZ;o zcZZYewMh2~T*oh7uMDw$Sr~AKHGHJvVIO#$$V3}`^Igx25>lQ&e?R-u)UBYH>9?1= zJh?0+KXU>5su49>Q#0cZu6KBo+Khsj77=Cv(>#y|Civ|qFO-vvc3D}f1xxZb~_`Qo2bdrYIP zgr*fFU_)9?e{s0~HYm+NR`nyRx+uXHFp>N45sd{tModCU?=|vK(YHv!DX36bfs=xu zPE?N}+owKzgUI8XAv4}xy9iVLcHN^o<%W2_;#<4_Q%vho0@mlQc~n_hEz7pzX)37& z#b8VMk9$ZJaWRV%JHeZoMBlzTiX<$=hR)~Dvs@Kae@qVWfXf9GIlvkg7*&g?X5FTW zIsDLHYye3RB`t|~sYKi+u|zbeXPSOTee;yb0>e$Q8G$McjA0FAxA9o*FkfS)S%V>4 z@J-_L{}Mr1Z7ZVkW9O6&+qs48Lv~F}Q}7Hjs%o`x6Ga%+6)=_rZXTyJ*I=Y_8|uOy zH%vvEf1(xH*n~;K_by19WRJE@*;Vt7s@)CFuI6VSDED#kZuX$0op3w4gn|d}ZSz7v z?c4gCYPAD0>D3eTu7vW{$~J5-RhlFVcTcj`1&UJ)jog%Z_`x{CPzQD@7Dzxg4QP-t zw9kpsf;%yS^rkXOYvGdFOz6}Oonx>fp%^RW%qzh+ zeT)<;STA3T`La3Pkq%F6txOv;{72*bGl+U2dMwM-N9~|ZB7ydzd=F96^~zP+s=eB7 z-3=%3x~_szdR2N{iekgCT1Yaa>GBv|eXO3ZD|=#1RLXTe}yb%i_j5muwxR-_4g58d-!YsIt zH?_~Q0+}NC2_;<|MCl>cE{>nl7NPPJsZ?|vL|V(m5Wjmk^qQ^Fal^4Mi@c2^d!oAk z+DGy{d-R-gK?mRQ?eSxdDz2kKD)hsYf8g#VyI8a8M1RZR&8n`FL)(>W>bNG^GC8f# z^=S!_?r3t21kRI5)T{Tp3{czF!9VQxi-PksLgq!Qg?cdckyx`_4`oh?W1&$wiVqDBcR$rr6af2GV} zi>AmHKx_Fk!n@Vz~2$rtD4W>bq=8%c=D7X(gT{9I_U z$Xa{7OP8)T#i9*qc5+e6Iuzmd@DDyn9;8a`C zdwbh?Ki{iq@~Kn#=#03=*(MJX;zr=Z(woTeqb2WdWU=`{>EzD$a8%MY&wb}J%+4lH z(&iaxBQ>~S=+Jok>`j|wea<_g=hpH}`^hV&i;YCU_uuZ`Xkn90MCY%D z55(m1R1oZ&_V$VU>_6y)2fYu@=|@}2NLBI4U@4?$fUu!H=>J#CF)BC=4<0VgBZMhUO2&H$tCcxf3p))(&ezJh@dmz z`0L&CD~}7?%}n#<<@YtmWNkd6MB^%ngX_2^)|QMp(MsHWC*e%Xw0xQYB}8yYF&9@R zC}t3?>d6~a5@Un~YeIP|GA+4U~SR$1Bd1lhr=KP*`#jR%EPl7YguFu zV$BM^$GK4a4<5Nxf5Q`v8v9zv*H#8Vnd5|J|Iw+|;$l3{ZZ1HXG16$PZRpLboKn5N z_VBGWJ5UE&jA4V3K1X-=0Cx+E#TF*on9iT(YQ9H8pbu-VbZ~+|aJ|BK;`!tbLGC=tIJ#VQxd{d-h80n^e0hsZ6@?a{fTy;q>T zkR^cQ$byT+Q0U87W!t)L=uajBcko35zPw0}<+CGNH zBmr!0whnwBe&%*0Wamc9ye8r!YgAVD7N2MV4yJ%ce|b}paH1`-XVfpnW5y?Q(p~+Q za5l?79unJ33;h83k0isK_*z^edL-IRB8}|PzsomRvT(9pqlxYwF;IUIDzz+Lw^VIZ2V zuW^M96*cnG(A+Mjf{o{!CPx>*OAkueEC5{Re~qj84kejSt%Lu#X%}SY;w&s|Dj3qM!6O$naBENk;By{mj;I94Z1?=ts=f{XMT z{o;WH)cO__OdQ@+Gg%%5wyadWY^}s1_k=5i!iBegH8^$PfsbP^zLEZj<+7-Z5^gYS zf1qmf8YR)DbW(Kf}!!f#w^v)-FnIR>A41!;dw zpB7aoo+S@<+mvY@P^CFyDd5Vr9sL>gB%;bTS(BiE=Wlh}8_{%O#2_(MF?WFy*bR65k^}f9uOJ-7);_XK@uy#ENC7X`j#TF#q%F7s>k$ zz2}rl{Q5e(g8@$O-P1C|%~(0>RJWLm5HL>&?hlUJ&xf||KuR;@(7{P^An~ccT){{5 zgY8bYJ8RM}7)SVocEk$E0zlU;I1S=UF1Ykjcl@=VHIMfXr*L08=v{mkcUKP+e-N#5 zhVlczo28me!KmPEc5xG=Ej8hcz0MNOj2ouSX60l+gt-D$) z8yKBA568a!IvOD`0Z2ElFF|!0JcjL%$_|yF{5UDV%l0x6MiLSvJIxY z&d{-Wb{i+Q4EvX?lucP+Z7%8DW@J{%W3E?LOn?oQZb#iB(NJ_UmhDU(e?eCEgsu6Y z>KP(pX@iTSGE~P^n)1@AOIYVjLaa~e$g(?bDJw(I5ODmOqEOKoZQzi>4tow$?y<3k zJ#2kpkR8dQLC{|OmkX3^3EX02noyQLs!JlSCr(|1foN+O_4UbfsCeJcA_!s3Y0?qz zqwz{U&Xvuq*DOpCsb|y|e{G!h%xhUxm#hl>Daszu{s+A%V?(N!$>`L8ZyAZy*p?XT zowe>qKgGvSEQY(2rDZitUg|>{KVmM@>~|l1OQpm!GV&hNKU~F1r-N0By5uK(z@XdSWjxzCf`&VBBDWc-24{(gWzjzjB>6`Y@Gl^ReAQ1Od{dsegH=yV@Df=O6qz`rixa<=c=FVolL3 zvq{5d4qDm2DHf-ttuo@=fHyU1Kw)1aJ31s%;@B5_{;c3Ppvza0MZARxbx(rkAxE}!i^-YJZ zZGT;*ah7zqb{~UW6{kj195c(7y3O=ZF=~66b+3fOAU%Z%0ercS z&dqZkWu9IZM?Yw?8%(PO>ong@-#}`pW`MJZOkGj==aRode;e0#4H#0!GE-CA0rVRy zb2=jfb|PF(Fa}y^E{6v>({Wj*jRdFYu0U6mtRcVZw+TVTFJI~7bQmOLH5$a>It4wL z;aIe4nIBJ6d{q7Placvqbc9brV*{~^5MfS9nFZkzSv%&`dNzH7)r9OIi%YpJc|^Ss z2y)i@6vXndfBLP$e!72b3e2Mj$18dsIX5j?<;`sI?MZWVy(bGu zpkRvn#rUZdM>2@O|zQ9 zy+P5T8#q!{~M;GM*CgdrheZe+xqR?w9H1cfx{Q zc71YwLOg79s(7&NZ_>R0lpWMw_V1((@s=L~E`kJ1CYRAJcRcwQp9lHRVAx z<-iM?{FTfpdGmTl7MVSo+I|mcyQ^v|tI_Q4h}fFWbAsWMs8Dx#AUF8P)3{(Be)yan zqDiaJqpX^-WWv?Agu`67e>vkdNvrnepIz9aaw%bj+~Uq&&_2rz3=w_05kTq`Mc zbo%ZI#=6N?Is5CiYwiWZz;U&%8zJG2L#LENDQ~@^<*E2jT8V7oe}T&BdP@1W&P`#{ zZctZb@)-p&sTWdyahL7f0_Yh?`0&8`&f|YNEw)w%pzygWIL^2Q=PdGQ}Yh5k^FuMZN4jxT$YXgmz zYA?iF9-us-wsfM}f42R-Go`{mavjtvTcF87;oDh3D-2ZN?A_z>_~K8f`_#C)2G|u@ zVpKj!<`MFiS5+dm&*{D$&oQG=tsyx|E-K&0<@I$bg zpBs7WaSdMzCeQt@AeR`Zi~4eH^Flj3#Co);+D@v23{L4ve@BHaISo#4Z>w%M^gUsh zKgg4eZzM+GR`>_6tf-I{4gYxLctdqifQOT$;2pnGywI-15-w|B`d3(E6mOqr!t*Lb zVY|w2>RlhahO)bs_@wBQqwY-~)Hfrw`}r!FGrvtwZDa5RuCv^I!s%y#pB!MT?Oc15cWhr{hu?!g^-tNqPdrj4 zN?iTEbHEE#6L)I1U@qAYBcKRHLl_K^rKnHeH!wELqolt@=HJW*jeOhYBoU1?ju0~+ z+>n-QLt{dZcqXkxpvSjUZ-*5HoxisYPi4zXy7z^je`&zHNIa%DOy2m&VdWBuQctR^ z9R9XD*$o^~KFmD$Hbg%_yZofmZN^RGY(?prjFCVgX7xjed)XQ)CMx;PltmC=UWyPglp^ZZeqqy6HUFm;Y$W`T5?w=QVT zL@IoBUPZy&cU3t4VH?3P{(fVh6Phb32fYTYe{$m*z&=EGQ=wYH@6vxVtMnFLvF(=7 z$df|tgXnWt^zSH3D9lM66#him8$!SB-)iCwt(Ct$O%$@f7A%4spq7+Ea^cLEZ0@m9 zkf5*HG{sOjFYbIlsp28@ou;vhlMRR%*-6buIsY_iGBmA>DBJsxOz%fjV#^)DmU@S| zf77|~E0;4OLL$=a(zW%;`Cve0K}3@zK3W4RpCc;$8B9HXbiH-jRHV|YaE7AM=r`$s zJFM((Bg9M2bRUhP?nJiy5+C#r#Gco+!IAEz#*c_G1v)q;G7jv!lyviPjJz_JzxF3u zDBu^r$DB@=_HEN()0`j`MXeTj2Z3_@f44fethZa-lIu+q-Sv*r8pM7!M<6plL1Qi_0B8rZ=Ntz4FA0_b$gnCDHO1OH{XYJWH9^%e8AM zja4C=-+=2`VqHP3TPinyRNP9_1D7x-^maXDgp;KUY8jNX`|6w^y{uwjfG9vce;#)4 z04c%-?0}Eh?I@_CKiyVXT4nuPpz4Fk4S*oB38GTgiegPfaaz0Q1duwY2y zEfm+SnI62gelVmr+E9+%?ol3xZ{%IdN9;)zpTR?!4YcV$HcHqjk9^qEYgV>0;C?08 z3|v}l7$+nmoFMn7rb%Ef5-sZCe_45+sYo_G`j}Wo82)|6_e3p|RR4S7ijz{dsifl> zP~3Oe`^#LOYLdlpnXUpg_=U=E1rZTfHq?yLBq+QE={io@_e-1~H$$vrjHf15#q7`# zs)b_Y1yX`+XH*;4u#@h%y;}mJ2F)K;&NTuze^T4&OPi9w zApKagZ4$vu09=OIYV3_Vrp_6f%e})Q^udn;Q8yI;)s&ErFRuc=+%Pfs8TK%oVNR5JF#)98gL}CkOk-#(Qc>I$VuwSZ57YSxN%PEpO4){ zo?4C^k$ALsnLs3a&;eMze~%3ZpLMC9Z%ntqnvOr00O@Jm(889d=0(JSnTDi=nT0xp z;ojtm^Oa7*S~~Ct%7rj%a%r>974D5A6r@jFG;glB5x+UktZ|w+}Qdu2^ro(a~ zGH%F<3S;`CT3&Yne||63dlU+{O==6MXWLPFdKB=GQKZLea6sFSUhEbPl0o=5^9eJ~ zXWmE}&+_1m# z=!W&ak^=AOnL47Zq|--h%fvV;r?8uEr@6pT4Tw}y60I4U+4gFG?3%1*7}`8V!p0|5 zZ-dvHy}&O4e?xwC8NP6GgUDrvEyr-TMTAm#PCq}KI>?E`<^S5l7)-}Bfn1y?s4NGV zstB(6kM2+dzKKzrFP^s%`~pe={MUxU7Cgl%DBVQ4#9IcAKL$Gw@WY%<-!LPq@h8-# z+?{{OD|au18V>aE(NfbWTsiGL`*H|DI6eM$hfg0~e`u5_7$he~R#*EY0IM$02iw&g zR*mrNw+E0}f_szcNL9;KCFR8+W67WRRTr@8QHu9QeqXJ4`gSN7anB*tKm~7Rf^s@Y zPPsOtm1WAoRs^>%^O4%fZtPGv)ghvu$(Llrw-L3ZX#Ko& zgKA(Gooblk{JW6WSSf&HxrRzL_ra~PAP~Hfe|Va3yd8R9n41}Q#isK9Kqs-@bs*-+ z*Ng4u=oQSqRumF(h}UoV2FBQbiV>n2r?)69x!CVVbC44zPB2f?$bM#Z&{5ak3 ze>p_SXfd?U@oBMT=cCMqujC8-vnu$sDi6ZTpY`?(@Kq2#&ceFMG?r=l^C5}mqga1- zAOCXHf6tDP-4ga#7-{=`Ovt%#WGD9cwst?)0Yf5^Mi|unxRyrZ?#6$C7a+7|5IWdK ziX>f^oV(#~L_2b|;B>4!B-eIAyA&qHf8P@^a+TiM-y0*O1SKQ@RWKiy^G4b<3Rgnx z*BhqOu6xZ97hMKfnopr{cEj1xSiSJlw&uX`wXiylh%M4&6bUAh+dI6(pbmS0we-f2aTc%HZWOkm`G?OmTUy6f6RI{qf6LFH3Sr;b>#(YakZW?n`#Ukl=^+NtL4Vdyu#Wr} z(afQ(uTMg+C=myi9HpGc1(%%Ik_&rNP$DQYwWG~OBy>2uP;T9t7MtXwN}B%V z0_+Ik{GT}+6)Ezss0HAmENCo$Ge$uoe)~4-W*#)Ar2TqrA7^+|cUg?Ef8Ugb<;W){ zr`ga$s81M?#SV_iM7x&#?JXl@&EV_25aABbkz&X7$7+rFDe*2L+=jdtjSWNB zMNevPL@@NkA7se9p`cG2LNh)F4F5j?GXTv0&00LVGeKSgq3)h{=Qo-4bsV$UEKOK% z;Q?6COkdb*yi4F2Z~f~15Voh!^+cT-tY83NK7$ZfA68G9WcMIW?D2F#{9?HaRpomob5$NSuhM&0LJ}a91VX5x_YNXWkq&}%q$piLKtK?Xs#Gb`1qBpoFM2%p-gEzdjQ2*y zNWQ(+Ty3v8zi_b|ng}XGkq$5oBmyl65(3HqRQ1#?K|lZyC@KU5ijZ<~nZnU-u)po3 zT;?#87aWO@`F{_DDhdWhV{K|+G#03bL;&u3y8%F=0FZekn z*ar>;=m`PtA`vhzQZ7}bhd&DL979O;3yabd++|jf0pZtK>8vuf1e!T2&m()F`(Wa!e$7#r#DPn?GFZP zBK^0`35EuU1EobIB_seaPXNph;w=2DfT_O+?0>ft^vjH$AqeAv^Z+o2fzr5hyeseq$Pj=keIj_KvGf! z5P$T~M22AapGN*8SR3Jp1W5nYFZQDT?%C%L33&b}gctD7T>3~XbzuOWe>2?{C=P^R zzd-+IzW)yS|Iz$cmj9LM|J{*>x0~B|elVyZ91U^)i!p!M&3f% zShf8o0=9#{&%dP&gZaTAq;u0qh-{?G^T_reb;>t=1=mOA-*c^7Wb+DQ=1?8pKPiba zcx#`8FQHD9GX{I8=2z8uj+H*JU0`-v8i`_B9~!lt1)kr3U_8FwMmjsj(EqMvN4cSo zh2)l?snSN^g=e67m@9q@Zr5F|0)J0$DN4g4+8@5JHT@d;Dn7oAo?bWFsFlzmJFl1! zOfpNf4J(`EDs;%5V&b@l7GxpjqdD-qK6!ldo+kg@72Dkh{G>st&JT)2V=k zDpL^vazKs0uUE{snXQ>v@Q-QUj^DwkY-ZkNoWYcrE*4L+Cp&svX)4;Bn1-QUy`O(@ zi!&II8v;OIM{I;@R0dTtc2$tT^bv};=1AfLP1&&GufF*^H;=1S^`JULxA3Fy*jkxl zIDM)p+y?>e*VM%&TQ!513d#AyMQ!>@qaI5piuUC)$lUSPFSJuxBe@HsCMy}e^f~L{ zq4^YxCwUh~n^MC-n9$XlR~7H6YuJCofXYXFlBJg3KE97%QzVwnMgMTRGo4UncD_%? zuU2iLT-vw1G}*wq$FepsWti(HTg+vL%B5B+S;i&0O3tS))FjHNSq|M>4|e={S1fWz zYW5W4ldhq6RP-a{$EOz@Il)z*3DdTHANy2&8kmf^qz5(aT)y7X#=#+XziWT#dV|E3 zAenAzt4|z6ua=h-yU5gUGi-tMa9h2{v-d@oe!@3=Mb6^Fz;d37q@2Mc)ao%H^4doR z-@<{J6{UyxkgR9i+Vtal=|8(@iu_-M)%Wo(+IwpkQ!8hT6FDJwxrmMtnd>Q>T<1)@ zx`wqiA`G!F9m?+SGTCJz%msfYe}1RE717~hGfA)Ye6qnjN-xdDL8^4bAY?WeeQd3= z{+Q>-CVZvT@rhu2Sd)z*iDn6Jcjym!g8QUjl9mIE$2&K;huB<{6)0^ru1y~eYX^MS zih5S(e>{S}3X0EHVH9oMD5>yLjw@e%y+)u(uw z_uSO9SdEXRO)=W=#$oUfIsy3zb^XARob&V64_L*R;Ndo~(-W+)(8)EJA+dxbyge}(5-zP~7 zSaa61W9MTKqjR4{mxzlxXIACE5Q!r14qEej}sp+!%2Kl7gS293Y+E>L|jd$v}e!+O^GmNM< z-FGroahkj5*cyLnKv!Z>MHWTXDXO#J^tl1UDs?8~2Tj#ew(p+h zpji{4;prm&ly=~oxDdIO?`3w)Z+-G=rrn9Gzweh843g*6vYp9ySeQFoUB6>|iK%86 z3HdnRzRA6#kCI>+tWR-BDsU~iAHnqD+4w5)R^25-KI4C@XE#PxcDP?D#WI8X=~qOX zFq8*+It!_x_fO95&%M?JFPL^I<2&FE#g723%T+LIC505w>Gh6lB6m+RYt|Ib0FuV< ziQ`6fsw5Lv2(o8VQi;cB8M{rXWZ%?n?pE{Lh^4B0m*Zgf`aG{Do4hU#%$6|VxG^Hv+2a}ao zdM~+%_*pAK8pxb~JjFUMpiUiD(DXB$f2fVC_S=0*6^hYTNgiIZ=(8w4dL4;J>F1t3 zy+#)Yv~CMBj5Q=r2kkxgCjGy_^S|9UDDEVX+@gQ`q^HB)C0@tlwaw%xH>3_EZqxEz zwBAv0YAky_qIIp5!3e~rpCHY?E-OW*^kM0dOz69+JKKUOJZcd@;ERLu14ma?79u*E zu>6|Lc|YdF1#Wr2=x&P;t*_6>;K8I`lx6WW^cPjWF{epM#SI1}9iisiHL+3foXNY< zy32n|?|*WoWiVr={1>wEG;o;DIb=v{WtjNq-f*>M*d;Nkojtdg-B8fpX>Zsl?q7d* zYG!{@sA>Y=obAmmH3R!W(1O_C1Tg)ZgPtCh!NW-`lYHSwy&W@r)c>Bj#*y32H zh1UdE@eO?H#qs;7yOsPyo+X4!1MFHk$F6W^#^0QN!}SY}#^8KmCmAjd7?iWdIYuT6 zp&bTP99wT37&R{k=MD7~)p37KR2jzx+LEilb@=qT4uW@BC@V4dC+;}RM9o;pN ze7TE;%rw}*$H(EJBXKF(Yf8w_dE+SjMYBt~o?BT>=EUa-%KsIZyn@KD=%BdqwKMc_~ z{gi=ry{u=4wdm!A&+LEI4%PbT5}1-bWv0pKvZY=NO=b2M#@U+xwr%b?jkE}`hI|SZ z4`SbZWXjOm(xBf&Lad%vkvv6a?(ryfXVm@Mk>DE1%5XtOOw!FYM)jD+$;4{u)G3B~ zBj9Q>D@~Aqa1lp(y~X^Pn?pN!Nj{CEF|$zlT{0It zumudH%t<`YIaSotiEt##r1CG6o zHgfOcT&TbUFT)Szj=WC$N-^Phng%)n#~GxdYa6dxNKA_E9i$&mqzSMYPdTRUHeagu z*yhw+6~b}rIDCJenPm;j%B+8}F*-DUzb-v{%M}OO8GY*eDr3m*Gu)SUn)#FDEs$Zy zMLj1pTOazNY50|5m1KBvol0QV`F7@)$-!{nc4cqxHwqZjJ~cbZ)~lVt1L(>w=HY2I z@dWd#1)BbAgq{a&bOHQB7!PgXcYa#|MhXvWJE<34y+wa5)xHq7`|3A#XU|`~91YdP z@3`W`33nN)C(ZimJ>mvm zo8fanW9O}8yeG@?4ojkum0K#UegxNHROBa0AY*3(7s4M=48&2Vw%@ZyRQw^nl-U6c zxs?4wE&zWjSX0yc_gXWGseM~CjU*Xn8N|VK9$RnK!*5;RTzg6{ROK2np#89B86xH+ zH@(%yxb{(HyYVkg`TxCO58a-7u6hnomsuOAd((>kG9XZq9-124&L;_9Z)1o zbSy&7#G%-?O=@RCA{#tE4{am)z-MyHuvJ+QZqSk^SQXEn`m65ZA67F&PGo#7sb=@?VkSImdG=JLO&Tx4EZq@s2S zTxpS81$Z)>?2bIOtU8Bd@1kZ9rVmk+Z-TZi8W@sF0r z*ffzgC;qfP^$&!!b4}X$QwOA}=v_w58g-%ku}u#hz0=!=OJ4`O8x__&vi5pu9_oLM zI*jpd8(WF2yjH037lFpf6TFNVWo|ROo^eP}2;1A4J^$K*BNeU0C&#DQw6?*1oRTWE z>z{9D=$y=`KRs4C4x)YQ8QS}017$_)wEw(LFS*fp;FE9yCCzp>>Ct`5!P(KZw$2@t zH@EVVhc}FtfB1&I6_J8xG{EAkrDlJ-1oTVn_fBi7G>Wc6hDu5p#glc~m@DG&^y9;y zPfS~W6bPws`CB4z@pDA|XFQRilfPw}Rn?u+sE zIUBr4(<9P@z8;}!*+>hyoF;$Y0f`+q3R|AVz3>9pF#$RD36v{$s+tClVW>wd&1r7Q z_$vC>;|oyvQn}*`bylB)QU1~i&Ix^r+YsluyiE3=k!%oBIxB+DiBSfLR2?6GLP}_k z=Yu@2cZw6{XJy(p|IFlR^`ByANV#}=@6+54K96o$GZ{!+bk4;mCg6X_Iey~S)Ry$t zi}afKjjWrJ)3nyds#Yi0aMzO>LR;P%bT3!P2(Z6MyD+1RQoYUh!P!PLtcMF%ENRmq z`lyqWzr_DxrUb{Bg0Zn6wG8K=r7l;ORUUm&>Y!R2w6a>jX7Sp2RZUHdMv>`uK}lGw z)37BZe5}5!L#BioDLsD>lVOY5kE}kpYIo-Hkv`@|GY~D9v8vFOHkKOoW!#DQsd44e zH(B~|Qb5WgVSOj7`D90<<()=;SoXtLf<`6k7VTqd>dynl#l7-4g-oxhfvAjukqhxv z^)hF-7lQaBP<&g}7U>~*IVXgni#28rT~BQ7)XROmhyr^RbzOgv&r6aGYDy+A;R6~; zaq)f`BRo=Z0icyrdT2!NPbps_5~1812M(bePwKdIi0{G0qk5&gRRh17)nx6e8COs@+g!FawjY&;5*k;_iFb9B@AdK@X9m$dsJD6UNE!yF$dOh&4 zx;qDNg2+s<))s%T;$T(szGElmyLLp0`%u=g5Y2$SAM;oKS=#W2BA(VV1TL%fPq)w( zdQ2U4Iu)}0Qnme0m7kD%?cVV`w?%rEwcmf1VWzTUfd=7;L3b z*4TAp%3Xg_Nnh1FW@W_QkMjsjU*DFuHpm&^`NCguVZWnALfR@$5&ZbcIBSd~)S37V zUe|P`o%u&lM=E*Q45=1VLG%XsRbaNr-@=Wpder82SM$0(q=bxg{U=q z0*k^?vTj+zlEn;|Qlm_^Cfv6OxVQ%CYS?5^&a8h+pAX+1nb)O;gte)IWmoISBdly{68NmM*c~ZSJX{-N?ByiC55)Any}0D)^OqOHG5y$wA(Y z`OTTZtql_2p#a$wIi06QQ+3KqLeAeDfc8%VT5c2EXjYrxs-KNw>Eq?(@1FaB$2p-~6p}eV zJj#sy7!g5nbqBV(?#1d=t6tK-E((5|!T0FWa688*ov+l@j#&HzN9{~vBT0X;%5Ot- z8S|0r#aONSxAG>q`PHj}E0_NF<+Uwk>4wD-tonX7k59O1vD?kePe6kAEO`A>&P} zV*XtTe9K@xL!>m|F@n9D%-(;a&B@dk9H}`kd6~W-PvNi?u29`Tt1fMQuh{2bW__wKt$!Xo4i^t z@TIJ(zco?u)^a6^rHg+zCGb`oRW9+kwEePWU1Tyx#+4Qolq^4Y7 zF*1$iVoxf1SLziej)(3&WRf!AYw zB9qv^`H&kDE9-=}cM54xR*#}_gi?P7t~Nef*m)`KhggbF-R@(*X{q{pIApk;(q|J{$pI1!AAiT0XdiNSOOKdKXn3u9Rf2smr)u76t~ur z0x=;1FffF+&Uu5`uIHN+W_a(jXxr-5^MV5)x99BF%q{bI$*F?p^ENHEVtI z?Y*D9-@V`cJRgurN1s>T25AjbK_XDRU_OupKv7duRTKaM3G#tJ0)#-I0UYH7`|BnI z8o}J$;YftU{{kqw!G9nqv`-0wLgO@%2!NW0696m-0E5(Hg`IDdHnUT~B>Ko8~)bMu7R z0DcV&(1JL_{!GS42m~0|!`=V*^^vwHFNhlqfOa^+p)iCyI>Q5D19JnQ4+rS0Y5=rd zV2D3pjXwY$z~8$8fce1xF84S4S0Om!cQOPDMLN4c5I%5(9l#du1OsTRXz-!DQ9J+$ z!sZtc;^dA*=YK;yA#f*%H5%}{a|l31UKapC5BPUHcc>fO1?A4?4tM%BBLA;4=v!7s z*eD{MonZ)+JK?YXl;CbKDEiuc`2TFy5rOnV`296(;RqYsUqjeT;0ukr>yF0kK0@P98idV&By7o-co7Ci(k0B#FI z{}KARLp)&sl$!@E!0&$t{%H|{!2laL6a}z`*})Nn|EZ34!)*W9=;gb?y#Zz*H21&& z(68UW-yWmsWrIXG`TPg|d%yhJCaUU6>fC=O{&!440qG6!;{^kF1%yEWFjy1}5JkTP z{IiM<1b_aw3($X3RS~vG02uVATl6*kt7Ff<1mO594o<*7i)kUztc3wM{zGzekT3{} zet`eKss20V|HklNRsLTj|L=xWJe-_hyVJvptC@r|B9jY1$9J!Kitv0{1bw>qs4~$y~bZQ3@xXB_Mwb`B5i)@PC!@$ z0C97J_zPOpOrbMUZOJF1y-?eXwy<~J$?0M`p9p!hOyR1=!BP1<(nO&b;8um z3FbtS-%onxDUt?^9OGn#`x1q2-55Fy(SLV85Xjotb?XC3{MoBJXOg_w$ct1&)xw&! zT0c}4Wol5;iyQ5%=%E^|`wZ5EkEz+SSDfRYevL7YOwmebR+nl$BTV$FxVzLl(6>O^ z#n2udtmYZAw$J(uMXD^>N3SG=S7Ee}OMIDK=((MK&(Hb+nZiR(vvJO(qJ*`KZhzx# zoWSsk0q6DDb&ofa9YGG;C6}4Y98!Fk_050lCg-gdzMSVb-pfSZkXxI>M zgnX{1=1fzb*e%Og@)hcddD+=>qSuj6teQ9+pS#O_`*7 z{0yyLKh+BiD8R^!a^Sn3`F|ZDD$|&9)rDy8Dsq3KMF0m_AzD|D4f(bqG|=X4iFw-7 zxq4A-VBQ4uVY_wS{wT^yI(#!60hhJO7C4z@aI1)lDMi-TxUaa%3SvuM7(E5(e&8+akY@l*csU5wx|94*jx6cf^Q>&j8 zI-%!wspHbG5^reazM9{Qv$Fu)jL<6!9br5Wr(PFGpTk^alK(V!QVUZ}#t=2c^b)qG zALKT)(psdwC_YG#x_|HLH?!Jv7Iat`7re`#96^7N0w*Dq{H6NE)wWod&%o9U^IVT% z&NTsdM(@ixiL#c^z+5wOS&U24O#gmoNvTCm{<$eT$n%{&BBXsLVVZ=o=TL3`0`tw= zY7$O|)SPkM=FQm4;t8+1^c*HwV`Q{s4c?534!Ov~YE8UY=YI!}Om4(=J+W+DuQx;$ z&5DKkGG7@#X3n)v0!L*+wJxJnulRwy-(S%$VqC}&*ED9Z4W7JfZpt(pPP)L>C_Kfk zH68B%z|=;f!PiQxybQCNK zMw@BD`{<$l<9~#+s|d|bn^Cq(FI(i()w)MDmfmUav~%k|ojyPsB`pKt(_+3>ugIl( zpEW-t(_f4vBDyqS@4UC$CO5LL z@k4X&8Z*+h2xxWOUTAQpyaD*FJT(5>u2r+2XSFVk+8K;n4~~c z0P6ug6?F$GA+{ogDvmqk%R zyxuRg)qnl@Xgky%rT~Z2MED$jhCPJilw9rS$T-=3XS<&Dsw~)x2%GSKCah>o$C(?G z5|ST$ei$)4Et2LLa7LyXm3G(L3X`WATbYgJ{>uv1I5qvW;sh=G+~vy(q8^*s-gK;#lRgtg zo=ARHvUoZ@Fc*W_}ROT$q&x49?c z3V-7wOP{nI5r4H1B6`n5l{&&4%94s;s%!a?KWN~p+N#LPRV79&dgXS?IM_&APboqj zW|Sw_5TJSK43gSr*wO~5!`9df;bj5Qd$ei{f;!sC+OHG@krY`yTgKL|H{8O+-k-62 z3@K;bW#q{hwfV5D-!()kFxhBQbhfCgPk&?QFxBc!otfv}hH zY7B|c06J7iE!$#`JELfMQl};9_Z32Pqz4Kf3{42hgT9bP3aUOzGbF>FJeA#fuwX;w zi9N^hf!=z;Ej+0Dyw)O?EK2;e0T!aU!x_PHy%b+|uVZ!MaErUt*?nE2WIYrMlz(n$ zNQK?f8%EF9m>A_hFK^L=pbWzlM$|kX>~ar%2w61kNg(tFZA#&cs^^V|b?>mLV<5-| zE$auaDvRghR-36p7&_{uce|V!wPy9p@FW_HaiuyZB%(+pkmrfuTVhdDnyIfZ;Oq)N z1Y1N_??YfFH6OG zTpF!-iSc#QCy_uK00z6l3CYRbXLDur^fHBU3zMjTrr(GN}bgMzki7ek;rE_ zZkhKL!HyDcd$Ar~jgLHk^NY;!Zsq+|}O~%ke z9sG%R&d{d?MnA7~zaE50!ZAzW_B>r~cTt(m^NUgjVw{`9$)%VTC+;$@N0Qo4ik?8} zqgS^q09|{3X0^1TQ zIcq*1aO2tW;tbAG56)I`MLI7Ba3mTMC){csHSKzCXffU|L&*IhUw`esicJ#rD6q9A zs+3`9LqfXmo1L;|^eRS`$Bk~Hi%~G83!A8!xa&NrE>iXT)n%PgGETgvz+*^P{28E~ z1B0>bayjVAzsh!&e?=wUt>g^<1&N-K=jC&Y<0G8?astegA^)yo-WM)2-Vb)K_OMGy zVzcl9W!dpIqV3vzXMZT2s*94sPxrTYUa!%O)UY%Zq&LdHQ&cHSOEz_W6=rdJM=pks ztYF4{swrVlhR&AhG5yT68tLotPl|URTvd8dH*HSpQpSz@D8@IJ8@ta^ekJOxTw#l> z4pudwBUKp=Qrm5X4IYtvi)G`jhOrvG9(4p#RTFeAQ0^vsI)Aa8u!|gI+>WjhJ57ov zdbrpsA2K7F@#b+Qd^&#}{1*J7m>6){LJ4Rd>lE-=% z^UKSpO;!l2i{fbE*-*4?tID_Wuc-T92B6&cluF| zVL-^2WN{AM`r@mSAS;$54Nov=zks4WqfQkvC5DqzN)vTfK~MkunTyV6UAH>L4*1)& zz8S~It_n{W+47%~N0eW^dSPC#V_<9^z}_TG+_QBT(0@CpnC+Vt50l#CX#7m^0hiw0 zF*olU@&K<^oGJ8lMwZ+=bSz~>x$Z^X-7>Q_%+8g>S0@c>GHgrCkqRLP1l0P_^y#Q$ zn)?F*fx=3`YtBlB$<6i?o9cmJO-{$2{TX~tofCW@FTWG1KWZDdA@v&CazPcCv}|z4 z(*DDueSa0^L9F9pN_boI!gGdq;r)trRZf88B?ugc&5<3{vX@$yvU4YXuhP>r0_iBu zHZUW2QbS%YEHGozE9Q1N9Ju*dWCP5lOof$<{U+SRG4#&!`Cgk_R=n=UUu&ORZQ_`Z zN3-`_Zw~IZFs-Q6PL8G7R*5MzOxezcbuAQfaDQUdRHQNM#x4P^$KpXgQjzR@0W(}`hYUVn-j8GLApzZDpM8YYpagOF7AX;M3FCn&By&~ zzVk{%ts~lccM|Jv}K3z7$J9(>p zeU!KO?=((I`sBTQbJaBlqxDtMNc91}INpfS*gLZ;*P6?EpHFpxz@?_ZDQHorK4IBv zEj>G)vTTzeiy(erQN@Y7qEC8Htgm_C5leBcygg^tmK1Hd`4m+&&ARy;w#2z)eSgoU zlWQQIdW!B=)CxOb{Y_vM-W9Eocr0tnWGux)e5HPnsgFG;$H0cy zlwUJAsch=rpx67kA7_NHeg;u)8ytFL#wWQytT{wRdn06Lp_U^Kx#xtB=Ua>>?WK8h zLpUxido4<07$vOyhGh$G6xs|g@TT$Da+)x2tt}j%Ok5Mpia+dfH552JvC5>H3l+@jeOuIx68(8z^e*n{<@2 z>+qziW6#je)U`QuZFeI+PQRT#xpr~ic$i$uc5(x*-8{4_lW(FPr?Dr%+$|$s!5W#x zAn|#>O!8~stu%mDf+L}_Fn^IsWjiK4wSt3F2C2VN@btMB&V=8hmY% zPl#ps*R?lz{9cPL-Ov1f?2l|)jlK_fpOGpgSjVW+Ufn6kF@eJaJxZceWgaP&&3+>d z*_T^*R%_EUpiCc-5vvoa%caM~Iz0h>d)YoWOGMhC8a{J}H=!#dX!l5GY={{b#oR76 zo&8d+(dXqx51)l*Du3ab)qKVAgk1a=Zn$+`4Xx|@Xj?}glt%fEwYy0bNe(E?GVdY9 zK_7SA{RHYeX+`xUy+8_$=r8`~_g$U5^0S}aNKzhp@bUnMKW5`nI?*xfA~}P3YEM2e zy?vYi{S8LuJOSyQtB2`vgN;YJ5^wrnF_7Q+2AcX_uk;1HvVWp3(T&F~eaUe=6R{O) z^7AfHX>FC@*BM@OxG=L*L1huZ2j-sUX_On)Q6uQ~5boex+%SQ?`=tQP9EF$?8OWR77Hgbc&-jyGBZLR7o&inWF* z_ow_O2yQQZA+zP%$z&vz{H59La1g!l4y+6MtZ1#0Ed1Tc!na0fkG+-|+CQ zZ3IRa4H_jPZBN3We3E(XAHO$5-KK|}@kdv<0Q)uqor+%H%oA{VFjH#|*`JA|@~mDK z&_$Aqbbra$m2t2=)*~(aL2J`SE9)qKOy|^@q>YV^^ za}U%V!hc8e+zMIarxk+3c|rr*_pl>-_l+_>Nr8QZ>fD+slv64>G@MDUk4qeIo;S;r zLP)|Zd@hAo;TP)b_TlA*C3PqVTc15F6S8CZ#e&Ks>S^vD)drKqHq_>m2-g$cvg7Nl8ti8snaIynVq zA9UevHV~O3z)DZw{2Z3DocE=TfY!UO#D~93zvg7l8Y`%hl%!ZYAxrWXye`oR<#PzC zUH=L8`+lkV3P5@i=fXmtL;{t8>&$E8m}(@GTDVlh%Jbgd+EDNwua)!R5gNf@;o@r6 zF@F^xC|Su$EAI;$Iq_Msn=z0nJw9bUH7iTLXOiTn1l~kZ?8~Z`dtL#m2K}ycr<=wd zzGS9dZ&HLa_X`326u14bj_kTibf_EQQH#*Q|8)gLOxAcy_ey2JbyN9VZ80tb-7=ntMr&Uqw|TJ*b|Ny%-4^` zuMD#&gxk~AnK8$Ol?<+r2;nKI9<**u&zw|v9QLIu0!^rOZM_x0Hor8HxP6of{Nxn$ zvj4s7V8iV7*bXA+ZW1BgR%=5WaEcRpZfHxQ6xCeo^p9!2$PLw7X$di@5 z$!{JRIJ=ZR7;t4;^Trd}n zCcTcoKk7uzlDUk6E3d~`JPwCs>J&!`7+XC9Up(7BQ>|+P0eyR;iQSBMh?C~yh`~G%7VqI|O zb6kn-usyC_O7c1%5Ycv9!1vVc-CNhiN{@Nanay99QY@4ub~T+%^hN1=F@G=&*~;n3 z)`AK%uy;i2>{m}aY@a4Xp0&`*Id|81z|1N;i6g;*d?pokYY}q$uQ$FGIqE(f*CI1& z-qAg8i-8ynSc_qFklB2LbC1}DRHLg3@fSyfDO+eC`EpV3dpb^$Bi zlYttSUX*d)7gLD$NmjCpQ{Cbys}B3^ddn*P}F1 z`5mzY9idCfb80uP`h|59N|6Ju)v>W!AG{m=1!J|UQiy2pxH=l9Cx4w5Q++Nx`C|Br zZ0dnqep?n!G)B!p>v&W1_>jfd*zc)T#8o<)a13lRE~;dY0liSi&#I4^!Anf#vq$_~ zkLqEfhT_Tr`t23>3Dt5`>9`3}+Et0SHF$%HXyuJP(*yp!v>QrM z_4k)v-3$T>myfsmusqG`T0gttCBPS8lNnjj65?}aB#goA$lYy@ zpCsdY9Nw=dSZ&Q$>g2tg;Z#`zX3d<7cEjXyhVRWxn}6CiMdNo`9lgY2oJ7rlBZ-q_ zZ7cdVK~`V%XSQ%#KaX9-bhj$LU}MQD01GcfTHc5{==gNqf2zGTvPUOwoKVMkxNOc9 zjOC)~R+(5euX^P*WX)Nrw4L|^OUyD-`E1#qE-ew4;HK@C=UCC`gb|~MHuMH9&C-?(P)#QnU~tNC+Xg zyA*eKio09!LMc+bKyhzraV>>M&pG#;bMODJ_1?-_Nxu1JX3xz2W;4)g>TpO~IlTrc zI6>eX+?+rWfUKG}HxB>^gj-Mq2n6r|fx`cBbb^Thjd?L zfo*KzkH`GyFM!#S1;8yVEXe*xI6&GF1Or=IKmckMa9fb$b9n@VjAvx`iX?&(1h87y!Dq zV3$AbI!@MbcMBK@@Mv%VTY?}ij}fjAD-aCucsM{uSrwoG1wsCFR{hg~9q`v|0NkA1 zf2aE^`gbBQVhIC7;VzsmV29r=a{W&8IAwW=m8_GaBM1U_!T4RD z92f?&d>p$c*Pl0Q4{>sbc>e{g!4NC!-%VJ#Lb>!HU}sm5vfN)Tk0y+NY&IY`fFB41 z3JUW9K+XV=hovpo@ASHVo>0&qB=>LgV+X$8P$wwB`mqU+FW4IN_=Dl?V&Mh?z+tW+ zU+;et|BW!XxdB#SOE};)$Oa6-_$T|L8D#w@e!P4b*aPqi_^3T@0Py$c?|&wb^0IP* zIC%c!{>S}tY3RtwD9Et=+40|;jEs{9z?*}Y55U30&kYb35&{T+@&f_B|D8qC0{mAM zz<)xOA=XX+;XjLgoYH>^cKhr8ng7}i7Qlb!Qg?b3EeOE;kH(FG{6NdcFYfaBiO<7FNa6Xy22mzujcf)1(5%BH30p&vuYqK zu&d+$vdVCa$32jLhS)g#Jw~vL0@wp&r3r>x+Wsk)Kka(Im&^eS0ckq9fPcR#01j>- z@PD|+&9bzAd^ubm75N7RdR(0UK2jcH>16eL!+7`w02VNqg(n8^QAj-e`~Yw6$5pff zdHkVa02e333H}%Ycx=xXVC@9M_Wv_oKd2GuI1p71kzXomT3WGg9 zHGiza<1PGu2mkS|fj}N0ON_;NCri-~yM~ai>pE!)caEJ2@fn64gLD=S??qU*>n%1~ z3QKKv&>HMgI^{z@?w2ij<_oDMnqS`E+MCeAJCd|IfBM{+C1_9WbYgt|MEriT_?vX& z5EVKlhpyDF&o5^m{Xl!c-Fc$bx|!N$_&h`Yx(9Fw^n_L;qQ)U~f+2dAct z43i>%%w(io$b`yoqSrc<5*w!d~^*GL3EXgCNq@@r!X@ATc~ zHG1u%F%vZyvW9Eh5~VcKKnD23sSxuT8L=aZc5H_4Vn|kvhb>n|R|uQigt5)#soJ{( zHf^#S+yf6*bZI|)@fcB_JyG$Rj&M8JVs#*YJU+L~a(dshJMLoTNM?$d!qD6tB)(tQ zk&-8e$wu*pxG{&y^-{Q<0);$=J|#Odzn!;P6LZ+iq+#b9CQDZBe&>)o#&yKd*Db;d zy^06v+Uk6vY`kK0CA7HMn^vUojd53E#ZMa|a;x~^8!8d8_sn61X9m^%XXEeAj!cSw zIDlfD6*f9DI9Tcq$pl8Z8u6+}GX=5y6sE#W1BCY?r7t>IQG9+VU<8Fccn?GZmcj!n z=H=Pf$Z~%=cOj8TblU+<(>%VVHfRmqGZ_vXeD^;HjqC!GVSNxK^ECRPc>!;GvQ>yg zEb&nP`3rQ9nmbTOzYftiZdl}P?`nmA#hDe*c5uPl-(SoTb&kjV`&eG;Z5UCg4gY&T zts zGjZp;1fH3y%efV`MCamWb1Dut=|H+XjE;U3ClY(jWc}pK(Rq`kc22_*wk-C4p*8x4 z+b_)-+W>koZe@B6vmKX};?BVlg)1A^x`D0l#IM)wmf7H_Vb>2yi3P_$pXE7fRc;bkrJTA`lkX_^d35T4*7( z!z7oDG(|^a2rN1oZOgo2`#Nd0Vj^>pN;v&YayZeZ)WWmnNcwHVl<9VBg*j^6g)ng@ zKj#5Bg)KPxoeGLaEtW`M(e9VYqnEzgdy_W9JHmdopAO&$4tlplUbGc|CQRWl$)A#} z)--F^KJjyxQ_O|(=Zbyrd!$f0vG5@FS$tLIUl2i)kK45K^sd@Y2^fcgT^(fv@j*Y^bx-6tp^-R(mK42QCqB<;;|vn*k9%( z4AmVJOd`E)ai2``XOV12E|Gn@mY=Hsno!Vm(>^P={6a;v%JLb8dT%o8*|WtMMatf{ z#p{bcS&6d))De2c50>LKYlZvRAIcnN{Wp>Xrfo9?P+p<)EUqu@H zbm-FbVPMf8Zo_sw?pUbIp~A-(XY8`T*sCHwSBV{PNe?ljDjI7@%s}ys^g%7FEdE+xo^DfNIr^p%e}k+O?Z z9PtNWoW?wN+Lj4_S~b1J=8@tyZs;4}CXXv@V&)k(G1CoSp_oRK@ z#?u3sYiQj|DK$t`tLub;IfEoQj+PMBxw|5-4OPIsXcwkc32NIHhfyc=aq@PaUsy?c z8)p};y#kwm>9X^07|4fS>RvEupGOaq+f5_nIn8rZsZ~IHRqx~25RQ{XH13}sz zg7;?fW@2}U5QskTwZ%47s$gJ;$Y8x08+l&&(qgVoi3nXf!QTc*tgMwxb|$teikkM* z%}4CJ0NSkL;fgmW_iqBEvcvTvVwznI&z>SDDp*OZ&&4&VszYk%f=)yFJf zeJHI$%j+V70%Dae{Q9M63=75RzG6h)rAd7%+Of&uV4Y^NGCMbbSN9=rH!3~Q9g{?7ETd2 zA;~MkQvzQ+S@dM2P{^Ql7rS((Il}&4*Qvm%HiPX=TD~EgDGh|&zD}%>bQ>gisXoD` zlJ^R?v%C9Eo`N5BS^s+CLFHCoXGnAS_kHYV{L3L9y{ zvM@p(!qhdsk}lDESRkN}YUt)Z)!*UhWNxKZe`#(tdgp1lhTdI9Yf|gA@I`8Yvn8PX zh6s!QdnCdnM_iJeY7@U1Y*A_FpxW6csI-=g8n#y&gu8DuUaQHF^u_~FW%acuwbvtm zR{EFax1sdWj>&?;yO&lg%pt5Ixz|oHR^}0fh0B|@F$5T^vxxa zfA1Y^7(dK_%F?QF_ETT;TMcgV?n%`B^!GVmCee0 z|BVWlZH&21Ef#&QYf1B`{+mP%Xu;?(+)~!OV=jLam=!zN5Ktq;U-eR&d5GyCF@jqq z6O#ptyp|w&Mtl?^DG!Z}-LP=RD~vL(f4%w2#PZRMZ;|Sq?~9iOwQS8+^Ae_(tNL#Q z-s1!1jo!oAM}83!kg-&OFOfn101cYP>X|%#2;N%?u#gP@J?rlKkTj2VNVgPCpZrfG zIn4)&j(pH_LgkC)L(?|MVy^|}%L)mi>w-di`t=%j$v)`7M$^N1(!j3`cykUhf7Nm? ztr<6ne)P5!l=!aX})1Iq7cpS*qF0>c9-s`nVGL!~2A`B3#-OkRuH zBp_19aHxvxMPG3dRV~$wK?y8Ar#{6I+4{uoaWkBJI6Jte~*+GDA{6( zONu>zO^7ACoHm>xDA>SZKD_w+No}>7+Zx(es;|U8jiHP#gV7UMH3EjTgEsUKtI6Tns7LGy~=n9m$(qHWIPu{lO6 zp1&g$D8pS}9)FEy2}`GGKV42RAm_&Rm!?~T7#5D5a5p1%@`XYY0$)(|X~=RAt4o(} zhzpb0@QZ&pF!dN8V@B}^Y#Mx6%9Z!0uIpQZ3z6XZs^^{0E62)>e}*I{rbqTvW|q+O z&<4hnen47937|9aMQl+Z>>27!Sd`Z#;2Ck$28*G;?T7JN5Cez54bf6tZzc}!qjW~; zWHTBNdFxZmBh;WSn>{?Mz+N9LZRSeLFtEf3e73`#^qD`;GeM}4f(xr-9#y|%tG4uf zv9x{QG%zR!m(^6kf0vwwUJ^@_VmG!efCKgJ$S;-Lalp^+I5|7>%=_%(3p1i+cMoB&TEhf!Hd+F-y8Ixm8~|1RNG<%G z?_95JUnK zytZ?6zzB=V%HXefvddUsB4CBLHb*zg+Zv>3d^2cMVeAt1VnwGyca zXe*{&jy8Q6e+zeWT-|OYVYs*%=*(-JCN!xM*Oc`Qx%*O~D^(fSe>P_K^pPP(z?`BAE6&mEJDnJy z58=M7$9t!q60mx7zzZpLsr2Y?gy~n-wS(I$H^Drsb;bSQd02tq6iOHaWg&q_)YLd% ziQt>>LLXbdhXmAzj}-FT`^|~mcjw5tL+L6-?M~{XpWIfXPnhdy8@IfCf?dx!?XJE~ z@=LZpf5Cpolc3UX)m4f9fLRE8QeChS;D)otrA$JNX(PIy1XQyo_x_ytQ-PNXJt-zw z$6W~m^_8m!en-3gcJ6txZDCy;98i`m%_}K?8Oy1Snl_; zr*3R>>q3pB;!N>^$KE5ChU9|~K=vo@yOK^`ji*_yU!E#&x~j`4;V>N{HXg^44CxzG5Jl4(3e18s4Li@cfBb!2 zu06+dGQTq~`wDYMe(whMZo4d|M+~A~xuQhwo|Ej=xeOO6KJ$z)E+&yZRYAyS31nRB zbySOFpm?&CKh}emY5YXGr|;9)sUTFgD!)jz6u(48rX6^3iFc8u?RQh;_#hw}99xa< zrn$*NpjdmiwWCSOfYV@Y!Vsqce-HGJYv0)-b+GP|wny76z?b+ipBK8(Oyk=k6=62n z+OYM2QhsJY$hcR=fw1B}*i9{s81@`DIw)qA;Wk#-(pVFV zPLY{z6>Dg-;^x;ybJ)fq%7@-Q!jx%T1h3F1l+k%$>#jcjk1T0fFf6?Gv)?d8D%>b{HvxO&eDB$+W$u#I5ln z4^mmKZS161l9)WgU(0A(iPdhEm`=yC&(Puw6u8apIDW=dp-re~6|1S|(rG{%=|>V* z8x!_5q%I;BJtG`Cr-h{jFGx}kQ@coR{tK2Eh$lS zkq-_2@rykP{^>WI{LC*lZi!|j*wDg)+4wp==cLMrR#9?dKgrDfc=eK|ttuB__A*Vy(5 z9+pu#84vnJvwgx{rf6&u4k5P8f@GhEmp`Lji9qaJTmiN%T z5POMO2a|z!g+Rvz4pl__uePD@S&l&m%nZb>0hncn-Tu^El`(o^Z`aNv_!4+Cg0Nkn3rkiTYwp4oMfA+skIH%bX5ZanOQCendIz$5Hcj9fw|%1X4Vx_GOl9_M z==A}*Tt37y)lTc8$O{h<{5ZHIrt6{APwl5S^sgxE;GaTe;~sHsIl&LEQgE-Lf1Ym~ zLIK|AGKDTJ)2Eh)MfA8z_B{11#y^H%8i(MM2BiD+d`v$*GTB)5x9ii@da-mp(0wy2 z%Z8IE3Dcj7R4NF_=>>5Ude)Bdubu9nhN$q&-13rrpIVtn0xvPlZ;v=>Q7D~$`he`b zo`Zhz=EPwXDu{7Y`X+bh4O9M^f3eT^A8i=%d~J!)4)>ofzE2!G3=uUX#HR^#>q?$c& zhuH)1py>D1z&v-*iOp5F*SeJCAb=~V_=$g;FU z?|Aj}#$goOr*q0omES36NN-O|$_#tWtF;#Cdas8dgz?F-7pExc3QntyoHxMOaCaPw zhWcyFv-6joWC9J*5qedA)aKpqEo(icyQnhMCGzCMbXrF5&R}UnZQKbMc`r|5<;^=( zjnX;jnzfT`jdy|9xnai-f8q1qa^_5f=}1yrB_JWeyd0YLLoMB&)PUAWj87U|G|%-P z)`s&^L$)rl$y8R-(Tsc{&q$cTQkYsl2!ANTj(Y z><=I2AIyud@BwV@fANZixzEZa>u|FRV6t4LFRS}sBcN{42D*ogJHGuf_<_V1+#stS z4gi?g-3_;Jv+x;DUX}=wZolhgon$SK{g{kf-@cqYqcr=>4Azjni3v4p9);7#y`inhu*g{=(rLGs0pWUm;?7jX%)+`Fi^ zNpDtAC3t_d@vlp^oO7VAh7h=7CVS*pe$43ZE^hW`dUc-6CzqA#+Orub=9Z6iD&r=? zNsc|4e?k)fRT2^6X=LSVp0l1E(kS-|Y16B}P)3O1ZI!{-kh%yy+xSpV9- zfGItK&XQ$445SQl`YNh#Q6;zAFO&J%w8Eu)hN%<}f;O`qr0#zyA1W1b&uRwTr)4ug z@tqk;V&#AS0ZOGBwm&6#wO_}Iz`Ai_c)S;96AF~excZq;hwE+ctkchoQhdL^-TA9) zf24(k-3{^3vd|_pbA0=< z7nON%0qRBZ84@T|QKfxrq1AxQFV~W!e}Z^EWxlK3qj+r19rCFHmok}szhLVgX2F(( z;U^K=S?uc12fE0yKN?zhDiMz!&u=sn5{z(ZBpMsYfPH6S`9M%+TzkNi8G_2sSzvu5 zSIqcgr!21kuRtpKAu}ycqA{)-x6dBBhnPJFS>rhl?Uz;#khiNRIfllR1t2T{?n>hKlZp+xhv9_#z_!C_D!&pjJ21x}p2( zdiafvRC?y8B8F80P*DLO|DZnmFjgdL!$GYsJB~omzhNWfy;cRa>S)TX`Dop(5l)HRcQ7=HY|G8FyQ zO;u7_K^(}UL{TX=$lMv1Ev^O;(ei>x%8WcI?&anyeka2ZMS)2T48x|mg`ut~Mm|`D zu$&(gr(mEl-0Qsn`vw6w6nC;^2C4t(fUl29hT+eQ0Ev z-+b7Cmo*M`9ts?Gds?nB27P?xSDtx{%nPfm<#)r1?Q$VDr4^T~J6Y?XMt2!7X)hqi zwy~O~6PL>SQ1cr}Z-h}f{ELelyI6P-KxA~hP-rgEktSN) z^LZpz%_Qo58pA0Vf4JE*$74$Kh92Ky2~8jCptO!eU2XY$M2y$F8uyf9fFv_Ws33V_ww+u_j@X z$fiEcuSCr0Us9!&;^M6|tD!8S*F094fM=Ii!WZiI8R{yOT^QOh$30DhNzeXn&#Uo8 zmiB_AzD-cLwdiz1Qkc>Sm{7ya$#r&}xveD4YD=~^&RVoNN$aDk24|d!{jxd1y29qf zJ6WQMa3`|zf7SaV4KwF?iWDB!A)7!fM<>glcVe0)!?%veiys%rMePXtl{AAC#L1K+ zH$V9Pk^u}d3McfH8%f#r>n;rqa81RgmQSw685W6=oG~x6It$Fhe>Mm4-F`PYKb&+?DFI zo!RT3ns^5^@^0Jleq)~LIVj%^vP-4`<2?5WyVWx1{jT$hWhI4>`~j)t&vs9jXFZX# z^_i!x6c;!?4IaM`Bryc^Mw7~MQKpVgSWa#gj*LC5A+mVZqivo9_ugX9%cy-dmxCsE z&DpmnElk8QT6oT--r~mmzip z69F)n?^psAw=7r#d>jEVmr)u76cRBtG%*Sm}{956mxB+e~m@~H9TE_5MdxhObQ|{1qK6! zz+lP$7^2;!fJ#s=gdI>@5U7Dh!94(+ifC6~cZ7o@<~qxNjzDf04-g_LDbD}f9Vm~4 zyCYyw6i^$AafBnUGs2)QKtnVP0mu0MD+KpFM-0YQ3Iy`@_7;R9Jp|G24l+FaKyL)b z5oiGSe}KDt!R>&*+6C%Bk?`M*2?98QMve%NKg5P;dyF^K9S*z}xFBF~l*hG$C&~`) z4!q6{G*s6D>bk;Fe;8~1VZaakb2LDRAmp!be|rB4gh2gvhQeTIq$?EVi$FO5?GY|; zpstFRAjSv74}_xZei=etJkZzvP%kLL1!{Y3fAG6-C{RUS9|*nf@6YZ$VD1Q4jEA5H z!sSD4CBZL2mpZq?GP{w&=&51Kmq=ael3RE|ADV> z-W}lsd;q>C9s~&f_4(^$dCe_5G|I*IZ}Z=m3o=tS)-g5W``z$gDg_0!571vgNE|32 zBnk#XAVNYw@#{n2zoY0u5r0+z{@Yg_e`SvbO8!yo^_2cou-Bir&;93O@BsfEO9y?; zSU8aTZ-QHZMZvJ^FUbFy=D%J3f9(Dh<$odgf7hep>EiNR%l%9J|7f8|gp2Q=`fI*= zVy?NbjlSLh)PI|r!2eiRZMYr66Zzj-bqw@+2jo!>E`JRX;h}=?f!paJFfhkIf2i_@ z-1ygmxgbz*J+uen*MkBSfPlgOrMuoLnDh0c;c?B!-zxa^()>H6G75&a`?Xy{qGCX( zyF1huaDBzsNEGM~xn4s%xX*6}13`i)H0Ig`c->wg&>rm$_;sIRqCk-RFVSx#DFFo8 z{)K+k1G4)EgaASCe?TE1$o?Pjf7;jOZ+Ojc5c)4DB6*Ea|8Ry}=k@pp6a#`Vf5B^# zfH02k@W1V^+XrF1{}JyxnIGK!55d0%0`qitzkUvW6ZU#q|G~fC9yr_w4g<_gp<#C) zI#oY>dr~FOCv0-MqX^n*YvOuF$);Utp!}V1>6sH#%;uI)8Nc? z^OPXd%cnl^?pF1w=_#8VjGS84Uwb8{NqkZEK_K2Z&LXsUf-}$d`6N9XK1P6rke6!D zhkWAbc$_L{53z|wtfLV%IOQH*zuoYDWj^ZW^226A+C7xCWCfaEG9&QfBiP2wDb{I3hSQx zqggLjnORoVLx!}<+mRqrR((lh!JIa>Uug z{w5I~mAs@=YOjX($In9aNbc{fmfW09Yk{wOtwD4nn!sB!W26IDuUr!N| zjqDPi&c&jprG+t_(|bR2;vmyZAC~h>mz-0@>BiMF8)Z0|E;a(kg8|cAbE`%fS3IRb zv>fW3!&h#Le^2z(*=q!}sgg%F?)x|olXd#^Y{`9oJ296tO*W_ix-dg6X|d@bm9s%(usqUO1_< zgT#KDSAE9i-v#;DE@wBa6y$5_-kPdZscW8CqTDYyf0Fn~dNY}u)2gHeBy_*MfsUu4 zmGSwv4?VqKxEJ=ek-JR{_Du`~H>j8m9t(l#Z9d1;8)+dALDTAQ4mwe4z09twAr>YNYnHTfcwrRb(k33HQfytYk7X*E0 zlQKTDe~O)DZJVNFc;P9BySKgb#;v|4lbq5_cNb23rEudOj*0LK6okP$zrP)CE+CWz z8N{q?rOQ56s&Rw6b) zfA0G3R)uJ%7P9rXv0a8wZ4xc4$QiGmo%0o1W^+J$Ou6(Fol<613FP5?07)|r2HW$p zx{t%7sZV#w$a6k!GOMjQe6+tH@8Xj#qx9Xq3dO7r3}#s-3xEAdoM9X|iayViiz7OC zK&Cox=~K`rDp~!kE)d~b3_T<`&pioZe|z5soTawwA)>Ul%pQZM`sW*^T1U^>4>L1b z5AP)viQQ>86=2+TUx|4=oO&YjrJS5qHM{+Y_h(OZI320lm~5r!t` zg*9#(EN|+}Mi*hQ_9;afZd=aW+LDDbRxCq}JK$;q=gk6P#*ypg_7G;Yntby%&!$EHI87#(K}-i$JTieyNa$H*Cu1Z*9TAW3)YuIElMNTUbAI z=e(8SPh1J_pC6nD0AB@Ms9T!bRjg-$YirT1Yj*cFIOHk=b|2kpiKL4o=KWT}*qZ6< zy?67Hf|5ithkWGre*PpGxN>7t_ypI@3ol(zrP7+kR6Z?FedQf8Nl6W^8JrRxB5+EcU3L1?%WD z(I@7GsN6?LdKyD~8JZ4(=W)~Q0ZETZ?gkGpKQMscuFmE^O0_uz)XK@B>xNM$j?8;+ z1t)s$PtB|F4R{Mv&*!9n;W02JXJ=_BI?b0X^zak;ZW_Z@&2GC)?v1PEpAEx`R0+{} ziG{V~e?-WY`7SP3KXxJs(|F8$D#Y~BXciT;Be-224t&@)z?2$LX5Dj(dXIh~vEirl z2=_~sD!LFsKf3m?x$`+yBGnMCj(=6g?@2!cO^?wlh zg&TCokdDwJl+X%KvZMoYb5R_)LbkN`yE0o%SPyq=X${9Z~H{nCx3hQh>x{O5bx@2jjiZm~E;baZ+PSno0S ze~xG!u~%w4dxw?`_`P0B>A!C&<|AnaZL$DPX5Y9g82Mq}XRM+Qm3s9uADff8Q`ffGT| zcNbK;R?QEaGyBt#n;~Uk^e?A^hRQsfV>Mnoc`J?3LnQb5G_6d;wXU$aYd^F(t8GZQ z_XN{zDT3l|_TpO;MwEXYTe(e5((*78;?U(_1FZjG`~60pXBtu6`SN``v{9pVf4MS8 zWN{>Lj7rN~aWmBR8`&boa6%$IPcggaPk6z`{35{y@4b8qBz{jI6aLk$z?et(g3aI5 zL&z!)Pf{(#>(W^3j)(AqW)>Wg2Vs4B)Xz~ms7vW@DZ445-=&6f73*8mZf;m@VI^$`SICj@AyhhmrlvxqvJ!ZbDWsC zs5#2z(o$J~3jeobxw-npXT4o60?V8}WYo1Li=ON6v~b#u(sR?I#i6-FqJY&ghQ6OM zw$jV!ld;D)8%kjDSuxO`fHikLGq<{W7V1uWCfb~7VPkkvw!WCt69P|)f1Q}ywWLW! znBY}2Eq-?8Z$G`l2c|9?BxFO#&)wv$fRE+KV+f6 z=#GZLuA=81qDzocJbM+qe|0!HVBkFPmd5$Rugl{C=;!pAe!9bEMrn$cYlw+n(Am3h z=Ri#ctJsZT1*pG0 zvK%TY@NomJ(?bZOE}A?LMLHa|u4y43T*4mx?;V!NGn)Ug%2@o*^J(47W%o)%3?MC55cr`?L@ zrC4p9{}W^si5|TvU?S}Q@G5Pov`)IGW6Jwja5T=Nr_*3be;|z|+85G3TJ?F}{@wtO zh*z;)32Wl#whk5ixS8~=y$9QStu`}&Md3-W_LI1~;r?k`O!Pr)8JmcSA2YDen?v+! z&JIgYzt2g729}ga(YF3r9CtjdcwZq$GtInG(k-`wS(L*6lW)CncHOHfnC{zhI^ zOhLAewWk+Ee{}`7x=nMZ2>0TUFUGobYb2d)M!p5RL#?P|$0(S5A4t)yQe(3p)|6W5 z3Y>MNCc70cS&!j|mcr(WeF>(Yq)k@j&pLUp04{C`Ql8HYiLMb3VwUoeL$g~h1M8l~ zB`^$4Y?lD2XFx&JgP2*EKW+H6Dr|aff(iY$3v-hpfAUgPehiB_!H=G=if;+3OiR+2 z4C%vNJl>U6l;5+hr6uw)<$}Nm#g+?0#wGQ&*7I(-K=o8?lpb3~69i_{E}Q>Is^+Ok zkZ=tvdJskC{k36;m%E&;`N5rX&wQzVUfk#I&pdYohKORNpO)0JxhpE5JRByOjvwx2 z4LOXTe~h52OUsn~X7AZn50^uU4}AS*qL!KXsH(63<6QZTJfD~YsfZ*eZtO%#H;PrD zUzb$S?VrAwB&%expBS=EPBh!>0Gq0na*9;(Y0s(QV!XHMfunI9k0uGZ15aH-4!URG zLW2|vF0FiENx~?9z7qeZwj&3r;I5KqmC(ope|2ie7pI~Xi<=ZwxQ>lP#$!%Ig=*LX z-K7aB>RMs?Qy1}hjyxN|I>W;yb2nGYG-ZgvwU{F76;fUs-C{y1(YM4g+FRMrRsxd( zPFBrznvHvZJl?#`zCfz~p@m$rDlJ>R4bT|0hGzOf3=GJ|i(Tf>gixb;1AHX2nxeNS ze-4la38$`&Nqsug6pbw z`5R=9LRcB)HP&f4MTqXrjRuvtj89Qp3k__inAAFzHQQ^4(hl{UYc^7CV_YeNeJI-+>ZV9%w76Qr=HQl zIko)*6O2XNkDYg;`>O34;r1>JTdS>`@)`T~hxRg1Q6)tRj#9D4WfzCU*2~m7e_oMY zP#!P!Q|1*8?M0^YqMyiRI}U=H7wQ^J(7Sa z>^E@P`;!#rpmOwYRh#R)b0;#WNkHWk1sb#@LOv5H_>r!C&7iX$&5HZ@Y`t?`fP9=# zx!}mzX>DZl6B6aj_Jrx9XtC2VNGL9-V#W4R!jW=igycaqdxuII(rm7De?2HbN6GbN zx)HOHm^tV7^HDV-7{x^o#;I)IPdF!Q)`Awun?g|o0yi-iN*b^{$b6SC+%*YWgnbp6 znJU{(!qWVF@yec8e)&HlxQN==PVi8Id2Jjg^hUiLnraE~yq4zWtacxaa7C^kVZ-~k&6TXU^DvI3qJ zoxb^Wz<+w;r?3_)qjZ7#f5DDNxvzmC_bRU> zX!0UReZ!~U0VJabEZ*uZoNg&aHd?*xg=l?-3_i4o;J~7&QfyVR-92#8*2ngX7i4W3 zSkBv1pL>N>CDCB-MN%#>GrWkyIh$Rm8#=CFbpHt+om%Of8697{t45$9V4=Sn>DsEn zARJlJZx(S0&G#Ugf6wW}tK~J+H`8iT(6fFJre=btK-I19V7~^m*=uDEVxla0y!F6m za1J*Cgooqnx&lb@%0&=2$YlC4_`Ii@?p^g99dNbkZk5Ym_w*jUC$eHo!G8nE8(8N0 zvNJ*_$-mkDFjqMwTFzc4chP|?PmsmNj;*IQoQl4r!ku_|f0c5Y(Zjt-M3f=UP@v10 zrk{e&+UFV0;+4&y3Om`tYFncJFjm4n<(=;;UQ|d?rV)f zIzMgVf7ZGi`ms%s7DqiRT%rl?ArtzK(iOP^@V61%&CRhs zWtz1R_WlvgecH<(0iBiJN9{0T-(a~NR%Zc*gJUBr^X%!Exy8o=?1RY{WL(6c>fZ79 z2nQYpI|HI@1KdszvJWH(Itu5Wp`NC@3MTIYf23MAXz8v{@i5z3p_-4RuGQTmt&GUJ z$jwcrGAh~a=v#Vo$319S6Ipu6!S{tC!yP3k(p5|Vxq{@Nx42!!|B+8SD%2Vvu@@ZObMK7~faV=Q~ zf4@8Q&;7mz7!neFQ2zTo%*ITTN0DQqJj$NhNeUfzf9Y<^S^HMd6Iq!s-L9xl&Hl2DQ;N!pP8ba$ zv|yfh;~EO0bS*$UPLYCAWWH-_OeY6U$}N4cy`}u4MYh6ZQ@r)tMoz|g{U&67Fcw>5 z|68-q^ToTlSBkza6IBE%HApAIp@<*W_;&ZbW1q~Myt)#3lH#x+PZ)_CD(>v1e~_;> zJBz9R_|+@sM}c|h67Z@rhWD~U`3G)X>n!tm`}V!#g@cjyaG}h$$s#*;iI`6i(IiLg zSEpOIi8)r-3nn=OgAe}3}HozIBhsof=7j1GSdo1OoPRFsTcCEs#Yn~oLW7vT7Io)vp;yuo1mSkL(6V>FZi7U)mE5pe~#%`msT=f z%?(Crz5U4#IMEVui&X+6&KV9b6X<2Q70p(YXU;d9wS|34ccb)A$L3A$ym_b*w{c~W zoc;xm_lId+B0e33nxw&U`ax>X=RlP^*ak7uz0E{eJ@T7NabC$EFKZdrevs1>JP>&} z;hiiKU1kzUkGFFngf157e}0fYk%=z>={mE`N&JwC>;1M3fSjjR3PWK+x04ruC$OW2 zz_+IESR6BC)jH3y7#d>lV(dzK{KTab-hB$09Wv71DYc#3{HJh(ahcy+~M4Ea`9E2;U-eH|@3)MN#Wn&(` z?5)yCzD<)xwwVY2c5@=dx>vZP<-Sg)Nc3p*v320myZ#2Ie;w`RVVJG~C1ix|yLr91 zJULTLZuD#{rpT8%Y6mp?fVe*OR8T6kua&)(e>a1g#JiWgG4#j z)o}SGC&T!SvS}Pxi=DJ9rCjsj#2!(lbT`u>SY`DU!06>-5G_UY2S-;E@$Vz3H?BVv<1CsV>bJb> z;&mg&h*r279_+7zDo4E?dw9ZDM z*WPz(!~z@OugHZ6E_H7UfSEpEP?`a>v8*pP*w;+k9Nbif7{B{3n09paxHSfniIRFu z0`}7ue`|}cT3aTtk|1eQ zhMYjZEaj6gsYS(*?2W2=B-DMh1vxW+%p;SbnDgX}4Bzx>74T8<^{eyPy3>up)X?uz zPeV*KgeTW}zb)h2K4J1s$OXL1EbqC|wc0_qkK=at%~rvYN;tjT_FSiHrdmC0lS5ob zC4wdDdtQmLp(w{H9gY5H+!O1;I9nMTspb_5dwF))|#SOOHc z2$%yJBLXopm+)8u6%aHy3NK7$ZfA68G9WfIHaC}1F#{9>H#9bvVb269e~oknRFrGi zHr*)QF(@D*3`2v2bV!3p2@b;mL(IT1G)Q*{NT*1Opp=AkH%Le~NVkNb!Z+$U@A=OA z|7-pKde(ZL=f3u}_r3SMuYGf{>FD#xSs^T;$_O}$55zAZ2~g0~Hx>g32ng{D2nZ5! za2UW)4$!|~A`U|+(glWqe@p%^f&vl>Mxil9Fbd7nM8E;+t_}c@5C9}92@;bO5C8}Y z2uS=*L?9&rieNXG6+n|8ppJk;U5Gdo5Kf**n2jw8z0Kdh04@kO03;zHcK^3KK+X}0 zgh9Y?fF>Aa3w1>A2mw0)^brsk6y^D^5L{BWD3p^V5a{mi&JT8Uf8j?UZDhFb1KeRK zTYw(a1&VZoS^<6)4A25QLjP38Ps9N*u!Xt&!SxZ=D0eUt3P1x6FbEXxg7$EQTS1Wk z^yUD4H4T8a6BPc3tnr6%AMn@N06_ep|AhO?`&S?s{I@e00zo)Bf#IGoxDCJ><^Tm~ zD{JthJW%%mV7S#Uelnc?X{1jnGCt97!xjF$K z!(q;@P&LKBC}@c2AIt`d0*DAmh>8k}1E9_Ts0YLr_$$1Df2R}lw-NLUMpxkL?Syaw zSfh)8`ogTC=ns*%3)l?`Kp|bBzTW@a@b4872n4W#K~Mlos0|EG^iOm&47L8VMmHY` z^8lC%ptT1A2>g2f^Y;`jFDnGx!Sf&b@BRYy6x9v2Re1kY{2!aVJi-Iu%?AsW;NP*d z5NOpx0bKux+)O}30D^vj{=cRE+vWeJ@Ly5>Un2kSgp^$!9DbX*e%t>KGuRR4;Q1E; zEm~I;dH^&L=rMr*H}whh&(LZ@tzfQ>|7}%6fzg8?2e(0snST!?%r7AP2Zy;R!#to? zIxrN(_K#%#;E#Wenga|D)j_zxe%&o-F9Cu7vZ3b-VvoK*T+q7wZGxi5=imD(!668% zUvnlXA_@Q_kzh|E0koV1MMMDJAoM_5K|Ove835#mBT#4;0J=tBfHeY1^sB8xLI5Dz z3*r8!S!mlI7=MkrppOFPVvlZ)?SF7#2>=iVM~@T?-KM`m5CG_erXsA+_W;@l-IQOJ zf29d=MIzD0-)chF@b~)n-2jDpKp{jklL*LzV7toT#&6|vjP872hVYhFnj_+jyTV0K zoKvs7Z8h-IRmPmoVVdW{P8a@8y%pA0cAxLYwb4@_#nFY??^y0vrK_=VWZj zjHnp7?B-ppC}TGE6;!{m8Cfg^(lpi8K<)9!Ppl|d?1g+|H2tOLnrUoW|H49VW_MSL z(8=pZ9e?jd%R(vXsl3$LvIi1+=&9o~)oWcaIORpo72YJp-JvgV4CP$JcC4HLF)^{n zcG3$t0*aXI2IOGjm@4F-NX!- zl=lFTC*m{hKFPp+e-A@x({x4C;!0KXBz&Ml^bIeBa>a7iDSOGpvPS6>d5d2b?%{wr zVt-zEy?T4N{}oBJO1b{Bz`WVDIdJ~#rxRsHhSwUI&k;cU&icWbt@fu`eW!qW{!c3w?h z&dZ}L_i5Ddk_u`D0%!ARymsDutXvafT7RbUeb-WbK|%YHrvH!vTqH}bz*7)Kw%~{H zW3m{ARXv$>|N7oexohf4#*J(d*KVFC1!a6))zbJSklkr7B+I319yt=us;_W~;H;w_ z?;a|bHyL2*j>U^yR&QKmG%Pr~&8^y3_3g|VoWz(a+lt-(V2Y46Hm=aF4y*EY8GoC2 zL>hT}?L96pq>KRSIYZb(EP1i9pV`%AjWXr^DBQP4?*@$Aq$eA)22nhz5Q5rH7V_hs z)fK$z=IhtC_m|2-(ndVvyE$%KzP_w?U-|aQ65=oDM zS+pP&lZWgz1%PswI`27N#?nm$c6}y%$NYpSw+aF9w|u12@@CGupG8i4KK_}U2P2N4 z*Z6<~N!z^WtNCCLU#85$;aR~p(9jwc12#y=1j(zcN+J8;PRnu9KPYi`{ipTQVQWMF|07eN>Q84)%uELnqMDRn%zTV&*T-3>SI^Bfc+RN)i zHu6zFBQezs{S|w-@nwxV0vPFh(mzPnl6V-36TLA+aB{%^6=Z$fa`7>kG%G=!N}hb& z{hn~$hXC21WWI_gz%))jl7HY{6KTVg)$ZtRy@X?`2+Um8ytv=dAD+FC`$xyL@sc#R;YXD0t4#oOYV~&7m}1kN6R!u>2@Z zTbL_{v}gPAM@QVa`p-PK#0Z=p0Xs`#9uOblWRr8n^HGJ03rS*%N`FZKgFDmOjajoV ze>O>0(&AL@D#Fi{QIdCY`$M}V>a#doa~R}DCHve-hz#=TBcH_XGj!v=xx`lz5z|<< zTTQnddu8sk29vcO-R4MSD+7(Me_JxXcchq4!x~R7JF$AJM&yHHKcf3nDE{{w7cK`O z-AKQ6e2-cqYccrjvVTh82s}!G!bj(_6LV+%VrIC#OLMQ1Pm~FDClEum56yChhsO;_ZmO{haenT+{{Q&3Zsj$?hCM$aZJT z;2ztgk%XwyJ*jP$q@8w00#5FOSoLPIA$@lmVK$-R>b?Eam4Bg+OmCO7tA=p~N2)?X zQw-~O)RVtB-w%p?TxQY{ykMH4{<%r_5j|maHjhS%`1{q6s_{JfhXOI>$-UIyuV?3M z@O^sAl`EbZtbDOQOrm^|ESQ=#meDX3(;aqHb~loBkR_{c+rzT!S&(tSL&CRx*>Hq+ z_QW_%_d58(?SH!wEUqHNo;|CVq8x^gD~*3oA#vq9j*im4%k3;q0-3uT>6(K^qGd{h zY~=B(ry>N~obnLfZ~ROyphK>Y2@DnCdJ-f$CdK+oYSE)|;lwx%s?>+vVcwqiN7pOU z>E>^3*GQzkYe-~@TtaIiFH;C z{4oN^3{68i`B__CuTRZb55&$k_A!ix>G!ZdSgJ(y_(O#eR~~0auIx`2aiZ^)K_?#v zi;%dz&3}QBJcfq|riYt#P?xtziyj#T4brZ}DerUm&04W;WmJ_avyD7lI%L52^(~Hc zR-(B*#F$j-X_+4iezMF4yYg~resta~4}8z9Lwnu8)ay@^$p!6s^m^p|;Lp?{=42xj zpRXbNmQbyRXa1~B;pcIqyi4q+acbd($q}T=hJR_)?BUwi=TDCNCrB7Dg{-7H$lir1 z=D}!DW)`941vk%wT7YkIBI5@OV-IfS6sG$Lg1K_=4-Exp8?^{TWE4*|zFE-@xTb4~ zh2Tg&=jeIiBYZ7Qpa=ZCWVFc5j=81wIc1fP7(r{2VE;UeLy0tA^81h+8O1}a!u1gj zHh<2&oYD8mAxT2k;yIHJSKC%WKQ#3+__ps0yivY{V=+@_V%#%6S8*TRbv@|7v*3xj zv0P`VGQxf5UM4MP>@4%s?16mVOxGY;bsQpvqE0r>-C;qY_G<1 zF-c@Pn6?o1=k^9rxgj&YgTu!Zv9x%8ebjWWg{)&+kYRY+z750jO6auwRAey^-_etk5VZPOjBtVA;XoD zt3TVFQhTfAxcK}@(TNL5DH4z-2 z%wUQQKmET(9S@vmc#k95H)2k1m(4|GiUfqq4oq$_s2iuiguPd^ih)%yw zm!?4~fn-sA?K@KfXBHZG5x0f2FnP#$ubFkj))B*dQrATqYLcvggOOHg!7IAOy=W6VgyWTmjh45mR;=e3aK%@L6stt;j;-O z7V%CP-PJi>CxmshwmZj6#hqFtW!Wz&S4K%Y>?agb7g$QwZ8jl zk5qncBWpn|etzYBdgf|7?ZGi79KY)0--6E~zpxQ@ink&MYqP5x=g<{5?YfG*sTmR@ zsfo1NHSiu2iFSJa!has6LN(_;5l(p`sQp%m@Pxi#%bG61i2lO|&9kMY?|AV_+WDBJ z{^YU6Rm5S7(K>UuFW&}6sbX3_xF^E=`RMHZ$8pO22@;WZInC?49ZR3E-ha}^)VFP4 zNzJQFCU*>vkw4nKmA^1ljD>JJc<&g*Kx$R9K-rV!!cLb<&DS9 zOz2Xbvg%x~npk#*9hLha$S%=sl&;VF;9_sddv1#_%$`?Oo9qy`eCg+tp~9QU6YW7s z6+xOq&uE!<&VQv`xC@I%5)8t4xMR#*_RYBRU#}v~YY}>5=lhF;roiVFObUL23nY~% zTiE*?_Jo=>LCfB;HBLd(7<5d*rJwyaMIJ)kYonQDFPR%JGG?@W>M9?s2Q(+Q_Jl5b zD$nihfR0K?kF5*Ms|U_4z}(u84NUQR%_eMsehTX()!JNzMeQju~c8RrebYj zf;d-veUj{;W0BB*3^ ziS-=81{FPbCGyeF&W$kcC4fEKp7BB|cX->WD49P|jVcif;L5l0jnf>PnV>P`t9;M% z?b6DbYPiC5C$htQgfx6AoNT=j132SJOWPSwI)8W1AfW}VAD9GaC)Xj~a+wwNl1LMa|4pAibu$8DAX{=HeMl*(>f*+p;+r3_1MST1!5xDNqZ+P$xp_7!Krx&$3jiC1V>E4gNnr>W16FW@L$|6WZ}l3@v_JWq5Iw@ zQ`}S~`NK0ogB-R4Rr|oOpnT)uq>F81fHGUEPnf5^sH;Pd6QZz8X zX@+IO3nPRssA|F-hfB6?^@A3@I*igi^zg^~*fHP-{f)Dwb!*%#f|Dt-;&()Q5Mz-}en}F)$Obew}e!fnZN#!H^ALj1Z=MY@r!ixMsE!)-Q4D});6Ol6)93Oy?Bn+?%z{L+m!uu1h3`|KJL>bB^}MuMyYyl)fqxEhCb^np zUkhfd#N>qA3|{JFI+bT;YYxA8tk+te+==gRy%&x@$J>w;-y9A4lGM_})8Ib*HgLf6 z){y&@^aO}*Q=YOTj6251JOPN;UVx;XoBy~UG?iB9`I6`E$%#-^Q&bDxI z@2hg#NN=@yFMS*RkW>FuR_VEcUrj03+4b>^Q8>lD>d0pXS1qe6{VBzHcRC1ra190u+!$#5-GjJ#Wbu?R%u?#YD#L^yDmzKXJuW`jl)a_29cMXIN{>Ou_-eB5tCj( zy@hbiOqbpmv3K4}Hr7uZLKF)${Io&7OGHzA^8LKQgB^=$H*1OCyJ53G16cezo_`Li zm(mpb;6D@E>yX&KKQW>pZbK$NVw zsOYxCdFJ>nK}1bGTMqAgqHYW4XioBuT5U3$jG?Z!(QTcuYQk$KMgo!?7J0+c%r=Q- zy9AnBS1zzp^b5fqw)eYNWNfa_k*S13dzk^37n>_c=fwomu zI(8e)-s{g8f`5ox6ctY0EhueiPwRl?PC`&spjxI}Ngp@tsNMeV_qxZ#PqCksaU$rB zxCZTonq=_66Aq2hxT!3A-$tb)0w3Wt5iJ1^gdWz&ee$WoQsG@RkdNBV(%U$i3L+KK zo;;RYldp4VANAgFakxV{d zNwtvpmr83$EHh!0lFSsfnqY(YLX`oj_4MS|Fb(1hg_n0nZPSU|<-Zc#?s{vLh8&sp z`Bv?ng@4g&@I@q77qKANyx+W=C96}k=?D$~6r4TB&o?kq`sJxZWp_*8Ntt-=jc_^! zHPyA$usYT*pGwha=R+@omgC0ZfzqQhbAJRR`{8OJB9PqVq`JC#9)8CYx!ty9GYp+s z$!jmQ9B1$2E}{_3E-lb)5}(Ur(PN1Ea`?4Z(SJ(8Xe@)MTDfaS)obVtRsO*;!BE~B zewg2xb$A7bj=C;+>0A)g%NJ}tCUck(m!u2=3|(IHauy6HfMi1VuNb%c7>J&b%iYbj zn%Jx`TQ`@5R~d+acy58{`Y^TJZ=U-S=H1W--j{a5YfQ|Sg6)KAZ zfhx9uNyMpF;gg^rJi<>s+L`w{OExjvst9*ygdC5XL|vMtD$-cxH;uOen9TKKB>BeOMg!w8p_ zw}z1hBkLVU47qaWq#o$htCR?jU`(-B5{q`#rZVcpyWIH1S19m?Lgwl~^l)L5gt+@r z%8{<^nFC4Dbl1(xLY6GkqK3{;`iQL@esgn(FEtatOVQf`=4JEAOcj|M*^7$ngMWc1 z>Vs=%M$l8@(d03lXm6gAU3j+#^_bT|v0H00ZN>1$YvEqcxwj}?;PT0h$FqYLd*K(G zSTosuZqAP^RM` zP7xZfDo{j*Up+Ot?@yX4vhgU@;(ufws8&?Fr;^jcCSH0)=iiC^X1s%+n;Drsj!98+ z$YruQp1uZ5l{r}r@RDJtxb@J7RD+3^4kHCVP{=nd&Us3G+KIKzJM!;iQ$Mc5R?y7E$RQfP>Y|%xPgIpU-M#`b=7f5bYqczbNcYy zT2`)i(hqbi{Xy}E$0TITDdR7VgF)pm)6%;&Qywed&ugY_edR&x<=vf&MA;3t)r`W4 zAqiB1+=)-QWqDWV2(&oyr+>etb9_)fIMnb@SI1Pal-uxXeSuI3@)+!)r!x9uS2E+{(p!qyoQO?z%_C)cHl(^qHJ4SNPOI&DYAg6rI8bO8$T7Wc_hN(4rH2is!pyxbWJ zRuQKzbrC-Ou6bXB9)G@S?%Qs4#&f$Z9lY%x+|e*>Hx_>{YJ1R~_s)8+y{w`c#pE3+ zmM+0OAO-d$jbjsS_nf(tev2c7J$x=pNv0ahg;?*KfzLv2tTdg}(tX{=78T37MAs)2 zJ2oqgzOrU-`yv}yiG{t`2{kuL-&J(FI8*>CwnrUwN=ifE-iVU zrG(8{K^k+;YD*Sj9yN14bldM-Ft2F+Tw(4>>XlFHB`_ zXLM*FG%__elVJoXf9+dab5qB%e)q3fk4c?k&HZ+YN*%zMzz&yV8;%LZgD}gs5+ON~ zoIrm4{@`=n}qt6SLiMHZ;lN*_0+F%yGIY4)f4we{`fqZj1$0=PXumAdiKO zOBp?`F&>1u*T;xPXiP9>$2qVQ0`-7S)S%-)Cwl5BXcY8#-Izo?gHMx)X^$ncr5;eu zv7iCU1@bzGYD&mE4kWDB)RWKva6Y3^z=ki4H6&cnXk_#R(^yO51&c;Pj|Gl1)Ds%( zBi0J8u_31&e-}V7VaPydHbHg+*=*K?QxQ3iH+Y zOuB;Ne9q8Aa!r64(C|&LWW*Gj5Xldrf@n!1ct*?_bQ4_4lEPrx6g8YJnLl?x@}7 zjl)FU>^JJ@_0NqjzAbP>Z%SL>e&dVL=I6syElVnZEC)yn=qKepHXugExjBh^J!+ z6P#}mC)Tx;eu9r}q(qonTN04&u>ubo^=NW9X<)PO&LLuJ()Xm3o+YjBSrXQU^0M|V zWx^{~U%{yqHXdUdR2@q`95~X)*zR|Yzb)&*}B!IR1LP3f6gE-ze+V&b zO3~Z4Si6ZbIRS09rPVrZKt@*37BLLVxlM$fZn4q8`4f`ECi%ds#*Q4aYqQ-bA8d`Z z6CyUq?aYT#pe<>WbS}3ZNWOq`SY`uq;hg6aoCx~cNSUgFXtD2Zk`8fzL_sxHo3h)? zg+-c1snM2THgl1XDZMqVF=aEde?eJ^N~X0rZDu1HDx+MBT4ytIK!~EoVl(~)g~hk1 zB|^NC{Sla7m;HnLJJu2*Y@cRVa5tpcYj7jV*z(sDo2&H!j#xG<5wX+TV86;;;?-gy zd~LB1{+6X@yv42@Z?P+1gBu)h&33pxAnnAk6|O^tlI&E4T;$L6UfA*Yo#ecup zWAhb{jqxizHhL**?fLJ`){RY7w6}b>Ad}AFdoj%F6Mu>$CD4=|J};nm~IhR=@x-? z4KBW^2-ynP+1C296>jvte>HhKenSQic{@~;cWFCreKc*jt_HgX*U`E5vy|~43hf)V zrqw_h;_9dNxF7Sp)4qoqT7ir!i z4jX|;Fm1v)4TXM_60};O6N_kFp9QZVDnp%F`};GgpXl?`l!Rl#pSA020#WRU7$ z%|yN6%W_2rN^~M_e=_Xu=sKDFA<&xHlcmLj3J$^s8O;$LoRl&hV4GBEECt5Hxf8yX zeamkfhzFb(9rI5z?bjW}slY5UMAu5DhQ zal9tJ1q#Lfs0*CFDz%$9-3C^gJt%ASaik}C$EldMf3qrcAjcs4#bDXZXnPYpmsub5 z5;T$=5$mDVsD$lPga26K})fEJjVJW;J^m@dieZBUz(w9kk$YyM}YIU$^Y_tX%#p=*x8kL46}joG{QMb7G3ifp=3@VR5zO1&XMXSQG6y0 zuApRLW28tBE*K`(mvA0??a!qOVPQ?NO>HA{o1QhLw{K${5SKk-i#l_OEf}8n2Ok)+ ze{K4sqAO_&tR9lWKN0*FM!9%s^;6#Gv+qTd9Hy%O@Uh`5VBZ^Ml|Gc?bL}x46p1#e z8XA0bNt`&6p#aJ3or3A57L_vE(?N@C3W*iQ5V|tIuCXlC>k5L$5Zhy*C3;;k_Cv{j zrk1{FwG_>CVaS1ISv)T6g5zr5OR*~je-4!uo^hg+GE<5mDT}!jl76Nj?I^Q^W?53B zP%@rr`~&|VKt3ze59O%bvHWwga(Q0=B1lvgpA_kSir&`x3Z*AG+Nd0FE{Vf#afd=l zy>QX*7>nN5Te=6}nU(_zDTKFu8W(ypv(o1K1RNU|vkWJ}R9G!~= zI?hq_Yqi8@i?9~b)liVLZStIlxHm1vjW%?qH^#f#zo1Q5KOvjCqF_t=63g?m?_u;P zEL%5oxDBindz`TZ&hVLuAU%t$e~AwVRZh%ye1*1f2r73_?HT_wzDgobFoaeTqJqME3Ct4Yg1s%m$ssH`r7DAMDH>R6D2$GwV=^6h*fyr5?99gZ5{pKl>I5KjERP%&5+W2WN-N*=q!bFA7;Apb9^bpe~_NDoWV=x zvoUXjQS&{4Tz0bZv+Sva=?xtc<$^LNvLYobqxr^3P>8Hd=LPs8AUd-kFE|X13HoxH z+yfN5RxWK_=329HFu>gdg@>8e`UTA$jf^Hy8YqN-hJcpo|AsSyu1tRQ>W*`)j#ru6i;%| zcnJwbmbq;8vHI6)p?6iuV?Fk+V{F~WUg1Kh`o#51>ZylRC+`D9EItd>cP?@PB{#|R zJ7u|F?#apN*DOsSeLS~PuLZ6g(wKe_byi1RJW54)Dd^{|o(h;)f3-%h-LoF|uGrLG z(x|2gtJs3!_;~2#Tq_3YjaEy@=cGX2;Xv`Ft{!7jw@BAL!-o(c{Ov zPyXw{)B8t8V_-Bmoi$!C?(?heJ0UiAEUCssPfDS8x3gn<(+ywWQ4a>^KX${@vpN0# zZ%5HGG6P4H$EM84agtNyAQ8u@7hsEbrN_5jkCd&-rjwu?y39gf!b9M z)t-8!9;=_!Q}s-}Q2XjY9jce=NWE4AHTZDeO=pAgd-YBotK-RNG6wwcVW8ftPBCHC zjo%MuXX-?q4Dt7Sr%p!dWO6Z8r|L|deL6qu#%id3RU`F5e~s06IPTO$O#sgohz}?4 z)o&NwjNhD3)lAL0-!Wk}{HW$?em3noHUDFxF4XVp5A{)fQh%yHyXoY6(cIn;^1@R5 zJAjp!>FX`=`rzq{m-odIc8w(*S;Ek}ukvjyq01Lr;uUOh)e@^V=qdkJn!icmtnANK zUG!~K{nPG)e|wK!K-CWp9<1?tkCwQKF{*(}5(A z?4>@u?yE!h{0>{?8h!Y*Rv*LhygQu^M(>BS^U>hbf2vsiR$|>heEIWBi1qmJaGjM6 z#B%gv3VTb5y?8Qa#mMxyl*?MXD%Txy36U(8wUSXVJxAzJ0=q74op5{%)i2A?m`Fs> zs@2|-Z$8sXyp>j-K0o^L8MN~B@j7EWyYPLVH>4SNQ<~|i<;DOYb(~JS!MvNQQ8$}G za`^jve@ISna-u%2N_(rM`uynezjpt{(x&T$HH*zHnQtU(Hfv=auL|S!tWW*|Juzt+10kByS3ZOLNi1|Mjjf7!6l|FUMkxgo=zk1l5FH&g+WdH4R^ zNXGa{nyZ`CY(&+@wzYxRx607Z4|ebGiRIUn2F^=qP;&k@h7W5EzXxMKksQW0>7d>* z>ytGi8#c>-z2vt_;zxV?ul|>|>iw`LeitrJ|7Z7R$@Nx}=k+d6GLmFhWx7=ge*N&} zf3u@Ql4(s&vT2c&to~YE;Zty!fiDw@ScIe%^h#djMGvUaze!N^^%x z3mh;|T7*k!A^Ml4V5&*h$opIkrqjtE2n#_7?Pu#cJEizYi_kA?C(B#_52a5cisLL zpj|pMPOvtK_9pysV4U#7%=0~s2URhJ=l1QP-=G?x(C0~HZ7 zHwrIIWo~D5Xfhx%H8eFfmr*eT6a_IhHaR($0h0nKfA$4Xoa@pB3ghk$Az^S0?oM!b zcNt)CcMI+=AxLly?(PsIxVyW%bJ=pv-sk)Os(Wjyn0Ixrmi0W{??6thp!`|L#MTHX zW^3d0nTei}8z3yJBFV%EU}R*WXJlkXASYJ=IavY!V@DuY13EZ@Y;Cyz#SnG?8aln( zL=2tYe~GfTHUKGSD*zJN*4xVpO18(KTk+d7!>Q_}%le?d;>041O!(7^?00{BBRK+ez___s8A z1ag3iImq!ZhqA4yldGWv5b$oW0vQ8s9N$BnZA^d;fcNSEWl0%;ydBWyFS5*E1UkUq zhXY`uXZmltzoY+11hV-v*wEP6*4oa{#vNp11~3I#0Ri%2GW1SvPILf688{oLId{=QsG8(UW!&;KA(kd2AyA2Ljw?HE*TK=#f+Ns+%f?Yx*3}@{82!~f87rFr<3Uq^ScIbPdi&Xfa$vopf|`A`2L09 z>1gNz1UNZ31HC=}?f74Wz{CVF0U0|1jDTh!8-#zdzng)kf8qE0cL2Eov>D&Wj|sr| z$LGIKy6+QaVrygN{tx}nD`rrU)c7JTLHoDl|2n^Xv2_D@er90e=>aE1|b`>_lf?@#7fV|`j;K#Cj?Ve4f7tw$oPMJ?@MNE`TiDhd>_p}UBLGp`ro>uHpaFle=Hj_ z8#}3u6rfNp;dGk}5K#@6XQ1n{oW8(?bdfbhq~e{!$`7-ar1 z{e?II408VD)6fBP~2r#rTHd>3!|FZiy|>R<3(zV*L) zdzbdFRDbkp`!D$3tKC1f-??`0?{FI{py@wqS(*N}I{eQeu)ZIQ-TTVf{_Ei0f5I5- z{{`QbIs6O0%W(WB{#}Kmm7$~gzX!W*MD8Y zd)My&6np1-03H5H_CK?3?CkI^&FRmV()%L(2mkpi0|dGOjS&`RZH;*XEvf@s?<<8q zxPIOlWoAY0zYM>IQ{NWFciB_)7v_DqV#$q|7wVkejd)ncIASh(Yp~S7VYJj+^Gc22 z##yLsg*G+XqVpQZf8cvOa+Gmq-j(j?&@y1LF)_nAYgGE>dM!9bjZ0^Lu``o?AkItC zSbkS#eg;cfe@u@AF&Y&Ci^s{yf&>xRCY0V*{-sK2YPwyL%<)oi^d#Y<*ug_;-!L=V zX8&Rd9XMzs^~2#IvYqsG`XT?f{cd&wX@haV6!~_yDBe>nf0h4rYv5NZBgYYC0aBg} z$?fq=iOcOMNhPyJiGg*CEcZ^ z;+TA5@QA(h@M06kfz|Xs(51a(ss<4wuV>lKu*Jm;7ujNykP0vw`2 zbYI#&Zuu$&e}H91!CK5&>96>YIaR6Vwf3M&Ad(ZKhF?5=IwJK~%Omt+A3Gfp=K^J8 zr;I!?v{EuO{lbW6I0CCW#UJP~dCan%WxDF`RUeMf7Z2^7Md%L8tTIG$ks+}&gj9Y^ z{#;aumt(e9AL8wF*|H(%iBFMKJgzx)lVK1hi4fqmf0W~hJ^?bFdTH7s91hWa3#{RV z2*vYwt~v(2r6pTsoU5n21$|Vl8ZnIvM=bRo%eIfwGo}j?{F&q#S~JYv?Q^y!5H6+M zQC-qo<8nimSaS`kAtAe{mXAcp`A+mhZ9y?k;0SDGAC4L9vh*hldx>)%c+v2vfj36A zvrleye=FGLr?RcwWUiZzot`Sv-?Dr~u%`4z7?)GOO1B7nTad*+O(8WL6(4VZ&7LNa zCd&PQvH19-Bo$yNnW`gKL({&0u9&rSLIa7#(<{zO0E32wfzPN#MK*dcqv1k8qaNuP zb)*3Gx?ocdZ?5sG%0rM(-)Bg~p)oMY2I1)ge=D2nu_w`w*rBq4nsj4PkR;%T+xzr! z<2#HV!i=qV9`yQQ;Lj66e(#`p?oI5YTk4tuAYkY5C*c2^X z(T&8IH!@*y%}36>ES#M2%wRD@q-bljR0kE?Cyme&{OY8LUI(-cO=vyP@g44WHpn|)9;`<}OF230|p)hj~-2Xf2DiU-Z$ie^E0?Qa_wlox9e4nPZvoQ1((xjWOREY z3Jb7wdCwX`0`14P$Mf+Dr=y9-Vtz|1;Fb1%zR5O&IAX7)klH<-UXK?OZsPFA+q9mU zoRu2)#bKZX;_@R^9@Zn#gasLW>_Z%;@DlDI|Kz=i!!~-SX0}H+OX6=4e*!%cBC4mA z68HFGfs%@)N5@jIU`LTaJg0KjPi%y+(uDW-)6e$C`8kDZ`QI9jyjKT$6_$o2DPNUD z&6k@8AfG-Fw)lbD5Zj&RdV^XzBCYHtDD&d^!y%X-Z%~pu;HnpeFdeI9)y+7;Z~{^c(d};r3oYYvW>&UC=c>X@SvLurj^O z{ro64>NOAO(F7n0FVb?t?^d2KJ){O>joT`@Fl$@%OK zkENRZU71lY5@FFwSMM*o>3wba2jz_AEEINEEEk3eOx+jXPs=p zGHd*~Qw(e9klp=>e{^8+HSsu4+hhQaJJnt1V`CLKKDZ{sotOcwaou(Wd^SS@Fd|eJ zNO9YI{GGlB6V_pV;0qqva%|6`@E8PnNGOw6bi-uK3?wIDs90B~zJ)*7vx&&5mB@#T zRyY?din9XPVdIIc&#=?#?BRw*6+a6TA^&zvmTs7S6Zu+pe_5yV)1Oa?1$Pkp(S)B^ zb7?gCh^s|5RIwUnG>JiN#-wJW92{1G`O$f>A zW}41u>3)g;HQlG~p4+JMKc0QfStcK9e4(1?R1t{74@mt@kA-Z=Bm+fX>smho zG7Jt{l_)EHJ-8zkj{0n1#z%k)TW-2Sji8cHEh--DfBO`I3rv%A7R3s%6%hMihB(ER z+U3Yq5*Jg8LhN@vF0Sd&<4-o5y$d+|aV4|e*>{iC#+hKwePrGedSNM6}Z=E|gX(KY7 z((Ch-f1|&95cVt^IB;uNq%e^Pi2fuRHuk%kWibUMzaWP&>AsgShb_s5sJYnBrHns@ zhS&sv3H(3{e*JEZUL(a8Z8W zmuXh;9jNFL1#7g7Uh^=Z)%I(Lc9{{^P~+-@oKmqvU<({Mqcp+#*#P}kYxJ=ZXRk_5 zs<3A`odUM=2^S(1ISE30e;O0U@80=l^lLqTX;pN|C6A_}9}C;24;$5vdpKYnl*OrH ze;`+J3g#iBe0&jJjTqFMaf#8p4oH{jDgR4EevK5?;7hy@ebW>hBu=_6?W!!7gZ9}? z-LXK+b**@#Ps|U#=S|iU7GX@@_Af1^`U=cAUMq&2$N7Ukp~EAV)e0N8thNsY`bT>q zXvc(`e0)3T*irCTsrfEx({UkJQD|4Ce}ijFzd7$!*|eMVr%(ag>A8+MuOAM)ukvtH`Y|f7UwE zsdL&n>RNEy!f@pxXwk?w`nIkwlO!0Ne^=t#BRAOy6X-3rY@)#f*AzDte(D-AuzNO2 z-fSpaWZaYGd&H1)N_b&p^vPG67CSAC*?zUu)D&IOKROVt%K#dR1i@w>O9pk$mLWWt z(lu%i5$>lRjXGvdqG5GWetKw_e{KE6Q~1V5l%zydt5art>RJjQ<|B3h?R;&}UAx(9 zZdxef%Uj@KJ8`vHEwUe_X^((?jcZGo(_FfAj@HbR)7=dP^aMl}9WN=^3-zYvH#(1R z4}BgH;~i1Zu)75nLhl~W6yv@>uWoa5E-!OWsw-Nx$cs)BvWs_#njI3!9y zQaPg|Q!Ad}Lbv#Rx}>#Me|H`8hW7Ez7n5zXeXXI;DR5?3(SD@-WFd7@+|qdTcH`7D zF9Y7IP^tL=;zb4=4RIg0Ul+?oSjc>ztRIz%E!&-opYuqFlhgJPm1+1s52do?S6EoK z@{s&5Bq0|8frymEthJUIh^?kLHA_c6D;J~Hv0QKn&Oxv0Up+c)fBNK}=aWS>{1g-( zgp#n>={J=q>W^w|%8wvbp{O&pT-p_|sd%zqBHr;xtvBK~&-)obK2sSl)P4Z%3H7=y zT11APsKISRNyEXiq)R-;_J>oBGe1*w>DC%r$Chjnk1S@#i$3V0*ZMTY&1rFkg#}M&vKiCkWsZ1(-q!}4Wt<~aLWj@9FM_#e|sSeUXOLc`5MgWe$&J1 zIGx0t#RDo^+aMwPc&DsYsTy7o#&%?jE90*FU`CxiJ>yNLn zr>##we?>(Zj-xZog_g@N0J|lyY~AsE)VTQB_Irt*<0oGs@`K|>R;Nf-WArWo4N?D% zN*CMX)E+CEsjSids3RrY{jg7*4^b7*l4zg@=GyMXi?!;7ol|tCO|-3puVZv<+qP}n zw(WeeZQHh!j%{^p+Z}Y$C;K1!oZEBvuKCuebz5sx&1V)=GP)Bm4SA;W9pGXX()&~j zRYZ;0ac6fUF4T6eQ@oPt`)qz@uW?-PC2?W{Emd$$s`%~9INtT(<47yS6dI_Mkt^qjELo& z1WcE;q&b;J?emeBFqNbPvAN6Lh7<_2M+yD)o!yN2m?v+$ax$s+TUGdddb^o(Hik3}h$c^4eT(nDNoXr_+H4eQHXfADPIxSEOIFb((vBxG&9EpNcxl$` zR7Vu()X)YonWXabn5)M4C)HV762b_-mSqEv5ti@~WzBhj+Ko&k%a++`S~to?M|j=# zT$w>=BbZ|50MkgCpXs8`Ai|~o@HWrZ^@GcbY+aYl zjZBv@y?WDARSKdHNe{9{Vsifw=td`E!kXKxU-l!ucD|4tAGU1>8 zzE5Qjq^WYtat9nl0gq4m29Nr?2l@h)y?T@y6lH6)4o;bf#}-5IDzrQEkFCV5{P-BK ztx-8OCo^M{(?5(0-b@rG3w(Z0X$S_G{<}D3ij^XhPcuY21qG=X{%9EyErrItx4m`o{F5?_i1`jg$$z4G6a$@ZA^6XV#W_#5}IT zZ88;}Ulp}C>2-C}q0rFKO^R?$&|nADrRrUR0brGvLcMkXEy%?zP@-ddjdBm}F8>6A z%v^NkP?)`Jl^50h7U<}JTHH>De)NJ1aZ;M0C}C~QH(g{_p)+si^k6N@jnbyP`xidI z8m^w9^OtV`BYB+@Fn>HI)v_pSC91GmK?FLnR1?G(-&2Wm1o%?olbBwjD99s z<&R3JBRZb_WjdB)s}M3a*FWFd^RU1H)aKzRHSA#Rz;A%=T8wY#o}-cIet+8Z6peKz zmQtcv%gylw3z*rl5~B_ng;z1-D{}5_1GO(4tio>v|F~b|z<2w1?nq+$%UtOnA+Xk{ zvLlYL4!;nG7?yDINL8Rw=IR5ZG2OQNk>W}QBGAA6*_sLYtn!w5Pj2~A)xU;W^vc9) z$#2bAEVa3z+bkAb-kS9IJ04yr!TNs+;LwP?d-s;T`>>D%s&Q6djKyGLJinyuCnu>4 zNxSOZ|2^X81){X2NsiRln;==eWj+>ea__^N#auvpYY#VjG{XF&$=d;}xtB3;3q%bs z7ixAp-4^9QwcWj4&;laP`k9Old}$i^q3gL(jcbHqgH-};veTjeolZ&%56c^HXdy^#6^T#QZK{>i+R`F^=#TfpY>J(cb~C_jM-p^NVXKkDX9x-P}@V$;vf$G=VT<-M9a3#8P z5s+243Z5I8&Ja!gr-M6Wp|l&Ej;==ODrUYWa;>Q>K1Qe0MkXujKo0m1`P$3z>K@g9 zhx2lb??n zxwf$k6J4ROf%`x3Sii=2o_EA}xF_!1s(?(tlzz>|XTT&a5(^MkInpc$2y>zvenQ{rKw+=43<`9Z+BXQ#>W)M1MrF?LK%$YunqnNd*|+ z@y6Bhi(yo(*~Uvz9cvX%?{%^i_%7H0>R(p*@-T8kgm=PFnCd6$tD~}Y5=?W`_ssUo zF(U-ahI@7tVa#v)s(G4R{hmPa)gnqnzbwhMLZvBn!6xttz_EXqDm2ncJz;ifH$`mN zxx+5{veW#Io{|)4^09A`!gFPpGz$ETe9OZ`>nSgyveLS|A8n4Wm=)cvwZ&dJ{5Sxm zCD@-RKU^|a$oJ&eONE1uvG?q3Oe~vA_T^(;?jytU|C03-M@A1G8ZknePPJHeI(g<< z$R59N6G)FEuKKsqiefP}yMG}B3nQbe5^}UG_2;kpc{I$hs?ru>olmT5@*NOjjWRfe zEqBRZQmQHC#Au!SN@4MJZa4^Oef4k7(9t2C+}TT|LNcyxqfuQ6JubfO>KHnPC6uaE z4dU?E8_zXY>Lt8-oJ*T3*beH6KxPj&iv_E@OwgYY%|x(;AbSwJn2eUOn{}(;!ZEh@ z`m{--dyC+6N+Ddz&H8S>t7PE*Wbu*^0ft%z&6}{$riy`j;wa7Tfu1uI&g|Poz|gck z$I2G*wddz=-oMgYVzTfVop11sbW@947UlkXiT4_5kiz{41{VPV@Xkm$xkl#Kko$R^ z)pJRL#BPZ-N6-=^K;_6ql&sTkIwz(+tIIf0f|w*YMxsHO%`{Z?m`*0eM8uRCLT4>-j>SIo*nCOHF zi?u_&YhES3`fGFqRRACdvH=%fLw3cyy~F#jgb)6gd0|y59%SShq3!)ZGgcc{DBxh1 zqESh7_)Js&fG9iyX678@<3aI1uR^62WEsT2=KzW)(a)I(xDMkDvGp4l;`zVF7(OeT zXl5ey;LC)VnL5x*>{_^Np)Iz2vkR7tNqKpV|ElU6)dhtdDqw(4v~lehKi?w}iWjT= z-Q3;o9z$VD8`<}p-zh9t@RV)ZW}z^Q2E*=PPOfp~>+&`A6*C=}5W_nwZiu6lHInjeRl>fdnZPvCx5-=T3n zy{=%zp2DDa=!{3zmSyPM&lFV|CLg++KaJb1$gNOSms1%)>|%0Q#A9uHUb4VRKseo( zP%{rk4v95?#azM)2L2AxMsbY|tNfX|32p=6T58_qfojX^4NKKa)LUEoq^BgGAZsgGK;P^`BWW1;7cYIku+dioJaLZ$F=MTL?G@J7j zwQ$xNNAQP?CYMxMi)l_3*{}&uTijltZ~lYrIK=Ps!&(Nur8$tpnVXb{+GO#Wx+rwd zop9Pk6XZiRmHb98KCw-PxBG=tGFQ#N6pVsHFobi!`r4brIRZcJ#3=1`nr4D%afcYh z5$~JiFm4{3zXis7eevinl(8 z{CzyXAc16N!zVr?_kCaKq3nC7q}8W|HMw;xIxO>Qfn4jCuN6gA_(2N>`eU1h^32-~ zb)6fax(RtQ0^+=RF5X77-VkWldje^qErC8`jZX)@8v67g3LkPag+0oJVx-BDg{L{h zj}gfrrF%0-ztx4$&IOD&nHV;H^=yOTXg)wIt3K_^CA#)w%3Cb7nDfP0HFR&PuP|es zySw{bsTu{|FakIt81mt>6Q~|O@%ye7g7_4$Mm;V~5<@?tkS%qdw#+Z#jB;(ZyT19P zQBRJ0@}8M4^G)5H`N}#a1`X4tFQTfu8T4sGA`Ub=CM8;9 zYW;gnz|U0yi0hxH(61>;PjC;fTsjQEA$A(Jq+7)WzU1vGr3IG!VR$U<;;i}2oF{BO zbHO_M00$0MnNWYDz;+p#lnv1p*GL9LEj%Wcb^Gl#=XS=4$A55s2D%*{u?85V9_y`fBqq|+FZjJo{5n&5M~pDxErJpPpne49Pl*m_*NOD2c1zFVnm z&|K73iUVVymT3Clt59KCmTPTNEnG#(db5>d0?Xi^9kpVWsDo|XTH<@apAoUnu3yU~ z3T$UAKWIu=l28IXum@%aO?c_TJwgY9N9J$3X9HG$z_c1|$U7$NoH;RkY+;$nX;k2j zmn-Z8*&z_H2>Wh_3AWdu39*y{B5@u+R0RWW-=LF%JHb!2MSM@yS$!3t+mTOsUug=} z?sgv95lBJTll246v#QL1v`7s#rd?+P_=iP;ryr2`(3w`EX58*zv-+H`Qo-{v-<)7}a`SX0KmiD2IL_1m`%`9!rm4B5&%mImo`JG}g)9Y@8 zy(;i4+kq}kblQUQG|6VRSEvG#zFw)6ZwXCGj?~VaF!A1!UE0ih(MT zmLsmD*%syt7NDiO_)dAL`)YOyXf7<)NDs6_&Xr7J#(+>ua(UzMILAY%B+l4%rTwC% zDZbo{%1*tvlwSLcw}T$>(yt*AYT=%PcdNEwKIK9WTw7o1q$Z6#19{c{-nh(Xd)< zzi8ZGNk3TtYT0?GNYFBwa>s95*Dx+?2Ik*IFHa?=Rs=T*gSO1%c{)^Ic;P-}${tkl zIC^;l-`bZ{m0$S&Eb7%tj<1_z_ zR=TRZ;P)Cp@SkFko|N(`bk~u)KfIEtS%bBa8eS|Tj9@scn8*qVXmXV=wdP>zFlKR? zlryyIQed~~l=~xf?MX7MK~ljE?mIhXn}=_dlm`YOQ#QY*EPJ3yCN)-2gCI3|DjoUkb<3E`?W1XY7@e)TokwIS^F`#Y7ta|l&n zNF_6T@gj<2yJsF?gg^fD)|jtl_+n^9?U7i=wQyi*u$v1@S7uLxBE9zmae zI981-N|#dT{NG7V;`j3A*#7iSH{CMZoR7nj*P|m20k)9u65kZ?EPg zPK>-`X=>$3vSAO>u{&E8&Wc5-U=HTrqAA)%v^kz(^Qufxx>@tzqcWFQA>6iKyIn2> zs?U;{k<9Q`$gKa8Pn)DTDOihNXSngjmQ{j`ZnRU(*kzfr#e zC;yv)q}J`u;G#p~72%i6uy6ebJ*@mE5T2IV<_qWE4?oaJLiUFqZCcp_HypjFPwq8h zFRT4<1}O5bS_IZ2CI^w{1UJJ-7{SE@=!m;ZR_}|*n$8KYiLsSlrLW)R<6#}~fvWNn zx_hf}OT;`viXev?hk+Y?Jc|x7uf_o8S8cWV(rvB$^dEOv@jOlJQKlc*NNC^4%P!$@ z#;BW!NU(W$L31ARGDTNkxEFa1i+L0zR4drOjUcB9DVo6*S&8f6O(+Q?==%N1 zbL~gZGJ^>Nu#(WLEReD;$7pzZ5V<>%?kL)eHvYCwAnwk zCay|Irjk4VusgPQt@nSi>-glaFyD-fBFB4751)E)BZ|6sk%`_SViZDN4MH-6AR~4F?R8?nopcM zn`TKFzBYd1kExZ!Tzo@|4ELw%7Ofdrt$NJ+t#EZ@3r%wxIP{ECYlXuh58O%7@QP{E z)lttEByEUB#GS0u)HO{Ok3{fqQQd|UeNB3rq+tg57IO0_q9=DTWO6{N(88BU<+mcQ z)we1|IkfT5rEzi`Bu`Wbcz_P(^DmpK@}-yDbMH-MU|jCD0(T>_7?|+6CXOf$CH^lP zW7rtK5i0a}8T2<)woPnRqD(`0`aAYwy!5-yvt!nEw!%PW;DFGx*!=^#Wn1(TEj3Oe zHe_!ff8$IPIf=v9)8}&I69c(K4ATYy%MB!^Kdfu!pxs3 z>ik;dotKIwOc!|U*lGjc0*afNne%whw1N9#2iTi~_8Y!_hG?b5sx*r+*9F2jqdgfe zR~JF!H$PG8rDR@0nN?+ZmeohKnwF!++$*Escp5@ITx#??puSSt;z7?rz;cno3*U_h zq9DGlxIlLYOCTqhO_)Yl(%4}Ct$ZH&$PV^)Mql0SIQ<5N_#z7gZ;&28&h~I+-+t)0 z1y0oO{k`&s4kI}O>PM5bjBXcgMTo<{8$ye{VwAe>hbh~^z;@+;+uTIYo>_C8iv;tM zDZtD_P5^6^LXw#0ymS!pU7M5|&x@n3BU*1Sv1Nj$E$|UJE5hxoyzgisx)r<*wjI#i z7Vt`OUH|+xzXjWIDfFH5n9ZBuV>+mv=b>xVKrFc(q(~rpjLwLyHt+-AFDfpPHEgR{ zU_Gnpnn-uqbllIN<16Xvk^tJ+7DWQ1qODc1FKa_Do2`<~@9~Z)Wkm5D{fwXNrLUJX z%t0qO8`w7Of#u4Q-bI?WvRn~GM8^ewlUrgSQ0NPn=!nSz_!pzVFEVl74`!w|%$wh8 zm4^-OG~6uvc2$V)WRXmm+h?%78m{?q5m`^}1-~XiYo}e_tgz(DJL=vbqOOYh#83*q zKEkh<9Fo}?_9|J214)5fv_3r$&{H5wnMlsG3T&m)!IP{9-M^`@Fg5WQV4-l;uL+t9 z;EnH0eo}o%yZyT+?1%5@L}rYs+-E{ieise*N%A>g(_vMY3ft(i{FdNiP0G$^`eXfG zuszb65X^2bHrdw7p}?#1SACcO{)_OhpCDX(Eq^S~j7#Lnb5vyG~JKzl_!QvrwY z&KUyYDD6mo%yW_DJM`!4;2hG+rf{_IALL@M^KjvmWa4sVCU*Q<$We1a&#sAyMB z0ZHbIp=H$x%nj7gV)8XchZ?3?55XvHP-7vk??e|-RDs21Mg)~wj1s8~?_M?=f8Z~H zS!sjYgOmpJSiQG^YTlZq$G*_!o>oK{LVO)gikhyfr z{I;qp3luNzA3CgB={-STiPl(mtc9NM`#f%lep#@V)=yDoJm>~@PDHPk(v}>@U-}|X zER&(w&^rK1ybiNlc3V-hHRq*iHYnpYE0YSN`P5(tz#;~G$ZGXA)UQvz#vF%^AW z5@(y*EauBbM4ssn!h$#ln}0QxYUeu>p!+&Hs+@u2{aV$PoL$OnZ_r}$=T15w6n!r{ zE29=zFVpO_Gw4(NG}_!@rCwg~Xx0|)(`-DrLI5|jp+ ztFihH3<-zo5Dt0^^=71&3kFUF|5&MlT(~1qUwCUA9}1Wbx(&`&qud?j&f&kuGc=r; z3WBY$vCW-|LffyQRGAyc3n5`%7|YJ8{jIPt%!F)w=;Tq4UY6o)nP^*R^;eevoz3C& zO5>=YzFemfT+B;QUK(_yy|UE3|LKdtx^yjf2RmX2IsA0V)U*Npksr8qi;Y!%R9`U# z^CiIT4V1#ml8lLe`itOf;h~9jVLxRdL>{i%Au(w#Cktbp*#Ka59i65P`|16llvs=m zMVt~9cC9fx(0rrgN2VI)g!jR0gk5WFKRD^*Nv2SA56W|EY~V3dc1D>25VoaGpTgkp z!Snq4CfKXQpgR5)%L44)V7Tw9wP>Dw9&tNjF?|XJk2Q-?je!_&lXQ07Ulzt$v6?ql z!m$e9c;#S4`?eee53*%i5Z`j_WBBibU9R@rFT9h!-)AM63zv^*{=u*}^HRA)*19ck z)A{mRN}bCdcKNGSv+KZ|c>0TrB@nAjfCGM#jL&g|8KIvAX?)`dCkGzT>>A)4n z%|tLE-_m%D0rB?=qLnAgOQ_g4-()y>s9auufP^Qy8%8$vSMd=~ajp1eM=nv`l9?Q# zzn9a9^hO7-*O%gyz>HmpSdpH2rGAa?BhMze3;J@<_tVgDPvS^ilTSJ?$wbDB7ypGu z7O=>8&xiRelv>~we$Rkj#pWGW8EH=igQk~Q7u)Fw4i7wXob;)py1cl8Rr4e=SRAmc z&grY`S88J+n!POPR-0_jnC`#Azr&eiX52fziLdM}DoR4HBgb64x^eoev#}~uXrXD+ zK!17^ZJ!&HP)Z$VdZEm2CKoShp<=;%)Ac~xwO2%rM+%_$@51tlD<|rg53x*^#n#$g zw69h6Zph}&y7;bZq|`AAfu@Xxmg)sQcYlLf)l|EgU56RUSuPLsmEUDjtxZX^&Twun zN_AWSG);$*x&cbbAVVBzsEyvo7o!*d&kKm|lnGH@)?d0ii|lw#tq*2+JjEt|Fh?Yv zR;-uKrLciTVS8%xHWito<0o+PLdI!zb45}@sW6pzTYFG+53$7IQOtiwT89>w8%66j z7S+A~RCgC_ee674sC*lh&W24n7z_jOBl)YQN4o84JU7Lo*uCfU^;i&FSVixvrrSm? zDWY7(!fxG1cB;z^8)CH+?+#8G`*SL+N_N}>#?66EHPM~SGopokDZCrP@oO`lTNYSS z4~HU9U4N?Yb)DcO;9LjT%IoR_QWlzmD?|iiaezstpZdONpEb4+ClS0_Otm^k{RrpV z6g_%B5|a31CQhYfYHKu#JIGBWjVSqy<8lIOd239#6e-L3YPAT!XfZB07a&VB>QV0U zi?M-YYiXQRGpaW^c&%lG{t7fWxZ+~#!zZ2YP5_yqj&av^Ih)qH(Y&F37n7DAz{)tv zNiY}*mzD7$7b`PCnRT56uCF^)%=BOus@G2*G-noCy$QVvvqaN`Xk9CCQad!-llZ)K z29e>19(aZ4%Fc1H5Y2+>ipiFMo;1k(%pKVRgCN-a5!VjC7p z*H1QS!L(VcMtiGmfuzd1GM^K@%MYmu+-X&*dSTa`bENqFtQt@(k{hlq50#lYsQcAF zMY89q%BS!ABM*YQbZ?QD(VEp%7KM8A+aAB8ukxknlLmv3iVcP#CvEMX%nhY8)3$+k zswB)56By=80i)dtf{1;M`zq4xp(lD{T7kCt+9VJ-MW~kP+-(7nBc*h~__!hWSu)6W z?@sr>FKN0x|gnt`sMgNq!zn)mteXIox`YNrEuD?yrHuvWi7YMd4 z1ffr%I)9ADNbH(cyLLQK9eSu=DTf1Hg>{(%BvEl3QjR|90c+ludy%gO%3YV5!^3t( zsvbubRCgoYENf813y{{+`lJLWXJp$&6Ktq;OhNY{JUVr-oe(pO5@Zr&8NkS`$P6~` z^C?Ky==Xj~(yn7}^Xr~v0HOaQ8tMvluLTVg6-T$7Z1Ckah0dVnqm95jCmRqMnGcEj zhp#>>z1>x9q3PL8rV<dr`XiAP=2!$q1-g@Qc_Ourn2=gzW*-l*<63DIJM5ft2SaPb9Vl&6as zitf=y)tDMGGkCL|jC0NU++X09*qv1Pq`<~l6xIiZ#*FJAVil7teEL>JJwAp(>J5_g zMer-}04a3WdzC0Fn)_;Jf5bN%q?h&Sco`zd?1kyNQC3q;H*Gu{Hsez*bj;yeyzSGu z8uJe1&x{i7yvP<*ypjGp-)CPPZt;nzf)iK-mzs(eB0*rJ))5ZR+#t|9KUvy!bIBPH z#%Lj-*bS;`;5MzylQZ}fo&tj@%db-yqfa*))#uHHXpKXS(;KP((SVCv-OLzjNs>T^ z(tVkfzJ{-!tE;*Z`65=MHX7q{)GCP{&C(r1Xapi+U?|50nsc1iR{OXlVF{P?Y@?8( z;q&A84=Te^x38QsNdvGugW0~4l8C=du?+s)ZssksSovmF(S2zz#Rq&f=SBANqp}$^tI=epO2%k z1vBHsl6s(eg+KtK92VC%tjCRDBPFTWNjsdWAH)1S@j}v=Ll+pOWzx(vym)Hx?T&^c zdW;FHxa2{&b_XjWdkm}#@w%S@f4Feg7Sv{Ifn`Y_9}>Z-kAL;LLh@M@_>`yUZ@h8& zZSYMa4$XDPZY5_bxc5Csqwd$5@pm2jaR}t2Nxcuqh}T=n{M}iBGsHJ3Kb72ITZS`e zFZJ}+d&~lDwhz>I2!Rc>g)62LM|2{xoAykgil);3*Z!)RFjXr^@%mlo;%qpcBI;zRoH>im(-3Ff%j~dY2art0RP%Klsh{b zxd|GNf^yQhB$G^fE4_qPl==1`$atv()WV{+Eucfw4}e8=qTqEmrIV*d!E=8SEYnOF zIyTLBw+boQQ%^&r5TXjq-e_alFrpW&-78(}aSkZfw%T#-q+&5wOPgWZ^d0JJ!_-gixSGm^@k|0ZMtdSvl zyAt(5hEXu<`nlP?aH-@pvk{>~P67qZciY|J7gKzQXTS)^b@QvA9$YM?(7i~AK8`wB zgD_K_6{S!}PCs)ldXfTMFigm~#O$v~Z;Wed%z-;$vE~nse~49-6bj|2yXIW#k{S2F zWwFoV+%itEb{po`Z0BhIHm3fGHt0{I=_sRAQ>_8lg!8AyX21STn0=Ep%JRq1{@R2j zXKuIk3*dTe>Ij2EC@IA;xosk9>+)K9NyVPZ zN?3N)(JTk)t%H!}murBzGLx+#SIn7G2 z2V+lK+Hp|A2^ign)%W5YX$dP0b!gAakN$K&Z2TrFxWeMC26T^Pk2+z6`@mkYvX;L? zWL2cIPv*w9M?v_#y;0iaG7hRK%LcUx3wxt@+Z(X2YSh?If*yP@X}P~XpvT$}^#Bup z8T>}w9fj#p?zk+|X`Oa;NeD1F#i$T8aKD)G{aAcW;@$O}&*~B}MwTZyd{%wd%`|{8 z3IjKofERgUc6xjE(4&o-tIP9g(SJTE=J(^#Atu!;y|Zskc@=aG(?kV{#p8KQ{!&f9DLW|o6J(}x0ZB~Da@Q>7gYYb=g*lV(7}%umOAtc~K-AIP zk`0X)V~G1j8YbgEmZs*a0bXE-y38~Yn)fm*E^MFTKVLdCN^8sH3ocXDePacChN7?` z3NKC7`FFkF0)Jz(UFV!#Fb^nL;Sn4lQy8zxxeBB^3Q{%5Kl3psnwxB$wpB}j__fmc z(_H2wC`OzWws$Di5b-8#GLxu%dIdm7HqUHa`PCdbEuo%Nz<`JeR0zP1sWT`vza0E+42^bjxDHa)n>N zIT!X9N}wEfsP3g0js1kewiRM*LTc50*%a2pdzYvrYvJ!p#Ric!Mt!MJDQNQ|bwsIl z4MBx+{?c0)a^aO?qm1Ta!qd( zzj{a!`=81*JU?XTr-wrtz?qKO(;VgxLOI4kPM@)yD$z40W{Lw$nnH!J{z)y9bgNwR zufPS7w(gx>WM}HW5?Nj;hq>S>RYy$O{aAo@sYv@N^5c)$KoDT%%Iq<2=7_=02$8|h zE6ldAuz0&CDI*5~lc=ptB1;ohdWNb{PDk&GGfg@xuHb3)abhouUwmtM z-6)FE+{Uzcj&)+?5$fF&_GX(m2n*>&NJ@-Wy6;O9K2ZUP#Sxj@hmV=@)g zG>-MLl+E=m=K=zdF9O)r_Q?N5J#hRF>H)Rg92*cK4aUUvKS6`2ZDs&gBrs;C|B7~L zcfd9@7&A*dRR91K9gLZ+oi+`?3Z8zW35Jr+mj-BSr^*7@fq^oo8)X7e+pBW`;Na<0 zZeS?w1Ni{j|8!PRly=Y}z!_NjK+?DVw*>G42FAkF{!|Wt08fW(`PSg80Yu-3h9F*mMdZDzZbpr;#)6q4*b?aXM z+W++LUg_B*faZ3+ApkX4dWGxv&#V!^4j33KQ@i&#AOSr6A^ls!n+Cvxr+c;l;M4UE z0q&4YOzdnNER5+JhXCCFS9~4<3PG9D83jObu{l{_7{sldU0ew{SlIqA7=w_Ri;?L+ z^k=E|y7T5Jvfru3bg>?l*-I^TDm9%t?Pil}>sphFe*mTC0lXMBX$t4t`(|ut1}H?r zuuht+VVTeS6Bi$>AXObSNfZxpDxoyvK}ev25NGo|5$gUR3~?=)E|*k@X^71Tv`3cX zVZl1rYwG;*z#0!bk~GplD7o;^k1kk~NMJwZ)<7(~;TarK8rNBnK{;6*sEDU!7|sM* zFue%rlTfsvul-;yg|d!odw^6yEcqhV(}5@xLO(A#z%%qd0Yq0)7Mev-dXRw~T)318 z4OV~S4H`0JvLACRAoe&wA~?4-p>$Q0E8Z)(5t3F{s|X7cld<5WpC~=gQc2&k1K0pT z&$*!d2z@8f0tTfUz|?^>JD@3o`xK&ph+$~EkQ>7)eCS&;+-lIws5!1oHDOM+?#yI2?4td0uN(liVmf$sWx5M z1QF>fuHgS>Cd}~VH4e?EOCJ^N%cnPkA9ZZ4yaSxRDLg$mv%dY@%zuez0LF0!$9cJT zlUFsZZR&gx{<;k);{j7X(j^?Y+6=j=D}O5jne2BK@bS!^v%lR#|EUBQ?8k%46CY*E zpM67bf6CP&IOLVM3j~{j?yc%gIbs~wYvZ1SeTeceAUKESE5~?Z=`F(QEmPsvn@xv( z{rAOR%)we-O7bcHYiJJ6ANVzSPS;!P@sD@w7?!&jIM3Bv4%=0N_(Y_09PRbhTT!Q8 zdMVPEMdxsq?<)4&m2Ymq>h#VGZmJm=|#Sm@))7gv+YP762WDLBmPNP-0d2F16%@s55r&F{Z8=~ z-Th6Qzt{}FWDsz9g&(115si~oTi&e2l)ZbzN+TG2Y5OiQvh+-yeL|LhtTsZS|CNZ5 zZQfDG-LcSFzho;*zC&;wo23Rqf&XX~Basx6_} zNKi^FoXSqQg%WwtFVf`Z`11VS+%H#uPl(KhKwZb7?Lt`Ap>H0>^Kyhr(r3yJZP`@z`T@G|Y#(sW2txLe?M*Ms8)VH}j_;_Q9}DF4zKhbK z5y{$;LFaT$i!LE$I&{IYy!3AOKc!SWH@^Zwz;CcO$bF^F6 zN6E@a@rR1Pqna#b+lcVCpY%DgbFZ7Wc*G#Kbd8Ws&C)iD8)TwkZxwrRvi{4@O1jna zo5=QP$tU+XM+O&A!fcS15$0`y4tJu;JX<6wW?+t0>+norlkd`sNTz0wLi46CeE8Zi z3ID9@p1&IYy;|andawtm4e<2aFaZYu?Tx;HGjofJfz-4 zbqt=k8qb6_3_psfdNBCCUcfCiob|ca3t0gFueGx8F=^GI`kQ~}Ea+zj*ytIQR zT8pw%RjPgN+SS?~k6cr@481CXNLHaO22`zyuij6dbvYp-V^-^KN)>rcEEFw~Lr%49Me;VKM299*5hK?AA!;GtP*LSYO|jrS zbzRYpkQlLibwszK8yAP>lsi14Q zo-K05Sa|O$?gr&ZdeuxM7e!-8tlWj#Gh1v1oTB)Cz;D}^H0ceyJXGjD)#eB5ww5&fA%E*##MO8?D9BlCzg=im|fQ<4R}Q%A(v3 zZ&(^HW~B_3E4F3ZTExfxHpP>(0-_zpu!F9HPIBL~OS`%slMAEKD|uX}ZLKGg*j6?R zb~n4Tugb?2qTZ92h)~7gRiE| z4nx4^RU@kd2_=}kNxMB<4s#8P%|7^0wVt6bP_g+#Yhl80_)&-Bo=7E7=!x@ZB)j>R zcwsDF`-0^ozyrcAk8mzX&W#=>5^KWIw8R4Cn30kI^28t=c*AHO?CZjAA2d=p8ZBbz zRN=G@7*#&$lZFYkt zY7|EDy_E7OGX79F>(!HsNM^;$WgZ}PaJUkJdw*{%9QEpAV--?(iV~76wOq;94=zww zy>;IJN*;BW2u(k?6HdnoodK_t;B~Lt3OX`c8{Tt4na+T-FPavuSw?$llNKgRP zHfyiG+OOLZ5^D|5GT-Vz)M{wkwV)Q5(Cn&DSug#N9&oEtNHbBN8+DTA8-|`+5M3zI z4X{DVDhevhqARijg0Yw#kOyoY+58L?L3COAaoo?*zrj`Tv%x*m z9rO3o^%P2yS*3eMt!|enVvMQJX%2|S@2-52HN@pkRQkQSOi`YMGZoLopJ~`o7Il)b zM~nkIoh7h!mn?a)V@zt__Z*W)lcd}Ma(O>%bW^=5WJRs1fY~x0X<6QESsB3G7a4O5 z98g1npPkalnT7h(sm+D@vKiHd`k}qSPHa)M%2a>)DSGqAagb?LmZa|1bS5hndrP%> zbNrkb-m|h=h`aMn1r(aY&7Tv+)s8ydU6;>#C)be*y%uVJP zduLkld-2pKN>HZ57rWxODgBoRz=Y6wAaNhBa@3 zi}8+Z7}d$|_1^u}O&^c1OWu)7KKV=Ev`IYS=xG$#7%1nzJiU^arrdV?A)Ox*7~H4e zjGWd&J_zKjw1fW}T+(aXzYp$vrvNk{D?6ti41CJ@F*9(K_6aIgfAo71Vk~OopaJ3}-o*~%(8wSYIWGwO3P{(dF-ilvfUyjra` z$gP$n7B{m_R$8pG%Ip?PWiTMT8Nk0JH%}RaMc3K0yq6 z`UqGIX$<1~udnUDoTosGo9V4bfzyv17qrVr79cWQFp^8%BH66j?AERy(hX0kIdE2A zDJ4VZ1g&(oGxicGwE#x7K3gWcMLWU@{`^)t+E|-lX%MeeOBTmO`zd7cAfs)J^-@I} zxi~yZdIk+xQ8BGM@fgKE9L?jYO|kZ4iyQVBsgTHD;zo+5U%W-U#iZnWOFNzo!gKNl ztXed?fEH|9AsZ1M=`OV8g4SX@AW`iPH%p&+gyhv=JIig$a7i3Nk`4V9|HbP9Xgh-M zHy`HnLEo4FkaL6vlxrw$0xKFzkw?qklIsHSYff!MD~h$y7t9U+#q9#vYuXL|MZN+Y zI~Y5L%6{t%5fip02tLhH7`gWIeLu_Yg*C3FXadno;U$vih4A^8;(PT>AVSRCL$9T` z9^MNGcJ_&{QkgKG$WrH-ikd0^3W3-mYZFR)&QnXMTdw8ft(NoMhS*R z2|-qXni2>v_$i+L!wst!ZCS@vRZ(I=LdZ|_(6ssF3wM>|SG+g}~bYr*$xWc?M;DmP6!vue&&H?M7 z%7O5tG)!f*UVV;t&jh@Z>4Geof96{mg@sq+r-Q5@V$47QmoI4h(Lq@N(?8LfVx_wc z*&E9)@5K9YKpgQ&0}LoI8wsar$>WQGedAnW}Pp6Z1ZQ$<@6xt9S0nwvX_oE z7IweR^+SO(gxNV2#JNoG$-~C>F`T@im*ttM>u13araeBCZI(el6iWy?L&$#gJfoY; zojw%Ce82GZWE$^R`hMD%Eah$UIo@Tk<~5r^D^(>=0YDKDYjwkQf^xn96A~K{MNniP z&JguTOmtdvPVxD)pOq7_qM-bmZ{~&}P^&qe{5giJIUgTwuZav^fhMcn^lw_x4;ghI zG`+^7&X1@%?FaADA~6~MFS&)JQn}iwG&;QA+Ow=unr<|`_NNgTF`Bd;ucsC@8G^rJ zDLgd3k7}a8?QH28nCdY!GIh_3vZ7@ejyyHhhQV5#`-9C}iJo_fVH+j-BM~Hr*NFB} z;v0Ffo@Vs>o8E{&YhU_*EtFpOgoY&?Bzy;Z^S_Yqe^eXLTlsueTx#f=Xu4|}og)w+!68LrX1zAoi Y9+vKX4ZwqA;$-CFfFUCjQxJ#wKS3y)`2YX_ diff --git a/docs/docs.tex b/docs/docs.tex index 586c611..f115a08 100644 --- a/docs/docs.tex +++ b/docs/docs.tex @@ -36,6 +36,7 @@ % └ ┘ \input{./parts/intro.tex} \input{./parts/usage.tex} +\input{./parts/migration.tex} % ── Reference ─────────────────────────────────────────────────────── diff --git a/docs/parts/migration.tex b/docs/parts/migration.tex index c3d257a..2591dfd 100644 --- a/docs/parts/migration.tex +++ b/docs/parts/migration.tex @@ -1,7 +1,28 @@ -\section{Migration von janishutz-helpers V1.X} -Please be aware that this section might be missing some details +\newpage +\section{Migration from janishutz-helpers V1.X} +\label{sec:migration} +The updated helpers do not feature scopes anymore. +You can continue using the old helpers, simply check out the \texttt{v1} branch, using \texttt{git checkout v1}. +To switch back to the latest version, run \texttt{git checkout main} \begin{enumerate} \item Update the import path to \texttt{/path/to/helpers/janishutz-helpers.tex} + \item If you don't plan to change the design of your cheat sheet, then replace \verb|\setupCheatSheet|\{\textit{string}\} with \verb|\setupCheatSheet[false]|\{\textit{string}\} \item Remove \verb|\usetcolorboxes| if it was used (now integrated into \verb|\startDocument|) + \item Replace any \verb|\setNumberingStyle|\{\textit{number}\} with \verb|\setnumberingpreset|\{\textit{preset}\} (see \ref{sec:perFileConf}) + \item Replace any \verb|\setSubsectionNumbering|\{\textit{number}\} with \verb|\setsubsectionnumbering|\{\textit{preset}\} + \item Remove any \verb|\drmvspace| and the like, they have been deprecated. \verb|\rmvspace|[\textit{number}] is still around, but only for edge cases, + where the \texttt{Xverticalspacing} (\texttt{X} can be replaced with \texttt{no}, \texttt{small}, \texttt{medium} or \texttt{large}) commands don't do a good enough job. + \item \verb|\fhlc| and \verb|\fhl| have been removed. The closes replacement is \verb|\shade|. + \item Environments \texttt{remarks}, \texttt{conjugation}, \texttt{forms} and \texttt{guides} have been removed + \item All descriptors no longer automatically have a label attached to them. + If you want to make a label \texttt{ref}able, then use \verb|\labeledShort|, or \verb|\labeledInline|, respectively (see \ref{sec:counter-ref}). + \item The descriptors \verb|\shortdef| and \verb|\shortex| have been renamed to \verb|\shortdefinition| and \verb|\shortexample| (same for the inline versions) + \item The descriptors \verb|\fancyY| and \verb|\compactY| (where Y is a type like \texttt{definition}) have been removed + and you can now use an optional argument on the descriptors. See \ref{sec:descriptors} + \item The deprecated \verb|\tc| and \verb|\timecomplexity| commands have been removed. + \item Was not mentioned, but was already possible, is to import code from a source code file. See \ref{sec:minted} + \item \verb|\der|, \verb|\parder|, etc. have been renamed to \verb|\diff|, \verb|\pardiff|, etc + \item \verb|\divides| has been renamed \verb|\divider| + \item \verb|\seq| and \verb|\ser| have been renamed \verb|\sequence| and \verb|\series| resepctively \end{enumerate} diff --git a/docs/parts/reference/cs.tex b/docs/parts/reference/cs.tex index a2bf0e6..3d225e6 100644 --- a/docs/parts/reference/cs.tex +++ b/docs/parts/reference/cs.tex @@ -31,6 +31,7 @@ These commands have to be executed inside math environment \subsubsection{Code} +\label{sec:minted} If you get compilation errors, be sure to enable \texttt{-shell-escape} for your compiler. \textit{(Note: Some newer versions of LaTeX do no longer require this and it is better to keep it turned off for security reasons, if it works without)}! diff --git a/docs/parts/reference/math.tex b/docs/parts/reference/math.tex index 62aa5bb..eaed251 100644 --- a/docs/parts/reference/math.tex +++ b/docs/parts/reference/math.tex @@ -24,6 +24,8 @@ All these have to be executed in the math environment. \item \verb|\diffn|\{\textit{math}\}\{\textit{math}\} Higher derivative, $\displaystyle \diffn{x}{2}$ \item \verb|\pardiff|\{\textit{math}\} Partial derivative, $\displaystyle \pardiff{x}$ \item \verb|\pardiffn|\{\textit{math}\}\{\textit{math}\} Higher partial derivative, $\displaystyle \pardiffn{x}{2}$ + \item \verb|\sequence|\{\textit{math}\} Sequence, $\sequence{x}$ + \item \verb|\series|\{\textit{math}\}\{\textit{math}\} Series, prints \verb|\series{x}{2x}| as, $\series{x}{2x}$ \item \verb|\elementstack|\{\textit{math}\}\{\textit{math}\} Stack two elements on top of eachother. Uses \verb|\genfrac| under the hood. Can be used for example in limits as an alternative to \verb|\atop| or \verb|\substack|. \end{itemize} diff --git a/docs/parts/reference/style/descriptors.tex b/docs/parts/reference/style/descriptors.tex index 83b0eb3..a01e3b5 100644 --- a/docs/parts/reference/style/descriptors.tex +++ b/docs/parts/reference/style/descriptors.tex @@ -1,7 +1,12 @@ \newpage \subsubsection{Inline \& Shortened descriptors} +\label{sec:descriptors} See \ref{sec:counters} for a guide on how to change the current number. +The signature is \verb|\inlinedefinition|[\textit{description}], where the description is optional (and if you omit it, don't write the square brackets!) + +Alternatively, you can use \verb|\inline[desc]{definition}|. + \paragraph{Inline} \begin{tables}{ll}{Command & Output} \verb|\inlineexample| & \inlineexample \\ @@ -48,10 +53,8 @@ You may also use \verb|\stepLabelNumber|\{\textit{name of the environment}\} to \subsubsection{Referencing counters} -\hl{\textit{With recent overhaul has not been re-introduced yet, will be a feature again soon, with some changes}} - -If you wish to reference a counter, you can do so by writing - -\verb|\ref{:

---}|, - -or of course, if you do not label subsections and / or subsubsection, dropping them. +\label{sec:counter-ref} +If you wish to reference a counter, you can do so by using the \verb|\labeledInline| and \verb|\labeledShort|, +which have the following signature +\mint{latex}|\labeledInline[description]{}{}| +where you can replace \verb|| with a label like \texttt{def:your-def-name} diff --git a/docs/parts/reference/tables-index.tex b/docs/parts/reference/tables-index.tex index 627167b..4ccbcfe 100644 --- a/docs/parts/reference/tables-index.tex +++ b/docs/parts/reference/tables-index.tex @@ -22,15 +22,15 @@ This doesn't use the \texttt{table} environment, so no captions are possible, as \end{fullTable} \end{minted} -% TODO: Get it working again (generate new \thetable and \thefigure) for This outputs as - \begin{fullTable}{ll}{Left & Right}{This is a caption} Left content & Right Content\\ \end{fullTable} \subsection{Index} -If you want to use index, add \verb|\prepareIndex| to the preamble. Using \verb|\addIndexBold|\{\textit{string}\}, you can add entries to the index. They are printed in bold typeface in your document. -Using \verb|\addIndex|\{\textit{string}\}, you can do the same, but the text remains normal and using \verb|\addIndexItalic|\{\textit{string}\}, it is printed in italics +If you want to use index, add \verb|\prepareIndex| to the preamble. Using \verb|\addIndexBold|\{\textit{string}\}, you can add entries to the index. +They are printed in bold typeface in your document. +Using \verb|\addIndex|\{\textit{string}\}, you can do the same, but the text remains normal and using \verb|\addIndexItalic|\{\textit{string}\}, it is printed in italics, +whereas using \verb|\addIndexBI|\{\textit{string}\}, it is printed in bold and italics From 1b9f0e516f2fb836504336ba3405007b6823e85d Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sun, 22 Feb 2026 12:15:52 +0100 Subject: [PATCH 29/32] [General] Fix some issues --- config/main.sty | 4 ++-- janishutz-helpers.tex | 22 +++++++++++++++++++--- src/style/spacing.sty | 18 +++++++++++++++++- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/config/main.sty b/config/main.sty index c17caea..6e0e211 100644 --- a/config/main.sty +++ b/config/main.sty @@ -13,8 +13,8 @@ % - #1 is the name of the descriptor % - #2 is the number (correctly rendered according to settings and preceded with space if not disabled) % - #3 is the name passed (non-empty asserted) -\newcommand{\shortDescriptorTemplate}[3]{\bg{#1color}{\shortNamingTranslate{#1} #2} \textit{(#3)}\ } -\newcommand{\inlineDescriptorTemplate}[3]{\bg{#1color}{\namingTranslate{#1} #2}: \textit{(#3)}\ } +\newcommand{\shortDescriptorTemplate}[3]{\bg{#1color}{\shortNamingTranslate{#1} #2} \textit{(#3)}} +\newcommand{\inlineDescriptorTemplate}[3]{\bg{#1color}{\namingTranslate{#1} #2}: \textit{(#3)}} % These are used if no name is provided and argument #4 from above is the missing argument \newcommand{\anonymousShortDescriptorTemplate}[2]{\bg{#1color}{\shortNamingTranslate{#1} #2}\ } diff --git a/janishutz-helpers.tex b/janishutz-helpers.tex index 5693743..25996ca 100644 --- a/janishutz-helpers.tex +++ b/janishutz-helpers.tex @@ -108,8 +108,8 @@ % - #1 is the name of the descriptor % - #2 is the number (correctly rendered according to settings and preceded with space if not disabled) % - #3 is the name passed (non-empty asserted) -\newcommand{\shortDescriptorTemplate}[3]{\bg{#1color}{\shortNamingTranslate{#1} #2} \textit{(#3)}\ } -\newcommand{\inlineDescriptorTemplate}[3]{\bg{#1color}{\namingTranslate{#1} #2}: \textit{(#3)}\ } +\newcommand{\shortDescriptorTemplate}[3]{\bg{#1color}{\shortNamingTranslate{#1} #2} \textit{(#3)}} +\newcommand{\inlineDescriptorTemplate}[3]{\bg{#1color}{\namingTranslate{#1} #2}: \textit{(#3)}} % These are used if no name is provided and argument #4 from above is the missing argument \newcommand{\anonymousShortDescriptorTemplate}[2]{\bg{#1color}{\shortNamingTranslate{#1} #2}\ } @@ -1236,6 +1236,10 @@ \belowdisplayskip 1pt plus 2pt minus 1pt \abovedisplayshortskip -10pt \belowdisplayshortskip 1pt plus 2pt minus 1pt + \floatsep 1pt plus 2pt minus 1pt + \intextsep 1pt plus 2pt minus 1pt + \textfloatsep 1pt plus 2pt minus 1pt + \abovecaptionskip 2pt \setlist{noitemsep,topsep=1pt,partopsep=0pt} } \newcommand{\smallverticalspacing}{ @@ -1243,6 +1247,10 @@ \belowdisplayskip 5pt plus 5pt minus 2pt \abovedisplayshortskip -5pt \belowdisplayshortskip 3pt plus 4pt minus 2pt + \floatsep 4pt plus 3pt minus 2pt + \intextsep 4pt plus 3pt minus 2pt + \textfloatsep 4pt plus 3pt minus 2pt + \abovecaptionskip 4pt \setlist{itemsep=2pt,topsep=2pt,partopsep=1pt} } \newcommand{\mediumverticalspacing}{ @@ -1250,13 +1258,21 @@ \belowdisplayskip 9pt plus 6pt minus 3pt \abovedisplayshortskip 0pt \belowdisplayshortskip 5pt plus 4pt minus 2pt + \floatsep 7pt plus 4pt minus 3pt + \intextsep 7pt plus 4pt minus 3pt + \textfloatsep 7pt plus 4pt minus 3pt + \abovecaptionskip 7pt \setlist{itemsep=4pt,topsep=4pt,partopsep=2pt} } \newcommand{\largeverticalspacing}{ - \abovedisplayskip 13pt plus 3pt minus 1pt + \abovedisplayskip 13pt plus 5pt minus 4pt \belowdisplayskip 15pt plus 9pt minus 6pt \abovedisplayshortskip 5pt plus 2pt minus 3pt \belowdisplayshortskip 7pt plus 5pt minus 2pt + \floatsep 12pt plus 5pt minus 4pt + \intextsep 12pt plus 5pt minus 4pt + \textfloatsep 12pt plus 5pt minus 4pt + \abovecaptionskip 10pt \setlist{itemsep=6pt,topsep=6pt,partopsep=2pt} } diff --git a/src/style/spacing.sty b/src/style/spacing.sty index fa39caf..8f149bb 100644 --- a/src/style/spacing.sty +++ b/src/style/spacing.sty @@ -3,6 +3,10 @@ \belowdisplayskip 1pt plus 2pt minus 1pt \abovedisplayshortskip -10pt \belowdisplayshortskip 1pt plus 2pt minus 1pt + \floatsep 1pt plus 2pt minus 1pt + \intextsep 1pt plus 2pt minus 1pt + \textfloatsep 1pt plus 2pt minus 1pt + \abovecaptionskip 2pt \setlist{noitemsep,topsep=1pt,partopsep=0pt} } \newcommand{\smallverticalspacing}{ @@ -10,6 +14,10 @@ \belowdisplayskip 5pt plus 5pt minus 2pt \abovedisplayshortskip -5pt \belowdisplayshortskip 3pt plus 4pt minus 2pt + \floatsep 4pt plus 3pt minus 2pt + \intextsep 4pt plus 3pt minus 2pt + \textfloatsep 4pt plus 3pt minus 2pt + \abovecaptionskip 4pt \setlist{itemsep=2pt,topsep=2pt,partopsep=1pt} } \newcommand{\mediumverticalspacing}{ @@ -17,12 +25,20 @@ \belowdisplayskip 9pt plus 6pt minus 3pt \abovedisplayshortskip 0pt \belowdisplayshortskip 5pt plus 4pt minus 2pt + \floatsep 7pt plus 4pt minus 3pt + \intextsep 7pt plus 4pt minus 3pt + \textfloatsep 7pt plus 4pt minus 3pt + \abovecaptionskip 7pt \setlist{itemsep=4pt,topsep=4pt,partopsep=2pt} } \newcommand{\largeverticalspacing}{ - \abovedisplayskip 13pt plus 3pt minus 1pt + \abovedisplayskip 13pt plus 5pt minus 4pt \belowdisplayskip 15pt plus 9pt minus 6pt \abovedisplayshortskip 5pt plus 2pt minus 3pt \belowdisplayshortskip 7pt plus 5pt minus 2pt + \floatsep 12pt plus 5pt minus 4pt + \intextsep 12pt plus 5pt minus 4pt + \textfloatsep 12pt plus 5pt minus 4pt + \abovecaptionskip 10pt \setlist{itemsep=6pt,topsep=6pt,partopsep=2pt} } From e1ab62ab1bebb5f1472ff52b3a27bceb25614873 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sun, 22 Feb 2026 15:01:05 +0100 Subject: [PATCH 30/32] [Docs] Update --- docs/parts/intro.tex | 3 +++ docs/parts/migration.tex | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/parts/intro.tex b/docs/parts/intro.tex index 268bba4..b181f7e 100644 --- a/docs/parts/intro.tex +++ b/docs/parts/intro.tex @@ -6,6 +6,9 @@ There are quite a lot of configuration options, but it is likely that more are t If you have any suggestions as to what should be added, don't hesitate to open a \hlhref{https://support.janishutz.com?a=add}{support ticket}\ or contacting me via email to \texttt{development@janishutz.com}. +If you are fairly new to \LaTeX, then you may find \texttt{Detextify} (or the iOS app \texttt{DeTeXt}) very handy. +There you can draw a symbol and it tells you how to typeset the symbol in \LaTeX + \section{Breaking Changes} The current version is almost entirely incompatible with Version 1.X and you should familiarize yourself with the new commands. diff --git a/docs/parts/migration.tex b/docs/parts/migration.tex index 2591dfd..585eec2 100644 --- a/docs/parts/migration.tex +++ b/docs/parts/migration.tex @@ -3,7 +3,9 @@ \label{sec:migration} The updated helpers do not feature scopes anymore. You can continue using the old helpers, simply check out the \texttt{v1} branch, using \texttt{git checkout v1}. -To switch back to the latest version, run \texttt{git checkout main} +To switch back to the latest version, run \texttt{git checkout main}. + +Alternatively, you can change one line: The input line should point to \texttt{/old/janishutz-helpers-v1.tex} \begin{enumerate} \item Update the import path to \texttt{/path/to/helpers/janishutz-helpers.tex} From 1cb3f472171801149516cc55b52060016fbf8842 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sun, 22 Feb 2026 15:01:10 +0100 Subject: [PATCH 31/32] [Examples] Delete --- examples/letter/letter.pdf | Bin 33263 -> 0 bytes examples/letter/letter.tex | 15 --------------- 2 files changed, 15 deletions(-) delete mode 100644 examples/letter/letter.pdf delete mode 100644 examples/letter/letter.tex diff --git a/examples/letter/letter.pdf b/examples/letter/letter.pdf deleted file mode 100644 index c29d17d20ff7227e1ca725f33f56bb8ae00b7f03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33263 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 T*FXc9*a0liq@*IUqR{^z4WLnF diff --git a/examples/letter/letter.tex b/examples/letter/letter.tex deleted file mode 100644 index 9e96b2f..0000000 --- a/examples/letter/letter.tex +++ /dev/null @@ -1,15 +0,0 @@ -\documentclass[12pt,a4paper]{scrlttr2} - -\input{~/projects/latex/letter.tex} - -% Subject -\setkomavar{subject}{Test} -\begin{document}\raggedright -\begin{letter}{Company \\ Name \\ Address \\ CH-Place} - \opening{Intro} - - Test - - \closing{Kind regards} -\end{letter} -\end{document} From d03c9b9f4cc1ae5b17f1c293fd5127b049710d87 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sun, 22 Feb 2026 15:01:13 +0100 Subject: [PATCH 32/32] [Old] Add back --- old/janishutz-helpers-v1.tex | 1157 ++++++++++++++++++++++++++++++++++ 1 file changed, 1157 insertions(+) create mode 100644 old/janishutz-helpers-v1.tex diff --git a/old/janishutz-helpers-v1.tex b/old/janishutz-helpers-v1.tex new file mode 100644 index 0000000..7e0048e --- /dev/null +++ b/old/janishutz-helpers-v1.tex @@ -0,0 +1,1157 @@ +% ▄▄▄ ▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄ ▄▄ ▄▄ ▄▄ ▄▄▄▄▄▄▄ ▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄ ▄▄▄▄▄▄▄ +% █ █ █ █ █ █ █▄█ █ █ █ █ █ █ █ █ █ █ ▄ █ █ █ +% █ █ █ ▄ █▄ ▄█ ▄▄▄█ █ █ █▄█ █ ▄▄▄█ █ █ ▄ █ ▄▄▄█ █ █ █ █ ▄▄▄▄▄█ +% █ █ █ █▄█ █ █ █ █ █▄▄▄█ █ █ █ █▄▄▄█ █ █ █▄█ █ █▄▄▄█ █▄▄█▄█ █▄▄▄▄▄ +% █ █▄▄▄█ █ █ █ █ ▄▄▄██ █ █ ▄ █ ▄▄▄█ █▄▄▄█ ▄▄▄█ ▄▄▄█ ▄▄ █▄▄▄▄▄ █ +% █ █ ▄ █ █ █ █ █▄▄▄█ ▄ █ █ █ █ █ █▄▄▄█ █ █ █ █▄▄▄█ █ █ █▄▄▄▄▄█ █ +% █▄▄▄▄▄▄▄█▄█ █▄▄█ █▄▄▄█ █▄▄▄▄▄▄▄█▄▄█ █▄▄█ █▄▄█ █▄▄█▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█▄▄▄█ █▄▄▄▄▄▄▄█▄▄▄█ █▄█▄▄▄▄▄▄▄█ + +% +% ▄▄█▀▀▀█▄█ +% ▄██▀ ▀█ +% ██▀ ▀ ▄██▀██▄▀███▄███ ▄▄█▀██ +% ██ ██▀ ▀██ ██▀ ▀▀ ▄█▀ ██ +% ██▄ ██ ██ ██ ██▀▀▀▀▀▀ +% ▀██▄ ▄▀██▄ ▄██ ██ ██▄ ▄ +% ▀▀█████▀ ▀█████▀▄████▄ ▀█████▀ + +% This file contains all necessary dependencies for the document to compile (at all) and some core macros +% Load this before the config file + + +% ── Imports ───────────────────────────────────────────────────────── +\typeout{[Core] Importing!} +\ClassWarning{janishutz-helpers}{Using legacy (v1) helpers. Please consider updating to the new version} + +\usepackage[table, dvipsnames]{xcolor} +\usepackage{amsmath} +\usepackage{graphicx} +\usepackage{subcaption} +\usepackage[export]{adjustbox} +\usepackage[most]{tcolorbox} +\usepackage{cancel} +\usepackage{etoolbox} +\usepackage{dsfont} +\usepackage{amssymb} +\usepackage{mathrsfs} +\usepackage{ulem} +\usepackage{soul} +\usepackage{parskip} +\usepackage{fancyhdr} +\usepackage{lastpage} +\usepackage{tocloft} +\usepackage{wasysym} +\usepackage{wrapfig} +\usepackage{multicol} +\usepackage{ifthen} +\usepackage[hidelinks]{hyperref} +\usepackage{enumitem} +\usepackage{gensymb} +\usepackage{pifont} + + +% ── Language Switching. ───────────────────────────────────────────── +% Currently only English and German are supported +% See docs for how to use +\newcounter{lang} + +\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} + \usepackage[ngerman]{babel} + \else + \typeout{[Lang Switcher] No such language!} + \fi + \fi +} + +% Deprecated, as not useful +\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} +\newcounter{colCount} +\newbool{cheatSheetLandscape} + +% ── Setup ─────────────────────────────────────────────────────────── +% 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 + \usepackage[a4paper,textwidth=17.5cm,textheight=25cm,includehead]{geometry} + \title{\Huge \textbf{#1}} + \author{\authorTitle} + \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}} + } + \typeout{[Setup] Complete} +} + +% Start document command (required) +\newcommand{\startDocument}{ + \maketitle + \startDocumentNoTitle +} + +% Or this one, if you don't want a title +\newcommand{\startDocumentNoTitle}{ + \pagestyle{fancy} + \thispagestyle{fancy} +} + +% Set up the latex document, only configuring the author, title and page size +\newcommand{\setupBarebones}[1]{ + \typeout{[Setup] Using barebones setup} + \loadLang + \usepackage[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]{ + \typeout{[Setup] Using CheatSheet setup} + \loadLang + \edef\valtrue{true} + \ifbool{cheatSheetLandscape}{ + \typeout{[Setup] Using landscape with \arabic{colCount} columns} + \usepackage[landscape,a4paper,textwidth=28.5cm,textheight=20cm]{geometry} + + \usepackage{flowfram} + \allowdisplaybreaks + \ffvadjustfalse + \setlength{\columnsep}{1cm} + \Ncolumn{\arabic{colCount}} + }{ + \typeout{[Setup] Using portrait} + \usepackage[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 }} + +% ___ ___ +% ( _ \ / ___)_ +% | ( (_) _ ___ | (__ (_) __ +% | | _ / _ \/ _ \ __)| |/ _ \ +% | (_( ) (_) ) ( ) | | | | (_) | +% (____/ \___/(_) (_)_) (_)\__ | +% ( )_) | +% \___/ + +% 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} + +% Whether or not to use landscape orientation for the cheat sheet +\boolfalse{cheatSheetLandscape} + +% Set the number of columns to use (only affects the CheatSheet style and only if cheatSheetLandscape is set to true) +\setcounter{colCount}{3} + +%░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ +%░░░ ░░░░░ ░░░░░░░░░░░░░ ░░░░░░░░░░░ +%▒ ▒▒▒▒ ▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒ +%▒▒ ▒▒▒▒▒▒▒ ▒ ▒ ▒▒▒ ▒ ▒▒▒▒ ▒▒▒▒ +%▓▓▓▓ ▓▓▓▓▓▓▓ ▓▓▓▓ ▓ ▓▓ ▓▓ ▓▓▓ ▓ +%▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓▓▓▓▓ ▓▓▓ ▓ ▓ +%▓ ▓▓▓▓ ▓▓▓ ▓ ▓▓▓▓▓ ▓▓▓ ▓ ▓▓▓▓▓▓▓▓ +%███ ██████ █████ ████ ███ ███ +%██████████████████████ ███████████████████ + +% 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{\hrmvspace}{\vspace{-0.25pc}} +\newcommand{\rmvspace}{\vspace{-0.5pc}} +\newcommand{\mrmvspace}{\vspace{-0.75pc}} +\newcommand{\drmvspace}{\vspace{-1pc}} +\newcommand{\dhrmvspace}{\vspace{-1.25pc}} +\newcommand{\dnrmvspace}{\vspace{-1.5pc}} +\newcommand{\dmrmvspace}{\vspace{-1.75pc}} +\newcommand{\ddrmvspace}{\vspace{-2pc}} +\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}}}} + +% Draw box around links. First arg link, second arg display +\newcommand{\hlhref}[2]{\color{MidnightBlue}\fbox{\href{#1}{#2}}\color{black}} + +% Same for urls (just one arg tho) +\newcommand{\hlurl}[1]{\color{MidnightBlue}\fbox{\url{#1}}\color{black}} + +% 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} +} + +%▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +%██░▄▄▀█▀▄▄▀█░▄▀▄░█░▄▀▄░█▀▄▄▀█░▄▄▀ +%██░████░██░█░█▄█░█░█▄█░█░██░█░██░ +%██░▀▀▄██▄▄██▄███▄█▄███▄██▄▄██▄██▄ +%▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ + +% General tcolorboxes +\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} + +% ▄▄ +% ▀████▄ ▄███▀ ██ ███ +% ████ ████ ██ ██ +% █ ██ ▄█ ██ ▄█▀██▄ ██████ ███████▄ +% █ ██ █▀ ██ ██ ██ ██ ██ ██ +% █ ██▄█▀ ██ ▄█████ ██ ██ ██ +% █ ▀██▀ ██ ██ ██ ██ ██ ██ +% ▄███▄ ▀▀ ▄████▄████▀██▄ ▀███████ ████▄ + + +% BB shortcuts (for number spaces, etc) +\newcommand{\A}{\mathbb{A}} +\newcommand{\B}{\mathbb{B}} +\newcommand{\C}{\mathbb{C}} +\newcommand{\D}{\mathbb{D}} +\newcommand{\E}{\mathbb{E}} +\newcommand{\F}{\mathbb{F}} +\newcommand{\G}{\mathbb{G}} +\renewcommand{\H}{\mathbb{H}} +\newcommand{\I}{\mathbb{I}} +\newcommand{\J}{\mathbb{J}} +\newcommand{\K}{\mathbb{K}} +\renewcommand{\L}{\mathbb{L}} +\newcommand{\M}{\mathbb{M}} +\newcommand{\N}{\mathbb{N}} +\renewcommand{\O}{\mathbb{O}} +\renewcommand{\P}{\mathbb{P}} +\newcommand{\Q}{\mathbb{Q}} +\newcommand{\R}{\mathbb{R}} +\renewcommand{\S}{\mathbb{S}} +\newcommand{\T}{\mathbb{T}} +\newcommand{\U}{\mathbb{U}} +\newcommand{\V}{\mathbb{V}} +\newcommand{\W}{\mathbb{W}} +\newcommand{\X}{\mathbb{X}} +\newcommand{\Y}{\mathbb{Y}} +\newcommand{\Z}{\mathbb{Z}} + +% Caligraphic +\newcommand{\cA}{\mathcal{A}} +\newcommand{\cB}{\mathcal{B}} +\newcommand{\cC}{\mathcal{C}} +\newcommand{\cD}{\mathcal{D}} +\newcommand{\cE}{\mathcal{E}} +\newcommand{\cF}{\mathcal{F}} +\newcommand{\cG}{\mathcal{G}} +\newcommand{\cH}{\mathcal{H}} +\newcommand{\cI}{\mathcal{I}} +\newcommand{\cJ}{\mathcal{J}} +\newcommand{\cK}{\mathcal{K}} +\newcommand{\cL}{\mathcal{L}} +\newcommand{\cM}{\mathcal{M}} +\newcommand{\cN}{\mathcal{N}} +\newcommand{\cO}{\mathcal{O}} +\newcommand{\cP}{\mathcal{P}} +\newcommand{\cQ}{\mathcal{Q}} +\newcommand{\cR}{\mathcal{R}} +\newcommand{\cS}{\mathcal{S}} +\newcommand{\cT}{\mathcal{T}} +\newcommand{\cU}{\mathcal{U}} +\newcommand{\cV}{\mathcal{V}} +\newcommand{\cW}{\mathcal{W}} +\newcommand{\cX}{\mathcal{X}} +\newcommand{\cY}{\mathcal{Y}} +\newcommand{\cZ}{\mathcal{Z}} + +% other useful shortcuts +\newcommand{\elementstack}[2]{\genfrac{}{}{0pt}{}{#1}{#2}} +\newcommand{\8}{\infty} +\newcommand{\cond}{\text{cond}} +\newcommand{\argmin}[1]{\underset{#1}{\text{argmin}}} +\newcommand{\dx}{\text{ d}} +\newcommand{\floor}[1]{\left\lfloor #1 \right\rfloor} +\newcommand{\ceil}[1]{\left\lceil #1 \right\rceil} +\newcommand{\hastoeq}{\overset{!}{=}} +\newcommand{\Leftrightarrowequiv}{\overset{\cdot}{\Leftrightarrow}} +\newcommand{\Longleftrightarrowequiv}{\overset{\cdot}{\Longleftrightarrow}} +\newcommand{\Rightarrowequiv}{\overset{\cdot}{\Rightarrow}} +\newcommand{\Leftarrowequiv}{\overset{\cdot}{\Leftarrow}} +\newcommand{\defAs}{\overset{\text{def}}{=}} +\newcommand{\der}[1]{\frac{\mbox{d}}{\mbox{d}#1}} +\newcommand{\dern}[2]{\frac{\mbox{d}^{#2}}{\mbox{d}^{#2}#1}} +\newcommand{\parder}[1]{\frac{\partial}{\partial #1}} +\newcommand{\pardern}[2]{\frac{\partial^{#2}}{\partial^{#2} #1}} +\newcommand{\defEquiv}{\overset{\text{def}}{\Leftrightarrow}} +\newcommand{\defImplies}{\overset{\text{def}}{\Rightarrow}} +\newcommand{\divides}{\hspace{0.25em}|\hspace{0.25em}} +\newcommand{\mbeq}{\overset{!}{=}} +\newcommand{\lcm}{\text{lcm}} +\newcommand{\limit}[2]{\underset{#1 \rightarrow #2}{\lim}} +\newcommand{\seq}[1]{(#1_n)_{n \geq 1}} +\newcommand{\ser}[2]{\sum_{k = 1}^{#2} #1_k} +\newcommand{\limni}{\limit{n}{\infty}} +\newcommand{\limnz}{\limit{n}{0}} +\newcommand{\limxz}{\limit{x_0}{0}} +\newcommand{\limhz}{\limit{h}{0}} +\newcommand{\liminfni}{\liminf_{n \rightarrow \infty}} +\newcommand{\limsupni}{\limsup_{n \rightarrow \infty}} +\DeclareMathOperator\arctanh{arctanh} +\DeclareMathOperator\arccosh{arccosh} +\DeclareMathOperator\arcsinh{arcsinh} + + +% ░▒█▀▀▄░▄▀▀▄░█▀▄▀█░▄▀▀▄░█░▒█░▀█▀░█▀▀░█▀▀▄░░░▒█▀▀▀█░█▀▄░░▀░░█▀▀░█▀▀▄░█▀▄░█▀▀ +% ░▒█░░░░█░░█░█░▀░█░█▄▄█░█░▒█░░█░░█▀▀░█▄▄▀░░░░▀▀▀▄▄░█░░░░█▀░█▀▀░█░▒█░█░░░█▀▀ +% ░▒█▄▄▀░░▀▀░░▀░░▒▀░█░░░░░▀▀▀░░▀░░▀▀▀░▀░▀▀░░░▒█▄▄▄█░▀▀▀░▀▀▀░▀▀▀░▀░░▀░▀▀▀░▀▀▀ + + +% Extra imports +\usepackage{stmaryrd} +\usepackage{algorithm} +\usepackage{algpseudocodex} +\usepackage{setspace} +\usepackage{verbatim} +\usepackage{turnstile} +\usepackage{forloop} + +\newcommand{\Indent}{\hspace{\algorithmicindent}} + +% Extra commands +\newcommand{\timecomplexity}{\fhlc{orange}{\ifnum\value{lang}<2{Time complexity}\else {Laufzeit}\fi} \hspace{0.5em}} +\newcommand{\tc}[1]{\timecomplexity $\Theta\left(#1\right)$} +\newcommand{\tct}[1]{\Theta\left(#1\right)} +\newcommand{\tco}[1]{\mathcal{O}\left(#1\right)} +\newcommand{\tcl}[1]{\Omega\left(#1\right)} +\newcommand{\wordbool}{(\Sigma_{\text{bool}})^*} +\newcommand{\words}[1]{(\Sigma_{\text{#1}})^*} +\newcommand{\word}{\Sigma^*} +\newcommand{\wordm}[1]{\Sigma_{\text{#1}}^*} +\newcommand{\alphabets}[1]{\Sigma_{\text{#1}}} +\newcommand{\alphabetbool}{\Sigma_{\text{bool}}} +\newcommand{\tR}{\text{R}} +\newcommand{\tC}{\text{C}} +\newcommand{\tN}{\text{N}} +\newcommand{\bigvdash}[2]{\sststile{#1}{#2}} +\newcommand{\class}{\text{\tr{Cl}{Kl}}} + +% ▄▄ +% ▀████▀ ▀███ +% ██ ██ +% ██ ▀████████▄ ▄█▀▀███ ▄▄█▀██▀██▀ ▀██▀ +% ██ ██ ██ ▄██ ██ ▄█▀ ██ ▀██ ▄█▀ +% ██ ██ ██ ███ ██ ██▀▀▀▀▀▀ ███ +% ██ ██ ██ ▀██ ██ ██▄ ▄ ▄█▀ ██▄ +% ▄████▄████ ████▄ ▀████▀███▄ ▀█████▀██▄ ▄██▄ + + +% For using index package +\newcommand{\prepareIndex}{ + \usepackage[T1]{fontenc} + \usepackage{imakeidx} + \makeindex +} + +\newcommand{\addIndexBold}[1]{\textbf{\index{\MakeLowercase{#1}} #1}} +\newcommand{\addIndexItalic}[1]{\textit{\index{\MakeLowercase{#1}} #1}} +\newcommand{\addIndex}[1]{\index{\MakeLowercase{#1}} #1} + + + +% ▄▄· ▄• ▄▌ ▐ ▄ ▄▄▄▄▄▄▄▄ .▄▄▄ +% ▐█ ▌▪ ▄█▀▄ █▪██▌•█▌▐█•██ ▀▄.▀·▀▄ █· +% ██ ▄▄▐█▌.▐▌█▌▐█▌▐█▐▐▌ ▐█.▪▐▀▀▪▄▐▀▀▄ +% ▐███▌▐█▌.▐▌▐█▄█▌██▐█▌ ▐█▌·▐█▄▄▌▐█•█▌ +% ·▀▀▀ ▀█▄▀▪ ▀▀▀ ▀▀ █▪ ▀▀▀ ▀▀▀ .▀ ▀ + +\usepackage{xstring} +\usepackage{etoolbox} +% tcolorbox and other stylistic elements (i.e. inline versions of them) that have counters +\newcounter{lemma}[section] +\newcounter{definition}[section] +\newcounter{corollary}[section] +\newcounter{theorem}[section] +\newcounter{axiom}[section] +\newcounter{example}[section] +\newcounter{fact}[section] +\newcounter{proposition}[section] +\newcounter{formula}[section] +\newcounter{remark}[section] +\newcounter{all}[section] + +\newcounter{lemmass}[subsection] +\newcounter{definitionss}[subsection] +\newcounter{corollaryss}[subsection] +\newcounter{theoremss}[subsection] +\newcounter{axiomss}[subsection] +\newcounter{exampless}[subsection] +\newcounter{factss}[subsection] +\newcounter{propositionss}[subsection] +\newcounter{formulass}[subsection] +\newcounter{remarkss}[subsection] +\newcounter{allss}[subsection] + +\newcounter{lemmasss}[subsubsection] +\newcounter{definitionsss}[subsubsection] +\newcounter{corollarysss}[subsubsection] +\newcounter{theoremsss}[subsubsection] +\newcounter{axiomsss}[subsubsection] +\newcounter{examplesss}[subsubsection] +\newcounter{factsss}[subsubsection] +\newcounter{propositionsss}[subsubsection] +\newcounter{formulasss}[subsubsection] +\newcounter{remarksss}[subsubsection] +\newcounter{allsss}[subsubsection] + +% Set the current number of a label +\newcommand{\setLabelNumber}[2]{% + \setcounter{#1}{#2}% + \addtocounter{#1}{-1}% + \setcounter{#1ss}{#2}% + \addtocounter{#1ss}{-1}% + \setcounter{#1sss}{#2}% + \addtocounter{#1sss}{-1}% +} + +\newcommand{\stepLabelNumber}[1]{% + \stepcounter{#1}% + \stepcounter{#1ss}% + \stepcounter{#1sss}% +} + +\newcommand{\printcounter}[1]{% + \csname the#1\endcsname +} + +\newcommand{\suffix}{ss} +\newcommand{\sectionNumbering}{\thesection} + +% ┌ ┐ +% │ Counter numbering │ +% └ ┘ +\newcommand{\preTableAndFigHook}[1]{% + \ifnum\value{numberingConfig}>1% + \ifnum\value{numberSubsections}=1% + \stepcounter{allss}% + \else + \ifnum\value{numberSubsections}=2% + \stepcounter{allsss}% + \else% + \stepcounter{all}% + \fi + \fi + \fi +} +\AtBeginEnvironment{table}{\preTableAndFigHook{table}} +\AtBeginEnvironment{figure}{\preTableAndFigHook{figure}} + +\newcommand{\applyTableAndFigureNumbering}{ + % Tables & Figures + \ifnum\value{numberingConfig}=0 + \renewcommand{\thetable}{\arabic{table}} + \renewcommand{\thefigure}{\arabic{figure}} + \else + \ifnum\value{numberingConfig}=1 + \renewcommand{\thetable}{\sectionNumbering.\arabic{table}} + \renewcommand{\thefigure}{\sectionNumbering.\arabic{figure}} + \else + \ifnum\value{numberSubsections}=1 + \renewcommand{\thetable}{\sectionNumbering.\arabic{allss}} + \renewcommand{\thefigure}{\sectionNumbering.\arabic{allss}} + \else + \ifnum\value{numberSubsections}=2 + \renewcommand{\thetable}{\refstepcounter{allsss}\sectionNumbering.\arabic{allsss}} + \renewcommand{\thefigure}{\sectionNumbering.\arabic{allsss}} + \else + \renewcommand{\thetable}{\sectionNumbering.\arabic{all}} + \renewcommand{\thefigure}{\sectionNumbering.\arabic{all}} + \fi + \fi + \fi + \fi +} + +\newcommand{\setSubsectionNumbering}[1]{ + \setcounter{numberSubsections}{#1} + \applySubsectionNumbering +} + +\newcommand{\applySubsectionNumbering}{ + \ifnum\value{numberSubsections}=1 + \renewcommand{\sectionNumbering}{\thesubsection} + \renewcommand{\suffix}{ss} + \typeout{Numbering as section.subsection.number} + \else + \ifnum\value{numberSubsections}=2 + \renewcommand{\sectionNumbering}{\thesubsubsection} + \renewcommand{\suffix}{sss} + \typeout{Numbering as section.subsection.subsubsection.number} + \else + \renewcommand{\sectionNumbering}{\thesection} + \renewcommand{\suffix}{} + \typeout{Numbering as section.number} + \fi + \fi + \applyTableAndFigureNumbering + + \renewcommand{\thelemma}{\sectionNumbering.\arabic{lemma}} + \renewcommand{\thedefinition}{\sectionNumbering.\arabic{definition}} + \renewcommand{\thecorollary}{\sectionNumbering.\arabic{corollary}} + \renewcommand{\thetheorem}{\sectionNumbering.\arabic{theorem}} + \renewcommand{\theaxiom}{\sectionNumbering.\arabic{axiom}} + \renewcommand{\theexample}{\sectionNumbering.\arabic{example}} + \renewcommand{\thefact}{\sectionNumbering.\arabic{fact}} + \renewcommand{\theproposition}{\sectionNumbering.\arabic{proposition}} + \renewcommand{\theformula}{\sectionNumbering.\arabic{formula}} + \renewcommand{\theremark}{\sectionNumbering.\arabic{remark}} + \renewcommand{\theall}{\sectionNumbering.\arabic{all}} + + \renewcommand{\thelemmass}{\sectionNumbering.\arabic{lemmass}} + \renewcommand{\thedefinitionss}{\sectionNumbering.\arabic{definitionss}} + \renewcommand{\thecorollaryss}{\sectionNumbering.\arabic{corollaryss}} + \renewcommand{\thetheoremss}{\sectionNumbering.\arabic{theoremss}} + \renewcommand{\theaxiomss}{\sectionNumbering.\arabic{axiomss}} + \renewcommand{\theexampless}{\sectionNumbering.\arabic{exampless}} + \renewcommand{\thefactss}{\sectionNumbering.\arabic{factss}} + \renewcommand{\thepropositionss}{\sectionNumbering.\arabic{propositionss}} + \renewcommand{\theformulass}{\sectionNumbering.\arabic{formulass}} + \renewcommand{\theremarkss}{\sectionNumbering.\arabic{remarkss}} + \renewcommand{\theallss}{\sectionNumbering.\arabic{allss}} + + \renewcommand{\thelemmasss}{\sectionNumbering.\arabic{lemmasss}} + \renewcommand{\thedefinitionsss}{\sectionNumbering.\arabic{definitionsss}} + \renewcommand{\thecorollarysss}{\sectionNumbering.\arabic{corollarysss}} + \renewcommand{\thetheoremsss}{\sectionNumbering.\arabic{theoremsss}} + \renewcommand{\theaxiomsss}{\sectionNumbering.\arabic{axiomsss}} + \renewcommand{\theexamplesss}{\sectionNumbering.\arabic{examplesss}} + \renewcommand{\thefactsss}{\sectionNumbering.\arabic{factsss}} + \renewcommand{\thepropositionsss}{\sectionNumbering.\arabic{propositionsss}} + \renewcommand{\theformulasss}{\sectionNumbering.\arabic{formulasss}} + \renewcommand{\theremarksss}{\sectionNumbering.\arabic{remarksss}} + \renewcommand{\theallsss}{\sectionNumbering.\arabic{allsss}} +} +\applySubsectionNumbering + +% ── Label generation ──────────────────────────────────────────────── +\newcommand{\labelSectionGeneration}{% + \ifnum\value{numberSubsections}=1 + \arabic{section}-\arabic{subsection}% + \else + \ifnum\value{numberSubsections}=2 + \arabic{section}-\arabic{subsection}-\arabic{subsubsection}% + \else + \arabic{section}% + \fi + \fi} + +\newcommand{\labelIt}[1]{\refstepcounter{#1\suffix}\edef\tempLabel{\genLabel{#1}{\arabic{#1\suffix}}}\label{\tempLabel}} +\newcommand{\genLabel}[2]{#1:\labelSectionGeneration-#2} + +% ┌ ┐ +% │ Number the counters appropriately │ +% └ ┘ +\newcommand{\usenumberArabic}[1]{% + \ifnum\value{numberingConfig}=1 + \labelIt{#1} + \printcounter{#1\suffix}% + \else + \ifnum\value{numberingConfig}=2 + \ifthenelse{\equal{#1}{definitions}}{% + \labelIt{definition} + \printcounter{definition\suffix}% + }{% + \labelIt{all} + \printcounter{all\suffix}% + }% + \else + \ifnum\value{numberingConfig}=3 + \labelIt{all} + \printcounter{all\suffix}% + \else + \relax% + \fi + \fi + \fi} + + +% ──────────────────────────────────────────────────────────────────── +% ┌ ┐ +% │ Enable or disable numbering │ +% └ ┘ +% Initialize with config file +\newcounter{numberingConfigStore} +\setcounter{numberingConfigStore}{\value{numberingConfig}} + +% For later change +\newcommand{\setNumberingStyle}[1]{ + \typeout{Setting NumberingStyle to #1} + \setcounter{numberingConfig}{#1} + \ifthenelse{\equal{#1}{0}}{}{ + \setcounter{numberingConfigStore}{#1} + } + \applyTableAndFigureNumbering +} + +% Enable / disable numbering +\newcommand{\numberingOff}{ + \setcounter{numberingConfig}{0} + \applyTableAndFigureNumbering +} +\newcommand{\numberingOn}{ + \setcounter{numberingConfig}{\value{numberingConfigStore}} + \applyTableAndFigureNumbering +} + +% ──────────────────────────────────────────────────────────────────── +% ╭────────────────────────────────────────────────╮ +% │ Reset definition, lemma, etc counters, add a │ +% │ new page │ +% ╰────────────────────────────────────────────────╯ +\newcommand{\newsection}{ + \newpage + \newsectionNoPB +} + +% ── Reset definitions, lemma, etc counters, do not add new page ───── +\newcommand{\newsectionNoPB}{ + \setcounter{lemma}{0} + \setcounter{definition}{0} + \setcounter{corollary}{0} + \setcounter{theorem}{0} + \setcounter{axiom}{0} + \setcounter{example}{0} + \setcounter{fact}{0} + \setcounter{proposition}{0} + \setcounter{formula}{0} + \setcounter{remark}{0} + \setcounter{all}{0} + + \setcounter{lemmass}{0} + \setcounter{definitionss}{0} + \setcounter{corollaryss}{0} + \setcounter{theoremss}{0} + \setcounter{axiomss}{0} + \setcounter{exampless}{0} + \setcounter{factss}{0} + \setcounter{propositionss}{0} + \setcounter{formulass}{0} + \setcounter{remarkss}{0} + \setcounter{allss}{0} + + \setcounter{lemmasss}{0} + \setcounter{definitionsss}{0} + \setcounter{corollarysss}{0} + \setcounter{theoremsss}{0} + \setcounter{axiomsss}{0} + \setcounter{examplesss}{0} + \setcounter{factsss}{0} + \setcounter{propositionsss}{0} + \setcounter{formulasss}{0} + \setcounter{remarksss}{0} + \setcounter{allsss}{0} + + % Tables & Figures + \setcounter{table}{0} + \setcounter{figure}{0} +} +\newsectionNoPB % Initializes + + +% ──────────────────────────────────────────────────────────────────── +% ╭────────────────────────────────────────────────╮ +% │ Tcolorboxes │ +% ╰────────────────────────────────────────────────╯ +% ──────────────────────────────────────────────────────────────────── + +% Definitions +\newtcolorbox{definition}[2][]{mainboxstyle,colback=blue!5!white,colframe=blue!75!black,colbacktitle=blue!75!black,title={\large #2},overlay={\node[overlaystyle,draw=blue!75!black,fill=blue!75!black] at (frame.north east) {\large Definition\usenumberArabic{definition}};},#1} + +% Theorems +\newtcolorbox{theorem}[2][]{mainboxstyle,colback=ForestGreen!5!white,colframe=ForestGreen!75!black,colbacktitle=ForestGreen!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=ForestGreen!75!black,fill=ForestGreen!75!black] at (frame.north east) {\large \translate{Theorem}{\theoremde}\usenumberArabic{theorem}};},#1} + +% Lemmas +\newtcolorbox{lemma}[2][]{mainboxstyle,colback=Aquamarine!5!white,colframe=Aquamarine!75!black,colbacktitle=Aquamarine!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=Aquamarine!75!black,fill=Aquamarine!75!black] at (frame.north east) {\large Lemma\usenumberArabic{lemma}};},#1} + +% Corollaries +\newtcolorbox{corollary}[2][]{mainboxstyle,colback=teal!5!white,colframe=teal!75!black,colbacktitle=teal!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=teal!75!black,fill=teal!75!black] at (frame.north east) {\large \translate{Corollary}{Korollar}\usenumberArabic{corollary}};},#1} + +% Axioms +\newtcolorbox{axiom}[2][]{mainboxstyle,colback=JungleGreen!5!white,colframe=JungleGreen!75!black,colbacktitle=JungleGreen!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=JungleGreen!75!black,fill=JungleGreen!75!black] at (frame.north east) {\large Axiom\usenumberArabic{axiom}};},#1} + +% Facts +\newtcolorbox{fact}[2][]{mainboxstyle,colback=SeaGreen!5!white,colframe=SeaGreen!75!black,colbacktitle=SeaGreen!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=SeaGreen!75!black,fill=SeaGreen!75!black] at (frame.north east) {\large \translate{Fact}{Fakt}\usenumberArabic{fact}};},#1} + +% Propositions +\newtcolorbox{proposition}[2][]{mainboxstyle,colback=Cyan!5!white,colframe=Cyan!75!black,colbacktitle=Cyan!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=Cyan!75!black,fill=Cyan!75!black] at (frame.north east) {\large Proposition\usenumberArabic{proposition}};},#1} + +% Examples +\newtcolorbox{example}[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{Example}{Beispiel}\usenumberArabic{example}};},#1} + +% Formula +\newtcolorbox{formula}[2][]{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 \translate{Formula}{Formel}\usenumberArabic{formula}};},#1} + +% Remark +\newtcolorbox{remark}[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{Remark}{Bemerkung} \usenumberArabic{remark}};},#1} + + +% ──────────────────────────────────────────────────────────────────── +% ╭────────────────────────────────────────────────╮ +% │ Inline environments │ +% ╰────────────────────────────────────────────────╯ +% ──────────────────────────────────────────────────────────────────── + + +% Inline environments (inline) +\newcommand{\inlineex}{\bg{gray}{\translate{Example}{Beispiel}\usenumberArabic{example}:}} +\newcommand{\inlinedef}{\bg{blue}{Definition\usenumberArabic{definition}:}} +\newcommand{\inlineformula}{\bg{red}{\translate{Formula}{Formel}\usenumberArabic{formula}:}} +\newcommand{\inlinelemma}{\bg{Aquamarine}{Lemma\usenumberArabic{lemma}:}} +\newcommand{\inlinetheorem}{\bg{ForestGreen}{\translate{Theorem}{\theoremde}\usenumberArabic{theorem}:}} +\newcommand{\inlineaxiom}{\bg{JungleGreen}{Axiom\usenumberArabic{axiom}:}} +\newcommand{\inlinecorollary}{\bg{teal}{\translate{Corollary}{Korollar}\usenumberArabic{corollary}:}} +\newcommand{\inlinefact}{\bg{SeaGreen}{\translate{Fact}{Fakt}\usenumberArabic{fact}:}} +\newcommand{\inlineproposition}{\bg{Cyan}{Proposition\usenumberArabic{proposition}:}} +\newcommand{\inlineremark}{\bg{green}{\translate{Remark}{Bemerkung}\usenumberArabic{remark}:}} +\newcommand{\inlineproof}{\bg{magenta}{\translate{Proof}{Beweis}:}} + +% Enhanced inline environments +\newcommand{\fancyex}[1]{\bg{gray}{\translate{Example}{Beispiel}\usenumberArabic{example}:} \textit{(#1)}} +\newcommand{\fancydef}[1]{\bg{blue}{Definition\usenumberArabic{definition}:} \textit{(#1)}} +\newcommand{\fancyformula}[1]{\bg{red}{\translate{Formula}{Formel}\usenumberArabic{formula}:} \textit{(#1)}} +\newcommand{\fancylemma}[1]{\bg{Aquamarine}{Lemma\usenumberArabic{lemma}:} \textit{(#1)}} +\newcommand{\fancytheorem}[1]{\bg{ForestGreen}{\translate{Theorem}{\theoremde}\usenumberArabic{theorem}:} \textit{(#1)}} +\newcommand{\fancyaxiom}[1]{\bg{JungleGreen}{Axiom\usenumberArabic{axiom}:} \textit{(#1)}} +\newcommand{\fancycorollary}[1]{\bg{teal}{\translate{Corollary}{Korollar}\usenumberArabic{corollary}:} \textit{(#1)}} +\newcommand{\fancyfact}[1]{\bg{SeaGreen}{\translate{Fact}{Fakt}\usenumberArabic{fact}:} \textit{(#1)}} +\newcommand{\fancyproposition}[1]{\bg{Cyan}{Proposition\usenumberArabic{proposition}:} \textit{(#1)}} +\newcommand{\fancyremark}[1]{\bg{green}{\translate{Remark}{Bemerkung}\usenumberArabic{remark}:} \textit{(#1)}} +\newcommand{\fancyproof}[1]{\bg{magenta}{\translate{Proof}{Beweis}: \textit{(#1)}}} + +% short environments (abbreviated) +\newcommand{\shortex}{\bg{gray}{\translate{Ex}{Bsp}\usenumberArabic{example}:}} +\newcommand{\shortdef}{\bg{blue}{D\usenumberArabic{definition}:}} +\newcommand{\short}{\bg{red}{F\usenumberArabic{formula}:}} +\newcommand{\shortlemma}{\bg{Aquamarine}{L\usenumberArabic{lemma}:}} +\newcommand{\shorttheorem}{\bg{ForestGreen}{\translate{T}{\StrMid{\theoremde}{1}{1}}\usenumberArabic{theorem}:}} +\newcommand{\shortaxiom}{\bg{JungleGreen}{A\usenumberArabic{axiom}:}} +\newcommand{\shortcorollary}{\bg{teal}{\translate{C}{K}\usenumberArabic{corollary}:}} +\newcommand{\shortfact}{\bg{SeaGreen}{F\usenumberArabic{fact}:}} +\newcommand{\shortproposition}{\bg{Cyan}{P\usenumberArabic{proposition}:}} +\newcommand{\shortremark}{\bg{green}{\tr{R}{B}\usenumberArabic{remark}:}} +\newcommand{\shortproof}{\bg{magenta}{\translate{Proof}{Beweis}:}} + +% Enhanced short environments (abbreviated) +\newcommand{\compactex}[1]{\bg{gray}{\translate{Ex}{Bsp}\usenumberArabic{example}:} \textit{(#1)}} +\newcommand{\compactdef}[1]{\bg{blue}{D\usenumberArabic{definition}:} \textit{(#1)}} +\newcommand{\compactformula}[1]{\bg{red}{F\usenumberArabic{formula}:} \textit{(#1)}} +\newcommand{\compactlemma}[1]{\bg{Aquamarine}{L\usenumberArabic{lemma}:} \textit{(#1)}} +\newcommand{\compacttheorem}[1]{\bg{ForestGreen}{\translate{T}{\StrMid{\theoremde}{1}{1}}\usenumberArabic{theorem}:} \textit{(#1)}} +\newcommand{\compactaxiom}[1]{\bg{JungleGreen}{A\usenumberArabic{axiom}:} \textit{(#1)}} +\newcommand{\compactcorollary}[1]{\bg{teal}{\translate{C}{K}\usenumberArabic{corollary}:} \textit{(#1)}} +\newcommand{\compactfact}[1]{\bg{SeaGreen}{F\usenumberArabic{fact}:} \textit{(#1)}} +\newcommand{\compactproposition}[1]{\bg{Cyan}{P\usenumberArabic{proposition}:} \textit{(#1)}} +\newcommand{\compactremark}[1]{\bg{green}{\tr{R}{B}\usenumberArabic{remark}:} \textit{(#1)}} +\newcommand{\compactproof}[1]{\bg{magenta}{\translate{Proof}{Beweis}: \textit{(#1)}}} + +% ▄▄ +% ▄▄█▀▀▀█▄█ ██ ▄█▀▀▀█▄█ ██ +% ▄██▀ ▀█ ██ ▄██ ▀█ +% ██▀ ▀ ▄██▀██▄▀████████▄█████▄ ▀████████▄▀███ ▀███ ██████ ▄▄█▀██▀███▄███ ▀███▄ ▄██▀██▀███ ▄▄█▀██▀████████▄ ▄██▀██ ▄▄█▀██ +% ██ ██▀ ▀██ ██ ██ ██ ██ ▀██ ██ ██ ██ ▄█▀ ██ ██▀ ▀▀ ▀█████▄█▀ ██ ██ ▄█▀ ██ ██ ██ ██▀ ██ ▄█▀ ██ +% ██▄ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀▀▀▀▀ ██ ▄ ▀███ ██ ██▀▀▀▀▀▀ ██ ██ ██ ██▀▀▀▀▀▀ +% ▀██▄ ▄▀██▄ ▄██ ██ ██ ██ ██ ▄██ ██ ██ ██ ██▄ ▄ ██ ██ ███▄ ▄ ██ ██▄ ▄ ██ ██ ██▄ ▄██▄ ▄ +% ▀▀█████▀ ▀█████▀▄████ ████ ████▄ ██████▀ ▀████▀███▄ ▀████ ▀█████▀████▄ █▀█████▀ █████▀▄████▄ ▀█████▀████ ████▄█████▀ ▀█████▀ +% ██ +% ▄████▄ + +\usepackage{forest} +\tikzset{algpxIndentLine/.style={draw=lightgray}} +\algrenewcommand{\alglinenumber}[1]{#1} + +\newenvironment{algo}[1]{ + \begin{algorithm} + \begin{spacing}{1.2} + \caption{\textsc{#1}} + \begin{algorithmic}[1] + }{ + \end{algorithmic} + \end{spacing} + \end{algorithm} +} + +% • ▌ ▄ ·. ▄▄▄· ▄▄▄▄▄ ▄ .▄ .▄▄ · ▄▄▄▄▄ ▄· ▄▌▄▄▌ ▄▄▄ . +% ·██ ▐███▪▐█ ▀█ •██ ██▪▐█ ▐█ ▀. •██ ▐█▪██▌██• ▀▄.▀· +% ▐█ ▌▐▌▐█·▄█▀▀█ ▐█.▪██▀▀█ ▄▀▀▀█▄ ▐█.▪▐█▌▐█▪██ ▪ ▐▀▀▪▄ +% ██ ██▌▐█▌▐█▪ ▐▌ ▐█▌·██▌▐▀ ▐█▄▪▐█ ▐█▌· ▐█▀·.▐█▌ ▄▐█▄▄▌ +% ▀▀ █▪▀▀▀ ▀ ▀ ▀▀▀ ▀▀▀ · ▀▀▀▀ ▀▀▀ ▀ • .▀▀▀ ▀▀▀ + +% Replace some commonly used commands with better ones +\newcommand{\vect}[1]{\overrightarrow{#1}} +\renewcommand{\hat}[1]{\widehat{#1}} +\renewcommand{\tilde}[1]{\widetilde{#1}} +\newcommand{\proven}{$\hspace{17cm}\square$} + + +% ░█▒░▒▄▀▄░█▄░█░▄▀▒░█▒█▒▄▀▄░▄▀▒▒██▀░░░▄▀▀░▀█▀░▀▄▀░█▒░▒██▀ +% ▒█▄▄░█▀█░█▒▀█░▀▄█░▀▄█░█▀█░▀▄█░█▄▄▒░▒▄██░▒█▒░▒█▒▒█▄▄░█▄▄ + +% Specific styles for language summaries and docs +\newtcolorbox{conjugation}[2][]{mainboxstyle,colback=blue!5!white,colframe=blue!75!black,colbacktitle=blue!75!black,title={\large #2}, + overlay={\node[overlaystyle,draw=blue!75!black,fill=blue!75!black] at (frame.north east) {\large \translate{Conjugation}{Konjugation}};},#1} + +\newtcolorbox{forms}[2][]{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 \translate{Forms}{Formen}};},#1} + +% _____ _ _ +% (_ _) ( ) (_ ) +% | | _ _| |_ | | __ ___ +% | | / _ ) _ \ | | / __ \ __) +% | | ( (_| | |_) )| |( ___/__ \ +% (_) \__ _)_ __/(___)\____)____/ + + +\usepackage{booktabs} + +% Create new table. #1 Layout, #2 title row +\newenvironment{tables}[2]{ + \begin{center} + \begin{tabular}{#1} + \toprule + #2 \\ + \midrule + }{ + \bottomrule + \end{tabular} + \end{center} +} + +% Create new table in table env. #1 layout, #2 title row, #3 caption +\newenvironment{fullTable}[3]{ + \edef\tableCaption{#3} + \begin{table}[h!] + \begin{tables}{#1}{#2} + }{ + \end{tables} + \caption{\tableCaption} + \end{table} +} + +% ___ _ _____ _ _ +% ( _ \ _( ) (_ _) ( ) ( ) +% | (_) )_) |_ | | __ \ \/ / +% | _ (| | _ \ | | / __ \ ) ( +% | (_) ) | |_) ) | | ( ___// /\ \ +% (____/(_)_ __/ (_) \____)_) (_) + +% Configs if you want to use BibTeX. Not included in any default configs. + +\newcommand{\setupBibtex}[1]{ + \usepackage{biblatex} + \usepackage[nottoc, numbib]{tocbibind} + \addbibresource{#1} +} + +\newcommand{\printbib}{ + \addcontentsline{toc}{section}{\translate{Sources}{Quellen}} + \printbibliography[title=\translate{Sources}{Quellen}] +} + + +%░▒█▀▀█░█░░▄▀▀▄░█▀▀░█▀▀░█▀▀▄░█▀▀▄░█░░█ +%░▒█░▄▄░█░░█░░█░▀▀▄░▀▀▄░█▄▄█░█▄▄▀░█▄▄█ +%░▒█▄▄▀░▀▀░░▀▀░░▀▀▀░▀▀▀░▀░░▀░▀░▀▀░▄▄▄▀ + +% Add glossaries functionality + +\newcommand{\setupGlossary}{ + \usepackage[nonumberlist, toc]{glossaries} + \usepackage[nottoc, numbib]{tocbibind} + \makenoidxglossaries +} + +\newcommand{\printGlossary}{ + \glsaddall + \printnoidxglossaries +} + +% ┌ ┐ +% │ Minted │ +% └ ┘ +\usepackage{minted} +\usepackage{fancyvrb} + +% Args: Code. +% Alternative: Use \mint{}|code| +\newcommand{\inlinecode}[1]{\shade{gray}{\texttt{#1}}} + +% Args: Language, Code +\newenvironment{code}[1]{ + \VerbatimEnvironment + \begin{minted}[ + autogobble, + breaklines, + breakindentnchars=2, + frame=lines, + framesep=2mm, + mathescape, + baselinestretch=1.1, + linenos + ]{#1}} +{\end{minted}} + +% Args: Language, file relative to root file +\newcommand{\inputcode}[2]{ + \inputminted[ + autogobble, + breaklines, + breakindentnchars=2, + frame=lines, + framesep=2mm, + mathescape, + baselinestretch=1.1, + linenos + ]{#1}{#2} +} + +% Args: Language, Base directory (with trailing slash), file (no slash at start) +\newcommand{\inputcodewithfilename}[3]{ + \begin{figure}[h!] + \texttt{File: \detokenize{#3}} + \rmvspace + \inputcode{#1}{#2#3} + \end{figure} +}