summaryrefslogtreecommitdiff
path: root/macros/latex/contrib
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-04-16 03:01:17 +0000
committerNorbert Preining <norbert@preining.info>2020-04-16 03:01:17 +0000
commit7412eb57b148d2ecd77d0291c97fb05bea8efbb0 (patch)
treeed628b0a7a0eb72a835f5462808f900e850d2dc8 /macros/latex/contrib
parente768cc604852d6fe8821592cea67835f67eab0db (diff)
CTAN sync 202004160301
Diffstat (limited to 'macros/latex/contrib')
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/README.md2
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamercolorthemefocus.sty2
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamerfontthemefocus.sty2
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamerinnerthemefocus.sty3
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamerouterthemefocus.sty14
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamerthemefocus.sty4
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/demo.pdfbin324539 -> 324539 bytes
-rw-r--r--macros/latex/contrib/ccool/README.md (renamed from macros/latex/contrib/oops/README.md)6
-rw-r--r--macros/latex/contrib/ccool/ccool.dtx1692
-rw-r--r--macros/latex/contrib/ccool/ccool.pdfbin0 -> 722772 bytes
-rw-r--r--macros/latex/contrib/oops/oops.dtx789
-rw-r--r--macros/latex/contrib/oops/oops.pdfbin565727 -> 0 bytes
12 files changed, 1709 insertions, 805 deletions
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/README.md b/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/README.md
index 1a6155d4c7..154ae8123a 100644
--- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/README.md
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/README.md
@@ -1,4 +1,4 @@
-# Focus v2.5
+# Focus v2.6
A presentation theme for LaTeX Beamer that aims at a clean and minimalist design,
so to minimize distractions and put the focus directly on the content.
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamercolorthemefocus.sty b/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamercolorthemefocus.sty
index 4a45cecba1..80dd314b67 100644
--- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamercolorthemefocus.sty
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamercolorthemefocus.sty
@@ -1,4 +1,4 @@
-% Copyright (C) 2018-2019 Pasquale Claudio Africa and the LaTeX community.
+% Copyright (C) 2018-2020 Pasquale Claudio Africa and the LaTeX community.
% A full list of contributors can be found at
%
% https://github.com/elauksap/focus-beamertheme
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamerfontthemefocus.sty b/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamerfontthemefocus.sty
index 3a956c6154..380af92254 100644
--- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamerfontthemefocus.sty
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamerfontthemefocus.sty
@@ -1,4 +1,4 @@
-% Copyright (C) 2018-2019 Pasquale Claudio Africa and the LaTeX community.
+% Copyright (C) 2018-2020 Pasquale Claudio Africa and the LaTeX community.
% A full list of contributors can be found at
%
% https://github.com/elauksap/focus-beamertheme
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamerinnerthemefocus.sty b/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamerinnerthemefocus.sty
index a753dacf36..e0317d51af 100644
--- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamerinnerthemefocus.sty
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamerinnerthemefocus.sty
@@ -1,4 +1,4 @@
-% Copyright (C) 2018-2019 Pasquale Claudio Africa and the LaTeX community.
+% Copyright (C) 2018-2020 Pasquale Claudio Africa and the LaTeX community.
% A full list of contributors can be found at
%
% https://github.com/elauksap/focus-beamertheme
@@ -84,6 +84,7 @@
\vspace*{0pt plus 100fill}
\addtocounter{framenumber}{-1}
+ \addtocounter{realframenumber}{-1}
}
% Section page.
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamerouterthemefocus.sty b/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamerouterthemefocus.sty
index 26afe6799e..bbf893eeaa 100644
--- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamerouterthemefocus.sty
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamerouterthemefocus.sty
@@ -1,4 +1,4 @@
-% Copyright (C) 2018-2019 Pasquale Claudio Africa and the LaTeX community.
+% Copyright (C) 2018-2020 Pasquale Claudio Africa and the LaTeX community.
% A full list of contributors can be found at
%
% https://github.com/elauksap/focus-beamertheme
@@ -37,11 +37,12 @@
\RequirePackage{etoolbox} % \BeforeBeginEnvironment.
\RequirePackage{tikz}
+\newcounter{realframenumber}
% FRAMETITLE TEMPLATES. --------------------------------------------------------
\defbeamertemplate*{frametitle}{focus}{%
% If not title page.
- \ifnum\value{framenumber}>0%
+ \ifnum\value{realframenumber}>0%
\vspace{-1pt}%
\begin{beamercolorbox}[wd=\paperwidth,leftskip=0.55cm,rightskip=0.55cm,sep=0.2cm]{frametitle}%
\strut\insertframetitle\strut%
@@ -52,7 +53,7 @@
% Plain header.
\defbeamertemplate*{frametitle}{plain}{%
% If not title page.
- \ifnum\value{framenumber}>0%
+ \ifnum\value{realframenumber}>0%
\vspace{-1pt}%
\begin{beamercolorbox}[wd=\paperwidth,leftskip=0.55cm,rightskip=0.55cm,sep=0.2cm,ignorebg]{frametitle}%
\strut%
@@ -78,8 +79,8 @@
\addtolength{\focus@pbar@rightoffset}{1.5em}%
%
% If not title page.
- \ifnum\c@framenumber>0%
- \ifnum\c@framenumber<\inserttotalframenumber%
+ \ifnum\value{realframenumber}>0%
+ \ifnum\value{framenumber}<\inserttotalframenumber%
\begin{tikzpicture}[inner xsep=0.5em, inner ysep=0.5ex]\usebeamerfont{footline}
\pgfmathsetmacro{\focus@pbar@progress}%
{(\paperwidth-\focus@pbar@leftoffset-\focus@pbar@rightoffset)*(\insertframenumber/\inserttotalframenumber)}
@@ -119,7 +120,7 @@
\addtolength{\focus@pbar@rightoffset}{1.5em}%
%
% If not title page.
- \ifnum\c@framenumber>0%
+ \ifnum\value{realframenumber}>0%
\begin{tikzpicture}[inner xsep=0.5em, inner ysep=0.5ex]
\clip (0,0) rectangle ++(\paperwidth,\the\focus@pbar@height);
\fill[footline.bg] (0,0) rectangle ++(\paperwidth,\the\focus@pbar@height);
@@ -169,6 +170,7 @@
% HOOKS FOR CREATING FRAMES. ---------------------------------------------------
\BeforeBeginEnvironment{frame}{%
+ \stepcounter{realframenumber}
\setbeamertemplate{background canvas}[focus]%
\setbeamertemplate{frametitle}[focus]%
%
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamerthemefocus.sty b/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamerthemefocus.sty
index 134cd0596b..6da4b05683 100644
--- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamerthemefocus.sty
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/beamerthemefocus.sty
@@ -1,4 +1,4 @@
-% Copyright (C) 2018-2019 Pasquale Claudio Africa and the LaTeX community.
+% Copyright (C) 2018-2020 Pasquale Claudio Africa and the LaTeX community.
% A full list of contributors can be found at
%
% https://github.com/elauksap/focus-beamertheme
@@ -19,7 +19,7 @@
% along with beamerthemefocus. If not, see <http://www.gnu.org/licenses/>.
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{beamerthemefocus}[2019/11/20 v2.5 Focus Beamer theme]
+\ProvidesPackage{beamerthemefocus}[2020/04/15 v2.6 Focus Beamer theme]
\mode<presentation>
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/demo.pdf b/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/demo.pdf
index bd40c54745..d4eafee0dc 100644
--- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/demo.pdf
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/demo.pdf
Binary files differ
diff --git a/macros/latex/contrib/oops/README.md b/macros/latex/contrib/ccool/README.md
index c7907f4b51..79ddcae18f 100644
--- a/macros/latex/contrib/oops/README.md
+++ b/macros/latex/contrib/ccool/README.md
@@ -1,9 +1,7 @@
----------------------------------------------------------------
-#### oops --- An object oriented practical scribe's package,
-#### typically for typesetting math
-- Source repository: https://github.com/rogard/oops
+##### ccool --- A tool for encoding mathematical notation
+- Source repository: https://github.com/rogard/ccool
- Released under the LaTeX Project Public License v1.3c or later
- See http://www.latex-project.org/lppl.txt
----------------------------------------------------------------
-
diff --git a/macros/latex/contrib/ccool/ccool.dtx b/macros/latex/contrib/ccool/ccool.dtx
new file mode 100644
index 0000000000..4dd2d47e22
--- /dev/null
+++ b/macros/latex/contrib/ccool/ccool.dtx
@@ -0,0 +1,1692 @@
+% \iffalse meta-comment
+% !TEX program = pdfLaTeX
+%<*internal>
+\iffalse
+%</internal>
+%<*readme>
+----------------------------------------------------------------
+##### ccool --- A tool for encoding mathematical notation
+- Source repository: https://github.com/rogard/ccool
+- Released under the LaTeX Project Public License v1.3c or later
+- See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+%</readme>
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+\expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+----------------------------------------------------------------------------
+ccool --- A tool for encoding mathematical notation
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------------------
+
+\endpreamble
+\postamble
+
+Copyright (C) 2020 by Erwann Rogard
+
+This work 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:
+
+http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+Erwann Rogard.
+
+This work consists of the file ccool.dtx and the derived files:
+ccool.sty, and ccool.pdf.
+
+\endpostamble
+\generate{
+ \file{\jobname.sty}{\from{\jobname.dtx}{package}}
+}
+%</install>
+%<install> \endbatchfile
+%<*internal>
+\generate{
+ \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\nopreamble\nopostamble
+\generate{
+ \file{README.md}{\from{\jobname.dtx}{readme}}
+}
+\ifx\fmtname\nameofplainTeX
+\expandafter\endbatchfile
+\else
+\expandafter\endgroup
+\fi
+%</internal>
+%<package> \NeedsTeXFormat{LaTeX2e}[2020/02/02]
+%<package> \RequirePackage{etoolbox}[2019/09/21]
+%<package> \RequirePackage{l3keys2e}[2020/03/06]
+%<package> \RequirePackage{xparse}[2020/03/06]
+%<package> \ProvidesExplPackage
+%<package> {ccool} % Package name
+%<package> {2020/04/15} % Release date
+%<package> {2.0} % Release version
+%<package> {cool --- A tool for encoding mathematical notation} % Description
+%
+%<*driver>
+\documentclass[full]{l3doc}
+\listfiles
+\usepackage{amsmath, amssymb}
+\usepackage[english]{babel}
+\usepackage{bookmark}
+\usepackage{ccool}
+\usepackage{fancyvrb}
+\usepackage{fvextra}% csquotes should be loaded after fvextra
+\usepackage[T1]{fontenc}% \char`[
+\usepackage{pdfpages}
+\usepackage{tabto}
+\usepackage{tcolorbox}
+\tcbuselibrary{listings, breakable}
+\makeatletter
+\newcommand*{\docsetnameref}{\def\@currentlabelname}%https://tex.stackexchange.com/questions/537751
+\makeatother
+\ExplSyntaxOn
+\tl_gset:Nn \partname {Part}
+\ExplSyntaxOff
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+% ^^A\AtEndDocument { \PrintChanges \PrintIndex }
+\ExplSyntaxOn
+\providecommand\docarg[1]{\texttt{#1}} % fun[param] (macro) vs fun[arg] (eval)
+\providecommand\docargnoval{\c_novalue_tl}
+\providecommand\docassign[2]{#1~$\leftarrow$~#2}
+\providecommand\docccept[1]{\textit{#1}}
+\providecommand\doccceptbool{boolean}
+\providecommand\doccceptcode{code}
+\providecommand\doccceptint{integer}
+\providecommand\doccceptgroup{local~group}
+\providecommand\doccceptkvl{keyval~list}
+\providecommand\doccceptpath{path}
+\providecommand\doccceptpre{preamble}
+\providecommand\docccepttok{token}
+\providecommand\docenvdoc{\env{document}}
+\providecommand\docdefaultfor{default~for~}
+\providecommand\doceval[1]{\texttt{\char`\{}#1\texttt{\char`\}}}
+\providecommand\docfillblank{\begin{minipage}[t]{\linewidth}\end{minipage}}
+\providecommand\docissuedo{Do: }
+\providecommand\docissuedont{Don't: }
+\providecommand\docissuesymp{Symptom: }
+\providecommand\doclist[1]{Listing~\autoref{listing:#1}}
+\providecommand\docopto[1]{\texttt{[}#1\texttt{]}}
+\providecommand\docopte[2]{\texttt{#1}\doceval{#2}}
+\providecommand\docoptd[1]{\texttt{\textless}#1\texttt{\textgreater}}
+\providecommand\docpipe{\textbar}
+\cs_new:Nn \__ccool_docu:n{\MakeUppercase #1}
+\providecommand\docstep[1]{step~\ref{step:#1}}
+\providecommand\docsee{See:~}
+\providecommand\docccepttl{token~list}
+\providecommand\doctip{\noindent\textbf{Tip}:~}
+\providecommand\docU[1]{\exp_args:Nx \__ccool_docu:n{#1}}
+\providecommand\docvers[2]{v#1.#2}
+\providecommand\docwarn{\noindent\textbf{Warning}:~}
+\providecommand\pkgparde{kvl$_{1}$}%Adef
+\providecommand\pkgparhe{tl$_{2}$}%head
+\providecommand\pkgparin{code$_{1}$}%inner
+\providecommand\pkgparna{tl$_{1}$}%name
+\providecommand\pkgparou{code$_{2}$}%outer
+\providecommand\pkgpars{\Arg{\pkgparsi}\docpipe\Arg{\pkgparsi}\Arg{\pkgparsii}\docpipe\Arg{\pkgparsi}\Arg{\pkgparsii}\Arg{\pkgparsiii}}%separ
+\providecommand\pkgparsi{tl$_{3}$}
+\providecommand\pkgparsii{tl$_{4}$}
+\providecommand\pkgparsiii{tl$_{5}$}
+\providecommand\pkgparta{tl$_{6}$}%tail
+\providecommand\pkgkey{key$_{i}$}
+\providecommand\pkgval{val$_{i}$}
+\providecommand\pkgoptex{\docarg{Expans}}
+\providecommand\pkgoptfi{\docarg{File}}
+\providecommand\pkgoptin{\docarg{Inner}}
+\providecommand\pkgoptna{\docarg{Name}}
+\providecommand\pkgoptnad{\docarg{Math}}%default
+\providecommand\pkgoptou{\docarg{Outer}}
+\providecommand\pkgoptwr{\docarg{Write}}
+\providecommand\pkgoptse{\docarg{Separ}}
+\providecommand\pkgobj[1]{object identified by #1}
+\providecommand\pkgoptions{kvl0}
+\providecommand\pkgsep[1]{\Arg{#1}}
+\providecommand\pkgwrite{\cs{Ccool}\docarg{\meta{\pkgparna}}\docopte{i}{\meta{\pkgparin}}\Arg{\pkgparde}}
+\ExplSyntaxOff
+\begin{document}
+\DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \GetFileInfo{\jobname.sty}
+%^^A\begin{documentation}
+% \title{The \pkg{ccool} package\thanks{^^A
+% This file describes version \fileversion, last revised \filedate.^^A
+% }^^A
+% }
+% \author{Erwann Rogard\thanks{firstname dot lastname AusTria gmail dot com}}
+%
+% \date{Released \filedate}
+%
+% \maketitle
+%
+% \begin{abstract} \pkg{ccool} stands for Custom COntent Oriented for \LaTeX,
+% a concept pioneered by \pkg{cool}\cite{cool}\footnote{Whereas \pkg{cool} provided predefined macros, \pkg{ccool} is tool for making macros, hence ``custom''.}.
+% This is done using a minimalist interface built upon \pkg{xparse}\cite{xparse}.\nobreak
+% ~Specifically, \nameref{usage:cs:ccool}\docoptd{\meta{name}} begins a series of instructions
+% alternating between `text' and macro definitions, that themselves optionally expand using predefined or inline rules.
+% For example,\begin{Verbatim}[breaklines=true]
+% \Ccool<Math>[Let~]
+% i{\mathbb{#1}}{ Nat = N, Real = R }*s{{~\rm{and}~}}
+% [~denote the natural and real numbers.]{}
+% \end{Verbatim}
+% expands to: ``\Ccool<Math>[Let~]i{\mathbb{#1}}{Nat = N, Real = R}*s{{~\rm{and}~}}[~denote the natural and real numbers.]{}''
+% As a side effect, |$\Nat<Math>$|~encodes~``$\Nat<Math>$'' (and likewise for |\Real|).
+% \pkgoptnad~being the default for \meta{name}, |<Math>| can be dropped. In conjunction with
+% lamba expressions, this tool allows for encoding the way certain mathematical objects, such as functions, should be formatted.
+% Optionally, the macros can be written to a file, and read, which
+% can be useful for typesetting documents sharing the same notation.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \part{Usage}\label{part:usage}
+% \VerbatimFootnotes
+%
+% \setcounter{section}{0}
+% \label{usage:conv}
+% \addcontentsline{toc}{section}{\protect\numberline{\thesection}Convention}
+% \section*{Convention}
+% \begin{enumerate}
+% \item Loosely, those of \cite{interface3} and \cite{xparse}, for example as to the meaning of \meta{\docccepttl}.
+% \item If unspecified, the environment in which a macro must be declared is \docenvdoc.
+% \end{enumerate}
+%
+% \refstepcounter{section}
+% \label{usage:load}
+% \addcontentsline{toc}{section}{\protect\numberline{\thesection}Loading the package}
+%
+% \begin{function}{\usepackage}
+% \begin{syntax}
+% \cs{usepackage}\doceval{\pkg{ccool}}
+% \end{syntax}
+% \begin{description}
+% \item[Requirement]\docfillblank
+% \begin{enumerate}
+% \item \file{ccool.sty} is in the path of the \LaTeX~engine. See \autoref{part:other}, \autoref{other:support}.
+% \item Declare it in the~\docccept{\doccceptpre}
+% \end{enumerate}
+% \end{description}
+% \end{function}
+%
+% \leavevmode
+% \refstepcounter{section}
+% \docsetnameref{\cs{Ccool}}
+% \label{usage:cs:ccool}
+% \addcontentsline{toc}{section}{\protect\numberline{\thesection}\cs{Ccool}}
+% \setcounter{subsection}{0}
+% \begin{function}{\Ccool}
+% \begin{syntax}
+% \cs{Ccool}\docoptd{\meta{\pkgparna}}
+% \docopto{\meta{\pkgparhe}}
+% \docopte{i}{\meta{\pkgparin}}
+% \Arg{\pkgparde}
+% |+|
+% |*|
+% \docopte{s}{\pkgpars}
+% \docopte{o}{\meta{\pkgparou}}
+% \docopto{\meta{\pkgparta}}
+% \end{syntax}
+% \begin{description}
+% \item[Requirement] \meta{\pkgparde} is specified (all others optional).
+% \end{description}
+% \end{function}
+%
+% \leavevmode
+% \refstepcounter{subsection}
+% \docsetnameref{\meta{\pkgparna}}
+% \label{usage:par:na}
+% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docoptd{\meta{\pkgparna}}}
+% \DescribeOption{\meta{\pkgparna}}
+% \begin{description}
+% \item[Default] \nameref{usage:opt:na}
+% \item[Example] \pkgoptnad, |ModelA|, |ModelB|
+% \item[Semantics] Identifies a group of macros
+% \end{description}
+%
+% \leavevmode
+% \refstepcounter{subsection}
+% \docsetnameref{\meta{\pkgparhe}}
+% \label{usage:par:he}
+% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docopto{\meta{\pkgparhe}}}
+% \DescribeOption{\meta{\pkgparhe}}
+% \begin{description}
+% \item[Example]|Let~|
+% \item[Semantics] Expands~\meta{\pkgparhe}
+% \end{description}
+%
+% \leavevmode
+% \refstepcounter{subsection}
+% \docsetnameref{\meta{\pkgparin}}
+% \label{usage:par:in}
+% \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docopte{i}{\meta{\pkgparin}}}
+% \DescribeOption{\meta{\pkgparin}}
+%
+% \begin{description}
+% \item[Default] \nameref{usage:opt:in}
+% \item[Example] |\mathbb{#1}|
+% \item[Semantics] \docfillblank
+% \begin{enumerate}[label=\emph{\arabic*)}]
+% \item \docassign{\meta{\pkgval} }
+% { \meta{\pkgparin} applied to \meta{\pkgval} }\label{step:val}
+% \end{enumerate}
+% \end{description}
+%
+% \leavevmode
+% \refstepcounter{subsection}
+% \docsetnameref{\meta{\pkgparde}}
+% \label{usage:par:de}
+% \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\Arg{\pkgparde}}
+% \DescribeOption{\meta{\pkgparde}}
+% \begin{description}
+% \item[Example] |Elems={\omega_1, \dots, \omega_n}, Sample=\Omega|
+% \item[Semantics]\docfillblank
+% \begin{enumerate}[label=\emph{\arabic*)}]
+% \setcounter{enumi}{1}
+% \item \docassign{ \cs{\meta{\pkgkey}}\docoptd{\meta{\pkgparna}}}{\meta{val_i}} defined in \docstep{val},
+% using \nameref{usage:opt:ex} for expansion. \label{step:key}
+% \item If \nameref{usage:opt:wr}, writes the input used by \docstep{key} to \nameref{usage:opt:fi}\label{step:write}
+% \end{enumerate}
+% \end{description}
+%
+% \leavevmode
+% \refstepcounter{subsection}
+% \docsetnameref{parameter \docarg{+}}
+% \label{usage:par:appto}
+% \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docarg{+}}
+% \DescribeOption{+}
+% \begin{description}
+% \item[Semantics] Appends \docstep{key} and \docstep{write} to \nameref{usage:cs:hook}
+% \footnote{Needed inside a \docccept{\doccceptgroup}, for the side effect of \cs{Ccool} to persist thereafter.}
+% \end{description}
+%
+% \leavevmode
+% \refstepcounter{subsection}
+% \docsetnameref{parameter \docarg{*}}
+% \label{usage:par:expand}
+% \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docarg{*}}
+% \DescribeOption{*}
+%
+% \begin{description}
+% \item[Semantics]\docfillblank
+% \begin{enumerate}
+% \setcounter{enumi}{3}
+% \item Expands~\nameref{usage:par:ou} applied to the list created in \docstep{val},
+% using the separator specified by \nameref{usage:par:si}, \nameref{usage:par:sii}, \nameref{usage:par:siii}.
+% \end{enumerate}
+% \end{description}
+%
+% \leavevmode
+% \refstepcounter{subsection}
+% \docsetnameref{separators' parameter}
+% \label{usage:par:s}
+% \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docopte{s}{\pkgpars}}
+%
+% \leavevmode
+% \refstepcounter{subsubsection}
+% \docsetnameref{\meta{\pkgparsi}}
+% \label{usage:par:si}
+% \DescribeOption{\meta{\pkgparsi}}
+% \begin{description}
+% \item[Default] \nameref{usage:opt:se}
+% \item[Example] |{~\in~}|
+% \end{description}
+%
+% \leavevmode
+% \refstepcounter{subsubsection}
+% \docsetnameref{\meta{\pkgparsii}}
+% \label{usage:par:sii}
+% \DescribeOption{\meta{\pkgparsii}}
+% \begin{description}
+% \item[Default] \nameref{usage:opt:se}
+% \item[Example] |{,~}|
+% \end{description}
+%
+% \leavevmode
+% \refstepcounter{subsubsection}
+% \docsetnameref{\meta{\pkgparsiii}}
+% \label{usage:par:siii}
+% \DescribeOption{\meta{\pkgparsiii}}
+% \begin{description}
+% \item[Default] \nameref{usage:opt:se}
+% \item[Example] |{~\&~}|
+% \end{description}
+%
+% \leavevmode
+% \refstepcounter{subsection}
+% \docsetnameref{\meta{\pkgparou}}
+% \label{usage:par:ou}
+% \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docopte{o}{\meta{\pkgparou}}}
+% \DescribeOption{\meta{\pkgparou}}
+% \begin{description}
+% \item[Default] \nameref{usage:opt:ou}
+% \item[Example] |$\left\{#1\right\}$|
+% \end{description}
+%
+% \leavevmode
+% \refstepcounter{subsection}
+% \docsetnameref{\meta{\pkgparta}}
+% \label{usage:par:ta}
+% \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docopto{\meta{\pkgparta}}}
+% \DescribeOption{\meta{\pkgparta}}
+% \begin{description}
+% \item[Semantics]
+% \nameref{usage:cs:ccool}\docoptd{\meta{\pkgparna}}\docopto{\meta{\pkgparta}}
+% \end{description}
+%
+% \leavevmode
+% \refstepcounter{section}
+% \docsetnameref{Other}
+% \label{usage:other}
+% \addcontentsline{toc}{section}{\protect\numberline{\thesection}Other}
+% \section*{Other}
+% Continued in \autoref{part:impl}, \autoref{impl:frontend}.
+%
+% \leavevmode
+% \refstepcounter{section}
+% \docsetnameref{Do's and dont's}
+% \label{usage:dosdont}
+% \addcontentsline{toc}{section}{\protect\numberline{\thesection}Do's and dont's}
+% \section*{Do's and dont's}
+%
+% \begin{enumerate}
+% \item \docfillblank
+% \begin{itemize}
+% \item[\docissuedont] |\Ccool{ A = a, B = b }[Hello, world!]|.
+% \item[\docissuedo] |\Ccool{ A = a, B = b }[Hello, world!]{}|, or \\|\Ccool{ A = a, B = b } Hello, world!|
+% \end{itemize}
+% \item \docfillblank
+% \begin{itemize}
+% \item[\docissuedont] |$|\cs{\meta{\pkgkey}}|<x$|.
+% \item[\docissuedo] |$|\cs{\meta{\pkgkey}}|{<}x$|
+% \end{itemize}
+% \item\docfillblank
+% \begin{itemize}
+% \item[\docissuedont] |[a, b)|
+% \item[\docissuedo] |{[}a, b{)}|
+% \end{itemize}
+% \item \docfillblank
+% \begin{itemize}
+% \item[\docissuedont] |\Ccool{ F = \cal F }|.
+% \item[\docissuedo] | \Ccool{ F = \cal{F} } | or | \Ccool{ F = \mathcal{F} } |
+% \end{itemize}
+% \item \docfillblank
+% \begin{itemize}
+% \item[\docissuedont] |[x_0,x]|
+% \item[\docissuedo] |\left[x_0,x\right]|
+% \end{itemize}
+% \item Also see \autoref{part:other}, \autoref{other:issue}
+% \end{enumerate}
+%
+% \clearpage
+% \part{Listing}\label{part:listing}
+%
+% \newtcblisting[auto counter]
+% {listing}[2][]{
+% noparskip,
+% breakable,
+% colback=white,
+% colframe=black,
+% opacitybacktitle=.8,%
+% fonttitle=\bfseries,
+% title={Listing~\thetcbcounter. #1},
+% arc=0pt,
+% outer arc=0pt,
+% boxrule=1pt,
+% listing and text,
+% #2
+% }
+%
+% \phantomsection\addcontentsline{toc}{section}{\doclist{vers}. Version.}
+% \begin{listing}[]
+% {label=listing:vers}
+% \CcoolVers
+% \end{listing}
+%
+% \phantomsection\addcontentsline{toc}{section}{\doclist{pre}. Preamble.}
+% \begin{listing}[Preamble\footnote{These are the settings to replicate the listings.
+% For exhaustivity, check the \env{documentation} section of \pkg{ccool}\texttt{.dtx}.}]
+% {label=listing:pre, listing only}
+% \usepackage{amsmath, amsthm, commath}
+% \usepackage[T1]{fontenc}% \char`[
+% \end{listing}
+%
+% \phantomsection\addcontentsline{toc}{section}{\doclist{test:i}. Separators.}
+% \begin{listing}[Separators]
+% {label=listing:test:i}
+% \CcoolOption{
+% ^^A% spaces betw. inner and outer brackets matter!->
+% Separ={{\ \char`@\ }{\ \%\ }{\ \char`@\ }}}
+% \Ccool<Test>{ X = x, Y = y }*[\\]
+% { X = x, Y = y, Z = z }*[\\]
+% { X = x, Y = y }*s{{\ \&\ }}[\\]
+% { X = x, Y = y }*s{{\ \&\ }{,\ }}[\\]
+% { X = x, Y = y, Z = z }*s{{\ \&\ }}[\\]
+% { X = x, Y = y, Z = z }*s{{\ \&\ }{,\ }}[\\]
+% { X = x, Y = y, Z = z }*s{{\ \&\ }{,\ }{\ \&\ }}\\
+% \end{listing}
+%
+% \phantomsection\addcontentsline{toc}{section}{\doclist{test:ii}. Hello, world!}
+% \begin{listing}[Hello, world!\footnote{If this looks arcane, it's for the purpose of testing.}]
+% {label=listing:test:ii}
+% \CcoolOption{ Separ = {{}{.}{.}}, Outer = { ####1 } }
+% \CcoolOption{ Write = \BooleanTrue }
+% \Ccool<Test>
+% { KeyA = {.}, KeyB = {!}, KeyC = {\%} }[]
+% { KeyD = {d}, KeyE = {\%} }[]i{\{#1\}}
+% { KeyF = {H}, KeyG = {e}, KeyH = {l} }*[]
+% { KeyI = {\%}, KeyJ = {\%}, KeyK = {\%} }[.\{l\}.\{o\}]
+% { KeyL = {l}, KeyM = {\char`[}, KeyN = {\char`]} }[]
+% { KeyO = {o}, KeyP = {\%}, KeyQ = {\%} }[{,\ }]
+% { KeyR = {w}, KeyS = {o}, KeyT = {r} }*s{{}{}{}}o{{\char`[}#1}[]
+% { KeyU = {\%}, KeyV = {\%}, KeyW = {\%} }[]
+% { KeyX = {\%}, KeyY = {\%}, KeyZ = {\KeyB<Test>} }\nobreak
+% \KeyL<Test>\KeyD<Test>\KeyZ<Test>\KeyN<Test>\\
+% \CcoolOption{ Write = \BooleanFalse }
+% \end{listing}
+%
+% \phantomsection\addcontentsline{toc}{section}{\doclist{test:iii}. \doclist{test:ii} read from file.}
+% \begin{listing}[\doclist{test:ii} read from file.]
+% {label=listing:test:iii}
+% \CcoolRead
+% \KeyF<Test>\KeyA<Test>\nobreak
+% \KeyG<Test>\KeyA<Test>\nobreak
+% \KeyH<Test>\KeyA<Test>\nobreak
+% \KeyH<Test>\KeyA<Test>\nobreak
+% {\{}\nobreak\KeyO<Test>{\}},{\ }\nobreak
+% \KeyM<Test>\KeyR<Test>\nobreak
+% \KeyO<Test>\nobreak
+% \KeyT<Test>\nobreak
+% \KeyL<Test>\nobreak
+% \KeyD<Test>\nobreak
+% \KeyZ<Test>\nobreak
+% \KeyN<Test>\nobreak
+% \end{listing}
+%
+% \phantomsection\addcontentsline{toc}{section}{\doclist{proba:i}. Probability space.}
+% \begin{listing}[Probability space]
+% {label=listing:proba:i}
+% \CcoolOption{ Write = \BooleanTrue }
+% \Ccool[Let~]
+% { Space = \Omega, Field = \mathcal{F}, Meas = \mathcal{P} }
+% *s{{,}}o{$\{#1\}$}
+% [~denote the probability space, where~]{ PowerSet = { 2^{\Space} } }
+% [$\Field\subset \PowerSet$.]
+% {}
+% \CcoolOption{ Write = \BooleanFalse }
+% \end{listing}
+%
+% \phantomsection\addcontentsline{toc}{section}{\doclist{proba:ii}. \doclist{proba:i} read from file.}
+% \begin{listing}[\doclist{proba:i} read from file.]
+% {label=listing:proba:ii}
+% \CcoolRead \tab $\Omega$ $\Field$ $\Meas$
+% \end{listing}
+%
+% \phantomsection\addcontentsline{toc}{section}{\doclist{mvt:i}. Mittelwertsatz f\"ur $n$ Variable.}
+% \begin{listing}[{Mittelwertsatz f\"ur $n$ Variable\cite[17.3]{tcolbox}}]
+% {label=listing:mvt:i}
+% \CcoolOption{ Write = \BooleanTrue }
+% \newtheorem{theorem}{Theorem}
+% \AfterEndEnvironment{theorem}{\CcoolHook}
+% \Ccool i{\mathbb{#1}}
+% { N = { N } , R = { R } }+[]
+% { Grad = { \operatorname{grad} } }+
+% [\begin{theorem}
+% [Mittelwertsatz f\"ur $n$ Variable]Es~sei~]
+% { OffMenge = {D}, Ci = {C^{1}}, Strecke = { \left[x_0,x\right] } }+
+% [$n\in\N$,~$\OffMenge\subseteq\N^n$ eine offene Menge und $f\in\Ci(\OffMenge,\R)$.
+% Dann gibt es auf jeder Strecke $\Strecke\subset\OffMenge$ einen Punkt $\xi\in\Strecke$,~]
+% { Steig = { \frac{ f(x)-f(x_0) }{ x-x_0 } }, Punkt = { \xi } }+
+% [so dass gilt
+% \begin{equation*}
+% \Steig = \Grad f(\Punkt)^{\top}
+% \end{equation*}
+% \end{theorem}]
+% {}
+% (Check: $\N$, $\Punkt$)
+% \CcoolOption{ Write = \BooleanFalse }
+% \end{listing}
+%
+% \phantomsection\addcontentsline{toc}{section}{\doclist{mvt:ii}. \doclist{mvt:i} read from file.}
+% \begin{listing}[\doclist{mvt:i} read from file.]
+% {label=listing:mvt:ii}
+% \CcoolRead \tab $\N$ $\R$ $\OffMenge$ $\Ci$ $\Strecke$
+% \end{listing}
+%
+% \phantomsection\addcontentsline{toc}{section}{\doclist{lambda:i}. Lambda expression.}
+% \begin{listing}[Lambda expression.]
+% {label=listing:lambda:i}
+% \CcoolOption{ Write = \BooleanTrue }
+% \Ccool{ EvalAt = \CcoolLambda{(#1)}, ApplyOp = \CcoolLambda[2]{#1[#2]} }
+% [Supposons une fonction $f\EvalAt{t}$, et \'etudions le probl\`eme o\`u la fonctionnelle $\ApplyOp{S}{f}$ est donn\'ee par\dots]{}
+% \CcoolOption{ Write = \BooleanFalse }
+% \end{listing}
+%
+% \phantomsection\addcontentsline{toc}{section}{\doclist{lambda:ii}. \doclist{lambda:i} read from file.}
+% \begin{listing}[\doclist{lambda:i} read from file.]
+% {label=listing:lambda:ii}
+% \CcoolRead \tab $f\EvalAt{t}$, $\ApplyOp{S}{f}$
+% \end{listing}
+%
+% \phantomsection\addcontentsline{toc}{section}{\doclist{cusum:i}. CUSUM statistic.}
+% \begin{listing}[CUSUM statistic\cite{ccool-thesis}]
+% {label=listing:cusum:i}
+% \newtheorem{definition}{Definition}
+% \AfterEndEnvironment{definition}{\CcoolHook}
+%
+% \CcoolOption{ Write = \BooleanTrue }
+% \Ccool{ SuchThat = { ;~ }, Time = { t }, Process = { \xi }, StopT = { T }, EvalAt = \CcoolLambda{(#1)} }
+% [The CUSUM statistic process and the corresponding one-sided CUSUM stopping time are defined as follows:
+% \begin{definition}\label{the CUSUM statistic}. Let~]
+% { Scale = { \lambda }, Real = {\mathcal{R}} }+*s{{~\in~}}[~and~]
+% { CUSUMthresh = { \nu } }+*o{$#1\in\Real^{+}$.}
+% [~Define the following processes:]
+% { LogWald = { u }, CUSUMst = { \StopT_{c} }, CUSUM = { y }, LogWaldInf = { m } }+
+% [\begin{enumerate}
+% \item{$\LogWald_{\Time}\EvalAt{ \Scale } = \Scale\Process_{\Time} - \frac{1}{2}\Scale^2\Time$;
+% $\LogWaldInf_{\Time}\EvalAt{ \Scale } = \inf_{ 0\le s \le \Time }\CUSUM_{s} \EvalAt{ \Scale }$.}
+% \item{$\CUSUM_{\Time}\EvalAt{ \Scale } = \LogWaldInf_{\Time}\EvalAt{ \Scale } - \LogWald_{\Time}\EvalAt{ \Scale }\ge0$, which is the CUSUM statistic process.}
+% \item{$\CUSUMst \EvalAt{ \Scale, \LogWaldInf } = \inf\left[ \Time \ge 0 \SuchThat \CUSUM_{\Time}\EvalAt{\Scale} \ge \LogWaldInf \right]$, which is the CUSUM stopping time.} \end{enumerate}\end{definition}\par]{}
+%
+% (Check: $\Scale$, $\CUSUM$)
+% \CcoolOption{ Write = \BooleanFalse }
+% \end{listing}
+%
+% \phantomsection\addcontentsline{toc}{section}{\doclist{cusum:ii}. \doclist{cusum:i} read from file.}
+% \begin{listing}[\doclist{cusum:i} read from file.]
+% {label=listing:cusum:ii}
+% \CcoolRead \tab $\Time $ $\Process$ $\Scale$ $\Real$ $\CUSUMthresh$ $\LogWald$ $\CUSUMst$ $\CUSUM$ $\LogWaldInf$
+% \end{listing}
+%
+% \clearpage
+% \part{Other}\label{part:other}
+%
+% \section{Acknowledgment}\label{other:acknowl}
+%
+% This work has benefited from Q\&A's from the \LaTeX community\cite{user-erw}.
+% Specific attributions are made throughout this document.
+%
+% \section{Install}\label{other:install}
+%
+% Compiling \file{ccool.dtx}\footnote{Under Unix, |$tex ccool.dtx|} will generate \file{ccool.sty} and \file{ccool.pdf}
+%
+% \section{Issue}\label{other:issue}
+%
+% \begin{enumerate}
+% \item
+% \begin{description}
+% \item[\docissuedont] |Inner={\{####1\}}|
+% \item[\docissuesymp] \cs{CcoolRead} fails
+% \item[\docissuedo] |Inner={\char`{####1\char`}}|
+% \end{description}
+% \end{enumerate}
+%
+% \section{Support}\label{other:support}
+%
+% This package is available from \url{https://www.ctan.org/pkg/ccool} and \url{https://github.com/rogard/ccool}.
+%
+% \section{Testing}\label{other:testing}
+%
+% \subsection{Technicality}
+% Not possible to compile-check the expansion of a certain class of macros against predefined values\cite{a-534100}.
+% Instead, one can visually check \autoref{part:listing}, as generated in \autoref{other:install} on one's own machine,
+% against that \href{https://github.com/rogard/ccool}{of the repository} for the same version.
+%
+%
+% \subsection{Platform}
+% \begin{enumerate}[label=\emph{\roman*)}]
+% \item
+% ^^A uname -a
+% \begin{Verbatim}[breaklines=true]
+% Linux laptop 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
+% \end{Verbatim}
+% \label{plat:lin}
+% \end{enumerate}
+%
+% \subsection{Engine}
+% \begin{enumerate}[label=\emph{\alph*})]
+% \item
+% \begin{Verbatim}[breaklines=true]
+% pdfTeX 3.14159265-2.6-1.40.20 (TeX Live 2019)
+% \end{Verbatim}
+% \label{eng:tlxviiii:pdf}
+% \item
+% \begin{Verbatim}[breaklines=true]
+% pdfTeX 3.14159265-2.6-1.40.21 (TeX Live 2020)
+% \end{Verbatim}
+% \label{eng:tlxx:pdf}
+% \item
+% \begin{Verbatim}[breaklines=true]
+% LuaHBTeX, Version 1.12.0 (TeX Live 2020)
+% \end{Verbatim}
+% \label{eng:tlxx:lua}
+% \item
+% \begin{Verbatim}[breaklines=true]
+% XeTeX 3.14159265-2.6-0.999992 (TeX Live 2020)
+% \end{Verbatim}
+% \label{eng:tlxx:xe}
+% \end{enumerate}
+%
+% \subsection{Results}
+%
+% \begin{enumerate}
+% \item \pkg{ccool} \docvers{1}{8} satisfactory on platform \ref{plat:lin} and engine \ref{eng:tlxviiii:pdf}
+% \item \pkg{ccool} \docvers{1}{8} satisfactory on platform \ref{plat:lin} and engine \ref{eng:tlxx:pdf}
+% \item \pkg{ccool} \docvers{1}{9} satisfactory on platform \ref{plat:lin} and engines \ref{eng:tlxx:pdf} and \ref{eng:tlxx:lua}
+% \item \pkg{ccool} \docvers{2}{0} satisfactory on platform \ref{plat:lin} and engines \ref{eng:tlxx:pdf}, \ref{eng:tlxx:lua}, and \ref{eng:tlxx:xe}
+% \end{enumerate}
+%
+% \subsection{Other}
+% Check \cite{ccool-thesis} for testing \pkg{ccool} with \cls{llncs}
+%
+% \leavevmode
+% \refstepcounter{section}
+% \docsetnameref{References}
+% \label{other:bib}
+% \phantomsection\addcontentsline{toc}{section}{References}
+% \begin{thebibliography}{1}
+% \bibitem{cool} Nick Setzer {\em The \pkg{cool} package}, 2005, \url{https://www.ctan.org/pkg/cool}
+% \bibitem{interface3} The \LaTeX3 Project Team {\em The \LaTeX3 interfaces}, 2019,
+% \url{http://ftp.math.purdue.edu/mirrors/ctan.org/macros/latex/contrib/l3kernel/interface3.pdf}
+% \bibitem{tcolbox} Thomas F. Sturm {\em The \pkg{tcolorbox} package}, 2019,
+% \url{http://www.texdoc.net/texmf-dist/doc/latex/tcolorbox/tcolorbox.pdf}
+% \bibitem{xparse} The \LaTeX3 Project Team {\em The \pkg{xparse} package}, 2020,
+% \url{http://ftp.math.purdue.edu/mirrors/ctan.org/macros/latex/contrib/l3packages/xparse.pdf}
+% \bibitem{ccool-thesis} Erwann Rogard and Olympia Hadjiliadis {\em Typesetting a math thesis with \pkg{ccool}}, 2020,
+% \url{https://github.com/rogard/ccool/blob/master/thesis.pdf}
+% \bibitem{user-erw} \url{https://tex.stackexchange.com/users/112708/erwann?tab=questions}
+% \bibitem{a-188053} \href{https://tex.stackexchange.com/users/17423/sean-allred}{@{}sean-allred}'s answer to
+% ``How to create lambda expressions?'', \url{https://tex.stackexchange.com/a/188053/112708}
+% \bibitem{a-534100} \href{https://tex.stackexchange.com/users/73/joseph-wright}{@{}joseph-wright}'s answer to
+% ``Checking a function's expansion against a string'', \url{https://tex.stackexchange.com/a/534100}
+% \bibitem{a-536597} \href{https://tex.stackexchange.com/users/73317/frougon}{@{}frougon}'s answer to ``Journaling calls to a function \textdel{taking inline code as argument}'', \url{https://tex.stackexchange.com/a/536620}
+% \end{thebibliography}
+%
+% \changes{\docvers{1}{0}}{2020/03/08}{Initial version}
+% \changes{\docvers{1}{1}}{2020/04/04}{Revamped: much of the implementation}
+% \changes{\docvers{1}{1}}{2020/04/04}{Replaced: \Arg{kvl_{2}}~by~\docoptd{kvl_{2}}~given that option type \texttt{G} not recommended\cite{xparse}}
+% \changes{\docvers{1}{1}}{2020/04/04}{Replaced: \cs{OopsOptions}~by~\cs{OopsOption}}
+% \changes{\docvers{1}{1}}{2020/04/04}{Replaced: \docarg{GenericObject}~by~\docarg{Name}}
+% \changes{\docvers{1}{1}}{2020/04/04}{Replaced: \docarg{Separators}~by~\docarg{Separ}}
+% \changes{\docvers{1}{1}}{2020/04/04}{Added:\cs{OopsTest}}
+% \changes{\docvers{1}{1}}{2020/04/04}{Added:\cs{OopsRestore}}
+% \changes{\docvers{1}{1}}{2020/04/04}{Added: \docarg{Save}}
+% \changes{\docvers{1}{1}}{2020/04/04}{Deleted: Listing 1-5 from \docvers{1}{0}}
+% \changes{\docvers{1}{1}}{2020/04/04}{Added: Listing~1., 2., 3., 4., 6., and 9.}
+% \changes{\docvers{1}{1}}{2020/04/04}{Fixed: apparent anomaly in \docvers{1}{0}'s Listing~4, see \doclist{test:i}}
+% \changes{\docvers{1}{2}}{2020/04/06}{Added: optional |*| to \cs{OopsNew} as instruction to expand \pkgparde}
+% \changes{\docvers{1}{2}}{2020/04/06}{Replaced: \cs{OopsClear}\Arg{\pkgparna} by \cs{OopsClear}\docopto{\meta{\doccceptkvl}}}
+% \changes{\docvers{1}{2}}{2020/04/06}{Deleted: \meta{kvl_{2}}~and~\meta{code_{2}}}
+% \changes{\docvers{1}{2}}{2020/04/06}{Deleted: \cs{OopsTest}}
+% \changes{\docvers{1}{2}}{2020/04/06}{Deleted: Listing~2-3 from \docvers{1}{1}.}
+% \changes{\docvers{1}{2}}{2020/04/06}{Replaced: \cs{Save} by \cs{Write}}
+% \changes{\docvers{1}{2}}{2020/04/06}{Replaced: \cs{Restore} by \cs{Read}}
+% \changes{\docvers{1}{3}}{2020/04/06}{Replaced: \cs{OopsNew} by \cs{Oops}}
+% \changes{\docvers{1}{3}}{2020/04/06}{Replaced: \Arg{\pkgparna} and \docopto{\meta{\pkgparna}} by \docoptd{\meta{\pkgparna}} }
+% \changes{\docvers{1}{4}}{2020/04/10}{Replaced: \docopte{s}{\Arg{\pkgparsi}\Arg{\pkgparsii}\Arg{\pkgparsiii}}
+% by \docopte{s}{\Arg{\pkgparsi}\docpipe\Arg{\pkgparsi}\Arg{\pkgparsii}\docpipe\Arg{\pkgparsi}\Arg{\pkgparsii}\Arg{\pkgparsiii}}}
+% \changes{\docvers{1}{4}}{2020/04/10}{Added:optional |+| to \cs{OopsNew} to make side effects presist beyond local group}
+% \changes{\docvers{1}{4}}{2020/04/10}{Added: \cs{OopsHook}}
+% \changes{\docvers{1}{4}}{2020/04/10}{Deleted: Listing~1., and 2. }
+% \changes{\docvers{1}{4}}{2020/04/10}{Added: Listing~1., 2., and 3. }
+% \changes{\docvers{1}{4}}{2020/04/10}{Added: \docarg{Expans} (for debugging' sake, but...) }
+% \changes{\docvers{1}{4}}{2020/04/10}{Added: \autoref{usage:dosdont} }
+% \changes{\docvers{1}{4}}{2020/04/10}{Added: \cs{OopsDebug} }
+% \changes{\docvers{1}{5}}{2020/04/10}{Deleted: dependence on \pkg{datetime} }
+% \changes{\docvers{1}{5}}{2020/04/10}{Added: \pkgoptfi }
+% \changes{\docvers{1}{6}}{2020/04/10}{Renamed: \pkg{oops} to \pkg{ccool} (better describes the purpose) }
+% \changes{\docvers{1}{6}}{2020/04/10}{Renamed: \cs{Oops} to \cs{Ccool}}
+% \changes{\docvers{1}{6}}{2020/04/10}{Renamed: \cs{OopsClear} to \cs{CcoolClear}}
+% \changes{\docvers{1}{6}}{2020/04/10}{Renamed: \cs{OopsDebug} to \cs{CcoolDebug}}
+% \changes{\docvers{1}{6}}{2020/04/10}{Renamed: \cs{OopsHook} to \cs{CcoolHook}}
+% \changes{\docvers{1}{6}}{2020/04/10}{Renamed: \cs{OopsOption} to \cs{CcoolOption}}
+% \changes{\docvers{1}{6}}{2020/04/10}{Renamed: \cs{OopsRead} to \cs{CcoolRead}}
+% \changes{\docvers{1}{6}}{2020/04/10}{Added: \doclist{pre} (preamble) }
+% \changes{\docvers{1}{7}}{2020/04/11}{Added: \doclist{cusum:i} (CUSUM) }
+% \changes{\docvers{1}{7}}{2020/04/11}{Added: Legends to listings }
+% \changes{\docvers{1}{7}}{2020/04/11}{Deleted: \cs{CcoolDebug} }
+% \changes{\docvers{1}{7}}{2020/04/11}{Deleted: Listing~5 from \docvers{1}{6} }
+% \changes{\docvers{1}{8}}{2020/04/12}{Added: \cs{CcoolLambda} }
+% \changes{\docvers{1}{8}}{2020/04/12}{Added: \doclist{lambda:i}, \doclist{lambda:ii} }
+% \changes{\docvers{1}{8}}{2020/04/12}{Added: \cs{CcoolVers} }
+% \changes{\docvers{1}{8}}{2020/04/12}{Added: \doclist{vers} }
+% \changes{\docvers{1}{9}}{2020/04/14}{Added: support for \LuaTeX }
+% \changes{\docvers{1}{9}}{2020/04/14}{Moved: from \autoref{part:usage} to \autoref{part:impl}, what is now that part's \autoref{impl:frontend}}
+% \changes{\docvers{2}{0}}{2020/04/15}{Deleted: \pkgoptfi's dependency on \pkg{texosquery} and \cs{pdfcreationdate}}
+% \changes{\docvers{2}{0}}{2020/04/15}{Added: support for \XeTeX}
+% \changes{\docvers{2}{0}}{2020/04/15}{Updated: \cs{RequirePackage}, \cs{NeedsTeXFormat}'s second argument / TeX Live 2020}
+%
+% \PrintChanges
+% \PrintIndex
+% \clearpage
+% \StopEventually{
+% ^^A \PrintChanges
+% ^^A \PrintIndex
+% }
+%^^A \end{documentation}
+%^^A% Commented out to eliminate WARNING: Reference `doc/function//
+%^^A \begin{implementation}
+% \part{Implementation}\label{part:impl}
+%
+% \iffalse
+%<*package>
+% \fi
+% \begin{macrocode}
+%<@@=ccool>
+\ExplSyntaxOn
+% \end{macrocode}
+% \section{\texttt{aux}}
+% \begin{macro}{\@@_aux_inner_set:n}
+% \begin{arguments}
+% \item \meta{code}
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_aux_inner_set:n
+{
+ \cs_gset:Npn \@@_aux_inner:n ##1 {#1}
+ \cs_generate_variant:Nn \@@_aux_inner:n { e }
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_aux_key:w }
+% \begin{arguments}
+% \item \meta{ key }
+% \item \meta{ value }
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_aux_key:w #1 = #2 \q_stop
+{
+ \seq_gput_right:Nx \g@@_aux_key_seq { \tl_trim_spaces:n{#1} }
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_aux_key:n }
+% \begin{arguments}
+% \item \meta{ key = value }
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_aux_key:n
+{
+ \@@_aux_key:w #1 \q_stop
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_aux_key:N }
+% \begin{arguments}
+% \item \meta{ seq }
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_aux_key:N
+{
+ \seq_gclear_new:N \g@@_aux_key_seq
+ \seq_map_function:NN #1 \@@_aux_key:n
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_aux_outer_set:n}
+% \begin{arguments}
+% \item \meta{ inline code }
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_aux_outer_set:n
+{
+ \cs_gset:Npn \@@_aux_outer:n ##1 {#1}
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_aux_prop:nn}
+% \begin{macrocode}
+\prop_new:N \g@@_aux_prop
+\cs_new_protected:Nn \@@_aux_prop:nn
+{
+ \prop_gput:Nnn \g@@_aux_prop{#1}{#2}
+}
+\cs_generate_variant:Nn \@@_aux_prop:nn { eo, ee, ex, xo, xe, xx }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_aux_prop:w}
+% \begin{arguments}
+% \item \meta{ key }
+% \item \meta{ value }
+% \end{arguments}
+% \begin{macrocode}
+\tl_new:N \g@@_option_expans_tl
+\cs_new_protected:Npn \@@_aux_prop:w #1 = #2 \q_stop
+{
+ \exp_args:Nx
+ \use:c{@@_aux_prop:\g@@_option_expans_tl}
+ { \tl_trim_spaces:n{#1} }
+ { \@@_aux_inner:n{ \tl_trim_spaces:n{#2} } }
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_aux_prop:n}
+% \begin{arguments}
+% \item \meta{ key = value }
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_aux_prop:n
+{
+ \@@_aux_prop:w #1 \q_stop
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_aux_prop:N}
+% \begin{arguments}
+% \item \meta{keyval list}
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_aux_prop:N
+{
+ \prop_gclear_new:N \g@@_aux_prop
+ \seq_if_empty:NTF #1
+ { \c_empty_tl }
+ {
+ \seq_map_function:NN #1 \@@_aux_prop:n
+ }
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_aux_separ:nn}
+% \begin{arguments}
+% \item \meta{ int }
+% \item \meta{ tokens }
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Nn \@@_aux_separ:nn
+{
+ \int_case:nnTF {#1}
+ {
+ {1}
+ { \prg_replicate:nn{ 3 }{#2} }
+ {2}
+ {
+ { \use_i:nn #2 }
+ { \use_ii:nn #2 }
+ { \use_i:nn #2 }
+ }
+ {3}{#2}
+ }
+ { \c_empty_tl }
+ {
+ \msg_error:nnnn { @@ }
+ { separ }
+ { \exp_not:N \_@@_aux_separ:nn }
+ {#2}
+ }
+}
+\cs_generate_variant:Nn \@@_aux_separ:nn { e }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_aux_separ:n}
+% \begin{arguments}
+% \item \meta{ tokens }
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Nn \@@_aux_separ:n
+{
+ \@@_aux_separ:en{ \tl_count:n{#1} }{#1}
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_aux_val:Nn}
+% \begin{arguments}
+% \item \meta{ seq }
+% \item \meta{ tl var name }
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_aux_val:Nn
+{
+ \seq_gclear_new:N \g@@_aux_val_seq
+ \@@_seq_from_prop:NNn \g@@_aux_val_seq #1 { \@@_prop_name:n{#2} }
+}
+% \end{macrocode}
+% \end{macro}
+% \section{\texttt{lambda}}
+% \begin{macro}{\@@_lambda:nn}\cite{a-188053}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_lambda:nn #1 #2
+{
+ \exp_args:NNx
+ \DeclareDocumentCommand \@@_lambda_expression
+ { \prg_replicate:nn { #1 } { m } }
+ {#2}
+ \@@_lambda_expression
+}
+% \end{macrocode}
+% \end{macro}
+% \section{\texttt{log}}
+% \begin{macro}{\@@_log_close:}
+% \begin{macrocode}
+\iow_new:N \g@@_log_iow
+\AtEndDocument{\iow_close:N \g@@_log_iow}
+\bool_set_false:N \g@@_log_open_bool
+\cs_new_protected:Nn \@@_log_close:
+{
+ \iow_close:N \g@@_log_iow
+ \bool_gset_false:N \g@@_log_open_bool
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_log_open:}
+% \begin{macrocode}
+\tl_new:N \g@@_log_file_tl
+\cs_new_protected:Nn \@@_log_open:
+{
+ \tl_gset:Nx \g@@_log_to_tl{\g@@_log_file_tl}
+ \iow_open:Nn \g@@_log_iow {\g@@_log_to_tl}
+ \bool_gset_true:N \g@@_log_open_bool
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_log_read:n}
+% \begin{arguments}
+% \item \meta{path}
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_log_read:n
+{
+ \file_input:n{#1}
+ \tl_log:n{read~from~#1}
+}
+\cs_generate_variant:Nn \@@_log_read:n { e }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_log_read:}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_log_read:
+{
+ \@@_log_read:e{\g@@_log_to_tl}
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_log_write:n}
+% \begin{macrocode}
+\tl_new:N \g@@_log_to_tl
+\cs_new_protected:Nn \@@_log_write:n
+{
+ \bool_if:nTF{ \g@@_log_open_bool }
+ {
+ \iow_now:Nn \g@@_log_iow {#1}
+ \tl_log:n{ write~to~#1 }
+ }
+ { \msg_error:nnn{ @@ }{ iow }{ \g@@_log_iow } }
+}
+\cs_generate_variant:Nn \@@_log_write:n { e }
+% \end{macrocode}
+% \end{macro}
+% \section{\texttt{make_key}}
+% \begin{macro}{\@@_make_key:Nn}
+% \begin{arguments}
+% \item \meta{ token }
+% \item \meta{ key }
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_make_key:Nn
+{
+ \exp_args:NNx
+ \ProvideDocumentCommand{#1}
+ { D<>{\g@@_option_name_tl} }
+ {
+ \@@_prop_item:nn{##1}{#2}
+ }
+}
+\cs_generate_variant:Nn \@@_make_key:Nn {c}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_make_key:n}
+% \begin{arguments}
+% \item \meta{ key }
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_make_key:n
+{
+ \@@_make_key:cn{#1}{#1}
+}
+\cs_generate_variant:Nn \@@_make_key:n { e }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_make_key:N}
+% \begin{arguments}
+% \item \meta{ seq }
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_make_key:N
+{
+ \seq_map_function:NN #1 \@@_make_key:e
+}
+% \end{macrocode}
+% \end{macro}
+% \section{\texttt{make_ccool}}
+% \begin{macro}{\@@_make_ccool_exp:nnn}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_make_ccool_exp:nnn
+{
+ \@@_aux_val:Nn \g@@_aux_key_seq {#1}
+ \@@_aux_outer_set:n{#3}
+ \@@_aux_outer:n
+ {
+ \exp_args:NNf
+ \@@_seq_use:Nn
+ \g@@_aux_val_seq
+ {#2}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_make_ccool_key:nnn}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_make_ccool_key:nnn
+{
+ \@@_prop_if_exist:nTF{#1}
+ { \c_empty_tl }
+ { \@@_prop_new:n{#1} }
+ \exp_args:No \@@_aux_inner_set:n{#2}
+ \seq_set_from_clist:Nn \g@@_aux_keyval_seq {#3}
+ \@@_aux_prop:N \g@@_aux_keyval_seq
+ \@@_prop_append:Nn \g@@_aux_prop {#1}
+ \@@_aux_key:N \g@@_aux_keyval_seq
+ \@@_make_key:N \g@@_aux_key_seq
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_make_ccool_sideeffect:nnn}\cite{a-536597}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_make_ccool_sideeffect:nnn
+{
+ \@@_make_ccool_key:nnn{#1}{#2}{#3}
+ \bool_if:nTF{ \g@@_log_open_bool }
+ {
+ \@@_log_write:n
+ {
+ \begingroup
+ \def \@@_log_entry { \Ccool<#1>i{#2}{#3} } \expandafter
+ \endgroup \@@_log_entry
+ }
+ }{\c_empty_tl}
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_make_ccool:nnnn}
+% \begin{arguments}
+% \item \meta{ token list }
+% \item \meta{ seq_{1} }
+% \item \meta{ seq_{2} }
+% \item \meta{ prop }
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_make_ccool:nnnn #1 #2 #3 #4
+{
+ \exp_args:NNx \DeclareDocumentCommand \Ccool
+ {%^^A 2 3 4 5 6 7 8 9
+ D<>{#1} +o E{ i }{{#2}} m t+ s E{ s o }{{#3}{#4}} +o
+ }
+ {
+ \IfValueT{##2}{##2}
+ \@@_make_ccool_sideeffect:nnn{##1}{##3}{##4}
+ \IfBooleanT{##6}
+ {
+ \@@_make_ccool_exp:nnn{##1}{##7}{##8}
+ }
+ \bool_if:nTF{##5}
+ {
+ \gappto{\CcoolHook}
+ {
+ \@@_make_ccool_sideeffect:nnn{##1}{##3}{##4}
+ }
+ }
+ {\c_empty_tl}
+ \IfValueT{##9}
+ {
+ \exp_not:n{ \Ccool<##1>[##9] }
+ }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+% \section{\texttt{msg}}
+% \begin{macrocode}
+\msg_new:nnn {@@}{ generic }{#1}
+\msg_new:nnn {@@}{ iow }{#1~is~closed~can't~write}
+\msg_new:nnn {@@}{ keyonly }{#1~does~not~take~values;~keyval~is~#2}
+\msg_new:nnn {@@}{ keywrong }{#1~does~not~recognize~key~#2}
+\msg_new:nnn {@@}{ separ }{#1~expects~1~to~3~items,~#2}
+\msg_new:nnn {@@}{ unset }{#1~unset}
+% \end{macrocode}
+% \section{\texttt{option}}
+% \begin{macro}{\@@_aux_inner:n}
+% \begin{arguments}
+% \item \meta{code}
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_option_inner:n
+{
+ \tl_gset:Nn \g@@_option_inner_tl {#1}
+}
+\@@_option_inner:n
+{
+ \msg_warning:nnn{ @@ }{ unset }{ \exp_not:N \g@@_option_inner_tl }
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_option_name:n}
+% \begin{arguments}
+% \item \meta{token list}
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Nn \@@_option_name:n
+{
+ \tl_gset:Nn \g@@_option_name_tl{#1}
+}
+\@@_option_name:n
+{
+ \msg_error:nnx{ @@ }
+ { generic }
+ { \exp_not:N\g@@_option_name_tl~undefined }
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_option_outer:n}
+% \begin{arguments}
+% \item \meta{ inline code }
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_option_outer:n
+{
+ \tl_gset:Nn \g@@_option_outer_tl {#1}
+}
+\@@_option_outer:n
+{
+ \msg_warning:nnn{ @@ }{ unset }{ \exp_not:N \g@@_option_outer_tl }
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_option_separ:n}
+% \begin{arguments}
+% \item \Arg{ tl_{1} }\Arg{ tl_{2} }\Arg{ tl_{3} }
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_option_separ:n
+{
+ \cs_gset:Npn \g@@_option_separ_tl {#1}
+}
+\@@_option_separ:n
+{
+ \msg_warning:nnn{ @@ }{ unset }{ \exp_not:N \g@@_option_separ_tl }
+}
+% \end{macrocode}
+% \end{macro}
+% \section{\texttt{prop}}
+% \begin{macro}{\@@_prop_append:NN}
+% \begin{arguments}
+% \item \meta{ prop_{1} }
+% \item \meta{ prop_{2} }
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_prop_append:NN #1 #2
+{
+ \cs_set:Nn \@@_prop_append:nn
+ {
+ \prop_gput:Nnx #1 {##1}{ \prop_item:Nn #2{##1} }
+ }
+ \prop_map_function:NN #2 \@@_prop_append:nn
+}
+\cs_generate_variant:Nn \@@_prop_append:NN { cN }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_prop_append:Nn}
+% \begin{arguments}
+% \item \meta{ prop }
+% \item \meta{ tl var name }
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_prop_append:Nn
+{
+ \@@_prop_append:cN{ \@@_prop_name:n {#2} } #1
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_prop_clear_new:n}
+% \begin{arguments}
+% \item \meta{ tl var name }
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_prop_clear_new:n
+{
+ \exp_args:No \prop_clear_new:c{ \@@_prop_name:n {#1} }
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_prop_clear_new_map:n}
+% \begin{arguments}
+% \item \meta{ keyval list }
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_prop_clear_new_map:n
+{
+ \seq_set_from_clist:Nn \g@@_aux_key_seq {#1}
+ \seq_map_function:NN \g@@_aux_key_seq \@@_prop_clear_new:n
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_prop_if_exist:nTF}
+% \begin{arguments}
+% \item \meta{tl_{1}}
+% \item \meta{tl_{2}}
+% \item \meta{tl_{3}}
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Nn \@@_prop_if_exist:nTF
+{
+ \prop_if_exist:cTF{ \@@_prop_name:n {#1} }{#2}{#3}
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_prop_item:nn}
+% \begin{arguments}
+% \item \meta{ tl var name }
+% \item \meta{ key }
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Nn \@@_prop_item:nn
+{
+ \prop_item:cn { \@@_prop_name:n {#1} } {#2}
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_prop_name:n}
+% \begin{arguments}
+% \item \meta{ tl var name }
+% \end{arguments}
+% \begin{macrocode}
+\cs_new:Npn \@@_prop_name:n #1{ @@_#1 }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_prop_new:n}
+% \begin{arguments}
+% \item \meta{ tl var name }
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_prop_new:n
+{
+ \prop_new:c{ \@@_prop_name:n {#1} }
+}
+% \end{macrocode}
+% \end{macro}
+% \section{\texttt{seq}}
+% \begin{macro}{\@@_seq_from_prop:NNn}
+% \begin{arguments}
+% \item \meta{ seq_{1} }
+% \item \meta{ seq_{2} } (keys)
+% \item \meta{ prop }
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_seq_from_prop:NNn
+{
+ \cs_set_protected:Nn \@@_seq_from_prop:n
+ {
+ \seq_gput_right:No #1 { \prop_item:cn{#3}{##1} }
+ }
+ \seq_map_function:NN #2 \@@_seq_from_prop:n
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_erw_seq_use:Nn}
+% \begin{macrocode}
+% \begin{arguments}
+% \item \meta{ seq }
+% \item \meta{ tokens }
+% \end{arguments}
+\cs_new:Nn \@@_seq_use:Nn
+{
+ \exp_last_unbraced:NNf
+ \seq_use:Nnnn #1
+ \@@_aux_separ:n{#2}
+}
+% \end{macrocode}
+% \end{macro}
+% \section{sys}\label{impl:sys}
+% \begin{macro}{\@@_sys_date:}
+% \begin{macrocode}
+\cs_new:Nn \@@_sys_date:
+{
+ \int_eval:n
+ {
+ \c_sys_year_int * 10000
+ +\c_sys_month_int * 100
+ +\c_sys_day_int * 1
+ }
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_sys_date_hex:}
+% \begin{macrocode}
+\cs_new:Nn \@@_sys_date_hex:
+{\int_to_hex:n{\@@_sys_date:}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_sys_time:}
+% \begin{macrocode}
+\cs_new:Nn \@@_sys_time:
+{
+ \int_eval:n
+ {
+ \c_sys_hour_int * 100
+ +\c_sys_minute_int * 1
+ }
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_sys_time_hex:}
+% \begin{macrocode}
+\cs_new:Nn\@@_sys_time_hex:
+{\int_to_hex:n{\@@_sys_time:}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_sys_filename:}
+% \begin{macrocode}
+\cs_new:Nn\@@_sys_filename:
+{
+ \c_sys_jobname_str--
+ \@@_sys_date_hex:--
+ \@@_sys_time_hex:
+}
+% \end{macrocode}
+% \end{macro}
+% \section{Front-end}\label{impl:frontend}
+% \leavevmode
+% \refstepcounter{section}
+% \label{usage:cs:clear}
+% \docsetnameref{\cs{CcoolClear}}
+% \addcontentsline{toc}{section}{\protect\numberline{\thesection}\cs{CcoolClear}}
+% \begin{function}{\CcoolClear}
+% \begin{arguments}
+% \item \meta{\docccepttl}
+% \end{arguments}
+% \begin{description}
+% \item[Semantics] Clears any data created by \nameref{usage:cs:ccool}\Arg{\docccepttl}
+% \end{description}
+% \begin{macrocode}
+\NewDocumentCommand{ \CcoolClear }
+{ D<>{\g@@_option_name_tl} }
+{
+ \@@_prop_clear_new_map:n{#1}
+}
+% \end{macrocode}
+% \end{function}
+% \leavevmode
+% \refstepcounter{section}
+% \docsetnameref{\cs{CcoolHook}}
+% \label{usage:cs:hook}
+% \addcontentsline{toc}{section}{\protect\numberline{\thesection}\cs{CcoolHook}}
+% \begin{variable}{\CcoolHook}
+% \begin{description}
+% \item[Example] |\AfterEndEnvironment{theorem}{\CcoolHook}|
+% \end{description}
+% \begin{macrocode}
+\NewDocumentCommand{\CcoolHook}{}{\c_empty_tl}
+% \end{macrocode}
+% \end{variable}
+% \docsetnameref{\cs{CcoolLambda}}
+% \label{usage:cs:lambda}
+% \addcontentsline{toc}{section}{\protect\numberline{\thesection}\cs{CcoolLambda}}
+% \begin{function}{\CcoolLambda}
+% \begin{arguments}
+% \item \meta{\doccceptint}
+% \item \meta{\doccceptcode}
+% \end{arguments}
+% \begin{description}
+% \item[Example] |\Ccool{ EvalAt = \CcoolLambda{(#1)} }|
+% \item[Semantics] Creates a lambda expression with \meta{\doccceptint} arguments for \meta{\doccceptcode}
+% \end{description}
+% \begin{macrocode}
+\ProvideDocumentCommand \CcoolLambda { O{1} m }
+{
+ \@@_lambda:nn { #1 } { #2 }
+}
+% \end{macrocode}
+% \end{function}
+% \leavevmode
+% \refstepcounter{subsection}
+% \docsetnameref{\cs{CcoolOption}}
+% \label{usage:cs:option}
+% \addcontentsline{toc}{section}{\protect\numberline{\thesection}\cs{CcoolOption}}
+% \begin{function}{\CcoolOption}
+% \begin{arguments}
+% \item \meta{\doccceptkvl}
+% \end{arguments}
+% \begin{macrocode}
+\NewDocumentCommand{ \CcoolOption }
+{ m }
+{
+ \keys_set:nn{ @@ }{#1}
+}
+% \end{macrocode}
+% \end{function}
+% \begin{macrocode}
+\keys_define:nn { @@ }
+{
+% \end{macrocode}
+% \leavevmode
+% \refstepcounter{subsection}
+% \docsetnameref{\pkgoptex}
+% \label{usage:opt:ex}
+% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\pkgoptex}
+% \DescribeOption{\pkgoptex}
+% \begin{description}
+% \item[Value] \texttt{eo\docpipe{}ee\docpipe{}ex\docpipe{}xo\docpipe{}xe\docpipe{}xx}
+% \end{description}
+% \begin{macrocode}
+Expans .multichoices:nn = { eo, ee, ex, xo, xe, xx }
+{ \tl_gset_eq:NN \g@@_option_expans_tl \l_keys_choice_tl },
+Expans .default:n = { xo },
+Expans .initial:n = { xo },
+% \end{macrocode}
+% \leavevmode
+% \refstepcounter{subsubsection}
+% \docsetnameref{\pkgoptfi}
+% \label{usage:opt:fi}
+% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\pkgoptfi}
+% \DescribeOption{\pkgoptfi}
+% \begin{description}
+% \item[Value] \meta{\doccceptpath}
+% \end{description}
+% \begin{macrocode}
+File .code:n = {
+ \tl_gset:Nx \g@@_log_file_tl{#1}
+},
+File .default:n = { \@@_sys_filename: },
+File .initial:n = { \@@_sys_filename: },
+% \end{macrocode}
+% \leavevmode
+% \refstepcounter{subsubsection}
+% \docsetnameref{\pkgoptin}
+% \label{usage:opt:in}
+% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\pkgoptin}
+% \DescribeOption{\pkgoptin}
+% \begin{description}
+% \item[Value] \meta{\doccceptcode}, with |####1| as the argument to be replaced
+% \end{description}
+% \begin{macrocode}
+Inner .code:n={
+ \@@_option_inner:n{#1}
+ \exp_last_unbraced:Nf
+ \@@_make_ccool:nnnn
+ {
+ { \g@@_option_name_tl }
+ { \g@@_option_inner_tl }
+ { \g@@_option_separ_tl }
+ { \g@@_option_outer_tl }
+ }
+},
+Inner .value_required:n = false,
+Inner .default:n = {####1},
+Inner .initial:n = {####1},
+% \end{macrocode}
+% \leavevmode
+% \refstepcounter{subsubsection}
+% \docsetnameref{\pkgoptna}
+% \label{usage:opt:na}
+% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\pkgoptna}
+% \DescribeOption{\pkgoptna}
+% \begin{description}
+% \item[Value] \meta{\docccepttl}
+% \end{description}
+% \begin{macrocode}
+Name .code:n={
+ \@@_option_name:n{#1}
+ \exp_last_unbraced:Nf
+ \@@_make_ccool:nnnn
+ {
+ { \g@@_option_name_tl }
+ { \g@@_option_inner_tl }
+ { \g@@_option_separ_tl }
+ { \g@@_option_outer_tl }
+ }
+},
+Name .value_required:n = false,
+Name .default:n = { Math },
+Name .initial:n = { Math },
+% \end{macrocode}
+% \leavevmode
+% \refstepcounter{subsubsection}
+% \docsetnameref{\pkgoptou}
+% \label{usage:opt:ou}
+% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\pkgoptou}
+% \DescribeOption{\pkgoptou}
+% \begin{description}
+% \item[Value] \meta{\doccceptcode}, with |####1| as the argument to be replaced
+% \end{description}
+% \begin{macrocode}
+Outer .code:n={
+ \@@_option_outer:n{#1}
+ \exp_last_unbraced:Nf
+ \@@_make_ccool:nnnn
+ {
+ { \g@@_option_name_tl }
+ { \g@@_option_inner_tl }
+ { \g@@_option_separ_tl }
+ { \g@@_option_outer_tl }
+ }
+},
+Outer .value_required:n = false,
+Outer .default:n = { \ensuremath{####1} },
+Outer .initial:n = { \ensuremath{####1} },
+% \end{macrocode}
+% \leavevmode
+% \refstepcounter{subsubsection}
+% \docsetnameref{\pkgoptse}
+% \label{usage:opt:se}
+% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\pkgoptse}
+% \DescribeOption{\pkgoptse}
+% \begin{description}
+% \item[Value] That of `separators' in \cite[Section 8 of \pkg{l3seq}]{interface3}
+% \end{description}
+% \begin{macrocode}
+Separ .code:n={
+ \@@_option_separ:n{#1}
+ \exp_last_unbraced:Nf
+ \@@_make_ccool:nnnn
+ {
+ { \g@@_option_name_tl }
+ { \g@@_option_inner_tl }
+ { \g@@_option_separ_tl }
+ { \g@@_option_outer_tl }
+ }
+},
+Separ .value_required:n = false,
+Separ .default:n = { {\ }and{\ } } { ,{\ } } { ,{\ }and{\ } },
+Separ .initial:n = { {\ }and{\ } } { ,{\ } } { ,{\ }and{\ } },
+% \end{macrocode}
+% \leavevmode
+% \addtocounter{subsection}{1}
+% \docsetnameref{\pkgoptwr}
+% \label{usage:opt:wr}
+% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\pkgoptwr}
+% \DescribeOption{\pkgoptwr}
+% \begin{description}
+% \item[Value] \meta{\doccceptbool}
+% \end{description}
+% \begin{macrocode}
+Write .code:n = {
+ \bool_if:nTF{#1}
+ {\@@_log_open:}
+ {\@@_log_close:}
+},
+Write .value_required:n = false,
+Write .default:n = \BooleanFalse,
+Write .initial:n = \BooleanFalse
+% \end{macrocode}
+% \begin{macrocode}
+}
+% \end{macrocode}
+% \leavevmode
+% \refstepcounter{section}
+% \docsetnameref{\cs{CcoolRead}}
+% \label{usage:cs:read}
+% \addcontentsline{toc}{section}{\protect\numberline{\thesection}\cs{CcoolRead}}
+% \begin{function}{\CcoolRead}
+% \begin{arguments}
+% \item \meta{\doccceptpath}
+% \end{arguments}
+% \begin{description}
+% \item[Semantics]\docfillblank
+% \begin{enumerate}
+% \item Reads the definitions in \meta{\doccceptpath}.
+% \item Writes to \file{ccool.log}: `read from \meta{\doccceptpath}'
+% \end{enumerate}
+% \end{description}
+% \end{function}
+% \begin{macrocode}
+\NewDocumentCommand{\CcoolRead}
+{o}
+{
+ \IfValueTF{#1}
+ {\@@_log_read:e{#1}}
+ {\@@_log_read:}
+}
+% \end{macrocode}
+% \leavevmode
+% \refstepcounter{section}
+% \docsetnameref{\cs{CcoolVers}}
+% \label{usage:cs:vers}
+% \addcontentsline{toc}{section}{\protect\numberline{\thesection}\cs{CcoolVers}}
+% \begin{variable}{\CcoolVers}
+% \end{variable}
+% \begin{description}
+% \item[Semantics] Expands to the package's version
+% \end{description}
+% \begin{macrocode}
+\NewDocumentCommand{\CcoolVers}
+{}
+{\use:c{ver@ccool.sty}}
+% \end{macrocode}
+% \section{Misc}
+% \begin{macrocode}
+\ExplSyntaxOff
+% \end{macrocode}
+%^^A \end{implementation}
+%
+% \iffalse
+%</package>
+% \fi
+% \Finale
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/ccool/ccool.pdf b/macros/latex/contrib/ccool/ccool.pdf
new file mode 100644
index 0000000000..672af92977
--- /dev/null
+++ b/macros/latex/contrib/ccool/ccool.pdf
Binary files differ
diff --git a/macros/latex/contrib/oops/oops.dtx b/macros/latex/contrib/oops/oops.dtx
deleted file mode 100644
index bc79a5dea8..0000000000
--- a/macros/latex/contrib/oops/oops.dtx
+++ /dev/null
@@ -1,789 +0,0 @@
-% \iffalse meta-comment
-% !TEX program = pdfLaTeX
-%<*internal>
-\iffalse
-%</internal>
-%<*readme>
-----------------------------------------------------------------
-#### oops --- An object oriented practical scribe's package,
-#### typically for typesetting math
-- Source repository: https://github.com/rogard/oops
-- Released under the LaTeX Project Public License v1.3c or later
-- See http://www.latex-project.org/lppl.txt
-----------------------------------------------------------------
-
-%</readme>
-%<*internal>
-\fi
-\def\nameofplainTeX{plain}
-\ifx\fmtname\nameofplainTeX\else
-\expandafter\begingroup
-\fi
-%</internal>
-%<*install>
-\input docstrip.tex
-\keepsilent
-\askforoverwritefalse
-\preamble
-----------------------------------------------------------------
-oops --- An object oriented practical scribe's package,
-typically for typesetting math
-Released under the LaTeX Project Public License v1.3c or later
-See http://www.latex-project.org/lppl.txt
-----------------------------------------------------------------
-
-\endpreamble
-\postamble
-
-Copyright (C) 2020 by Erwann Rogard
-
-This work 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:
-
-http://www.latex-project.org/lppl.txt
-
-This work is "maintained" (as per LPPL maintenance status) by
-Erwann Rogard.
-
-This work consists of the file oops.dtx
-and the derived files oops.ins,
-oops.pdf and
-oops.sty.
-
-\endpostamble
-\generate{
- \file{\jobname.sty}{\from{\jobname.dtx}{package}}
-}
-%</install>
-%<install> \endbatchfile
-%<*internal>
-\generate{
- \file{\jobname.ins}{\from{\jobname.dtx}{install}}
-}
-\nopreamble\nopostamble
-\generate{
- \file{README.txt}{\from{\jobname.dtx}{readme}}
-}
-\nopreamble\nopostamble
-\generate{
- \file{README.md}{\from{\jobname.dtx}{readme}}
-}
-\ifx\fmtname\nameofplainTeX
-\expandafter\endbatchfile
-\else
-\expandafter\endgroup
-\fi
-%</internal>
-%<package> \RequirePackage{xparse}[2019/05/28]
-%<package> \ProvidesExplPackage
-%<package> {oops} % Package name
-%<package> {2020/03/11} % Release date
-%<package> {1.0} % Release version
-%<package> {An object oriented practical scribe's package} % Description
-%
-%<*driver>
-\documentclass[full]{l3doc}
-\usepackage{oops}
-\usepackage{tcolorbox}
-\tcbuselibrary{listings,breakable}
-\ExplSyntaxOn
-\tl_gset:Nn \partname {Part}
-\ExplSyntaxOff
-\EnableCrossrefs
-\CodelineIndex
-\RecordChanges
-% \AtEndDocument { \PrintChanges \PrintIndex } % TODO
-\providecommand\pkgdata{\texttt{\meta{data}}}
-\providecommand\pkgoptions{\texttt{\meta{kvl0}}}
-\providecommand\pkgkey{\dockey{Key}}
-\providecommand\pkgvalue{\dockey{Value}}
-\providecommand\pkggenobjdefault{\texttt{Math}}
-\providecommand\pkgobj[1]{object identified by #1}
-\providecommand\pkgsep[1]{\docmarg{\texttt{#1}}}
-\providecommand\pkgargobj{\texttt{\meta{tl1}}}
-\providecommand\pkgargexpi{\texttt{\meta{tl2}}}
-\providecommand\pkgarginneri{\texttt{\meta{code1}}}
-\providecommand\pkgargsep{\texttt{\pkgsep{\meta{tl3}}\pkgsep{\meta{tl4}}\pkgsep{\meta{tl5}}}}
-\providecommand\pkgargouter{\texttt{\meta{code2}}}
-\providecommand\pkgargdefi{\texttt{\meta{kvl1}}}
-\providecommand\pkgarginnerii{\texttt{\meta{code3}}}
-\providecommand\pkgargdefii{\texttt{\meta{kvl2}}}
-\providecommand\pkgargexpii{\texttt{\meta{tl6}}}
-\providecommand\docConv[1]{Convention~\ref{#1}}
-\providecommand\docconv[1]{convention~\ref{#1}}
-\providecommand\docmarg[1]{\texttt{\char`\{#1\char`\}}}
-\providecommand\docopto[1]{\texttt{[}#1\texttt{]}}
-\providecommand\docopte[2]{#1\docmarg{#2}}
-\providecommand\docinlcode{\textit{inline code}}
-\providecommand\docInlcode{\textit{Inline code}}
-\providecommand\docbody{\textit{body}}
-\providecommand\docemptyarg{\textit{empty}}
-\providecommand\dockey[1]{\texttt{#1}}
-\providecommand\dockeyval[2]{\texttt{#1=#2}}
-\providecommand\docnovalue{\textit{no value}}
-\providecommand\docpreamb{\textit{preamble}}
-\providecommand\doctl{\textit{token list}}
-\providecommand\docTl{\textit{Token list}}
-\providecommand\dockvl{\textit{keyval list}}
-\providecommand\docKvl{\textit{Keyval list}}
-\providecommand\dockl{\textit{key list}}
-\providecommand\doclist[1]{Listing~\autoref{listing:#1}}
-\begin{document}
-\DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \GetFileInfo{\jobname.sty}
-%
-%
-% \title{^^A
-% \pkg{oops}, an object oriented practical scribe's package.\thanks{^^A
-% This file describes version \fileversion, last revised \filedate.^^A
-% }^^A
-% }
-% \author{Erwann Rogard\thanks{firstname dot lastname AusTria gmail dot com}}
-%
-% \date{Released \filedate}
-%
-% \maketitle
-%
-% \begin{abstract}\pkg{oops}~is a package for \LaTeX~(hence ``scribe'') that organizes (typically mathematical) definitions
-% along two dimensions: functions and objects, hence ``OO''. Such definitions are made \textit{inline} thanks to a minimalist interface built upon \pkg{xparse}\cite{xparse}. To make a definition, use \cs{OopsNew}\docmarg{\pkgargobj}, where \pkgargobj~identifies an object, followed by input that alternates between `text' and instructions.
-% The latter create and expand definitions using rules that can be modified at the package level or themselves inline.
-% This framework is suitable for instance where \pkgargobj~ is either of \texttt{ModelA} and \texttt{ModelB},
-% and each requires its own definition of, say, a \textit{space}. In this case, they would be encoded respectively as \cs{Space}\docmarg{\texttt{ModelA}} and \cs{Space}\docmarg{\texttt{ModelB}}. However, this would be verbose if most functions applied to just one object, so the package provides a generic one that is set by default to \pkggenobjdefault. For example, \verb|\OopsNew{Math}[Let~]{Space=\Omega}[~denote the sample space]{}|, followed by \verb|$\Space$|, expand to:
-% ``\OopsNew{Math}[Let~]{Space=\Omega}[~denote the sample space]{}'' and ``$\Space$''.
-% Other features automate repetitive formatting tasks. Altogether, ``practical''.
-% \end{abstract}
-%
-% \tableofcontents
-%
-% \part{Usage}\label{part:usage}
-%
-% \addtocounter{section}{1}
-% \addcontentsline{toc}{section}{\protect\numberline{\thesection}Convention}
-% \section*{Convention}%\label{usage:conv}
-%
-% \begin{enumerate}[label=\alph*)]
-% \item By default, all commands are declared in the \docbody~of \cs{documentclass}.
-% \item Arguments expecting a \doctl\cite{tex.stack:104023}, \dockvl\cite[l3keys]{interface3}, a character, and \docinlcode, are denoted respectively
-% \meta{tl}, \meta{kvl}, \meta{char}, and \meta{code}.
-% \item \marg{arg} is either \texttt{m} or \texttt{g} options\cite{xparse}, and \docopto{\meta{arg}} and \docopte{\meta{char}}{\meta{arg}} are \texttt{o} and \texttt{e} options\cite{xparse}.
-% \item If we say that \meta{option} can be used to override \meta{default}, and \meta{option} is \docnovalue\cite{xparse}, we will treat it as though \meta{option}$=$\meta{default}.
-% \item We say ``set the key to'' as shorthand for ``set the value associated with the key to''
-% \item We call \cs{code}\marg{arg}, \meta{code} with \verb|#1| replaced by \marg{arg}
-% \end{enumerate}
-%
-% The template for the description of functions and arguments is, where applicable:
-% \begin{description}
-% \item[Use it to]
-% \item[Requirement]
-% \item[Side effect]
-% \item[Expands to]
-% \item[Default]
-% \item[Example]
-% \item[Other]
-% \end{description}Only the items that cannot be deduced from other information, are given. For instance, the requirement that \pkgargobj~be a \doctl~is ommited.
-%
-%
-% \addtocounter{section}{1}
-% \addcontentsline{toc}{section}{\protect\numberline{\thesection}Loading the package}
-%
-% \begin{function}{\usepackage}
-% \begin{syntax}
-% \cs{usepackage}\docopto{\pkgoptions}\docmarg{\pkg{oops}}
-% \end{syntax}
-% \begin{description}
-% \item[Use it to] Load the package
-% \item[Requirement]\begin{enumerate}
-% \item \file{oops.sty} is in the path of the \LaTeX~engine. See \autoref{part:other}, \autoref{other:support}.
-% \item Declared in the \docpreamb~of \cs{documentclass}
-% \end{enumerate}
-% \item[Side effect] That of \cs{OopsOptions}\docmarg{\pkgoptions}
-% \end{description}
-% \end{function}
-%
-% \addtocounter{section}{1}
-% \addcontentsline{toc}{section}{\protect\numberline{\thesection}\cs{OopsOptions}}
-% \begin{function}{\OopsOptions}
-% \begin{syntax}
-% \cs{OopsOptions}\docmarg{\pkgoptions}
-% \end{syntax}
-% \begin{description}
-% \item[Use it to] Set default options for \cs{OopsNew}
-% \item[Other] Also works in the \docpreamb
-% \end{description}
-% \end{function}
-%
-% \DescribeOption{\meta{kvl}}
-% \begin{description}
-% \item[Requirement] Keys listed below.
-% \end{description}
-%
-% \addtocounter{subsection}{1}
-% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\dockey{GenericObject}}
-% \DescribeOption{GenericObject}
-% \begin{description}
-% \item[Requirement] See \cs{OopsNew}, \pkgargobj
-% \item[Default] \verb|Math|
-% \end{description}
-%
-% \addtocounter{subsection}{1}
-% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\dockey{Inner}}
-% \DescribeOption{Inner}
-% \begin{description}
-% \item[Requirement] See \cs{OopsNew}, \pkgarginneri
-% \item[Default] \verb|{#1}|
-% \end{description}
-%
-% \addtocounter{subsection}{1}
-% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\dockey{Separators}}
-% \DescribeOption{Separators}
-% \begin{description}
-% \item[Requirement] See \cite[Section 8 of \pkg{l3seq}]{interface3}
-% \item[Default] \verb|{\text{~and~}{\text{,~}}{\text{,~and~}}|
-% \end{description}
-%
-% \addtocounter{subsection}{1}
-% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\dockey{Outer}}
-% \DescribeOption{Outer}
-% \begin{description}
-% \item[Requirement] See \cs{OopsNew}, \pkgargouter
-% \item[Default] \verb|\ensuremath{#1}|
-% \end{description}
-%
-% \addtocounter{section}{1}
-% \addcontentsline{toc}{section}{\protect\numberline{\thesection}\cs{OopsClear}}
-% \begin{function}{\OopsClear}
-% \begin{syntax}
-% \cs{OopsClear}\docmarg{\pkgargobj}
-% \end{syntax}
-% \end{function}
-%
-% \begin{description}
-% \item[Side effect] Clears \pkgargobj~of any \pkgdata
-% \end{description}
-%
-% \addtocounter{section}{1}
-% \addcontentsline{toc}{section}{\protect\numberline{\thesection}\cs{OopsNew}}
-% \setcounter{subsection}{0}
-% \begin{function}{\OopsNew}
-% \begin{syntax}
-% \cs{OopsNew}\docmarg{\pkgargobj}
-% \docopto{\pkgargexpi}
-% \docopte{i}{\pkgarginneri}
-% \docopte{s}{\pkgargsep}
-% \docopte{o}{\pkgargouter}
-% \docmarg{\pkgargdefi}
-% \docopte{i}{\pkgarginnerii}
-% \docmarg{\pkgargdefii}
-% \docopto{\pkgargexpii}
-% \end{syntax}
-% \begin{description}
-% \item[Requirement] Only \pkgargobj~and \pkgargdefi~are mandatory
-% \end{description}
-% \end{function}
-%
-% \addtocounter{subsection}{1}
-% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docmarg{\pkgargobj}}
-% \DescribeOption{\pkgargobj}
-%
-% \begin{description}
-% \item[Use it to] Identify an object
-% \item[Side effect] Registers \pkgargobj~ as a new object, if applicable
-% \item[Example] \pkggenobjdefault, \verb|ModelA|, \verb|ModelB|
-% \end{description}
-%
-% \addtocounter{subsection}{1}
-% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docopto{\pkgargexpi}}
-% \DescribeOption{\pkgargexpi}
-%
-% \begin{description}
-% \item[Use it to] Bring about a definition
-% \item[Expands to] \pkgargexpi
-% \item[Example]\verb|Let~|
-% \end{description}
-%
-% \addtocounter{subsection}{1}
-% \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docopte{i}{\pkgarginneri}}
-% \DescribeOption{\pkgarginneri}
-%
-% \begin{description}
-% \item[Use it to] Override \dockey{Inner}.
-% \item[Example] \verb|\mathbb{#1}|
-% \end{description}
-%
-% \addtocounter{subsection}{1}
-% \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docopte{s}{\pkgargsep}}
-% \DescribeOption{\pkgargsep}
-%
-% \begin{description}
-% \item[Use it to] Override \dockey{Separators}
-% \item[Example] \verb|{~\&~}{,~}{~\&~}|
-% \end{description}
-%
-% \addtocounter{subsection}{1}
-% \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docopte{o}{\pkgargouter}}
-% \DescribeOption{\pkgargouter}
-%
-% \begin{description}
-% \item[Use it to] Override \dockey{Outer}
-% \item[Example] \verb|\text{#1}|
-% \end{description}
-%
-% \addtocounter{subsection}{1}
-% \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docmarg{\pkgargdefi}}
-% \DescribeOption{\pkgargdefi}
-%
-% \begin{description}
-% \item[Side effect] If \pkgkey~is a new key, attaches to it \pkgdata=\cs{\pkgarginneri}\docmarg{\pkgvalue}
-% \item[Expands to] If \pkgargexpi~is \docnovalue, none, otherwise,
-% \begin{enumerate}
-% \item
-% For each \pkgkey, calls \cs{\pkgkey}\pkgargobj. Call it \meta{seq}.
-% \item
-% Concatenates \meta{seq} using \pkgargsep. Call it \meta{tmp}.
-% \item Expands \cs{\pkgargouter}\marg{tmp}
-% \end{enumerate}
-% \item[Example] \verb|Sample=\Omega|
-% \end{description}
-%
-% The remaining options taken together forward to:
-%
-% \cs{OopsNew}\docmarg{\pkgargobj}
-% \docopte{o}{\pkgarginnerii}
-% \docmarg{\pkgargdefii}
-% \docopto{\pkgargexpii}
-%
-% \addtocounter{subsection}{1}
-% \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docopte{i}{\pkgarginnerii}}
-% \DescribeOption{\pkgarginnerii}
-%
-% \addtocounter{subsection}{1}
-% \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docmarg{\pkgargdefii}}
-% \DescribeOption{\pkgargdefii}
-%
-% \addtocounter{subsection}{1}
-% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docopto{\pkgargexpii}}
-% \DescribeOption{\pkgargexpii}
-%
-% \addtocounter{section}{1}
-% \addcontentsline{toc}{section}{\protect\numberline{\thesection}\cs{\meta{Key}}}
-% \setcounter{subsection}{0}
-%
-% \begin{function}{\<Key>}
-% \begin{syntax}
-% \cs{\meta{Key}}\docopto{\pkgargobj}
-% \end{syntax}
-% \begin{description}
-% \item[Side effect] Expands to \pkgdata~associated with \pkgargobj~and \dockey{\meta{Key}}, if applicable.
-% \end{description}
-% \end{function}
-%
-% \clearpage
-% \part{Listings}\label{part:listing}
-%
-% \newtcblisting[auto counter]
-% {listing}[2][]{
-% noparskip,
-% breakable,
-% colback=white,
-% colframe=black,
-% opacitybacktitle=.8,%
-% fonttitle=\bfseries,
-% title=Listing~\thetcbcounter. #1,
-% arc=0pt,
-% outer arc=0pt,
-% boxrule=1pt,
-% #2
-% }
-%
-% \phantomsection\addcontentsline{toc}{section}{\doclist{options:i}.}
-% \begin{listing}[]
-% {label=listing:options:i}
-% \OopsOptions
-% {
-% Inner = {#1},
-% Outer = {#1}
-% }
-% \end{listing}
-%
-% \phantomsection\addcontentsline{toc}{section}{\doclist{foo:i}.}
-% \begin{listing}[]{label=listing:foo:i}
-% \OopsNew{Foo}{ Barr = { a }, Baz = { b } }{ Qux = { c } }
-% \textless(\Barr[Foo]), (\Baz[Foo]) \& (\Qux[Foo])\textgreater
-% \end{listing}
-%
-% \phantomsection\addcontentsline{toc}{section}{\doclist{foo:ii}.}
-% \begin{listing}[]{label=listing:foo:ii}
-% \OopsNew{Foo}[]i{(#1)}s{{~\&~}{,~}{~\&~}}o{\textless#1\textgreater}{ Barr = { a }, Baz = { b }, Qux = { c } }
-% \end{listing}
-%
-% \phantomsection\addcontentsline{toc}{section}{\doclist{foo:iii}.}
-% \begin{listing}[]{label=listing:foo:iii}
-% \OopsOptions
-% {
-% Inner = {(#1)},
-% Separators = { {~\&~}{~,~}{~\&~} },
-% Outer = {\textless#1\textgreater}
-% }
-% \OopsNew{Foo}[]{ Barr = { a }, Baz = { b }, Qux = { c } }
-% \end{listing}
-%
-% \phantomsection\addcontentsline{toc}{section}{\doclist{foo:iv}.}
-% \begin{listing}[]
-% {label=listing:foo:iv}
-% \OopsOptions
-% {
-% Inner,
-% Separators,
-% Outer
-% }
-% \end{listing}
-%
-% \phantomsection\addcontentsline{toc}{section}{\doclist{math:i}.}
-% \begin{listing}[]
-% {label=listing:math:i}
-% \OopsNew{Math}[We call~]{Elems={\omega_1, \dots, \omega_n}}
-% [~the elementary events, and ]{}{Space=\Omega}
-% [\begin{equation*}\Space=(\Elems)\end{equation*}~the sample space.]
-% {}
-% \end{listing}
-%
-%
-% \phantomsection\addcontentsline{toc}{section}{Listing~\autoref{listing:math:ii}.}
-% \begin{listing}[]
-% {label=listing:math:ii}
-% \OopsClear{Math}
-% \OopsNew{Math}[Let ]s{{,}{,}{,}}o{\ensuremath{\{#1\}}}
-% {Space=\Omega, SigmaField=\mathcal{F}, Measure=\mathcal{P}}
-% [~denote the probability space, where $\SigmaField\subset 2^{\Space}$.]
-% {}
-% \end{listing}
-% \phantomsection\addcontentsline{toc}{section}{Listing~\autoref{listing:mvt}.}
-% \begin{listing}[]{label=listing:mvt}
-% \newtheorem{theorem}{Theorem}
-% \OopsNew{Math}
-% i{\mathbb{#1}}{ N = { N } , R = { R } }
-% [\begin{theorem}[Mittelwertsatz f\"ur $n$ Variable]Es sei~]
-% {}
-% {
-% OffeneMenge={D},
-% Ci={C^{1}},
-% Strecke={[x_0,x]}
-%^^A %Strecke={\char`[x_0,x\char`]} % Also works
-%^^A %Strecke={\[x_0,x\]} % BUG
-% }
-% [$n\in\N$, $\OffeneMenge\subseteq\N^n$ eine offene Menge und $f\in \Ci(\OffeneMenge,\R)$.
-% Dann gibt es auf jeder Strecke $\Strecke\subset\OffeneMenge$ einen Punkt $\xi\in\Strecke$, ]
-% {}
-% {
-% yDifferenz={f(x)-f(x_0)},
-% xDifferenz={x-x_0},
-% Steigung={\frac{\yDifferenz}{\xDifferenz}}
-% }
-% [so dass gilt \begin{equation*}\Steigung = \operatorname{grad} f(\xi)^{\top}\end{equation*}
-% \end{theorem}]
-% {}
-% \end{listing}
-%
-% \StopEventually{^^A
-% \PrintChanges
-% \PrintIndex
-% }
-% \part{Other}\label{part:other}
-% \section{Acknowledgment}
-%
-% This work has benefited from Q\&A's from the \LaTeX community. For specifics, see here: \url{https://tex.stackexchange.com/users/112708/erwann?tab=questions}
-% \doclist{math:i} and \doclist{math:ii} are from \cite{shir95}. \doclist{mvt} is from \pkg{tcolbox}\cite[17.3]{tcolbox}.
-%
-% \begin{thebibliography}{1}
-% \bibitem{shir95} A.N. Shiryaev {\em Probability} Springer, 1995
-% \bibitem{interface3} The \LaTeX3 Project Team {\em The \LaTeX3 interfaces}
-% \url{http://ftp.math.purdue.edu/mirrors/ctan.org/macros/latex/contrib/l3kernel/interface3.pdf}
-% \bibitem{xparse} The \LaTeX3 Project Team {\em The \pkg{xparse} package}
-% \url{http://ftp.math.purdue.edu/mirrors/ctan.org/macros/latex/contrib/l3packages/xparse.pdf}
-% \bibitem{tcolbox} Thomas F. Sturm {\em The \pkg{tcolorbox} package}
-% \url{http://www.texdoc.net/texmf-dist/doc/latex/tcolorbox/tcolorbox.pdf}
-% \bibitem{tex.stack:104023} \url{https://tex.stackexchange.com/questions/104023/what-is-a-token#104025}
-% \end{thebibliography}
-%
-% \section{Bug}\label{other:bug}
-%
-% See \doclist{math:ii}. Low priority as there are workarounds.
-%
-% \section{Disclaimer}\label{other:discl}
-%
-% This package has not been tested beyond \autoref{part:listing}.
-%
-% Option type \texttt{G} is supported but not recommended by \pkg{xparse}\cite{xparse}, but it's really practical in this case.
-
-% \section{Support}\label{other:support}
-%
-% This package is available from \url{https://www.ctan.org/pkg/oops} (release) or \url{https://github.com/rogard/oops} (development) where you can report issues.
-%
-% \section{To do}\label{other:todo}
-%
-% \begin{enumerate}
-% \item Continue \autoref{part:listing} based on \cite[Section 17.3]{tcolbox}
-% \end{enumerate}
-%
-%^^A \section{Changes}
-%
-% \changes{v1.0}{2019/03/08}{Initial version}
-%
-% \clearpage
-% \part{Implementation}\label{part:impl}
-%
-% \iffalse
-%<*package>
-% \fi
-% \section{Back end}
-% \subsection{Aux}
-% \subsubsection{Msg}
-% \begin{macrocode}
-\NeedsTeXFormat{LaTeX2e}[2019/10/01]
-\ExplSyntaxOn
-\msg_new:nnn
-{Oops}
-{generic}
-{#1}
-% \end{macrocode}
-% \subsubsection{Variables}
-% \begin{macrocode}
-\seq_new:N \__erw_oops_seq
-% \end{macrocode}
-% \subsubsection{Options}
-% \begin{macrocode}
-\keys_define:nn { Oops }
-{
- GenericObject .tl_gset:N = \__erw_oops_object_default_tl,
- GenericObject .value_required:n = false,
- GenericObject .default:n = {Math},
- GenericObject .initial:n = {Math},
- Inner .code:n =
- {
- \cs_gset:Npn \__erw_oops_inner_default:n ##1{#1}
- },
- Inner .value_required:n = false,
- Inner .default:n = {#1},
- Inner .initial:n = {#1},
- Separators .tl_gset:N = \__erw_oops_separators_default_tl,
- Separators .value_required:n = false,
- Separators .default:n = {{ \text{~and~}}{\text{,~}}{\text{,~and~}}},
- Separators .initial:n = {{ \text{~and~}}{\text{,~}}{\text{,~and~}}},
- Outer .code:n =
- {
- \cs_gset:Npn \__erw_oops_outer_default:n ##1{#1}
- },
- Outer .value_required:n = false,
- Outer .default:n = {\ensuremath{#1}},
- Outer .initial:n = {\ensuremath{#1}}
-}
-% \end{macrocode}
-% \subsection{Prop}
-% \subsubsection{name}
-% \begin{macrocode}
-\cs_new:Npn \__erw_oops_name:n #1{__erw_oops_#1}
-% \end{macrocode}
-% \subsubsection{new}
-% \begin{macrocode}
-\cs_new_protected:Nn \__erw_oops_new:n
-{
- \prop_new:c{\__erw_oops_name:n { #1 }}
-}
-\cs_new_protected:Nn \__erw_oops_clear_new:n
-{
- \prop_clear_new:c{\__erw_oops_name:n { #1 }}
-}
-% \end{macrocode}
-% \subsubsection{put}
-% \begin{macrocode}
-\cs_new_protected:Nn \__erw_oops_put:nnn
-{
- \prop_put:cnn { \__erw_oops_name:n { #1 } } { #2 } { #3 }
-}
-\cs_new_protected:Nn \__erw_oops_putinner:nnn
-{
- \__erw_oops_put:nnn{#1}
- {#2}
- {\__erw_oops_inner:n{#3}}
-}
-% \end{macrocode}
-% \subsubsection{item}
-% \begin{macrocode}
-\cs_new:Nn \__erw_oops_item:nn
-{
- \prop_item:cn { \__erw_oops_name:n { #1 } } { #2 }
-}
-\cs_new:Npn \__erw_oops_item:nnn #1 #2 #3
-{
- \__erw_oops_item:nn{#1}{#2}
-}
-\cs_new:Nn \__erw_oops_itemcmd:Nn
-{
- \ProvideDocumentCommand{#1}
- {O{\__erw_oops_object_default_tl}}
- {
- \__erw_oops_item:nn {##1}{ #2 }
- }
-}
-\cs_generate_variant:Nn \__erw_oops_itemcmd:Nn {c}
-\cs_new:Npn \__erw_oops_itemcmd:nnn
-#1
-#2
-#3
-{
- \__erw_oops_itemcmd:cn{#2}{#2}
-}
-\cs_new:Npn \__erw_oops_itemto_seq:nnn #1 #2 #3
-{
- \seq_put_right:Nn
- \__erw_oops_seq
- {\__erw_oops_item:nn{#1}{#2}}
-}
-% \end{macrocode}
-% \subsubsection{conditional}
-% \begin{macrocode}
-\cs_new:Nn \__erw_oops_if_exist:nTF
-{
- \prop_if_exist:cTF{\__erw_oops_name:n { #1 }}{#2}{#3}
-}
-% \end{macrocode}
-% \subsubsection{parse}
-% \begin{macrocode}
-\cs_set:Npn \__erw_oops_parse:Nnn
-#1 % fun
-#2 % prop name
-#3 % clist
-{
-
- \tl_if_blank:nTF{#3}
- {\c_empty_tl}
- {
- \seq_set_split:Nnn \l_tmpa_seq {,}{#3}
- \cs_set:Npn \__erw_oops_parse:w ##1 = ##2 \q_stop
- {
- #1
- {#2}
- {\tl_trim_spaces:n{##1}} % key
- {\tl_trim_spaces:n{##2}} % value
- }
- \cs_set:Npn \__erw_oops_parse:n ##1
- {
- \__erw_oops_parse:w ##1 \q_stop
- }
- \seq_map_function:NN \l_tmpa_seq \__erw_oops_parse:n
- }
-}
-% \end{macrocode}
-% \section{Front end}
-% \subsection{\cs{OopsOptions}}
-% \begin{macrocode}
-\NewDocumentCommand{\OopsOptions}
-{m}
-{
- \keys_set:nn { Oops } {#1}
-}
-% \ProcessKeysPackageOptions{ Oops }
-% \end{macrocode}
-% \subsection{\cs{OopsClear}}
-% \begin{macrocode}
-\NewDocumentCommand{\OopsClear}
-{m}
-{
- \__erw_oops_clear_new:n{#1}
-}
-% \end{macrocode}
-% \subsection{\cs{OopsNew}}
-% \begin{macrocode}
-\NewDocumentCommand{\OopsNew}
-{
- m
- +o
- E{iso}
- {
- {\__erw_oops_inner_default:n{##1}}
- {\__erw_oops_separators_default_tl}
- {\__erw_oops_outer_default:n{##1}}
- }
- m
- E{i}
- {
- {\__erw_oops_inner_default:n{##1}}
- }
- g
- +o
-}
-{
- \__erw_oops_if_exist:nTF{#1}
- {\c_empty_tl}
- {\__erw_oops_new:n{#1}}
-
- \IfValueTF{#2}
- {#2}
- {\c_empty_tl}
- \cs_gset:Npn
-
- \__erw_oops_inner:n ##1
- {#3}
- \__erw_oops_parse:Nnn
- \__erw_oops_putinner:nnn
- {#1}
- {#6}
-
- \__erw_oops_parse:Nnn
- \__erw_oops_itemcmd:nnn
- {#1}
- {#6}
-
- \IfValueTF{#2}
- {
- \seq_clear:N \__erw_oops_seq
- \__erw_oops_parse:Nnn
- \__erw_oops_itemto_seq:nnn
- {#1}
- {#6}
- \cs_gset:Npn
- \__erw_oops_outer:n ##1
- {#5}
- \__erw_oops_outer:n
- {\exp_last_unbraced:NNo
- \seq_use:Nnnn
- \__erw_oops_seq
- {#4}
- }
- }
- {\c_empty_tl}
-
- \IfValueTF{#8}
- {
- \IfValueTF{#9}
- {
- \exp_not:n{\OopsNew{#1}i{#7}{#8}[#9]}
- }
- {
- \exp_not:n{\OopsNew{#1}i{#7}{#8}}
- }
- }
- {
- \IfValueTF{#9}
- {
- \exp_not:n{\OopsNew{#1}[#9]}
- }
- {\c_empty_tl}
- }
-}
-% \end{macrocode}
-% \begin{macrocode}
-\ExplSyntaxOff
-% \end{macrocode}
-%
-% \iffalse
-%</package>
-% \fi
-% \Finale
-\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/oops/oops.pdf b/macros/latex/contrib/oops/oops.pdf
deleted file mode 100644
index aeffddaf4d..0000000000
--- a/macros/latex/contrib/oops/oops.pdf
+++ /dev/null
Binary files differ