From 829b2c9c9c7e5f8ad2644f9d60b7d6c1c7c06776 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 15 Apr 2020 21:34:27 +0000 Subject: ccool (15apr20) git-svn-id: svn://tug.org/texlive/trunk@54753 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/source/latex/ccool/ccool.dtx | 1692 ++++++++++++++++++++++++ Master/texmf-dist/source/latex/ccool/ccool.ins | 64 + 2 files changed, 1756 insertions(+) create mode 100644 Master/texmf-dist/source/latex/ccool/ccool.dtx create mode 100644 Master/texmf-dist/source/latex/ccool/ccool.ins (limited to 'Master/texmf-dist/source/latex/ccool') diff --git a/Master/texmf-dist/source/latex/ccool/ccool.dtx b/Master/texmf-dist/source/latex/ccool/ccool.dtx new file mode 100644 index 00000000000..4dd2d47e226 --- /dev/null +++ b/Master/texmf-dist/source/latex/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/Master/texmf-dist/source/latex/ccool/ccool.ins b/Master/texmf-dist/source/latex/ccool/ccool.ins new file mode 100644 index 00000000000..16203f4f56d --- /dev/null +++ b/Master/texmf-dist/source/latex/ccool/ccool.ins @@ -0,0 +1,64 @@ +%% +%% This is file `ccool.ins', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% ccool.dtx (with options: `install') +%% ---------------------------------------------------------------------------- +%% 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 +%% ---------------------------------------------------------------------------- +%% +\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 +%% +%% 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. +%% +%% +%% End of file `ccool.ins'. -- cgit v1.2.3