commit 065230f2d18bfa864aa95a1d17e5b1ba9438daf0 Author: Maximilian Keßler (via gitlab runner) Date: Thu Feb 3 14:49:27 2022 +0000 remove default benchmarking in groupthm Build branch v2.9 (02c2acd) from kesslermaximilian/LatexPackages diff --git a/build_info.json b/build_info.json new file mode 100644 index 0000000..7389632 --- /dev/null +++ b/build_info.json @@ -0,0 +1,444 @@ +{ + "build_time": "", + "source files": { + "version": "v2.9", + "commit": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "dirty": false + }, + "pytex": { + "version": "v1.2.0-31-gc9bb0e8", + "commit": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "dirty": false + }, + "tex_sources": [ + { + "name": "wip/restate/mkessler-restate.sty", + "source file": "wip/restate/restate.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "6b1ca0a837d973849ef6505937b1eeb8", + "dirty": false + }, + { + "name": "wip/lang-input/mkessler-lang-input.sty", + "source file": "wip/lang-input/lang-input.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "e6562cb09adf112148d7aa41d0f4b017", + "dirty": false + }, + { + "name": "wip/subproof/mkessler-subproof.sty", + "source file": "wip/subproof/subproof.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "7f957c6c027eddcb8f8ea89ad49ac8f4", + "dirty": false + }, + { + "name": "wip/gag/mkessler-gag.sty", + "source file": "wip/gag/gag.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "210dee17b6f0a363ab76eaf4fa4635e7", + "dirty": false + }, + { + "name": "wip/exsheet/mkessler-exsheet.sty", + "source file": "wip/exsheet/exsheet.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "2fbb087be42b0115b3c03382af6cbb75", + "dirty": false + }, + { + "name": "wip/figures/mkessler-figures.sty", + "source file": "wip/figures/figures.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "3b4138cd78b2641b7136edce2a0857f3", + "dirty": false + }, + { + "name": "wip/bibliography/mkessler-bibliography.sty", + "source file": "wip/bibliography/bibliography.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "a1c3263e3100caedd618381ef6e53217", + "dirty": false + }, + { + "name": "wip/removed/mkessler-removed.sty", + "source file": "wip/removed/removed.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "07129b6f0e88ea10c814b0616e679576", + "dirty": false + }, + { + "name": "lecture-notes/lectures/mkessler-lectures.sty", + "source file": "lecture-notes/lectures/lectures.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "d37b062a8addb7a6daa5884433ebe933", + "dirty": false + }, + { + "name": "math/faktor/mkessler-faktor.sty", + "source file": "math/faktor/faktor.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "f2c8d1709e853234d9b36a86c14dc1ed", + "dirty": false + }, + { + "name": "math/mathfig/mkessler-mathfig.sty", + "source file": "math/mathfig/mathfig.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "73bfa3eb9414df546cb306e2f059e409", + "dirty": false + }, + { + "name": "math/mathfixes/mkessler-mathfixes.sty", + "source file": "math/mathfixes/mathfixes.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "5f2dadcff7ba1bb18881c4abf9309012", + "dirty": false + }, + { + "name": "math/mathalias/mkessler-mathalias.sty", + "source file": "math/mathalias/mathalias.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "8fd06c0838e5378efb6371bc6977c462", + "dirty": false + }, + { + "name": "math/mathfont/mkessler-mathfont.sty", + "source file": "math/mathfont/mathfont.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "c1bc27458b77e708a8694e00f0acf2c4", + "dirty": false + }, + { + "name": "math/mathsymb/mkessler-mathsymb.sty", + "source file": "math/mathsymb/mathsymb.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "ef39ed25aefbebb300aee8754a98dba1", + "dirty": false + }, + { + "name": "math/mathop/mkessler-mathop.sty", + "source file": "math/mathop/mathop.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "d98bac138c6bae8198f8d02da87d57ad", + "dirty": false + }, + { + "name": "utils/counters/mkessler-counters.sty", + "source file": "utils/counters/counters.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "eb6188097481f0bf5c4df745289f124a", + "dirty": false + }, + { + "name": "utils/findpackage/mkessler-findpackage.sty", + "source file": "utils/findpackage/findpackage.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "4c717c042685cc4639e1ed6133309515", + "dirty": false + }, + { + "name": "indexing/vocab/mkessler-vocab.sty", + "source file": "indexing/vocab/vocab.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "9bacd3c488f765d352c3bc605b1c93c1", + "dirty": false + }, + { + "name": "wrappers/enumerate/mkessler-enumerate.sty", + "source file": "wrappers/enumerate/enumerate.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "e97811ed0e1ddaaa96a0839a38b1f644", + "dirty": false + }, + { + "name": "wrappers/unicodechar/mkessler-unicodechar.sty", + "source file": "wrappers/unicodechar/unicodechar.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "1fe19ab2007d2d5d3ce95e3372d55ffe", + "dirty": false + }, + { + "name": "wrappers/math/mkessler-math.sty", + "source file": "wrappers/math/math.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "5479c918fa2d80b5be379d8e7f4398d1", + "dirty": false + }, + { + "name": "wrappers/todo/mkessler-todo.sty", + "source file": "wrappers/todo/todo.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "5e587a70b4be67a2c99af8b9172147a0", + "dirty": false + }, + { + "name": "wrappers/incfig/mkessler-incfig.sty", + "source file": "wrappers/incfig/incfig.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "4f62ef85b7cdd88bade1128385519ad7", + "dirty": false + }, + { + "name": "wrappers/hypersetup/mkessler-hypersetup.sty", + "source file": "wrappers/hypersetup/hypersetup.pysty", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "772607756c1ee83da40d81a33f848a51", + "dirty": false + }, + { + "name": "lecture-notes/script/mkessler-script.cls", + "source file": "lecture-notes/script/script.pycls", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "c2c8ea0fd3db64844e6a79ec8faee63d", + "dirty": false + }, + { + "name": "exercises/sheet/mkessler-sheet.cls", + "source file": "exercises/sheet/sheet.pycls", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "fa31685d160c0c75369798afd99655df", + "dirty": false + }, + { + "name": "math/categories/translator-mathematical-categories-dictionary-English.dict", + "source file": "math/categories/mathematical-categories.pydict", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "9b99aa26cb535b02c611a72055ee0c02", + "dirty": false + }, + { + "name": "math/categories/translator-mathematical-categories-dictionary-German.dict", + "source file": "math/categories/mathematical-categories.pydict", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "dcdd1fdea4668d6adc4f9baa8765f7db", + "dirty": false + }, + { + "name": "environments/refproof/translator-proof-dictionary-English.dict", + "source file": "environments/refproof/proof.pydict", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "38cac35fbf963a18af62cebb72b2ef49", + "dirty": false + }, + { + "name": "environments/refproof/translator-proof-dictionary-German.dict", + "source file": "environments/refproof/proof.pydict", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "90d76cbc2036809c662606419b9fc16c", + "dirty": false + }, + { + "name": "wip/cache/mkessler-cache.sty", + "source file": "wip/cache/cache.pysty3", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "d56596a83152ffab8f4646abf5d8ca51", + "dirty": false + }, + { + "name": "math/categories/mkessler-categories.sty", + "source file": "math/categories/categories.pysty3", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "012bf21b6da9f2bc79c9a3a06577435f", + "dirty": false + }, + { + "name": "utils/powerset/mkessler-powerset.sty", + "source file": "utils/powerset/powerset.pysty3", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "d228a9230bf3b431dce429bb9007ca14", + "dirty": false + }, + { + "name": "environments/refproof/mkessler-refproof.sty", + "source file": "environments/refproof/refproof.pysty3", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "f709f95be1351b944ed732a1d2b7d6fc", + "dirty": false + }, + { + "name": "indexing/symbindex/mkessler-symbindex.sty", + "source file": "indexing/symbindex/symbindex.pysty3", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "8b32bbd014316ed109ebd3d4ba282359", + "dirty": false + }, + { + "name": "environments/thmstyle/thmstyle.sty", + "source file": "environments/thmstyle/thmstyle.dtx", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "45e234264f0eadeead759705a8fffbe3", + "dirty": false + }, + { + "name": "environments/groupthm/groupthm.sty", + "source file": "environments/groupthm/groupthm.dtx", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "72edca95f60949839b50cb9a5fb0b012", + "dirty": false + }, + { + "name": "environments/fancythm/fancythm.sty", + "source file": "environments/fancythm/fancythm.dtx", + "build time": "2022/02/03 14:48", + "source version": "v2.9", + "source commit hash": "02c2acd330be32b7f75f4145e591ac9b8fa8b389", + "pytex version": "v1.2.0-31-gc9bb0e8", + "pytex commit hash": "c9bb0e87c91beae3e17a829603e4459cf804ec51", + "md5sum": "de5651d5fb829ae4a174d0d9e333d2dd", + "dirty": false + } + ] +} \ No newline at end of file diff --git a/environments/fancythm/fancythm.sty b/environments/fancythm/fancythm.sty new file mode 100644 index 0000000..28afd59 --- /dev/null +++ b/environments/fancythm/fancythm.sty @@ -0,0 +1,402 @@ +%% +%% This is file `fancythm.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% fancythm.dtx (with options: `package') +%% +%% IMPORTANT NOTICE: +%% +%% For the copyright see the source file. +%% +%% Any modified versions of this file must be renamed +%% with new filenames distinct from fancythm.sty. +%% +%% For distribution of the original source see the terms +%% for copying and modification in the file fancythm.dtx. +%% +%% This generated file may be distributed as long as the +%% original source files, as listed above, are part of the +%% same distribution. (The sources need not necessarily be +%% in the same archive or directory.) +%% File: fancytm.dtx +\ProvidesExplPackage{fancythm}{2022/01/30}{0.0.2}{Grouped theorems.} +\RequirePackage{l3keys2e} +\RequirePackage[default styles]{thmstyle} +\cs_set_eq:NN \arabic:n \arabic +\cs_set_eq:NN \counter_new:n \newcounter +\cs_set_eq:NN \counter_within:nn \counterwithin +\cs_new:Npn \counter_new:nn #1 #2 + { + \counter_new:n { #1 } + \counter_within:nn { #1 } { #2 } + } +\cs_new:Npn \counter_if_exist_p:n #1 + { + \cs_if_exist_p:c { c@ #1 } + } +\cs_new:Npn \counter_if_exist:nT #1 + { + \cs_if_exist:cT { c@ #1 } + } +\cs_new:Npn \counter_if_exist:nF #1 + { + \cs_if_exist:cF { c@ #1 } + } +\cs_new:Npn \counter_if_exist:nTF #1 + { + \cs_if_exist:cTF { c@ #1 } + } +\cs_set_eq:Nc \counter_undefined_error:n { @nocounterr } +\cs_new:Npn \counter_ensure_exist:n #1 + { + \counter_if_exist:nF { #1 } + { + \counter_undefined_error:n { #1 } + } + } +\cs_new:Npn \counter_the:n #1 + { + \use:c { the #1 } + } +\cs_new:Npn \counter_set_the:nn #1 #2 + { + \counter_ensure_exist:n { #1 } + \exp_args:Nc \renewcommand { the #1 } { #2 } + } +\cs_new:Npn \counter_sub:nn #1 #2 + { + \counter_within:nn { #1 } { #2 } + \counter_set_the:nn { #1 } + { + \counter_the:n { #2 } . \arabic:n { #1 } + } + } +\cs_new:Npn \counter_new_sub:nn #1 #2 + { + \counter_new:n { #1 } + \counter_sub:nn { #1 } { #2 } + } + +\cs_new:Npn \__fancythm_counter_sub_if_exist:n #1 + { + \counter_if_exist:nT { #1 } + { + \counter_new_sub:nn { in #1 } { #1 } + } + } +\cs_set_eq:Nc \counter_alias:nn { @counteralias } +\cs_generate_variant:Nn \counter_alias:nn { n x } +\counter_new:n { indocument } +\__fancythm_counter_sub_if_exist:n { section } +\__fancythm_counter_sub_if_exist:n { subsection } +\__fancythm_counter_sub_if_exist:n { chapter } +\__fancythm_counter_sub_if_exist:n { part } +\counter_alias:nn { toplevel } { indocument } +\counter_new_sub:nn { sublevel } { toplevel } +\counter_new_sub:nn { subsublevel } { sublevel } +\counter_new_sub:nn { subsubsublevel } { subsublevel } +\str_new:N \g__fancythm_style_str +\bool_new:N \g__fancythm_translator_bool +\bool_new:N \g__fancythm_generate_defaults_bool +\tl_new:N \l__fancythm_key_name_tl +\tl_new:N \l__fancythm_key_mdframed_tl +\tl_new:N \l__fancythm_key_style_tl +\clist_new:N \l__fancythm_key_group_clist +\clist_new:N \l__fancythm_key_thmtools_clist +\tl_new:N \l__fancythm_name_tl +\clist_new:N \l__fancythm_thmtools_clist +\clist_new:N \l__fancythm_group_clist +\clist_new:N \g__fancythm_groupthm_option_clist +\keys_define:nn { fancythm } + { + translator .bool_set:N = \g__fancythm_translator_bool , + translator .default:n = { true } , + generate defaults .bool_set:N = \g__fancythm_generate_defaults_bool , + generate defaults .default:n = { true } , + number in .choices:nn = + { document, section, subsection, chapter, part } + { + \counter_alias:nx { toplevel } { in \tl_use:N \l_keys_choice_tl } + } , + number in .default:n = { document } , + style .choices:nn = + { fancy, plain, classic } + { + \str_set:Nn \g__fancythm_style_str { \tl_use:N \l_keys_choice_tl } + } , + style .default:n = { fancy } , + cache .code:n = + { + \clist_put_right:Nn \g__fancythm_groupthm_option_clist { cache = #1 } + } , + cache .default:n = { true } , + cache version .code:n = + { + \clist_put_right:Nn \g__fancythm_groupthm_option_clist { cache version = #1 } + } , + cache version .default:n = { 0 } , + } +\keys_define:nn { fancythm / fancytheorem } + { + name .tl_set:N = \l__fancythm_key_name_tl , + name .default:n = \c_novalue_tl , + mdframed .tl_set:N = \l__fancythm_key_mdframed_tl , + mdframed .default:n = \c_novalue_tl , + style .tl_set:N = \l__fancythm_key_style_tl , + style .default:n = \c_novalue_tl , + group .clist_set:N = \l__fancythm_key_group_clist , + group .default:n = {} , + thmtools .clist_set:N = \l__fancythm_key_thmtools_clist , + thmtools .default:n = {} , + } +\keys_set:nn { fancythm } { translator, generate defaults, number in, style } +\ProcessKeysOptions{ fancythm } + +\cs_new:Npn \__fancythm_require_package:nn #1 + { + \RequirePackage [ #1 ] + } +\cs_generate_variant:Nn \__fancythm_require_package:nn { V n } +\__fancythm_require_package:Vn \g__fancythm_groupthm_option_clist { groupthm } +\bool_if:NTF \g__fancythm_translator_bool + { + \RequirePackage{translator} + \usedictionary{translator-environment-names} + \cs_set_eq:NN \__fancythm_translate:n \translate + } + { + \cs_set_eq:NN \__fancythm_translate:n \use:n + } +\cs_new:Npn \__fancythm_set_normalized_keys:nn #1 #2 + { + \keys_set:nn { fancythm / fancytheorem } { name, mdframed, style, group, thmtools } + \keys_set:nn { fancythm / fancytheorem } { #1 } + \clist_set_eq:NN \l__fancythm_group_clist \l__fancythm_key_group_clist + \clist_set_eq:NN \l__fancythm_thmtools_clist \l__fancythm_key_thmtools_clist + \tl_if_eq:NnF \l__fancythm_key_mdframed_tl { \c_novalue_tl } + { + \clist_put_right:Nx \l__fancythm_thmtools_clist + { + mdframed = { style = \tl_use:N \l__fancythm_key_mdframed_tl } + } + } + \tl_if_eq:NnF \l__fancythm_key_style_tl { \c_novalue_tl } + { + \clist_put_right:Nx \l__fancythm_thmtools_clist + { + style = \tl_use:N \l__fancythm_key_style_tl + } + } + \tl_if_eq:NnTF \l__fancythm_key_name_tl { \c_novalue_tl } + { + \tl_set:Nx \l__fancythm_name_tl + { + \text_titlecase_first:n { \tl_trim_spaces:n { #2 } } + } + } + { + \tl_set_eq:NN \l__fancythm_name_tl \l__fancythm_key_name_tl + } + \tl_set:Nx \l__fancythm_name_tl + { + \exp_not:N \csname __fancythm_translate:n \exp_not:N \endcsname { \tl_use:N \l__fancythm_name_tl } + } + } +\cs_new:Npn \__fancythm_wrap_multiple:nnn #1 #2 #3 + { + \cs_set:Npn \__fancythm_map_aux:n ##1 + { + \cs_new:cn { #2 } + { + #3 + } + } + \clist_map_function:nN { #1 } \__fancythm_map_aux:n + } +\__fancythm_wrap_multiple:nnn +{ new, provide } +{ fancythm_#1_theorem:nnnn } + { + \use:c { groupthm_#1_family:nnnnn } { ##1 } { dagger, star } { ##3 } { ##4 } { ##2 } + \use:c { groupthm_#1_family_options:nnnn } + { ##1 } + { !s !t+ } + { + \IfBooleanT { ####1 } + { + \AddTheoremToGroup { star } + } + \IfBooleanT { ####2 } + { + \AddTheoremToGroup { dagger } + } + } + { ##2 } + } +\cs_generate_variant:Nn \fancythm_new_theorem:nnnn { n V V V } +\cs_generate_variant:Nn \fancythm_provide_theorem:nnnn { n V V V } +\__fancythm_wrap_multiple:nnn +{ new, provide } +{ fancythm_#1_theorem:nn } + { + \__fancythm_set_normalized_keys:nn { ##1 } { ##2 } + \use:c { fancythm_#1_theorem:nVVV } + { ##2 } + \l__fancythm_group_clist + \l__fancythm_name_tl + \l__fancythm_thmtools_clist + } +\cs_new:Npn \__fancythm_new_document_command:Nnn #1 #2 #3 + { + \NewDocumentCommand { #1 } { #2 } { #3 } + } +\cs_generate_variant:Nn \__fancythm_new_document_command:Nnn { c n n } +\cs_new:Npn \__fancythm_wrap_multiple_document:nnnn #1 #2 #3 #4 + { + \cs_set:Npn \__fancythm_map_aux:n ##1 + { + \cs_set:Nn \__fancythm_Declarator: { \text_titlecase_first:n { ##1 } } + \__fancythm_new_document_command:cnn { #2 } { #3 } { #4 } + } + \clist_map_function:nN { #1 } \__fancythm_map_aux:n + } +\__fancythm_wrap_multiple_document:nnnn + { new, provide } + { \__fancythm_Declarator: FancyTheorem } + { O{} m } + { + \use:c { fancythm_#1_theorem:nn } { ##1 } { ##2 } + } +\groupthm_new_group:nnnnn { star } { } { * } { } { } +\groupthm_new_group:nnnnn { dagger } { } { $^{\dagger}$ } { } { } +\groupthm_new_group:nnnnn { big } { } { } { } { sibling = toplevel } +\groupthm_new_group:nnnnn { small } { } { } { } { sibling = sublevel } +\groupthm_new_group:nnnnn { tiny } { } { } { } { numbered = no } +\groupthm_new_group:nnnnn { custom } { } { } { } { sibling = sublevel } +\groupthm_add_parent:nn { star } { custom } +\groupthm_add_parent:nn { dagger } { custom } +\DeclareTheoremGroupRule [ suffix ] { dagger } { higher } { star } +\DeclareTheoremGroupRule { tiny } { higher } { small } +\DeclareTheoremGroupRule { tiny } { higher } { big } +\DeclareTheoremGroupRule { tiny } { higher } { custom } +\DeclareTheoremGroupRule { small } { higher } { big } +\DeclareTheoremGroupRule { custom } { higher } { big } +\cs_new:Npn \fancythm_add_provided_theorem_to_group:nn #1 #2 + { + \cs_if_exist:cF { __fancythm_provided_theorem__#1__group_clist } + { + \clist_new:c { __fancythm_provided_theorem__#1__group_clist } + } + \clist_put_left:cn { __fancythm_provided_theorem__#1__group_clist } { #2 } + } +\NewDocumentCommand { \AddProvidedFancyTheoremToGroup } { m m } + { + \fancythm_add_provided_theorem_to_group:nn { #1 } { #2 } + } +\cs_new:Npn \__fancythm_provide_package_theorem:nnn #1 #2 #3 + { + \__fancythm_set_normalized_keys:nn { #1 } { #2 } + \cs_if_exist:cT { __fancythm_provided_theorem__#2__group_clist } + { + \clist_concat:ccc + { l__fancythm_group_clist } + { __fancythm_provided_theorem__#2__group_clist } + { l__fancythm_group_clist } + } + \clist_if_in:NnF \l__fancythm_group_clist { big } + { + \clist_if_in:NnF \l__fancythm_group_clist { small } + { + \clist_if_in:NnF \l__fancythm_group_clist { tiny } + { + \clist_put_right:Nn \l__fancythm_group_clist { #3 } + } + } + } + \fancythm_provide_theorem:nVVV + { #2 } + \l__fancythm_group_clist + \l__fancythm_name_tl + \l__fancythm_thmtools_clist + } +\cs_new:Npn \fancythm_provide_big_theorem:nn #1 #2 + { + \__fancythm_provide_package_theorem:nnn { #1 } { #2 } { big } + } +\cs_new:Npn \fancythm_provide_small_theorem:nn #1 #2 + { + \__fancythm_provide_package_theorem:nnn { #1 } { #2 } { small } + } +\cs_new:Npn \fancythm_provide_tiny_theorem:nn #1 #2 + { + \__fancythm_provide_package_theorem:nnn { #1 } { #2 } { tiny } + } +\bool_if:NT \g__fancythm_generate_defaults_bool + { + \AddToHook { begindocument / before } [ fancythm ] + { + \fancythm_provide_big_theorem:nn { style = thmredmarginandfill } { theorem } + \fancythm_provide_big_theorem:nn { style = thmredmarginandfill } { proposition } + \fancythm_provide_big_theorem:nn { style = thmredmarginandfill } { corollary } + \fancythm_provide_big_theorem:nn { style = thmbluemarginandfill } { definition } + \fancythm_provide_big_theorem:nn { style = thmorangemarginandfill} { lemma } + \fancythm_provide_big_theorem:nn { style = thmgreenmargin } { example } + \fancythm_provide_big_theorem:nn + { + style = thmredmarginbluefill, + name = Theorem ~ and ~ Definition + } { theoremdef } + \fancythm_provide_big_theorem:nn + { + style = thmredmarginbluefill, + name = Proposition ~ and ~ Definition + } { propositiondef } + \fancythm_provide_big_theorem:nn + { + style = thmorangemarginbluefill, + name = Lemma ~ and ~ Definition + } { propositiondef } + \fancythm_provide_small_theorem:nn { style = thmvioletmargin } { notation } + \fancythm_provide_small_theorem:nn { style = thmyellowmargin } { remark } + \fancythm_provide_small_theorem:nn { style = thmgoldmargin } { praise } + \fancythm_provide_small_theorem:nn { style = thmblackmarginandfill } { question } + \fancythm_provide_small_theorem:nn { style = thmblackmargin } { orga } + \fancythm_provide_small_theorem:nn { style = thmredmargin } { fact } + \fancythm_provide_small_theorem:nn + { + style = thmyellowmargin, + name = Trivial ~ Nonsense + } { trivial } + \fancythm_provide_small_theorem:nn + { + style = thmvioletmargin, + name = Abuse ~ of ~ Notation + } { abuse } + \fancythm_provide_small_theorem:nn + { + style = thmyellowmargin, + name = Oral ~ remark + } { oral } + \fancythm_provide_tiny_theorem:nn { } { variant } + \fancythm_provide_tiny_theorem:nn { } { assumption } + \fancythm_provide_tiny_theorem:nn { } { note } + \fancythm_provide_tiny_theorem:nn { } { warning } + \fancythm_provide_tiny_theorem:nn { } { goal } + \fancythm_provide_tiny_theorem:nn { } { strategy } + \fancythm_provide_tiny_theorem:nn { } { problem } + \fancythm_provide_tiny_theorem:nn { } { info } + \fancythm_provide_tiny_theorem:nn { } { observe } + \fancythm_provide_tiny_theorem:nn { } { property } + \fancythm_provide_tiny_theorem:nn { } { intuition } + \fancythm_provide_tiny_theorem:nn { } { recall } + \fancythm_provide_tiny_theorem:nn { } { idea } + \fancythm_provide_tiny_theorem:nn { } { exercise } + \fancythm_provide_tiny_theorem:nn { } { reminder } + } + } +\DeclareHookRule { begindocument / before } { groupthm } { after } { fancythm } +\endinput +%% +%% End of file `fancythm.sty'. diff --git a/environments/groupthm/groupthm.sty b/environments/groupthm/groupthm.sty new file mode 100644 index 0000000..a637225 --- /dev/null +++ b/environments/groupthm/groupthm.sty @@ -0,0 +1,887 @@ +%% +%% This is file `groupthm.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% groupthm.dtx (with options: `package') +%% +%% IMPORTANT NOTICE: +%% +%% For the copyright see the source file. +%% +%% Any modified versions of this file must be renamed +%% with new filenames distinct from groupthm.sty. +%% +%% For distribution of the original source see the terms +%% for copying and modification in the file groupthm.dtx. +%% +%% This generated file may be distributed as long as the +%% original source files, as listed above, are part of the +%% same distribution. (The sources need not necessarily be +%% in the same archive or directory.) +%% File: groupthm.dtx +\ProvidesExplPackage{groupthm}{2022/02/02}{0.0.2}{Grouped theorems.} +\RequirePackage{amsthm} +\RequirePackage{thmtools} +\RequirePackage{l3keys2e} +\cs_new:Npn \__groupthm_thmtools_declare_theorem:nn #1 #2 + { + \tl_log:n { Declaring ~ thmtools ~ theorem ~ #2 } + \declaretheorem [ #1 ] { #2 } + \__groupthm_cache:n + { + \csname __groupthm_thmtools_declare_theorem:nn \endcsname { #1 } { #2 } + } + } +\cs_generate_variant:Nn \__groupthm_thmtools_declare_theorem:nn { V n } +\cs_new:Npn \__groupthm_hook_gset_rule_foreach:nNnn #1 #2 #3 #4 + { + \cs_set:Npn \__groupthm_map_aux:n ##1 + { + \hook_gset_rule:nnnn { #1 } { ##1 } { #3 } { #4 } + } + \clist_map_function:NN #2 \__groupthm_map_aux:n + } +\msg_new:nnn { groupthm } { unknown ~ group } +{ + Unknown ~ group ~ '#1' ~ supplied ~ \msg_line_context: +} +\msg_new:nnn { groupthm } { unknown ~ key } +{ + Unknown ~ key ~ '#1' ~ supplied ~ \msg_line_context: +} +\msg_new:nnn { groupthm } { wrong ~ definition } +{ + Bad ~ definition ~ of ~ #1 ~ '#2' ~ \msg_line_context:, ~ #1 ~ is ~ #3 ~ defined. +} +\msg_new:nnn { groupthm } { misuse ~ add ~ theorem ~ to ~ group } + { + Bad ~ usage ~ of ~ 'AddTheoremToGroup' ~ macro ~ outside ~ theorem ~ + family ~ options ~ \msg_line_context: + } +\msg_new:nnnn { groupthm } { undefined ~ theorem ~ variant } + { + Bad ~ call ~ of ~ theorem ~ variant ~ of ~ '#1' ~ \msg_line_context: + } + { + You ~ wanted ~ to ~ call ~ the ~ variant ~ with ~ group(s) ~ + '#2' ~ of ~ theorem ~ family ~ '#1', ~ but ~ it ~ has ~ not ~ been ~ + generated ~ yet. ~ + Probably ~ you ~ forgot ~ this. ~ + \msg_see_documentation_text:n { groupthm } + } +\hook_new:n { __groupthm/prefix } +\hook_new:n { __groupthm/suffix } +\hook_new:n { __groupthm/mapname } +\hook_new:n { __groupthm/thmtools } +\hook_new:n { __groupthm/groupsort } +\cs_generate_variant:Nn \hook_gset_rule:nnnn { n n V n } +\bool_new:N \l__groupthm_key_starred_version_bool +\tl_new:N \l__groupthm_key_prefix_tl +\tl_new:N \l__groupthm_key_name_tl +\tl_new:N \l__groupthm_key_suffix_tl +\clist_new:N \l__groupthm_key_group_clist +\clist_new:N \l__groupthm_key_mapname_clist +\clist_new:N \l__groupthm_key_thmtools_clist +\tl_new:N \l__groupthm_prefix_tl +\tl_new:N \l__groupthm_name_tl +\tl_new:N \l__groupthm_suffix_tl +\clist_new:N \l__groupthm_mapname_clist +\clist_new:N \l__groupthm_thmtools_clist +\clist_new:N \l__groupthm_group_clist +\clist_new:N \g__groupthm_defined_groups_clist +\bool_new:N \l__groupthm_in_family_options_environment_bool +\int_new:N \g__groupthm_append_groups_int +\bool_new:N \g__groupthm_cache_bool +\int_new:N \g__groupthm_cache_version_aux_int +\int_new:N \g__groupthm_cache_version_document_int +\int_set:Nn \g__groupthm_cache_version_aux_int { -1 } +\tl_new:N \g__groupthm_lazy_document_tl +\tl_new:N \g__groupthm_lazy_auxfile_tl +\clist_new:N \g__groupthm_dump_auxfile_clist +\clist_new:N \g__groupthm_dump_cache_clist +\keys_define:nn { groupthm } + { + cache .bool_set:N = \g__groupthm_cache_bool, + cache .default:n = { true }, + __cache version__ .int_set:N = \g__groupthm_cache_version_document_int, + cache version .meta:nn = { groupthm } { cache = true, __cache version__ = #1 }, + cache version .default:n = { 0 }, + } +\keys_define:nn { groupthm / theorem ~ group } + { + prefix .tl_set:N = \l__groupthm_key_prefix_tl, + prefix .default:n = \c_empty_tl, + suffix .tl_set:N = \l__groupthm_key_suffix_tl, + suffix .default:n = \c_empty_tl, + suffix .groups:n = { theoremgroup }, + map ~ name .clist_set:N = \l__groupthm_mapname_clist, + map ~ name .default:n = {}, + map ~ name .groups:n = { theoremgroup }, + thmtools .clist_set:N = \l__groupthm_key_thmtools_clist, + thmtools .default:n = {}, + unknown .code:n = + \msg_error:nnx { groupthm } { unknown ~ key } { \str_use:N \l_keys_key_str } + } +\keys_define:nn { groupthm / grouped ~ theorem } + { + name .tl_set:N = \l__groupthm_key_name_tl, + name .default:n = \c_novalue_tl, + group .clist_set:N = \l__groupthm_key_group_clist, + group .default:n = {}, + thmtools .clist_set:N = \l__groupthm_key_thmtools_clist, + thmtools .default:n = {}, + starred ~ version .bool_set:N = \l__groupthm_key_starred_version_bool, + starred ~ version .default:n = { true }, + unknown .code:n = + \msg_error:nnx { groupthm } { unknown ~ key } { \str_use:N \l_keys_key_str } + } +\keys_define:nn { groupthm / theorem ~ family } + { + name .tl_set:N = \l__groupthm_key_name_tl, + name .default:n = \c_novalue_tl, + group .clist_set:N = \l__groupthm_key_group_clist, + group .default:n = {}, + thmtools .clist_set:N = \l__groupthm_key_thmtools_clist, + thmtools .default:n = {}, + starred ~ version .bool_set:N = \l__groupthm_key_starred_version_bool, + starred ~ version .default:n = { true }, + unknown .code:n = + \msg_error:nnx { groupthm } { unknown ~ key } { \str_use:N \l_keys_key_str } + } +\keys_define:nn { groupthm / theorem ~ family ~ options } + { + starred ~ version .bool_set:N = \l__groupthm_key_starred_version_bool, + starred ~ version .default:n = { true }, + unknown .code:n = + \msg_error:nnx { groupthm } { unknown ~ key } { \str_use:N \l_keys_key_str } + } +\ProcessKeysOptions { groupthm } +\cs_new:Npn \__groupthm_set_normalized_keys:nnn #1 #2 #3 + { + \keys_set:nn { groupthm / theorem ~ group } + { prefix, suffix, thmtools, map ~ name } + \keys_set:nn { groupthm / grouped ~ theorem } + { name, group, thmtools, starred ~ version } + \keys_set:nn { groupthm / theorem ~ family } + { name, group, thmtools, starred ~ version } + \keys_set:nn { groupthm / #2 } { #1 } + \tl_if_eq:NnTF \l__groupthm_key_name_tl { \c_novalue_tl } + { + \tl_set:Nx \l__groupthm_name_tl + { + \text_titlecase_first:n {#3} + } + } + { + \tl_set_eq:NN \l__groupthm_name_tl \l__groupthm_key_name_tl + } + \bool_set_eq:NN \l__groupthm_starred_version_bool \l__groupthm_key_starred_version_bool + \tl_set_eq:NN \l__groupthm_prefix_tl \l__groupthm_key_prefix_tl + \tl_set_eq:NN \l__groupthm_suffix_tl \l__groupthm_key_suffix_tl + \clist_set_eq:NN \l__groupthm_group_clist \l__groupthm_key_group_clist + \clist_set_eq:NN \l__groupthm_mapname_clist \l__groupthm_key_mapname_clist + \clist_set_eq:NN \l__groupthm_thmtools_clist \l__groupthm_key_thmtools_clist + } +\cs_new:Npn \__groupthm_add_to_group_ordering:n #1 + { + \__groupthm_hook_gset_rule_foreach:nNnn + { __groupthm/groupsort } + \g__groupthm_defined_groups_clist + { before } + { #1 } + } +\cs_new:Npn \__groupthm_remove_from_group_ordering:n #1 + { + \__groupthm_hook_gset_rule_foreach:nNnn + { __groupthm/groupsort } + \g__groupthm_defined_groups_clist + { unrelated } + { #1 } + } +\cs_new:Npn \__groupthm_add_to_sort_hook:n #1 +{ + \hook_gput_code:nnn { __groupthm/groupsort } + { #1 } + { + \clist_put_left:Nn \l__groupthm_group_clist { #1 } + } +} +\cs_new:Npn \__groupthm_sort_group_names: + { + \hook_gremove_code:nn { __groupthm/groupsort }{*} + \clist_map_function:NN \l__groupthm_group_clist \__groupthm_add_to_sort_hook:n + \clist_clear:N \l__groupthm_group_clist + \hook_use:n { __groupthm/groupsort } + } +\cs_new:Npn \__groupthm_define_group:nnnnn #1#2#3#4#5 + { + \cs_new:cpn { __groupthm_use_group__#1: } + { + \hook_gput_code:nnn { __groupthm/prefix } { #1 } + { + \tl_put_left:Nx \l__groupthm_prefix_tl { #2 } + } + \hook_gput_code:nnn { __groupthm/suffix } { #1 } + { + \tl_put_right:Nx \l__groupthm_suffix_tl { #3 } + } + \hook_gput_code:nnn { __groupthm/mapname } { #1 } + { + \clist_put_right:Nn \l__groupthm_mapname_clist { #4 } + } + \hook_gput_code:nnn { __groupthm/thmtools } { #1 } + { + \clist_put_right:Nn \l__groupthm_thmtools_clist { #5 } + } + } + \__groupthm_add_to_group_ordering:n { #1 } + \clist_new:c { g__groupthm_parents_group__#1__clist } + \hook_gset_rule:nnnn { ?? } { all } { before } { #1 } + \hook_gset_rule:nnnn { ?? } { unnumbered } { after } { #1 } + \hook_gset_rule:nnnn { ?? } { starred } { after } { #1 } + \clist_gput_left:Nn \g__groupthm_defined_groups_clist { #1 } + } +\cs_new:Npn \__groupthm_undefine_group:n #1 + { + \tl_log:n { Undefining ~ theorem ~ group ~ '#1' } + \cs_undefine:c { __groupthm_use_group__#1: } + \hook_gremove_code:nn { __groupthm/prefix } { #1 } + \hook_gremove_code:nn { __groupthm/suffix } { #1 } + \hook_gremove_code:nn { __groupthm/mapname } { #1 } + \hook_gremove_code:nn { __groupthm/thmtools } { #1 } + \clist_gremove_all:Nn \g__groupthm_defined_groups_clist { #1 } + \cs_undefine:c { g__groupthm_parents_group__#1__clist } + \__groupthm_hook_gset_rule_foreach:nNnn + { ?? } + \g__groupthm_defined_groups_clist + { unrelated } + { #1 } + \__groupthm_hook_gset_rule_foreach:nNnn + { __groupthm/prefix } + \g__groupthm_defined_groups_clist + { unrelated } + { #1 } + \__groupthm_hook_gset_rule_foreach:nNnn + { __groupthm/suffix } + \g__groupthm_defined_groups_clist + { unrelated } + { #1 } + \__groupthm_hook_gset_rule_foreach:nNnn + { __groupthm/mapname } + \g__groupthm_defined_groups_clist + { unrelated } + { #1 } + \__groupthm_hook_gset_rule_foreach:nNnn + { __groupthm/thmtools } + \g__groupthm_defined_groups_clist + { unrelated } + { #1 } + \__groupthm_remove_from_group_ordering:n { #1 } + } +\cs_new:Npn \__groupthm_define:nnnNNNn #1 #2 #3 #4 #5 #6 #7 + { + \bool_if:nT + { + \str_if_eq_p:nn { #1 } { new } + && + \cs_if_exist_p:N #4 + } + { + \tl_log:n { Wrong ~ 'new' ~ definition ~ of ~ #2 ~ '#3' ~ detected. } + \msg_error:nnnnn { groupthm } { wrong ~ definition } + { #2 } { #3 } { already } + } + \bool_if:nT + { + \str_if_eq_p:nn { #1 } { renew } + && + ! \cs_if_exist_p:N #4 + } + { + \tl_log:n { Wrong ~ 'renew' ~ definition ~ of ~ #2 ~ '#3' ~ detected. } + \msg_error:nnnnn { groupthm } { wrong ~ definition } + { #2 } { #3 } { not } + } + \bool_if:nT + { + ( + \str_if_eq_p:nn { #1 } { declare } || + \str_if_eq_p:nn { #1 } { renew } + ) && + \cs_if_exist_p:N #4 + } + { + \tl_log:n { Removing ~ definition ~ of ~ #2 ~ '#3'. } + \tl_log:n { Declarator ~ was ~ #1. } + #5 { #3 } + } + \bool_if:nTF + { + \cs_if_exist_p:N #4 + && + \str_if_eq_p:nn { #1 } { provide } + } + { + \tl_log:n { Providing ~ #2 ~ '#3' ~ skipped: ~ '#3' ~ already ~ defined. } + } + { + \tl_log:n { Defining ~ #2 ~ '#3'. } + #6 #7 + } + } +\cs_generate_variant:Nn \__groupthm_define:nnnNNNn { n n n c N N n } +\cs_new:Npn \__groupthm_define_multiple:nnnNNnn #1 #2 #3 #4 #5 #6 #7 + { + \cs_set:Npn \__groupthm_map_aux:n ##1 + { + \cs_new:cn { #6 } + { + \__groupthm_lazy:n + { + \__groupthm_define:nnncNNn + { ##1 } + { #2 } + { ####1 } + { #3 } + #4 + #5 + { #7 } + } + } + } + \clist_map_function:nN { #1 } \__groupthm_map_aux:n + } +\__groupthm_define_multiple:nnnNNnn + { new, renew, provide, declare } + { theorem group } + { __groupthm_use_group__##1: } + \__groupthm_undefine_group:n + \__groupthm_define_group:nnnnn + { groupthm_#1_group:nnnnn } + { { ##1 } { ##2 } { ##3 } { ##4 } { ##5 } } +\cs_generate_variant:Nn \groupthm_new_group:nnnnn { n V V V V } +\cs_generate_variant:Nn \groupthm_renew_group:nnnnn { n V V V V } +\cs_generate_variant:Nn \groupthm_provide_group:nnnnn { n V V V V } +\cs_generate_variant:Nn \groupthm_declare_group:nnnnn { n V V V V } +\cs_new:Npn \__groupthm_wrap_multiple:nnn #1 #2 #3 + { + \cs_set:Npn \__groupthm_map_aux:n ##1 + { + \cs_new:cn { #2 } + { + #3 + } + } + \clist_map_function:nN { #1 } \__groupthm_map_aux:n + } +\__groupthm_wrap_multiple:nnn + { new, renew, provide, declare } + { groupthm_#1_group:nn } + { + \__groupthm_set_normalized_keys:nnn { ##1 } { theorem ~ group } { ##2 } + \use:c { groupthm_#1_group:nVVVV } + { ##2 } + \l__groupthm_prefix_tl + \l__groupthm_suffix_tl + \l__groupthm_mapname_clist + \l__groupthm_thmtools_clist + } +\cs_generate_variant:Nn \groupthm_new_group:nn { n x } +\cs_new:Npn \__groupthm_new_document_command:Nnn #1 #2 #3 + { + \NewDocumentCommand { #1 } { #2 } { #3 } + } +\cs_generate_variant:Nn \__groupthm_new_document_command:Nnn { c n n } +\cs_new:Npn \__groupthm_wrap_multiple_document:nnnn #1 #2 #3 #4 + { + \cs_set:Npn \__groupthm_map_aux:n ##1 + { + \cs_set:Nn \__groupthm_Declarator: { \text_titlecase_first:n { ##1 } } + \__groupthm_new_document_command:cnn { #2 } { #3 } { #4 } + } + \clist_map_function:nN { #1 } \__groupthm_map_aux:n + } +\__groupthm_wrap_multiple_document:nnnn + { new, renew, provide, declare } + { \__groupthm_Declarator: TheoremGroup } + { O{} m } + { + \__groupthm_lazy:n + { + \use:c { groupthm_#1 _group:nn } { ##1 } { ##2 } + } + } +\cs_new:Npn \groupthm_declare_group_rule:nnnn #1 #2 #3 #4 + { + \__groupthm_lazy:n + { + \str_set:Nx \l_tmpa_str { \tl_trim_spaces:n { #3 } } + \str_if_eq:VnT \l_tmpa_str { higher } + { + \str_set:Nn \l_tmpa_str { after } + } + \str_if_eq:VnT \l_tmpa_str { lower } + { + \str_set:Nn \l_tmpa_str { before } + } + \str_if_eq:nnTF { #1 } { ?? } + { + \hook_gset_rule:nnVn {??} {#2} \l_tmpa_str {#4} + } + { + \hook_gset_rule:nnVn { __groupthm / #1 } {#2} \l_tmpa_str {#4} + } + } + } +\cs_generate_variant:Nn \groupthm_declare_group_rule:nnnn { n n n x } +\NewDocumentCommand { \DeclareTheoremGroupRule } { O{??} m m m } + { + \__groupthm_lazy:n + { + \groupthm_declare_group_rule:nnnn {#1} {#2} {#3} {#4} + } + } +\cs_new:Npn \groupthm_add_parent:nn #1 #2 + { + \__groupthm_lazy:n + { + \__groupthm_ensure_group_exists:n { #1 } + \__groupthm_ensure_group_exists:n { #2 } + \clist_gput_left:cn { g__groupthm_parents_group__#1__clist } { #2 } + } + } +\cs_generate_variant:Nn \groupthm_add_parent:nn { n x } +\NewDocumentCommand { \AddTheoremGroupParent } { m m } + { + \__groupthmlazy:n + { + \groupthm_add_parent:nn { #1 } { #2 } + } + } +\cs_new:Npn \__groupthm_push_tmpa_seq:n #1 + { + \seq_push:Nn \l_tmpa_seq { #1 } + } +\cs_new:Npn \__groupthm_flatten_groups_hierarchy:nN #1 #2 + { + \clist_clear:N #2 + \seq_set_from_clist:Nn \l_tmpa_seq { #1 } + \bool_until_do:nn + { + \seq_if_empty_p:N \l_tmpa_seq + } + { + \seq_pop:NN \l_tmpa_seq \l_tmpa_tl + \__groupthm_ensure_group_exists:V \l_tmpa_tl + \clist_if_in:NVF #2 \l_tmpa_tl + { + \clist_put_left:NV #2 \l_tmpa_tl + \clist_map_function:cN + { g__groupthm_parents_group__ \l_tmpa_tl __clist } + \__groupthm_push_tmpa_seq:n + } + } + } +\cs_new:Npn \groupthm_append_to_group:nn #1 #2 + { + \__groupthm_lazy:n + { + \groupthm_new_group:nx { #1 } { __append__ \int_use:N \g__groupthm_append_groups_int } + \groupthm_add_parent:nx { #2 } { __append__ \int_use:N \g__groupthm_append_groups_int } + \groupthm_declare_group_rule:nnnx + { ?? } { #2 } { before } { __append__ \int_use:N \g__groupthm_append_groups_int } + \int_gincr:N \g__groupthm_append_groups_int + } + } +\NewDocumentCommand { \AppendToTheoremGroup } { O{} m } + { + \__groupthmlazy:n + { + \groupthm_append_to_group:nn { #1 } { #2 } + } + } +\clist_new:N \l__powerset_copied_clist +\seq_new:N \l__powerset_saved_seq +\cs_generate_variant:Nn \clist_remove_all:Nn { N V } +\cs_new:Npn \__powerset_clist_foreach_aux:Nn #1 #2 + { + \clist_if_empty:NTF \l__powerset_copied_clist + { + #2 + } + { + \clist_get:NN \l__powerset_copied_clist \l_tmpa_tl + \seq_push:NV \l__powerset_saved_seq \l_tmpa_tl + \clist_pop:NN \l__powerset_copied_clist { \l_tmpa_tl } + \__powerset_clist_foreach_aux:Nn #1 {#2} + \seq_get:NN \l__powerset_saved_seq \l_tmpa_tl + \clist_put_left:NV #1 \l_tmpa_tl + \__powerset_clist_foreach_aux:Nn #1 {#2} + \seq_get:NN \l__powerset_saved_seq \l_tmpa_tl + \clist_remove_all:NV #1 \l_tmpa_tl + \clist_push:NV \l__powerset_copied_clist \l_tmpa_tl + \seq_pop:NN \l__powerset_saved_seq \l_tmpa_tl + } + } +\cs_new:Npn \powerset_clist_foreach:Nn #1 #2 + { + \clist_set_eq:NN \l__powerset_copied_clist #1 + \clist_clear:N #1 + \clist_remove_duplicates:N \l__powerset_copied_clist + \__powerset_clist_foreach_aux:Nn #1 {#2} + \clist_set_eq:NN #1 \l__powerset_copied_clist + } +\cs_new:Npn \__groupthm_ensure_group_exists:n #1 + { + \cs_if_exist:cF { __groupthm_use_group__#1: } + { + \msg_error:nnn { groupthm } { unknown ~ group } { #1 } + } + } +\cs_generate_variant:Nn \__groupthm_ensure_group_exists:n { V } +\cs_new:Npn \__groupthm_use_group:n #1 + { + \__groupthm_ensure_group_exists:n { #1 } + \use:c { __groupthm_use_group__#1: } + } +\cs_new:Npn \__groupthm_use_function_on_name:n #1 + { + \tl_set:Nx \l__groupthm_name_tl + { + #1 { \tl_use:N \l__groupthm_name_tl } + } + } +\cs_new:Npn \__groupthm_define_theorem:nnnn #1 #2 #3 #4 + { + \tl_clear:N \l__groupthm_prefix_tl + \tl_set:Nn \l__groupthm_name_tl { #3 } + \tl_clear:N \l__groupthm_suffix_tl + \clist_clear:N \l__groupthm_mapname_clist + \clist_clear:N \l__groupthm_thmtools_clist + \hook_gremove_code:nn { __groupthm/prefix }{*} + \hook_gremove_code:nn { __groupthm/suffix }{*} + \hook_gremove_code:nn { __groupthm/mapname }{*} + \hook_gremove_code:nn { __groupthm/thmtools }{*} + \__groupthm_flatten_groups_hierarchy:nN { #2, all } \l__groupthm_group_clist + \clist_map_function:NN \l__groupthm_group_clist \__groupthm_use_group:n + \tl_log:x { Flattened ~ groups ~ '#2' ~ to ~ '\clist_use:Nn \l__groupthm_group_clist {,}' ~ when ~ + defining ~ theorem ~ '#1' } + \hook_use:n { __groupthm/prefix } + \hook_use:n { __groupthm/suffix } + \hook_use:n { __groupthm/mapname } + \hook_use:n { __groupthm/thmtools } + \clist_map_function:NN \l__groupthm_mapname_clist \map_use_on_name:n + \tl_set:Nn \l_tmpa_tl { name = } + \tl_put_right:NV \l_tmpa_tl \l__groupthm_prefix_tl + \tl_put_right:NV \l_tmpa_tl \l__groupthm_name_tl + \tl_put_right:NV \l_tmpa_tl \l__groupthm_suffix_tl + \clist_put_right:NV \l__groupthm_thmtools_clist \l_tmpa_tl + \clist_put_right:Nn \l__groupthm_thmtools_clist { #4 } + \__groupthm_thmtools_declare_theorem:Vn + \l__groupthm_thmtools_clist + { #1 } + } +\__groupthm_define_multiple:nnnNNnn + { new, provide } + { grouped ~ theorem } + { ##1 } + \__groupthm_error: + \__groupthm_define_theorem:nnnn + { groupthm_#1_theorem:nnnn } + { { ##1 } { ##2 } { ##3 } { ##4 } } +\cs_generate_variant:Nn \groupthm_new_theorem:nnnn { n V V V } +\cs_generate_variant:Nn \groupthm_provide_theorem:nnnn { n V V V } +\cs_generate_variant:Nn \groupthm_new_theorem:nnnn { x V n n } +\cs_generate_variant:Nn \groupthm_provide_theorem:nnnn { x V n n } +\__groupthm_wrap_multiple:nnn + { new, provide } + { groupthm_#1_theorem:nnn } + { + \__groupthm_lazy:n + { + \__groupthm_set_normalized_keys:nnn { ##1 } { grouped ~ theorem } { ##2 } + \bool_if:nT { ##3 } + { + \clist_put_left:Nn \l__groupthm_group_clist { unnumbered } + } + \use:c { groupthm_#1_theorem:nVVV } + { ##2 } + \l__groupthm_group_clist + \l__groupthm_name_tl + \l__groupthm_thmtools_clist + \bool_if:NT \l__groupthm_starred_version_bool + { + \clist_put_left:Nn \l__groupthm_group_clist { starred } + \use:c { groupthm_#1_theorem:nVVV } + { ##2* } + \l__groupthm_group_clist + \l__groupthm_name_tl + \l__groupthm_thmtools_clist + } + } + } +\__groupthm_wrap_multiple_document:nnnn + { new, provide } + { \__groupthm_Declarator: GroupedTheorem } + { s O{} m } + { + \__groupthm_lazy:n + { + \use:c { groupthm_#1_theorem:nnn } + { ##2 } + { ##3 } + { ##1 } + } + } +\cs_new:Npn \__groupthm_define_family:nnnnn #1 #2 #3 #4 #5 + { + \clist_set:Nn \l_tmpa_clist { #2 } + \powerset_clist_foreach:Nn \l_tmpa_clist + { + \clist_set_eq:NN \l__groupthm_group_clist \l_tmpa_clist + \clist_put_right:Nn \l__groupthm_group_clist { #5 } + \__groupthm_sort_group_names: + \use:c{groupthm_new_theorem:xVnn} + {__#1__groups_\clist_use:Nn \l__groupthm_group_clist {_}} + \l__groupthm_group_clist + { #3 } + { #4 } + } + \clist_new:c { __groupthm_family__#1__group_clist } + \clist_set_eq:cN {__groupthm_family__#1__group_clist } \l_tmpa_clist + \clist_new:c { __groupthm_family__#1__always_group_clist } + \clist_set:cn {__groupthm_family__#1__always_group_clist } { #5 } + } +\__groupthm_define_multiple:nnnNNnn + { new, provide } + { theorem ~ family } + { __groupthm_family__##1__group_clist } + \__groupthm_error: + \__groupthm_define_family:nnnnn + { groupthm_#1_family:nnnnn } + { { ##1 } { ##2 } { ##3 } { ##4 } { ##5 }} +\cs_generate_variant:Nn \groupthm_new_family:nnnnn { n V V V V } +\cs_generate_variant:Nn \groupthm_provide_family:nnnnn { n V V V V } +\__groupthm_wrap_multiple:nnn +{ new, provide } +{ groupthm_#1_family:nnn } +{ + \__groupthm_lazy:n + { + \__groupthm_set_normalized_keys:nnn { ##1 } { theorem ~ family } { ##2 } + \bool_if:nTF { ##3} + { + \clist_set:Nn \l_tmpa_clist { unnumbered } + } + { + \clist_clear:N \l_tmpa_clist + } + \bool_if:NT \l__groupthm_starred_version_bool + { + \clist_put_left:Nn \l__groupthm_group_clist { starred } + } + \use:c { groupthm_#1_family:nVVVV } + { ##2 } + \l__groupthm_group_clist + \l__groupthm_name_tl + \l__groupthm_thmtools_clist + \l_tmpa_clist + } +} +\__groupthm_wrap_multiple_document:nnnn + { new, provide } + { \__groupthm_Declarator: GroupedTheoremFamily } + { s O{} m } + { + \__groupthm_lazy:n + { + \use:c { groupthm_#1_family:nnn } + { ##2 } + { ##3 } + { ##1 } + } + } +\cs_new:Npn \groupthm_add_theorem_to_group:n #1 + { + \__groupthm_lazy:n + { + \bool_if:NTF \l__groupthm_in_family_options_environment_bool + { + \clist_put_left:Nn \l__groupthm_group_clist { #1 } + } + { + \msg_error:nn { groupthm } { misuse ~ add ~ theorem ~ to ~ group } + } + } + } + \NewDocumentCommand { \AddTheoremToGroup } { m } + { + \groupthm_add_theorem_to_group:n { #1 } + } +\cs_new:Npn \__groupthm_define_family_options:nnnn #1 #2 #3 #4 + { + \DeclareDocumentEnvironment + { #1 } + { #2 } + { + \clist_clear:N \l__groupthm_group_clist + \bool_set_true:N \l__groupthm_in_family_options_environment_bool + #3 + \bool_set_false:N \l__groupthm_in_family_options_environment_bool + \clist_put_right:Nn \l__groupthm_group_clist { #4 } + \__groupthm_sort_group_names: + \cs_if_exist:cTF { __#1__groups_ \clist_use:Nn \l__groupthm_group_clist { _ } } + { + \begin { __#1__groups_ \clist_use:Nn \l__groupthm_group_clist { _ } } + } + { + \msg_error:nnxx { groupthm } { undefined ~ theorem ~ variant } + { #1 } + { \clist_use:Nnnn \l__groupthm_group_clist { ~ and ~ } {, ~} { , ~ and ~ } } + } + } + { + \clist_clear:N \l__groupthm_group_clist + \bool_set_true:N \l__groupthm_in_family_options_environment_bool + #3 + \bool_set_false:N \l__groupthm_in_family_options_environment_bool + \clist_put_right:Nn \l__groupthm_group_clist { #4 } + \__groupthm_sort_group_names: + \end { __#1__groups_ \clist_use:Nn \l__groupthm_group_clist { _ } } + } + \__groupthm_cache_slow:n + { + \csname __groupthm_define_family_options:nnnn \endcsname { #1 } { #2 } { #3 } { #4 } + } + } +\__groupthm_define_multiple:nnnNNnn + { new, renew, provide, declare } + { theorem ~ family ~ options } + { ##1 } + \use_none:n + \__groupthm_define_family_options:nnnn + { groupthm_#1_family_options:nnnn } + { { ##1 } { ##2 } { ##3 } { ##4 } } +\cs_generate_variant:Nn \groupthm_new_family_options:nnnn { n n n V } +\cs_generate_variant:Nn \groupthm_renew_family_options:nnnn { n n n V } +\cs_generate_variant:Nn \groupthm_provide_family_options:nnnn { n n n V } +\cs_generate_variant:Nn \groupthm_declare_family_options:nnnn { n n n V } +\__groupthm_wrap_multiple_document:nnnn + { new, renew, provide, declare } + { \__groupthm_Declarator: GroupedTheoremFamilyOptions } + { s O{} m m m } + { + \__groupthm_lazy:n + { + \keys_set:nn { groupthm / theorem ~ family ~ options } { starred ~ version } + \keys_set:nn { groupthm / theorem ~ family ~ options } { ##2 } + \bool_if:nTF { ##1 } + { + \clist_set:Nn \l_tmpa_clist { unnumbered } + } + { + \clist_clear:N \l_tmpa_clist + } + \use:c { groupthm_#1_family_options:nnnV } + { ##3 } + { ##4 } + { ##5 } + \l_tmpa_clist + \bool_if:NT \l__groupthm_starred_version_bool + { + \use:c { groupthm_#1_family_options:nnnV } + { ##3* } + { ##4 } + { + ##5 + \groupthm_add_theorem_to_group:n { starred } + } + \l_tmpa_clist + } + } + } +\bool_if:NTF \g__groupthm_cache_bool + { + \cs_new:Npn \__groupthm_write_auxout:n + { + \iow_now:cn { @auxout } + } + \cs_generate_variant:Nn \__groupthm_write_auxout:n { x } + \cs_new:Npn \__groupthm_dump_auxfile:n + { + \clist_gput_right:Nn \g__groupthm_dump_auxfile_clist + } + \cs_generate_variant:Nn \__groupthm_dump_auxfile:n { x } + + \cs_new:Npn \__groupthm_cache_auxfile:n + { + \clist_gput_right:Nn \g__groupthm_dump_cache_clist + } + \cs_generate_variant:Nn \__groupthm_cache_auxfile:n { V } + + \hook_gput_code:nnn { enddocument } { groupthm } + { + \clist_map_function:NN \g__groupthm_dump_auxfile_clist + \__groupthm_write_auxout:n + \__groupthm_write_auxout:n + { + \csname tl_gput_right:cn \endcsname + { + g__groupthm_lazy_auxfile_tl + } + } + \__groupthm_write_auxout:x { \str_use:N \c_left_brace_str } + \clist_map_function:NN \g__groupthm_dump_cache_clist + \__groupthm_write_auxout:n + \__groupthm_write_auxout:x { \str_use:N \c_right_brace_str } + } + + \__groupthm_dump_auxfile:x + { + \ExplSyntaxOn + \int_gset:Nn \exp_not:N \g__groupthm_cache_version_aux_int + { + \int_use:N \g__groupthm_cache_version_document_int + } + \ExplSyntaxOff + } + \cs_new:Npn \__groupthm_lazy:n + { + \tl_gput_right:Nn \g__groupthm_lazy_document_tl + } + \cs_set_eq:NN \__groupthm_cache:n \__groupthm_cache_auxfile:n + \cs_new:Npn \__groupthm_cache_slow:n #1 + { + \tl_set:Nn \l_tmpa_tl + { + { #1 } + } + \regex_replace_all:nnN { \cP\# } { \cO\# } \l_tmpa_tl + \__groupthm_cache_auxfile:V \l_tmpa_tl + } + \hook_gput_code:nnn { begindocument } { groupthm } + { + \cs_set_eq:NN \__groupthm_lazy:n \use:n + \int_compare:nNnTF + \g__groupthm_cache_version_aux_int < \g__groupthm_cache_version_document_int + { + \tl_use:N \g__groupthm_lazy_document_tl + } + { + \tl_use:N \g__groupthm_lazy_auxfile_tl + } + } + } + { + \cs_set_eq:NN \__groupthm_cache:n \use_none:n + \cs_set_eq:NN \__groupthm_cache_slow:n \use_none:n + \cs_set_eq:NN \__groupthm_lazy:n \use:n + } +\groupthm_new_group:nnnnn { all } { } { } { } { } +\groupthm_new_group:nnnnn { starred } { } { } { } { numbered = no } +\groupthm_new_group:nnnnn { unnumbered } { } { } { } { numbered = no } +\endinput +%% +%% End of file `groupthm.sty'. diff --git a/environments/refproof/mkessler-refproof.sty b/environments/refproof/mkessler-refproof.sty new file mode 100644 index 0000000..79f7808 --- /dev/null +++ b/environments/refproof/mkessler-refproof.sty @@ -0,0 +1,296 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'refproof.pysty3'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\ProvidesExplPackage{mkessler-refproof}{2022/02/03}{2.9}{Automatic references to theorems in proofs. Claim counters within proofs} + + + +\ExplSyntaxOn + +\RequirePackage{amssymb} +\RequirePackage{amsthm} +\RequirePackage{xparse} +\RequirePackage{refcount} +\RequirePackage{translator} +\RequirePackage{mkessler-subproof} % TODO: let PyTeX format the mkessler- prefix + + +%%%% Hook management + +\cs_new:Npn\__mkessler_refproof_autoref:n + { + \ref + } + +\AddToHook{package/hyperref/after} + { + \cs_set:Npn\__mkessler_refproof_autoref:n + { + \autoref + } + } + +%%% Saving old definitions + +\cs_new_eq:NN \__mkessler_refproof_saved_proof:w \proof +\cs_new_eq:NN \__mkessler_refproof_saved_endproof: \endproof +\cs_new_eq:NN \__mkessler_refproof_saved_subproof:n \rawsubproof +\cs_new_eq:NN \__mkessler_refproof_saved_endsubproof: \rawendsubproof + +%%% Internal variables + +\int_new:N \__mkessler_refproof_proofdepth_int +\seq_new:N \__mkessler_refproof_nested_claim_counter_values_seq +\prop_new:N \__mkessler_refproof_refproof_claim_counters_prop + +\cs_generate_variant:Nn \seq_push:Nn { N x } + +%%% Language translations + +\usedictionary{translator-proof-dictionary} + +%%%Now, we internally got a proof and a subproof environment +%%%Make them available as 'old' variants, with their defautl behaviour +\NewDocumentEnvironment{oldproof}{ o } +{ + \IfValueTF { #1 } + { + \__mkessler_refproof_saved_proof:w { #1 } + } + { + \__mkessler_refproof_saved_proof:w + } +} +{ + \__mkessler_refproof_saved_endproof: +} + +\NewDocumentEnvironment{oldsubproof}{ o } +{ + \IfValueTF { #1 } + { + \__mkessler_refproof_saved_subproof:n { #1 } + } + { + \__mkessler_refproof_saved_subproof:n { \translate { Subproof } } + } +} +{ + \__mkessler_refproof_saved_endsubproof: +} + +%%% Main implementation + +%Introduce claim environment +\newtheorem{claim}{\translate{Claim}} +\newtheorem*{claim*}{\translate{Claim}} +\AtBeginDocument{\def\claimautorefname{\translate{Claim}}} + + +\cs_new:Nn \__mkessler_refproof_enter_proof: + { + \int_gincr:N \__mkessler_refproof_proofdepth_int + \seq_gpush:Nx \__mkessler_refproof_nested_claim_counter_values_seq + { + \arabic { claim } + } + \group_begin: + } + +\cs_new:Nn \__mkessler_refproof_leave_proof: + { + \group_end: + \seq_gpop:NN \__mkessler_refproof_nested_claim_counter_values_seq \l_tmpa_tl + \setcounter { claim } { \tl_use:N \l_tmpa_tl } + \int_gdecr:N \__mkessler_refproof_proofdepth_int + } + + +% Usage: +% #1 = \BooleanTrue or \BooleanFalse indicating presence of star +% #2 = star version of translation +% #3 = nonstar version of translation +\cs_new:Nn \__mkessler_refproof_set_proof_prefix:nnn + { + \IfBooleanTF { #1 } + { + \cs_set:Nn \__mkessler_refproof_proof_prefix: + { + \translate { #2 } + } + } + { + \cs_set:Nn \__mkessler_refproof_proof_prefix: + { + \translate { #3 } + } + } + } + +\cs_new:Nn \__mkessler_refproof_proof_comment:n +{ + \IfValueT { #1 } + { + \c_space_tl ( #1 ) + } +} + + +\NewDocumentEnvironment{refproof}{s m !o} + { + \__mkessler_refproof_enter_proof: + + \prop_get:NnN + \__mkessler_refproof_refproof_claim_counters_prop + { #2 } + \l_tmpa_tl + + \quark_if_no_value:NTF \l_tmpa_tl + { + \setcounter { claim } { 0 } + \__mkessler_refproof_set_proof_prefix:nnn { #1 } + { Proof* ~ of } + { Proof ~ of } + } + { + \setcounter { claim } { \tl_use:N \l_tmpa_tl } + \__mkessler_refproof_set_proof_prefix:nnn { #1 } + { Continuation ~ of ~ proof* ~ of } + { Continuation ~ of ~ proof ~ of } + } + % Set up counter number printing as subindexed by numbering of the reference + \renewcommand \theclaim + { + \getrefnumber { #2 } . \arabic { claim } + } + \__mkessler_refproof_saved_proof:w + [ + \__mkessler_refproof_proof_prefix: + \c_space_tl + \__mkessler_refproof_autoref:n { #2 } + \__mkessler_refproof_proof_comment:n { #3 } + ] + } +{ + \__mkessler_refproof_saved_endproof: + \prop_gput:Nnx \__mkessler_refproof_refproof_claim_counters_prop + { #2 } + { + \value{claim} + } + \__mkessler_refproof_leave_proof: +} + +%%% A 'smart' proof environment +\AtBeginDocument{ + \RenewDocumentEnvironment{proof}{!s !o} + { + \__mkessler_refproof_enter_proof: + + \setcounter{claim}{0} + + \renewcommand \theclaim + { + \arabic { claim } + } + \int_compare:nNnTF \__mkessler_refproof_proofdepth_int > 1 + { + \__mkessler_refproof_set_proof_prefix:nnn { #1 } + { Subproof* } + { Subproof } + \__mkessler_refproof_saved_subproof:n + { + \__mkessler_refproof_proof_prefix: + \__mkessler_refproof_proof_comment:n { #2 } + } + } + { + \__mkessler_refproof_set_proof_prefix:nnn { #1 } + { Proof* } + { Proof } + \__mkessler_refproof_saved_proof:w + [ + \__mkessler_refproof_proof_prefix: + \__mkessler_refproof_proof_comment:n { #2 } + ] + } + } + { + \__mkessler_refproof_saved_endproof: + \__mkessler_refproof_leave_proof: + } +} + +\RenewDocumentEnvironment{subproof}{!s !o} +{ + \__mkessler_refproof_enter_proof: + + \setcounter { claim } { 0 } + \renewcommand \theclaim + { + \arabic { claim } + } + + \__mkessler_refproof_set_proof_prefix:nnn { #1 } + { Subproof* } + { Subproof } + \__mkessler_refproof_saved_subproof:n + { + \__mkessler_refproof_proof_prefix: + \__mkessler_refproof_proof_comment:n { #2 } + } +} +{ + \__mkessler_refproof_saved_endsubproof: + \__mkessler_refproof_leave_proof: +} + +\DeclareDocumentCommand { \proofdepth } { } + { + \int_to_arabic:n \__mkessler_refproof_proofdepth_int + } diff --git a/environments/refproof/translator-proof-dictionary-English.dict b/environments/refproof/translator-proof-dictionary-English.dict new file mode 100644 index 0000000..fdd3108 --- /dev/null +++ b/environments/refproof/translator-proof-dictionary-English.dict @@ -0,0 +1,74 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This dictionary has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'proof.pydict'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the dictionary again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX dictionary is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the dictionary sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\ProvidesDictionary{translator-proof-dictionary}{English} + +\providetranslation{Claim}{Claim} +\providetranslation{claim}{claim} +\providetranslation{Claim*}{Claim*} +\providetranslation{claim*}{claim*} +\providetranslation{Proof}{Proof} +\providetranslation{proof}{proof} +\providetranslation{Proof*}{Proof*} +\providetranslation{proof*}{proof*} +\providetranslation{Proof of}{Proof of} +\providetranslation{proof of}{proof of} +\providetranslation{Proof* of}{Proof* of} +\providetranslation{proof* of}{proof* of} +\providetranslation{Continuation of proof}{Continuation of proof} +\providetranslation{continuation of proof}{continuation of proof} +\providetranslation{Continuation of proof of}{Continuation of proof of} +\providetranslation{continuation of proof of}{continuation of proof of} +\providetranslation{Continuation of proof*}{Continuation of proof*} +\providetranslation{continuation of proof*}{continuation of proof*} +\providetranslation{Continuation of proof* of}{Continuation of proof* of} +\providetranslation{continuation of proof* of}{continuation of proof* of} +\providetranslation{Subproof}{Subproof} +\providetranslation{subproof}{subproof} +\providetranslation{Subproof*}{Subproof*} +\providetranslation{subproof*}{subproof*} diff --git a/environments/refproof/translator-proof-dictionary-German.dict b/environments/refproof/translator-proof-dictionary-German.dict new file mode 100644 index 0000000..a0a5062 --- /dev/null +++ b/environments/refproof/translator-proof-dictionary-German.dict @@ -0,0 +1,74 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This dictionary has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'proof.pydict'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the dictionary again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX dictionary is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the dictionary sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\ProvidesDictionary{translator-proof-dictionary}{German} + +\providetranslation{Claim}{Behauptung} +\providetranslation{claim}{Behauptung} +\providetranslation{Claim*}{Behauptung*} +\providetranslation{claim*}{Behauptung*} +\providetranslation{Proof}{Beweis} +\providetranslation{proof}{Beweis} +\providetranslation{Proof*}{Beweis*} +\providetranslation{proof*}{Beweis*} +\providetranslation{Proof of}{Beweis von} +\providetranslation{proof of}{Beweis von} +\providetranslation{Proof* of}{Beweis* von} +\providetranslation{proof* of}{Beweis* von} +\providetranslation{Continuation of proof}{Fortsetzung des Beweises} +\providetranslation{continuation of proof}{Fortsetzung des Beweises} +\providetranslation{Continuation of proof of}{Fortsetzung des Beweises zu} +\providetranslation{continuation of proof of}{Fortsetzung des Beweises zu} +\providetranslation{Continuation of proof*}{Fortsetzung des Beweises*} +\providetranslation{continuation of proof*}{Fortsetzung des Beweises*} +\providetranslation{Continuation of proof* of}{Fortsetzung des Beweises* zu} +\providetranslation{continuation of proof* of}{Fortsetzung des Beweises* zu} +\providetranslation{Subproof}{Unterbeweis} +\providetranslation{subproof}{Unterbeweis} +\providetranslation{Subproof*}{Unterbeweis*} +\providetranslation{subproof*}{Unterbeweis*} diff --git a/environments/thmstyle/thmstyle.sty b/environments/thmstyle/thmstyle.sty new file mode 100644 index 0000000..93771da --- /dev/null +++ b/environments/thmstyle/thmstyle.sty @@ -0,0 +1,137 @@ +%% +%% This is file `thmstyle.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% thmstyle.dtx (with options: `package') +%% +%% IMPORTANT NOTICE: +%% +%% For the copyright see the source file. +%% +%% Any modified versions of this file must be renamed +%% with new filenames distinct from thmstyle.sty. +%% +%% For distribution of the original source see the terms +%% for copying and modification in the file thmstyle.dtx. +%% +%% This generated file may be distributed as long as the +%% original source files, as listed above, are part of the +%% same distribution. (The sources need not necessarily be +%% in the same archive or directory.) +%% File: thmstyle.dtx +\ProvidesExplPackage{thmstyle}{2022/01/17}{0.0.1}{Styles for thmtools theorems.} +\RequirePackage{amsthm} +\RequirePackage{thmtools} +\RequirePackage{mdframed} +\RequirePackage{xcolor} +\RequirePackage{l3keys2e} +\bool_new:N \g__thmstyle_default_styles_bool +\definecolor{gold}{RGB}{218,165,32} +\keys_define:nn { thmstyle } + { + default styles .bool_set:N = \g__thmstyle_default_styles_bool, + default styles .default:n = { true }, + } +\ProcessKeysOptions { thmstyle } +\cs_new:Npn \__thmstyle_mdframed_define_style:nn #1 #2 + { + \mdfdefinestyle{#2}{#1} + } +\cs_new:Npn \__thmstyle_thmtools_declare_style:nn #1 #2 + { + \declaretheoremstyle[#1]{#2} + } +\cs_generate_variant:Nn \__thmstyle_thmtools_declare_style:nn { x x } +\cs_new:Npn \thmstyle_declare_mdf_style:nnn #1 #2 #3 + { + \__thmstyle_mdframed_define_style:nn + { + linecolor = #2, + linewidth = 2pt, + leftmargin = 0pt, + rightmargin = 0pt, + rightline = false, + topline = false, + bottomline = false, + backgroundcolor = #3 + } + { + #1 + } + } +\cs_generate_variant:Nn \thmstyle_declare_mdf_style:nnn { x n x } +\NewDocumentCommand { \DeclareFancyMdfStyle } { o m o } + { + \thmstyle_declare_mdf_style:xnx + { + \IfValueTF { #3 } + { + #3 + } + { + md #2 margin + \IfValueT { #1 } + { + and #1 fill + } + } + } + { + #2 + } + { + \IfValueTF { #1 } + { + #1 + } + { + white + } + } + } +\NewDocumentCommand { \DeclareFancyThmStyle } { o m o } + { + \DeclareFancyMdfStyle [ #1 ] { #2 } + \__thmstyle_thmtools_declare_style:xx + { + mdframed = + { + style = md #2 margin \IfValueT { #1 } { and #1 fill } + }, + postheadspace = { 0.3em }, + notefont = \noexpand\mdseries, + } + { + \IfValueTF { #3 } + { #3 } + { + thm #2 margin + \IfBooleanT { #1 } + { + and #1 fill + } + } + } + } +\bool_if:NT \g__thmstyle_default_styles_bool + { + \DeclareFancyThmStyle[red!8]{red}[thmredmarginandfill] + \DeclareFancyThmStyle[orange!10]{orange}[thmorangemarginandfill] + \DeclareFancyThmStyle[blue!7]{blue}[thmbluemarginandfill] + \DeclareFancyThmStyle{green!70!black}[thmgreenmargin] + \DeclareFancyThmStyle{gold}[thmgoldmargin] + \DeclareFancyThmStyle{yellow!80!orange}[thmyellowmargin] + \DeclareFancyThmStyle{gray}[thmgraymargin] + \DeclareFancyThmStyle[violet!7]{violet}[thmvioletmarginandfill] + \DeclareFancyThmStyle{violet}[thmvioletmargin] + \DeclareFancyThmStyle[blue!7]{red}[thmredmarginbluefill] + \DeclareFancyThmStyle{red}[thmredmargin] + \DeclareFancyThmStyle[blue!7]{orange}[thmorangemarginbluefill] + \DeclareFancyThmStyle[violet!20!gray!20]{black}[thmblackmarginandfill] + \DeclareFancyThmStyle{black}[thmblackmargin] + } +\endinput +%% +%% End of file `thmstyle.sty'. diff --git a/exercises/sheet/mkessler-sheet.cls b/exercises/sheet/mkessler-sheet.cls new file mode 100644 index 0000000..c384f55 --- /dev/null +++ b/exercises/sheet/mkessler-sheet.cls @@ -0,0 +1,131 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This class has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'sheet.pycls'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the class again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX class is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the class sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesClass{mkessler-sheet}[2022/02/03 - Write up university exercise sheets] + + + +% This is meant as a layouting class for easily writing up exercise sheets. +% Use \course \sheetnumber and \author to set metadata of the document +% Use option [largename] if the author(s) is/are too long and collide in the fancy header +% Use option [german|ngerman|english] to control language appearance + +\RequirePackage{scrbase} + +\newif\ifmkessler@sheet@english\mkessler@sheet@englishtrue +\DeclareOption{german}{\mkessler@sheet@englishfalse} +\DeclareOption{ngerman}{\mkessler@sheet@englishfalse} +\DeclareOption{english}{\mkessler@sheet@englishtrue} + +\newif\ifmkessler@sheet@largename\mkessler@sheet@largenamefalse +\DeclareOption{large-name}{\mkessler@sheet@largenametrue} + +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{scrartcl}} +\ProcessOptions\relax + +\LoadClass{scrartcl} + +\KOMAoption{fontsize}{12pt} +\KOMAoption{parskip}{half-} +\KOMAoption{DIV}{12} +\KOMAoption{headings}{normal} + +\RequirePackage{scrlayer-scrpage} +\KOMAoption{headsepline}{:} + +\def\@course{\ClassError{mkessler-sheet}{No \noexpand\course given}{Use \noexpand\course{} to set the course.}}% +\DeclareRobustCommand*{\course}[1]{\gdef\@course{#1}} +\def\@sheetnumber{\ClassError{mkessler-sheet}{No \noexpand\sheetnumber given}{Use \noexpand\sheetnumber{} to set the current sheetnumber.}}% +\DeclareRobustCommand*{\sheetnumber}[1]{\gdef\@sheetnumber{\ifmkessler@sheet@english Sheet #1 \else Übungsblatt #1\fi}} + +\renewcommand*{\@date}{\today} + +\renewcommand*{\maketitle}{ + \thispagestyle{plain} + {\makebox[0pt][l]{\usekomafont{myauthor}\@author}\hfill\makebox[0pt][r]{\usekomafont{date}\@date}\par} + \vspace{0.5em} + {\centering\usekomafont{title}\@course\par} + {\centering\usekomafont{subtitle}\@sheetnumber \par} + \vspace{2em} + \hrule + \addvspace{2em} +} + +\setkomafont{title}{\LARGE\bfseries} +\setkomafont{subtitle}{} +\newkomafont{myauthor}{} +\setkomafont{date}{} +\newkomafont{headtitle}{\itshape} +\setkomafont{pageheadfoot}{\footnotesize} +\setkomafont{descriptionlabel}{\bfseries} +\setkomafont{pagenumber}{\normalsize} + +\pagestyle{scrheadings} +\ihead[]{\ifmkessler@sheet@largename \usekomafont{myauthor}\@author \\ \@course\;- \@sheetnumber\else \usekomafont{myauthor}\@author\fi } +\chead[]{\ifmkessler@sheet@largename \else \usekomafont{subtitle}\@course\;- \@sheetnumber\fi} +\ohead[]{\usekomafont{date}\@date} + +% Page layout +\setlength{\parindent}{0pt} + +\RequirePackage[a4paper, left=2cm, right=2cm, top=3cm, bottom=3cm, head=15.0pt, headsep=10pt]{geometry} + +\setlength{\skip\footins}{15pt} + +\setlength{\abovecaptionskip}{0cm} +\setlength{\belowcaptionskip}{0cm} + +%Für Zeilenabstand 1,5 +\RequirePackage[onehalfspacing]{setspace} +\RequirePackage[super]{nth} + +\newcommand\nr[1]{ + \section*{\ifmkessler@sheet@english\nth{#1} exercise\else #1. Aufgabe\fi} + \setcounter{equation}{0} +} diff --git a/indexing/symbindex/mkessler-symbindex.sty b/indexing/symbindex/mkessler-symbindex.sty new file mode 100644 index 0000000..e481892 --- /dev/null +++ b/indexing/symbindex/mkessler-symbindex.sty @@ -0,0 +1,149 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'symbindex.pysty3'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\ProvidesExplPackage{mkessler-symbindex}{2022/02/03}{2.9}{Declaring of math symbols with automatic indexing} + + + +\RequirePackage{imakeidx} +\RequirePackage{xparse} + +% Keys used for declaring symbols +\keys_define:nn { symbol } + { + operator .tl_set:N = \l_symbol_operator_tl, + operator .default:n = \use:n, + formula .tl_set:N = \l_symbol_formula_tl, + formula .default:n = \c_novalue_tl, + ordered .tl_set:N = \l_symbol_ordered_tl, + ordered .default:n = \c_novalue_tl, + description .tl_set:N = \l_symbol_description_tl, + description .default:n = \c_novalue_tl, + group .tl_set:N = \l_symbol_group_tl, + group .default:n = \c_novalue_tl, + defaultargs .tl_set:N = \l_symbol_defaultargs_tl, + defaultargs .default:n = \c_novalue_tl + } + +% Core macro not to be used publicly directly. Usage: + % #1 = indexname / group + % #2 = symbolname, + % #3 = description + % #4 = operator to apply (one argument) - can be \use:n for identity + % #5 = substitution when called + % #6 = default appendices to macro in index (e.g. _R) + % #7 = ordering in index +\cs_new_protected:Nn\symbol_define:nnnnnnn + { + \bool_new:c { used_#2 } + \cs_new_protected:cn { symbol_#2: } + { + \bool_if:cF { used_#2 } + { + \index[#1] + { + #7 + @ + $#4{#5}#6$ + #3 + } + \bool_gset_true:c { used_#2 } + } + #4{#5} + } + \expandafter\protected\expandafter\gdef\csname#2\endcsname + { + \use:c { symbol_#2: } + } + } +\cs_generate_variant:Nn\symbol_define:nnnnnnn { V n V V V V V} + + +% Main package interface +\NewDocumentCommand{\DeclareSymbol}{ O{} m} + { + \keys_set:nn{ symbol } + { + operator, + formula, + ordered, + description, + group, + defaultargs + } + \keys_set:nn{ symbol }{#1} + \tl_if_eq:NnTF\l_symbol_description_tl{\c_novalue_tl} + { + \tl_set:Nn\l_symbol_description_tl { \c_empty_tl } + } + { + \tl_put_left:Nn\l_symbol_description_tl { ,\c_space_tl } + } + \tl_if_eq:NnT\l_symbol_formula_tl{\c_novalue_tl} + { + \tl_set:Nn\l_symbol_formula_tl {#2} + } + \tl_if_eq:NnT\l_symbol_ordered_tl{\c_novalue_tl} + { + \tl_set:Nn\l_symbol_ordered_tl {#2} + } + \tl_if_eq:NnT\l_symbol_defaultargs_tl{\c_novalue_tl} + { + \tl_clear:N\l_symbol_defaultargs_tl + } + \symbol_define:VnVVVVV + \l_symbol_group_tl + { + #2 + } + \l_symbol_description_tl + \l_symbol_operator_tl + \l_symbol_formula_tl + \l_symbol_defaultargs_tl + \l_symbol_ordered_tl + } diff --git a/indexing/vocab/mkessler-vocab.sty b/indexing/vocab/mkessler-vocab.sty new file mode 100644 index 0000000..d0033d7 --- /dev/null +++ b/indexing/vocab/mkessler-vocab.sty @@ -0,0 +1,101 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'vocab.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-vocab}[2022/02/03 - Package for emphasizing vocabulary] + + +%%Provides a \vocab<[name in index]>{vocabulary} command to print vocabulary in bold blue and automatically index it. + +\RequirePackage{xkeyval} + +\newif\ifmkessler@vocab@english\mkessler@vocab@englishtrue +\DeclareOptionX{german}{\mkessler@vocab@englishfalse} +\DeclareOptionX{ngerman}{\mkessler@vocab@englishfalse} +\DeclareOptionX{english}{\mkessler@vocab@englishtrue} +\newif\ifmkessler@vocab@index\mkessler@vocab@indexfalse + +\DeclareOptionX{index}{\mkessler@vocab@indextrue} +\DeclareOptionX{noindex}{\mkessler@vocab@indexfalse} + +\DeclareOptionX*{\PackageWarning{mkessler-vocab}{Unknown '\CurrentOption'}} +\ProcessOptionsX*\relax + + +%%%%Management of vocabulary and corresponding index +\RequirePackage{xparse} +\RequirePackage{xcolor} +\ifmkessler@vocab@index + \RequirePackage{imakeidx} + \makeindex[name=vocabindex, 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[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] + } + \NewDocumentCommand{\PrintVocabIndex}{ } + { + \printindex[vocabindex] + } +\else + \NewDocumentCommand{\vocab}{O{} m }{ + \textbf{\color{blue} #2} + } +\fi + diff --git a/lecture-notes/lectures/mkessler-lectures.sty b/lecture-notes/lectures/mkessler-lectures.sty new file mode 100644 index 0000000..73968b6 --- /dev/null +++ b/lecture-notes/lectures/mkessler-lectures.sty @@ -0,0 +1,162 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'lectures.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-lectures}[2022/02/03 - 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 + +%MIT License + +%Copyright (c) 2019 Gilles Castel + +%Permission is hereby granted, free of charge, to any person obtaining a copy +%of this software and associated documentation files (the "Software"), to deal +%in the Software without restriction, including without limitation the rights +%to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +%copies of the Software, and to permit persons to whom the Software is +%furnished to do so, subject to the following conditions: +% +%The above copyright notice and this permission notice shall be included in all +%copies or substantial portions of the Software. +% +%THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +%IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +%FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +%AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +%LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +%OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +%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. + +\RequirePackage{xkeyval} + +\newif\ifmkessler@lectures@english\mkessler@lectures@englishtrue +\DeclareOptionX{german}{\mkessler@lectures@englishfalse} +\DeclareOptionX{ngerman}{\mkessler@lectures@englishfalse} +\DeclareOptionX{english}{\mkessler@lectures@englishtrue} + +\newif\ifmkessler@lectures@fancyhead\mkessler@lectures@fancyheadfalse +\DeclareOptionX{fancyhead}{\mkessler@lectures@fancyheadtrue} + +\DeclareOptionX*{\PackageWarning{mkessler-lectures}{Unknown '\CurrentOption'}} +\ProcessOptionsX*\relax + + +%Tocloft package for making a list of lectures +\RequirePackage{tocloft} +%Store name of the summary in a command to use it multiple times +\newcommand\mkessler@lectures@listlecturename{\ifmkessler@lectures@english Summary of lectures\else Übersicht der Vorlesungen\fi} +\newlistof{lecture}{lec}{\mkessler@lectures@listlecturename} % Declare new list of lectures +%Settings how to print the summary +\renewcommand{\cftdot}{} +\renewcommand\cftlecturefont{\normalfont\bfseries} +\renewcommand\cftlecturepagefont{\normalfont\bfseries} +\renewcommand\cftlectitlefont{\Large\bfseries} +\renewcommand\cftbeforelectureskip{1em} + +%Command to parse the date +\RequirePackage{xifthen} +\def\testdateparts#1{\dateparts#1\relax} +\def\dateparts#1 #2 #3 #4 #5\relax{ + \marginpar{\small\textsf{\mbox{#1 #2 #3 #5}}} +} + +%Define the main lecture command to start a new lecture +\def\mkessler@lectures@lectureprefix{\ifmkessler@lectures@english Lecture\else Vorlesung\fi} +\def\@lecture{}% + +\RequirePackage{xparse} + +% \lecture[keywords]{date}[number]{title}[margin note] +\NewDocumentCommand{\lecture}{ O{} m O{} m O{}}{ + \ifthenelse{\isempty{#3}}{\refstepcounter{lecture}}{\setcounter{lecture}{#3}} + %Store lecture name in the macro \@lecture + \ifthenelse{\isempty{#4}}{% + \def\@lecture{\mkessler@lectures@lectureprefix\, \thelecture}% + }{% + \def\@lecture{\mkessler@lectures@lectureprefix\, \thelecture: #4}% + }% + \marginpar{\small\textsf{\parbox{10em}{\mkessler@lectures@lectureprefix\, \thelecture \\#2}}} + %Add lecture as an entry to the lectures file + \addcontentsline{lec}{lecture}{\mkessler@lectures@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}}} +} + +%Provide a command to show the summary of lectures +\DeclareRobustCommand*{\summaryoflectures}{ + \phantomsection + \addcontentsline{toc}{section}{\mkessler@lectures@listlecturename} + \thispagestyle{plain} + \listoflecture +} + + +\ifmkessler@lectures@fancyhead + \RequirePackage{fancyhdr} + \pagestyle{fancy} + + % LE: left even + % RO: right odd + % CE, CO: center even, center odd + + \fancyhead[RO,LE]{\@lecture} % Right odd, Left even + \fancyhead[RE,LO]{} % Right even, Left odd + + %%No fancy headers in the appendix (as there is no lecture) + \let\mkessler@lectures@stored@appendix\appendix + \renewcommand\appendix{ + \mkessler@lectures@stored@appendix + \fancyhead[RO,LE]{} + \renewcommand{\headrulewidth}{0pt} + } +\fi diff --git a/lecture-notes/script/mkessler-script.cls b/lecture-notes/script/mkessler-script.cls new file mode 100644 index 0000000..bed0377 --- /dev/null +++ b/lecture-notes/script/mkessler-script.cls @@ -0,0 +1,219 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This class has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'script.pycls'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the class again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX class is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the class sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesClass{mkessler-script}[2022/02/03 - Write up lecture notes as script] + + + +\RequirePackage{xkeyval} + +\newif\ifmkessler@script@english\mkessler@script@englishtrue +\DeclareOptionX{german}{\mkessler@script@englishfalse} +\DeclareOptionX{ngerman}{\mkessler@script@englishfalse} +\DeclareOptionX{english}{\mkessler@script@englishtrue} + +\newif\ifmkessler@script@showversion\mkessler@script@showversiontrue +\DeclareOptionX{show version}{\mkessler@script@showversiontrue} +\DeclareOptionX{hideversion}{\mkessler@script@showversionfalse} + +\newif\ifmkessler@script@fancyfoot\mkessler@script@fancyfootfalse +\DeclareOptionX{fancyfoot}{\mkessler@script@fancyfoottrue} + + +\newif\ifmkessler@script@gitversion\mkessler@script@gitversionfalse +\DeclareOptionX{git}{\mkessler@script@gitversiontrue} + +\DeclareOptionX*{\ClassWarning{mkessler-script}{Unknown '\CurrentOption'}} +\ProcessOptionsX*\relax + + +\RequirePackage{xifthen} + +%%%%Define command to set metainformation of document +%Set the course +\def\@course{\ClassError{mkessler-script}{No \noexpand\course given}{See documentation for details}}% +\DeclareRobustCommand*{\course}[1]{\gdef\@course{#1}} + +\def\@lecturer{\ClassError{mkessler-script}{No \noexpand\lecturer given}{See documentation for details}}% +\def\@lecturertitle{} +\DeclareRobustCommand*{\lecturer}[2][]{ + \gdef\@lecturer{#2} + \gdef\@lecturertitle{\ifmkessler@script@english Lecturer\else\ifthenelse{\isempty{#1}}{Dozent}{Dozentin}\fi}{} +} + +%Set the assistant +\newif\ifmkessler@script@printassistant\mkessler@script@printassistantfalse +\def\@assistant{}% +\def\@assistantitle{} +\DeclareRobustCommand*{\assistant}[2][]{ + \mkessler@script@printassistanttrue + \gdef\@assistant{#2} + \gdef\@assistanttitle{\ifmkessler@script@english Assistant\else\ifthenelse{\isempty{#1}}{Assistent}{Assistentin}\fi} +} + +%%%%Load base class article +\LoadClass{article} + +\ifmkessler@script@showversion + \ifmkessler@script@gitversion + \RequirePackage[dirty={ (local changes have been made!)}]{gitinfo2} + \fi +\fi + + +%%%%Title +%Define layout of title using course, lecturer, assistant and author, and optionally the current time +\RequirePackage{xparse} +\RequirePackage{datetime} +\renewcommand\@maketitle{% + \newpage + \null + \vskip 2em% + \begin{center}% + \let \footnote \thanks + {\LARGE \@course \par}% + \vskip 1.5em% + {\large + \lineskip .5em% + \begin{tabular}[t]{c}% + \@lecturertitle \\ + {\sc \@lecturer} \\ + \end{tabular}\par + \ifmkessler@script@printassistant + \vskip 1em% + \begin{tabular}[t]{c}% + \@assistanttitle \\ + {\sc \@assistant} \\ + \end{tabular}\par + \fi + \vskip 1em% + \begin{tabular}[t]{c}% + \ifmkessler@script@english Notes\else Mitschrift\fi \\ + {\sc \@author} \\ + \end{tabular} + \par}% + \ifmkessler@script@showversion + \vskip 3em% + \begin{tabular}[t]{c}% + {\small Version} \\ + \ifmkessler@script@gitversion + git: \gitFirstTagDescribe\\ + \ifmkessler@script@english compiled\else kompiliert\fi: + \fi\today\,\currenttime \\ + \end{tabular}\par + \fi + \vskip 4em% + \end{center}% + \par + \vskip 1.5em +} + + +%%%The following is based on the repository +% https://github.com/gillescastel/university-setup +% but has been modified for own purposes. The original content is distributed under the following license: + +%MIT License + +%Copyright (c) 2019 Gilles Castel + +%Permission is hereby granted, free of charge, to any person obtaining a copy +%of this software and associated documentation files (the "Software"), to deal +%in the Software without restriction, including without limitation the rights +%to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +%copies of the Software, and to permit persons to whom the Software is +%furnished to do so, subject to the following conditions: +% +%The above copyright notice and this permission notice shall be included in all +%copies or substantial portions of the Software. +% +%THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +%IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +%FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +%AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +%LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +%OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +%SOFTWARE. + +%%%% These are the fancy headers + +\ifmkessler@script@fancyfoot + \RequirePackage{fancyhdr} + \pagestyle{fancy} + + % LE: left even + % RO: right odd + % CE, CO: center even, center odd + + \fancyhead[RO,LE]{} % Right odd, Left even + \fancyhead[RE,LO]{} % Right even, Left odd + + \fancyfoot[RO,LE]{\thepage} % Right odd, Left even + \fancyfoot[RE,LO]{} % Right even, Left odd + \fancyfoot[C]{\leftmark} % Center + + \makeatother + +\fi + +% Fix some stuff +% %http://tex.stackexchange.com/questions/76273/multiple-pdfs-with-page-group-included-in-a-single-page-warning +\pdfsuppresswarningpagegroup=1 + +% Fix some spacing +% http://tex.stackexchange.com/questions/22119/how-can-i-change-the-spacing-before-theorems-with-amsthm +\def\thm@space@setup{% + \thm@preskip=\parskip \thm@postskip=0pt +} + +% Don't indent paragraphs, leave some space between them +\RequirePackage{parskip} + +% Hide page number when page is empty +\RequirePackage{emptypage} diff --git a/math/categories/mkessler-categories.sty b/math/categories/mkessler-categories.sty new file mode 100644 index 0000000..14c53ec --- /dev/null +++ b/math/categories/mkessler-categories.sty @@ -0,0 +1,208 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'categories.pysty3'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\ProvidesExplPackage{mkessler-categories}{2022/02/03}{2.9}{Definitions of categories with automatic indexing} + +%% Wrapper commands specific for defining categories + +\RequirePackage{mkessler-symbindex} +\RequirePackage{translator} +\RequirePackage{amsmath} + +\usedictionary{translator-mathematical-categories-dictionary} + +\NewDocumentCommand{\category}{ m } + { + \operatorname{\textbf{#1}} + } + + +\NewDocumentCommand{\DeclareCategory}{ O{} m } + { + \DeclareSymbol[group = categories, #1]{#2} + } + + +\NewDocumentCommand{\DeclareSimpleCategory}{ o m o} + { + \IfValueTF{#1} + { + \IfValueTF{#3} + { + \DeclareCategory[operator = \category, description = #3, #1]{#2} + } + { + \DeclareCategory[operator = \category, #1]{#2} + } + } + { + \IfValueTF{#3} + { + \DeclareCategory[operator = \category, description = #3]{#2} + } + { + \DeclareCategory[operator = \category]{#2} + } + } + } + + +\NewDocumentCommand{\MakeCategoryIndex}{ } + { + \printindex[categories] + } + +\makeindex + [ + name = categories, + title = \translate{Index~of~categories} + ] + + +%%%% Categories +\DeclareSimpleCategory + { Top } + [ + \translate{Top~(Category~description)} + ] +\DeclareSimpleCategory + { hTop } + [ + \translate{hTop~(Category~description)} + ] +\DeclareSimpleCategory + { Set } + [ + \translate{Set~(Category~description)} + ] +\DeclareSimpleCategory + { CHaus } + [ + \translate{CHaus~(Category~description)} + ] +\DeclareSimpleCategory + { Grp } + [ + \translate{Grp~(Category~description)} + ] +\DeclareSimpleCategory + { Ab } + [ + \translate{Ab~(Category~description)} + ] +\DeclareSimpleCategory + { CRing } + [ + \translate{CRing~(Category~description)} + ] +\DeclareSimpleCategory + { Ring } + [ + \translate{Ring~(Category~description)} + ] +\DeclareSimpleCategory + [ + defaultargs = _k + ] + { Vect } + [ + \translate{Vect~(Category~description)} + ] +\DeclareSimpleCategory + { Cat } + [ + \translate{Cat~(Category~description)} + ] +\DeclareSimpleCategory + [ + defaultargs = _R + ] + { Mod } + [ + \translate{Mod~(Category~description)} + ] +\DeclareSimpleCategory + [ + defaultargs = _k + ] + { Alg } + [ + \translate{Alg~(Category~description)} + ] +\DeclareSimpleCategory + { Field } + [ + \translate{Field~(Category~description)} + ] +\DeclareSimpleCategory + [ + defaultargs = _k + ] + { AffVar } + [ + \translate{AffVar~(Category~description)} + ] + +\DeclareSimpleCategory + { Sch } + [ + \translate{Sch~(Category~description)} + ] +\DeclareSimpleCategory + { GrAb } + [ + \translate{GrAb~(Category~description)} + ] +\DeclareCategory + [ + operator = \operatorname, + formula = \Delta, + ordered = Ordinal, + description = \translate{Ordinal ~ number ~ category ~ (Category ~ description)} + ] + {OrdCat} diff --git a/math/categories/translator-mathematical-categories-dictionary-English.dict b/math/categories/translator-mathematical-categories-dictionary-English.dict new file mode 100644 index 0000000..081e8ac --- /dev/null +++ b/math/categories/translator-mathematical-categories-dictionary-English.dict @@ -0,0 +1,68 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This dictionary has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'mathematical-categories.pydict'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the dictionary again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX dictionary is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the dictionary sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\ProvidesDictionary{translator-mathematical-categories-dictionary}{English} + +\providetranslation{Index of categories}{Index of categories} +\providetranslation{Top (Category description)}{spaces and continuous maps} +\providetranslation{Set (Category description)}{Sets and functions} +\providetranslation{hTop (Category description)}{Spaces and homotopy classes of continuous maps} +\providetranslation{CHaus (Category description)}{Compact hausdorff spaces and continuous maps} +\providetranslation{Grp (Category description)}{Groups and homomorphisms} +\providetranslation{Ab (Category description)}{Abelian groups and homomorphisms} +\providetranslation{CRing (Category description)}{Commutative rings and homomorphisms} +\providetranslation{Ring (Category description)}{Rings and homomorphisms} +\providetranslation{Vect (Category description)}{$k$-vector spaces and linear maps} +\providetranslation{Cat (Category description)}{Small categories and functors} +\providetranslation{Mod (Category description)}{Left $R$-modules and homomorphisms} +\providetranslation{Alg (Category description)}{$k$-algebras and homomorphisms} +\providetranslation{Field (Category description)}{Fields and field extensions} +\providetranslation{AffVar (Category description)}{Affine Varieties over $k$} +\providetranslation{Sch (Category description)}{Schemes and homomorphisms} +\providetranslation{GrAb (Category description)}{Graded abelian groups and homomorphisms} +\providetranslation{Ordinal number category (Category description)}{Finite ordinal numbers and order-preserving maps} diff --git a/math/categories/translator-mathematical-categories-dictionary-German.dict b/math/categories/translator-mathematical-categories-dictionary-German.dict new file mode 100644 index 0000000..6fb16c8 --- /dev/null +++ b/math/categories/translator-mathematical-categories-dictionary-German.dict @@ -0,0 +1,68 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This dictionary has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'mathematical-categories.pydict'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the dictionary again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX dictionary is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the dictionary sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\ProvidesDictionary{translator-mathematical-categories-dictionary}{German} + +\providetranslation{Index of categories}{Kategorienverzeichnis} +\providetranslation{Top (Category description)}{Räume und stetige Abbildungen} +\providetranslation{Set (Category description)}{Mengen und Funktionen} +\providetranslation{hTop (Category description)}{Räume und Homotopieklassen von stetigen Abbildungen} +\providetranslation{CHaus (Category description)}{Kompakte Hausdorffräume und stetige Abbildungen} +\providetranslation{Grp (Category description)}{Gruppen und Homomorphismen} +\providetranslation{Ab (Category description)}{Abelsche Gruppen und Homomoorphismen} +\providetranslation{CRing (Category description)}{Kommutative Ringe und Homomorphismen} +\providetranslation{Ring (Category description)}{Ringe und Homomorphismen} +\providetranslation{Vect (Category description)}{Vektorräume und lineare Abbildungen} +\providetranslation{Cat (Category description)}{Kleine Kategorien und Funktoren} +\providetranslation{Mod (Category description)}{$R$-Linksmodule und Homomorphismen} +\providetranslation{Alg (Category description)}{$k$-Algebren und Homomorphismen} +\providetranslation{Field (Category description)}{Körper und Körpererweiterungen} +\providetranslation{AffVar (Category description)}{Affine Varietäten über $k$} +\providetranslation{Sch (Category description)}{Schemata und Homomorphismen} +\providetranslation{GrAb (Category description)}{Graduierte Gruppen und Homomorphismen} +\providetranslation{Ordinal number category (Category description)}{Endliche Ordinalzahlen und ordnungserhaltende Abbildungen} diff --git a/math/faktor/mkessler-faktor.sty b/math/faktor/mkessler-faktor.sty new file mode 100644 index 0000000..c58b409 --- /dev/null +++ b/math/faktor/mkessler-faktor.sty @@ -0,0 +1,94 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'faktor.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-faktor}[2022/02/03 - Faktor package that also handles cofaktors] + + + +% Extension the faktor package for +% - cofaktor command that provides A \ B notation +% - scaling the / in the middle +% - fine positioning of enumerator / denominator + +% This is essentially taken from the stackexchange question found at +% https://tex.stackexchange.com/questions/27591/extending-the-faktor-package +% and answered by 'Werner' (https://tex.stackexchange.com/users/5764/werner) +% +% 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 +\RequirePackage{ifthen} % ifthenelse syntax +\RequirePackage{mathtools} + + +\DeclareDocumentCommand{\faktor}{s O{0.5} m O{-0.5} m}{% \newfaktor[*][#2]{#3}[#4]{#5} -> #3/#5 + \setbox0=\hbox{\ensuremath{#3}}% Store numerator + \setbox1=\hbox{\ensuremath{\diagup}}% Store slash / + \setbox2=\hbox{\ensuremath{#5}}% Store denominator + \raisebox{#2\ht1}{\usebox0}% Numerator + \mkern-5mu\ifthenelse{\equal{#1}{\BooleanTrue}}% Slash / + {\diagup}% regular \faktor slash + {\rotatebox{-44}{\rule[#4\ht2]{0.4pt}{-#4\ht2+#2\ht0+\ht0}}}% tilted rule as a slash + \mkern-4mu% + \raisebox{#4\ht2}{\usebox2}% Denominator +} + +\DeclareDocumentCommand{\cofaktor}{s O{-0.5} m O{0.5} m}{% \newfaktor[*][#2]{#3}[#4]{#5} -> #2\#4 + \setbox0=\hbox{\ensuremath{#3}}% Store numerator + \setbox1=\hbox{\ensuremath{\diagdown}}% Store slash / + \setbox2=\hbox{\ensuremath{#5}}% Store denominator + \raisebox{#2\ht1}{\usebox0}% Numerator + \mkern-5mu\ifthenelse{\equal{#1}{\BooleanTrue}}% Slash / + {\diagdown}% regular \faktor slash + {\rotatebox{44}{\rule[-#4\ht2]{0.4pt}{#4\ht2-#2\ht0+\ht0}}}% tilted rule as a slash + \mkern-4mu% + \raisebox{#4\ht2}{\usebox2}% Denominator +} diff --git a/math/mathalias/mkessler-mathalias.sty b/math/mathalias/mkessler-mathalias.sty new file mode 100644 index 0000000..1b5ab96 --- /dev/null +++ b/math/mathalias/mkessler-mathalias.sty @@ -0,0 +1,98 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'mathalias.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-mathalias}[2022/02/03 - Easy aliasing for math style commands] + + + +\RequirePackage{xkeyval} + +\newif\ifmkessler@mathalias@basic\mkessler@mathalias@basicfalse +\newif\ifmkessler@mathalias@extended\mkessler@mathalias@extendedfalse + +\DeclareOptionX{basic}{\mkessler@mathalias@basictrue} +\DeclareOptionX{extended}{\mkessler@mathalias@extendedtrue\mkessler@mathalias@basictrue} + +\DeclareOptionX*{\PackageWarning{mkessler-mathalias}{Unknown '\CurrentOption'}} +\ProcessOptionsX*\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. + +\NewDocumentCommand{\MakeAliasesForwith}{m m m} +{ + \def\mkessler@mathalias@makealias##1{ + \expandafter\def\csname #2##1\endcsname{\ensuremath{#1{##1}}} + } + \def\mkessler@mathalias@recurse##1{ + \ifx##1\mkessler@mathalias@dummy\else + \mkessler@mathalias@makealias{##1}\expandafter\mkessler@mathalias@recurse\fi + } + \mkessler@mathalias@recurse #3\mkessler@mathalias@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} + \expandafter\MakeAliasesForwith\expandafter\mathbb\expandafter{\expandafter b\expandafter}\expandafter{\mkessler@mathalias@all} +\fi diff --git a/math/mathfig/mkessler-mathfig.sty b/math/mathfig/mkessler-mathfig.sty new file mode 100644 index 0000000..7157e09 --- /dev/null +++ b/math/mathfig/mkessler-mathfig.sty @@ -0,0 +1,95 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'mathfig.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-mathfig}[2022/02/03 - 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 + + + +\RequirePackage{pgfplots} % Plots +\pgfplotsset{compat=1.7} + +\RequirePackage{tikz} % Plots / drawings +\usetikzlibrary{calc, intersections, through, quotes, angles, babel, positioning, snakes} + +\RequirePackage{tikz-cd} %Commutative diagrams +\RequirePackage{xparse} + + +%%for small diagrams, similar to tikz-cd +\RequirePackage[all]{xy} % for small diagrams, e.g. arrows +%%% In older versions, you found +% \RequirePackage{xy} +% \xyoption{all} +% here, but this messes with the catcode of the @ sign (which no package should do!) +% so that further parts in this package would get broken + + +\newcommand\pushoutsymbol{\tikz[baseline=0.5,scale=0.2]{ + \draw[-] (0,0) --(0,1) -- (1,1); + \draw (1,0) circle (1.5pt);} +} + +\newcommand\pullbacksymbol{\tikz[baseline=0.5,scale=0.2]{ + \draw[-] (0,0) --(1,0) -- (1,1); + \draw (0,1) circle (1.5pt);} +} + +% This is used in a tikzcd +\NewDocumentCommand\pushout{ O{dr} }{ + \arrow[phantom, pos=0.45]{#1}{\pushoutsymbol} +} + +% This is used in a tikzcd +\NewDocumentCommand\pullback{ O{dr} }{ + \arrow[phantom, pos=0.45]{#1}{\pullbacksymbol} +} diff --git a/math/mathfixes/mkessler-mathfixes.sty b/math/mathfixes/mkessler-mathfixes.sty new file mode 100644 index 0000000..8407f02 --- /dev/null +++ b/math/mathfixes/mkessler-mathfixes.sty @@ -0,0 +1,90 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'mathfixes.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-mathfixes}[2022/02/03 - 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\varphi\mkessler@mathfixes@stored@varphi + \let\uglyphi\mkessler@mathfixes@stored@phi + \let\oldphi\mkessler@mathfixes@stored@phi + \let\goldenratio\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 + \let\oldepsilon\mkessler@mathfixes@stored@epsilon +} diff --git a/math/mathfont/mkessler-mathfont.sty b/math/mathfont/mkessler-mathfont.sty new file mode 100644 index 0000000..ea93efd --- /dev/null +++ b/math/mathfont/mkessler-mathfont.sty @@ -0,0 +1,75 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'mathfont.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-mathfont}[2022/02/03 - Collects several math fonts together] + + +%%% Store away the several (partially conflicting) fonts in internal macros + +\let\mkessler@mathfont@none@mathcal\mathcal + +\RequirePackage{mathrsfs} +\let\mkessler@mathfont@mathrsfs@mathscr\mathscr + +\RequirePackage[mathscr]{eucal} +\let\mkessler@mathfont@eucal@optionmathscr@mathscr\mathscr + +\RequirePackage{amsfonts} +\let\mkessler@mathfont@amsfonts@mathfrak\mathfrak + +%%% Provide user commands to internally stored macros +\def\mkessler@mathfont@restorefonts{ + \let\mathcal\mkessler@mathfont@none@mathcal % Set \mathcal to default calligrapic + \let\mathfrak\mkessler@mathfont@amsfonts@mathfrak % Set \mathfrak to mathfrak from amsfonts + \let\mathscr\mkessler@mathfont@mathrsfs@mathscr % Set \mathscr to mathscript from mathrsfs package + \let\mathcat\mkessler@mathfont@mathrsfs@mathscr % Set \mathcat to mathscript from mathrsfs package + \let\mathcalo\mkessler@mathfont@eucal@optionmathscr@mathscr % Set \mathcalo (for old calligraphic) to \mathscr from [mathscr]{eucal} package +} + +\AtBeginDocument{\mkessler@mathfont@restorefonts} diff --git a/math/mathop/mkessler-mathop.sty b/math/mathop/mkessler-mathop.sty new file mode 100644 index 0000000..69987f5 --- /dev/null +++ b/math/mathop/mkessler-mathop.sty @@ -0,0 +1,264 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'mathop.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-mathop}[2022/02/03 - Math Operator Package] + + +%Provides some commonly used Operators used in the write-ups of my lecture notes + +\RequirePackage{xkeyval} + +\newif\ifmkessler@mathop@english\mkessler@mathop@englishtrue +\DeclareOptionX{german}{\mkessler@mathop@englishfalse} +\DeclareOptionX{ngerman}{\mkessler@mathop@englishfalse} +\DeclareOptionX{english}{\mkessler@mathop@englishtrue} + +\DeclareOptionX*{\PackageWarning{mkessler-mathop}{Unknown '\CurrentOption'}} +\ProcessOptionsX*\relax + + +%%%%%Package dependencies +\RequirePackage{amsmath} +\RequirePackage{bbm} +\RequirePackage{mathtools} + +%%%%Different types of operator wrappers: + +% For simple math operators that are just to be printed as their name +\newcommand\DeclareSimpleMathOperator[1]{ + \expandafter\providecommand\csname #1\endcsname{\operatorname{#1}} +} + +%%%For distributions +%Introduce synonym for \operatorname +\newcommand\mkessler@mathop@distribution[1]{\operatorname{#1}} +%Easily declare new distributions +\newcommand\DeclareDistribution[1]{\expandafter\def\csname #1\endcsname{\mkessler@mathop@distribution{#1}}} + +%%%%%%%%%%% Operators +%Basic commands +\DeclareSimpleMathOperator{id} +\DeclareSimpleMathOperator{im} +\DeclareSimpleMathOperator{Bild} +\DeclareSimpleMathOperator{dom} +\DeclareSimpleMathOperator{Span} +\DeclareSimpleMathOperator{Aut} +\DeclareMathOperator{\rhs}{RHS} %Right hand side of equation +\DeclareMathOperator{\lhs}{LHS} %Left hand side of equation + +%%Provide \ggT \gcd \kgV \lcm for 'greatest common denominator' and 'least common multiple' +% \ggT und \gcd, as well as \kgV and \lcm are synonyms and language-aware, so that +% e.g. when the german language option is loaded, even +% \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@mathop@ggT}{ggT} +\DeclareMathOperator{\@@mkessler@mathop@ggT}{\if@mkessler@mathop@english gcd\else ggT\fi} +\def\ggT{\@ifstar\@mkessler@mathop@ggT\@@mkessler@mathop@ggT} + +\DeclareMathOperator{\@mkessler@mathop@gcd}{gcd} +\DeclareMathOperator{\@@mkessler@mathop@gcd}{\if@mkessler@mathop@english gcd\else ggT\fi} +\def\gcd{\@ifstar\@mkessler@mathop@gcd\@@mkessler@mathop@gcd} + +\DeclareMathOperator{\@mkessler@mathop@kgV}{kgV} +\DeclareMathOperator{\@@mkessler@mathop@kgV}{\if@mkessler@mathop@english lcm\else kgV\fi} +\def\kgV{\@ifstar\@mkessler@mathop@kgV\@@mkessler@mathop@kgV} + +\DeclareMathOperator{\@mkessler@mathop@lcm}{lcm} +\DeclareMathOperator{\@@mkessler@mathop@lcm}{\if@mkessler@mathop@english lcm\else kgV\fi} +\def\lcm{\@ifstar\@mkessler@mathop@lcm\@@mkessler@mathop@lcm} + +%Complex numbers +\DeclareMathOperator{\mkessler@mathop@impart}{Im} +\renewcommand\Im\mkessler@mathop@impart +\DeclareMathOperator{\mkessler@mathop@repart}{Re} +\renewcommand\Re\mkessler@mathop@repart + +%Linear Algebra +\DeclareSimpleMathOperator{Sym} +\DeclareSimpleMathOperator{supp} +\DeclareSimpleMathOperator{sgn} +\DeclareSimpleMathOperator{coker} +\DeclareSimpleMathOperator{rank} +\DeclareSimpleMathOperator{rk} +\DeclareSimpleMathOperator{Mat} +\DeclareSimpleMathOperator{ev} +\DeclareSimpleMathOperator{tr} +\DeclareSimpleMathOperator{GL} +\DeclareSimpleMathOperator{PGL} + +%Algebra +\DeclareSimpleMathOperator{Quot} +\DeclareSimpleMathOperator{rad} +\DeclareSimpleMathOperator{Spec} +\DeclareSimpleMathOperator{Frac} +\DeclareSimpleMathOperator{Gal} +\DeclareSimpleMathOperator{Ext} +\DeclareSimpleMathOperator{Tor} +\DeclareSimpleMathOperator{MaxSpec} +\DeclareSimpleMathOperator{Sh} +\DeclareSimpleMathOperator{Proj} +\DeclareSimpleMathOperator{QCoh} +\DeclareSimpleMathOperator{Fun} +\DeclareMathOperator{\Nil}{\mathcal{N}il} +\DeclareMathOperator{\Ouv}{\mathcal{O}uv} +\DeclareMathOperator{\PreSh}{Pre-Sh} +\newcommand{\tensor}{\otimes} %Synonym for tensoring + +%Analysis +\DeclareSimpleMathOperator{dx} +\DeclareSimpleMathOperator{dy} +\DeclareSimpleMathOperator{dz} +\DeclareSimpleMathOperator{dt} + +%Sets +\DeclareSimpleMathOperator{conv} +\DeclareSimpleMathOperator{dist} +\DeclareSimpleMathOperator{diam} + +%%Stochastic (Algorithmische Mathematik II) +\DeclareDistribution{Bin} +\DeclareDistribution{Ber} +\DeclareDistribution{Geo} +\DeclareDistribution{Poi} +\DeclareDistribution{Unif} +\DeclareDistribution{Var} +\DeclareDistribution{Cov} + +%Topology +\DeclareSimpleMathOperator{pr} +\def\twedge{\vee} % Semantically correct macros for wedge product +\def\tsmash{\wedge} % Semantically correct macro for smash product +\DeclareSimpleMathOperator{sing} +\DeclareSimpleMathOperator{cell} + +%Category Theory +\DeclareSimpleMathOperator{Ob} +\DeclareSimpleMathOperator{Hom} +\DeclareSimpleMathOperator{Mor} +\DeclareSimpleMathOperator{End} +\DeclareSimpleMathOperator{colim} + +%Set theory +\DeclareSimpleMathOperator{card} +\DeclareSimpleMathOperator{Cd} +\DeclareSimpleMathOperator{Ord} +\DeclareSimpleMathOperator{otp} +\DeclareSimpleMathOperator{Card} + +%%Galoiskohomologie +\DeclareSimpleMathOperator{Br} +\DeclareSimpleMathOperator{EXT} +\DeclareSimpleMathOperator{Ind} +\DeclareSimpleMathOperator{Char} +\DeclareSimpleMathOperator{res} +\DeclareSimpleMathOperator{inf} +\DeclareSimpleMathOperator{cov} +\newcommand{\del}{\partial} % Semantically correct operator for boundary maps + +%% Algebraic geometry +\DeclareSimpleMathOperator{eq} +\DeclareSimpleMathOperator{Idem} +\DeclareSimpleMathOperator{Supp} +\DeclareSimpleMathOperator{Ann} +\DeclareSimpleMathOperator{OC} +\DeclareSimpleMathOperator{red} +\DeclareSimpleMathOperator{can} +\DeclareSimpleMathOperator{Pic} + +\newcommand\leftadjoint\vdash +\newcommand\rightadjoint\dashv + +% Characteristic function +\newcommand*{\cfun}{\ensuremath{\mathbbm{1}}} +\newcommand*{\One}{\cfun} + +%% such that in set declarations +\newcommand{\suchthat}{\;\middle|\;} + + +%Paired Delimiters +\DeclarePairedDelimiter\ceil{\lceil}{\rceil} +\DeclarePairedDelimiter\floor{\lfloor}{\rfloor} + +%Norm and absolute value +%Make them scaling by default and have \abs*{} as the non-scaling version of the command +\DeclarePairedDelimiter\abs{\lvert}{\rvert} +\let\oldabs\abs +\def\abs{\@ifstar{\oldabs}{\oldabs*}} + +\DeclarePairedDelimiter\norm{\lVert}{\rVert} +\let\oldnorm\norm +\def\norm{\@ifstar{\oldnorm}{\oldnorm*}} + +\DeclareMathOperator{\amalgprod}{\star} + + +\newcommand\op{\text{op}} +\newcommand\opposite{^{\op}} + +\newcommand\ab{\text{ab}} +\newcommand\abelianization{^{\ab}} + + +%Taken from user egreg on +% https://tex.stackexchange.com/a/22255 +\newcommand\frestriction[2]{{% we make the whole thing an ordinary symbol + \left.\kern-\nulldelimiterspace % automatically resize the bar with \right + #1 % the function + \vphantom{\big|} % pretend it's a little taller at normal size + \right|_{#2} % this is the delimiter +}} + + +\newcommand\directlimit{\varinjlim} +\newcommand\inverselimit{\varprojlim} + +\DeclareMathOperator*{\freeproduct}{\raisebox{-0.5ex}{\scalebox{2}{$\ast$}}} + diff --git a/math/mathsymb/mkessler-mathsymb.sty b/math/mathsymb/mkessler-mathsymb.sty new file mode 100644 index 0000000..69dc60c --- /dev/null +++ b/math/mathsymb/mkessler-mathsymb.sty @@ -0,0 +1,98 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'mathsymb.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-mathsymb}[2022/02/03 - 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 +% https://tex.stackexchange.com/questions/546713/spacing-in-colon (Spacing in \colon) +% Prints a mirrored \colon correctly +\RequirePackage{amsmath} +\newcommand\noloc{% + \nobreak + \mspace{6mu plus 1mu} + {:} + \nonscript\mkern-\thinmuskip + \mathpunct{} + \mspace{2mu} +} + +% \contra command from Gilles Castel, taken from +% https://github.com/gillescastel/university-setup/blob/master/preamble.tex +% (retrieved 2021-09-08) +% The preamble linked above is MIT-licensed by Gilles Castel +\RequirePackage{stmaryrd} % for \lightning +\RequirePackage{graphicx} +\newcommand\contra{\scalebox{1.5}{$\lightning$}} + +%Print a warning sign +\RequirePackage{pgf} +\newcommand\Warning{% + \makebox[1.4em][c]{% + \makebox[0pt][c]{\raisebox{.1em}{\small!}}% + \makebox[0pt][c]{\color{red}\Large$\bigtriangleup$}}}% + +%Make circled symbols +\newcommand*\circled[1]{\tikz[baseline=(char.base)]{ + \node[shape=circle,draw,inner sep=2pt] (char) {#1};} +} + +% When dealing with chain complexes, one often uses a bullet as placeholder for the index to mean the whole chain: +\newcommand\chainbullet{\bullet} + + + + diff --git a/utils/counters/mkessler-counters.sty b/utils/counters/mkessler-counters.sty new file mode 100644 index 0000000..c96f967 --- /dev/null +++ b/utils/counters/mkessler-counters.sty @@ -0,0 +1,64 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'counters.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-counters}[2022/02/03 - Write LaTeX 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/utils/findpackage/mkessler-findpackage.sty b/utils/findpackage/mkessler-findpackage.sty new file mode 100644 index 0000000..2c526c2 --- /dev/null +++ b/utils/findpackage/mkessler-findpackage.sty @@ -0,0 +1,95 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'findpackage.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-findpackage}[2022/02/03 - 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 +% https://tex.stackexchange.com/users/78783/martin-nyolt +% Note that SO answers are by default CC BY-SA 3.0 licensed, see +% https://creativecommons.org/licenses/by-sa/3.0/ + +\def\find@load#1[#2]#3[#4]{% + % load the package + \find@fileswith@pti@ns{#1}[#2]{#3}[#4]% + % check if commands exists now + \ifcsname\find@command\endcsname + \typeout{Package #3 introduces command \find@command.}% + % command has been found, revert to original version without checks + \let\@fileswith@pti@ns\find@fileswith@pti@ns + \else + % somehow, \@fileswith@pti@ns is restored after loading a package + % thus, patch it again + \let\@fileswith@pti@ns\find@load + \fi +}% + +\newcommand*{\findpackagebycommand}[1]{% + % using this multiple times - esp. when the package has not been found yet - + % will break things. Thus, check first that \find@command has never been defined before + \ifx\find@command\undefined + \def\find@command{#1}% + % first, check if this command is already defined + \ifcsname\find@command\endcsname + % in this case, just issue a warning and do nothing + \@latex@warning@no@line{Command \find@command \space is already defined}% + \else + % overwrite the internal \@fileswith@pti@ns command, which does the actual loading + % \@fileswith@pti@ns is used internally by \usepackage and \RequirePackage + \let\find@fileswith@pti@ns\@fileswith@pti@ns + \let\@fileswith@pti@ns\find@load + \fi + \else + % used multiple times - prevent and give a warning + \@latex@warning@no@line{You can use \protect\findpackagebycommand \space only once}% + \errmessage{Invalid use of command findpackagebycommand.}% + \fi +} diff --git a/utils/powerset/mkessler-powerset.sty b/utils/powerset/mkessler-powerset.sty new file mode 100644 index 0000000..6a19e8d --- /dev/null +++ b/utils/powerset/mkessler-powerset.sty @@ -0,0 +1,112 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'powerset.pysty3'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\ProvidesExplPackage{mkessler-powerset}{2022/02/03}{2.9}{Iterate over powerset of clist} + + + +\ExplSyntaxOn + +%%% Iterate over powerset of claist + +\clist_new:N \l_powerset_copied_clist +\seq_new:N \l_powerset_saved_seq + + + +\cs_generate_variant:Nn \clist_remove_all:Nn { N V } + +% Pseudocode of this macro +% remove left -> push on stack +% call recursive +% add left to 'extra' +% call recursive +% remove left from 'extra' +% add from stack to left + +\cs_new:Npn \__powerset_clist_foreach_aux:Nn #1 #2 +{ + \clist_if_empty:NTF \l_powerset_copied_clist + { + #2 + } + { + \clist_get:NN \l_powerset_copied_clist \l_tmpa_tl + \seq_push:NV \l_powerset_saved_seq \l_tmpa_tl + \clist_pop:NN \l_powerset_copied_clist { \l_tmpa_tl } + + \__powerset_clist_foreach_aux:Nn #1 {#2} + + \seq_get:NN \l_powerset_saved_seq \l_tmpa_tl + \clist_put_left:NV #1 \l_tmpa_tl + + \__powerset_clist_foreach_aux:Nn #1 {#2} + + \seq_get:NN \l_powerset_saved_seq \l_tmpa_tl + \clist_remove_all:NV #1 \l_tmpa_tl + \clist_push:NV \l_powerset_copied_clist \l_tmpa_tl + \seq_pop:NN \l_powerset_saved_seq \l_tmpa_tl + } +} + + +% Usage: +% \clist_use_powerset:Nn {clist variable name}{code for each subset} +% This will execute #2 for each subset of the listname given as #1 +% In #2, the name given as #1 can be used for the current subset +% After execution, the value of #1 is restored +\cs_new:Npn \powerset_clist_foreach:Nn #1 #2 +{ + \clist_set_eq:NN \l_powerset_copied_clist #1 + \clist_clear:N #1 + \clist_remove_duplicates:N \l_powerset_copied_clist + + \__powerset_clist_foreach_aux:Nn #1 {#2} + + \clist_set_eq:NN #1 \l_powerset_copied_clist +} diff --git a/wip/bibliography/mkessler-bibliography.sty b/wip/bibliography/mkessler-bibliography.sty new file mode 100644 index 0000000..474e52d --- /dev/null +++ b/wip/bibliography/mkessler-bibliography.sty @@ -0,0 +1,88 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'bibliography.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-bibliography}[2022/02/03 - Package to easily print bibliography and image attributions in document] + + +\RequirePackage{xkeyval} + +\newif\ifmkessler@bibliography@english\mkessler@bibliography@englishtrue +\DeclareOptionX{german}{\mkessler@bibliography@englishfalse} +\DeclareOptionX{ngerman}{\mkessler@bibliography@englishfalse} +\DeclareOptionX{english}{\mkessler@bibliography@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{\ifmkessler@bibliography@english Image attributions \else Bildquellen\fi} + \phantomsection + \addcontentsline{toc}{section}{\imageattributionstitle} + \printbibliography[title={\imageattributionstitle}, type=image] +} + +\DeclareRobustCommand*{\printliterature}{ + \def\literaturetitle{\ifmkessler@bibliography@english Literature\else Literatur\fi} + \phantomsection + \addcontentsline{toc}{section}{\literaturetitle} + \printbibliography[title={\literaturetitle}, nottype=image] + +} diff --git a/wip/cache/mkessler-cache.sty b/wip/cache/mkessler-cache.sty new file mode 100644 index 0000000..5816d7a --- /dev/null +++ b/wip/cache/mkessler-cache.sty @@ -0,0 +1,198 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'cache.pysty3'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\ProvidesExplPackage{mkessler-cache}{2022/02/03}{2.9}{Cache definitions of previous LaTeX runs to avoid computations} + + + + + +%%%% This is just a proof of concept package, +%%%% there is possibly more room for clean-up +%%%% and / or speed-up etc. + +%%% Also, the provided +%%% \DeclareCachedDocumentCommand +%%% is of course not really +%%% useful and just for demonstration +%%% purposes + +\bool_new:N \g__cache_cache_bool +\int_new:N \g__cache_cache_version_document_int +\int_new:N \g__cache_cache_version_aux_int +\int_gset:Nn \g__cache_cache_version_aux_int { -1 } + +\clist_new:N \g__cache_dump_auxfile_clist %% usual dump +\clist_new:N \g__cache_dump_cache_clist %% will be dumped such that it is restored as \g__cache_lazy_auxfile_tl on next run. +\tl_new:N \g__cache_lazy_document_tl +\tl_new:N \g__cache_lazy_auxfile_tl + +\keys_define:nn { cache } + { + cache .bool_set:N = \g__cache_cache_bool, + cache .default:n = { true }, + __cache version__ .int_set:N = \g__cache_cache_version_document_int, + cache version .meta:nn = { cache } { cache = true, __cache version__ = #1 }, + cache version .default:n = { 0 }, + } +\RequirePackage{l3keys2e} +\ProcessKeysOptions{cache} + + +% Setting up lazy execution and +% selecting of executing after reading of aux file +% if cache option has been used +\bool_if:NTF \g__cache_cache_bool + { + %% Writing things (at one go) to aux file at end of document: + \cs_new:Npn \__cache_dump_auxfile:n + { + \clist_gput_right:Nn \g__cache_dump_auxfile_clist + } + \cs_generate_variant:Nn \__cache_dump_auxfile:n { x } + + \cs_new:Npn \__cache_dump_cache:n + { + \clist_gput_right:Nn \g__cache_dump_cache_clist + } + \cs_generate_variant:Nn \__cache_dump_cache:n { V } + + + \cs_new:Npn \__cache_write_auxout:n + { + \iow_now:cn { @auxout } + } + \cs_generate_variant:Nn \__cache_write_auxout:n { x } + + %%% Handles dumping data to aux file at end of document + \hook_gput_code:nnn { enddocument } { cache } + { + \clist_map_function:NN \g__cache_dump_auxfile_clist + \__cache_write_auxout:n + + \__cache_write_auxout:n + { + \csname tl_gput_right:cn \endcsname + { + g__cache_lazy_auxfile_tl + } + } + \__cache_write_auxout:x { \str_use:N \c_left_brace_str } + + \clist_map_function:NN \g__cache_dump_cache_clist + \__cache_write_auxout:n + + \__cache_write_auxout:x { \str_use:N \c_right_brace_str } + } + + %%% Writes the current cache version into aux file + \__cache_dump_auxfile:x + { + \ExplSyntaxOn + \int_gset:Nn \exp_not:N \g__cache_cache_version_aux_int + { + \int_use:N \g__cache_cache_version_document_int + } + \ExplSyntaxOff + } + + %%% Executing something lazily at beginning of document + %%% Lazy code only gets executed if auxfile version is older than document + \cs_new:Npn \__cache_lazy:n + { + \tl_gput_right:Nn \g__cache_lazy_document_tl + } + + %%% Caching things. Handles writing and reading to aux file + %%% and makes code available in the next run of LaTeX + \cs_new:Npn \__cache_cache:n #1 + { + \tl_set:Nn \l_tmpa_tl + { + { #1 } + } + \regex_replace_all:nnN { \cP\# } { \cO\# } \l_tmpa_tl + \__cache_dump_cache:V \l_tmpa_tl + } + + %%% This handles loading either the cached definitions + %%% from last run or executing the lazy definitions from the current run + %%% after loading the aux file + \hook_gput_code:nnn { begindocument } { cache } + { + \int_compare:nNnTF + \g__cache_cache_version_aux_int < \g__cache_cache_version_document_int + { + \tl_use:N \g__cache_lazy_document_tl + } + { + \tl_use:N \g__cache_lazy_auxfile_tl + } + } + } + { + \cs_set_eq:NN \__cache_lazy:n \use:n + \cs_set_eq:NN \__cache_cache:n \use_none:n + } + +\cs_new:Npn \__cached_new_document_command:nnn #1 #2 #3 + { + \NewDocumentCommand{#1}{#2}{#3} + \__cache_cache:n + { + \csname __cached_new_document_command:nnn \endcsname { #1 } { #2 } { #3 } + } + } + +\NewDocumentCommand{\DeclareCachedDocumentCommand}{mmm} + { + \__cache_lazy:n + { + \__cached_new_document_command:nnn{#1}{#2}{#3} + } + } diff --git a/wip/exsheet/mkessler-exsheet.sty b/wip/exsheet/mkessler-exsheet.sty new file mode 100644 index 0000000..421eaa1 --- /dev/null +++ b/wip/exsheet/mkessler-exsheet.sty @@ -0,0 +1,89 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'exsheet.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-exsheet}[2022/02/03 - Include exercise sheets into lecture notes easily.] + + + +\RequirePackage{xkeyval} +\newif\ifmkessler@exsheet@english\mkessler@exsheet@englishtrue +\DeclareOptionX{german}{\mkessler@exsheet@englishfalse} +\DeclareOptionX{ngerman}{\mkessler@exsheet@englishfalse} +\DeclareOptionX{english}{\mkessler@exsheet@englishtrue} + +\DeclareOptionX*{\PackageWarning{mkessler-exsheet}{Unknown '\CurrentOption'}} +\ProcessOptionsX*\relax + + +\RequirePackage{mkessler-fancythm} + + +\def\mkessler@exsheet@sheet{ + \ifmkessler@exsheet@english Exercise Sheet\else Übungsblatt\fi +} + +\newcounter{mkessler@exsheet@sheet} + +\declaretheorem[style=thmgreenmargin, numberwithin=mkessler@exsheet@sheet, name=\ifmkessler@exsheet@english Exercise\else Aufgabe\fi]{mkessler@exsheet@sheetexercise} + +\usepackage{xkeyval} + +\NewDocumentEnvironment{sheetexercise}{O{}}{ +\begin{mkessler@exsheet@sheetexercise\expandafter}\if\relax\detokenize{#1}\relax\else[#1]\fi\label{exercise-\themkessler@exsheet@sheetexercise} +}{ + \end{mkessler@exsheet@sheetexercise\expandafter}\relax +} + +\newcommand\exercisesheet{ + \refstepcounter{mkessler@exsheet@sheet} + \subsection*{\themkessler@exsheet@sheet. \mkessler@exsheet@sheet} + \addcontentsline{toc}{subsection}{\themkessler@exsheet@sheet. \mkessler@exsheet@sheet} +} + + diff --git a/wip/figures/mkessler-figures.sty b/wip/figures/mkessler-figures.sty new file mode 100644 index 0000000..30be1b0 --- /dev/null +++ b/wip/figures/mkessler-figures.sty @@ -0,0 +1,56 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'figures.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-figures}[2022/02/03 - Packages related to inclusion of figures.] + + + +\RequirePackage{caption} +\RequirePackage{subcaption} +\RequirePackage{float} diff --git a/wip/gag/mkessler-gag.sty b/wip/gag/mkessler-gag.sty new file mode 100644 index 0000000..4e33163 --- /dev/null +++ b/wip/gag/mkessler-gag.sty @@ -0,0 +1,67 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'gag.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-gag}[2022/02/03 - 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/mkessler-lang-input.sty b/wip/lang-input/mkessler-lang-input.sty new file mode 100644 index 0000000..5d991a8 --- /dev/null +++ b/wip/lang-input/mkessler-lang-input.sty @@ -0,0 +1,73 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'lang-input.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-lang-input}[2022/02/03 - Packages related to language input. Still work in progress, not intended for use.] + + +\RequirePackage[\ifutf utf8\else utf8x\fi]{inputenc} +\RequirePackage[T1]{fontenc} + +% Font +\RequirePackage{lmodern} % Use latin modern font +\RequirePackage{anyfontsize} % Provides \fontsize{...}{...}\selectfont +\RequirePackage{soul} % Hyphenation, crossing \ldots +\RequirePackage{microtype} % Hyphenation, character protrusion, font expansion + +% Layout +\RequirePackage{parskip} % Leave blank line instead of indenting paragraphs +\RequirePackage{onehalfspacing} +\RequirePackage{changepage} % Change page layout in middle of document + +\RequirePackage{tabto} % Tabulators + +% Language support +\RequirePackage[\ifenglish english \else ngerman\fi]{babel} + +%Referencation +\RequirePackage{lastpage} %\pageref{LastPage} for reference on the last page diff --git a/wip/removed/mkessler-removed.sty b/wip/removed/mkessler-removed.sty new file mode 100644 index 0000000..f130916 --- /dev/null +++ b/wip/removed/mkessler-removed.sty @@ -0,0 +1,69 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'removed.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-removed}[2022/02/03 - (For now) removed parts of other packages. Not intended for use right now.] + +% Quotations +\RequirePackage{csquotes} % quotations + +%%%% Utilities +\RequirePackage{commnt} %comments +\RequirePackage{todonotes} % todo notes +\RequirePackage{blindtext} % \blindtext filling + +\RequirePackage[export]{adjustbox} % +\RequirePackage{pdfpages} % Include external PDF files easily + +\newcommand{\emphasize}[1]{{\color{red} #1}} + +\RequirePackage{wrapfig} % Wrap text around figures + + +% Math-related +\RequirePackage[export]{adjustbox} diff --git a/wip/restate/mkessler-restate.sty b/wip/restate/mkessler-restate.sty new file mode 100644 index 0000000..e760595 --- /dev/null +++ b/wip/restate/mkessler-restate.sty @@ -0,0 +1,90 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'restate.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-restate}[2022/02/03 - Replacement package] + + +\RequirePackage{xkeyval} +\RequirePackage{todonotes} +\RequirePackage{xparse} +\RequirePackage{etoolbox} + +\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.} +} + +\DeclareOptionX*{\PackageWarning{mkessler-restate}{Unknown '\CurrentOption'}} +\ProcessOptionsX*\relax + + +\newcommand\restatesetup[1]{\setkeys{mkessler-restate.sty}{#1}} + + +\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 \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/wip/subproof/mkessler-subproof.sty b/wip/subproof/mkessler-subproof.sty new file mode 100644 index 0000000..adea7f4 --- /dev/null +++ b/wip/subproof/mkessler-subproof.sty @@ -0,0 +1,102 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'subproof.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-subproof}[2022/02/03 - Subproof environment with black square at end of proof.] + + + +\RequirePackage{amssymb} +\RequirePackage{amsthm} +\RequirePackage{xparse} +\RequirePackage{refcount} +\RequirePackage{translator} + +\usedictionary{translator-proof-dictionary} + +\DeclareRobustCommand{\blackqed}{% + \ifmmode \mathqed + \else + \leavevmode\unskip\penalty9999 \hbox{}\nobreak\hfill + \quad\hbox{$\blacksquare$}% + \fi +} + +\newcommand\rawsubproof[1] +{ + \pushQED + { + \blackqed + }% + \normalfont \topsep6\p@\@plus6\p@\relax + \trivlist + \item[\hskip\labelsep + \itshape + #1\@addpunct{.}]\ignorespaces +} + +\newcommand\rawendsubproof +{ + \popQED\endtrivlist\@endpefalse +} + + +%%subproof environment - essentially copied proof environment from amsthm and modified its name + symbol +\DeclareDocumentEnvironment{subproof}{ o } +{ + \IfValueTF{#1} + { + \rawsubproof{#1} + } + { + \rawsubproof{\translate{Subproof}} + } +} +{ + \rawendsubproof +} diff --git a/wrappers/enumerate/mkessler-enumerate.sty b/wrappers/enumerate/mkessler-enumerate.sty new file mode 100644 index 0000000..0dcbbee --- /dev/null +++ b/wrappers/enumerate/mkessler-enumerate.sty @@ -0,0 +1,96 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'enumerate.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-enumerate}[2022/02/03 - Simple enumeration package wrapper. Handles custom number setting and beamer class.] + + + +\@ifclassloaded{beamer}{}{ + \RequirePackage[shortlabels]{enumitem} + \RequirePackage{tikz} + \newcommand\setItemnumber[1]{\setcounter{enum\romannumeral\@enumdepth}{\numexpr#1-1\relax}} + \NewDocumentCommand{\SetItemNumber}{m} + { + \setcounter{enum\romannumeral\@enumdepth}{\numexpr#1-1\relax} + } + + \def\mkessler@enumerate@drawcircle#1{ + \tikz[baseline=(char.base)]{ + \node[shape=circle,draw,inner sep=2pt] (char) {#1}; + } + } + + \def\mkessler@enumerate@circled{ + \protect\mkessler@enumerate@drawcircle{\arabic*} + } + \def\mkessler@enumerate@property{ + (\roman*) + } + \def\mkessler@enumerate@equivalent{ + (\arabic*) + } + \def\mkessler@enumerate@holds{ + \arabic*) + } + + \SetEnumerateShortLabel{c}{\mkessler@enumerate@circled} + \SetEnumerateShortLabel{p}{\mkessler@enumerate@property} + \SetEnumerateShortLabel{e}{\mkessler@enumerate@equivalent} + \SetEnumerateShortLabel{h}{\mkessler@enumerate@holds} + + \SetEnumitemValue{label}{circled}{\mkessler@enumerate@circled} + \SetEnumitemValue{label}{property}{\mkessler@enumerate@property} + \SetEnumitemValue{label}{equivalent}{\mkessler@enumerate@equivalent} + \SetEnumitemValue{label}{holds}{\mkessler@enumerate@holds} + + \SetEnumitemKey{property}{label=property} + \SetEnumitemKey{equivalent}{label=equivalent} + \SetEnumitemKey{holds}{label=holds} + \SetEnumitemKey{circled}{label=circled} +} diff --git a/wrappers/hypersetup/mkessler-hypersetup.sty b/wrappers/hypersetup/mkessler-hypersetup.sty new file mode 100644 index 0000000..a044b3d --- /dev/null +++ b/wrappers/hypersetup/mkessler-hypersetup.sty @@ -0,0 +1,77 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'hypersetup.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-hypersetup}[2022/02/03 - Package for setting up hyperref, cleveref and some default hyperref colors] + + + +\RequirePackage{xkeyval} + +\newif\ifmkessler@hypersetup@cleveref\mkessler@hypersetup@clevereffalse +\DeclareOptionX{cleveref}{\mkessler@hypersetup@clevereftrue} + +\DeclareOptionX*{\PackageWarning{mkessler-hypersetup}{Unknown '\CurrentOption'}} +\ProcessOptionsX*\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/wrappers/incfig/mkessler-incfig.sty b/wrappers/incfig/mkessler-incfig.sty new file mode 100644 index 0000000..28a663e --- /dev/null +++ b/wrappers/incfig/mkessler-incfig.sty @@ -0,0 +1,97 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'incfig.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-incfig}[2022/02/03 - 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 +% https://github.com/gillescastel/university-setup +% and is specifically designed to work with the inkscape figures explained at +% https://castel.dev/post/lecture-notes-2/ + +% These are licensed under + +%MIT License + +%Copyright (c) 2019 Gilles Castel + +%Permission is hereby granted, free of charge, to any person obtaining a copy +%of this software and associated documentation files (the "Software"), to deal +%in the Software without restriction, including without limitation the rights +%to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +%copies of the Software, and to permit persons to whom the Software is +%furnished to do so, subject to the following conditions: +% +%The above copyright notice and this permission notice shall be included in all +%copies or substantial portions of the Software. +% +%THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +%IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +%FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +%AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +%LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +%OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +%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. + + +% Note that this package is NOT associated to Gilles Castel in any official way + + +% Figure support as explained in my blog post. +\RequirePackage{import} +\RequirePackage{xifthen} +\RequirePackage{pdfpages} +\RequirePackage{transparent} +\newcommand{\incfig}[1]{% + \def\svgwidth{\columnwidth} + \import{figures/}{#1.pdf_tex} +} diff --git a/wrappers/math/mkessler-math.sty b/wrappers/math/mkessler-math.sty new file mode 100644 index 0000000..9e6039c --- /dev/null +++ b/wrappers/math/mkessler-math.sty @@ -0,0 +1,96 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'math.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-math}[2022/02/03 - 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 + +\RequirePackage{xkeyval} + +\newif\ifmkessler@math@english\mkessler@math@englishtrue +\DeclareOptionX{german}{\mkessler@math@englishfalse} +\DeclareOptionX{ngerman}{\mkessler@math@englishfalse} +\DeclareOptionX{english}{\mkessler@math@englishtrue} + +\DeclareOptionX*{\PackageWarning{mkessler-math}{Unknown '\CurrentOption'}} +\ProcessOptionsX*\relax + + +%%%% Import the other custom math packages +\RequirePackage{mkessler-mathfont} % Load this first to ensure untouched fonts + +\RequirePackage{amsmath} +\RequirePackage{mathtools} +\RequirePackage{amsthm} +\RequirePackage{amssymb} + +\RequirePackage{latexsym} + +% Für Formeln +\RequirePackage{mathabx} +\RequirePackage{esint} + +\RequirePackage{IEEEtrantools} +\RequirePackage[ngerman,ruled,vlined]{algorithm2e} + + +%%% Importing other custom packages +\RequirePackage{mkessler-faktor} +\RequirePackage{mkessler-mathsymb} +\RequirePackage[basic]{mkessler-mathalias} +% mkessler-mathfont has already been imported +\RequirePackage[\ifmkessler@math@english english\else german\fi]{mkessler-mathop} +\RequirePackage{mkessler-categories} +\RequirePackage{mkessler-mathfig} +\RequirePackage{mkessler-unicodechar} +\RequirePackage{mkessler-mathfixes} % Load this last since it renews behaviour diff --git a/wrappers/todo/mkessler-todo.sty b/wrappers/todo/mkessler-todo.sty new file mode 100644 index 0000000..9047be7 --- /dev/null +++ b/wrappers/todo/mkessler-todo.sty @@ -0,0 +1,77 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'todo.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-todo}[2022/02/03 - Easy standards for the todonotes package] + + + +\RequirePackage[colorinlistoftodos]{todonotes} +\RequirePackage{xparse} + +% Make \todo{} available inside minipages +\usepackage{marginnote} +\let\marginpar\marginnote + +\setuptodonotes{tickmarkheight=0.1cm, size=\small} + +\newcommand\todoref{ + \todo[color=red!40]{Add reference.} +} + +\newcommand\todoquestion{ + \todo[color=black!10, size=\tiny] +} + +\newcommand\todotex{ + \todo[color=green!75!black] +} + +\newcommand\todotypo{ + \todo[color=blue!40, size=\tiny]{Typo corrected, double check this.} +} diff --git a/wrappers/unicodechar/mkessler-unicodechar.sty b/wrappers/unicodechar/mkessler-unicodechar.sty new file mode 100644 index 0000000..50baabf --- /dev/null +++ b/wrappers/unicodechar/mkessler-unicodechar.sty @@ -0,0 +1,81 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright © 2022 Maximilian Keßler +% +% This work may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU General Public License +% +% Distribution under conditions of the LaTeX Project Public License, +% requires either version 1.3 of this license or (at your option) +% any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status \`maintained'. +% +% The Current Maintainer of this work is Maximilian Keßler. +% +% +% Distribution under the GNU General Public License requires either +% version 3 or (at your opinion) any later version. +% +% This package has been generated by PyTeX, available at +% https://github.com/kesslermaximilian/PyTeX +% and built from source file 'unicodechar.pysty'. +% It is STRONGLY DISCOURAGED to edit this source file directly, since local +% changes will not be versioned by Git and overwritten by the next build. Always +% edit the source file and build the package again. +% +% Build details: +% PyTeX version: v1.2.0-31-gc9bb0e8 (commit c9bb0e8) +% Source code version: v2.9 (commit 02c2acd) +% +% This LaTeX package is free software and is dual-licensed +% under the LPPLv1.3c and the GPLv3 licenses. +% You may use it freely for your purposes. +% The latest version of the package sources can be obtained +% via GitLab under +% https://gitlab.com/latexci/packages/LatexPackages +% The latest version of the built packages can be obtained via GitLab under +% https://gitlab.com/latexci/packages/LatexPackagesBuild +% For further information see the urls above. +% Reportings of bugs, suggestions and improvements are welcome, see the README +% at the Git repository for further information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mkessler-unicodechar}[2022/02/03 - 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} + +\newunicodechar{α}{\ensuremath\alpha} +\newunicodechar{β}{\ensuremath\beta} +\newunicodechar{γ}{\ensuremath\gamma} +\newunicodechar{δ}{\ensuremath\delta} +\newunicodechar{ε}{\ensuremath\epsilon} +\newunicodechar{ζ}{\ensuremath\zeta} +\newunicodechar{η}{\ensuremath\eta} +\newunicodechar{θ}{\ensuremath\theta} +\newunicodechar{ι}{\ensuremath\iota} +\newunicodechar{κ}{\ensuremath\kappa} +\newunicodechar{λ}{\ensuremath\lambda} +\newunicodechar{μ}{\ensuremath\mu} +\newunicodechar{ν}{\ensuremath\nu} +\newunicodechar{ξ}{\ensuremath\xi} +\newcommand\omicron{o}\newunicodechar{ο}{\ensuremath\omicron} % For semantical use +\newunicodechar{π}{\ensuremath\pi} +\newunicodechar{ρ}{\ensuremath\rho} +\newunicodechar{σ}{\ensuremath\sigma} +\newunicodechar{τ}{\ensuremath\tau} +\newunicodechar{υ}{\ensuremath\upsilon} +\newunicodechar{φ}{\ensuremath\phi} +\newunicodechar{χ}{\ensuremath\chi} +\newunicodechar{ψ}{\ensuremath\psi} +\newunicodechar{ω}{\ensuremath\omega} +