diff --git a/.gitignore b/.gitignore index 1377554..33e9a46 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,6 @@ *.swp +build/* +.gitconfiglock +.initsubmodulelock +.idea/ +__pycache__ diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..e5a2100 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "PyTeX"] + path = PyTeX + url = https://github.com/kesslermaximilian/PyTeX.git + branch= latex-packages diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..1fd2351 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,53 @@ +sudo: true +dist: bionic +language: python +cache: apt + +addons: + apt: + packages: + - tree + - latexmk + - biber + - make + +install: + - pip install GitPython + +script: + - export COMMIT_MSG=$(python3 -c 'from git_version import get_deploy_message; print(get_deploy_message())') + - python3 -c 'from build import build; build("build/LatexPackages/")' + - cd build + - zip -r LatexPackages.zip LatexPackages + - tree -H '.' -I "index.html" -D --charset utf-8 -T "LatexPackages" > index.html + - cd .. + +after_success: + + +deploy: + - provider: pages + skip-cleanup: true + github-token: $GITHUB_TOKEN + local-dir: build/ + keep-history: false + on: + branch: master + - provider: releases + api_key: $GITHUB_TOKEN + skip_cleanup: true + file: $TRAVIS_BUILD_DIR/build/LatexPackages.zip + on: + tags: true + - provider: pages + edge: true + github-token: $GITHUB_TOKEN + local-dir: build/LatexPackages + repo: kesslermaximilian/LatexPackagesBuild + commiter_from_gh: true + allow_empty_commit: true + target_branch: $TRAVIS_BRANCH-build + commit_message: $COMMIT_MSG + on: + all_branches: true + condition: $TRAVIS_PULL_REQUEST = false diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..839809e --- /dev/null +++ b/Makefile @@ -0,0 +1,20 @@ +.PHONY: build + +build: .initsubmodulelock + @python3 build.py + +init: .initsubmodulelock .gitconfiglock + +config: .gitconfiglock + +.initsubmodulelock: + @git submodule update --init + @touch .initsubmodulelock + +.gitconfiglock: + @echo "[Make config] Setting git configs to prevent wrong pushes" + @git config push.recurseSubmodules check + @git config status.submodulesummary 1 + @echo "[Push annotated tags by default]" + @git config push.followTags true + @touch .gitconfiglock diff --git a/PyTeX b/PyTeX new file mode 160000 index 0000000..dbdd99c --- /dev/null +++ b/PyTeX @@ -0,0 +1 @@ +Subproject commit dbdd99cc3d6e02b0cfadb1d337f6b85c5f52a9b5 diff --git a/README.md b/README.md index d2d96c0..0c35438 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +[![Build Status](https://api.travis-ci.com/kesslermaximilian/LatexPackages.svg)](https://app.travis-ci.com/github/kesslermaximilian/LatexPackages) # Latex Packages #### Rework in progress diff --git a/build.py b/build.py new file mode 100644 index 0000000..962a773 --- /dev/null +++ b/build.py @@ -0,0 +1,55 @@ +from pathlib import * +import sys +import git +from datetime import * + +sys.path.insert(0, 'PyTeX/') + +from package_formatter import PackageFormatter +from replacements import make_default_commands +from git_version import git_describe, get_latest_commit + +BUILD_DETAILS = [ + "Build details:", + " Build time: {build_time}", + " PyTeX version: {pytex_version} (commit {pytex_commit_hash})", + " LatexPackages version: {packages_version} (commit {packages_commit_hash})" +] + + +def build_details(): + repo = git.Repo() + repo_description = git_describe(get_latest_commit(repo)) + pytex_repo = repo.submodule('PyTeX').module() + pytex_repo_description = git_describe(get_latest_commit(pytex_repo)) + return list(map(lambda line: line.format( + build_time=datetime.now().strftime('%Y/%m/%d %H:%M'), + pytex_version=pytex_repo_description, + pytex_commit_hash=get_latest_commit(pytex_repo).hexsha[0:7], + packages_version=repo_description, + packages_commit_hash=get_latest_commit(repo).hexsha[0:7] + ), BUILD_DETAILS)), repo_description + + +def build(build_dir: str): + input_root = Path('./packages').resolve() + output = input_root / build_dir + print('[PyTeX] Getting git repository information...') + extra_header, repo_description = build_details() + print('[PyTeX] Building version {version} of LatexPackages'.format(version=repo_description)) + print('[PyTeX] Latest commit message: ' + get_latest_commit(git.Repo()).message.strip()) + if git.Repo().is_dirty(): + extra_header += ['WARNING: Local changes to git repository detected.', + ' The build will not be reproducible (!)'] + num_files = 0 + for file in input_root.rglob('*.pysty'): + num_files += 1 + formatter = PackageFormatter(package_name=file.with_suffix('').name, extra_header=extra_header) + print('[PyTeX] Writing file {}'.format(formatter.file_name)) + make_default_commands(formatter) + formatter.format_package(file, Path('./').resolve() / build_dir / str(file.parent.relative_to(input_root))) + print(f'[PyTeX] Successfully built {num_files} packages in {build_dir}/') + + +if __name__ == "__main__": + build('build') diff --git a/environments/mkessler-fancythmoptions.sty b/environments/mkessler-fancythmoptions.sty deleted file mode 100644 index 13036a7..0000000 --- a/environments/mkessler-fancythmoptions.sty +++ /dev/null @@ -1,84 +0,0 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mkessler-fancythmoptions} - -\RequirePackage{xkeyval} - -%%%%% This is an internal base class, do not import this yourself -%% This will just be imported by fancythm for easy options use -\newif\ifmkessler@fancythm@english\mkessler@fancythm@englishtrue -\newif\ifmkessler@fancythm@showstars\mkessler@fancythm@showstarstrue -\newif\ifmkessler@fancythm@showdaggers\mkessler@fancythm@showdaggerstrue -\newif\ifmkessler@fancythm@includestars\mkessler@fancythm@includestarstrue -\newif\ifmkessler@fancythm@includeoral\mkessler@fancythm@includeoraltrue -\newif\ifmkessler@fancythm@markoral\mkessler@fancythm@markoraltrue - -\newif\ifmkessler@fancythm@lecturenumbers\mkessler@fancythm@lecturenumberstrue -\newif\ifmkessler@fancythm@numbersmallenvironmentswiththeorem\mkessler@fancythm@numbersmallenvironmentswiththeoremfalse -\newif\ifmkessler@fancythm@numbersmallenvironments\mkessler@fancythm@numbersmallenvironmentsfalse -\newif\ifmkessler@fancythm@defaulttheorems\mkessler@fancythm@defaulttheoremstrue - -\define@choicekey*{mkesslerfancythm}{mkessler@fancythm@numbersmallenvironments}[\val\nr]{no,section,theorem}{% - \ifcase\nr\relax - \mkessler@fancythm@numbersmallenvironmentsfalse - \or - \mkessler@fancythm@numbersmallenvironmentstrue - %numbering small environments within sections is forbidden whilst using lecturenumbes - \ifmkessler@fancythm@lecturenumbers - \mkessler@fancythm@numbersmallenvironmentswiththeoremtrue - \else - \mkessler@fancythm@numbersmallenvironmentswiththeoremfalse - \fi - \or - \mkessler@fancythm@numbersmallenvironmentstrue - \mkessler@fancythm@numbersmallenvironmentswiththeoremtrue - \fi -} - -\define@choicekey*{mkesslerfancythm}{mkessler@fancythm@lecturenumbers}[\val\nr]{true,false}{% - \ifcase\nr\relax - \mkessler@fancythm@lecturenumberstrue - \else - \mkessler@fancythm@lecturenumbersfalse - \fi -} - -\define@choicekey*{mkesslerfancythm}{mkessler@fancythm@defaulttheorems}[\val\nr]{true,false}{% - \ifcase\nr\relax - \mkessler@fancythm@defaulttheoremstrue - \else - \mkessler@fancythm@defaulttheoremsfalse - \fi -} - -\define@choicekey*{mkesslerfancythm}{mkessler@fancythm@showdaggers}[\val\nr]{true,false}{% - \ifcase\nr\relax - \mkessler@fancythm@showdaggerstrue - \else - \mkessler@fancythm@showdaggersfalse - \fi -} - -\define@choicekey*{mkesslerfancythm}{ownenvironments}[\val\nr]{on, natural, off}{% - \ifcase\nr\relax - \mkessler@fancythm@includestarstrue - \mkessler@fancythm@showstarstrue - \or - \mkessler@fancythm@includestarstrue - \mkessler@fancythm@showstarsfalse - \or - \mkessler@fancythm@includestarsfalse - \mkessler@fancythm@showstarsfalse - \fi -} - -\define@choicekey*{mkesslerfancythm}{oralremarks}[\val\nr]{on,natural,off}{% - \ifcase\nr\relax - \mkessler@fancythm@includeoraltrue - \mkessler@fancythm@markoraltrue - \or - \mkessler@fancythm@includeoraltrue - \mkessler@fancythm@markoralfalse - \or - \mkessler@fancythm@includeoralfalse - \fi -} diff --git a/git_version.py b/git_version.py new file mode 100644 index 0000000..08965b9 --- /dev/null +++ b/git_version.py @@ -0,0 +1,66 @@ +import git +from typing import Dict +import os + + +def get_latest_commit(repo): + if repo.head.is_detached: + return repo.head.commit + else: + return repo.head.ref.commit + + +def get_deploy_message(): + repo = git.Repo() + old_msg = get_latest_commit(repo).message + return "{old_msg}\n" \ + "\n" \ + "Build branch {branch} ({hexsha}) from {repo_name}" \ + .format(old_msg=old_msg, + branch=os.environ['TRAVIS_BRANCH'], + hexsha=get_latest_commit(repo).hexsha[0:7], + repo_name='kesslermaximilian/LatexPackages') + + +def get_history(commit: git.objects.commit.Commit, priority=0, depth=0) -> Dict: + commit_history = {commit.hexsha: { + 'priority': priority, + 'depth': depth + }} + try: + if len(commit.parents) > 0: + commit_history.update(get_history(commit.parents[0], priority, depth + 1)) + for parent in commit.parents[1:]: + commit_history.update(get_history(parent, priority + 1, depth + 1)) + except ValueError: + pass + return commit_history + + +def git_describe(commit: git.objects.commit.Commit): + commit_history = get_history(commit) + latest_tag = None + for tag in commit.repo.tags: + sha = tag.commit.hexsha + if sha in commit_history.keys(): + if latest_tag is None: + latest_tag = tag + elif commit_history[sha]['priority'] < commit_history[latest_tag.commit.hexsha]['priority']: + latest_tag = tag + elif commit_history[sha]['priority'] > commit_history[latest_tag.commit.hexsha]['priority']: + pass # move on + elif commit_history[sha]['depth'] < commit_history[latest_tag.commit.hexsha]['depth']: + latest_tag = tag + elif commit_history[sha]['depth'] > commit_history[latest_tag.commit.hexsha]['depth']: + pass # move on + elif tag.object.tagged_date > latest_tag.object.tagged_date: + latest_tag = tag + if latest_tag is None: + return "No tags found - cannot describe anything." + else: + msg = latest_tag.name + if commit_history[latest_tag.commit.hexsha]['depth'] != 0: + msg += "-{depth}".format(depth=commit_history[latest_tag.commit.hexsha]['depth']) + if commit.repo.is_dirty(untracked_files=True): + msg += '-*' + return msg diff --git a/math/mkessler-mathalias.sty b/math/mkessler-mathalias.sty deleted file mode 100644 index 6f73daf..0000000 --- a/math/mkessler-mathalias.sty +++ /dev/null @@ -1,45 +0,0 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mkessler-mathalias}[2021/09/09 Easy aliasing for math style commands] - -%%%%%% - -\newif\ifmkessler@mathalias@basic\mkessler@mathalias@basicfalse -\DeclareOption{basic}{\mkessler@mathalias@basictrue} - -\newif\ifmkessler@mathalias@extended\mkessler@mathalias@extendedfalse -\DeclareOption{extended}{\mkessler@mathalias@extendedtrue\mkessler@mathalias@basictrue} - -\DeclareOption*{\PackageWarning{mkessler-mathalias}{Unknown '\CurrentOption'}} -\ProcessOptions\relax - -%Usage: \makealiasesforwith\{}{} -% to declare commands of form \ as \{} for each -% of the specfied letters -% -% E.g. \makealiasesforwith\mathcal{c}{ABC} will declare -% \cA \cB \cC \cD as \mathcal{A}, \mathcal{B}, \mathcal{C} -% This is also ensuring math context, so that -% \cA will be valid even in normal text. - -\def\makealiasesforwith#1#2#3{ - \def\mkessler@aliases@makealias##1{ - \expandafter\def\csname #2##1\endcsname{\ensuremath{#1{##1}}} - } - \def\mkessler@aliases@recurse##1{ - \ifx##1\mkessler@dummy\else - \mkessler@aliases@makealias{##1}\expandafter\mkessler@aliases@recurse\fi - } - \mkessler@aliases@recurse #3\mkessler@dummy -} - -\def\mkessler@mathalias@all{ABCDEFGHIJKLMNOPQRSTUVWXYZ} - -\ifmkessler@mathalias@basic - \RequirePackage{amsfonts} - \makealiasesforwith\mathbb{}{CFKNQRZ} -\fi - -\ifmkessler@mathalias@extended - \expandafter\makealiasesforwith\expandafter\mathcal\expandafter{\expandafter c\expandafter}\expandafter{\mkessler@mathalias@all} - \expandafter\makealiasesforwith\expandafter\mathfrak\expandafter{\expandafter f\expandafter}\expandafter{\mkessler@mathalias@all} -\fi diff --git a/math/mkessler-mathfixes.sty b/math/mkessler-mathfixes.sty deleted file mode 100644 index cbf80e5..0000000 --- a/math/mkessler-mathfixes.sty +++ /dev/null @@ -1,39 +0,0 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mkessler-mathfixes}[2021-04-27 - Hacky math packages for some (custom) fixes] -%%%%% - -% This just brings together some (possibly ugly) hacks that I use when writing math. Likely, you do not want to use this except when building around this package (like I did), or already have similar shortcuts - -%Proper Degree command -\def\mkessler@mathfixes@degree{\ensuremath{^\circ}} -\AtBeginDocument{\let\degree\mkessler@mathfixes@degree} - -% Always put limits under \limit -\let\oldlim\lim\def\lim{\oldlim\limits} - -% Print equal sign under subset by default to not confuse people -% (I still write \subset, because this enables me remove this renewcommand and have the default \subset command evaluated instead -\let\mkessler@mathfixes@subseteq\subseteq -\let\mkessler@mathfixes@supseteq\supseteq -\AtBeginDocument{ - \let\subset\mkessler@mathfixes@subseteq - \let\supset\mkessler@mathfixes@supseteq -} - -%%Renew phi and epsilon to their proper versions, make the old ones available as -% uglyphi and uglyepsilon - -\let\mkessler@mathfixes@stored@phi\phi -\let\mkessler@mathfixes@stored@varphi\varphi -\AtBeginDocument{ - \let\phi\mkessler@mathfixes@stored@varphi - \let\uglyphi\mkessler@mathfixes@stored@phi - \let\oldphi\mkessler@mathfixes@stored@phi -} - -\let\mkessler@mathfixes@stored@epsilon\epsilon -\let\mkessler@mathfixes@stored@varepsilon\varepsilon -\AtBeginDocument{ - \let\epsilon\mkessler@mathfixes@stored@varepsilon - \let\uglyepsilon\mkessler@mathfixes@stored@epsilon -} diff --git a/math/mkessler-mathfont.sty b/math/mkessler-mathfont.sty deleted file mode 100644 index 69ad8f7..0000000 --- a/math/mkessler-mathfont.sty +++ /dev/null @@ -1,27 +0,0 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mkessler-mathfont}[2021/09/06 - Collects several math fonts together] - - -%%% Store away the several (partially conflicting) fonts in internal macros - -\let\mkessler@mathfonts@none@mathcal\mathcal - -\RequirePackage{mathrsfs} -\let\mkessler@mathfonts@mathrsfs@mathscr\mathscr - -\RequirePackage[mathscr]{eucal} -\let\mkessler@mathfonts@eucal@optionmathscr@mathscr\mathscr - -\RequirePackage{amsfonts} -\let\mkessler@mathfonts@amsfonts@mathfrak\mathfrak - -%%% Provide user commands to internally stored macros -\def\mkessler@mathfonts@restorefonts{ - \let\mathcal\mkessler@mathfonts@none@mathcal % Set \mathcal to default calligrapic - \let\mathfrak\mkessler@mathfonts@amsfonts@mathfrak % Set \mathfrak to mathfrak from amsfonts - \let\mathscr\mkessler@mathfonts@mathrsfs@mathscr % Set \mathscr to mathscript from mathrsfs package - \let\mathcat\mkessler@mathfonts@mathrsfs@mathscr % Set \mathcat to mathscript from mathrsfs package - \let\mathcalo\mkessler@mathfonts@eucal@optionmathscr@mathscr % Set \mathcom (for comic) to \mathscr from [mathscr]{eucal} package -} - -\AtBeginDocument{\mkessler@mathfonts@restorefonts} diff --git a/mkessler-hypersetup.sty b/mkessler-hypersetup.sty deleted file mode 100644 index e6dd56d..0000000 --- a/mkessler-hypersetup.sty +++ /dev/null @@ -1,26 +0,0 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mkessler-hypersetup}[2021-09-06 - Package for setting up hyperref, cleveref and some default hyperref colors] -%%%%%%%%%%%%%%%%%% - - -\newif\ifmkessler@hypersetup@cleveref\mkessler@hypersetup@clevereffalse -\DeclareOption{cleveref}{\mkessler@hypersetup@clevereftrue} - -\DeclareOption*{\PackageWarning{mkessler-hypersetup}{Unknown '\CurrentOption'}} -\ProcessOptions\relax - -%%%Hyperref and setup -\RequirePackage{xcolor} % To compute the colors below -\RequirePackage{etoolbox} % Checking for defined commands - -\def\mkessler@hypersetup@exec{ - \RequirePackage{hyperref} % Hyperlinks - \ifmkessler@hypersetup@cleveref - \RequirePackage{cleveref} % Better referencing - \fi - \hypersetup{colorlinks, citecolor=violet, urlcolor=blue!80!black, linkcolor=red!50!black, pdfauthor=\@author, pdftitle=\ifdef{\@course}{\@course}{\@title}} -} - -\AtEndPreamble{ - \mkessler@hypersetup@exec -} diff --git a/mkessler-vocab.sty b/mkessler-vocab.sty deleted file mode 100644 index 7de937e..0000000 --- a/mkessler-vocab.sty +++ /dev/null @@ -1,44 +0,0 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mkessler-vocab}[2021-09-06 - Package for emphasizing vocabulary] -%%%%%%%%%%%%%%%%%% -%%Provides a \vocab<[name in index]>{vocabulary} command to print vocabulary in bold blue and automatically index it. - -\newif\ifmkessler@vocab@english\mkessler@vocab@englishtrue -\DeclareOption{german}{\mkessler@vocab@englishfalse} -\DeclareOption{english}{\mkessler@vocab@englishtrue} - -\newif\ifmkessler@vocab@index\mkessler@vocab@indexfalse -\DeclareOption{index}{\mkessler@vocab@indextrue} -\DeclareOption{noindex}{\mkessler@vocab@indexfalse} - -\DeclareOption*{\PackageWarning{mkessler-vocab}{Unknown '\CurrentOption'}} -\ProcessOptions\relax - -%%%%Management of vocabulary and corresponding index -\RequirePackage{xparse} -\RequirePackage{xcolor} -\ifmkessler@vocab@index - \RequirePackage{imakeidx} - \makeindex[name=mkessler@vocab@indexname, columns=2, title=\ifmkessler@vocab@english Index\else Stichwortverzeichnis\fi, intoc] - - %Emphasize \vocabulary - \RequirePackage{expl3} - \ExplSyntaxOn - \NewDocumentCommand{\vocab}{O{} m}{ - \textbf{\color{blue} #2}% - \if\relax\detokenize{#1}\relax% - \index[mkessler@vocab@indexname]{\text_titlecase_first:n{#2}} % true branch: #1 was empty - \else - \index[mkessler@vocab@indexname]{#1} % false branch: #1 was supplied - \fi - } - \ExplSyntaxOff - \newcommand\printvocabindex{ - \printindex[mkessler@vocab@indexname] - } -\else - \NewDocumentCommand{\vocab}{O{} m }{ - \textbf{\color{blue} #2} - } -\fi - diff --git a/environments/mkessler-fancythm.sty b/packages/environments/fancythm.pysty similarity index 52% rename from environments/mkessler-fancythm.sty rename to packages/environments/fancythm.pysty index 391d132..59b7a2a 100644 --- a/environments/mkessler-fancythm.sty +++ b/packages/environments/fancythm.pysty @@ -1,24 +1,96 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mkessler-fancythm}[2021/04/27 - Theorem-Environment Package] -%%%%%%%%m +__HEADER__(Theorem-Environment Package) %Provides fancy theorem-like-environments used in the write-ups of my lecture notes +\RequirePackage{xkeyval} -\RequirePackage{mkessler-fancythmoptions} % Internal preamble for option handling +__NEW_IF__(showstars,true) +__NEW_IF__(showdaggers,true) +__NEW_IF__(includestars,true) +__NEW_IF__(includeoral,true) +__NEW_IF__(markoral,true) + +__NEW_IF__(lecturenumbers,true) +__NEW_IF__(numbersmallenvironmentswiththeorem,false) +__NEW_IF__(numbersmallenvironments,false) +__NEW_IF__(defaulttheorems,true) + +\define@choicekey*{__PACKAGE_NAME__}{__PACKAGE_PREFIX__numbersmallenvironments}[\val\nr]{no,section,theorem}{% + \ifcase\nr\relax + __SET_IF__(numbersmallenvironments,false) + \or + __SET_IF__(numbersmallenvironments,true) + %numbering small environments within sections is forbidden whilst using lecturenumbes + __IF__(lecturenumbers) + __SET_IF__(numbersmallenvironmentswiththeorem,true) + \else + __SET_IF__(numbersmallenvironmentswiththeorem,false) + \fi + \or + __SET_IF__(numbersmallenvironments,true) + __SET_IF__(numbersmallenvironmentswiththeorem,true) + \fi +} + +\define@choicekey*{__PACKAGE_NAME__}{__PACKAGE_PREFIX__lecturenumbers}[\val\nr]{true,false}{% + \ifcase\nr\relax + __SET_IF__(lecturenumbers,true) + \else + __SET_IF__(lecturenumbers,false) + \fi +} + +\define@choicekey*{__PACKAGE_NAME__}{__PACKAGE_PREFIX__defaulttheorems}[\val\nr]{true,false}{% + \ifcase\nr\relax + __SET_IF__(defaulttheorems,true) + \else + __SET_IF__(defaulttheorems,false) + \fi +} + +\define@choicekey*{__PACKAGE_NAME__}{__PACKAGE_PREFIX__showdaggers}[\val\nr]{true,false}{% + \ifcase\nr\relax + __SET_IF__(showdaggers,true) + \else + __SET_IF__(showdaggers,false) + \fi +} + +\define@choicekey*{__PACKAGE_NAME__}{ownenvironments}[\val\nr]{on, natural, off}{% + \ifcase\nr\relax + __SET_IF__(includestars,true) + __SET_IF__(showstars,true) + \or + __SET_IF__(includestars,true) + __SET_IF__(showstars,false) + \or + __SET_IF__(includestars,false) + __SET_IF__(showstars,false) + \fi +} + +\define@choicekey*{__PACKAGE_NAME__}{oralremarks}[\val\nr]{on,natural,off}{% + \ifcase\nr\relax + __SET_IF__(includeoral,true) + __SET_IF__(markoral,true) + \or + __SET_IF__(includeoral,true) + __SET_IF__(markoral,true) + \or + __SET_IF__(includeoral,false) + \fi +} %%%%% Option section -\DeclareOptionX{english}{\mkessler@fancythm@englishtrue} -\DeclareOptionX{german}{\mkessler@fancythm@englishfalse} +__LANGUAGE_OPTIONS__ -\DeclareOptionX{showdaggers}{\setkeys{mkesslerfancythm}{mkessler@fancythm@showdaggers=#1}} -\DeclareOptionX{ownenvironments}{\setkeys{mkesslerfancythm}{ownenvironments=#1}} -\DeclareOptionX{oralremarks}{\setkeys{mkesslerfancythm}{oralremarks=#1}} +\DeclareOptionX{showdaggers}{\setkeys{__PACKAGE_NAME__}{__PACKAGE_PREFIX__showdaggers=#1}} +\DeclareOptionX{ownenvironments}{\setkeys{__PACKAGE_NAME__}{ownenvironments=#1}} +\DeclareOptionX{oralremarks}{\setkeys{__PACKAGE_NAME__}{oralremarks=#1}} -\DeclareOptionX{lecturenumbers}{\setkeys{mkesslerfancythm}{mkessler@fancythm@lecturenumbers=#1}} -\DeclareOptionX{numbersmallenvironments}{\setkeys{mkesslerfancythm}{mkessler@fancythm@numbersmallenvironments=#1}} +\DeclareOptionX{lecturenumbers}{\setkeys{__PACKAGE_NAME__}{__PACKAGE_PREFIX__lecturenumbers=#1}} +\DeclareOptionX{numbersmallenvironments}{\setkeys{__PACKAGE_NAME__}{__PACKAGE_PREFIX__numbersmallenvironments=#1}} -\DeclareOptionX*{\PackageWarning{mkesslerfancythm}{Unknown X \CurrentOption}}% For unknown options -\ProcessOptionsX*\relax +__END_OPTIONS_X__ %%%%%%%% Implementation section @@ -34,8 +106,8 @@ \tcbuselibrary{breakable} % Dummy counters -\declaretheorem[numberwithin=section]{mkessler@fancythm@dummy} -\declaretheorem[numberwithin=mkessler@fancythm@dummy]{mkessler@fancythm@smalldummy} +\declaretheorem[numberwithin=section]{__PACKAGE_PREFIX__dummy} +\declaretheorem[numberwithin=__PACKAGE_PREFIX__dummy]{__PACKAGE_PREFIX__smalldummy} %%%%% Main part, i.e. providing macros for defining new theorems @@ -48,68 +120,68 @@ \NewDocumentCommand{\declarebigtheorem}{O{} O{} m m O{}}{ %First, store the name of the theorem in \theoremname - \ifmkessler@fancythm@english + \if__PACKAGE_PREFIX__english \ifthenelse{\isempty{#2}}{\def\theoremname{#4}}{\def\theoremname{#2}} \else \ifthenelse{\isempty{#1}}{\def\theoremname{#4}}{\def\theoremname{#1}} \fi %Define the mane version of the theorem - \ifthenelse{\isempty{#5}}{\declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}, sibling = mkessler@fancythm@dummy]{#4}}{} + \ifthenelse{\isempty{#5}}{\declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}, sibling = __PACKAGE_PREFIX__dummy]{#4}}{} %Define the versions theorem*, theorem**, dtheorem - \ifmkessler@fancythm@lecturenumbers - \ifmkessler@fancythm@numbersmallenvironments - \declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}, sibling=mkessler@fancythm@smalldummy]{#4*} - \declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}\ifmkessler@fancythm@showstars *\else\fi, sibling=mkessler@fancythm@smalldummy]{#4**} - \declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}\ifmkessler@fancythm@showdaggers $^{\dagger}$\else\fi, sibling=mkessler@fancythm@smalldummy]{d#4} + \if__PACKAGE_PREFIX__lecturenumbers + \if__PACKAGE_PREFIX__numbersmallenvironments + \declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}, sibling=__PACKAGE_PREFIX__smalldummy]{#4*} + \declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}\if__PACKAGE_PREFIX__showstars *\else\fi, sibling=__PACKAGE_PREFIX__smalldummy]{#4**} + \declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}\if__PACKAGE_PREFIX__showdaggers $^{\dagger}$\else\fi, sibling=__PACKAGE_PREFIX__smalldummy]{d#4} \else \declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}, numbered=no]{#4*} - \declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}\ifmkessler@fancythm@showstars *\else\fi, numbered = no]{#4**} - \declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}\ifmkessler@fancythm@showdaggers $^{\dagger}$\else\fi, numbered = no]{d#4} + \declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}\if__PACKAGE_PREFIX__showstars *\else\fi, numbered = no]{#4**} + \declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}\if__PACKAGE_PREFIX__showdaggers $^{\dagger}$\else\fi, numbered = no]{d#4} \fi \else - \declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}, sibling=mkessler@fancythm@dummy]{#4*} - \declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}\ifmkessler@fancythm@showstars *\else\fi, sibling=mkessler@fancythm@dummy]{#4**} - \declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}\ifmkessler@fancythm@showdaggers $^{\dagger}$\else\fi, sibling=mkessler@fancythm@dummy]{d#4} + \declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}, sibling=__PACKAGE_PREFIX__dummy]{#4*} + \declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}\if__PACKAGE_PREFIX__showstars *\else\fi, sibling=__PACKAGE_PREFIX__dummy]{#4**} + \declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}\if__PACKAGE_PREFIX__showdaggers $^{\dagger}$\else\fi, sibling=__PACKAGE_PREFIX__dummy]{d#4} \fi - \ifmkessler@fancythm@includestars\else\renewenvironment{#4**}{\comment}{\endcomment}\fi + \if__PACKAGE_PREFIX__includestars\else\renewenvironment{#4**}{\comment}{\endcomment}\fi } \NewDocumentCommand{\declaresmalltheorem}{O{} O{} m m}{ %Get the name of the theorem and store it in \theoremname - \ifmkessler@fancythm@english + \if__PACKAGE_PREFIX__english \ifthenelse{\isempty{#2}}{\def\theoremname{#4}}{\def\theoremname{#2}} \else \ifthenelse{\isempty{#1}}{\def\theoremname{#4}}{\def\theoremname{#1}} \fi - \ifmkessler@fancythm@numbersmallenvironments - \ifmkessler@fancythm@numbersmallenvironmentswiththeorem - \declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}, sibling = mkessler@fancythm@smalldummy]{#4} - \declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}\ifmkessler@fancythm@showstars *\else\fi, sibling=mkessler@fancythm@smalldummy]{#4*} - \declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}\ifmkessler@fancythm@showdaggers $^{\dagger}$\else\fi, sibling=mkessler@fancythm@smalldummy]{d#4} + \if__PACKAGE_PREFIX__numbersmallenvironments + \if__PACKAGE_PREFIX__numbersmallenvironmentswiththeorem + \declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}, sibling = __PACKAGE_PREFIX__smalldummy]{#4} + \declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}\if__PACKAGE_PREFIX__showstars *\else\fi, sibling=__PACKAGE_PREFIX__smalldummy]{#4*} + \declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}\if__PACKAGE_PREFIX__showdaggers $^{\dagger}$\else\fi, sibling=__PACKAGE_PREFIX__smalldummy]{d#4} \else - \declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}, sibling=mkessler@fancythm@dummy]{#4} - \declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}\ifmkessler@fancythm@showstars *\else\fi, sibling=mkessler@fancythm@dummy]{#4*} - \declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}\ifmkessler@fancythm@showdaggers $^{\dagger}$\else\fi, sibling=mkessler@fancythm@dummy]{d#4} + \declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}, sibling=__PACKAGE_PREFIX__dummy]{#4} + \declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}\if__PACKAGE_PREFIX__showstars *\else\fi, sibling=__PACKAGE_PREFIX__dummy]{#4*} + \declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}\if__PACKAGE_PREFIX__showdaggers $^{\dagger}$\else\fi, sibling=__PACKAGE_PREFIX__dummy]{d#4} \fi \else \declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}, numbered = no]{#4} - \declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}\ifmkessler@fancythm@showstars *\else\fi, numbered = no]{#4*} - \declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}\ifmkessler@fancythm@showdaggers $^{\dagger}$\else\fi, numbered = no]{d#4} + \declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}\if__PACKAGE_PREFIX__showstars *\else\fi, numbered = no]{#4*} + \declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}\if__PACKAGE_PREFIX__showdaggers $^{\dagger}$\else\fi, numbered = no]{d#4} \fi - \declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}, sibling=mkessler@fancythm@dummy]{n#4} - \ifmkessler@fancythm@includestars\else\renewenvironment{#4*}{\comment}{\endcomment}\fi + \declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}, sibling=__PACKAGE_PREFIX__dummy]{n#4} + \if__PACKAGE_PREFIX__includestars\else\renewenvironment{#4*}{\comment}{\endcomment}\fi } %%%% If requested, now define some default theoremstyles -\ifmkessler@fancythm@defaulttheorems +\if__PACKAGE_PREFIX__defaulttheorems \RequirePackage[default styles]{mkessler-thmstyle} % Easy setup of mdframed styles - \declarebigtheorem[Satz][Theorem]{thmredmarginandfill}{theorem} \ifmkessler@fancythm@english\else\AtBeginDocument{\def\theoremautorefname{Satz}}\fi + \declarebigtheorem[Satz][Theorem]{thmredmarginandfill}{theorem} \if__PACKAGE_PREFIX__english\else\AtBeginDocument{\def\theoremautorefname{Satz}}\fi \declarebigtheorem{thmredmarginandfill}{proposition} \declarebigtheorem[Korollar]{thmredmarginandfill}{corollary} \declarebigtheorem{thmorangemarginandfill}{lemma} @@ -121,7 +193,7 @@ \declarebigtheorem[zuSatz][Addition to Theorem]{thmredmarginandfill}{additiontheorem} %%%Environments that are not numbered by default (notation, question, example, remark etc) have two forms: - % - normal form: won't be numbered unless 'mkessler@fancythm@numbersmallenvironments' is set + % - normal form: won't be numbered unless '__PACKAGE_PREFIX__numbersmallenvironments' is set % - having an asterisk: will be displayed with an asterisk, will be numbered if 'numbersmallenvironments' is set %Notation @@ -136,9 +208,9 @@ %%%% Specially treated stuff - \declaresmalltheorem[\ifmkessler@fancythm@markoral Mündliche Anmerkung\else Bemerkung\fi][\ifmkessler@fancythm@markoral Oral remark\else remark\fi]{thmyellowmargin}{oral} + \declaresmalltheorem[\if__PACKAGE_PREFIX__markoral Mündliche Anmerkung\else Bemerkung\fi][\if__PACKAGE_PREFIX__markoral Oral remark\else remark\fi]{thmyellowmargin}{oral} % Option to remove oral remarks when needed - \ifmkessler@fancythm@includeoral\else + \if__PACKAGE_PREFIX__includeoral\else \renewenvironment{oral}{\comment}{\endcomment} \renewenvironment{oral*}{\comment}{\endcomment} \renewenvironment{doral}{\comment}{\endcomment} @@ -168,26 +240,26 @@ %%%%%%%%%%%% Non-mdframed theorems \theoremstyle{plain} - \newtheorem{variant}{\ifmkessler@fancythm@english Variant\else Variante\fi} - \newtheorem{assumption}{\ifmkessler@fancythm@english Assumption\else Annahme\fi} + \newtheorem{variant}{\if__PACKAGE_PREFIX__english Variant\else Variante\fi} + \newtheorem{assumption}{\if__PACKAGE_PREFIX__english Assumption\else Annahme\fi} \theoremstyle{definition} - \newtheorem*{note}{\ifmkessler@fancythm@english Note\else Anmerkung\fi} - \newtheorem*{warning}{\color{red}\ifmkessler@fancythm@english Warning \else Warnung\fi} - \newtheorem*{goal}{\ifmkessler@fancythm@english Goal \else Ziel\fi} - \newtheorem*{strategy}{\ifmkessler@fancythm@english Proof Strategy \else Beweisstrategie\fi} - \newtheorem*{goal*}{\ifmkessler@fancythm@english Goal* \else Ziel*\fi} + \newtheorem*{note}{\if__PACKAGE_PREFIX__english Note\else Anmerkung\fi} + \newtheorem*{warning}{\color{red}\if__PACKAGE_PREFIX__english Warning \else Warnung\fi} + \newtheorem*{goal}{\if__PACKAGE_PREFIX__english Goal \else Ziel\fi} + \newtheorem*{strategy}{\if__PACKAGE_PREFIX__english Proof Strategy \else Beweisstrategie\fi} + \newtheorem*{goal*}{\if__PACKAGE_PREFIX__english Goal* \else Ziel*\fi} \newtheorem*{problem}{Problem} \newtheorem*{info}{Information} - \newtheorem*{answer}{\ifmkessler@fancythm@english Answer\else Antwort\fi} - \newtheorem{observe}[theorem]{\ifmkessler@fancythm@english Observe\else Beobachte\fi} - \newtheorem*{property}{\ifmkessler@fancythm@english Property\else Eigenschaft\fi} + \newtheorem*{answer}{\if__PACKAGE_PREFIX__english Answer\else Antwort\fi} + \newtheorem{observe}[theorem]{\if__PACKAGE_PREFIX__english Observe\else Beobachte\fi} + \newtheorem*{property}{\if__PACKAGE_PREFIX__english Property\else Eigenschaft\fi} \newtheorem*{intuition}{Intuition} - \newtheorem*{recall}{\ifmkessler@fancythm@english Recall\else Erinnerung\fi} - \newtheorem*{idea}{\ifmkessler@fancythm@english Idea\else Idee\fi} - \newtheorem{exercise}{\ifmkessler@fancythm@english Exercise\else Aufgabe\fi}[section] - \newtheorem{reminder}{\ifmkessler@fancythm@english Reminder\else Erinnerung\fi} + \newtheorem*{recall}{\if__PACKAGE_PREFIX__english Recall\else Erinnerung\fi} + \newtheorem*{idea}{\if__PACKAGE_PREFIX__english Idea\else Idee\fi} + \newtheorem{exercise}{\if__PACKAGE_PREFIX__english Exercise\else Aufgabe\fi}[section] + \newtheorem{reminder}{\if__PACKAGE_PREFIX__english Reminder\else Erinnerung\fi} \fi % end of default theorems diff --git a/environments/mkessler-thmstyle.sty b/packages/environments/thmstyle.pysty similarity index 88% rename from environments/mkessler-thmstyle.sty rename to packages/environments/thmstyle.pysty index 84d5295..72b79a2 100644 --- a/environments/mkessler-thmstyle.sty +++ b/packages/environments/thmstyle.pysty @@ -1,14 +1,13 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mkessler-thmstyle}[2021/09/09 - Styles used for fancythm] - +__HEADER__(Mdframed Styles used for fancythm package) %%%%% This provides easy-to-use styles, especially for use with the -% A simple option wether to define some default styles -\newif\ifmkessler@thmstyle@defaultstyles\mkessler@thmstyle@defaultstylesfalse -\DeclareOption{defaultstyles}{\mkessler@thmstyle@defaultstylestrue} +\RequirePackage{xkeyval} -\DeclareOption*{\PackageWarning{mkessler-thmstyle}{Unknown '\CurrentOption'}} -\ProcessOptions\relax +% A simple option wether to define some default styles +__NEW_IF__(defaultstyles,false) +\DeclareOptionX{defaultstyles}{__SET_IF__(defaultstyles,true)} + +__END_OPTIONS_X__ \RequirePackage{amsthm} \RequirePackage{thmtools} @@ -75,7 +74,7 @@ \fi } -\ifmkessler@thmstyle@defaultstyles +__IF__(defaultstyles) \declarefancythmstyle[red!8]{red}[thmredmarginandfill] \declarefancythmstyle[orange!10]{orange}[thmorangemarginandfill] \declarefancythmstyle[blue!7]{blue}[thmbluemarginandfill] diff --git a/lecture-notes/mkessler-lectures.sty b/packages/lecture-notes/lectures.pysty similarity index 74% rename from lecture-notes/mkessler-lectures.sty rename to packages/lecture-notes/lectures.pysty index f78c677..720a968 100644 --- a/lecture-notes/mkessler-lectures.sty +++ b/packages/lecture-notes/lectures.pysty @@ -1,7 +1,4 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mkessler-lectures}[2021-09-06 - Package for managing different lectures within a document] - -%%%%%%%%%%%%%%%%%% +__HEADER__(Package for managing different lectures within a document) % The core of the lecture command this package provides has been taken from the preamble in % https://github.com/gillescastel/university-setup % which is licensed under @@ -29,21 +26,20 @@ %SOFTWARE. % This package extends the lecture command to make a summary of lectures at the beginning of a document, and has thus modified this command. -\newif\ifenglish\englishtrue -\DeclareOption{german}{\englishfalse} -\DeclareOption{english}{\englishtrue} +\RequirePackage{xkeyval} -\newif\iffancyhead\fancyheadfalse -\DeclareOption{fancyhead}{\fancyheadtrue} +__LANGUAGE_OPTIONS__ -\DeclareOption*{\PackageWarning{mkessler-lectures}{Unknown '\CurrentOption'}} -\ProcessOptions\relax +__NEW_IF__(fancyhead,false) +\DeclareOptionX{fancyhead}{__SET_IF__(fancyhead,true)} + +__END_OPTIONS_X__ %Tocloft package for making a list of lectures \RequirePackage{tocloft} %Store name of the summary in a command to use it multiple times -\newcommand\listlecturename{\ifenglish Summary of lectures\else Übersicht der Vorlesungen\fi} -\newlistof{lecture}{lec}{\listlecturename} % Declare new list of lectures +\newcommand__PACKAGE_MACRO__(listlecturename){__IF__(english) Summary of lectures\else Übersicht der Vorlesungen\fi} +\newlistof{lecture}{lec}{__PACKAGE_MACRO__(listlecturename)} % Declare new list of lectures %Settings how to print the summary \renewcommand{\cftdot}{} \renewcommand\cftlecturefont{\normalfont\bfseries} @@ -59,7 +55,7 @@ } %Define the main lecture command to start a new lecture -\def\@lectureprefix{\ifenglish Lecture\else Vorlesung\fi} +\def__PACKAGE_MACRO__(lectureprefix){__IF__(english) Lecture\else Vorlesung\fi} \def\@lecture{}% \RequirePackage{xparse} @@ -69,13 +65,13 @@ \ifthenelse{\isempty{#3}}{\refstepcounter{lecture}}{\setcounter{lecture}{#3}} %Store lecture name in the macro \@lecture \ifthenelse{\isempty{#4}}{% - \def\@lecture{\@lectureprefix\, \thelecture}% + \def\@lecture{__PACKAGE_MACRO__(lectureprefix)\, \thelecture}% }{% - \def\@lecture{\@lectureprefix\, \thelecture: #4}% + \def\@lecture{__PACKAGE_MACRO__(lectureprefix)\, \thelecture: #4}% }% - \marginpar{\small\textsf{\parbox{10em}{\@lectureprefix\, \thelecture \\#2 \ifthenelse{\isempty{#5}}{}{\\#5}}}} + \marginpar{\small\textsf{\parbox{10em}{__PACKAGE_MACRO__(lectureprefix)\, \thelecture \\#2}}} %Add lecture as an entry to the lectures file - \addcontentsline{lec}{lecture}{\@lectureprefix\,\thelecture\,(#2)} + \addcontentsline{lec}{lecture}{__PACKAGE_MACRO__(lectureprefix)\,\thelecture\,(#2)} %If key words are provided, add the key words of the lecture below the entry \ifthenelse{\isempty{#1}}{}{\addtocontents{lec}{\smallskip\hspace{1.5em}\protect\parbox{\dimexpr\textwidth-\@pnumwidth - 2em}{#1}}} } @@ -83,13 +79,13 @@ %Provide a command to show the summary of lectures \DeclareRobustCommand*{\summaryoflectures}{ \phantomsection - \addcontentsline{toc}{section}{\listlecturename} + \addcontentsline{toc}{section}{__PACKAGE_MACRO__(listlecturename)} \thispagestyle{plain} \listoflecture } -\iffancyhead +__IF__(fancyhead) \RequirePackage{fancyhdr} \pagestyle{fancy} @@ -101,9 +97,9 @@ \fancyhead[RE,LO]{} % Right even, Left odd %%No fancy headers in the appendix (as there is no lecture) - \let\mkesslerlecturesoldappendix\appendix + \let__PACKAGE_MACRO__(stored@appendix)\appendix \renewcommand\appendix{ - \mkesslerlecturesoldappendix + __PACKAGE_MACRO__(stored@appendix) \fancyhead[RO,LE]{} \renewcommand{\headrulewidth}{0pt} } diff --git a/lecture-notes/mkessler-script.cls b/packages/lecture-notes/script.cls similarity index 100% rename from lecture-notes/mkessler-script.cls rename to packages/lecture-notes/script.cls diff --git a/math/mkessler-faktor.sty b/packages/math/faktor.pysty similarity index 94% rename from math/mkessler-faktor.sty rename to packages/math/faktor.pysty index 3fab7a7..81b3a6a 100644 --- a/math/mkessler-faktor.sty +++ b/packages/math/faktor.pysty @@ -1,6 +1,4 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mkessler-faktor}[2021-09-06 - Faktor package] -%%%%%%%%%%%%%%%%%% +__HEADER__(Faktor package that also handles cofaktors) % Extension the faktor package for % - cofaktor command that provides A \ B notation @@ -13,7 +11,6 @@ % % This package only packages the corresponding answer and provides an analoguous way of a \cofactor command - %Dependencies \RequirePackage{xparse} \RequirePackage{amssymb} % provides \diagup and \diagdown diff --git a/math/mkessler-math.sty b/packages/math/math.pysty similarity index 54% rename from math/mkessler-math.sty rename to packages/math/math.pysty index 49b2c19..e6d0f58 100644 --- a/math/mkessler-math.sty +++ b/packages/math/math.pysty @@ -1,17 +1,14 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mkessler-math}[2021/03/31 - Math package] -%%%%%%Collects the basic math packages used for my lecture-note write-ups +__HEADER__(Main math package.) +% Collects the basic math packages used for my lecture-note write-ups +% This just imports all the packages I use for writing up mathematics +% Probably, you will just want to load them separately for more +% customization -%% This just imports all the packages I use for writing up mathematics +\RequirePackage{xkeyval} +__LANGUAGE_OPTIONS_X__ -\newif\if@mkessler@math@english\@mkessler@math@englishtrue -\DeclareOption{german}{\@mkessler@math@englishfalse} -\DeclareOption{ngerman}{\@mkessler@math@englishfalse} -\DeclareOption{english}{\@mkessler@math@englishtrue} - -\DeclareOption*{\PackageWarning{mkessler-math}{Unknown '\CurrentOption'}} -\ProcessOptions\relax +__END_OPTIONS_X__ %%%% Import the other custom math packages \RequirePackage{mkessler-mathfont} % Load this first to ensure untouched fonts @@ -36,7 +33,7 @@ \RequirePackage{mkessler-mathsymb} \RequirePackage[basic]{mkessler-mathalias} % mkessler-mathfont has already been imported -\RequirePackage[\if@mkessler@math@english english\else german\fi]{mkessler-mathop} +\RequirePackage[__IF__(english) english\else german\fi]{mkessler-mathop} \RequirePackage{mkessler-mathfig} \RequirePackage{mkessler-unicodechar} \RequirePackage{mkessler-mathfixes} % Load this last since it renews behaviour diff --git a/packages/math/mathalias.pysty b/packages/math/mathalias.pysty new file mode 100644 index 0000000..fbb1fcd --- /dev/null +++ b/packages/math/mathalias.pysty @@ -0,0 +1,43 @@ +__HEADER__(Easy aliasing for math style commands) + +\RequirePackage{xkeyval} + +__NEW_IF__(basic,false) +__NEW_IF__(extended,false) + +\DeclareOptionX{basic}{__SET_IF__(basic,true)} +\DeclareOptionX{extended}{__SET_IF__(extended,true)__SET_IF__(basic,true)} + +__END_OPTIONS_X__ + +%Usage: \makealiasesforwith\{}{} +% to declare commands of form \ as \{} for each +% of the specfied letters +% +% E.g. \makealiasesforwith\mathcal{c}{ABC} will declare +% \cA \cB \cC \cD as \mathcal{A}, \mathcal{B}, \mathcal{C} +% This is also ensuring math context, so that +% \cA will be valid even in normal text. + +\def\makealiasesforwith#1#2#3{ + \def__PACKAGE_MACRO__(makealias)##1{ + \expandafter\def\csname #2##1\endcsname{\ensuremath{#1{##1}}} + } + \def__PACKAGE_MACRO__(recurse)##1{ + \ifx##1__PACKAGE_MACRO__(dummy)\else + __PACKAGE_MACRO__(makealias){##1}\expandafter__PACKAGE_MACRO__(recurse)\fi + } + __PACKAGE_MACRO__(recurse) #3__PACKAGE_MACRO__(dummy) +} + +\def__PACKAGE_MACRO__(all){ABCDEFGHIJKLMNOPQRSTUVWXYZ} + +__IF__(basic) + \RequirePackage{amsfonts} + \makealiasesforwith\mathbb{}{CFKNQRZ} +\fi + +__IF__(extended) + \expandafter\makealiasesforwith\expandafter\mathcal\expandafter{\expandafter c\expandafter}\expandafter{__PACKAGE_MACRO__(all)} + \expandafter\makealiasesforwith\expandafter\mathfrak\expandafter{\expandafter f\expandafter}\expandafter{__PACKAGE_MACRO__(all)} +\fi diff --git a/math/mkessler-mathfig.sty b/packages/math/mathfig.pysty similarity index 85% rename from math/mkessler-mathfig.sty rename to packages/math/mathfig.pysty index 9fbe017..849f129 100644 --- a/math/mkessler-mathfig.sty +++ b/packages/math/mathfig.pysty @@ -1,7 +1,4 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mkessler-mathfig}[2021/03/31 - Math figures with TikZ / pgfplots / xy] - -%%%%%%%% +__HEADER__(Math figures with TikZ / pgfplots / xy) % This is just a collection of the packages I use to typeset mathematical figures % most commonly plots, commutative diagrams or geometry diff --git a/packages/math/mathfixes.pysty b/packages/math/mathfixes.pysty new file mode 100644 index 0000000..b3e3598 --- /dev/null +++ b/packages/math/mathfixes.pysty @@ -0,0 +1,36 @@ +__HEADER__(Hacky math packages for some (custom@) fixes) +% This just brings together some (possibly ugly) hacks that I use when writing math. Likely, you do not want to use this except when building around this package (like I did), or already have similar shortcuts + +%Proper Degree command +\def__PACKAGE_MACRO__(degree){\ensuremath{^\circ}} +\AtBeginDocument{\let\degree__PACKAGE_MACRO__(degree)} + +% Always put limits under \limit +\let\oldlim\lim\def\lim{\oldlim\limits} + +% Print equal sign under subset by default to not confuse people +% (I still write \subset, because this enables me remove this renewcommand and have the default \subset command evaluated instead +\let__PACKAGE_MACRO__(subseteq)\subseteq +\let__PACKAGE_MACRO__(supseteq)\supseteq +\AtBeginDocument{ + \let\subset__PACKAGE_MACRO__(subseteq) + \let\supset__PACKAGE_MACRO__(supseteq) +} + +%%Renew phi and epsilon to their proper versions, make the old ones available as +% uglyphi and uglyepsilon + +\let__PACKAGE_MACRO__(stored@phi)\phi +\let__PACKAGE_MACRO__(stored@varphi)\varphi +\AtBeginDocument{ + \let\phi__PACKAGE_MACRO__(stored@varphi) + \let\uglyphi__PACKAGE_MACRO__(stored@phi) + \let\oldphi__PACKAGE_MACRO__(stored@phi) +} + +\let__PACKAGE_MACRO__(stored@epsilon)\epsilon +\let__PACKAGE_MACRO__(stored@varepsilon)\varepsilon +\AtBeginDocument{ + \let\epsilon__PACKAGE_MACRO__(stored@varepsilon) + \let\uglyepsilon__PACKAGE_MACRO__(stored@epsilon) +} diff --git a/packages/math/mathfont.pysty b/packages/math/mathfont.pysty new file mode 100644 index 0000000..e295dd3 --- /dev/null +++ b/packages/math/mathfont.pysty @@ -0,0 +1,24 @@ +__HEADER__(Collects several math fonts together) +%%% Store away the several (partially conflicting) fonts in internal macros + +\let__PACKAGE_MACRO__(none@mathcal)\mathcal + +\RequirePackage{mathrsfs} +\let__PACKAGE_MACRO__(mathrsfs@mathscr)\mathscr + +\RequirePackage[mathscr]{eucal} +\let__PACKAGE_MACRO__(eucal@optionmathscr@mathscr)\mathscr + +\RequirePackage{amsfonts} +\let__PACKAGE_MACRO__(amsfonts@mathfrak)\mathfrak + +%%% Provide user commands to internally stored macros +\def__PACKAGE_MACRO__(restorefonts){ + \let\mathcal__PACKAGE_MACRO__(none@mathcal) % Set \mathcal to default calligrapic + \let\mathfrak__PACKAGE_MACRO__(amsfonts@mathfrak) % Set \mathfrak to mathfrak from amsfonts + \let\mathscr__PACKAGE_MACRO__(mathrsfs@mathscr) % Set \mathscr to mathscript from mathrsfs package + \let\mathcat__PACKAGE_MACRO__(mathrsfs@mathscr) % Set \mathcat to mathscript from mathrsfs package + \let\mathcalo__PACKAGE_MACRO__(eucal@optionmathscr@mathscr) % Set \mathcalo (for old calligraphic) to \mathscr from [mathscr]{eucal} package +} + +\AtBeginDocument{__PACKAGE_MACRO__(restorefonts)} diff --git a/math/mkessler-mathop.sty b/packages/math/mathop.pysty similarity index 72% rename from math/mkessler-mathop.sty rename to packages/math/mathop.pysty index c3ac6e9..c2cda95 100644 --- a/math/mkessler-mathop.sty +++ b/packages/math/mathop.pysty @@ -1,13 +1,11 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mkessler-mathop}[2021-04-27 - Operator Package] -%%%%%%%%%%%%%%%%% +__HEADER__(Math Operator Package) %Provides some commonly used Operators used in the write-ups of my lecture notes -\newif\if@mkessler@operators@english\@mkessler@operators@englishtrue -\DeclareOption{german}{\@mkessler@operators@englishfalse} -\DeclareOption{english}{\@mkessler@operators@englishtrue} -\DeclareOption*{\PackageWarning{mkessler-operators}{Unknown '\CurrentOption'}} -\ProcessOptions\relax +\RequirePackage{xkeyval} + +__LANGUAGE_OPTIONS_X__ + +__END_OPTIONS_X__ %%%%%Package dependencies \RequirePackage{amsmath} @@ -23,15 +21,15 @@ %%%For distributions %Introduce synonym for \operatorname -\newcommand\mkessler@operators@distribution[1]{\operatorname{#1}} +\newcommand__PACKAGE_MACRO__(distribution)[1]{\operatorname{#1}} %Easily declare new distributions -\newcommand\DeclareDistribution[1]{\expandafter\def\csname #1\endcsname{\mkessler@operators@distribution{#1}}} +\newcommand\DeclareDistribution[1]{\expandafter\def\csname #1\endcsname{__PACKAGE_MACRO__(distribution){#1}}} %%%For categories %Introduce synonym for \operatorname -\newcommand\mkessler@operators@category[1]{\operatorname{\textbf{#1}}} +\newcommand__PACKAGE_MACRO__(category)[1]{\operatorname{\textbf{#1}}} %Easily declare new categories -\newcommand\DeclareCategory[1]{\expandafter\def\csname #1\endcsname{\mkessler@operators@category{#1}}} +\newcommand\DeclareCategory[1]{\expandafter\def\csname #1\endcsname{__PACKAGE_MACRO__(category){#1}}} %%%%%%%%%%% Operators @@ -51,27 +49,27 @@ % \lcm would print 'kgV' % The starred versions of the four commands will ignore the language option and print their % exact names (without the *, of course) -\DeclareMathOperator{\@mkessler@operators@ggT}{ggT} -\DeclareMathOperator{\@@mkessler@operators@ggT}{\if@mkessler@operators@english gcd\else ggT\fi} -\def\ggT{\@ifstar\@mkessler@operators@ggT\@@mkessler@operators@ggT} +\DeclareMathOperator{\@__PACKAGE_PREFIX__ggT}{ggT} +\DeclareMathOperator{\@@__PACKAGE_PREFIX__ggT}{\if@__PACKAGE_PREFIX__english gcd\else ggT\fi} +\def\ggT{\@ifstar\@__PACKAGE_PREFIX__ggT\@@__PACKAGE_PREFIX__ggT} -\DeclareMathOperator{\@mkessler@operators@gcd}{gcd} -\DeclareMathOperator{\@@mkessler@operators@gcd}{\if@mkessler@operators@english gcd\else ggT\fi} -\def\gcd{\@ifstar\@mkessler@operators@gcd\@@mkessler@operators@gcd} +\DeclareMathOperator{\@__PACKAGE_PREFIX__gcd}{gcd} +\DeclareMathOperator{\@@__PACKAGE_PREFIX__gcd}{\if@__PACKAGE_PREFIX__english gcd\else ggT\fi} +\def\gcd{\@ifstar\@__PACKAGE_PREFIX__gcd\@@__PACKAGE_PREFIX__gcd} -\DeclareMathOperator{\@mkessler@operators@kgV}{kgV} -\DeclareMathOperator{\@@mkessler@operators@kgV}{\if@mkessler@operators@english lcm\else kgV\fi} -\def\kgV{\@ifstar\@mkessler@operators@kgV\@@mkessler@operators@kgV} +\DeclareMathOperator{\@__PACKAGE_PREFIX__kgV}{kgV} +\DeclareMathOperator{\@@__PACKAGE_PREFIX__kgV}{\if@__PACKAGE_PREFIX__english lcm\else kgV\fi} +\def\kgV{\@ifstar\@__PACKAGE_PREFIX__kgV\@@__PACKAGE_PREFIX__kgV} -\DeclareMathOperator{\@mkessler@operators@lcm}{lcm} -\DeclareMathOperator{\@@mkessler@operators@lcm}{\if@mkessler@operators@english lcm\else kgV\fi} -\def\lcm{\@ifstar\@mkessler@operators@lcm\@@mkessler@operators@lcm} +\DeclareMathOperator{\@__PACKAGE_PREFIX__lcm}{lcm} +\DeclareMathOperator{\@@__PACKAGE_PREFIX__lcm}{\if@__PACKAGE_PREFIX__english lcm\else kgV\fi} +\def\lcm{\@ifstar\@__PACKAGE_PREFIX__lcm\@@__PACKAGE_PREFIX__lcm} %Complex numbers -\DeclareMathOperator{\mkessler@impart}{Im} -\renewcommand\Im\mkessler@impart -\DeclareMathOperator{\mkessler@repart}{Re} -\renewcommand\Re\mkessler@impart +\DeclareMathOperator{__PACKAGE_MACRO__(impart)}{Im} +\renewcommand\Im__PACKAGE_MACRO__(impart) +\DeclareMathOperator{__PACKAGE_MACRO__(repart)}{Re} +\renewcommand\Re__PACKAGE_MACRO__(repart) %Linear Algebra \DeclareSimpleMathOperator{Sym} diff --git a/math/mkessler-mathsymb.sty b/packages/math/mathsymb.pysty similarity index 90% rename from math/mkessler-mathsymb.sty rename to packages/math/mathsymb.pysty index 2f48cc3..372ec07 100644 --- a/math/mkessler-mathsymb.sty +++ b/packages/math/mathsymb.pysty @@ -1,15 +1,9 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mkessler-mathsymb}[2021-09-06 - Some extra math-related symbols] - -%%%%%%%%%%%%%%%%%% +__HEADER__(Some extra math-related symbols.) % A collection of math-related symbols / tools I often use, mainly collected together from Stack Overflow or hacked together myself - %Dependencies \RequirePackage{tikz} - - % noloc command by % user 'egreg' (https://tex.stackexchange.com/users/4427/egreg) % posted on diff --git a/math/mkessler-unicodechar.sty b/packages/math/unicodechar.pysty similarity index 88% rename from math/mkessler-unicodechar.sty rename to packages/math/unicodechar.pysty index c3448eb..303fc69 100644 --- a/math/mkessler-unicodechar.sty +++ b/packages/math/unicodechar.pysty @@ -1,8 +1,4 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mkessler-unicodechar}[2021/09/08 - Wrapper for the newunicodchar package with defined unicode symbols] - -%%%%%%%% - +__HEADER__(Wrapper for the newunicodechare package with some defined unicode symbols.) % This is just a simple package loading the newunicodechar package and defining the common unicode symbols i regularly use for typesetting mathematics \RequirePackage{newunicodechar} diff --git a/packages/misc/hypersetup.pysty b/packages/misc/hypersetup.pysty new file mode 100644 index 0000000..a636cda --- /dev/null +++ b/packages/misc/hypersetup.pysty @@ -0,0 +1,24 @@ +__HEADER__(Package for setting up hyperref, cleveref and some default hyperref colors) + +\RequirePackage{xkeyval} + +__NEW_IF__(cleveref,false) +\DeclareOptionX{cleveref}{__SET_IF__(cleveref,true)} + +__END_OPTIONS_X__ + +%%%Hyperref and setup +\RequirePackage{xcolor} % To compute the colors below +\RequirePackage{etoolbox} % Checking for defined commands + +\def__PACKAGE_MACRO__(exec){ + \RequirePackage{hyperref} % Hyperlinks + __IF__(cleveref) + \RequirePackage{cleveref} % Better referencing + \fi + \hypersetup{colorlinks, citecolor=violet, urlcolor=blue!80!black, linkcolor=red!50!black, pdfauthor=\@author, pdftitle=\ifdef{\@course}{\@course}{\@title}} +} + +\AtEndPreamble{ + __PACKAGE_MACRO__(exec) +} diff --git a/castel-incfig.sty b/packages/misc/incfig.pysty similarity index 93% rename from castel-incfig.sty rename to packages/misc/incfig.pysty index 5fe7554..95b017a 100644 --- a/castel-incfig.sty +++ b/packages/misc/incfig.pysty @@ -1,5 +1,4 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{castel-incfig}[2021-09-06 - Figure support for inkscape figures by Gilles Castell] +__HEADER__(Figure support for inkscape figures by Gilles Castell) %%%%%%%% % This is just a small package bundling the figure support for the inkscape figures by Gilles Castel. The setup can be originally found in the preamble diff --git a/packages/misc/vocab.pysty b/packages/misc/vocab.pysty new file mode 100644 index 0000000..b3c7b55 --- /dev/null +++ b/packages/misc/vocab.pysty @@ -0,0 +1,41 @@ +__HEADER__(Package for emphasizing vocabulary) +%%Provides a \vocab<[name in index]>{vocabulary} command to print vocabulary in bold blue and automatically index it. + +\RequirePackage{xkeyval} + +__LANGUAGE_OPTIONS_X__ +__NEW_IF__(index,false) + +\DeclareOptionX{index}{__SET_IF__(index,true)} +\DeclareOptionX{noindex}{__SET_IF__(index,false)} + +__END_OPTIONS_X__ + +%%%%Management of vocabulary and corresponding index +\RequirePackage{xparse} +\RequirePackage{xcolor} +__IF__(index) + \RequirePackage{imakeidx} + \makeindex[name=vocabindex, columns=2, title=__IF__(english) Index\else Stichwortverzeichnis\fi, intoc] + + %Emphasize \vocabulary + \RequirePackage{expl3} + \ExplSyntaxOn + \NewDocumentCommand{\vocab}{O{} m}{ + \textbf{\color{blue} #2}% + \if\relax\detokenize{#1}\relax% + \index[vocabindex]{\text_titlecase_first:n{#2}} % true branch: #1 was empty + \else + \index[vocabindex]{#1} % false branch: #1 was supplied + \fi + } + \ExplSyntaxOff + \newcommand\printvocabindex{ + \printindex[vocabindex] + } +\else + \NewDocumentCommand{\vocab}{O{} m }{ + \textbf{\color{blue} #2} + } +\fi + diff --git a/packages/utils/counters.pysty b/packages/utils/counters.pysty new file mode 100644 index 0000000..8478335 --- /dev/null +++ b/packages/utils/counters.pysty @@ -0,0 +1,13 @@ +__HEADER__(Write LaTeX counters to auxiliary file) + +\RequirePackage{etoolbox} + +\newwrite__PACKAGE_MACRO__(out) +\immediate\openout__PACKAGE_MACRO__(out)\jobname.cnt\relax +\AtBeginDocument{ + \let__PACKAGE_MACRO__(saved@stepcounter)\stepcounter + \def\stepcounter#1{ + __PACKAGE_MACRO__(saved@stepcounter){#1} + \immediate\write__PACKAGE_MACRO__(out){#1: \csname the#1\endcsname}} +} + diff --git a/utils/mkessler-findpackage.sty b/packages/utils/findpackage.pysty similarity index 93% rename from utils/mkessler-findpackage.sty rename to packages/utils/findpackage.pysty index a1c89b3..a999f35 100644 --- a/utils/mkessler-findpackage.sty +++ b/packages/utils/findpackage.pysty @@ -1,8 +1,4 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mkessler-findpackage}[2021-09-06 - Find a package that provides some command] - - -%%%% +__HEADER__(Find a package that provides some command) % This is just a quick packaging of the post by % 'Martin Nyolt' (https://tex.stackexchange.com/users/78783/martin-nyolt) % found at diff --git a/packages/wip/bibliography.pysty b/packages/wip/bibliography.pysty new file mode 100644 index 0000000..38c6c2b --- /dev/null +++ b/packages/wip/bibliography.pysty @@ -0,0 +1,32 @@ +__HEADER__(Package to easily print bibliography and image attributions in document) +\RequirePackage{xkeyval} + +__LANGUAGE_OPTIONS__ + +\def__PACKAGE_MACRO__(bibfile){bibliography.bib} +\def__PACKAGE_MACRO__(imagefile){images.bib} +\DeclareOptionX{bibfile}[bibliography.bib]{\def__PACKAGE_MACRO__(bibfile){#1}} +\DeclareOptionX{imagefile}[images.bib]{\def__PACKAGE_MACRO__(imagefile){#1}} + +__END_OPTIONS_X__ + +%%%%Bibliography management +\RequirePackage[backend=biber,style=alphabetic]{biblatex} +\addbibresource{__PACKAGE_MACRO__(bibfile)} +\addbibresource{__PACKAGE_MACRO__(imagefile)} + +%Provide simpler commands to properly print image attributions and literature +\DeclareRobustCommand*{\printimageattributions}{ + \def\imageattributionstitle{\ifenglish Image attributions \else Bildquellen\fi} + \phantomsection + \addcontentsline{toc}{section}{\imageattributionstitle} + \printbibliography[title={\imageattributionstitle}, type=image] +} + +\DeclareRobustCommand*{\printliterature}{ + \def\literaturetitle{\ifenglish Literature\else Literatur\fi} + \phantomsection + \addcontentsline{toc}{section}{\literaturetitle} + \printbibliography[title={\literaturetitle}, nottype=image] + +} diff --git a/wip/mkessler-enumerate.sty b/packages/wip/enumerate.pysty similarity index 63% rename from wip/mkessler-enumerate.sty rename to packages/wip/enumerate.pysty index b6130d4..947f650 100644 --- a/wip/mkessler-enumerate.sty +++ b/packages/wip/enumerate.pysty @@ -1,8 +1,6 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mkessler-enumerate} +__HEADER__(Simple enumeration package wrapper. Handles custom number setting and beamer class.) \@ifclassloaded{beamer}{}{ \usepackage[shortlabels]{enumitem} \newcommand\setItemnumber[1]{\setcounter{enum\romannumeral\@enumdepth}{\numexpr#1-1\relax}} } - diff --git a/packages/wip/exsheet.pysty b/packages/wip/exsheet.pysty new file mode 100644 index 0000000..47c82be --- /dev/null +++ b/packages/wip/exsheet.pysty @@ -0,0 +1,24 @@ +__HEADER__(Include exercise sheets into lecture notes easily.) + +\RequirePackage{xkeyval} +__LANGUAGE_OPTIONS__ + +__END_OPTIONS__ + +\RequirePackage{mkessler-fancythm} + +\newcounter{__PACKAGE_PREFIX__sheet} + +\declaretheorem[style=thmgreenmargin, numberwithin=__PACKAGE_PREFIX__sheet, name=__IF__(english) Exercise\else Aufgabe\fi]{__PACKAGE_PREFIX__aufgabe} + +\usepackage{xkeyval} + +\NewDocumentEnvironment{aufgabe}{O{}}{ +\begin{__PACKAGE_PREFIX__aufgabe\expandafter}\if\relax\detokenize{#1}\relax\else[#1]\fi\label{aufgabe-\the__PACKAGE_PREFIX__aufgabe} +}{ + \end{__PACKAGE_PREFIX__aufgabe\expandafter}\relax +} + +\newcommand\blatt{\refstepcounter{__PACKAGE_PREFIX__sheet}\subsection*{\the__PACKAGE_PREFIX__sheet. Übungsblatt}\addcontentsline{toc}{subsection}{\the__PACKAGE_PREFIX__sheet. Übungsblatt}} + + diff --git a/wip/mkessler-figures.sty b/packages/wip/figures.pysty similarity index 56% rename from wip/mkessler-figures.sty rename to packages/wip/figures.pysty index 09a1afd..819391b 100644 --- a/wip/mkessler-figures.sty +++ b/packages/wip/figures.pysty @@ -1,5 +1,4 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mkessler-figures} +__HEADER__(Packages related to inclusion of figures.) \RequirePackage{caption} \RequirePackage{subcaption} diff --git a/packages/wip/gag.pysty b/packages/wip/gag.pysty new file mode 100644 index 0000000..7a92847 --- /dev/null +++ b/packages/wip/gag.pysty @@ -0,0 +1,16 @@ +__HEADER__(Numbering of environments with a fractional environment number) +% For the stack exchange source, see +% https://tex.stackexchange.com/questions/598076/how-to-have-a-fractional-environment-number/598080?noredirect=1#comment1499689_598080 +% However, for a reason i don't understand the posted answer does not work for me, but i had to replace theorem with definition in the definition of the gag environment (so apparently, i have to do this for each environment separately). It seems that the definitions of this document do use \thedefinition and not \thetheorem, although by default this is not the case. + +\newcounter{gag} +\makeatletter +\newenvironment{gag}[1]{% + \let\savedthedefinition\thedefinition + \thm@headfont{\bfseries\boldmath}% + \stepcounter{gag}% + \renewcommand{\thedefinition}{\savedthedefinition#1}% + \renewcommand{\theHdefinition}{gag\thegag}% + \addtocounter{definition}{-1}\ignorespaces +}{\ignorespacesafterend} +\makeatother diff --git a/wip/lang-input.sty b/packages/wip/lang-input.pysty similarity index 88% rename from wip/lang-input.sty rename to packages/wip/lang-input.pysty index db1d407..5c6f0c2 100644 --- a/wip/lang-input.sty +++ b/packages/wip/lang-input.pysty @@ -1,4 +1,4 @@ -% Input / encoding +__HEADER__(Packages related to language input. Still work in progress, not intended for use.) \RequirePackage[\ifutf utf8\else utf8x\fi]{inputenc} \RequirePackage[T1]{fontenc} diff --git a/packages/wip/proof.pysty b/packages/wip/proof.pysty new file mode 100644 index 0000000..a04ad02 --- /dev/null +++ b/packages/wip/proof.pysty @@ -0,0 +1,96 @@ +__HEADER__(Automatic references to theorems in proofs. Claim counters within proofs) + +\RequirePackage{xkeyval} + +__LANGUAGE_OPTIONS_X__ + +__END_OPTIONS_X__ + +\RequirePackage{amssymb} +\RequirePackage{amsthm} +\RequirePackage{etoolbox} +\RequirePackage{xparse} + +%%Give claim an own counter and let it reset at each proof +%See also at: +%https://tex.stackexchange.com/questions/283502/reset-counter-at-beginning-of-proof +\newtheorem{claim}{__IF__(english) Claim\else Behauptung\fi} +\newtheorem*{claim*}{__IF__(english) Claim\else Behauptung\fi} +\AtBeginDocument{\def\claimautorefname{__IF__(english) Claim\else Behauptung\fi}} + +__NEW_IF__(hyperref,false) +\AtBeginDocument{ + \@ifpackageloaded{hyperref}{ + __SET_IF__(hyperref,true) + \def\grab#1{\expandafter\@firstoffive#1} + \def__PACKAGE_MACRO__(blankref)#1{\expandafter\grab\csname r@#1\endcsname} + \let__PACKAGE_MACRO__(autoref)\autoref + }{ + __SET_IF__(hyperref,true) + \let__PACKAGE_MACRO__(blankref)\ref + \let__PACKAGE_MACRO__(autoref)\ref + } +} + +\NewDocumentEnvironment{rproof}{m O{}}{\def__PACKAGE_MACRO__(aster){\relax}\begin{__PACKAGE_PREFIX__rproof@impl}{#1}[#2]}{\end{__PACKAGE_PREFIX__rproof@impl}} +\NewDocumentEnvironment{rproof*}{m O{}}{\def__PACKAGE_MACRO__(aster){*}\begin{__PACKAGE_PREFIX__rproof@impl}{#1}[#2]}{\end{__PACKAGE_PREFIX__rproof@impl}} + +\NewDocumentEnvironment{__PACKAGE_PREFIX__rproof@impl}{m O{}} +{ + % Restore correct counter for claim + \ifcsdef{the__PACKAGE_PREFIX__#1@save@claim}{ + \setcounter{claim}{\value{__PACKAGE_PREFIX__#1@save@claim}} + \def__PACKAGE_MACRO__(proofprefix){__IF__(english) Continuation of proof__PACKAGE_MACRO__(aster)\space of\else Fortsetzung des Beweises__PACKAGE_MACRO__(aster)\space zu\fi} + \edef\haha{\value{__PACKAGE_PREFIX__#1@part}} + }{ + \newcounter{__PACKAGE_PREFIX__#1@save@claim} + \setcounter{claim}{0} + \def__PACKAGE_MACRO__(proofprefix){__IF__(english) Proof__PACKAGE_MACRO__(aster)\space of\else Beweis__PACKAGE_MACRO__(aster)\space von\fi} + } + % Set up counter number printing as subindexed by numbering of the reference + \let__PACKAGE_MACRO__(theoldclaim)\theclaim + \def\theclaim{__PACKAGE_MACRO__(blankref){#1}.__PACKAGE_MACRO__(theoldclaim)} + % Now, start the actual proof + \begin{proof}[__PACKAGE_MACRO__(proofprefix)\space__PACKAGE_MACRO__(autoref){#1}\if\relax\detokenize{#2}\relax\else\space(#2)\fi] +} +{ + \end{proof} % End proof + % Save current claim counter for later restoration + \setcounter{__PACKAGE_PREFIX__#1@save@claim}{\value{claim}} +} + +% Proof (with asterisk) +\NewDocumentEnvironment{proof*}{O{}} +{ + \if\relax\detokenize{#1}\relax\begin{proof}[__IF__(english) Proof\emph{*}\else Beweis\emph{*}\fi]\else\begin{proof}[#1\emph{*}]\fi +} +{ + \end{proof} +} + + +%%subproof environment - essentially copied proof environment from amsthm and modified its name + symbol +\DeclareRobustCommand{\blackqed}{% + \ifmmode \mathqed + \else + \leavevmode\unskip\penalty9999 \hbox{}\nobreak\hfill + \quad\hbox{$\blacksquare$}% + \fi +} + +\newenvironment{subproof}[1][__IF__(english) Subproof\else Unterbeweis\fi]{\par + \pushQED{\blackqed}% + \normalfont \topsep6\p@\@plus6\p@\relax + \trivlist + \item[\hskip\labelsep + \itshape + #1\@addpunct{.}]\ignorespaces +}{% + \popQED\endtrivlist\@endpefalse +} + + +%%%% This might be dropped, but for now is collected here + +%%Solution (for exercises) +\newenvironment{solution}[1][]{\begin{proof}[__IF__(english){}Solution\else{}Lösung\fi{}#1]}{\end{proof}} diff --git a/wip/removed.sty b/packages/wip/removed.pysty similarity index 81% rename from wip/removed.sty rename to packages/wip/removed.pysty index 493f524..eed90e7 100644 --- a/wip/removed.sty +++ b/packages/wip/removed.pysty @@ -1,4 +1,4 @@ -% Quotations +__HEADER__((For now) removed parts of other packages. Not intended for use right now.)% Quotations \RequirePackage{csquotes} % quotations %%%% Utilities diff --git a/packages/wip/restate.pysty b/packages/wip/restate.pysty new file mode 100644 index 0000000..e7e8959 --- /dev/null +++ b/packages/wip/restate.pysty @@ -0,0 +1,37 @@ +__HEADER__(Replacement package) +\RequirePackage{xkeyval} +\RequirePackage{todonotes} +\RequirePackage{xparse} +\RequirePackage{etoolbox} + +__NEW_IF__(english, true) +\DeclareOptionX{english}{__SET_IF__(english,true)} +\DeclareOptionX{german}{__SET_IF__(english,false)} +\DeclareOptionX{ngerman}{__SET_IF__(english,false)} + +\define@boolkey+{__FILE_NAME__}[__PACKAGE_PREFIX__]{strict}[true]{ + \if__PACKAGE_PREFIX__strict + __INFO__(Strict mode enabled. Undefined restates will throw errors.)% + \else + __INFO__(Strict mode disabled. Undefined restates will now print placeholder boxes)% + \fi +}{ + __WARNING__(Erroneous input to key 'strict' ignored. Provide =true or =false.) +} + +__END_OPTIONS_X__ + +\newcommand\restatesetup[1]{\setkeys{__FILE_NAME__}{#1}} + + +\NewDocumentCommand{\restatetheorem}{s m}{ + \ifcsdef{#2}{ + \ifx#1\BooleanTrue\csname#2\endcsname*\else\csname#2\endcsname\fi + }{ + __IF__(strict) + \PackageError{__PACKAGE_NAME__}{Strict mode enabled but restate command not defined}{The theorem you tried to restate is not defined. Either make sure it is so that it can be printed or disable the strict mode with \noexpand\restatesetup{strict=false} to print a placeholder instead} + \else + \missingfigure{__IF__(english) Here theorem \textbf{#2} is missing, since it is not part of this document.\else Hier fehlt die Wiederholung von Satz \textbf{#2}, der nicht Teil dieses Dokumentes ist.\fi} + \fi + } +} diff --git a/tests/.gitignore b/tests/.gitignore new file mode 100644 index 0000000..41830ed --- /dev/null +++ b/tests/.gitignore @@ -0,0 +1,11 @@ +*.aux +*.fdb_latexmk +*.fls +*.log +*.pdf +wip/proof/.skip +*.out +*.idx +*.ilg +*.ind +*.cnt diff --git a/tests/COMPILE_MAKEFILE b/tests/COMPILE_MAKEFILE new file mode 100644 index 0000000..768055d --- /dev/null +++ b/tests/COMPILE_MAKEFILE @@ -0,0 +1,3 @@ +test: + latexmk -dvi- -pdf -gg -Werror -latexoption=-interaction=nonstopmode test.tex + latexmk -c test.tex diff --git a/tests/DIR_MAKEFILE b/tests/DIR_MAKEFILE new file mode 100644 index 0000000..61533ed --- /dev/null +++ b/tests/DIR_MAKEFILE @@ -0,0 +1,7 @@ +SUBDIRS := $(wildcard */.) + +all: $(SUBDIRS) +$(SUBDIRS): + $(MAKE) -C $@ + +.PHONY: all $(SUBDIRS) diff --git a/tests/Makefile b/tests/Makefile new file mode 120000 index 0000000..57a5fed --- /dev/null +++ b/tests/Makefile @@ -0,0 +1 @@ +DIR_MAKEFILE \ No newline at end of file diff --git a/tests/environments/Makefile b/tests/environments/Makefile new file mode 120000 index 0000000..63f6ffd --- /dev/null +++ b/tests/environments/Makefile @@ -0,0 +1 @@ +../DIR_MAKEFILE \ No newline at end of file diff --git a/tests/environments/fancythm/Makefile b/tests/environments/fancythm/Makefile new file mode 120000 index 0000000..0fde22c --- /dev/null +++ b/tests/environments/fancythm/Makefile @@ -0,0 +1 @@ +../../COMPILE_MAKEFILE \ No newline at end of file diff --git a/tests/environments/fancythm/test.tex b/tests/environments/fancythm/test.tex new file mode 100644 index 0000000..6571df9 --- /dev/null +++ b/tests/environments/fancythm/test.tex @@ -0,0 +1,65 @@ +\documentclass[a4paper, german]{article} + +\usepackage[lecture numbers = false, number all, number small environments = section]{mkessler-fancythm} + + +\begin{document} + \begin{theorem}[Name]\label{test} + test + \end{theorem} + \begin{definition**} + test + \end{definition**} + + \ref{test} + + \begin{theorem} + test + \end{theorem} + + \mdfsetup{skipabove=8pt,skipbelow=\topskip, bottomline=true} + \begin{lemma} + + \end{lemma} + + \begin{example} + + \end{example} + + \begin{praise} + test + \end{praise} + + \begin{remark} + test + \end{remark} + + \begin{notation} + test + \end{notation} + + \begin{abuse} + test + \end{abuse} + + \begin{theoremdef} + + \end{theoremdef} + + \begin{fact} + test + \end{fact} + + \begin{orga} + + \end{orga} + + \begin{question} + + \end{question} + + \begin{oral} + test + \end{oral} + +\end{document} diff --git a/tests/lecture-notes/Makefile b/tests/lecture-notes/Makefile new file mode 120000 index 0000000..63f6ffd --- /dev/null +++ b/tests/lecture-notes/Makefile @@ -0,0 +1 @@ +../DIR_MAKEFILE \ No newline at end of file diff --git a/tests/lecture-notes/lectures/Makefile b/tests/lecture-notes/lectures/Makefile new file mode 120000 index 0000000..0fde22c --- /dev/null +++ b/tests/lecture-notes/lectures/Makefile @@ -0,0 +1 @@ +../../COMPILE_MAKEFILE \ No newline at end of file diff --git a/tests/lecture-notes/lectures/test.lec b/tests/lecture-notes/lectures/test.lec new file mode 100644 index 0000000..cb88c5d --- /dev/null +++ b/tests/lecture-notes/lectures/test.lec @@ -0,0 +1,4 @@ +\contentsline {lecture}{Lecture\,1\,(date)}{1}% +\vspace \smallskipamount \hspace {1.5em}\parbox {\dimexpr \textwidth -1.55em- 2em}{Some keywords} +\contentsline {lecture}{Lecture\,2\,(date)}{2}% +\vspace \smallskipamount \hspace {1.5em}\parbox {\dimexpr \textwidth -1.55em- 2em}{Some other keywords} diff --git a/tests/lecture-notes/lectures/test.tex b/tests/lecture-notes/lectures/test.tex new file mode 100644 index 0000000..ae7b7b9 --- /dev/null +++ b/tests/lecture-notes/lectures/test.tex @@ -0,0 +1,17 @@ +\documentclass{article} + +\usepackage{mkessler-lectures} +\usepackage{blindtext} + +\begin{document} + +\summaryoflectures + +\lecture[Some keywords]{date}{title} +\blindtext + +\newpage +\lecture[Some other keywords]{date}{title 2} +\blindtext + +\end{document} diff --git a/tests/math/Makefile b/tests/math/Makefile new file mode 120000 index 0000000..63f6ffd --- /dev/null +++ b/tests/math/Makefile @@ -0,0 +1 @@ +../DIR_MAKEFILE \ No newline at end of file diff --git a/tests/math/faktor/Makefile b/tests/math/faktor/Makefile new file mode 120000 index 0000000..0fde22c --- /dev/null +++ b/tests/math/faktor/Makefile @@ -0,0 +1 @@ +../../COMPILE_MAKEFILE \ No newline at end of file diff --git a/tests/math/faktor/test.tex b/tests/math/faktor/test.tex new file mode 100644 index 0000000..b2deb2b --- /dev/null +++ b/tests/math/faktor/test.tex @@ -0,0 +1,16 @@ +\documentclass{article} + +\usepackage{mkessler-faktor} + +\begin{document} + +\[ + \faktor{A}{B} \cong \cofaktor{A}{B} +\] +\[ + \faktor{A}[1]{B}[-1.5] \cong \cofaktor{A}[-1]{B}[0.5] +\] +\[ + \cofaktor*{A}[-1]{B}[2] = x +\] +\end{document} diff --git a/tests/math/math/Makefile b/tests/math/math/Makefile new file mode 120000 index 0000000..0fde22c --- /dev/null +++ b/tests/math/math/Makefile @@ -0,0 +1 @@ +../../COMPILE_MAKEFILE \ No newline at end of file diff --git a/tests/math/math/test.tex b/tests/math/math/test.tex new file mode 100644 index 0000000..be71471 --- /dev/null +++ b/tests/math/math/test.tex @@ -0,0 +1,17 @@ +\documentclass{article} + +\usepackage{mkessler-math} + +\begin{document} +\[ + \Gal \Quot \PreSh \tensor \Var \Br \Set \CHaus \cfun \One \left\lfloor \frac{1}{\frac{3}{\frac{7}{8}}} \right\rfloor \abs{\frac{1}{\frac{8}{\frac{4}{3}}}} \lVert \frac{a}{\frac{b}{c}} \rVert \left< \frac{a}{\frac{b}{c}} \right> \norm{\frac{a}{\frac{b}{c}}} \norm{test} \norm{\frac{a}{\frac{b}{c}}} +\] +\[ + \C \F \K \R \Z \Q +\] +\begin{IEEEeqnarray*}{rCl} + A & = & b \\ + & = & c +\end{IEEEeqnarray*} + +\end{document} diff --git a/tests/math/mathalias/Makefile b/tests/math/mathalias/Makefile new file mode 120000 index 0000000..0fde22c --- /dev/null +++ b/tests/math/mathalias/Makefile @@ -0,0 +1 @@ +../../COMPILE_MAKEFILE \ No newline at end of file diff --git a/tests/math/mathalias/test.tex b/tests/math/mathalias/test.tex new file mode 100644 index 0000000..218654e --- /dev/null +++ b/tests/math/mathalias/test.tex @@ -0,0 +1,15 @@ +\documentclass{article} + +\usepackage[extended]{mkessler-mathalias} + +\begin{document} +\[ +\C\F\K\N\Q\R\Z +\] +\[ +\cA\cB\cC\cD \cZ +\] +\[ +\fA \fB \fZ +\] +\end{document} diff --git a/tests/math/mathfig/Makefile b/tests/math/mathfig/Makefile new file mode 120000 index 0000000..0fde22c --- /dev/null +++ b/tests/math/mathfig/Makefile @@ -0,0 +1 @@ +../../COMPILE_MAKEFILE \ No newline at end of file diff --git a/tests/math/mathfig/test.tex b/tests/math/mathfig/test.tex new file mode 100644 index 0000000..09326fb --- /dev/null +++ b/tests/math/mathfig/test.tex @@ -0,0 +1,16 @@ +\documentclass{article} + +\usepackage{mkessler-mathfig} + +\begin{document} + test +\[ + \begin{tikzcd} + A \ar{r} & B + \end{tikzcd} +\] +test2: + \begin{tikzpicture} + \draw (0,0) rectangle (10,10); + \end{tikzpicture} +\end{document} diff --git a/tests/math/mathfixes/Makefile b/tests/math/mathfixes/Makefile new file mode 120000 index 0000000..0fde22c --- /dev/null +++ b/tests/math/mathfixes/Makefile @@ -0,0 +1 @@ +../../COMPILE_MAKEFILE \ No newline at end of file diff --git a/tests/math/mathfixes/test.tex b/tests/math/mathfixes/test.tex new file mode 100644 index 0000000..bb702cc --- /dev/null +++ b/tests/math/mathfixes/test.tex @@ -0,0 +1,11 @@ +\documentclass{article} + +\usepackage{mkessler-mathfixes} + +\begin{document} + Dies ist nur ein Test: + Es ist 1\degree{} warm. + \[ + a \varphi \epsilon \uglyphi \uglyepsilon \subset \supset \frac{\lim_{x\to \infty}}{} + \] +\end{document} diff --git a/tests/math/mathfont/Makefile b/tests/math/mathfont/Makefile new file mode 120000 index 0000000..0fde22c --- /dev/null +++ b/tests/math/mathfont/Makefile @@ -0,0 +1 @@ +../../COMPILE_MAKEFILE \ No newline at end of file diff --git a/tests/math/mathfont/test.tex b/tests/math/mathfont/test.tex new file mode 100644 index 0000000..3e6de34 --- /dev/null +++ b/tests/math/mathfont/test.tex @@ -0,0 +1,32 @@ +\documentclass{article} + +\usepackage{mkessler-mathfont} +\DeclareMathAlphabet{\mathpzc}{OT1}{pzc}{m}{it} + +\begin{document} +cal com cat frak scr +\def\letters{ABCDEFGHIJKLMNOPQRSTUXWXYZ} + \[ + \mathcal{A} \mathcat{A} \mathfrak{A} \mathscr{A} + \] + mathcalo + \[ + \expandafter\mathcalo\expandafter{\letters} + \] + mathcal + \[ + \expandafter\mathcal\expandafter{\letters} + \] + neue kalligraphie + \[ + \expandafter\mathpzc\expandafter{\letters} ABC + \] + mathscr + \[ + \expandafter\mathscr\expandafter{\letters} + \] + mathfrak + \[ + \expandafter\mathfrak\expandafter{\letters}\mathfrak{p}\mathfrak{q} + \] +\end{document} diff --git a/tests/math/mathop/Makefile b/tests/math/mathop/Makefile new file mode 120000 index 0000000..0fde22c --- /dev/null +++ b/tests/math/mathop/Makefile @@ -0,0 +1 @@ +../../COMPILE_MAKEFILE \ No newline at end of file diff --git a/tests/math/mathop/test.tex b/tests/math/mathop/test.tex new file mode 100644 index 0000000..0d9816a --- /dev/null +++ b/tests/math/mathop/test.tex @@ -0,0 +1,9 @@ +\documentclass{article} + +\usepackage{mkessler-mathop} + +\begin{document} +\[ + \Gal \Quot \PreSh \tensor \Var \Br \Set \CHaus \cfun \One \left\lfloor \frac{1}{\frac{3}{\frac{7}{8}}} \right\rfloor \abs{\frac{1}{\frac{8}{\frac{4}{3}}}} \lVert \frac{a}{\frac{b}{c}} \rVert \left< \frac{a}{\frac{b}{c}} \right> \norm{\frac{a}{\frac{b}{c}}} \norm{test} \norm{\frac{a}{\frac{b}{c}}} +\] +\end{document} diff --git a/tests/math/mathsymb/Makefile b/tests/math/mathsymb/Makefile new file mode 120000 index 0000000..0fde22c --- /dev/null +++ b/tests/math/mathsymb/Makefile @@ -0,0 +1 @@ +../../COMPILE_MAKEFILE \ No newline at end of file diff --git a/tests/math/mathsymb/test.tex b/tests/math/mathsymb/test.tex new file mode 100644 index 0000000..cab1153 --- /dev/null +++ b/tests/math/mathsymb/test.tex @@ -0,0 +1,19 @@ +\documentclass{article} + +\usepackage{mkessler-mathsymb} + +\begin{document} +\[ +f \colon A \to B +\] + +\[ + B \leftarrow A \noloc f +\] + +\contra + +\Warning widerspruch! + +\circled{1} test. +\end{document} diff --git a/tests/math/unicodechar/Makefile b/tests/math/unicodechar/Makefile new file mode 120000 index 0000000..0fde22c --- /dev/null +++ b/tests/math/unicodechar/Makefile @@ -0,0 +1 @@ +../../COMPILE_MAKEFILE \ No newline at end of file diff --git a/tests/math/unicodechar/test.tex b/tests/math/unicodechar/test.tex new file mode 100644 index 0000000..06a6b37 --- /dev/null +++ b/tests/math/unicodechar/test.tex @@ -0,0 +1,7 @@ +\documentclass{article} + +\usepackage{mkessler-unicodechar} + +\begin{document} +Das griechische Alphabet αβγδεζετικλμνξοπρστυφχψω +\end{document} diff --git a/tests/misc/Makefile b/tests/misc/Makefile new file mode 120000 index 0000000..63f6ffd --- /dev/null +++ b/tests/misc/Makefile @@ -0,0 +1 @@ +../DIR_MAKEFILE \ No newline at end of file diff --git a/tests/misc/hypersetup/Makefile b/tests/misc/hypersetup/Makefile new file mode 120000 index 0000000..0fde22c --- /dev/null +++ b/tests/misc/hypersetup/Makefile @@ -0,0 +1 @@ +../../COMPILE_MAKEFILE \ No newline at end of file diff --git a/tests/misc/hypersetup/test.bbl b/tests/misc/hypersetup/test.bbl new file mode 100644 index 0000000..055c523 --- /dev/null +++ b/tests/misc/hypersetup/test.bbl @@ -0,0 +1,20 @@ +% $ biblatex auxiliary file $ +% $ biblatex bbl format version 3.1 $ +% Do not modify the above lines! +% +% This is an auxiliary file used by the 'biblatex' package. +% This file may safely be deleted. It will be recreated by +% biber as required. +% +\begingroup +\makeatletter +\@ifundefined{ver@biblatex.sty} + {\@latex@error + {Missing 'biblatex' package} + {The bibliography requires the 'biblatex' package.} + \aftergroup\endinput} + {} +\endgroup + +\endinput + diff --git a/tests/misc/hypersetup/test.run.xml b/tests/misc/hypersetup/test.run.xml new file mode 100644 index 0000000..01ca856 --- /dev/null +++ b/tests/misc/hypersetup/test.run.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + +]> + + + latex + + test.bcf + + + test.bbl + + + blx-dm.def + blx-compat.def + biblatex.def + standard.bbx + alphabetic.bbx + alphabetic.cbx + biblatex.cfg + english.lbx + + + + biber + + biber + test + + + test.bcf + + + test.bbl + + + test.bbl + + + test.bcf + + + bibliography.bib + images.bib + + + diff --git a/tests/misc/hypersetup/test.tex b/tests/misc/hypersetup/test.tex new file mode 100644 index 0000000..681d0ff --- /dev/null +++ b/tests/misc/hypersetup/test.tex @@ -0,0 +1,16 @@ +\documentclass{article} + +\usepackage[cleveref]{mkessler-hypersetup} + +\title{Geometrie} +\author{Maximilian Keßler} + +\begin{document} + \maketitle + test + + \section{test} + \label{foo} + + \Cref{foo} test. +\end{document} diff --git a/tests/misc/vocab/Makefile b/tests/misc/vocab/Makefile new file mode 120000 index 0000000..0fde22c --- /dev/null +++ b/tests/misc/vocab/Makefile @@ -0,0 +1 @@ +../../COMPILE_MAKEFILE \ No newline at end of file diff --git a/tests/misc/vocab/test.tex b/tests/misc/vocab/test.tex new file mode 100644 index 0000000..6f60500 --- /dev/null +++ b/tests/misc/vocab/test.tex @@ -0,0 +1,11 @@ +\documentclass{article} + +\usepackage[index]{mkessler-vocab} + + + +\begin{document} + \section{beg}\label{foo} + \vocab{test} test. + \printvocabindex +\end{document} diff --git a/tests/utils/Makefile b/tests/utils/Makefile new file mode 120000 index 0000000..63f6ffd --- /dev/null +++ b/tests/utils/Makefile @@ -0,0 +1 @@ +../DIR_MAKEFILE \ No newline at end of file diff --git a/tests/utils/counters/Makefile b/tests/utils/counters/Makefile new file mode 120000 index 0000000..0fde22c --- /dev/null +++ b/tests/utils/counters/Makefile @@ -0,0 +1 @@ +../../COMPILE_MAKEFILE \ No newline at end of file diff --git a/tests/utils/counters/test.cnt b/tests/utils/counters/test.cnt new file mode 100644 index 0000000..bbe51f4 --- /dev/null +++ b/tests/utils/counters/test.cnt @@ -0,0 +1,12 @@ +subparagraph: 1.0.0.0.0 +paragraph: 1.0.0.0 +subsubsection: 1.0.0 +subsection: 1.0 +section: 1 +subparagraph: 2.0.0.0.0 +paragraph: 2.0.0.0 +subsubsection: 2.0.0 +subsection: 2.0 +section: 2 +dummy: 1 +page: 2 diff --git a/tests/utils/counters/test.tex b/tests/utils/counters/test.tex new file mode 100644 index 0000000..e87b7d9 --- /dev/null +++ b/tests/utils/counters/test.tex @@ -0,0 +1,15 @@ +\documentclass{article} + +\usepackage{mkessler-counters} + +\begin{document} + +\section{test} + +\section{test} + +\newcounter{dummy} +\refstepcounter{dummy} + + +\end{document} diff --git a/tests/utils/findpackage/Makefile b/tests/utils/findpackage/Makefile new file mode 120000 index 0000000..0fde22c --- /dev/null +++ b/tests/utils/findpackage/Makefile @@ -0,0 +1 @@ +../../COMPILE_MAKEFILE \ No newline at end of file diff --git a/tests/utils/findpackage/test.tex b/tests/utils/findpackage/test.tex new file mode 100644 index 0000000..afa2bdb --- /dev/null +++ b/tests/utils/findpackage/test.tex @@ -0,0 +1,10 @@ +\RequirePackage{mkessler-findpackage} +\findpackagebycommand{blindtext} + +\documentclass{article} + +\usepackage{blindtext} + +\begin{document} +Just a small test. +\end{document} diff --git a/tests/wip/Makefile b/tests/wip/Makefile new file mode 120000 index 0000000..63f6ffd --- /dev/null +++ b/tests/wip/Makefile @@ -0,0 +1 @@ +../DIR_MAKEFILE \ No newline at end of file diff --git a/tests/wip/proof/Makefile b/tests/wip/proof/Makefile new file mode 120000 index 0000000..0fde22c --- /dev/null +++ b/tests/wip/proof/Makefile @@ -0,0 +1 @@ +../../COMPILE_MAKEFILE \ No newline at end of file diff --git a/tests/wip/proof/test.tex b/tests/wip/proof/test.tex new file mode 100644 index 0000000..6205bab --- /dev/null +++ b/tests/wip/proof/test.tex @@ -0,0 +1,48 @@ +\documentclass[german]{article} + +\usepackage{mkessler-proof} +\usepackage{mkessler-fancythm} +\usepackage{mkessler-hypersetup} +\usepackage{parskip} + +\begin{document} +\section{test} + +\begin{theorem}\label{thm:krass} + Man sollte nach Würzburg fahren. +\end{theorem} + +\begin{rproof}{thm:krass} + \begin{claim}\label{cl:qed} + Der QED ist toll. + \end{claim} + Um \autoref{cl:qed} zu beweisen, brauchen wir zunächst ein Lemma. +\end{rproof} + +\begin{lemma}\label{lm:krass} + Mathevereine sind krass. +\end{lemma} + +\begin{rproof}{lm:krass} + \begin{claim} + Mathe ist cool. + \end{claim} + \begin{subproof} + trivial. + \end{subproof} + Damit folgt nun das Lemma. +\end{rproof} + +Nun kommen wir wieder zurück zum eigentlichen Beweis: + +\begin{rproof}{thm:krass} + \begin{claim}\label{cl:würzburg} + Der QED macht ein Seminar in Würzburg + \end{claim} + \begin{subproof} + Zu prüfen in der DB. Fakt! + \end{subproof} +Aus \autoref{cl:qed} und \autoref{cl:würzburg} folgt nun die Aussage. +\end{rproof} +test +\end{document} diff --git a/tests/wip/restate/Makefile b/tests/wip/restate/Makefile new file mode 120000 index 0000000..0fde22c --- /dev/null +++ b/tests/wip/restate/Makefile @@ -0,0 +1 @@ +../../COMPILE_MAKEFILE \ No newline at end of file diff --git a/tests/wip/restate/test.tex b/tests/wip/restate/test.tex new file mode 100644 index 0000000..f64a2f0 --- /dev/null +++ b/tests/wip/restate/test.tex @@ -0,0 +1,16 @@ +\documentclass{article} + +\usepackage[german]{mkessler-restate} + +\begin{document} + +\NewDocumentCommand{\testbla}{s}{ +\ifx#1\BooleanTrue Starred version called\else\relax\fi + \LaTeX +} + +\undef\testbla + +\restatetheorem{testbla} + +\end{document} diff --git a/utils/mkessler-counters.sty b/utils/mkessler-counters.sty deleted file mode 100644 index 3341e4d..0000000 --- a/utils/mkessler-counters.sty +++ /dev/null @@ -1,14 +0,0 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mkessler-counters}[2021-09-06 - Write counters to auxiliary file] - -\RequirePackage{etoolbox} - -\newwrite\mkessler@counters@out -\immediate\openout\mkessler@counters@out\jobname.cnt\relax -\AtBeginDocument{ - \let\mkessler@counters@saved@stepcounter\stepcounter - \def\stepcounter#1{ - \mkessler@counters@saved@stepcounter{#1} - \immediate\write\mkessler@counters@out{#1: \csname the#1\endcsname}} -} - diff --git a/wip/mkessler-bibliography.sty b/wip/mkessler-bibliography.sty deleted file mode 100644 index d66c6ae..0000000 --- a/wip/mkessler-bibliography.sty +++ /dev/null @@ -1,38 +0,0 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mkessler-bibliography}[2021-09-06 - Package to easily print bibliography and image attributions in document] -%%%%%%%%%%%%%%%%%% - -\RequirePackage{xkeyval} - -\newif\ifenglish\englishtrue -\DeclareOptionX{german}{\englishfalse} -\DeclareOptionX{english}{\englishtrue} - -\def\mkessler@bibliography@bibfile{bibliography.bib} -\def\mkessler@bibliography@imagefile{images.bib} -\DeclareOptionX{bibfile}[bibliography.bib]{\def\mkessler@bibliography@bibfile{#1}} -\DeclareOptionX{imagefile}[images.bib]{\def\mkessler@bibliography@imagefile{#1}} - -\DeclareOptionX*{\PackageWarning{mkessler-bibliography}{Unknown '\CurrentOption'}} -\ProcessOptionsX\relax - -%%%%Bibliography management -\RequirePackage[backend=biber,style=alphabetic]{biblatex} -\addbibresource{\mkessler@bibliography@bibfile} -\addbibresource{\mkessler@bibliography@imagefile} - -%Provide simpler commands to properly print image attributions and literature -\DeclareRobustCommand*{\printimageattributions}{ - \def\imageattributionstitle{\ifenglish Image attributions \else Bildquellen\fi} - \phantomsection - \addcontentsline{toc}{section}{\imageattributionstitle} - \printbibliography[title={\imageattributionstitle}, type=image] -} - -\DeclareRobustCommand*{\printliterature}{ - \def\literaturetitle{\ifenglish Literature\else Literatur\fi} - \phantomsection - \addcontentsline{toc}{section}{\literaturetitle} - \printbibliography[title={\literaturetitle}, nottype=image] - -} diff --git a/wip/mkessler-exsheet.sty b/wip/mkessler-exsheet.sty deleted file mode 100644 index f7c59f7..0000000 --- a/wip/mkessler-exsheet.sty +++ /dev/null @@ -1,25 +0,0 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mkessler-exsheet} - -\newif\ifmkessler@exsheet@english\mkessler@exsheet@englishtrue -\DeclareOption{german}{\mkessler@exsheet@englishfalse} -\DeclareOption{english}{\mkessler@exsheet@englishtrue} - -\DeclareOption*{\PackageWarning{mkessler-exsheet}{Unknown '\CurrentOption'}} -\ProcessOptions\relax - -\RequirePackage{mkessler-fancythm} - -\newcounter{mkessler@exsheet@sheet} - -\declaretheorem[style=thmgreenmargin, numberwithin=mkessler@exsheet@sheet, name=\ifmkessler@exsheet@english Exercise\else Aufgabe\fi]{mkessler@exsheet@aufgabe} - -\usepackage{xkeyval} - -\NewDocumentEnvironment{aufgabe}{O{}}{ -\begin{mkessler@exsheet@aufgabe\expandafter}\if\relax\detokenize{#1}\relax\else[#1]\fi\label{aufgabe-\themkessler@exsheet@aufgabe} -}{ - \end{mkessler@exsheet@aufgabe\expandafter}\relax -} - -\newcommand\blatt{\refstepcounter{mkessler@exsheet@sheet}\subsection*{\themkessler@exsheet@sheet. Übungsblatt}\addcontentsline{toc}{subsection}{\themkessler@exsheet@sheet. Übungsblatt}} diff --git a/wip/mkessler-gag.sty b/wip/mkessler-gag.sty deleted file mode 100644 index c29aae4..0000000 --- a/wip/mkessler-gag.sty +++ /dev/null @@ -1,15 +0,0 @@ - -%Numbering of environments with a fractional environment number, see -% https://tex.stackexchange.com/questions/598076/how-to-have-a-fractional-environment-number/598080?noredirect=1#comment1499689_598080 -%However, for a reason i don't understand the posted answer does not work for me, but i had to replace theorem with definition in the definition of the gag environment (so apparently, i have to do this for each environment separately). It seems that the definitions of this document do use \thedefinition and not \thetheorem, although by default this is not the case. -\newcounter{gag} -\makeatletter -\newenvironment{gag}[1]{% - \let\savedthedefinition\thedefinition - \thm@headfont{\bfseries\boldmath}% - \stepcounter{gag}% - \renewcommand{\thedefinition}{\savedthedefinition#1}% - \renewcommand{\theHdefinition}{gag\thegag}% - \addtocounter{definition}{-1}\ignorespaces -}{\ignorespacesafterend} -\makeatother diff --git a/wip/mkessler-proof.sty b/wip/mkessler-proof.sty deleted file mode 100644 index 6579ad4..0000000 --- a/wip/mkessler-proof.sty +++ /dev/null @@ -1,101 +0,0 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mkessler-proof} - -%%%% This package will be developed for proofs with automatic references to theorems -% for claims numbered within these profos -% and for nice subproof / proof of claim environments - -\newif\ifmkessler@proof@english\mkessler@proof@englishtrue -\DeclareOption{german}{\mkessler@proof@englishfalse} - -\DeclareOption*{\PackageWarning{mkessler-proof}{Unknown '\CurrentOption'}} -\ProcessOptions\relax - -\RequirePackage{amssymb} -\RequirePackage{amsthm} -\RequirePackage{etoolbox} -\RequirePackage{xparse} - -%%Give claim an own counter and let it reset at each proof -%See also at: -%https://tex.stackexchange.com/questions/283502/reset-counter-at-beginning-of-proof -\newtheorem{claim}{\ifmkessler@proof@english Claim\else Behauptung\fi} -\newtheorem*{claim*}{\ifmkessler@proof@english Claim\else Behauptung\fi} -\AtBeginDocument{\def\claimautorefname{\ifmkessler@proof@english Claim\else Behauptung\fi}} - -\newif\ifhyperref -\AtBeginDocument{ - \@ifpackageloaded{hyperref}{ - \hyperreftrue - \def\grab#1{\expandafter\@firstoffive#1} - \def\mkessler@proof@blankref#1{\expandafter\grab\csname r@#1\endcsname} - \let\mkessler@proof@autoref\autoref - }{ - \hyperreffalse - \let\mkessler@proof@blankref\ref - \let\mkessler@proof@autoref\ref - } -} - -\NewDocumentEnvironment{rproof}{m O{}}{\def\mkessler@proof@aster{\relax}\begin{mkessler@fancythm@rproof@impl}{#1}[#2]}{\end{mkessler@fancythm@rproof@impl}} -\NewDocumentEnvironment{rproof*}{m O{}}{\def\mkessler@proof@aster{*}\begin{mkessler@fancythm@rproof@impl}{#1}[#2]}{\end{mkessler@fancythm@rproof@impl}} - -\NewDocumentEnvironment{mkessler@fancythm@rproof@impl}{m O{}} -{ - % Restore correct counter for claim - \ifcsdef{themkessler@proof@#1@save@claim}{ - \setcounter{claim}{\value{mkessler@proof@#1@save@claim}} - \def\mkessler@proof@proofprefix{\ifmkessler@proof@english Continuation of proof\mkessler@proof@aster\space of\else Fortsetzung des Beweises\mkessler@proof@aster\space zu\fi} - \edef\haha{\value{mkessler@proof@#1@part}} - }{ - \newcounter{mkessler@proof@#1@save@claim} - \setcounter{claim}{0} - \def\mkessler@proof@proofprefix{\ifmkessler@proof@english Proof\mkessler@proof@aster\space of\else Beweis\mkessler@proof@aster\space von\fi} - } - % Set up counter number printing as subindexed by numbering of the reference - \let\mkessler@proof@theoldclaim\theclaim - \def\theclaim{\mkessler@proof@blankref{#1}.\mkessler@proof@theoldclaim} - % Now, start the actual proof - \begin{proof}[\mkessler@proof@proofprefix\space\mkessler@proof@autoref{#1}\if\relax\detokenize{#2}\relax\else\space(#2)\fi] -} -{ - \end{proof} % End proof - % Save current claim counter for later restoration - \setcounter{mkessler@proof@#1@save@claim}{\value{claim}} -} - -% Proof (with asterisk) -\NewDocumentEnvironment{proof*}{O{}} -{ - \if\relax\detokenize{#1}\relax\begin{proof}[\ifmkessler@proof@english Proof\emph{*}\else Beweis\emph{*}\fi]\else\begin{proof}[#1\emph{*}]\fi -} -{ - \end{proof} -} - - -%%subproof environment - essentially copied proof environment from amsthm and modified its name + symbol -\DeclareRobustCommand{\blackqed}{% - \ifmmode \mathqed - \else - \leavevmode\unskip\penalty9999 \hbox{}\nobreak\hfill - \quad\hbox{$\blacksquare$}% - \fi -} - -\newenvironment{subproof}[1][\ifmkessler@proof@english Subproof\else Unterbeweis\fi]{\par - \pushQED{\blackqed}% - \normalfont \topsep6\p@\@plus6\p@\relax - \trivlist - \item[\hskip\labelsep - \itshape - #1\@addpunct{.}]\ignorespaces -}{% - \popQED\endtrivlist\@endpefalse -} - - -%%%% This might be dropped, but for now is collected here - -%%Solution (for exercises) -\newenvironment{solution}[1][]{\begin{proof}[\ifmkessler@proof@english{}Solution\else{}Lösung\fi{}#1]}{\end{proof}} diff --git a/wip/mkessler-restate.sty b/wip/mkessler-restate.sty deleted file mode 100644 index 495ed7a..0000000 --- a/wip/mkessler-restate.sty +++ /dev/null @@ -1,37 +0,0 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mkessler-restate} - -\RequirePackage{xkeyval} - -\newif\ifmkessler@restate@english\mkessler@restate@englishtrue -\DeclareOptionX{english}{\mkessler@restate@englishtrue} -\DeclareOptionX{german}{\mkessler@restate@englishfalse} -\DeclareOptionX{ngerman}{\mkessler@restate@englishfalse} - -\define@boolkey+{mkessler-restate.sty}[mkessler@restate@]{strict}[true]{ - \ifmkessler@restate@strict - \PackageInfo{mkessler-restate}{Strict mode enabled. Undefined restates will throw errors.}% - \else - \PackageInfo{mkessler-restate}{Strict mode disabled. Undefined restates will now print placeholder boxes}% - \fi -}{ - \PackageWarning{mkessler-restate}{Erroneous input to key 'strict' ignored. Provide =true or =false.} -} -\ProcessOptionsX*\relax - -\newcommand\restatesetup[1]{\setkeys{mkessler-restate.sty}{#1}} - -\RequirePackage{todonotes} -\RequirePackage{xparse} - -\NewDocumentCommand{\restatetheorem}{s m}{ - \ifcsdef{#2}{ - \ifx#1\BooleanTrue\csname#2\endcsname*\else\csname#2\endcsname\fi - }{ - \ifmkessler@restate@strict - \PackageError{mkessler-restate}{Strict mode enabled but restate command not defined}{The theorem you tried to restate is not defined. Either make sure it is so that it can be printed or disable the strict mode with \noexpand\restatesetup{strict=false} to print a placeholder instead} - \else - \missingfigure{\ifmkessler@restate@english Here theorem #1 is missing, since it is not part of this document.\else Hier fehlt die Wiederholung von Satz #1, der nicht Teil dieses Dokumentes ist.\fi} - \fi - } -}