Compare commits

..

2 Commits

Author SHA1 Message Date
31a9aae848 fix more if bugs 2022-03-13 13:13:43 +01:00
3f2257072d fix if bug 2022-03-13 13:13:26 +01:00
111 changed files with 572 additions and 7488 deletions

12
.ci/ci_build.sh Executable file
View File

@ -0,0 +1,12 @@
cd .ci
export COMMIT_MSG=$(python3 print_deploy_message.py)
cd ..
make ci-build
cd build
zip -r LatexPackages.zip LatexPackagesBuild/ -x '*.git*'
tree -H '.' -I "index.html" -D --charset utf-8 -T "LatexPackages" > index.html
cd LatexPackagesBuild
git add .
git commit -m "${COMMIT_MSG}" || echo "Nothing new to commit"
git push --set-upstream origin ${CI_COMMIT_REF_NAME}-build

View File

@ -1,17 +1,11 @@
set -e
eval $(ssh-agent -s)
echo "$GITLAB_DEPLOY_KEY" | base64 -d | tr -d '\r' | ssh-add - > /dev/null
# Set up ssh private key
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "$DEPLOY_SSH_KEY" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
# Set up remote host key fingerprint
echo "git.abstractnonsen.se ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAufJTq206GOv0D8gHs2o3eDusLNWaB0U7JRhUYnux9B" >> ~/.ssh/known_hosts
ssh-keyscan gitlab.com >> ~/.ssh/known_hosts
chmod 644 ~/.ssh/known_hosts
git config --global user.email "git@maximilian-kessler.de"
git config --global user.name "Maximilian Keßler (via gitlab runner)"
echo "Successfully added ssh deploy keys"

View File

@ -14,6 +14,6 @@ def get_deploy_message(repo):
"\n" \
"Build branch {branch} ({hexsha}) from {repo_name}" \
.format(old_msg=old_msg,
branch=os.environ['REF_NAME'],
branch=os.environ['CI_COMMIT_REF_NAME'],
hexsha=get_latest_commit(repo).hexsha[0:7],
repo_name='latex/latex-packages')
repo_name='kesslermaximilian/LatexPackages')

View File

@ -1,14 +0,0 @@
set -e
# set up deploy message
cd .ci
export COMMIT_MSG=$(python3 print_deploy_message.py)
cd ..
# push pages to build repository
cd build/packages
git add .
git commit -m "${COMMIT_MSG}" || echo "Nothing new to commit"
git remote set-url origin --push git@git.abstractnonsen.se:latex/latex-packages-build
git push --set-upstream origin ${REF_NAME}-build
cd ../..

View File

@ -1,13 +1,12 @@
# ! /bin/sh
set -e
cd build/packages
REMOTE_BRANCH=$(git branch -a | sed -n '/remotes\/origin\/.*-build/p' | sed 's/remotes\/origin\///g' | sed 's/-build//g' | sed 's/[[:space:]]//g' | sed -n "/^${REF_NAME}$/p")
ssh git@gitlab.com
git clone git@gitlab.com:latexci/packages/LatexPackagesBuild.git build/LatexPackagesBuild
cd build/LatexPackagesBuild
REMOTE_BRANCH=$(git branch -a | sed -n '/remotes\/origin\/.*-build/p' | sed 's/remotes\/origin\///g' | sed 's/-build//g' | sed 's/[[:space:]]//g' | sed -n "/^${CI_COMMIT_REF_NAME}$/p")
echo ${REMOTE_BRANCH}
if [ "$REMOTE_BRANCH" = "" ]; then
if [ "$REMOTE_BRANCH" = "" ];then
echo "This is the first build on this branch, creating new branch in build repository to push to"
git checkout --orphan ${CI_COMMIT_REF_NAME}-build
ls -ra | sed '/^\.git$/d' | sed '/^\.\.$/d' | sed '/^\.$/d' | xargs -r git rm --cached

View File

@ -1,81 +0,0 @@
name: Build LaTeX packages
on: [push]
jobs:
build:
runs-on: latex-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0 # We need all history to correctly parse tag names
fetch-tags: true
- name: Setup git credentials and committer
run: .ci/configure_git.sh
env:
DEPLOY_SSH_KEY: ${{ secrets.deploy_ssh_key }}
- name: Clone build repository
uses: actions/checkout@v4
with:
repository: latex/latex-packages-build
path: build/packages
ref: master
- name: Checkout correct branch in build repository
run: |
.ci/setup_build_repo_branch.sh
env:
REF_NAME: ${{ github.ref_name }}
- name: Build packages incrementally
run: make
- name: Push packages to build repo
run: |
.ci/deploy_to_build_repo.sh
env:
REF_NAME: ${{ github.ref_name }}
- name: Clean up git files from build repo
if: github.ref == 'refs/heads/master'
run: rm -rf build/packages/.git
- name: Save built packages to cache
if: github.ref == 'refs/heads/master'
uses: actions/cache/save@v3
with:
path: build/packages/
key: ${{ github.ref }}-packages
pages:
runs-on: latex-latest
needs: build
if: github.ref == 'refs/heads/master'
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Load package cache
uses: actions/cache/restore@v3
with:
path: build/packages/
key: ${{ github.ref }}-packages
- name: Load compilation cache
uses: actions/cache/restore@v3
with:
path: .compile
key: ${{ github.ref }}-doc
- name: Compile documentation
run: make doc
env:
TEXINPUTS: '${{ github.workspace }}/build/packages//:'
- name: Prepage pages
run: |
cd build
rm -rf packages/.git # Don't deploy the git files
zip -r latex-packages.zip packages/ -x '*.git*'
zip -r latex-packages-doc.zip doc/
- name: Deploy to pages
uses: actions/pages@v1
with:
directory: build/
- name: Upload compilation cache
uses: actions/cache/save@v3
with:
path: .compile
key: ${{ github.ref }}-doc

15
.gitignore vendored
View File

