From 7412eb57b148d2ecd77d0291c97fb05bea8efbb0 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 16 Apr 2020 03:01:17 +0000 Subject: CTAN sync 202004160301 --- .../themes/beamertheme-focus/README.md | 2 +- .../beamertheme-focus/beamercolorthemefocus.sty | 2 +- .../beamertheme-focus/beamerfontthemefocus.sty | 2 +- .../beamertheme-focus/beamerinnerthemefocus.sty | 3 +- .../beamertheme-focus/beamerouterthemefocus.sty | 14 +- .../themes/beamertheme-focus/beamerthemefocus.sty | 4 +- .../themes/beamertheme-focus/demo.pdf | Bin 324539 -> 324539 bytes macros/latex/contrib/ccool/README.md | 7 + macros/latex/contrib/ccool/ccool.dtx | 1692 ++++++++++++++++++++ macros/latex/contrib/ccool/ccool.pdf | Bin 0 -> 722772 bytes macros/latex/contrib/oops/README.md | 9 - macros/latex/contrib/oops/oops.dtx | 789 --------- macros/latex/contrib/oops/oops.pdf | Bin 565727 -> 0 bytes 13 files changed, 1714 insertions(+), 810 deletions(-) create mode 100644 macros/latex/contrib/ccool/README.md create mode 100644 macros/latex/contrib/ccool/ccool.dtx create mode 100644 macros/latex/contrib/ccool/ccool.pdf delete mode 100644 macros/latex/contrib/oops/README.md delete mode 100644 macros/latex/contrib/oops/oops.dtx delete mode 100644 macros/latex/contrib/oops/oops.pdf (limited to 'macros/latex') 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 . \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{beamerthemefocus}[2019/11/20 v2.5 Focus Beamer theme] +\ProvidesPackage{beamerthemefocus}[2020/04/15 v2.6 Focus Beamer theme] \mode 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 Binary files a/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/demo.pdf and b/macros/latex/contrib/beamer-contrib/themes/beamertheme-focus/demo.pdf differ diff --git a/macros/latex/contrib/ccool/README.md b/macros/latex/contrib/ccool/README.md new file mode 100644 index 0000000000..79ddcae18f --- /dev/null +++ b/macros/latex/contrib/ccool/README.md @@ -0,0 +1,7 @@ +---------------------------------------------------------------- +##### 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 +% +%<*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 +---------------------------------------------------------------- + +% +%<*internal> +\fi +\def\nameofplainTeX{plain} +\ifx\fmtname\nameofplainTeX\else +\expandafter\begingroup +\fi +% +%<*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}} +} +% +% \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 +% +% \NeedsTeXFormat{LaTeX2e}[2020/02/02] +% \RequirePackage{etoolbox}[2019/09/21] +% \RequirePackage{l3keys2e}[2020/03/06] +% \RequirePackage{xparse}[2020/03/06] +% \ProvidesExplPackage +% {ccool} % Package name +% {2020/04/15} % Release date +% {2.0} % Release version +% {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} +% +% \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[Let~] +% i{\mathbb{#1}}{ Nat = N, Real = R }*s{{~\rm{and}~}} +% [~denote the natural and real numbers.]{} +% \end{Verbatim} +% expands to: ``\Ccool[Let~]i{\mathbb{#1}}{Nat = N, Real = R}*s{{~\rm{and}~}}[~denote the natural and real numbers.]{}'' +% As a side effect, |$\Nat$|~encodes~``$\Nat$'' (and likewise for |\Real|). +% \pkgoptnad~being the default for \meta{name}, || 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}}| +% Separ={{\ \char`@\ }{\ \%\ }{\ \char`@\ }}} +% \Ccool{ 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 +% { 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} }\nobreak +% \KeyL\KeyD\KeyZ\KeyN\\ +% \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\KeyA\nobreak +% \KeyG\KeyA\nobreak +% \KeyH\KeyA\nobreak +% \KeyH\KeyA\nobreak +% {\{}\nobreak\KeyO{\}},{\ }\nobreak +% \KeyM\KeyR\nobreak +% \KeyO\nobreak +% \KeyT\nobreak +% \KeyL\nobreak +% \KeyD\nobreak +% \KeyZ\nobreak +% \KeyN\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 +% +% \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 Binary files /dev/null and b/macros/latex/contrib/ccool/ccool.pdf differ diff --git a/macros/latex/contrib/oops/README.md b/macros/latex/contrib/oops/README.md deleted file mode 100644 index c7907f4b51..0000000000 --- a/macros/latex/contrib/oops/README.md +++ /dev/null @@ -1,9 +0,0 @@ ----------------------------------------------------------------- -#### 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 ----------------------------------------------------------------- - - 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 -% -%<*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 ----------------------------------------------------------------- - -% -%<*internal> -\fi -\def\nameofplainTeX{plain} -\ifx\fmtname\nameofplainTeX\else -\expandafter\begingroup -\fi -% -%<*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}} -} -% -% \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 -% -% \RequirePackage{xparse}[2019/05/28] -% \ProvidesExplPackage -% {oops} % Package name -% {2020/03/11} % Release date -% {1.0} % Release version -% {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} -% -% \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}{\} -% \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 -% -% \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 Binary files a/macros/latex/contrib/oops/oops.pdf and /dev/null differ -- cgit v1.2.3