@ -5,18 +5,3 @@ build/*
.idea/
*.synctex.gz
__pycache__
*.aux
*.fdb_latexmk
*.fls
*.log
*.pdf
wip/proof/.skip
*.out
*.idx
*.ilg
*.ind
*.cnt
*.glo
*.hd
*.toc
*.sty

44
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,44 @@
stages:
- get
- build
- pages
get-build-repo:
stage: get
before_script:
- source .ci/configure_git.sh
script:
- echo "Getting old Build repo..."
- .ci/get_build_repo_from_origin.sh
artifacts:
paths:
- build/
tags:
- latex
build-packages:
stage: build
before_script:
- source .ci/configure_git.sh
script:
- echo "Building packages incrementally..."
- sh .ci/ci_build.sh
variables:
GIT_SUBMODULE_STRATEGY: recursive
artifacts:
paths:
- build/
tags:
- latex
pages:
stage: pages
artifacts:
paths:
- public/
script:
- mv build/ public/
tags:
- latex
only:
- master

View File

@ -1,30 +1,13 @@
# Makefile for latex-packages
BUILD_DIR=build
DOC_SUBDIR=doc
PACKAGES_SUBDIR=packages
COMPILE_SUBDIR=.compile
.PHONY: build
BUILD_FLAGS=--recursive --git-version --pytex-version --license --author "Maximilian Keßler" --pytex-info-text --extra-header ".build/header_info.txt" --name "prepend-author" --clean-old-files
BUILD_DIRS= --source-dir src --build-dir build
ROOT=$(shell pwd)
BUILD_ROOT=${ROOT}/${BUILD_DIR}
# Build packages
build: .initsubmodulelock
python3 build.py --source-dir src --build-dir ${BUILD_ROOT}/${PACKAGES_SUBDIR} ${BUILD_FLAGS}
@python3 build.py ${BUILD_DIRS} ${BUILD_FLAGS}
# Build packages and allow repo to be dirty (use with caution and only when developing)
dirty: .initsubmodulelock
python3 build.py --source-dir src --build-dir ${BUILD_ROOT}/${PACKAGES_SUBDIR} ${BUILD_FLAGS} --allow-dirty
@python3 build.py ${BUILD_DIRS} ${BUILD_FLAGS} --allow-dirty
# generate documentation files from /doc
doc:
@scripts/compile_doc.sh
@mkdir -p ${BUILD_ROOT}/${DOC_SUBDIR}
@cp .compile/*.pdf ${BUILD_ROOT}/${DOC_SUBDIR}
@echo Documentation files written to ${BUILD_ROOT}/${DOC_SUBDIR}
init: .initsubmodulelock .gitconfiglock
config: .gitconfiglock
@ -45,9 +28,6 @@ all: clean build
clean:
@-rm -r build/
@-rm -r .compile/
.PHONY: build doc
#!/bin/bash
# Compiles all correspondence letters in repository
ci-build:
@python3 build.py --source-dir src --build-dir build/LatexPackagesBuild ${BUILD_FLAGS}

2
PyTeX

@ -1 +1 @@
Subproject commit c9bb0e87c91beae3e17a829603e4459cf804ec51
Subproject commit 6277050e22b395eef5f554f3106aacd76562b3d2

View File

@ -1,5 +1,7 @@
# Latex Packages
#### Rework in progress
This is a collection of some packages I regularly use. Feel free to use them as well, if you want to.
However, some of them (especially `mkessler-math`) might be heavily customized for myself and do not form a real package in the Unix philosophy sense and are more of my preamble, that everyone gets to copy around that I bundled up in a central place. Some others (especially `mkessler-fancythm`) follow (or at least try to) this philosophy, so they should be designed to work with your documents and online provide specific functionality.
@ -10,13 +12,6 @@ Mostly, they are available as a repository so that
- I like sharing things that could help others, as I profit from others way too often
- This motivates me to keep things organized
## Usage
If you want to use these, just clone [latex-packages-build][lp-build] into your `~/texmf/tex/latex` directory, and you are ready to go.
The builds are also available as single files or as zip at the [pages][pages].
## Documentation
See the `documentation` folder (or zip file) at [pages][pages] for documentation to most of the packages.
## Bugs
As already mentioned, not all of these are intended for generic use. If you however feel like this should be the case, feel free to point out bugs or troubles when using these here at GitHub or to me directly.
@ -27,9 +22,3 @@ Feel free to send pull requests if you have suggestions for improvements.
This is free software.
Prior to version 2.6 this has been MIT-licensed. Starting with version 1.6 this is licensed under the LPPL and/or the GPLv3.
See `LICENSE.md` for further details.
The `quiver.sty` package here is taken from [varkor/quiver][quiver] and licensed under the MIT License. It is redistributed unchanged for dependency reasons of my projects.
[pages]: https://latex.users.abstractnonsen.se/latex-packages
[lp-build]: https://git.abstractnonsen.se/latex/latex-packages-build
[quiver]: https://github.com/varkor/quiver

View File

@ -1,14 +0,0 @@
# This is the .latexmkrc file that needs to be used for compiling the documentation
# Note that the makeindex command is non-standard and follows the LaTeX3 architecture
# Without this, generating the indexes properly will not work and leads to compiling
# errors.
# When adding new packages, this should be symlinked to in each new directory,
# so that a call to latexmk will automatically use these options
$makeindex = 'makeindex -s gind.ist %O -o %D %S';
$clean_ext .= ' glo';
$clean_ext .= ' hd';
$clean_ext .= ' ins';
$pdf_mode = 1;
$print='pdf';
$pdflatex = 'pdflatex --shell-escape %O %S';

View File

@ -1 +0,0 @@
../../LATEXMKRC

View File

@ -1,5 +0,0 @@
\documentclass[full]{l3doc}
\usepackage{mkessler-todo}
\begin{document}
\DocInput{../../../src/environments/fancythm/fancythm.dtx}
\end{document}

View File

@ -1 +0,0 @@
../../LATEXMKRC

View File

@ -1,5 +0,0 @@
\documentclass[full]{l3doc}
\usepackage{mkessler-todo}
\begin{document}
\DocInput{../../../src/environments/groupthm/groupthm.dtx}
\end{document}

View File

@ -1 +0,0 @@
../../LATEXMKRC

View File

@ -1,165 +0,0 @@
\documentclass[full]{l3doc}
\title{The \pkg{refproof} package}
\author{Maximilian Keßler}
\begin{document}
\maketitle
\begin{abstract}
This package aims to at consistently numbering claims within proofs.
For this purpose, take a valid \meta{label} when starting a proof,
associating it with a theorem/lemma etc.~and enabling us to subnumber
claims within this proof.
We also provide some customizations for proofs.
\end{abstract}
\tableofcontents
\begin{documentation}
\section{Proofs}
\subsection{Old proofs}
\begin{environment}{oldproof}
Behaves like \env{proof} from \pkg{amsmath}.
\end{environment}
\begin{environment}{oldsubproof}
Behaves like \env{subproof} from \pkg{mkessler-subproof}.
That is, behaves like the \pkg{amsmath} proof environment except that
the shown keyword is \enquote{subproof} and we end the proof
with a black instead of a white square.
\end{environment}
It is not recommended to use \env{oldproof} or \env{oldsubproof},
since these have no support for the \texttt{claim} management this
package provides.
They only exist for legacy reasons.
\subsection{Basic proofs}
Both of these have \texttt{claim} support,
which is explained later in \autoref{sec:claim-support}.
\begin{environment}{proof}
\begin{syntax}
\cs{begin}\{proof\}*\oarg{description}
\end{syntax}
The old \env{proof} environment has been modified slightly.
We still accept a \meta{description}, but this will be given
in parantheses after the usual \enquote{proof} keyword.
Additionally, we accept an optional \enquote{star}, that will be visually
displayed behind the \enquote{proof} keyword.
When nested, that is, when inside a \env{proof} or \env{subproof} environment,
the name will automatically change to \enquote{subproof}.
Nesting works to an arbitrary depth.
\end{environment}
\begin{environment}{subproof}
\begin{syntax}
\cs{begin}\{subproof\}*\oarg{description}
\end{syntax}
Works like the \env{proof} environment, but will always be named
\enquote{subproof} and finish with a black square.
You will probably rarely need this.
\end{environment}
\subsection{Refproofs}
\begin{environment}{refproof}
\begin{syntax}
\cs{begin}\{refproof\}*\marg{label}\oarg{description}
\end{syntax}
For the optional \enquote{*} or the \meta{description}
see the \env{proof} environment.
The \meta{label} has to be a valid \LaTeX-known label that \cs{ref} would
accept.
This \env{refproof} is then associated with the corresponding
theorem that \meta{label} refers to.
It will state \enquote{Proof of \meta{reference}} at the beginning of
the environment to indicate that this proof is associated with some
specific environment.
When the \pkg{hyperref} package is loaded, this is automatically
detected and an \cs{autoref} command is used to also indicate
the environment name in the reference.
When \env{refproof} has been called with the same label before,
the name will be adjusted to
\enquote{Continuation of proof of \meta{reference}}
automatically.
Claim support is explained in \autoref{sec:claim-support}.
\end{environment}
\section{Claim support}
\label{sec:claim-support}
\begin{environment}{claim}
\begin{environment}{claim*}
\begin{syntax}
\cs{begin}\{claim*\}
\end{syntax}
The star in the environment name makes the claim not to be numbered.
\end{environment}
\end{environment}
The \env{proof}, \env{subproof} and \env{refproof} environment alter the
behavior of the claim numbering as follows:
\begin{itemize}
\item The \env{proof} and \env{subproof} environment will reset the
\texttt{claim} counter at their beginning.
Claims will appear as \enquote{Claim 1}, \enquote{Claim 2},\ldots
At the end of the environment, the previous counter is restored.
\item The \env{refproof} environment will number claims within the
proof and \emph{all of its continuations}.
Additionally, claims will be numbered as
\enquote{\meta{reference}.C1}, \enquote{\meta{reference}.C2}
where \meta{reference} is the numbering style of the \meta{label}
that this proof is associated to.
At the end of the environment, the previous counter is restored.
\end{itemize}
\section{Language support}
This package makes use of the \pkg{translator} package to provide
\pkg{babel}-sensitive translations dynamically throughout the document.
You need the
\texttt{%
translator\allowbreak-proof\allowbreak-dictionary%
\allowbreak-\meta{language}.dict
}
dictionary somewhere where \LaTeX can find it.
It should have shipped with this documentation and the package source.
Currently, only German and English are supported.
\end{documentation}
\section{\pkg{groupthm} integration}
This has not been implemented yet, but future features include:
\begin{itemize}
\item Integrate the claim environment into the \texttt{star} and \texttt{starred}
groups of \pkg{groupthm}.
\item Integrate the optional stars of the \env{proof} etc into \pkg{groupthm},
i.e.~let them behave like \texttt{star} environments to toggle
these in a unified way.
\end{itemize}
\PrintIndex
\end{document}

View File

@ -1 +0,0 @@
../../LATEXMKRC

View File

@ -1,5 +0,0 @@
\documentclass[full]{l3doc}
\usepackage{mkessler-todo}
\begin{document}
\DocInput{../../../src/environments/thmstyle/thmstyle.dtx}
\end{document}

View File

@ -1 +0,0 @@
../../LATEXMKRC

View File

@ -1,105 +0,0 @@
\documentclass[full]{l3doc}
\title{The \pkg{mkessler-symbindex} package}
\author{Maximilian Keßler}
\usepackage{mkessler-symbindex}
\begin{document}
\maketitle
\begin{abstract}
This package aims at indexing mathematical symbols properly.
It provides a key-value interface for declaring such symbols
and indexes them automatically when used.
\end{abstract}
\begin{documentation}
We base our index on the \pkg{imakeidx} package.
We will also only index each symbol only for its first appearance in the
document, not congesting the index unnecessarily.
\begin{function}{\DeclareSymbol}
\begin{syntax}
\cs{DeclareSymbol}\oarg{key=value list}\marg{symbol name}
\end{syntax}
This declares the command \cs{\meta{symbol name}}.
The behavior is controlled by the key-value list,
which accepts the following keys:
\begin{description}
\item[group = \meta{index name}]
Declares that this symbol will appear
in the \meta{index name} given.
If not present, the default index of the document will be used.
The index is assumed to exist.
\item[formula = \meta{formula}]
Controls to what formula the control sequence expands in the document
when called.
This can be any valid macro that is callable in math mode.
It is allowed that this macro captures additional arguments following
the command invocation, this will not interfere with indexing.
When not given, the \meta{formula} will just be the \meta{symbol name}
itself.
\item[ordered = \meta{word}]
Denotes that the symbol will be ordered alphabetically like \meta{word}
in the index.
When not given, the \meta{symbol name} will be used.
\item[description = \meta{text}]
Sets the description that appears in the index behind the symbol.
If not given, no description is present.
\item[operator = \meta{function}]
When \cs{\meta{symbol name}} is called,
this expands to the control sequence
\enquote{\meta{function}\{\meta{formula}\}}
so that the \meta{function} receives the \meta{formula}
as its first argument.
This can e.g.~be set to \cs{operatorname}, \cs{textbf}
or similar, adjusting the spacing or layouting of
the formula, while not influencing the ordering in the index.
When \meta{ordered = } is given yet, this is equivalent to
not using the \meta{operator = } and just putting this in the
\meta{formula = } key together.
When no \meta{operator} is given, \cs{use:n} is inserted,
which strips the braces around \meta{formula} and just
leaves formula in the input stream,
resulting in no effect.
\item[defaultargs = \meta{token list}]
This sets a list of tokens that will be inserted directly
after the invocation of \cs{\meta{symbol name}} when listing
the symbol in the index.
This makes it possible e.g.~to define \cs{Mod} as a formula
that stands for \enquote{$R$-modules} and is used as
\enquote{\texttt{\cs{Mod}\_R}} in the document
(or any other symbol that \texttt{R}, of course)
and list it as $\text{Mod}_R$ in the index,
by setting \enquote{defaultargs = \_R}.
\end{description}
\end{function}
\end{documentation}
\PrintIndex
\end{document}

View File

@ -1 +0,0 @@
../../LATEXMKRC

View File

@ -1,55 +0,0 @@
\documentclass[full]{l3doc}
\title{The \pkg{mkessler-vocab} package}
\author{Maximilian Keßler}
\usepackage{mkessler-vocab}
\begin{document}
\maketitle
\begin{abstract}
When defining lots of new notions in a document,
it is useful to index these at the point of their definition,
to let users easily look up the spots where notions are
introduced in a document.
Also, one often wants to highlight these when defining a new notion.
We combined both approaches.
\end{abstract}
\begin{documentation}
\section{Macros}
\begin{function}{\vocab}
\begin{syntax}
\cs{vocab}\oarg{index entry}\marg{vocab}
\end{syntax}
Highlights \meta{vocab} in the text (bold blue).
Also indexes this under \oarg{index entry}.
If \oarg{index entry} is empty, \meta{vocab} itself will appear in the index.
\end{function}
\begin{function}{\printvocabindex, \PrintVocabIndex}
Prints the index of vocabs.
The \cs{printvocabindex} is deprecated,
use the better named \cs{PrintVocabIndex}.
\end{function}
\section{Package options}
You can specify the two options \texttt{index} and \texttt{noindex}.
The default is \texttt{noindex}.
Index entries are only generated if \texttt{index} has been specified.
Of course, \cs{PrintVocabIndex} results in an error if the package
has been loaded with \texttt{noindex}.
\end{documentation}
\end{document}

View File

@ -1 +0,0 @@
../../LATEXMKRC

View File

@ -1,119 +0,0 @@
\documentclass[full]{l3doc}
\title{The \pkg{mkessler-categories} package}
\author{Maximilian Ke\ss ler}
\usepackage{mkessler-categories}
\NewDocumentCommand{\ShowCategory}{m}
{
\cs{#1} & $\csname #1\endcsname$ \\
}
\begin{document}
\maketitle
\begin{abstract}
This is a ready-to-use package providing symbols of mathematical
categories with automatic indexing.
It is certainly plausible that you prefer to name your categories slightly
differently that the author.
\end{abstract}
\begin{documentation}
\section{General notice}
This package is based on the \pkg{mkessler-symbindex} package.
We thus use \pkg{imakeindex} to generate the index file.
\section{Functionality}
\begin{function}{\category}
\begin{syntax}
\cs{category}\marg{category}
\end{syntax}
Makes the given argument \meta{category} behave like a math operator
and prints its name in bold.
This is just to ensure a unified style for printing categories,
if you don't like it, redefine this macro.
\end{function}
\begin{function}{\DeclareCategory}
\begin{syntax}
\cs{DeclareCategory}\oarg{key=value list}\marg{category}
\end{syntax}
Has the same syntax as \cs{DeclareSymbol} from the \pkg{mkessler-symbindex} package,
but adds the key \texttt{group = categories}.
\end{function}
\begin{function}{\DeclareSimpleCategory}
\begin{syntax}
\cs{DeclareSimpleCategory}\oarg{key=value list}\marg{category}\oarg{description}
\end{syntax}
Declares a \enquote{simple} category, i.e.~the category \cs{\meta{category}}
is declared and will expand to \enquote{\cs{category}\marg{category}}
when expanded.
The optional \meta{description} is shown in the index when present.
\end{function}
\begin{function}{\MakeCategoryIndex}
Prints the index of categories.
\end{function}
\section{Language integration}
This package uses \pkg{translator} to translate the package descriptions.
Currently, only English and German are supported.
\section{Default categories}
The package also provides default categories.
These are shown in \autoref{tab:provided-categories}.
You can view their appearance in the index and their descriptions in the
index of this documentation.
Unfortunately, the index is not (yet) compatible with the \texttt{l3doc} class
which is used for this documentation, so ignore everything before the
\enquote{@} characters.
\begin{table}[htpb]
\centering
\begin{tabular}{c | c}
Macro & Result \\
\hline
\ShowCategory{Top}
\ShowCategory{hTop}
\ShowCategory{Set}
\ShowCategory{CHaus}
\ShowCategory{Grp}
\ShowCategory{Ab}
\ShowCategory{CRing}
\ShowCategory{Ring}
\ShowCategory{Vect}
\ShowCategory{Cat}
\ShowCategory{Mod}
\ShowCategory{Alg}
\ShowCategory{Field}
\ShowCategory{AffVar}
\ShowCategory{Sch}
\ShowCategory{GrAb}
\ShowCategory{OrdCat}
\end{tabular}
\caption{caption}
\label{tab:provided-categories}
\end{table}
\end{documentation}
\PrintIndex
\end{document}

View File

@ -1 +0,0 @@
../../LATEXMKRC

View File

@ -1,59 +0,0 @@
\documentclass[full]{l3doc}
\title{The \pkg{mkessler-faktor} package}
\author{Maximilian Keßler}
\usepackage{mkessler-faktor}
\begin{document}
\maketitle
\begin{abstract}
The \pkg{faktor} package provides a mechanism to produce fractions
for mathematical factors.
Its mechanism is, however, quite limited.
Inspired by the
\href{https://tex.stackexchange.com/}{Tex StackExchange}
answer of user
\href{https://tex.stackexchange.com/users/5764/werner}{Werner},
that was given on
\href{https://tex.stackexchange.com/questions/27591/extending-the-faktor-package}
{https://tex.stackexchange.com/\allowbreak questions/\allowbreak 27591/extending-the-faktor-package}
we provide a simple package that wraps (and slightly modifies)
the given answer into a more general \cs{faktor} command.
\end{abstract}
\begin{function}{\faktor}
\begin{function}{\faktor*}
\begin{syntax}
\cs{faktor}*\oarg{shift enumerator}\marg{enumerator}\oarg{shift denominator}\marg{denominator}
\end{syntax}
Produces a fraction with tilted \enquote{$\diagup$} symbol and the corresponding
\meta{enumerator} and \meta{denominator}.
The \enquote{$\diagup$} symbol is automatically scaled.
The \meta{shift} parameters can be controlled to fine tune the vertical
placement of \meta{enumerator} and \meta{denominator}.
Their default values when not given are \texttt{0.5} and \texttt{-0.5},
respectively.
The \enquote{*} can be optionally given. This will make the \cs{faktor}
behave like the old \cs{faktor} command from the \cs{faktor} package,
that is, the \enquote{$\diagup$} won't scale.
\end{function}
\end{function}
\begin{function}{\cofaktor}
\begin{function}{\cofaktor*}
\begin{syntax}
\cs{faktor}*\oarg{shift denominator}\marg{denominator}\oarg{shift enumerator}\marg{enumerator}
\end{syntax}
Behaves the same as \cs{faktor}, but produces a \cs{cofaktor}.
\end{function}
\end{function}
\PrintIndex
\end{document}

View File

@ -1 +0,0 @@
../../LATEXMKRC

View File

@ -1,102 +0,0 @@
\documentclass[full]{l3doc}
\title{The \pkg{mkessler-mathalias} package}
\author{Maximilian Keßler}
\usepackage{mkessler-mathalias}
\begin{document}
\maketitle
\begin{abstract}
Lazy people prefer to write stuff like \cs{Z}, \cs{Q} to get the integers
$\mathbb{Z}$ and rationals $\mathbb{Q}$.
They also often use shortcuts like \cs{bA} for \cs{mathbb}\{A\} to get $\mathbb{A}$.
While the author does not encourage such usage,
this package provide a general syntax to generate such aliases.
\end{abstract}
\begin{documentation}
\section{(Don't) be lazy}
You actually should \emph{not} use this package.
This is poor \LaTeX style.
In case you don't care, or you must, because your co-workers do so,
this package is for you.
The author personally uses
\href{https://www.vim.org/}{Vim}
and the
\href{https://github.com/sirver/UltiSnips}{UltiSnips}
plugin to facilitate \LaTeX writing whilst producing a clean document
without those poor shortcut styles.
So in fact, \emph{be} lazy, but do it the proper way.
If you are, however, lazy, then put
\begin{verbatim}
\usepackage[extended]{mkessler-mathalias}
\end{verbatim}
in your preamble.
\section{Aliases}
\begin{function}{\MakeAliasesForWith}
\begin{syntax}
\cs{MakeAliasesForwith}\marg{macro}\marg{shortcut}\marg{token list}
\end{syntax}
For each \meta{token} in the \meta{token list},
this declares
\enquote{\cs{shortcut\meta{token}}}
as an abbreviation for
\enquote{\meta{macro}\marg{token}}.
\begin{texnote}
In \LaTeX3 syntax, this function would have signature \texttt{Nnn},
so give the \meta{macro} as a single token directly.
\end{texnote}
\begin{texnote}
Technically, the \meta{token list} can contain any tokens that
are fully expandable and thus accepted by \cs{csname} \ldots \cs{endcsname}.
However, as you want \emph{shortcuts}, you would typically invoke this
with tokens of category code 12.
\end{texnote}
\end{function}
As an example,
\begin{verbatim}
\MakeAliasesForWith\mathcal{c}{ABC}
\end{verbatim}
would define the three macros \cs{cA}, \cs{cB} and \cs{cC} to expand to
\cs{mathcal}\{A\},
\cs{mathcal}\{B\}
and
\cs{mathcal}\{c\},
respectively.
\section{Options for default aliases}
There are two options:
\begin{description}
\item[basic]
This declares \cs{C}, \cs{F}, \cs{K}, \cs{N}, \cs{Q}, \cs{R} and \cs{Z}
to expand to the \cs{mathbb} variants of these letters.
\item[extended]
Implies option \textbf{basic}.
Also defines shortcuts for \cs{mathbb}, \cs{mathfrak} and \cs{mathcal}
for each capital arabic letter with the prefixes \enquote{b},
\enquote{f} and \enquote{c}, respectively.
\end{description}
\end{documentation}
\PrintIndex
\end{document}

View File

@ -1 +0,0 @@
../../LATEXMKRC

View File

@ -1,70 +0,0 @@
\documentclass[full]{l3doc}
\title{The \pkg{mkessler-mathfig} package}
\author{Maximilian Ke\ss ler}
\usepackage{mkessler-mathfig}
\begin{document}
\maketitle
\begin{abstract}
This is just some small wrapper package for drawing mathematical figures.
\end{abstract}
\begin{documentation}
\section{Loaded packages}
We load \pkg{pgfplots}, \pkg{tikz}, \pkg{tikz-cd} and \pkg{xy}.
\section{Additional macros}
\begin{function}{\pushoutsymbol}
Denotes a pushoutsymbol used in category theory diagrams.
\end{function}
\begin{function}{\pullbacksymbol}
Denotes a pullbacksymbol used in category theory diagrams.
\end{function}
\begin{function}{\pushout}
\begin{syntax}
\cs{pushout}\oarg{path to bottom right corner}
\end{syntax}
Invoked inside a \env{tikzcd} environment.
This assumes being called in the top left corner of some
commutative square and marks this square as a pushout.
The \meta{path} consists of symbols \texttt{d}, \texttt{u}, \texttt{r}
and \texttt{l}, as in \pkg{tikz-cd}.
By default, it is \texttt{dr}, being usable for default squares.
A phantom arrow is drawn in the given direction that
gets a \cs{pushoutsymbol}.
\end{function}
\begin{function}{\pullback}
\begin{syntax}
\cs{pullback}\oarg{path to bottom right corner}
\end{syntax}
Invoked inside a \env{tikzcd} environment.
This assumes being called in the top left corner of some
commutative square and marks this square as a pullback.
The \meta{path} consists of symbols \texttt{d}, \texttt{u}, \texttt{r}
and \texttt{l}, as in \pkg{tikz-cd}.
By default, it is \texttt{dr}, being usable for default squares.
A phantom arrow is drawn in the given direction that
gets a \cs{pullbacksymbol}.
\end{function}
\end{documentation}
\PrintIndex
\end{document}

View File

@ -1 +0,0 @@
../../LATEXMKRC

View File

@ -1,93 +0,0 @@
\documentclass[full]{l3doc}
\usepackage{mkessler-mathfixes}
\title{The \pkg{mkessler-mathfixes} package}
\author{Maximilian Ke\ss ler}
\NewDocumentCommand{\ShowMacro}{m}
{
\cs{#1} & $ \csname #1\endcsname $
\\
}
\begin{document}
\maketitle
\begin{documentation}
\begin{abstract}
This package includes some hacky \LaTeX (re)-definitions to fix common
misbehavior of built-in macros.
For sure, this is personal view-dependent.
If you don't like these definitions, don't use this package.
\end{abstract}
\section{Provided macros}
\autoref{tab:label} shows the behavior of macros with the
\pkg{mkessler-mathfixes} behavior.
\begin{function}{\degree}
Prints a visual degree symbol, as in $37\degree$.
\end{function}
\begin{function}{\oldlim}
Behaves like the built-in \cs{lim} from \LaTeX.
\end{function}
\begin{function}{\lim}
Defined as \cs{oldlim}\cs{limits}, always puts the limits below the symbol,
also in inline math mode.
\end{function}
\begin{function}{\subset, \supset}
Redefined to \cs{subseteq} and \cs{supseteq} to avoid ambiguities.
\end{function}
\begin{function}{\oldphi, \uglyphi, \goldenratio}
Synonyms for the built-in \cs{phi} symbol.
\end{function}
\begin{function}{\phi, \varphi}
Synonyms for the built-in \cs{varphi} symbol.
\end{function}
\begin{function}{\oldespilon, \uglyepsilon}
Synonyms for the built-in \cs{epsilon} symbol.
\end{function}
\begin{function}{\epsilon, \varepsilon}
Synonyms for the built-in \cs{varepsilon} symbol.
\end{function}
\begin{table}[htpb]
\centering
\begin{tabular}{c | c}
Command & Shown by \LaTeX \\
\ShowMacro{degree}
\ShowMacro{subset}
\ShowMacro{supset}
\ShowMacro{oldphi}
\ShowMacro{uglyphi}
\ShowMacro{goldenratio}
\ShowMacro{phi}
\ShowMacro{varphi}
\ShowMacro{oldepsilon}
\ShowMacro{uglyepsilon}
\ShowMacro{epsilon}
\ShowMacro{varepsilon}
\texttt{\$\cs{oldlim}\_\{n \cs{to} \cs{infty}\}\$} & $\oldlim_{n \to \infty}$ \\
\texttt{\$\cs{lim}\_\{n \cs{to} \cs{infty}\}\$} & $\lim_{n \to \infty}$ \\
\end{tabular}
\caption{Symbols when loaded with the \pkg{mkessler-mathfixes} package.}
\label{tab:label}
\end{table}
\end{documentation}
\PrintIndex
\end{document}

View File

@ -1 +0,0 @@
../../LATEXMKRC

View File

@ -1,60 +0,0 @@
\documentclass[full]{l3doc}
\usepackage{mkessler-mathfont}
\title{The \pkg{mkessler-mathfont} package}
\author{Maximilian Ke\ss ler}
\begin{document}
\maketitle
\begin{abstract}
There are various math alphabets available by different packages.
We load several of these and make these available in a consistent way.
\end{abstract}
\section{Usage}
Load this package before \pkg{eucal}, \pkg{amsfonts} and \pkg{mathrsfs}
to ensure proper font loading.
\section{Loaded alphabets}
\begin{function}{\mathcal,\mathfrak,\mathscr,\mathcat,\mathcalo}
\autoref{tab:provided-fonts} shows the fonts loaded from different packages.
\autoref{tab:font-samples} shows samples of these fonts when the
\pkg{mkessler-mathfont} packages has been loaded.
\end{function}
\begin{table}[htpb]
\centering
\caption{Fonts provided}
\label{tab:provided-fonts}
\begin{tabular}{c | c | c }
Command & Font \\
\hline
\cs{mathcal} & default \cs{mathcal} \\
\cs{mathfrak} & \cs{mathfrak} from \pkg{amsfonts} \\
\cs{mathscr} & \cs{mathscr} from \pkg{mathrsfs} \\
\cs{mathcat} & \cs{mathscr} from \pkg{mathrsfs} \\
\cs{mathcalo} & \cs{mathscr} from \pkg{eucal} with \texttt{mathscr} option \\
\end{tabular}
\end{table}
\begin{table}[htpb]
\centering
\caption{Font samples}
\label{tab:font-samples}
\begin{tabular}{c | c }
Command & sample \\
\hline
\cs{mathcal} & $\mathcal{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$ \\
\cs{mathfrak} & $\mathfrak{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$ \\
\cs{mathscr} & $\mathscr{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$ \\
\cs{mathcalo} & $\mathcalo{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$ \\
\end{tabular}
\end{table}
\end{document}

View File

@ -1 +0,0 @@
../../LATEXMKRC

View File

@ -1,140 +0,0 @@
\documentclass[full]{l3doc}
\title{The \pkg{mkessler-mathop} package}
\author{Maximilian Keßler}
\usepackage{mkessler-mathop}
\begin{document}
\maketitle
\begin{abstract}
This package provides common math operators.
It is certainly based on the authors opinion and use cases and might not
fulfill your personal needs.
It is, however, still aimed to be reasonably general to a broader userbase.
\end{abstract}
\begin{documentation}
\section{General macros}
\begin{function}{\DeclareSimpleMathOperator}
\begin{syntax}
\cs{DeclareSimpleMathOperator}\marg{operator}
\end{syntax}
This is similar to the \cs{DeclareMathOperator} macro of \pkg{mathtools},
but only accepts one argument.
The operator expansion is the operator name itself.
\end{function}
\begin{function}{\DeclareDistribution}
Currently same as \cs{DeclareSimpleMathOperator},
existent for semantical reasons and possible future change of
layouting of stochastical distributions.
\end{function}
\section{Special symbols}
In this section we describe all math operators that are not of textual nature.
\begin{function}{\tensor}
Alias for \cs{otimes}.
\end{function}
\begin{function}{\twedge, \tsmash}
The \enquote{t} stands for \enquote{topological}.
These are to avoid confusion between the standard latex \cs{wedge},
which gives $\wedge$,
although in topology,
the symbol $\twedge$ is called a \enquote{wedge}
and $\tsmash$ denotes the \enquote{smash product}.
\end{function}
\begin{function}{\cfun, \One}
Characteristic function symbol.
Comes from \pkg{bbm} and denotes \enquote{\cs{mathbbm}\{1\}}.
\end{function}
\begin{function}{\suchthat}
gives a scaling \enquote{$\left.\suchthat\right.$} symbol used in set-definitions.
Has to be in a \enquote{\cs{left} \ldots\cs{right}} block to
scale properly.
\end{function}
\begin{function}{\ceil, \floor}
\begin{syntax}
\cs{ceil}\marg{args}
\end{syntax}
Denotes the standard mathematical ceil and floor functions.
\end{function}
\begin{function}{\abs, \abs*}
\begin{syntax}
\cs{abs}*\marg{args}
\end{syntax}
Denotes the absolute value of an expression.
The bars scale by default, the starred variant does not scale.
\end{function}
\begin{function}{\norm}
\begin{syntax}
\cs{norm}*\marg{args}
\end{syntax}
Norm of an expression. The starred variant does not scale.
\end{function}
\begin{function}{\amalgprod}
Denotes an amalgamatic product.
\end{function}
\begin{function}{\ab, \op}
Give a textual representation of themselves.
\end{function}
\begin{function}{\opposite}
\begin{syntax}
\meta{structure}\cs{opposite}
\end{syntax}
Denotes the opposite of some mathematical object.
\end{function}
\begin{function}{\abelianization}
Denotes the abelianization of a group object.
\end{function}
\begin{function}{\directlimit, \inverselimit}
Semantical synonyms for \cs{varinjlim} and \cs{varprojlim}.
\end{function}
\begin{function}{\frestriction}
\begin{syntax}
\cs{frestriction}\marg{function}\marg{domain}
\end{syntax}
Properly denotes function restriction with adequate spacing.
\end{function}
\section{Simple operators}
The vast majority of this package is simple operators such as \cs{id},
which expands to $\id$.
These are for now not documented, search the source code for
\cs{DeclareSimpleMath\allowbreak Operator} if you need to know.
\section{TODO}
proper language support with \pkg{translator}
\end{documentation}
\PrintIndex
\end{document}

View File

@ -1 +0,0 @@
../../LATEXMKRC

View File

@ -1,76 +0,0 @@
\documentclass[full]{l3doc}
\title{The \pkg{mkessler-mathsymb} package}
\author{Maximilian Keßler}
\usepackage{mkessler-mathsymb}
\begin{document}
\maketitle
\begin{abstract}
Provides some selected symbols related to mathematics.
This is certainly a very specific, non-generic package,
heavily based on the authors use-cases.
Feel free to use this as well if you like the symbols.
\end{abstract}
\begin{documentation}
\begin{function}{\noloc}
An inverse \cs{colon} with the correct spacing.
The implementation is by user
\href{https://tex.stackexchange.com/users/4427/egreg}
on
\href{https://tex.stackexchange.com/}{Tex StackExchange}
question
\href{https://tex.stackexchange.com/questions/546713/spacing-in-colon}
{https://\allowbreak tex\allowbreak .stack\allowbreak exchange\allowbreak .com/\allowbreak questions/546713/spacing-in-colon}
\end{function}
\begin{function}{\contra}
Prints a contradiction symbol
\end{function}
\begin{function}{\Warning}
Prints a warning symbol
\end{function}
\begin{function}{\circled}
\begin{syntax}
\cs{circled}\marg{stuff}
\end{syntax}
Dynamically circles the \meta{stuff}.
The circle is adjusted in size.
\end{function}
\begin{function}{\chainbullet}
Synonym for \cs{bullet}.
Only existent for semantic reasons.
\end{function}
\begin{table}[htpb]
\centering
\caption{Symbol table}
\label{tab:symbols}
\begin{tabular}{c | c}
Macro & Result \\
\texttt{Y \cs{leftarrow} X \cs{noloc} f} & $Y \leftarrow X \noloc f$ \\
\cs{contra} & \contra \\
\cs{Warning} & \Warning \\
\cs{circled}\{1\} & \circled{1} \\
\cs{chainbullet} & $\chainbullet$
\end{tabular}
\end{table}
\end{documentation}
\PrintIndex
\end{document}

View File

@ -1 +0,0 @@
../../LATEXMKRC

View File

@ -1,69 +0,0 @@
\documentclass[full]{l3doc}
\title{The \pkg{mkessler-enumerate} package}
\author{Maximilian Ke\ss ler}
\begin{document}
\maketitle
\begin{documentation}
\begin{abstract}
This is some small wrapper around the package \pkg{enumerate}
that provides some additional tweaks.
\end{abstract}
We load \pkg{enumitem} with the \texttt{shortlabels} option.
\begin{function}{\setItemnumber, \SetItemNumber}
\begin{syntax}
\cs{SetItemNumber}\marg{numeric expression}
\end{syntax}
Sets the item number in the current enumeration.
The \cs{setItemnumber} is deprecated, use \cs{SetItemNumber}
instead if you can.
\end{function}
We now provide for standard variants for enumerations:
\begin{function}{circled, propery, equivalent, holds}
\begin{description}
\item[circled]
This circles the (arabic) item numbers
\item[property]
This numbers as \enquote{(\cs{roman}*)},
i.e.~\enquote{i)}, \enquote{ii)},\ldots
\item[equivalent]
This numbers as \enquote{(\cs{arabic}*)},
i.e.~\enquote{(1)},\enquote{(2)},\ldots
\item[holds]
This numbers as \enquote{\cs{arabic}*)}.,
i.e.~\enquote{1)},\enquote{2)},\ldots
\end{description}
\end{function}
All of these are available as
\begin{description}
\item[ShortLabel]
Specify \texttt{c}, \texttt{p}, \texttt{e} or \texttt{h}
as the first option to \env{enumerate}.
\item[Label Value]
Specify \texttt{label = circled } and similar.
\item[Key]
Just specify \texttt{circled} as an option directly and similar.
\end{description}
\end{documentation}
\end{document}

View File

@ -1 +0,0 @@
../../LATEXMKRC

View File

@ -1,52 +0,0 @@
\documentclass[full]{l3doc}
\usepackage{mkessler-hypersetup}
\title{The \pkg{mkessler-hypersetup} package}
\author{Maximilian Ke\ss ler}
\begin{document}
\maketitle
\begin{abstract}
This is just a quick wrapper around the \pkg{hyperref} package
and - optionally - the cleveref package.
\end{abstract}
\begin{documentation}
\section{Usage}
The package provides one option: \texttt{cleveref}.
When given, \pkg{cleveref} is also loaded.
The package loads \pkg{hyperref} at the end of the preamble,
and (optionally), \pkg{cleveref} afterwards.
This ensures proper loading order of these packages.
Additionally, we provide some default settings
that are shown in \autoref{tab:hyperref-values}.
\begin{table}[htpb]
\centering
\begin{tabular}{c | c}
Key & Value \\
\hline
colorlinks & none \\
citecolor & violet \\
urlcolor & blue!80!black \\
linkcolor & red!50!black \\
pdftitle & \cs{@course} if defined, else \cs{@title} \\
pdfauthor & \cs{@author}
\end{tabular}
\caption{Hyperref values set by \pkg{mkessler-hypersetup}}
\label{tab:hyperref-values}
\end{table}
\end{documentation}
\end{document}

View File

@ -1 +0,0 @@
../../LATEXMKRC

View File

@ -1,31 +0,0 @@
\documentclass[full]{l3doc}
\title{The \pkg{mkessler-incfig} package}
\author{Maximilian Ke\ss ler}
\begin{document}
\maketitle
\begin{documentation}
\begin{abstract}
This is some small wrapper around incfigures,
based on
\href{https://castel.dev/post/lecture-notes-2/}
{https://castel.dev/\allowbreak post/\allowbreak lecture-notes-2/}
\end{abstract}
\begin{function}{\incfig}
\begin{syntax}
\cs{incfig}{filename}
\end{syntax}
Inserts an incfigure.
The figures is assumed to be in the \texttt{figures/} folder.
The extension \texttt{pdf_tex} has \emph{not} to be given.
\end{function}
\end{documentation}
\end{document}

View File

@ -1 +0,0 @@
../../LATEXMKRC

View File

@ -1,46 +0,0 @@
\documentclass[full]{l3doc}
\title{The \pkg{mkessler-math} package}
\author{Maximilian Ke\ss ler}
\begin{document}
\maketitle
\begin{documentation}
\begin{abstract}
A ready-to-use math package that just glues lots of other packages together.
\end{abstract}
\section{Usage}
\begin{verbatim}
\usepackage{mkessler-math}
\end{verbatim}
\section{Loaded packages}
We load the following:
\pkg{IEEEtrantools},
\pkg{algorithm2e},
\pkg{amsmath},
\pkg{amssymb},
\pkg{amsthm},
\pkg{esint},
\pkg{latexsym},
\pkg{mathabx},
\pkg{mathtools},
\pkg{mkessler-categories},
\pkg{mkessler-faktor},
\pkg{mkessler-mathalias},
\pkg{mkessler-mathfig},
\pkg{mkessler-mathfixes}
\pkg{mkessler-mathfont},
\pkg{mkessler-mathop},
\pkg{mkessler-mathsymb},
\pkg{mkessler-unicodechar},
\end{documentation}
\end{document}

View File

@ -1 +0,0 @@
../../LATEXMKRC

View File

@ -1,54 +0,0 @@
\documentclass[full]{l3doc}
\usepackage{mkessler-todo}
\title{The \pkg{mkessler-todo} package}
\author{Maximilian Ke\ss ler}
\begin{document}
\maketitle
\begin{documentation}
\begin{abstract}
A simple wrapper around the \pkg{todonotes} package
with some shortcut todos that the author uses often.
\end{abstract}
\section{Usage}
We load the \pkg{todonotes} package and the \pkg{marginnote} package.
By redefining \cs{marginpar} to \cs{marginnote} we ensure
that the \cs{todo} macro will also be usable inside minipages properly.
\begin{function}{\todoref}
Marks a missing reference.
Does \emph{not} require additional arguments.
\todoref
\end{function}
\begin{function}{\todoquestion}
Used for questions that arise during lectures.
Same syntax as \cs{todo}.
\todoquestion{Is this useful?}
\end{function}
\begin{function}{\todotex}
Used for marking tex-related todos.
Same syntax as \cs{todo}.
\todotex{Fix spacing}
\end{function}
\begin{function}{\todotypo}
Used for marking (possible) typos of the lecturer for later inspection.
Same syntax as \cs{todo}.
\todotypo{Was this misspelled?}
\end{function}
\end{documentation}
\end{document}

View File

@ -1 +0,0 @@
../../LATEXMKRC

View File

@ -1,48 +0,0 @@
\documentclass[full]{l3doc}
\usepackage{mkessler-unicodechar}
\title{The \pkg{mkessler-unicodechar} package}
\author{Maximilian Ke\ss ler}
\begin{document}
\maketitle
\begin{abstract}
This is just a quick wrapper around the \pkg{unicodechar} package
that defines the Unicode symbols for greek letters to be available
in \LaTeX directly.
\end{abstract}
\section{Provided symbols}
We just provide the greek (lowercase) alphabet:
\[
α
β
γ
δ
ε
ζ
η
θ
ι
κ
λ
μ
ν
ξ
ο
π
ρ
σ
τ
υ
φ
χ
ψ
ω
\]
\end{document}

View File

@ -1,8 +0,0 @@
#! /bin/bash
# Compiles all documentation files in repository
set -e
BUILD_COMMAND="latexmk -output-directory=$(pwd)/.compile $1"
find doc -type f -name "*.tex" -execdir sh -c "$BUILD_COMMAND" -- {} \;

View File

@ -0,0 +1,265 @@
__HEADER__(Theorem-Environment Package)
%Provides fancy theorem-like-environments used in the write-ups of my lecture notes
\RequirePackage{xkeyval}
__NEW_IF__(showstars,true)
__NEW_IF__(showdaggers,true)
__NEW_IF__(includestars,true)
__NEW_IF__(includeoral,true)
__NEW_IF__(markoral,true)
__NEW_IF__(lecturenumbers,true)
__NEW_IF__(numbersmallenvironmentswiththeorem,false)
__NEW_IF__(numbersmallenvironments,false)
__NEW_IF__(defaulttheorems,true)
\define@choicekey*{__PACKAGE_NAME__}{__PACKAGE_PREFIX__numbersmallenvironments}[\val\nr]{no,section,theorem}{%
\ifcase\nr\relax
__SET_IF__(numbersmallenvironments,false)
\or
__SET_IF__(numbersmallenvironments,true)
%numbering small environments within sections is forbidden whilst using lecturenumbes
__IF__(lecturenumbers)
__SET_IF__(numbersmallenvironmentswiththeorem,true)
\else
__SET_IF__(numbersmallenvironmentswiththeorem,false)
\fi
\or
__SET_IF__(numbersmallenvironments,true)
__SET_IF__(numbersmallenvironmentswiththeorem,true)
\fi
}
\define@choicekey*{__PACKAGE_NAME__}{__PACKAGE_PREFIX__lecturenumbers}[\val\nr]{true,false}{%
\ifcase\nr\relax
__SET_IF__(lecturenumbers,true)
\else
__SET_IF__(lecturenumbers,false)
\fi
}
\define@choicekey*{__PACKAGE_NAME__}{__PACKAGE_PREFIX__defaulttheorems}[\val\nr]{true,false}{%
\ifcase\nr\relax
__SET_IF__(defaulttheorems,true)
\else
__SET_IF__(defaulttheorems,false)
\fi
}
\define@choicekey*{__PACKAGE_NAME__}{__PACKAGE_PREFIX__showdaggers}[\val\nr]{true,false}{%
\ifcase\nr\relax
__SET_IF__(showdaggers,true)
\else
__SET_IF__(showdaggers,false)
\fi
}
\define@choicekey*{__PACKAGE_NAME__}{ownenvironments}[\val\nr]{on, natural, off}{%
\ifcase\nr\relax
__SET_IF__(includestars,true)
__SET_IF__(showstars,true)
\or
__SET_IF__(includestars,true)
__SET_IF__(showstars,false)
\or
__SET_IF__(includestars,false)
__SET_IF__(showstars,false)
\fi
}
\define@choicekey*{__PACKAGE_NAME__}{oralremarks}[\val\nr]{on,natural,off}{%
\ifcase\nr\relax
__SET_IF__(includeoral,true)
__SET_IF__(markoral,true)
\or
__SET_IF__(includeoral,true)
__SET_IF__(markoral,true)
\or
__SET_IF__(includeoral,false)
\fi
}
%%%%% Option section
__LANGUAGE_OPTIONS_X__
\DeclareOptionX{showdaggers}{\setkeys{__PACKAGE_NAME__}{__PACKAGE_PREFIX__showdaggers=#1}}
\DeclareOptionX{ownenvironments}{\setkeys{__PACKAGE_NAME__}{ownenvironments=#1}}
\DeclareOptionX{oralremarks}{\setkeys{__PACKAGE_NAME__}{oralremarks=#1}}
\DeclareOptionX{lecturenumbers}{\setkeys{__PACKAGE_NAME__}{__PACKAGE_PREFIX__lecturenumbers=#1}}
\DeclareOptionX{numbersmallenvironments}{\setkeys{__PACKAGE_NAME__}{__PACKAGE_PREFIX__numbersmallenvironments=#1}}
\DeclareOptionX{defaulttheorems}{\setkeys{__PACKAGE_NAME__}{__PACKAGE_PREFIX__defaulttheorems=#1}}
__END_OPTIONS_X__
%%%%%%%% Implementation section
%Required Packages and setup
\RequirePackage{amsmath}
\RequirePackage{amsthm}
\RequirePackage{mdframed}
\RequirePackage{thmtools}
\RequirePackage[skins]{tcolorbox}
\RequirePackage{mfirstuc}
\RequirePackage{xifthen}
\RequirePackage{xparse}
\tcbuselibrary{breakable}
% Dummy counters
\declaretheorem[numberwithin=section]{__PACKAGE_PREFIX__dummy}
\declaretheorem[numberwithin=__PACKAGE_PREFIX__dummy]{__PACKAGE_PREFIX__smalldummy}
%%%%% Main part, i.e. providing macros for defining new theorems
%%Environments that are numbered by default have 3 versions:
% - the standard one, for numbering
% - one asterisk, to exclude them from numbering (because they were not numbered in the lecture) -> they will be numbered if 'truenmubers' option is set
% - two asterisks, for marking them as self-added, so they will not be numbered, but will receive a visual asterisk. -> They will be numbered if 'truenumbers' option is set
\NewDocumentCommand{\declarebigtheorem}{O{} O{} m m O{}}{
%First, store the name of the theorem in \theoremname
__IF__(english)
\ifthenelse{\isempty{#2}}{\def\theoremname{#4}}{\def\theoremname{#2}}
\else
\ifthenelse{\isempty{#1}}{\def\theoremname{#4}}{\def\theoremname{#1}}
\fi
%Define the mane version of the theorem
\ifthenelse{\isempty{#5}}{\declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}, sibling = __PACKAGE_PREFIX__dummy]{#4}}{}
%Define the versions theorem*, theorem**, dtheorem
__IF__(lecturenumbers)
__IF__(numbersmallenvironments)
\declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}, sibling=__PACKAGE_PREFIX__smalldummy]{#4*}
\declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}__IF__(showstars) *\else\fi, sibling=__PACKAGE_PREFIX__smalldummy]{#4**}
\declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}__IF__(showdaggers) $^{\dagger}$\else\fi, sibling=__PACKAGE_PREFIX__smalldummy]{d#4}
\else
\declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}, numbered=no]{#4*}
\declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}__IF__(showstars) *\else\fi, numbered = no]{#4**}
\declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}__IF__(showdaggers) $^{\dagger}$\else\fi, numbered = no]{d#4}
\fi
\else
\declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}, sibling=__PACKAGE_PREFIX__dummy]{#4*}
\declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}__IF__(showstars) *\else\fi, sibling=__PACKAGE_PREFIX__dummy]{#4**}
\declaretheorem[style = #3, name = \makefirstuc{\expandafter\theoremname}__IF__(showdaggers) $^{\dagger}$\else\fi, sibling=__PACKAGE_PREFIX__dummy]{d#4}
\fi
__IF__(includestars)\else\renewenvironment{#4**}{\comment}{\endcomment}\fi
}
\NewDocumentCommand{\declaresmalltheorem}{O{} O{} m m}{
%Get the name of the theorem and store it in \theoremname
__IF__(english)
\ifthenelse{\isempty{#2}}{\def\theoremname{#4}}{\def\theoremname{#2}}
\else
\ifthenelse{\isempty{#1}}{\def\theoremname{#4}}{\def\theoremname{#1}}
\fi
__IF__(numbersmallenvironments)
__IF__(numbersmallenvironmentswiththeorem)
\declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}, sibling = __PACKAGE_PREFIX__smalldummy]{#4}
\declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}__IF__(showstars) *\else\fi, sibling=__PACKAGE_PREFIX__smalldummy]{#4*}
\declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}__IF__(showdaggers) $^{\dagger}$\else\fi, sibling=__PACKAGE_PREFIX__smalldummy]{d#4}
\else
\declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}, sibling=__PACKAGE_PREFIX__dummy]{#4}
\declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}__IF__(showstars) *\else\fi, sibling=__PACKAGE_PREFIX__dummy]{#4*}
\declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}__IF__(showdaggers) $^{\dagger}$\else\fi, sibling=__PACKAGE_PREFIX__dummy]{d#4}
\fi
\else
\declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}, numbered = no]{#4}
\declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}__IF__(showstars) *\else\fi, numbered = no]{#4*}
\declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}__IF__(showdaggers) $^{\dagger}$\else\fi, numbered = no]{d#4}
\fi
\declaretheorem[style=#3,name=\makefirstuc{\expandafter\theoremname}, sibling=__PACKAGE_PREFIX__dummy]{n#4}
__IF__(includestars)\else\renewenvironment{#4*}{\comment}{\endcomment}\fi
}
%%%% If requested, now define some default theoremstyles
__IF__(defaulttheorems)
\RequirePackage[default styles]{mkessler-thmstyle} % Easy setup of mdframed styles
\declarebigtheorem[Satz][Theorem]{thmredmarginandfill}{theorem} __IF__(english)\else\AtBeginDocument{\def\theoremautorefname{Satz}}\fi
\declarebigtheorem{thmredmarginandfill}{proposition}
\declarebigtheorem[Korollar]{thmredmarginandfill}{corollary}
\declarebigtheorem{thmorangemarginandfill}{lemma}
\declarebigtheorem[Lemma und Definition][Lemma and Definition]{thmorangemarginbluefill}{lemmadef}
\declarebigtheorem{thmbluemarginandfill}{definition}
\declarebigtheorem[Satz und Definition][Theorem and Definition]{thmredmarginbluefill}{theoremdef}
\declarebigtheorem[Proposition und Definition][Proposition and Definition]{thmredmarginbluefill}{propositiondef}
\declarebigtheorem{thmvioletmarginandfill}{notation}
\declarebigtheorem[zuSatz][Addition to Theorem]{thmredmarginandfill}{additiontheorem}
%%%Environments that are not numbered by default (notation, question, example, remark etc) have two forms:
% - normal form: won't be numbered unless '__PACKAGE_PREFIX__numbersmallenvironments' is set
% - having an asterisk: will be displayed with an asterisk, will be numbered if 'numbersmallenvironments' is set
%Notation
\declaresmalltheorem[Notationsmissbrauch][Abuse of Notation]{thmvioletmargin}{abuse}
\declaresmalltheorem[Beispiel]{thmgreenmargin}{example}
\declaresmalltheorem[Bemerkung]{thmyellowmargin}{remark}
\declaresmalltheorem[Lob]{thmgoldmargin}{praise}
\declaresmalltheorem[Trivial Nonsense][Trivial Nonsense]{thmyellowmargin}{trivial}
\declaresmalltheorem[Frage]{thmblackmarginandfill}{question}
\declaresmalltheorem[Organisatorisches][Organisational stuff]{thmblackmargin}{orga}
\declaresmalltheorem[Fakt]{thmredmargin}{fact}
%%%% Specially treated stuff
\declaresmalltheorem[__IF__(markoral) Mündliche Anmerkung\else Bemerkung\fi][__IF__(markoral) Oral remark\else remark\fi]{thmyellowmargin}{oral}
% Option to remove oral remarks when needed
__IF__(includeoral)\else
\renewenvironment{oral}{\comment}{\endcomment}
\renewenvironment{oral*}{\comment}{\endcomment}
\renewenvironment{doral}{\comment}{\endcomment}
\fi
%%%%%%%% Other mdframed style boxes
\newtcolorbox{recap}{before skip = 0.5cm, after skip = 0.5cm, enhanced, sharp corners = all, colback = white, colframe = gray, toprule=0pt, bottomrule=0pt, leftrule=0pt,rightrule=0pt, overlay = {
\draw[gray, line width = 2pt] (frame.north west) -- ++(0.5cm, 0pt);
\draw[gray, line width=2pt] (frame.south east) -- ++(-0.5cm, 0pt);
\draw[gray, line width=2pt] (frame.north west) -- ++ (0pt, -0.5cm);
\draw[gray, line width=2pt] (frame.south east) -- ++(0pt, 0.5cm);
}}
\newenvironment{moral}{%
\begin{mdframed}[linecolor=green!70!black]%
\bfseries\color{green!50!black}}%
{\end{mdframed}}
\newenvironment{antimoral}{%
\begin{mdframed}[linecolor=red!70!black]%
\bfseries\color{red!50!black}}%
{\end{mdframed}}
%%%%%%%%%%%% Non-mdframed theorems
\theoremstyle{plain}
\newtheorem{variant}{__IF__(english) Variant\else Variante\fi}
\newtheorem{assumption}{__IF__(english) Assumption\else Annahme\fi}
\theoremstyle{definition}
\newtheorem*{note}{__IF__(english) Note\else Anmerkung\fi}
\newtheorem*{warning}{\color{red}__IF__(english) Warning \else Warnung\fi}
\newtheorem*{goal}{__IF__(english) Goal \else Ziel\fi}
\newtheorem*{strategy}{__IF__(english) Proof Strategy \else Beweisstrategie\fi}
\newtheorem*{goal*}{__IF__(english) Goal* \else Ziel*\fi}
\newtheorem*{problem}{Problem}
\newtheorem*{info}{Information}
\newtheorem*{answer}{__IF__(english) Answer\else Antwort\fi}
\newtheorem{observe}[theorem]{__IF__(english) Observe\else Beobachte\fi}
\newtheorem*{property}{__IF__(english) Property\else Eigenschaft\fi}
\newtheorem*{intuition}{Intuition}
\newtheorem*{recall}{__IF__(english) Recall\else Erinnerung\fi}
\newtheorem*{idea}{__IF__(english) Idea\else Idee\fi}
\newtheorem{exercise}{__IF__(english) Exercise\else Aufgabe\fi}[section]
\newtheorem{reminder}{__IF__(english) Reminder\else Erinnerung\fi}
\fi % end of default theorems

View File

@ -1,7 +0,0 @@
@default_files = ("fancythm.dtx");
$makeindex = "makeindex -s gind.ist %O -o %D %S";
$clean_ext .= ' glo';
$clean_ext .= ' hd';
$clean_ext .= ' ins';
$clean_full_ext .= ' sty';
$emulate_aux = 1;

View File

@ -1,922 +0,0 @@
% \iffalse meta-comment
%<*internal>
\begingroup
\input docstrip.tex
\keepsilent
\usedir{tex/latex/mkessler/fancythm}
\askforoverwritefalse
\generate{\file{fancythm.sty}{\from{fancythm.dtx}{package}}}
\def\tmpa{plain}
\ifx\tmpa\fmtname\endgroup\expandafter\bye\fi
\endgroup
%</internal>
%% File: fancytm.dtx
%
% Copyright (C) 2022 Maximilian Keßler
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
% license or (at your option) any later version. The latest version
% of this license is in the file
%
% https://www.latex-project.org/lppl.txt
%
% -----------------------------------------------------------------------
%<package>\ProvidesExplPackage{fancythm}{2022/01/30}{0.0.2}{Grouped theorems.}
%
%<*driver>
\documentclass[full,kernel]{l3doc}
\begin{document}
\DocInput{\jobname.dtx}
\end{document}
%</driver>
% \fi
%
% \title{^^A
% The \pkg{fancythm} package^^A
% }
%
% \author{^^A
% Maximilian Keßler
% }
%
% \date{Released 2022-01-12}
%
% \maketitle
%
% \begin{documentation}
% \end{documentation}
%
%
% \begin{implementation}
%
% \section{\pkg{fancythm} implementation}
%
% \begin{macrocode}
%<*package>
% \end{macrocode}
%
% \begin{macrocode}
%<@@=fancythm>
% \end{macrocode}
%
%
% \subsection{Dependencies}
% \begin{macrocode}
\RequirePackage{l3keys2e}
\RequirePackage[default styles]{thmstyle}
% \end{macrocode}
%
% \subsection{Counter management}
%
%
% Wrappers for \LaTeX2e counter manipulation
%
%
% \begin{macro}{\arabic:n, \counter_new:n, \counter_within:nn,\counter_new:nn}
%
% Obvious meanings.
%
% \begin{macrocode}
\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 }
}
% \end{macrocode}
% \end{macro}
%
%
%
%
% \begin{macro}
% {
% \counter_if_exist_p:n,
% \counter_if_exist:nT,
% \counter_if_exist:F,
% \counter_if_exist:nTF,
% }
%
%
%
% \begin{macrocode}
\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 }
}
% \end{macrocode}
% \end{macro}
%
%
%
% \begin{macro}{\counter_undefined_error:n}
%
% Standard counter error message.
%
% \begin{macrocode}
\cs_set_eq:Nc \counter_undefined_error:n { @nocounterr }
% \end{macrocode}
% \end{macro}
%
%
%
%
% \begin{macro}{\counter_ensure_exist:n}
%
%
%
% \begin{macrocode}
\cs_new:Npn \counter_ensure_exist:n #1
{
\counter_if_exist:nF { #1 }
{
\counter_undefined_error:n { #1 }
}
}
% \end{macrocode}
% \end{macro}
%
%
%
%
%
% \begin{macro}{\counter_the:n, \counter_set_the:nn}
%
%
% \begin{macrocode}
\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 }
}
% \end{macrocode}
% \end{macro}
%
%
%
%
% \begin{macro}{\counter_sub:nn}
% \begin{syntax}
% \cs{counter_sub:nn}\marg{counter_1}\marg{counter_2}
% \end{syntax}
%
%
%
% \begin{macrocode}
\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 }
}
}
% \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\counter_new_sub:nn #1 #2}
%
%
%
% \begin{macrocode}
\cs_new:Npn \counter_new_sub:nn #1 #2
{
\counter_new:n { #1 }
\counter_sub:nn { #1 } { #2 }
}
% \end{macrocode}
% \end{macro}
%
% \subsection{Counter management}
%
%
%
% \begin{macro}{\@@_counter_sub_if_exist:n}
%
%
%
% \begin{macrocode}
\cs_new:Npn \@@_counter_sub_if_exist:n #1
{
\counter_if_exist:nT { #1 }
{
\counter_new_sub:nn { in #1 } { #1 }
}
}
% \end{macrocode}
% \end{macro}
%
%
%
%
%
%
% \begin{macro}{\counter_alias:nn, \counter_alias:nx}
% \begin{syntax}
% \cs{counter_alias:nn}\marg{counter_1}\marg{counter_2}
% \end{syntax}
%
% Note that since 2022-06-02, the implementation of \cs{@counteralias}
% in \pkg{thmtools} has changed.
% Before, aliasing an already existing counter did not throw an error,
% which is considered a bug now
% (\href{https://github.com/muzimuzhi/thmtools/issues/28}{https://github.com/muzimuzhi/thmtools/issues/28}).
% Since \pkg{!!} relies on the old functionality,
% we adapt this here by undefining \cs{c@\meta{countername}} before calling
% \cs{@counteralias}.
%
% \begin{macrocode}
\cs_new:Npn \counter_alias:nn #1 % trailing #2
{
\cs_undefine:c { c@ #1 }
\use:c { @counteralias } { #1 } % implicit #2
}
\cs_generate_variant:Nn \counter_alias:nn { n x }
% \end{macrocode}
% \end{macro}
%
%
%
%
%
%
% \subsection{Initialization}
%
%
%
% \begin{variable}{indocument, insection, insubsection, inchapter, inpart}
%
%
%
% \begin{macrocode}
\counter_new:n { indocument }
\@@_counter_sub_if_exist:n { section }
\@@_counter_sub_if_exist:n { subsection }
\@@_counter_sub_if_exist:n { chapter }
\@@_counter_sub_if_exist:n { part }
% \end{macrocode}
% \end{variable}
%
% \begin{variable}{toplevel, sublevel, subsublevel, subsubsublevel}
%
% Note that the \texttt{toplevel} counter will be potentially redefined
% by the given package options.
%
% \begin{macrocode}
\counter_alias:nn { toplevel } { indocument }
\counter_new_sub:nn { sublevel } { toplevel }
\counter_new_sub:nn { subsublevel } { sublevel }
\counter_new_sub:nn { subsubsublevel } { subsublevel }
% \end{macrocode}
% \end{variable}
%
%
% \begin{variable}{\g_@@_style_str}
%
% This will hold the style information of the package.
%
% \begin{macrocode}
\str_new:N \g_@@_style_str
% \end{macrocode}
% \end{variable}
%
% \begin{variable}{\g_@@_translator_bool}
%
%
%
% \begin{macrocode}
\bool_new:N \g_@@_translator_bool
% \end{macrocode}
% \end{variable}
%
%
% \begin{variable}{\g_@@_generate_defaults_bool}
%
%
%
% \begin{macrocode}
\bool_new:N \g_@@_generate_defaults_bool
% \end{macrocode}
% \end{variable}
%
%
%
%
% \begin{variable}
% {
% \l_@@_key_name_tl,
% \l_@@_key_mdframed_tl,
% \l_@@_key_style_tl,
% \l_@@_key_group_clist,
% \l_@@_key_thmtools_clist,
% }
%
%
% \begin{macrocode}
\tl_new:N \l_@@_key_name_tl
\tl_new:N \l_@@_key_mdframed_tl
\tl_new:N \l_@@_key_style_tl
\clist_new:N \l_@@_key_group_clist
\clist_new:N \l_@@_key_thmtools_clist
% \end{macrocode}
% \end{variable}
%
%
%
% \begin{variable}
% {
% \l_@@_name_tl,
% \l_@@_thmtools_clist,
% \l_@@_group_clist,
% }
%
%
% \begin{macrocode}
\tl_new:N \l_@@_name_tl
\clist_new:N \l_@@_thmtools_clist
\clist_new:N \l_@@_group_clist
% \end{macrocode}
% \end{variable}
%
%
%
% \begin{variable}{\g_@@_groupthm_option_clist}
%
%
%
% \begin{macrocode}
\clist_new:N \g_@@_groupthm_option_clist
% \end{macrocode}
% \end{variable}
%
%
%
%
%
%
% \subsection{Key interface}
%
% \begin{texnote}
% Note that unfortunately, none of the keynames really containes a space.
% \LaTeX2e strips spaces before loading a package, so introducing them here
% would make them inaccessible.
% Here they are ignored by \LaTeX3 and are present for readability.
% \end{texnote}
%
%
% \begin{macrocode}
\keys_define:nn { fancythm }
{
translator .bool_set:N = \g_@@_translator_bool ,
translator .default:n = { true } ,
generate defaults .bool_set:N = \g_@@_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_@@_style_str { \tl_use:N \l_keys_choice_tl }
} ,
style .default:n = { fancy } ,
cache .code:n =
{
\clist_put_right:Nn \g_@@_groupthm_option_clist { cache = #1 }
} ,
cache .default:n = { true } ,
cache version .code:n =
{
\clist_put_right:Nn \g_@@_groupthm_option_clist { cache version = #1 }
} ,
cache version .default:n = { 0 } ,
}
% \end{macrocode}
%
%
%
%
% \begin{macrocode}
\keys_define:nn { fancythm / fancytheorem }
{
name .tl_set:N = \l_@@_key_name_tl ,
name .default:n = \c_novalue_tl ,
mdframed .tl_set:N = \l_@@_key_mdframed_tl ,
mdframed .default:n = \c_novalue_tl ,
style .tl_set:N = \l_@@_key_style_tl ,
style .default:n = \c_novalue_tl ,
group .clist_set:N = \l_@@_key_group_clist ,
group .default:n = {} ,
thmtools .clist_set:N = \l_@@_key_thmtools_clist ,
thmtools .default:n = {} ,
}
% \end{macrocode}
%
%
% Process the given keys:
%
% \begin{macrocode}
\keys_set:nn { fancythm } { translator, generate defaults, number in, style }
\ProcessKeysOptions{ fancythm }
% \end{macrocode}
%
% \begin{macro}{\@@_require_package:nn}
%
%
% \begin{macrocode}
\cs_new:Npn \@@_require_package:nn #1
{
\RequirePackage [ #1 ]
}
\cs_generate_variant:Nn \@@_require_package:nn { V n }
% \end{macrocode}
% \end{macro}
%
%
%
%
% \begin{macrocode}
\@@_require_package:Vn \g_@@_groupthm_option_clist { groupthm }
% \end{macrocode}
%
%
%
% This sets up translation if requested.
% Throughout implementation, we can just use \cs{@@_translate:n}
% and will (or not) have translation according to the specified options.
%
% \begin{macrocode}
\bool_if:NTF \g_@@_translator_bool
{
\RequirePackage{translator}
\usedictionary{translator-environment-names}
\cs_set_eq:NN \@@_translate:n \translate
}
{
\cs_set_eq:NN \@@_translate:n \use:n
}
% \end{macrocode}
%
%
%
%
% \begin{macro}{\@@_set_normalized_keys:nn}
%
% \begin{syntax}
% \cs{@@_set_normalized_keys:nn}\marg{keys}\marg{fallback name}
% \end{syntax}
%
%
% \begin{macrocode}
\cs_new:Npn \@@_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_@@_group_clist \l_@@_key_group_clist
\clist_set_eq:NN \l_@@_thmtools_clist \l_@@_key_thmtools_clist
\tl_if_eq:NnF \l_@@_key_mdframed_tl { \c_novalue_tl }
{
\clist_put_right:Nx \l_@@_thmtools_clist
{
mdframed = { style = \tl_use:N \l_@@_key_mdframed_tl }
}
}
\tl_if_eq:NnF \l_@@_key_style_tl { \c_novalue_tl }
{
\clist_put_right:Nx \l_@@_thmtools_clist
{
style = \tl_use:N \l_@@_key_style_tl
}
}
\tl_if_eq:NnTF \l_@@_key_name_tl { \c_novalue_tl }
{
\tl_set:Nx \l_@@_name_tl
{
\text_titlecase_first:n { \tl_trim_spaces:n { #2 } }
}
}
{
\tl_set_eq:NN \l_@@_name_tl \l_@@_key_name_tl
}
\tl_set:Nx \l_@@_name_tl
{
\exp_not:N \csname @@_translate:n \exp_not:N \endcsname { \tl_use:N \l_@@_name_tl }
}
}
% \end{macrocode}
% \end{macro}
%
%
%
%
%
% \subsection{Fancy theorems}
%
%
%
% \begin{macro}{\@@_wrap_multiple:nnn}
% \begin{syntax}
% \cs{@@_wrap_multiple:nnn}\marg{declarator list}\marg{function name}\marg{code}
% \end{syntax}
%
% Defines \meta{function name}, which is assumed to contain \cs{declarator}
% by \meta{code} for each declarator in \meta{declarator list}.
%
% \begin{macrocode}
\cs_new:Npn \@@_wrap_multiple:nnn #1 #2 #3
{
\cs_set:Npn \@@_map_aux:n ##1
{
\cs_new:cn { #2 }
{
#3
}
}
\clist_map_function:nN { #1 } \@@_map_aux:n
}
% \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\fancythm_new_theorem:nnnn, \fancythm_provide_theorem:nnnn}
% \begin{syntax}
% \cs{fancythm_new_theorem:nnnn}\marg{fancy theorem}\marg{groups}
% \marg{name}\marg{thmtools keys}
% \end{syntax}
%
%
%
% \begin{macrocode}
\@@_wrap_multiple:nnn
{ new, provide }
{ fancythm_#1_theorem:nnnn }
{
\use:c { groupthm_#1_family:nnnnn } { ##1 } { dagger, star, nobraces } { ##3 } { ##4 } { ##2 }
\use:c { groupthm_#1_family_options:nnnn }
{ ##1 }
{ !s !t+ !t-}
{
\IfBooleanT { ####1 }
{
\AddTheoremToGroup { star }
}
\IfBooleanT { ####2 }
{
\AddTheoremToGroup { dagger }
}
\IfBooleanT { ####3 }
{
\AddTheoremToGroup { nobraces }
}
}
{ ##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 }
% \end{macrocode}
% \end{macro}
%
%
%
% \begin{macro}{\fancythm_new_theorem:nn}
% \begin{syntax}
% \cs{fanythm_new_theorem:nn}\marg{key=value list}\marg{fancy theorem}
% \end{syntax}
%
%
%
% \begin{macrocode}
\@@_wrap_multiple:nnn
{ new, provide }
{ fancythm_#1_theorem:nn }
{
\@@_set_normalized_keys:nn { ##1 } { ##2 }
\use:c { fancythm_#1_theorem:nVVV }
{ ##2 }
\l_@@_group_clist
\l_@@_name_tl
\l_@@_thmtools_clist
}
% \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\@@_new_document_command:Nnn, \@@_new_document_command:cnn}
%
% Private wrappers around \cs{NewDocumentCommand}.
%
% \begin{macrocode}
\cs_new:Npn \@@_new_document_command:Nnn #1 #2 #3
{
\NewDocumentCommand { #1 } { #2 } { #3 }
}
\cs_generate_variant:Nn \@@_new_document_command:Nnn { c n n }
% \end{macrocode}
% \end{macro}
%
%
%
% \begin{macro}{\@@_wrap_multiple_document:nnnn}
% \begin{syntax}
% \cs{@@_wrap_multiple_document:nnnn}\marg{declarator list}\marg{function name}\marg{arg spec}\marg{code}
% \end{syntax}
%
% This is very similar to \cs{@@_wrap_multiple:nnn}, except that it produces document commands.
% For this reason, \cs{declarator} and \cs{Declarator} are available to refer to the lower
% and upper-case versions of the current declarator.
%
% \begin{macrocode}
\cs_new:Npn \@@_wrap_multiple_document:nnnn #1 #2 #3 #4
{
\cs_set:Npn \@@_map_aux:n ##1
{
\cs_set:Nn \@@_Declarator: { \text_titlecase_first:n { ##1 } }
\@@_new_document_command:cnn { #2 } { #3 } { #4 }
}
\clist_map_function:nN { #1 } \@@_map_aux:n
}
% \end{macrocode}
% \end{macro}
%
%
%
%
%
%
% \begin{macro}{\NewFancyTheorem, \ProvideFancyTheorem}
% \begin{syntax}
% \cs{NewFancyTheorem}\marg{key=value list}\marg{fancy theorem}
% \end{syntax}
%
%
%
% \begin{macrocode}
\@@_wrap_multiple_document:nnnn
{ new, provide }
{ \@@_Declarator: FancyTheorem }
{ O{} m }
{
\use:c { fancythm_#1_theorem:nn } { ##1 } { ##2 }
}
% \end{macrocode}
% \end{macro}
%
%
%
% \subsection{Provided resources}
%
%
%
%
% We introduce various new 0theorem groups that help us to organize the document
% in a flexible way.
%
% \begin{variable}{star, dagger, big, small, tiny, custom}
%
%
% \begin{macrocode}
\declaretheoremstyle[notebraces={{}{}}]{nobraces}
\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_new_group:nnnnn { nobraces } { } { } { } { style = nobraces }
% \end{macrocode}
% \end{variable}
%
%
% \begin{macrocode}
\groupthm_add_parent:nn { star } { custom }
\groupthm_add_parent:nn { dagger } { custom }
% \end{macrocode}
% \begin{macrocode}
\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 }
% \end{macrocode}
%
%
% It remains to provide a list of theorems at the beginning of the document.
%
%
% \begin{macro}{\fancythm_add_provided_theorem_to_group:nn}
%
% \begin{macrocode}
\cs_new:Npn \fancythm_add_provided_theorem_to_group:nn #1 #2
{
\cs_if_exist:cF { @@_provided_theorem__#1__group_clist }
{
\clist_new:c { @@_provided_theorem__#1__group_clist }
}
\clist_put_left:cn { @@_provided_theorem__#1__group_clist } { #2 }
}
% \end{macrocode}
% \end{macro}
%
%
%
% \begin{macro}{\AddProvidedFancyTheoremToGroup}
%
%
%
% \begin{macrocode}
\NewDocumentCommand { \AddProvidedFancyTheoremToGroup } { m m }
{
\fancythm_add_provided_theorem_to_group:nn { #1 } { #2 }
}
% \end{macrocode}
% \end{macro}
%
%
%
% \begin{macro}{\@@_provide_package_theorem:nnn}
% \begin{syntax}
% \cs{@@_provide_package_theorem:nnn}\marg{key=value list}\marg{fancy theorem}
% \marg{group}
% \end{syntax}
%
% Group can be one of \texttt{big}, \texttt{small}, \texttt{tiny},
% and the provided theorem will have this group, unless it conflicts
% with a user-provided group, in which case this is ignored.
%
%
% \begin{macrocode}
\cs_new:Npn \@@_provide_package_theorem:nnn #1 #2 #3
{
\@@_set_normalized_keys:nn { #1 } { #2 }
\cs_if_exist:cT { @@_provided_theorem__#2__group_clist }
{
\clist_concat:ccc
{ l_@@_group_clist }
{ @@_provided_theorem__#2__group_clist }
{ l_@@_group_clist }
}
\clist_if_in:NnF \l_@@_group_clist { big }
{
\clist_if_in:NnF \l_@@_group_clist { small }
{
\clist_if_in:NnF \l_@@_group_clist { tiny }
{
\clist_put_right:Nn \l_@@_group_clist { #3 }
}
}
}
\fancythm_provide_theorem:nVVV
{ #2 }
\l_@@_group_clist
\l_@@_name_tl
\l_@@_thmtools_clist
}
% \end{macrocode}
% \end{macro}
%
%
%
% \begin{macro}{\fancythm_provide_big_theorem:nn}
% \begin{macrocode}
\cs_new:Npn \fancythm_provide_big_theorem:nn #1 #2
{
\@@_provide_package_theorem:nnn { #1 } { #2 } { big }
}
% \end{macrocode}
% \end{macro}
%
%
%
% \begin{macro}{\fancythm_provide_small_theorem:nn}
% \begin{macrocode}
\cs_new:Npn \fancythm_provide_small_theorem:nn #1 #2
{
\@@_provide_package_theorem:nnn { #1 } { #2 } { small }
}
% \end{macrocode}
% \end{macro}
%
%
%
% \begin{macro}{\fancythm_provide_tiny_theorem:nn}
% \begin{macrocode}
\cs_new:Npn \fancythm_provide_tiny_theorem:nn #1 #2
{
\@@_provide_package_theorem:nnn { #1 } { #2 } { tiny }
}
% \end{macrocode}
% \end{macro}
%
%
%
%
% \begin{macrocode}
\bool_if:NT \g_@@_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 }
% \end{macrocode}
% \begin{macrocode}
\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 }
% \end{macrocode}
% \begin{macrocode}
\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 }
% \end{macrocode}
%
%
%
% \begin{macrocode}
%</package>
% \end{macrocode}
%
% \end{implementation}
%
%
%
% \newpage
% \PrintIndex

View File

@ -1,6 +0,0 @@
@default_files = ("groupthm.dtx");
$makeindex = "makeindex -s gind.ist %O -o %D %S";
$clean_ext .= ' glo';
$clean_ext .= ' hd';
$clean_full_ext .= ' sty';
$emulate_aux = 1;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,92 @@
__HEADER__(Mdframed Styles used for fancythm package)
%%%%% This provides easy-to-use styles, especially for use with the
\RequirePackage{xkeyval}
% A simple option wether to define some default styles
__NEW_IF__(defaultstyles,false)
\DeclareOptionX{defaultstyles}{__SET_IF__(defaultstyles,true)}
__END_OPTIONS_X__
\RequirePackage{amsthm}
\RequirePackage{thmtools}
\RequirePackage{mdframed}
\RequirePackage{xcolor}
\RequirePackage{xparse}
\definecolor{gold}{RGB}{218,165,32}
\mdfsetup{skipabove=8pt,skipbelow=\topskip}
\NewDocumentCommand{\declarefancymdfstyle}{O{} m O{} }{
\if\relax\detokenize{#1}\relax
\mdfdefinestyle{\if\relax\detokenize{#3}\relax md#2margin\else #3\fi}{%
linecolor=#2,
linewidth = 2pt,
leftmargin = 0cm,
rightmargin=0cm,
rightline=false,
topline=false,
bottomline=false
}
\else
\mdfdefinestyle{\if\relax\detokenize{#3}\relax md#2marginand#1fill\else #3\fi}{%
linecolor=#2,
linewidth = 2pt,
leftmargin = 0cm,
rightmargin=0cm,
backgroundcolor=#1,
rightline=false,
topline=false,
bottomline=false
}
\fi
}
\NewDocumentCommand{\declarefancythmstyle}{O{} m O{} }{
\declarefancymdfstyle[#1]{#2}
\if\relax\detokenize{#3}\relax
\if\relax\detokenize{#1}\relax
\declaretheoremstyle[
mdframed={style=
\if\relax\detokenize{#1}\relax md#2margin\else md#2marginand#1fill\fi
},
postheadspace={0.3em},
notefont=\mdseries
]{thm#2margin}
\else
\declaretheoremstyle[
mdframed={style=
\if\relax\detokenize{#1}\relax md#2margin\else md#2marginand#1fill\fi
},
postheadspace={0.3em},
notefont=\mdseries
]{thm#2marginand#1fill}
\fi
\else
\declaretheoremstyle[
mdframed={style=
\if\relax\detokenize{#1}\relax md#2margin\else md#2marginand#1fill\fi
},
postheadspace={0.3em},
notefont=\mdseries
]{#3}
\fi
}
__IF__(defaultstyles)
\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]
\fi

View File

@ -1,6 +0,0 @@
@default_files = ("thmstyle.dtx");
$makeindex = "makeindex -s gind.ist %O -o %D %S";
$clean_ext .= ' glo';
$clean_ext .= ' hd';
$clean_full_ext .= ' sty';
$emulate_aux = 1;

View File

@ -1,412 +0,0 @@
% \iffalse meta-comment
%<*internal>
\begingroup
\input docstrip.tex
\keepsilent
\usedir{tex/latex/mkessler/thmstyle}
\askforoverwritefalse
\generate{\file{thmstyle.sty}{\from{thmstyle.dtx}{package}}}
\def\tmpa{plain}
\ifx\tmpa\fmtname\endgroup\expandafter\bye\fi
\endgroup
%</internal>
%
%% File: thmstyle.dtx
%
% Copyright (C) 2022 Maximilian Keßler
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
% license or (at your option) any later version. The latest version
% of this license is in the file
%
% https://www.latex-project.org/lppl.txt
%
% -----------------------------------------------------------------------
%<package>\ProvidesExplPackage{thmstyle}{2022/01/17}{0.0.1}{Styles for thmtools theorems.}
%
%<*driver>
\documentclass[full,kernel]{l3doc}
\begin{document}
\DocInput{\jobname.dtx}
\end{document}
%</driver>
% \fi
%
% \title{^^A
% The \pkg{thmstyle} package^^A
% }
%
% \author{^^A
% Maximilian Ke\ss ler
% }
%
% \date{Released 2022-01-12}
%
% \maketitle
%
% \begin{documentation}
%
% \begin{abstract}
% Just a convenience package that provides easy-to-use interface
% for creating \pkg{mdframed} and \pkg{thmtools} styles.
% Also provides some defaults.
% \end{abstract}
%
% \section{User macros}
%
% \begin{function}{\DeclareFancyMdfStyle}
% \begin{syntax}
% \cs{DeclareFancyMdfStyle}\oarg{background color}\marg{left margin color}\oarg{name}
% \end{syntax}
% Makes \meta{name} a \pkg{mdframed} style with given background and
% left margin color.
%
% If \meta{name} is not given, it is defaulted to
% \enquote{md\meta{left margin color}margin}
% or
% \enquote{md\meta{left margin color}and\meta{background color}fill}
% corresponding to whether the \meta{background color} has been given.
% \end{function}
%
% \begin{function}{\DeclareFancyThmStyle}
% \begin{syntax}
% \cs{DeclareFancyThmStyle}\oarg{background color}\marg{left margin color}\oarg{name}
% \end{syntax}
%
% Same as \cs{DeclareFancyMdfStyle}, but directly declares a
% style for \pkg{thmtools}.
% The naming behaves the same except \texttt{md} is replaced with \texttt{thm}
% \end{function}
%
% \section{Default styles}
%
%
% The package has the option to provide some default styles.
% These can be loaded with the |default styles| (the space is optional)
% option, when loading the package.
%
%
% \subsection{colors}
%
% \begin{variable}{gold}
%
% Golden color.
%
%
% \end{variable}
%
% We use the \pkg{xcolor package}.
%
% You can load this package with the \texttt{default styles} option.
% This will make the \pkg{thmtools} styles available given in
% \autoref{tab:default-styles}.
%
% \begin{table}[htpb]
% \centering
% \begin{tabular}{c | c | c}
% Name & Left margin color & Background color \\
% \hline
% thmredmarginandfill & red & red!8 \\
% thmorangemarginandfill & orange & orange!10 \\
% thmbluemarginandfill & blue & blue!7 \\
% thmgreenmargin & green!70!black & none \\
% thmgoldmargin & gold & none \\
% thmyellowmargin & yellow!80!orange & none \\
% thmgraymargin & gray & none \\
% thmvioletmarginandfill & violet & violet!7 \\
% thmvioletmargin & violet & none \\
% thmredmarginandbuliefill & red & blue!7 \\
% thmredmargin & red & none \\
% thmorangemarginbluefill & orange & blue!7 \\
% thmblackmargindandfill & black & violet!20!gray!20 \\
% thmblackmargin & black & none \\
% \end{tabular}
% \caption{Default styles provided by \pkg{thmstyle}}
% \label{tab:default-styles}
% \end{table}
%
% \end{documentation}
%
%
%
%
% \begin{implementation}
%
% \section{\pkg{thmstyle} implementation}
%
%
% \begin{macrocode}
%<*package>
% \end{macrocode}
%
% \begin{macrocode}
%<@@=thmstyle>
% \end{macrocode}
%
%
%
%
%
%
%
%
%
%
% \subsection{Dependencies}
%
%
%
% \begin{macrocode}
\RequirePackage{amsthm}
\RequirePackage{thmtools}
\RequirePackage{mdframed}
\RequirePackage{xcolor}
\RequirePackage{l3keys2e}
% \end{macrocode}
%
%
% \subsection{Initialization}
% \begin{variable}{\g_@@_default_styles_bool}
%
% Indicates whether the package will provide default styles.
%
% \begin{macrocode}
\bool_new:N \g_@@_default_styles_bool
% \end{macrocode}
% \end{variable}
%
%
%
%
% \begin{variable}{gold}
% New color
% \begin{macrocode}
\definecolor{gold}{RGB}{218,165,32}
% \end{macrocode}
% \end{variable}
%
%
%
%
%
%
%
% \subsection{Package options}
%
%
%
% \begin{macrocode}
\keys_define:nn { thmstyle }
{
default styles .bool_set:N = \g_@@_default_styles_bool,
default styles .default:n = { true },
}
% \end{macrocode}
%
%
% \begin{macrocode}
\ProcessKeysOptions { thmstyle }
% \end{macrocode}
%
%
%
%
% \subsection{Private Wrappers}
%
%
% \begin{macro}{\@@_mdframed_define_style:nn, \@@_mdframed_define_style:nx}
% \begin{syntax}
% \cs{@@_mdframed_define_style:nn}\marg{key=value list}\marg{style}
% \end{syntax}
%
%
%
% \begin{macrocode}
\cs_new:Npn \@@_mdframed_define_style:nn #1 #2
{
\mdfdefinestyle{#2}{#1}
}
% \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\@@_thmtools_declare_style:nn, \@@_thmtools_declare_style:xx}
% \begin{syntax}
% \cs{@@_thmtools_declare_style:nn}\marg{key=value list}\marg{style}
% \end{syntax}
%
%
%
% \begin{macrocode}
\cs_new:Npn \@@_thmtools_declare_style:nn #1 #2
{
\declaretheoremstyle[#1]{#2}
}
\cs_generate_variant:Nn \@@_thmtools_declare_style:nn { x x }
% \end{macrocode}
% \end{macro}
%
%
% \subsection{Generation of styles}
%
% \begin{macro}{\thmstyle_declare_mdf_style:nnn}
% \begin{syntax}
% \cs{thmstyle_declare_mdf_style:nnn}\marg{style}\marg{margin color}\marg{background color}
% \end{syntax}
%
%
% \begin{macrocode}
\cs_new:Npn \thmstyle_declare_mdf_style:nnn #1 #2 #3
{
\@@_mdframed_define_style:nn
{
linecolor = #2,
linewidth = 2pt,
leftmargin = 0pt,
rightmargin = 0pt,
rightline = false,
topline = false,
bottomline = false,
backgroundcolor = #3,
skipabove = 0.7\baselineskip,
skipbelow = 0pt,
innerrightmargin = 10pt,
innerbottommargin = 5pt
}
{
#1
}
}
\cs_generate_variant:Nn \thmstyle_declare_mdf_style:nnn { x n x }
% \end{macrocode}
% \end{macro}
%
%
%
%
% \begin{macro}{\DeclareFancyMdfStyle}
% \begin{syntax}
% \cs{DeclareFancyMdfStyle}\oarg{background color}\marg{line color}\oarg{style}
% \end{syntax}
%
%
%
% \begin{macrocode}
\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
}
}
}
% \end{macrocode}
% \end{macro}
%
%
%
%
%
%
%
%
%
% \begin{macro}{\DeclareFancyThmStyle}
% \begin{syntax}
% \cs{DeclareFancyThmStyle}\oarg{background color}\marg{line color}\oarg{style}
% \end{syntax}
%
%
%
% \begin{macrocode}
\NewDocumentCommand { \DeclareFancyThmStyle } { o m o }
{
\DeclareFancyMdfStyle [ #1 ] { #2 }
\@@_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
}
}
}
}
% \end{macrocode}
% \end{macro}
%
%
% \subsection{Default styles}
%
%
% Here, we provide the default styles:
%
%
% \begin{macrocode}
\bool_if:NT \g_@@_default_styles_bool
{
\DeclareFancyThmStyle[red!8]{red}[thmredmarginandfill]
\DeclareFancyThmStyle[orange!10]{orange}[thmorangemarginandfill]
\DeclareFancyThmStyle[blue!7]{blue}[thmbluemarginandfill]
\DeclareFancyThmStyle{green!70!black}[thmgreenmargin]
\DeclareFancyThmStyle[green!10]{green!70!black}[thmgreenmarginandfill]
\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]
}
% \end{macrocode}
%
%
%
%
%
% \begin{macrocode}
%</package>
% \end{macrocode}
%
% \end{implementation}
%
%
%
% \newpage
% \PrintIndex

View File

@ -8,7 +8,7 @@ __HEADER__(Definitions of categories with automatic indexing)%% Wrapper commands
\NewDocumentCommand{\category}{ m }
{
\operatorname{\textup{\textbf{#1}}}
\operatorname{\textbf{#1}}
}
@ -41,12 +41,6 @@ __HEADER__(Definitions of categories with automatic indexing)%% Wrapper commands
}
}
\NewDocumentCommand{\MakeCategoryIndex}{ }
{
\printindex[categories]
}
\makeindex
[
name = categories,
@ -148,24 +142,3 @@ __HEADER__(Definitions of categories with automatic indexing)%% Wrapper commands
[
\translate{GrAb~(Category~description)}
]
\DeclareSimpleCategory
{ CGHaus }
[
\translate{CGHaus~(Category~description)}
]
\DeclareSimpleCategory
[
formula = S
]
{ SimplicialSet }
[
\translate{SimplicialSet~(Category~description)}
]
\DeclareCategory
[
operator = \operatorname,
formula = \Delta,
ordered = Ordinal,
description = \translate{Ordinal ~ number ~ category ~ (Category ~ description)}
]
{OrdCat}

View File

@ -30,7 +30,7 @@ __HEADER__(Faktor package that also handles cofaktors)
\raisebox{#4\ht2}{\usebox2}% Denominator
}
\DeclareDocumentCommand{\cofaktor}{s O{-0.5} m O{0.5} m}{% \newfaktor[*][#2]{#3}[#4]{#5} -> #2\#4
\DeclareDocumentCommand{\cofaktor}{s m O{-0.5} m O{0.5}}{% \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

View File

@ -10,17 +10,16 @@ __NEW_IF__(extended,false)
__END_OPTIONS_X__
%Usage: \MakeAliasesForwith\<mathcommand>{<prefix>}{<Set of letters>}
%Usage: \makealiasesforwith\<mathcommand>{<prefix>}{<Set of letters>}
% to declare commands of form \<prefix><Letter> as \<mathcommand>{<Letter>} for each
% of the specfied letters
%
% E.g. \MakeAliasesForwith\mathcal{c}{ABC} will declare
% 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\makealiasesforwith#1#2#3{
\def__PACKAGE_MACRO__(makealias)##1{
\expandafter\def\csname #2##1\endcsname{\ensuremath{#1{##1}}}
}
@ -35,11 +34,11 @@ __END_OPTIONS_X__
__IF__(basic)
\RequirePackage{amsfonts}
\MakeAliasesForwith\mathbb{}{CFKNQRZ}
\makealiasesforwith\mathbb{}{CFKNQRZ}
\fi
__IF__(extended)
\expandafter\MakeAliasesForwith\expandafter\mathcal\expandafter{\expandafter c\expandafter}\expandafter{__PACKAGE_MACRO__(all)}
\expandafter\MakeAliasesForwith\expandafter\mathfrak\expandafter{\expandafter f\expandafter}\expandafter{__PACKAGE_MACRO__(all)}
\expandafter\MakeAliasesForwith\expandafter\mathbb\expandafter{\expandafter b\expandafter}\expandafter{__PACKAGE_MACRO__(all)}
\expandafter\makealiasesforwith\expandafter\mathcal\expandafter{\expandafter c\expandafter}\expandafter{__PACKAGE_MACRO__(all)}
\expandafter\makealiasesforwith\expandafter\mathfrak\expandafter{\expandafter f\expandafter}\expandafter{__PACKAGE_MACRO__(all)}
\expandafter\makealiasesforwith\expandafter\mathbb\expandafter{\expandafter b\expandafter}\expandafter{__PACKAGE_MACRO__(all)}
\fi

View File

@ -8,7 +8,7 @@ __HEADER__(Math figures with TikZ / pgfplots / xy)
\pgfplotsset{compat=1.7}
\RequirePackage{tikz} % Plots / drawings
\usetikzlibrary{calc, intersections, through, quotes, angles, babel, positioning, snakes, decorations.markings}
\usetikzlibrary{calc, intersections, through, quotes, angles, babel, positioning, snakes}
\RequirePackage{tikz-cd} %Commutative diagrams
\RequirePackage{xparse}
@ -42,31 +42,3 @@ __HEADER__(Math figures with TikZ / pgfplots / xy)
\NewDocumentCommand\pullback{ O{dr} }{
\arrow[phantom, pos=0.45]{#1}{\pullbacksymbol}
}
%% Fix for equal arrows in tikz, see
% https://tex.stackexchange.com/questions/443017/equal-arrows-without-transparent-ends-possible-in-tikzcd
\tikzset {
double line with arrow/.style args =
{#1,#2}%
{
decorate, decoration =
{
markings,
mark = at position 0 with
{
\coordinate (ta-base-1) at (0,1pt);
\coordinate (ta-base-2) at (0,-1pt);
}
,
mark = at position 1 with
{
\draw[#1] (ta-base-1) -- (0,1pt);
\draw[#2] (ta-base-2) -- (0,-1pt);
}
}
}
}
\tikzset{Equal/.style={-,double line with arrow={-,-}}}

View File

@ -87,11 +87,9 @@ __END_OPTIONS_X__
\DeclareSimpleMathOperator{Tor}
\DeclareSimpleMathOperator{MaxSpec}
\DeclareSimpleMathOperator{Sh}
\DeclareSimpleMathOperator{PSh}
\DeclareSimpleMathOperator{Proj}
\DeclareSimpleMathOperator{QCoh}
\DeclareSimpleMathOperator{Fun}
\DeclareSimpleMathOperator{ord}
\DeclareMathOperator{\Nil}{\mathcal{N}il}
\DeclareMathOperator{\Ouv}{\mathcal{O}uv}
\DeclareMathOperator{\PreSh}{Pre-Sh}
@ -165,10 +163,6 @@ __END_OPTIONS_X__
\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}
@ -193,11 +187,6 @@ __END_OPTIONS_X__
\newcommand\abelianization{^{\ab}}
\NewDocumentCommand\set{m}
{
\left\{ #1 \right\}
}
%Taken from user egreg on
% https://tex.stackexchange.com/a/22255
\newcommand\frestriction[2]{{% we make the whole thing an ordinary symbol

View File

@ -42,4 +42,6 @@ __HEADER__(Some extra math-related symbols.)
% When dealing with chain complexes, one often uses a bullet as placeholder for the index to mean the whole chain:
\newcommand\chainbullet{\bullet}
\newcommand{\blank}{\text{--}}

View File

@ -21,25 +21,21 @@ __IF__(index)
%Emphasize \vocabulary
\RequirePackage{expl3}
\ExplSyntaxOn
\NewDocumentCommand{\vocab}{O{} m}{%
\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%
\else
\index[vocabindex]{#1} % false branch: #1 was supplied
\fi%
\fi
}
\ExplSyntaxOff
\newcommand\printvocabindex{%
\printindex[vocabindex]%
}
\NewDocumentCommand{\PrintVocabIndex}{ }
{%
\printindex[vocabindex]%
\newcommand\printvocabindex{
\printindex[vocabindex]
}
\else
\NewDocumentCommand{\vocab}{O{} m }{%
\textbf{\color{blue} #2}%
}%
\NewDocumentCommand{\vocab}{O{} m }{
\textbf{\color{blue} #2}
}
\fi

View File

@ -1,62 +0,0 @@
%MIT License
%
% Copyright (c) 2018 varkor
%
% 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. *** quiver ***
%
%
% A package for drawing commutative diagrams exported from https://q.uiver.app.
%
% This package is currently a wrapper around the `tikz-cd` package, importing necessary TikZ
% libraries, and defining a new TikZ style for curves of a fixed height.
%
% Version: 1.2.1
% Authors:
% - varkor (https://github.com/varkor)
% - AndréC (https://tex.stackexchange.com/users/138900/andr%C3%A9c)
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{quiver}[2021/01/11 quiver]
% `tikz-cd` is necessary to draw commutative diagrams.
\RequirePackage{tikz-cd}
% `amssymb` is necessary for `\lrcorner` and `\ulcorner`.
\RequirePackage{amssymb}
% `calc` is necessary to draw curved arrows.
\usetikzlibrary{calc}
% `pathmorphing` is necessary to draw squiggly arrows.
\usetikzlibrary{decorations.pathmorphing}
% A TikZ style for curved arrows of a fixed height, due to AndréC.
\tikzset{curve/.style={settings={#1},to path={(\tikztostart)
.. controls ($(\tikztostart)!\pv{pos}!(\tikztotarget)!\pv{height}!270:(\tikztotarget)$)
and ($(\tikztostart)!1-\pv{pos}!(\tikztotarget)!\pv{height}!270:(\tikztotarget)$)
.. (\tikztotarget)\tikztonodes}},
settings/.code={\tikzset{quiver/.cd,#1}
\def\pv##1{\pgfkeysvalueof{/tikz/quiver/##1}}},
quiver/.cd,pos/.initial=0.35,height/.initial=0}
% TikZ arrowhead/tail styles.
\tikzset{tail reversed/.code={\pgfsetarrowsstart{tikzcd to}}}
\tikzset{2tail/.code={\pgfsetarrowsstart{Implies[reversed]}}}
\tikzset{2tail reversed/.code={\pgfsetarrowsstart{Implies}}}
% TikZ arrow styles.
\tikzset{no body/.style={/tikz/dash pattern=on 0 off 1mm}}
\endinput

View File

@ -16,6 +16,3 @@ Field (Category description),Fields and field extensions,Körper und Körpererwe
AffVar (Category description),Affine Varieties over $k$,Affine Varietäten über $k$
Sch (Category description),Schemes and homomorphisms,Schemata und Homomorphismen
GrAb (Category description),Graded abelian groups and homomorphisms,Graduierte Gruppen und Homomorphismen
Ordinal number category (Category description),Finite ordinal numbers and order-preserving maps,Endliche Ordinalzahlen und ordnungserhaltende Abbildungen
CGHaus (Category description), Compactly generated Hausdorff spaces and continuous maps, Kompakt erzeugte Hausdorffräume und stetige Abbildungen
SimplicialSet (Category description),|Functor category $[\OrdCat, \Set]$|,|Funktorkategorie $[\OrdCat, \Set]$|

View File

@ -1,62 +0,0 @@
__HEADER__(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
}

View File

@ -1,8 +1,6 @@
__HEADER__(Declaring of math symbols with automatic indexing)
\@ifclassloaded{beamer}{}{
\RequirePackage{imakeidx}
}
\RequirePackage{imakeidx}
\RequirePackage{xparse}
% Keys used for declaring symbols
@ -35,20 +33,18 @@ __HEADER__(Declaring of math symbols with automatic indexing)
\bool_new:c { used_#2 }
\cs_new_protected:cn { symbol_#2: }
{
#4{#5}
\bool_if:cF { used_#2 }
{
\@ifclassloaded{beamer}{}{
\index[#1]
{
#7
@
$#4{#5}#6$
#3
}
}
\index[#1]
{
#7
@
$#4{#5}#6$
#3
}
\bool_gset_true:c { used_#2 }
}
#4{#5}
}
\expandafter\protected\expandafter\gdef\csname#2\endcsname
{

26
src/utils/todo.pysty Normal file
View File

@ -0,0 +1,26 @@
__HEADER__(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.}
}

View File

@ -1,148 +0,0 @@
__HEADER__(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}
}
}

View File

@ -1,34 +0,0 @@
__HEADER__(Hacky code setup for verbatim code)
__NEW_IF__(pipe,false)
\DeclareOption{pipe}{__SET_IF__(pipe,true)}
\ProcessOptions
% This is needed in general: when _ is active, we want it to expand to
% an actual _ character
\catcode`_=13
\let_\_
\catcode`_=8
\ExplSyntaxOn
\NewDocumentCommand{\code}{m}
{
\tl_set_rescan:Nnn \l_tmpa_tl
{
\char_set_catcode_active:N _
}
{ #1 }
\texttt{ \tl_use:N \l_tmpa_tl }
}
\ExplSyntaxOff
__IF__(pipe)
\catcode`|=\active
\def|#1|{
\code{#1}
}
% Do not make | active inside tables
\AddToHook{env/tabular/before}[code]{\catcode`|=12}
\AddToHook{env/tabular/after}[code]{\catcode`|=13}
\fi

View File

@ -4,10 +4,6 @@ __HEADER__(Simple enumeration package wrapper. Handles custom number setting and
\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__PACKAGE_MACRO__(drawcircle)#1{
\tikz[baseline=(char.base)]{

View File

@ -46,27 +46,33 @@ __HEADER__(Automatic references to theorems in proofs. Claim counters within pro
%%%Now, we internally got a proof and a subproof environment
%%%Make them available as 'old' variants, with their defautl behaviour
\NewDocumentEnvironment{oldproof} { }
{
__PACKAGE_MACRO__(saved_proof:w)
}
{
__PACKAGE_MACRO__(saved_endproof:)
}
\NewDocumentEnvironment{oldproof}{ o }
{
\IfValueTF { #1 }
{
__PACKAGE_MACRO__(saved_proof:w) { #1 }
}
{
__PACKAGE_MACRO__(saved_proof:w)
}
}
{
__PACKAGE_MACRO__(saved_endproof:)
}
\NewDocumentEnvironment{oldsubproof} { o }
{
\IfValueTF { #1 }
{
__PACKAGE_MACRO__(saved_subproof:n) { #1 }
}
{
__PACKAGE_MACRO__(saved_subproof:n) { \translate { Subproof } }
}
}
{
__PACKAGE_MACRO__(saved_endsubproof:)
}
\NewDocumentEnvironment{oldsubproof}{ o }
{
\IfValueTF { #1 }
{
__PACKAGE_MACRO__(saved_subproof:n) { #1 }
}
{
__PACKAGE_MACRO__(saved_subproof:n) { \translate { Subproof } }
}
}
{
__PACKAGE_MACRO__(saved_endsubproof:)
}
%%% Main implementation

View File

@ -1,26 +0,0 @@
__HEADER__(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}
\NewDocumentCommand\todoref{O{}}{
\todo[color=red!40, #1]{Add reference.}
}
\NewDocumentCommand\todoquestion{O{}}{
\todo[color=black!10, size=\tiny, #1]
}
\NewDocumentCommand\todotex{O{}}{
\todo[color=green!75!black, #1]
}
\NewDocumentCommand\todotypo{O{}}{
\todo[color=blue!40, size=\tiny, #1]{Typo corrected, double check this.}
}

View File

@ -1,11 +1,3 @@
once:
pdflatex test.tex
clean:
latexmk -C test.tex
test:
latexmk -dvi- -pdf -gg -Werror -latexoption=-interaction=nonstopmode test.tex
latexmk -c test.tex
.PHONY: once clean test

View File

@ -1,194 +1,65 @@
\documentclass[12pt]{minimal}
\usepackage{l3benchmark}
\usepackage[cache]{groupthm}
\usepackage[generate defaults = false]{fancythm}
\ExplSyntaxOn
\iow_new:N \l_my_iow
\iow_open:Nn \l_my_iow { dump.txt }
\DeclareHookRule { begindocument } { before } { before } { groupthm }
%\cs_set_eq:NN \groupthm_cache:n \__groupthm_cache_auxfile:V
%\cs_set_eq:NN \__groupthm_cache:n \use_none:n
\AddToHook { begindocument } [ before ]
{
\tl_gset:Nn \g__groupthm_lazy_auxfile_tl
{
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {numbered=no,name=\csname __fancythm_translate:n\endcsname {Assumption}}{__assumption__groups_tiny}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {numbered=no,name=\csname __fancythm_translate:n\endcsname {Exercise}}{__exercise__groups_tiny}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {numbered=no,name=\csname __fancythm_translate:n\endcsname {Goal}}{__goal__groups_tiny}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {numbered=no,name=\csname __fancythm_translate:n\endcsname {Idea}}{__idea__groups_tiny}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {numbered=no,name=\csname __fancythm_translate:n\endcsname {Info}}{__info__groups_tiny}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {numbered=no,name=\csname __fancythm_translate:n\endcsname {Intuition}}{__intuition__groups_tiny}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {numbered=no,name=\csname __fancythm_translate:n\endcsname {Note}}{__note__groups_tiny}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {numbered=no,name=\csname __fancythm_translate:n\endcsname {Observe}}{__observe__groups_tiny}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {numbered=no,name=\csname __fancythm_translate:n\endcsname {Problem}}{__problem__groups_tiny}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {numbered=no,name=\csname __fancythm_translate:n\endcsname {Property}}{__property__groups_tiny}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {numbered=no,name=\csname __fancythm_translate:n\endcsname {Recall}}{__recall__groups_tiny}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {numbered=no,name=\csname __fancythm_translate:n\endcsname {Reminder}}{__reminder__groups_tiny}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {numbered=no,name=\csname __fancythm_translate:n\endcsname {Strategy}}{__strategy__groups_tiny}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {numbered=no,name=\csname __fancythm_translate:n\endcsname {Variant}}{__variant__groups_tiny}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {numbered=no,name=\csname __fancythm_translate:n\endcsname {Warning}}{__warning__groups_tiny}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Abuse of Notation},style=thmvioletmargin}{__abuse__groups_small}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Fact},style=thmredmargin}{__fact__groups_small}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Notation},style=thmvioletmargin}{__notation__groups_small}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Oral remark},style=thmyellowmargin}{__oral__groups_small}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Orga},style=thmblackmargin}{__orga__groups_small}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Praise},style=thmgoldmargin}{__praise__groups_small}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Question},style=thmblackmarginandfill}{__question__groups_small}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Remark},style=thmyellowmargin}{__remark__groups_small}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Trivial Nonsense},style=thmyellowmargin}{__trivial__groups_small}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Assumption}$^{\dagger }$}{__assumption__groups_tiny_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Assumption}*$^{\dagger }$}{__assumption__groups_tiny_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Assumption}*}{__assumption__groups_tiny_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Exercise}$^{\dagger }$}{__exercise__groups_tiny_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Exercise}*$^{\dagger }$}{__exercise__groups_tiny_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Exercise}*}{__exercise__groups_tiny_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Goal}$^{\dagger }$}{__goal__groups_tiny_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Goal}*$^{\dagger }$}{__goal__groups_tiny_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Goal}*}{__goal__groups_tiny_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Idea}$^{\dagger }$}{__idea__groups_tiny_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Idea}*$^{\dagger }$}{__idea__groups_tiny_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Idea}*}{__idea__groups_tiny_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Info}$^{\dagger }$}{__info__groups_tiny_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Info}*$^{\dagger }$}{__info__groups_tiny_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Info}*}{__info__groups_tiny_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Intuition}$^{\dagger }$}{__intuition__groups_tiny_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Intuition}*$^{\dagger }$}{__intuition__groups_tiny_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Intuition}*}{__intuition__groups_tiny_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Note}$^{\dagger }$}{__note__groups_tiny_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Note}*$^{\dagger }$}{__note__groups_tiny_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Note}*}{__note__groups_tiny_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Observe}$^{\dagger }$}{__observe__groups_tiny_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Observe}*$^{\dagger }$}{__observe__groups_tiny_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Observe}*}{__observe__groups_tiny_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Problem}$^{\dagger }$}{__problem__groups_tiny_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Problem}*$^{\dagger }$}{__problem__groups_tiny_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Problem}*}{__problem__groups_tiny_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Property}$^{\dagger }$}{__property__groups_tiny_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Property}*$^{\dagger }$}{__property__groups_tiny_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Property}*}{__property__groups_tiny_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Recall}$^{\dagger }$}{__recall__groups_tiny_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Recall}*$^{\dagger }$}{__recall__groups_tiny_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Recall}*}{__recall__groups_tiny_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Reminder}$^{\dagger }$}{__reminder__groups_tiny_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Reminder}*$^{\dagger }$}{__reminder__groups_tiny_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Reminder}*}{__reminder__groups_tiny_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Strategy}$^{\dagger }$}{__strategy__groups_tiny_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Strategy}*$^{\dagger }$}{__strategy__groups_tiny_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Strategy}*}{__strategy__groups_tiny_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Variant}$^{\dagger }$}{__variant__groups_tiny_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Variant}*$^{\dagger }$}{__variant__groups_tiny_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Variant}*}{__variant__groups_tiny_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Warning}$^{\dagger }$}{__warning__groups_tiny_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Warning}*$^{\dagger }$}{__warning__groups_tiny_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,numbered=no,name=\csname __fancythm_translate:n\endcsname {Warning}*}{__warning__groups_tiny_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Abuse of Notation}$^{\dagger }$,style=thmvioletmargin}{__abuse__groups_small_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Abuse of Notation}*$^{\dagger }$,style=thmvioletmargin}{__abuse__groups_small_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Abuse of Notation}*,style=thmvioletmargin}{__abuse__groups_small_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Fact}$^{\dagger }$,style=thmredmargin}{__fact__groups_small_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Fact}*$^{\dagger }$,style=thmredmargin}{__fact__groups_small_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Fact}*,style=thmredmargin}{__fact__groups_small_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Notation}$^{\dagger }$,style=thmvioletmargin}{__notation__groups_small_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Notation}*$^{\dagger }$,style=thmvioletmargin}{__notation__groups_small_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Notation}*,style=thmvioletmargin}{__notation__groups_small_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Oral remark}$^{\dagger }$,style=thmyellowmargin}{__oral__groups_small_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Oral remark}*$^{\dagger }$,style=thmyellowmargin}{__oral__groups_small_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Oral remark}*,style=thmyellowmargin}{__oral__groups_small_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Orga}$^{\dagger }$,style=thmblackmargin}{__orga__groups_small_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Orga}*$^{\dagger }$,style=thmblackmargin}{__orga__groups_small_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Orga}*,style=thmblackmargin}{__orga__groups_small_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Praise}$^{\dagger }$,style=thmgoldmargin}{__praise__groups_small_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Praise}*$^{\dagger }$,style=thmgoldmargin}{__praise__groups_small_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Praise}*,style=thmgoldmargin}{__praise__groups_small_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Question}$^{\dagger }$,style=thmblackmarginandfill}{__question__groups_small_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Question}*$^{\dagger }$,style=thmblackmarginandfill}{__question__groups_small_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Question}*,style=thmblackmarginandfill}{__question__groups_small_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Remark}$^{\dagger }$,style=thmyellowmargin}{__remark__groups_small_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Remark}*$^{\dagger }$,style=thmyellowmargin}{__remark__groups_small_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Remark}*,style=thmyellowmargin}{__remark__groups_small_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Trivial Nonsense}$^{\dagger }$,style=thmyellowmargin}{__trivial__groups_small_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Trivial Nonsense}*$^{\dagger }$,style=thmyellowmargin}{__trivial__groups_small_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=sublevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Trivial Nonsense}*,style=thmyellowmargin}{__trivial__groups_small_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,name=\csname __fancythm_translate:n\endcsname {Corollary},style=thmredmarginandfill}{__corollary__groups_big}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,name=\csname __fancythm_translate:n\endcsname {Definition},style=thmbluemarginandfill}{__definition__groups_big}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,name=\csname __fancythm_translate:n\endcsname {Example},style=thmgreenmargin}{__example__groups_big}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,name=\csname __fancythm_translate:n\endcsname {Lemma},style=thmorangemarginandfill}{__lemma__groups_big}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,name=\csname __fancythm_translate:n\endcsname {Proposition and Definition},style=thmredmarginbluefill}{__propositiondef__groups_big}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,name=\csname __fancythm_translate:n\endcsname {Proposition},style=thmredmarginandfill}{__proposition__groups_big}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,name=\csname __fancythm_translate:n\endcsname {Theorem and Definition},style=thmredmarginbluefill}{__theoremdef__groups_big}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,name=\csname __fancythm_translate:n\endcsname {Theorem},style=thmredmarginandfill}{__theorem__groups_big}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Corollary}$^{\dagger }$,style=thmredmarginandfill}{__corollary__groups_big_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Corollary}*$^{\dagger }$,style=thmredmarginandfill}{__corollary__groups_big_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Corollary}*,style=thmredmarginandfill}{__corollary__groups_big_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Definition}$^{\dagger }$,style=thmbluemarginandfill}{__definition__groups_big_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Definition}*$^{\dagger }$,style=thmbluemarginandfill}{__definition__groups_big_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Definition}*,style=thmbluemarginandfill}{__definition__groups_big_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Example}$^{\dagger }$,style=thmgreenmargin}{__example__groups_big_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Example}*$^{\dagger }$,style=thmgreenmargin}{__example__groups_big_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Example}*,style=thmgreenmargin}{__example__groups_big_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Lemma}$^{\dagger }$,style=thmorangemarginandfill}{__lemma__groups_big_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Lemma}*$^{\dagger }$,style=thmorangemarginandfill}{__lemma__groups_big_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Lemma}*,style=thmorangemarginandfill}{__lemma__groups_big_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Proposition and Definition}$^{\dagger }$,style=thmredmarginbluefill}{__propositiondef__groups_big_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Proposition and Definition}*$^{\dagger }$,style=thmredmarginbluefill}{__propositiondef__groups_big_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Proposition and Definition}*,style=thmredmarginbluefill}{__propositiondef__groups_big_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Proposition}$^{\dagger }$,style=thmredmarginandfill}{__proposition__groups_big_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Proposition}*$^{\dagger }$,style=thmredmarginandfill}{__proposition__groups_big_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Proposition}*,style=thmredmarginandfill}{__proposition__groups_big_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Theorem and Definition}$^{\dagger }$,style=thmredmarginbluefill}{__theoremdef__groups_big_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Theorem and Definition}*$^{\dagger }$,style=thmredmarginbluefill}{__theoremdef__groups_big_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Theorem and Definition}*,style=thmredmarginbluefill}{__theoremdef__groups_big_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Theorem}$^{\dagger }$,style=thmredmarginandfill}{__theorem__groups_big_dagger}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Theorem}*$^{\dagger }$,style=thmredmarginandfill}{__theorem__groups_big_dagger_star}
\csname __groupthm_thmtools_declare_theorem:nn\endcsname {sibling=toplevel,sibling=sublevel,name=\csname __fancythm_translate:n\endcsname {Theorem}*,style=thmredmarginandfill}{__theorem__groups_big_star}
\csname __groupthm_define_family_options:nnnn\endcsname {abuse}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{small}
\csname __groupthm_define_family_options:nnnn\endcsname {assumption}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{tiny}
\csname __groupthm_define_family_options:nnnn\endcsname {corollary}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{big}
\csname __groupthm_define_family_options:nnnn\endcsname {definition}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{big}
\csname __groupthm_define_family_options:nnnn\endcsname {example}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{big}
\csname __groupthm_define_family_options:nnnn\endcsname {exercise}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{tiny}
\csname __groupthm_define_family_options:nnnn\endcsname {fact}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{small}
\csname __groupthm_define_family_options:nnnn\endcsname {goal}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{tiny}
\csname __groupthm_define_family_options:nnnn\endcsname {idea}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{tiny}
\csname __groupthm_define_family_options:nnnn\endcsname {info}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{tiny}
\csname __groupthm_define_family_options:nnnn\endcsname {intuition}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{tiny}
\csname __groupthm_define_family_options:nnnn\endcsname {lemma}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{big}
\csname __groupthm_define_family_options:nnnn\endcsname {notation}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{small}
\csname __groupthm_define_family_options:nnnn\endcsname {note}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{tiny}
\csname __groupthm_define_family_options:nnnn\endcsname {observe}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{tiny}
\csname __groupthm_define_family_options:nnnn\endcsname {oral}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{small}
\csname __groupthm_define_family_options:nnnn\endcsname {orga}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{small}
\csname __groupthm_define_family_options:nnnn\endcsname {praise}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{small}
\csname __groupthm_define_family_options:nnnn\endcsname {problem}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{tiny}
\csname __groupthm_define_family_options:nnnn\endcsname {property}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{tiny}
\csname __groupthm_define_family_options:nnnn\endcsname {propositiondef}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{big}
\csname __groupthm_define_family_options:nnnn\endcsname {proposition}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{big}
\csname __groupthm_define_family_options:nnnn\endcsname {question}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{small}
\csname __groupthm_define_family_options:nnnn\endcsname {recall}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{tiny}
\csname __groupthm_define_family_options:nnnn\endcsname {remark}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{small}
\csname __groupthm_define_family_options:nnnn\endcsname {reminder}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{tiny}
\csname __groupthm_define_family_options:nnnn\endcsname {strategy}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{tiny}
\csname __groupthm_define_family_options:nnnn\endcsname {theoremdef}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{big}
\csname __groupthm_define_family_options:nnnn\endcsname {theorem}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{big}
\csname __groupthm_define_family_options:nnnn\endcsname {trivial}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{small}
\csname __groupthm_define_family_options:nnnn\endcsname {variant}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{tiny}
\csname __groupthm_define_family_options:nnnn\endcsname {warning}{!s!t+}{\IfBooleanT {#1}{\AddTheoremToGroup {star}}\IfBooleanT {#2}{\AddTheoremToGroup {dagger}}}{tiny}
}
}
\ExplSyntaxOff
\documentclass[a4paper, german]{article}
\usepackage[lecture numbers = false, number all, number small environments = section]{mkessler-fancythm}
\begin{document}
\begin{theorem}[Name]\label{test}
test
\end{theorem}
\begin{definition**}
test
\end{definition**}
\begin{abuse}
\end{abuse}
\ref{test}
\begin{theorem}
test
\end{theorem}
\mdfsetup{skipabove=8pt,skipbelow=\topskip, bottomline=true}
\begin{lemma}
\end{lemma}
\begin{example}
\end{example}
\begin{praise}
test
\end{praise}
\begin{remark}
test
\end{remark}
\begin{notation}
test
\end{notation}
\begin{abuse}
test
\end{abuse}
\begin{theoremdef}
\end{theoremdef}
\begin{fact}
test
\end{fact}
\begin{orga}
\end{orga}
\begin{question}
\end{question}
\begin{oral}
test
\end{oral}
nothing
\end{document}

Some files were not shown because too many files have changed in this diff Show More