diff options
-rw-r--r-- | Master/texmf-dist/doc/latex/ccool/README.md | 2 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/ccool/ccool--1343bdf--91e.tex | 12 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/ccool/ccool-1343c9d-92c.tex | 12 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/ccool/ccool.pdf | bin | 722772 -> 815868 bytes | |||
-rw-r--r-- | Master/texmf-dist/source/latex/ccool/ccool.dtx | 2407 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/ccool/ccool.ins | 64 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/ccool/ccool.sty | 518 |
7 files changed, 1826 insertions, 1189 deletions
diff --git a/Master/texmf-dist/doc/latex/ccool/README.md b/Master/texmf-dist/doc/latex/ccool/README.md index 79ddcae18f0..a3801bd0810 100644 --- a/Master/texmf-dist/doc/latex/ccool/README.md +++ b/Master/texmf-dist/doc/latex/ccool/README.md @@ -1,5 +1,5 @@ ---------------------------------------------------------------- -##### ccool --- A tool for encoding mathematical notation +##### ccool --- A key-value document command parser - 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/Master/texmf-dist/doc/latex/ccool/ccool--1343bdf--91e.tex b/Master/texmf-dist/doc/latex/ccool/ccool--1343bdf--91e.tex deleted file mode 100644 index 99f4ed738ef..00000000000 --- a/Master/texmf-dist/doc/latex/ccool/ccool--1343bdf--91e.tex +++ /dev/null @@ -1,12 +0,0 @@ -\begingroup \def \@@_log_entry {\Ccool <Math>i{##1}{ SuchThat = { ;~ }, Time = { t }, Process = { \xi }, StopT = { T }, EvalAt = \CcoolLambda {(##1)} }}\expandafter \endgroup \@@_log_entry -\begingroup \def \@@_log_entry {\Ccool <Math>i{##1}{ Scale = { \lambda }, Real = {\mathcal {R}} }}\expandafter \endgroup \@@_log_entry -\begingroup \def \@@_log_entry {\Ccool <Math>i{##1}{ CUSUMthresh = { \nu } }}\expandafter \endgroup \@@_log_entry -\begingroup \def \@@_log_entry {\Ccool <Math>i{##1}{ LogWald = { u }, CUSUMst = { \StopT _{c} }, CUSUM = { y }, LogWaldInf = { m } }}\expandafter \endgroup \@@_log_entry -\begingroup \def \@@_log_entry {\Ccool <Math>i{\mathbb {##1}}{ N = { N } , R = { R } }}\expandafter \endgroup \@@_log_entry -\begingroup \def \@@_log_entry {\Ccool <Math>i{##1}{ Grad = { \operatorname {grad} } }}\expandafter \endgroup \@@_log_entry -\begingroup \def \@@_log_entry {\Ccool <Math>i{##1}{ OffMenge = {D}, Ci = {C^{1}}, Strecke = { \left [x_0,x\right ] } }}\expandafter \endgroup \@@_log_entry -\begingroup \def \@@_log_entry {\Ccool <Math>i{##1}{ Steig = { \frac { f(x)-f(x_0) }{ x-x_0 } }, Punkt = { \xi } }}\expandafter \endgroup \@@_log_entry -\begingroup \def \@@_log_entry {\Ccool <Math>i{##1}{ Scale = { \lambda }, Real = {\mathcal {R}} }}\expandafter \endgroup \@@_log_entry -\begingroup \def \@@_log_entry {\Ccool <Math>i{##1}{ CUSUMthresh = { \nu } }}\expandafter \endgroup \@@_log_entry -\begingroup \def \@@_log_entry {\Ccool <Math>i{##1}{ LogWald = { u }, CUSUMst = { \StopT _{c} }, CUSUM = { y }, LogWaldInf = { m } }}\expandafter \endgroup \@@_log_entry -\begingroup \def \@@_log_entry {\Ccool <Math>i{##1}{}}\expandafter \endgroup \@@_log_entry diff --git a/Master/texmf-dist/doc/latex/ccool/ccool-1343c9d-92c.tex b/Master/texmf-dist/doc/latex/ccool/ccool-1343c9d-92c.tex new file mode 100644 index 00000000000..1c1159e607f --- /dev/null +++ b/Master/texmf-dist/doc/latex/ccool/ccool-1343c9d-92c.tex @@ -0,0 +1,12 @@ +\begingroup \def \__ccool_log_entry {\Ccool <Default>c{##1}{ SuchThat = { ;~ }, Time = { t }, Process = { \xi }, StopT = { T }, EvalAt = \CcoolLambda {(##1)} }}\expandafter \endgroup \__ccool_log_entry +\begingroup \def \__ccool_log_entry {\Ccool <Default>c{##1}{ Scale = { \lambda }, Real = {\mathcal {R}} }}\expandafter \endgroup \__ccool_log_entry +\begingroup \def \__ccool_log_entry {\Ccool <Default>c{##1}{ CUSUMthresh = { \nu } }}\expandafter \endgroup \__ccool_log_entry +\begingroup \def \__ccool_log_entry {\Ccool <Default>c{##1}{ LogWald = { u }, CUSUMst = { \StopT _{c} }, CUSUM = { y }, LogWaldInf = { m } }}\expandafter \endgroup \__ccool_log_entry +\begingroup \def \__ccool_log_entry {\Ccool <Default>c{\mathbb {##1}}{ N = { N } , R = { R } }}\expandafter \endgroup \__ccool_log_entry +\begingroup \def \__ccool_log_entry {\Ccool <Default>c{##1}{ Grad = { \operatorname {grad} } }}\expandafter \endgroup \__ccool_log_entry +\begingroup \def \__ccool_log_entry {\Ccool <Default>c{##1}{ OffMenge = {D}, Ci = {C^{1}}, Strecke = { \left [x_0,x\right ] } }}\expandafter \endgroup \__ccool_log_entry +\begingroup \def \__ccool_log_entry {\Ccool <Default>c{##1}{ Steig = { \frac { f(x)-f(x_0) }{ x-x_0 } }, Punkt = { \xi } }}\expandafter \endgroup \__ccool_log_entry +\begingroup \def \__ccool_log_entry {\Ccool <Default>c{##1}{ Scale = { \lambda }, Real = {\mathcal {R}} }}\expandafter \endgroup \__ccool_log_entry +\begingroup \def \__ccool_log_entry {\Ccool <Default>c{##1}{ CUSUMthresh = { \nu } }}\expandafter \endgroup \__ccool_log_entry +\begingroup \def \__ccool_log_entry {\Ccool <Default>c{##1}{ LogWald = { u }, CUSUMst = { \StopT _{c} }, CUSUM = { y }, LogWaldInf = { m } }}\expandafter \endgroup \__ccool_log_entry +\begingroup \def \__ccool_log_entry {\Ccool <Default>c{##1}{}}\expandafter \endgroup \__ccool_log_entry diff --git a/Master/texmf-dist/doc/latex/ccool/ccool.pdf b/Master/texmf-dist/doc/latex/ccool/ccool.pdf Binary files differindex 672af929775..e39ed031af8 100644 --- a/Master/texmf-dist/doc/latex/ccool/ccool.pdf +++ b/Master/texmf-dist/doc/latex/ccool/ccool.pdf diff --git a/Master/texmf-dist/source/latex/ccool/ccool.dtx b/Master/texmf-dist/source/latex/ccool/ccool.dtx index 4dd2d47e226..a58f11a00cb 100644 --- a/Master/texmf-dist/source/latex/ccool/ccool.dtx +++ b/Master/texmf-dist/source/latex/ccool/ccool.dtx @@ -5,7 +5,7 @@ %</internal> %<*readme> ---------------------------------------------------------------- -##### ccool --- A tool for encoding mathematical notation +##### ccool --- A key-value document command parser - 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 @@ -20,12 +20,12 @@ \fi %</internal> %<*install> -\input docstrip.tex +\input l3docstrip.tex \keepsilent \askforoverwritefalse \preamble ---------------------------------------------------------------------------- -ccool --- A tool for encoding mathematical notation +ccool --- A key-value document command parser Released under the LaTeX Project Public License v1.3c or later See http://www.latex-project.org/lppl.txt ---------------------------------------------------------------------------- @@ -67,28 +67,63 @@ ccool.sty, and ccool.pdf. \else \expandafter\endgroup \fi -%</internal> +%</internal> %<package> \NeedsTeXFormat{LaTeX2e}[2020/02/02] +%<package> \RequirePackage{erw-l3}[2020/06/04] %<package> \RequirePackage{etoolbox}[2019/09/21] %<package> \RequirePackage{l3keys2e}[2020/03/06] %<package> \RequirePackage{xparse}[2020/03/06] %<package> \ProvidesExplPackage -%<package> {ccool} % Package name -%<package> {2020/04/15} % Release date -%<package> {2.0} % Release version -%<package> {cool --- A tool for encoding mathematical notation} % Description +%<package> {ccool} % Package name +%<package> {2020/06/04} % Release date +%<package> {3.0} % Release version +%<package> {cool --- A key-value document command parser} % Description % %<*driver> -\documentclass[full]{l3doc} +\RequirePackage{fvextra}%^^A\NB{done}{Warning:csquotes should be loaded after fvextra->nope} +\documentclass[full, show-notes]{l3doc} \listfiles \usepackage{amsmath, amssymb} -\usepackage[english]{babel} +\usepackage[ +%^^A afrikaans, +%^^A basque, +%^^A catalan, +%^^A croatian, +%^^A czech, +%^^A danish, +%^^A dutch, +%^^A %^^A esperanto, % ERROR +%^^A estonian, +%^^A finnish, +french, +%^^A % ^^A galician, % ERROR +german, +%^^A hungarian, +%^^A icelandic, +%^^A indonesian, +%^^A irish, +%^^A italian, +%^^A %^^A kurmanji, % ERROR +%^^A latin, +%^^A %^^A latvian, % ERROR +%^^A lithuanian, +%^^A ngerman, +%^^A polish, +%^^A portuguese, +%^^A romanian, +%^^A slovak, +spanish.noquoting, +%^^A swedish, +%^^A swissgerman, +%^^A turkish, +%^^A turkmen, +%^^A welsh, +english +]{babel} \usepackage{bookmark} \usepackage{ccool} -\usepackage{fancyvrb} -\usepackage{fvextra}% csquotes should be loaded after fvextra \usepackage[T1]{fontenc}% \char`[ -\usepackage{pdfpages} +\usepackage{microtype} \usepackage{tabto} \usepackage{tcolorbox} \tcbuselibrary{listings, breakable} @@ -103,62 +138,105 @@ ccool.sty, and ccool.pdf. \RecordChanges % ^^A\AtEndDocument { \PrintChanges \PrintIndex } \ExplSyntaxOn +\newenvironment{docabstract}[1]%https://latex.org/forum/viewtopic.php?t=12156 +{\renewcommand{\abstractname}{#1}\begin{abstract}} + {\end{abstract}} +\ProvideDocumentCommand\DocPhantomSection{smmm} +{ + \leavevmode + \refstepcounter{#2} + \IfBooleanT{#1} + { + \addcontentsline{toc}{#2}{\protect\numberline{\use:c{the#2}}#3} + } + \docsetnameref{#3} + \label{#4} +} +% ^^A Sort---> \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\doccceptargspec{arg~spec} \providecommand\doccceptbool{boolean} +\providecommand\doccceptclist{clist} \providecommand\doccceptcode{code} -\providecommand\doccceptint{integer} +\providecommand\doccceptcsname{cs name} +\providecommand\doccceptcsorcode{cs~or~code} +\providecommand\doccceptcs{cs} +\providecommand\doccceptempty{empty} +\providecommand\doccceptgopt{global~option} \providecommand\doccceptgroup{local~group} +\providecommand\doccceptint{integer} +\providecommand\doccceptitems{items} +\providecommand\doccceptkey{key} \providecommand\doccceptkvl{keyval~list} +\providecommand\doccceptopt{option} \providecommand\doccceptpath{path} +\providecommand\doccceptplaceh{placeholder} \providecommand\doccceptpre{preamble} +\providecommand\doccceptprop{prop} +\providecommand\doccceptsep{separators} +\providecommand\doccceptseq{seq} +\providecommand\docccepttlvar{tl~var} +\providecommand\docccepttl{token~list} \providecommand\docccepttok{token} -\providecommand\docenvdoc{\env{document}} +\providecommand\doccceptval{val} +\providecommand\docconv[1]{convention~\autoref{conv:#1}} \providecommand\docdefaultfor{default~for~} -\providecommand\doceval[1]{\texttt{\char`\{}#1\texttt{\char`\}}} +\providecommand\docenvdoc{\env{document}} +\providecommand\docparm[1]{\texttt{\char`\{}#1\texttt{\char`\}}} +\providecommand\docexpand[2]{#1~$\rightarrow$~#2} \providecommand\docfillblank{\begin{minipage}[t]{\linewidth}\end{minipage}} -\providecommand\docissuedo{Do: } \providecommand\docissuedont{Don't: } +\providecommand\docissuedo{Do: } \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\doclist[1]{Listing~\ref{listing:#1}} +\providecommand\docmetakeyorkeyval[1][i]{\meta{key_{#1}}|\meta{key_{#1}}=\meta{val_{#1}}} +\providecommand\docnb{\noindent\textbf{NB}:~} +\providecommand\docpard[1]{\texttt{\textless}#1\texttt{\textgreater}} +\providecommand\docpare[2]{\texttt{#1}\docparm{#2}} +\providecommand\docparo[1]{\texttt{[}#1\texttt{]}} \providecommand\docpipe{\textbar} -\cs_new:Nn \__ccool_docu:n{\MakeUppercase #1} -\providecommand\docstep[1]{step~\ref{step:#1}} +\providecommand\docreflist[1]{Listing~\ref{listing:#1}} \providecommand\docsee{See:~} -\providecommand\docccepttl{token~list} +\providecommand\docstep[1]{step~\ref{step:#1}} \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\docxparsed[1][~argument]{`d'-type~#1} +\providecommand\docxparsee[1][~argument]{`e'-type~#1} +\providecommand\docxparsem[1][~argument]{`m'-type~#1} +\providecommand\docxparseo[1][~argument]{`o'-type~#1} \providecommand\pkgkey{key$_{i}$} -\providecommand\pkgval{val$_{i}$} +\providecommand\pkgobj[1]{object identified by #1} +\providecommand\pkgoptan{\docarg{And}} \providecommand\pkgoptex{\docarg{Expans}} \providecommand\pkgoptfi{\docarg{File}} \providecommand\pkgoptin{\docarg{Inner}} -\providecommand\pkgoptna{\docarg{Name}} -\providecommand\pkgoptnad{\docarg{Math}}%default +\providecommand\pkgoptions{kvl0} \providecommand\pkgoptou{\docarg{Outer}} -\providecommand\pkgoptwr{\docarg{Write}} +\providecommand\pkgoptpad{\docarg{Default}}%default +\providecommand\pkgoptpa{\docarg{Param}} \providecommand\pkgoptse{\docarg{Separ}} -\providecommand\pkgobj[1]{object identified by #1} -\providecommand\pkgoptions{kvl0} +\providecommand\pkgoptwr{\docarg{Write}} +\providecommand\pkgparap{\texttt{+}}%append +\providecommand\pkgparex{\texttt{*}}%expand +\providecommand\pkgparhe{tl$_{1}$}%head +\providecommand\pkgparin{code$_{1}$}%inner +\providecommand\pkgparkvlnxt{kvl$_{2}$} +\providecommand\pkgparkvl{kvl$_{1}$} +\providecommand\pkgparou{code$_{2}$}%outer +\providecommand\pkgparpa{tl$_{2}$}%param +\providecommand\pkgparsiii{tl$_{5}$} +\providecommand\pkgparsii{tl$_{4}$} +\providecommand\pkgparsi{tl$_{3}$} +\providecommand\pkgpars{\Arg{\pkgparsi}\docpipe\Arg{\pkgparsi}\Arg{\pkgparsii}\docpipe\Arg{\pkgparsi}\Arg{\pkgparsii}\Arg{\pkgparsiii}}%separ +\providecommand\pkgparta{tl$_{6}$}%tail \providecommand\pkgsep[1]{\Arg{#1}} -\providecommand\pkgwrite{\cs{Ccool}\docarg{\meta{\pkgparna}}\docopte{i}{\meta{\pkgparin}}\Arg{\pkgparde}} +\providecommand\pkgval{val$_{i}$} +\providecommand\pkgwrite{\cs{Ccool}\docarg{\meta{\pkgparpa}}\docpare{i}{\meta{\pkgparin}}\Arg{\pkgparkvl}} +% ^^A Sort<--- \ExplSyntaxOff \begin{document} \DocInput{\jobname.dtx} @@ -167,7 +245,7 @@ ccool.sty, and ccool.pdf. % \fi % % \GetFileInfo{\jobname.sty} -%^^A\begin{documentation} +% \begin{documentation} % \title{The \pkg{ccool} package\thanks{^^A % This file describes version \fileversion, last revised \filedate.^^A % }^^A @@ -178,244 +256,290 @@ ccool.sty, and ccool.pdf. % % \maketitle % -% \begin{abstract} \pkg{ccool} stands for Custom COntent Oriented for \LaTeX, -% a concept pioneered by \pkg{cool}\cite{cool}\footnote{Whereas \pkg{cool} provided predefined macros, \pkg{ccool} is tool for making macros, hence ``custom''.}. -% This is done using a minimalist interface built upon \pkg{xparse}\cite{xparse}.\nobreak -% ~Specifically, \nameref{usage:cs:ccool}\docoptd{\meta{name}} begins a series of instructions -% alternating between `text' and macro definitions, that themselves optionally expand using predefined or inline rules. -% For example,\begin{Verbatim}[breaklines=true] -% \Ccool<Math>[Let~] -% i{\mathbb{#1}}{ Nat = N, Real = R }*s{{~\rm{and}~}} -% [~denote the natural and real numbers.]{} -% \end{Verbatim} -% expands to: ``\Ccool<Math>[Let~]i{\mathbb{#1}}{Nat = N, Real = R}*s{{~\rm{and}~}}[~denote the natural and real numbers.]{}'' -% As a side effect, |$\Nat<Math>$|~encodes~``$\Nat<Math>$'' (and likewise for |\Real|). -% \pkgoptnad~being the default for \meta{name}, |<Math>| can be dropped. In conjunction with -% lamba expressions, this tool allows for encoding the way certain mathematical objects, such as functions, should be formatted. -% Optionally, the macros can be written to a file, and read, which -% can be useful for typesetting documents sharing the same notation. -% \end{abstract} +% \selectlanguage{english} +% \begin{docabstract}{Abstract} +% The package \pkg{ccool} for \LaTeX~is a \textit{key-value} interface, \nameref{usage:cs:ccool}, +% on top of \pkg{xparse}'s document command parser. Global options control input processing and its expansion. +% By default, they are set to meet likely requirements, depending on context: the selected language, +% and which of text and math mode is active. These options can be overriden inline. +% This versality could find its use, for example, to encode notational conventions (such as \docexpand{\cs{Real}}{}|\mathbb{R}|) +% at the point where they are introduced in the \env{document} (``Let $\mathbb{R}$ denote real numbers''). +% Polymorphic commands can be generated by parameterizing the keys +% (for instance, one parameter value for style, another for a property). +% User input to \cs{Ccool} can optionally be serialized. +% This can useful for typesetting documents sharing the same notation. +% \end{docabstract} +% +% \selectlanguage{french} +% \begin{docabstract}{Résumé} +% L'extension~\pkg{ccool} pour \LaTeX~met à disposition une interface de type \textit{clé-valeur}, \nameref{usage:cs:ccool}, +% destinée à faciliter la géneration de commandes. Les +% paramètres globaux contrôlant le traitement de ces \textit{clé-valeur} sont fixés +% par défaut pour répondre aux besoins courants, suivant le contexte (langage, mode textuel ou mathématique). +% Un exemple d'application, est la command-isation des conventions de notation (\docexpand{\cs{Reel}}{} |\mathbb{R}|), +% au point dans le \env{document} où elles sont introduites (``Soit~$\mathbb{R}$~les nombres réels.''). +% Des commandes polymorphes peuvent être générées, en associant aux clés un paramètre +% (par exemple, une valeur pour le style typographique, une autre pour la description du concept associé). +% En option, les instructions passées à cette interface peuvent être sauvegardées, +% ce qui peut être utile pour la rédaction de documents faisant appel à des conventions typographiques communes. +% \end{docabstract} +% \selectlanguage{english} % % \tableofcontents % % \part{Usage}\label{part:usage} -% \VerbatimFootnotes +% ^^A \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. +% \begin{enumerate}[label={\emph{\alph*)}}] +% \item \label{conv:expl3} Loosely, those of \cite{interface3}, for example as to the meaning of \meta{\docccepttl}. +% \item \label{conv:xparse} Those of \cite{xparse}, for example \docparo{arg} is a \docccept{\docxparseo}. +% \item \docassign{\meta{X}}{\docarg{Y}}: set \meta{X} to |Y| +% \item \docexpand{\cs{X}}{\docarg{Y}}: \cs{X} expands to |Y| +% \item If unspecified, the environment in which a macro is to be used 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}} +% \cs{usepackage}\docparm{\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} +% \item Put 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} +% \DocPhantomSection*{section}{\cs{Ccool}}{usage:cs:ccool} % \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}} +% \cs{Ccool}\docparo{\meta{\pkgparhe}}\docpard{\meta{\pkgparpa}}\docpare{c}{\meta{\pkgparin}}\Arg{\pkgparkvl}\pkgparap\pkgparex\docpare{s}{\meta{\doccceptsep}}\docpare{c}{\meta{\pkgparou}}\docparo{\meta{\pkgparta}} +% \end{syntax}where \meta{\doccceptsep} is either of: \Arg{\pkgparsi}, \Arg{\pkgparsi}\Arg{\pkgparsii}, and \Arg{\pkgparsi}\Arg{\pkgparsii}\Arg{\pkgparsiii}. +% \begin{description} +% \item[Semantics] See \autoref{ccool:core}-\ref{ccool:wr}. +% \end{description} +% \end{function} +% +% \subsection{Core feature} +% \label{ccool:core} +% \nameref{usage:cs:ccool}\Arg{\pkgparkvl} executes for each \meta{\pkgkey}|=|\meta{\pkgval}, +% \begin{enumerate}[label=\emph{\arabic*)}] +% \item \docassign{\meta{\pkgval} } +% { \cs{function}\Arg{\pkgval} }\label{step:val} +% \item define \cs{\meta{\pkgkey}} such that \docexpand{ \cs{\meta{\pkgkey} } }{\meta{\pkgval}}, +% \label{step:key} +% \end{enumerate}where \cs{function} is encoded in \docccept{\doccceptgopt}~\nameref{usage:opt:in}. +% For instance, the side effect of |\Ccool{ Real = \mathbb{R} }| is \docexpand{\cs{Real}}{\docarg{\textbackslash{}mathbb\{R\}}}. +% To be sparingly used, \docccept{\doccceptgopt}~\nameref{usage:opt:ex} controls the type of expansion of \meta{\pkgkey}~and \meta{\pkgval}. +% +% See \nameref{usage:cs:lambda} to allow command \cs{\meta{\pkgkey}} to take arguments. +% +% \subsection{Process the \texorpdfstring{\docccept{\pkgval}}'s} +% \label{ccool:in} +% \nameref{usage:cs:ccool}\ \docpare{c}{\meta{\pkgparin}}\Arg{\pkgparkvl} is identical to the \nameref{ccool:core}, +% except it overrides \nameref{usage:opt:in}. +% +% In our example, if multiple number systems are defined with \cs{Ccool} (natural, reals, \dots), +% it is more efficient to omit |\mathbb{.}| inside \meta{\pkgval}, and instead +% use |c{\mathbb{#1}}|, where |#1| means ``parameter to be replaced''. +% +% \subsection{Append to a hook} +% \label{ccool:ap} +% \nameref{usage:cs:ccool}\Arg{\pkgparkvl}\pkgparap~is identical to the \nameref{ccool:core}, except it +% repeats after \nameref{usage:cs:hook}. +% This is useful to make the side effect persist after a \docccept{\doccceptgroup} (such as \env{theorem}). +% +% \subsection{Expand the \texorpdfstring{\docccept{\pkgval}}'s} +% \label{ccool:ex} +% \nameref{usage:cs:ccool}\Arg{\pkgparkvl}\pkgparex~supplements the \nameref{ccool:core} with +% the expansion of the \meta{\pkgval}'s using typesetting rules encoded in \docccept{\doccceptgopt}~\nameref{usage:opt:se} +% and~\nameref{usage:opt:ou}. The first are \docccept{\doccceptsep} applied to the \meta{\pkgval}'s to form a \docccept{\docccepttl}, +% and the second a function applied to the latter. +% +% They can be overriden inline by appending further \docpare{s}{\meta{\doccceptsep}}~and~\docpare{c}{\meta{\pkgparou}}, respectively, +% to the list of arguments. +% +% \subsection{Head} +% \label{ccool:he} +% \nameref{usage:cs:ccool}\docparo{\meta{\pkgparhe}}\Arg{\pkgparkvl}~expands \meta{\pkgparhe} and executes the \nameref{ccool:core}. +% +% There may be situations where it is convenient to pass \meta{\pkgparhe}~as \doccceptempty. +% +% \subsection{Tail} +% \label{ccool:ta} +% \nameref{usage:cs:ccool}\Arg{\pkgparkvl}\docparo{\meta{\pkgparta}}\Arg{\pkgparkvlnxt}~is identical to +% \nameref{usage:cs:ccool}\Arg{\pkgparkvl} followed by \nameref{usage:cs:ccool}\docparo{\meta{\pkgparta}}\Arg{\pkgparkvlnxt}. +% +% The combination of \nameref{ccool:core}, \nameref{ccool:he}, and \nameref{ccool:ta} allows to integrate typesetting and +% the creation of commands. +% +% \subsection{Parameterize the \texorpdfstring{\docccept{\pkgkey}}'s} +% \label{ccool:pa} +% \nameref{usage:cs:ccool}\docpard{\meta{\pkgparpa}}\Arg{\pkgparkvl} is identical to the \nameref{ccool:core}, +% except \meta{\pkgkey} is replaced by \meta{\pkgkey\docpard{\pkgparpa}}. +% The default value of \meta{\pkgparpa} is encoded in \nameref{usage:opt:pa}. +% In our example, \meta{\pkgparpa} could be \docarg{Style}. +% +% \subsection{Write} +% \label{ccool:wr} +% \docccept{\doccceptgopt}~\nameref{usage:opt:wr}~is identical to the \nameref{ccool:core}, +% except that if \nameref{usage:opt:wr} is set to \cs{BooleanTrue}, +% the code is written to a file whose \doccceptpath~is encoded in \docccept{\doccceptgopt}~\nameref{usage:opt:fi}. +% +% \DocPhantomSection*{section}{\cs{CcoolClear}}{usage:cs:clear} +% \begin{function}{\CcoolClear} +% \begin{syntax} +% \cs{CcoolClear}\docpard{\meta{\pkgparpa}}\docparm{\dots\meta{\doccceptkey_i},\dots} % \end{syntax} % \begin{description} -% \item[Requirement] \meta{\pkgparde} is specified (all others optional). +% \item[Semantics] Clears all \cs{\meta{\pkgkey\docpard{\pkgparpa}}}'s % \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} +% \DocPhantomSection*{section}{\cs{CcoolHook}}{usage:cs:hook} +% \begin{function}{\CcoolHook} +% \begin{syntax} +% \cs{CcoolHook} +% \end{syntax} +% \begin{description} +% \item[Semantics] No side effect or expansion +% \end{description} +% \end{function} % -% \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} +% \DocPhantomSection*{section}{\cs{CcoolLambda}}{usage:cs:lambda} +% \begin{function}{\CcoolLambda} +% \begin{syntax} +% \cs{CcoolLambda}\docparo{\meta{\doccceptargspec}}\Arg{\doccceptcode}, +% \end{syntax} where \docccept{\doccceptargspec} is by default an \docccept{\docxparseo}. +% \begin{description} +% \item[Example] \cs{Ccool}|{ EvalAt = \CcoolLambda{(#1)} }| +% \item[Semantics] Returns a command of type \cs{DeclareDocumentCommand}\cite{xparse}, +% \end{description} +% \end{function} % -% \leavevmode -% \refstepcounter{subsection} -% \docsetnameref{\meta{\pkgparin}} -% \label{usage:par:in} -% \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docopte{i}{\meta{\pkgparin}}} -% \DescribeOption{\meta{\pkgparin}} +% \DocPhantomSection*{section}{\cs{CcoolOption}}{usage:cs:option} +% \begin{function}{\CcoolOption} +% \begin{syntax} +% \cs{CcoolOption}\docparo{\dots{}\docmetakeyorkeyval[i],\dots} +% \end{syntax}where \meta{\doccceptkey_i} is either of +% \nameref{usage:opt:an}, +% \nameref{usage:opt:ex}, +% \nameref{usage:opt:fi}, +% \nameref{usage:opt:in}, +% \nameref{usage:opt:pa}, +% \nameref{usage:opt:ou}, +% \nameref{usage:opt:se}, +% and \nameref{usage:opt:wr}. +% \begin{description} +% \item[Semantics] Modify the behavior of \nameref{usage:cs:ccool} +% \end{description} +% \end{function} % +% \DocPhantomSection*{subsection}{\pkgoptan}{usage:opt:an} +% \DescribeOption{\pkgoptan} % \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} +% \item[Also see] \autoref{part:impl}~\nameref{impl:opt:an} +% \item[Semantics] Sets the translation of \textit{and} in language \meta{\doccceptkey} to \meta{\doccceptval} +% \item[Syntax] \meta{\doccceptkvl} % \end{description} % -% \leavevmode -% \refstepcounter{subsection} -% \docsetnameref{\meta{\pkgparde}} -% \label{usage:par:de} -% \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\Arg{\pkgparde}} -% \DescribeOption{\meta{\pkgparde}} +% \DocPhantomSection*{subsection}{\pkgoptex}{usage:opt:ex} +% \DescribeOption{\pkgoptex} % \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} +% \item[Also see] \nameref{ccool:core} and \autoref{part:impl}~\nameref{impl:opt:ex} +% \item[Syntax] \texttt{eo\docpipe{}ee\docpipe{}ex\docpipe{}xo\docpipe{}xe\docpipe{}xx} % \end{description} % -% \leavevmode -% \refstepcounter{subsection} -% \docsetnameref{parameter \docarg{+}} -% \label{usage:par:appto} -% \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docarg{+}} -% \DescribeOption{+} +% \DocPhantomSection{subsection}{\pkgoptfi}{usage:opt:fi} +% \DescribeOption{\pkgoptfi} % \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.} +% \item[Also see] \autoref{part:usage}~\nameref{ccool:wr} and \autoref{part:impl}~\nameref{impl:opt:fi} +% \item[Syntax] \meta{\doccceptpath} % \end{description} % -% \leavevmode -% \refstepcounter{subsection} -% \docsetnameref{parameter \docarg{*}} -% \label{usage:par:expand} -% \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docarg{*}} -% \DescribeOption{*} -% +% \DocPhantomSection*{subsection}{\pkgoptin}{usage:opt:in} +% \DescribeOption{\pkgoptin} % \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} +% \item[Also see] \nameref{ccool:in} and \autoref{part:impl}~\nameref{impl:opt:in} +% \item[Syntax] \meta{\doccceptcode}, with |####1| as the \docccept{\doccceptplaceh} % \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}} +% \DocPhantomSection*{subsection}{\pkgoptpa}{usage:opt:pa} +% \DescribeOption{\pkgoptpa} % \begin{description} -% \item[Default] \nameref{usage:opt:se} -% \item[Example] |{~\in~}| +% \item[Also see] \nameref{ccool:pa}, and \autoref{part:impl}~\nameref{impl:opt:pa} +% \item[Syntax] \meta{\docccepttl} % \end{description} % -% \leavevmode -% \refstepcounter{subsubsection} -% \docsetnameref{\meta{\pkgparsii}} -% \label{usage:par:sii} -% \DescribeOption{\meta{\pkgparsii}} +% \DocPhantomSection*{subsection}{\pkgoptou}{usage:opt:ou} +% \DescribeOption{\pkgoptou} % \begin{description} -% \item[Default] \nameref{usage:opt:se} -% \item[Example] |{,~}| +% \item[Also see] \nameref{ccool:ex}, and \autoref{part:impl}~\nameref{impl:opt:ou} +% \item[Default] |\ensuremath{####1}| +% \item[Syntax] \meta{\doccceptcode}, with |####1| as the \docccept{\doccceptplaceh} % \end{description} % -% \leavevmode -% \refstepcounter{subsubsection} -% \docsetnameref{\meta{\pkgparsiii}} -% \label{usage:par:siii} -% \DescribeOption{\meta{\pkgparsiii}} +% \DocPhantomSection*{subsection}{\pkgoptse}{usage:opt:se} +% \DescribeOption{\pkgoptse} % \begin{description} -% \item[Default] \nameref{usage:opt:se} -% \item[Example] |{~\&~}| +% \item[Also see] \nameref{ccool:ex}; \doclist{lang}; and \autoref{part:impl}~\nameref{impl:opt:se} +% \item[Other] Default behavior depends on whether \pkg{babel} and \pkg{amsmath} are loaded +% \item[Syntax] That of \docccept{\doccceptsep} in \cite[Section 8 of \pkg{l3seq}]{interface3} % \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}} +% \DocPhantomSection*{subsection}{\pkgoptwr}{usage:opt:wr} +% \DescribeOption{\pkgoptwr} % \begin{description} -% \item[Default] \nameref{usage:opt:ou} -% \item[Example] |$\left\{#1\right\}$| +% \item[Also see] \autoref{part:usage}~\nameref{ccool:wr} and \autoref{part:impl}~\nameref{impl:opt:wr} +% \item[Syntax] \cs{BooleanFalse}\docpipe\cs{BooleanTrue} % \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} +% \DocPhantomSection*{section}{\cs{CcoolRead}}{usage:cs:read} +% \begin{function}{\CcoolRead} +% \begin{syntax} +% \cs{CcoolRead}\docparo{\meta{\doccceptpath}} +% \end{syntax} +% \begin{description} +% \item[Also see] \autoref{part:impl}~\nameref{impl:cs:read} +% \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} % -% \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}. +% \DocPhantomSection*{section}{\cs{CcoolVers}}{usage:cs:vers} +% \begin{function}{\CcoolVers} +% \begin{syntax} +% \cs{CcoolVers} +% \end{syntax} +% \begin{description} +% \item[Semantics] \docexpand{}{the package's version} +% \end{description} +% \end{function} % -% \leavevmode -% \refstepcounter{section} -% \docsetnameref{Do's and dont's} +% \section{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} +% \begin{enumerate}[label=\emph{\arabic*)}] % \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!| +% \item[\docissuedont] |Inner=\{####1\}| +% \item[\docissuesymp] \cs{CcoolRead} fails +% \item[\docissuedo] |Inner={\char`{####1\char`}}| % \end{itemize} % \item \docfillblank % \begin{itemize} -% \item[\docissuedont] |$|\cs{\meta{\pkgkey}}|<x$|. +% \item[\docissuedont] |$|\meta{\pkgkey}|<x$|. % \item[\docissuedo] |$|\cs{\meta{\pkgkey}}|{<}x$| % \end{itemize} % \item\docfillblank @@ -425,14 +549,24 @@ ccool.sty, and ccool.pdf. % \end{itemize} % \item \docfillblank % \begin{itemize} -% \item[\docissuedont] |\Ccool{ F = \cal F }|. -% \item[\docissuedo] | \Ccool{ F = \cal{F} } | or | \Ccool{ F = \mathcal{F} } | +% \item[\docissuedont] |\cal F|. +% \item[\docissuedo] |\cal{F}| or |\mathcal{F}| % \end{itemize} % \item \docfillblank % \begin{itemize} -% \item[\docissuedont] |[x_0,x]| +% \item[\docissuedont] |\[x_0,x\]| % \item[\docissuedo] |\left[x_0,x\right]| % \end{itemize} +% \item \docfillblank +% \begin{itemize} +% \item[\docissuedont] Use \docccept{\docxparsed[]} or \docccept{\docxparsee[]}~arguments\cite{xparse} for \nameref{usage:cs:lambda} +% \item[\docissuedo] Use only \docccept{\docxparsem[]} and \docccept{\docxparseo[]}~arguments +% \end{itemize} +% \item \docfillblank +% \begin{itemize} +% \item[\docissuedont] |\usepackage[spanish]{babel}| +% \item[\docissuedo] |\usepackage[spanish.noquoting]{babel}|\cite{a-547018} +% \end{itemize} % \item Also see \autoref{part:other}, \autoref{other:issue} % \end{enumerate} % @@ -452,348 +586,1033 @@ ccool.sty, and ccool.pdf. % outer arc=0pt, % boxrule=1pt, % listing and text, -% #2 -% } -% -% \phantomsection\addcontentsline{toc}{section}{\doclist{vers}. Version.} -% \begin{listing}[] -% {label=listing:vers} -% \CcoolVers -% \end{listing} -% -% \phantomsection\addcontentsline{toc}{section}{\doclist{pre}. Preamble.} -% \begin{listing}[Preamble\footnote{These are the settings to replicate the listings. -% For exhaustivity, check the \env{documentation} section of \pkg{ccool}\texttt{.dtx}.}] -% {label=listing:pre, listing only} -% \usepackage{amsmath, amsthm, commath} -% \usepackage[T1]{fontenc}% \char`[ -% \end{listing} -% -% \phantomsection\addcontentsline{toc}{section}{\doclist{test:i}. Separators.} -% \begin{listing}[Separators] -% {label=listing:test:i} -% \CcoolOption{ -% ^^A% spaces betw. inner and outer brackets matter!-> -% Separ={{\ \char`@\ }{\ \%\ }{\ \char`@\ }}} -% \Ccool<Test>{ X = x, Y = y }*[\\] -% { X = x, Y = y, Z = z }*[\\] -% { X = x, Y = y }*s{{\ \&\ }}[\\] -% { X = x, Y = y }*s{{\ \&\ }{,\ }}[\\] -% { X = x, Y = y, Z = z }*s{{\ \&\ }}[\\] -% { X = x, Y = y, Z = z }*s{{\ \&\ }{,\ }}[\\] -% { X = x, Y = y, Z = z }*s{{\ \&\ }{,\ }{\ \&\ }}\\ -% \end{listing} -% -% \phantomsection\addcontentsline{toc}{section}{\doclist{test:ii}. Hello, world!} -% \begin{listing}[Hello, world!\footnote{If this looks arcane, it's for the purpose of testing.}] -% {label=listing:test:ii} -% \CcoolOption{ Separ = {{}{.}{.}}, Outer = { ####1 } } -% \CcoolOption{ Write = \BooleanTrue } -% \Ccool<Test> -% { KeyA = {.}, KeyB = {!}, KeyC = {\%} }[] -% { KeyD = {d}, KeyE = {\%} }[]i{\{#1\}} -% { KeyF = {H}, KeyG = {e}, KeyH = {l} }*[] -% { KeyI = {\%}, KeyJ = {\%}, KeyK = {\%} }[.\{l\}.\{o\}] -% { KeyL = {l}, KeyM = {\char`[}, KeyN = {\char`]} }[] -% { KeyO = {o}, KeyP = {\%}, KeyQ = {\%} }[{,\ }] -% { KeyR = {w}, KeyS = {o}, KeyT = {r} }*s{{}{}{}}o{{\char`[}#1}[] -% { KeyU = {\%}, KeyV = {\%}, KeyW = {\%} }[] -% { KeyX = {\%}, KeyY = {\%}, KeyZ = {\KeyB<Test>} }\nobreak -% \KeyL<Test>\KeyD<Test>\KeyZ<Test>\KeyN<Test>\\ -% \CcoolOption{ Write = \BooleanFalse } -% \end{listing} -% -% \phantomsection\addcontentsline{toc}{section}{\doclist{test:iii}. \doclist{test:ii} read from file.} -% \begin{listing}[\doclist{test:ii} read from file.] -% {label=listing:test:iii} -% \CcoolRead -% \KeyF<Test>\KeyA<Test>\nobreak -% \KeyG<Test>\KeyA<Test>\nobreak -% \KeyH<Test>\KeyA<Test>\nobreak -% \KeyH<Test>\KeyA<Test>\nobreak -% {\{}\nobreak\KeyO<Test>{\}},{\ }\nobreak -% \KeyM<Test>\KeyR<Test>\nobreak -% \KeyO<Test>\nobreak -% \KeyT<Test>\nobreak -% \KeyL<Test>\nobreak -% \KeyD<Test>\nobreak -% \KeyZ<Test>\nobreak -% \KeyN<Test>\nobreak -% \end{listing} -% -% \phantomsection\addcontentsline{toc}{section}{\doclist{proba:i}. Probability space.} -% \begin{listing}[Probability space] -% {label=listing:proba:i} -% \CcoolOption{ Write = \BooleanTrue } -% \Ccool[Let~] -% { Space = \Omega, Field = \mathcal{F}, Meas = \mathcal{P} } -% *s{{,}}o{$\{#1\}$} -% [~denote the probability space, where~]{ PowerSet = { 2^{\Space} } } -% [$\Field\subset \PowerSet$.] -% {} -% \CcoolOption{ Write = \BooleanFalse } -% \end{listing} -% -% \phantomsection\addcontentsline{toc}{section}{\doclist{proba:ii}. \doclist{proba:i} read from file.} -% \begin{listing}[\doclist{proba:i} read from file.] -% {label=listing:proba:ii} -% \CcoolRead \tab $\Omega$ $\Field$ $\Meas$ -% \end{listing} -% -% \phantomsection\addcontentsline{toc}{section}{\doclist{mvt:i}. Mittelwertsatz f\"ur $n$ Variable.} -% \begin{listing}[{Mittelwertsatz f\"ur $n$ Variable\cite[17.3]{tcolbox}}] -% {label=listing:mvt:i} -% \CcoolOption{ Write = \BooleanTrue } -% \newtheorem{theorem}{Theorem} -% \AfterEndEnvironment{theorem}{\CcoolHook} -% \Ccool i{\mathbb{#1}} -% { N = { N } , R = { R } }+[] -% { Grad = { \operatorname{grad} } }+ -% [\begin{theorem} -% [Mittelwertsatz f\"ur $n$ Variable]Es~sei~] -% { OffMenge = {D}, Ci = {C^{1}}, Strecke = { \left[x_0,x\right] } }+ -% [$n\in\N$,~$\OffMenge\subseteq\N^n$ eine offene Menge und $f\in\Ci(\OffMenge,\R)$. -% Dann gibt es auf jeder Strecke $\Strecke\subset\OffMenge$ einen Punkt $\xi\in\Strecke$,~] -% { Steig = { \frac{ f(x)-f(x_0) }{ x-x_0 } }, Punkt = { \xi } }+ -% [so dass gilt -% \begin{equation*} -% \Steig = \Grad f(\Punkt)^{\top} -% \end{equation*} -% \end{theorem}] -% {} -% (Check: $\N$, $\Punkt$) -% \CcoolOption{ Write = \BooleanFalse } -% \end{listing} -% -% \phantomsection\addcontentsline{toc}{section}{\doclist{mvt:ii}. \doclist{mvt:i} read from file.} -% \begin{listing}[\doclist{mvt:i} read from file.] -% {label=listing:mvt:ii} -% \CcoolRead \tab $\N$ $\R$ $\OffMenge$ $\Ci$ $\Strecke$ -% \end{listing} -% -% \phantomsection\addcontentsline{toc}{section}{\doclist{lambda:i}. Lambda expression.} -% \begin{listing}[Lambda expression.] -% {label=listing:lambda:i} -% \CcoolOption{ Write = \BooleanTrue } -% \Ccool{ EvalAt = \CcoolLambda{(#1)}, ApplyOp = \CcoolLambda[2]{#1[#2]} } -% [Supposons une fonction $f\EvalAt{t}$, et \'etudions le probl\`eme o\`u la fonctionnelle $\ApplyOp{S}{f}$ est donn\'ee par\dots]{} -% \CcoolOption{ Write = \BooleanFalse } -% \end{listing} -% -% \phantomsection\addcontentsline{toc}{section}{\doclist{lambda:ii}. \doclist{lambda:i} read from file.} -% \begin{listing}[\doclist{lambda:i} read from file.] -% {label=listing:lambda:ii} -% \CcoolRead \tab $f\EvalAt{t}$, $\ApplyOp{S}{f}$ -% \end{listing} -% -% \phantomsection\addcontentsline{toc}{section}{\doclist{cusum:i}. CUSUM statistic.} -% \begin{listing}[CUSUM statistic\cite{ccool-thesis}] -% {label=listing:cusum:i} -% \newtheorem{definition}{Definition} -% \AfterEndEnvironment{definition}{\CcoolHook} -% -% \CcoolOption{ Write = \BooleanTrue } -% \Ccool{ SuchThat = { ;~ }, Time = { t }, Process = { \xi }, StopT = { T }, EvalAt = \CcoolLambda{(#1)} } -% [The CUSUM statistic process and the corresponding one-sided CUSUM stopping time are defined as follows: -% \begin{definition}\label{the CUSUM statistic}. Let~] -% { Scale = { \lambda }, Real = {\mathcal{R}} }+*s{{~\in~}}[~and~] -% { CUSUMthresh = { \nu } }+*o{$#1\in\Real^{+}$.} -% [~Define the following processes:] -% { LogWald = { u }, CUSUMst = { \StopT_{c} }, CUSUM = { y }, LogWaldInf = { m } }+ -% [\begin{enumerate} -% \item{$\LogWald_{\Time}\EvalAt{ \Scale } = \Scale\Process_{\Time} - \frac{1}{2}\Scale^2\Time$; -% $\LogWaldInf_{\Time}\EvalAt{ \Scale } = \inf_{ 0\le s \le \Time }\CUSUM_{s} \EvalAt{ \Scale }$.} -% \item{$\CUSUM_{\Time}\EvalAt{ \Scale } = \LogWaldInf_{\Time}\EvalAt{ \Scale } - \LogWald_{\Time}\EvalAt{ \Scale }\ge0$, which is the CUSUM statistic process.} -% \item{$\CUSUMst \EvalAt{ \Scale, \LogWaldInf } = \inf\left[ \Time \ge 0 \SuchThat \CUSUM_{\Time}\EvalAt{\Scale} \ge \LogWaldInf \right]$, which is the CUSUM stopping time.} \end{enumerate}\end{definition}\par]{} -% -% (Check: $\Scale$, $\CUSUM$) -% \CcoolOption{ Write = \BooleanFalse } -% \end{listing} -% -% \phantomsection\addcontentsline{toc}{section}{\doclist{cusum:ii}. \doclist{cusum:i} read from file.} -% \begin{listing}[\doclist{cusum:i} read from file.] -% {label=listing:cusum:ii} -% \CcoolRead \tab $\Time $ $\Process$ $\Scale$ $\Real$ $\CUSUMthresh$ $\LogWald$ $\CUSUMst$ $\CUSUM$ $\LogWaldInf$ -% \end{listing} -% -% \clearpage -% \part{Other}\label{part:other} -% -% \section{Acknowledgment}\label{other:acknowl} -% -% This work has benefited from Q\&A's from the \LaTeX community\cite{user-erw}. -% Specific attributions are made throughout this document. -% -% \section{Install}\label{other:install} -% -% Compiling \file{ccool.dtx}\footnote{Under Unix, |$tex ccool.dtx|} will generate \file{ccool.sty} and \file{ccool.pdf} -% -% \section{Issue}\label{other:issue} -% -% \begin{enumerate} -% \item -% \begin{description} -% \item[\docissuedont] |Inner={\{####1\}}| -% \item[\docissuesymp] \cs{CcoolRead} fails -% \item[\docissuedo] |Inner={\char`{####1\char`}}| -% \end{description} -% \end{enumerate} -% -% \section{Support}\label{other:support} -% -% This package is available from \url{https://www.ctan.org/pkg/ccool} and \url{https://github.com/rogard/ccool}. -% -% \section{Testing}\label{other:testing} -% -% \subsection{Technicality} -% Not possible to compile-check the expansion of a certain class of macros against predefined values\cite{a-534100}. -% Instead, one can visually check \autoref{part:listing}, as generated in \autoref{other:install} on one's own machine, -% against that \href{https://github.com/rogard/ccool}{of the repository} for the same version. -% -% -% \subsection{Platform} -% \begin{enumerate}[label=\emph{\roman*)}] -% \item -% ^^A uname -a -% \begin{Verbatim}[breaklines=true] -% Linux laptop 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux -% \end{Verbatim} -% \label{plat:lin} -% \end{enumerate} -% -% \subsection{Engine} -% \begin{enumerate}[label=\emph{\alph*})] -% \item -% \begin{Verbatim}[breaklines=true] -% pdfTeX 3.14159265-2.6-1.40.20 (TeX Live 2019) -% \end{Verbatim} -% \label{eng:tlxviiii:pdf} -% \item -% \begin{Verbatim}[breaklines=true] -% pdfTeX 3.14159265-2.6-1.40.21 (TeX Live 2020) -% \end{Verbatim} -% \label{eng:tlxx:pdf} -% \item -% \begin{Verbatim}[breaklines=true] -% LuaHBTeX, Version 1.12.0 (TeX Live 2020) -% \end{Verbatim} -% \label{eng:tlxx:lua} -% \item -% \begin{Verbatim}[breaklines=true] -% XeTeX 3.14159265-2.6-0.999992 (TeX Live 2020) -% \end{Verbatim} -% \label{eng:tlxx:xe} -% \end{enumerate} -% -% \subsection{Results} +% #2} % +% \docnb % \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} +% \item Some statements affect only the output of listings that come after that in which they appear. +% The demarcation is indicated by |%^^||A--->| and |%^^||A<---|, where applicable % \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 +% \phantomsection\addcontentsline{toc}{section} +% {\ref{listing:vers}.\cs{CcoolVers}} +% \iffalse +%<*guardlisting> +% \fi +\begin{listing}[\cs{CcoolVers}] + {label=listing:vers} + \CcoolVers +\end{listing} +% \iffalse +%</guardlisting> +% \fi +% +% \phantomsection\addcontentsline{toc}{section} +% {\ref{listing:numbrsys:base}. \texorpdfstring{Let~$\mathbb{N}$ and $\mathbb{R}$ denote\dots} (start of the tutorial)} +% \iffalse +%<*guardlisting> +% \fi +\begin{listing}[``Let~$\mathbb{N}$ and $\mathbb{R}$ denote\dots'' (start of the tutorial)] + {label=listing:numbrsys:base, listing and text} + Let~$\mathbb{N}$ and $\mathbb{R}$ denote the natural and real numbers. +\end{listing} +% \iffalse +%</guardlisting> +% \fi +% +% \phantomsection\addcontentsline{toc}{section} +% {\ref{listing:numbrsys:cmd}. Equivalent to \ref{listing:numbrsys:base}, with \cs{NewDocumentCommand}} +% \iffalse +%<*guardlisting> +% \fi +\begin{listing}[ Equivalent to \ref{listing:numbrsys:base}, with \cs{NewDocumentCommand}] + {label=listing:numbrsys:cmd, listing and text} + \DeclareDocumentCommand\Nat{}{\mathbb{N}} + \DeclareDocumentCommand\Real{}{\mathbb{R}} + Let~$\Nat$ and $\Real$ denote the natural and real numbers. +\end{listing} +% \iffalse +%</guardlisting> +% \fi +% +% \phantomsection\addcontentsline{toc}{section} +% {\ref{listing:numbrsys:in}. Equivalent to \ref{listing:numbrsys:cmd}, with \cs{Ccool}} +% \iffalse +%<*guardlisting> +% \fi +\begin{listing}[ Equivalent to \ref{listing:numbrsys:cmd}, with \cs{Ccool}] + {label=listing:numbrsys:in, listing and text} + % ^^A---> + \Ccool c{\mathbb{#1}}{ Nat = {N}, Real = {R} } + Let~$\Nat$ and $\Real$~denote the natural and real numbers. + % ^^A<--- + \CcoolClear +\end{listing} +% \iffalse +%</guardlisting> +% \fi +% +% \phantomsection\addcontentsline{toc}{section} +% {\ref{listing:numbrsys:ex}. Equivalent to \ref{listing:numbrsys:in}, with expansion} +% \iffalse +%<*guardlisting> +\fi +\begin{listing}[ Equivalent to \ref{listing:numbrsys:in}, with expansion] + {label=listing:numbrsys:ex, listing and text} + % ^^A---> + \Ccool[Let~] + c{\mathbb{#1}}{ Nat = {N}, Real = {R} }* + [~denote the natural and real numbers.]{} + % ^^A<--- + \CcoolClear +\end{listing} +% \iffalse +%</guardlisting> +% \fi +% +% \phantomsection\addcontentsline{toc}{section} +% {\ref{listing:numbrsys:pa}. Equivalent to \ref{listing:numbrsys:in}, parameterized (end of the tutorial)} +% \iffalse +%<*guardlisting> +% \fi +\begin{listing}[ Equivalent to \ref{listing:numbrsys:in}, parameterized (end of the tutorial)] + {label=listing:numbrsys:pa, listing and text} + % ^^A---> + \Ccool<Style>c{\mathbb{#1}}{ Nat = {N}, Real = {R} } + [Let $\Nat<Style>$ and $\Real<Style>$ denote the natural and real numbers.]{} + % ^^A<--- + \CcoolClear<Style> +\end{listing} +% \iffalse +%</guardlisting> +% \fi +% +% \phantomsection\addcontentsline{toc}{section} +% {\ref{listing:lang}. Language and mode} +%^^A \selectlanguage{afrikaans}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{basque}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{catalan}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{croatian}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{czech}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{danish}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{dutch}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A % ^^A esperanto, % ERROR +%^^A \selectlanguage{estonian}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{finnish}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{french}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A % ^^A galician, % ERROR +%^^A \selectlanguage{german}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{hungarian}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{icelandic}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{indonesian}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{irish}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{italian}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A % ^^A kurmanji, % ERROR +%^^A \selectlanguage{latin}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A % ^^A latvian, % ERROR +%^^A \selectlanguage{lithuanian}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{ngerman}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{polish}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{portuguese}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{romanian}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{slovak}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{spanish}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{swedish}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{swissgerman}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{turkish}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{turkmen}\\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +%^^A \selectlanguage{welsh} \\ +%^^A \noindent\textbf{\languagename}{:}\\ +%^^A \CcoolOption[ Separ ] +%^^A \Ccool{ X = x, Y = y }* +% \iffalse +%<*guardlisting> +% \fi +\begin{listing}[Language and mode] + {label=listing:lang} + %^^A---> + \textbf{\languagename}{:}~\Ccool{ X = x, Y = y }* + \begin{otherlanguage}{spanish} + \CcoolOption[ Separ ]\\ + \textbf{\languagename}{:}~\Ccool{ X = x, Y = y }* + \end{otherlanguage}\\ + \textbf{\languagename}{:}~\Ccool{ X = x, Y = y }* + \\[1em] + \CcoolOption[ Outer = ####1 ] + \textbf{\languagename}{:}~\Ccool{ X = this, Y = that }* + \begin{otherlanguage}{spanish} + \CcoolOption[ Separ ]\\ + \textbf{\languagename}{:}~\Ccool{ X = esto, Y = aquello }* + \end{otherlanguage}\\ + \textbf{\languagename}{:}~\Ccool{ X = this, Y = that }* + \CcoolOption[ Separ ]\\ + % ^^A<--- + \CcoolOption +\end{listing} +% \iffalse +%</guardlisting> +% \fi +% +% \phantomsection\addcontentsline{toc}{section} +% {\ref{listing:se}. Separators} +% \iffalse +%<*guardlisting> +% \fi +\begin{listing}[Separators + % \NB{bug} + % {Removing the closing \CcoolOption subsequently causes inconsistent separators between text and math mode (case replicated in uncommented form in dtx) + % ^^A% \begin{listing}[Separators] + % ^^A% {label=listing:se} + % ^^A% % ^^A---> + % ^^A% \CcoolOption[ Separ={{\ \char`@\ }{\ \%\ }{\ \char`@\ }} ] + % ^^A% \Ccool{ X = x, Y = y }*[\\] + % ^^A% { X = x, Y = y }*s{{~\&~}}[\\] + % ^^A% { X = x, Y = y }*s{{,~}{~\&~}}[\\[1em]] + % ^^A% { X = x, Y = y, Z = z }*[\\] + % ^^A% { X = x, Y = y, Z = z }*s{{~\&~}}[\\] + % ^^A% { X = x, Y = y, Z = z }*s{{,~}{\&~}}[\\] + % ^^A% { X = x, Y = y, Z = z }*s{{~\&~}{,~}{,~\&~}}\\ + % ^^A%% ^^A<--- + % ^^A% \CcoolClear + % ^^A% \end{listing} + % ^^A% \begin{listing}[Controlling the mode] + % ^^A% {label=listing:mode} + % ^^A% \Ccool{ X = x, Y = y }*\\ + % ^^A% \Ccool{ X = x, Y = y, Z = z }*\\[1em] + % ^^A% \CcoolOption[ Outer = ####1 ] + % ^^A% \Ccool{ X = x, Y = y }*\\ + % ^^A% \Ccool{ X = x, Y = y, Z = z }*\\[1em] + % ^^A% \CcoolOption[ Outer ] + % ^^A% \Ccool{ X = x, Y = y }*\\ + % ^^A% \Ccool{ X = x, Y = y, Z = z }* + % ^^A% {Symptom:} Inconsistent separators + % ^^A% {Workaround:} Put \CcoolOption in listing:se + % ^^A% \end{listing} + % ^^A% } + % } + ] + {label=listing:se} + % ^^A---> + \CcoolOption[ Separ={{\ \char`@\ }{\ \%\ }{\ \char`@\ }} ] + \Ccool{ X = x, Y = y }*[\\] + { X = x, Y = y }*s{{~\&~}}[\\] + { X = x, Y = y }*s{{,~}{~\&~}}[\\[1em]] + { X = x, Y = y, Z = z }*[\\] + { X = x, Y = y, Z = z }*s{{~\&~}}[\\] + { X = x, Y = y, Z = z }*s{{,~}{\&~}}[\\] + { X = x, Y = y, Z = z }*s{{~\&~}{,~}{,~\&~}}\\ + % ^^A<--- + \CcoolOption + \CcoolClear +\end{listing} +% \iffalse +%</guardlisting> +% \fi +% +% \phantomsection\addcontentsline{toc}{section} +% {\ref{listing:hw:i}. Hello, world! (testing)} +% \iffalse +%<*guardlisting> +% \fi +\begin{listing}[Hello, world! (testing)] + {label=listing:hw:i} + \CcoolOption[ Write = \BooleanTrue ] + % ^^A---> + \CcoolOption[Separ = {{}{.}{.}}, Outer = {####1}] + \Ccool + <Test>{ KeyA = {.}, KeyB = {!}, KeyC = {\%} }[] + <Test>{ KeyD = {d}, KeyE = {\%} }[] + <Test>c{\{#1\}}{ KeyF = {H}, KeyG = {e}, KeyH = {l} }*[] + <Test>{ KeyI = {\%}, KeyJ = {\%}, KeyK = {\%} }[.\{l\}.\{o\}] + <Test>{ KeyL = {l}, KeyM = {\char`[}, KeyN = {\char`]} }[] + <Test>{ KeyO = {o}, KeyP = {\%}, KeyQ = {\%} }[{,\ }] + <Test>{ KeyR = {w}, KeyS = {o}, KeyT = {r} }* + s{{}{}{}}c{{\char`[}#1}[] + <Test>{ KeyU = {\%}, KeyV = {\%}, KeyW = {\%} }[] + <Test>{ KeyX = {\%}, KeyY = {\%}, KeyZ = {\KeyB<Test>} }\nobreak + \KeyL<Test>\KeyD<Test>\KeyZ<Test>\KeyN<Test>\\ + % ^^A<--- + \CcoolOption + \CcoolClear +\end{listing} +% \iffalse +%</guardlisting> +% \fi +% +% \phantomsection\addcontentsline{toc}{section} +% {\ref{listing:hw:ii}. \docreflist{hw:i} read from file} +% \iffalse +%<*guardlisting> +% \fi +\begin{listing}[\docreflist{hw:i} read from file] + {label=listing:hw:ii} + % ^^A---> + \CcoolRead + \KeyF<Test>\KeyA<Test>\nobreak + \KeyG<Test>\KeyA<Test>\nobreak + \KeyH<Test>\KeyA<Test>\nobreak + \KeyH<Test>\KeyA<Test>\nobreak + {\{}\nobreak\KeyO<Test>{\}},{\ }\nobreak + \KeyM<Test>\KeyR<Test>\nobreak + \KeyO<Test>\nobreak + \KeyT<Test>\nobreak + \KeyL<Test>\nobreak + \KeyD<Test>\nobreak + \KeyZ<Test>\nobreak + \KeyN<Test>\nobreak + % ^^A<--- + \CcoolClear +\end{listing} +% \iffalse +%</guardlisting> +% \fi +% +% \phantomsection\addcontentsline{toc}{section}{\ref{listing:proba:i}. Probability space} +% \iffalse +%<*guardlisting> +% \fi +\begin{listing}[Probability space] + {label=listing:proba:i} + \CcoolOption[ Write = \BooleanTrue ] + % ^^A---> + \Ccool[Let~] + { Space = \Omega, Field = \mathcal{F}, Meas = \mathcal{P} } + *s{{,}}c{$\{#1\}$} + [~denote the probability space, where~]{ PowerSet = { 2^{\Space} } } + [$\Field\subset \PowerSet$.] + {} + % ^^A<--- + \CcoolClear + \CcoolOption +\end{listing} +% \iffalse +%</guardlisting> +% \fi +% +% \phantomsection\addcontentsline{toc}{section}{\ref{listing:proba:ii}. \docreflist{proba:i} read from file} +% \iffalse +%<*guardlisting> +% \fi +\begin{listing}[\docreflist{proba:i} read from file] + {label=listing:proba:ii} + % ^^A---> + \CcoolRead \tab $\Omega$ $\Field$ $\Meas$ + % ^^A<--- + \CcoolClear +\end{listing} +% \iffalse +%</guardlisting> +% \fi +% +% \phantomsection\addcontentsline{toc}{section}{\ref{listing:mvt:i}. Mittelwertsatz f\"ur \texorpdfstring{$n$} Variable. } +% \iffalse +%<*guardlisting> +% \fi +\begin{listing}[{Mittelwertsatz f\"ur $n$ Variable\cite[17.3]{tcolbox}}] + {label=listing:mvt:i} + \CcoolOption[ Write = \BooleanTrue ] + % ^^A---> + \selectlanguage{german} + \newtheorem{theorem}{Theorem} + \AfterEndEnvironment{theorem}{\CcoolHook} + \Ccool c{\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$) + % ^^A<--- + \CcoolClear + \CcoolOption +\end{listing} +% \iffalse +%</guardlisting> +% \fi +% +% \phantomsection\addcontentsline{toc}{section}{\ref{listing:mvt:ii}. \docreflist{mvt:i} read from file} +% \iffalse +%<*guardlisting> +% \fi +\begin{listing}[\docreflist{mvt:i} read from file] + {label=listing:mvt:ii} + % ^^A---> + \CcoolRead \tab $\N$ $\R$ $\OffMenge$ $\Ci$ $\Strecke$ + % ^^A<--- + \CcoolClear +\end{listing} +% \iffalse +%</guardlisting> +% \fi +% +% \phantomsection\addcontentsline{toc}{section}{\ref{listing:poly:real:i}. Families of polynomial functions} +% \iffalse +%<*guardlisting> +% \fi +\begin{listing}[Families of polynomial functions] + {label=listing:poly:real:i} + \CcoolOption[ Write = \BooleanTrue ] + % ^^A---> + \Ccool c{\mathbb{#1}}{ Nat = {N}, Real = {R} } + [Let~] + { PolyR = \CcoolLambda[o]{\Real\IfValueT{#1}{_#1}[X] } } + [$\PolyR[n]$ and $\PolyR$, denote the families of polynomial functions on $\Real$, of order $n$ et and their union over $n \in \Nat$, respectively. ] + {} + % ^^A<--- + \CcoolClear + \CcoolOption +\end{listing} +% \iffalse +%</guardlisting> +% \fi +% +% \phantomsection\addcontentsline{toc}{section}{\ref{listing:poly:real:ii}. \docreflist{poly:real:i} read from file} +% \iffalse +%<*guardlisting> +% \fi +\begin{listing}[\docreflist{poly:real:i} read from file] + {label=listing:poly:real:ii} + % ^^A---> + \CcoolRead \tab $\PolyR[n]$ et $\PolyR$ + % ^^A<--- + \CcoolClear +\end{listing} +% \iffalse +%</guardlisting> +% \fi +% +% \phantomsection\addcontentsline{toc}{section}{\ref{listing:poly:arb:i}. Same as \docreflist{poly:real:i}, but arbitrary number system} +% \iffalse +%<*guardlisting> +% \fi +\begin{listing}[Same as \docreflist{poly:real:i}, but arbitrary number system] + {label=listing:poly:arb:i} + \CcoolOption[ Write = \BooleanTrue ] + % ^^A---> + \selectlanguage{french} + \Ccool c{\mathbb{#1}}{ Corps = {K}, Nat = {N}, Reel = {R} } + [Soient~] + { + Poly = \CcoolLambda[om]{#2\IfValueT{#1}{_#1}[X] }, + PolyR = \CcoolLambda[o]{\Poly[#1]{\Reel}} + } + [$\Poly[n]{\Corps}$ et $\Poly{\Corps}$, les familles de polyn\^omes sur $\Corps$, de degr\'e $n$ et leur union pour $n \in \Nat$, respectivement. En particulier, + ils sont d\'enot\'es $\PolyR[n]$ et $\PolyR$, pour $\Corps=\Reel$.] + {} + % ^^A<--- + \CcoolClear + \CcoolOption +\end{listing} +% \iffalse +%</guardlisting> +% \fi +% +% \phantomsection\addcontentsline{toc}{section}{\ref{listing:poly:real:ii}. \docreflist{poly:arb:i} read from file} +% \iffalse +%<*guardlisting> +% \fi +\begin{listing}[\docreflist{poly:arb:i} read from file] + {label=listing:poly:arb:ii} + % ^^A---> + \CcoolRead \tab $\PolyR[n]$ et $\PolyR$ + % ^^A<--- + \CcoolClear +\end{listing} +% \iffalse +%</guardlisting> +% \fi +% +% \phantomsection\addcontentsline{toc}{section}{\ref{listing:fonc:i}. Fonction et fonctionelle} +% \iffalse +%<*guardlisting> +% \fi +\begin{listing}[Fonction et fonctionelle] + {label=listing:fonc:i} + \CcoolOption[ Write = \BooleanTrue ] + % ^^A---> + \selectlanguage{french} + \Ccool{ EvalAt = \CcoolLambda{(#1)}, ApplyOp = \CcoolLambda[mm]{#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]{} + % ^^A<--- + \CcoolClear + \CcoolOption +\end{listing} +% \iffalse +%</guardlisting> +% \fi +% +% \phantomsection\addcontentsline{toc}{section}{\ref{listing:fonc:ii}. \docreflist{fonc:i} read from file} +% \iffalse +%<*guardlisting> +% \fi +\begin{listing}[\docreflist{fonc:i} read from file] + {label=listing:fonc:ii} + % ^^A---> + \CcoolRead \tab $f\EvalAt{t}$, $\ApplyOp{S}{f}$ + % ^^A<--- + \CcoolClear +\end{listing} +% \iffalse +%</guardlisting> +% \fi +% +% \phantomsection\addcontentsline{toc}{section}{\ref{listing:cusum:i}. CUSUM statistic.} +% \iffalse +%<*guardlisting> +% \fi +\begin{listing}[CUSUM statistic\cite{ccool-thesis}] + {label=listing:cusum:i} + \CcoolOption[ Write = \BooleanTrue ] + % ^^A---> + \newtheorem{definition}{Definition} + \AfterEndEnvironment{definition}{\CcoolHook} + \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 } }+*c{$#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$) + % ^^A<--- + \CcoolClear + \CcoolOption +% \end{listing} +% \iffalse +%</guardlisting> +% \fi +% +% \phantomsection\addcontentsline{toc}{section}{\ref{listing:cusum:ii}. \docreflist{cusum:i} read from file} +% \iffalse +%<*guardlisting> +% \fi +\begin{listing}[\docreflist{cusum:i} read from file] + {label=listing:cusum:ii} + % ^^A---> + \CcoolRead \tab $\Time $ $\Process$ $\Scale$ $\Real$ $\CUSUMthresh$ $\LogWald$ $\CUSUMst$ $\CUSUM$ $\LogWaldInf$ + % ^^A<--- + \CcoolClear +\end{listing} +% \iffalse +%</guardlisting> +% \fi +% +% \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}\cite{p158966}. +% Specific attributions are made throughout this document. +% +% \section{Genealogy}\label{other:geneal} +% +% \textquote +% [\pkg{cool}\cite{cool}] +% {Give commands the ability to contain the mathematical meaning while retaining the typesetting versatility}. +% The addition of `c', in \pkg{ccool}, is for \emph{custom}. With hinsdight it is restrictive to +% describe \pkg{ccool} as a tool for encoding mathematical convention. +% +% \section{Install}\label{other:install} +% \begin{enumerate}[label=\emph{\arabic*)}] +% \item Compile \file{ccool.dtx} (under Unix, \texttt{\$pdflatex ccool.dtx}) +% \item Put the generated \file{ccool.sty} in the search path of the \LaTeX engine +%^^A \NB{todo}{\pkg{l3buid} install} +% \end{enumerate} +% +% \section{Issue}\label{other:issue} +% +% Listed under: +% \begin{enumerate}[label={\emph{\alph*)}}] +% \item \env{NOTE} or \cs{NB}, tagged either \texttt{bug} or \texttt{fixed}, inside \jobname|.dtx| +% \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 +% \begin{enumerate}[label={\emph{\alph*)}}] +% \item Follow the steps in \autoref{other:install} on one's own machine to generate \jobname|.pdf| +% \item Visually check \autoref{part:listing}, against that \href{https://github.com/rogard/ccool}{of the repository}, for the same version. +% \end{enumerate} +% Also see: +% \begin{enumerate}[label={\emph{\alph*)}}] +% \setcounter{enumi}{2} +% \item Also see: \autoref{other:todo}~\ref{todo:regtest} +% \end{enumerate} +% +% \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}[label=\emph{\arabic*)}] +% \item \pkg{ccool} \docvers{1}{8} compiles satisfactorily on platform \ref{plat:lin} and engine \ref{eng:tlxviiii:pdf} +% \item \pkg{ccool} \docvers{1}{8} compiles satisfactorily on platform \ref{plat:lin} and engine \ref{eng:tlxx:pdf} +% \item \pkg{ccool} \docvers{1}{9} compiles satisfactorily on platform \ref{plat:lin} and engines \ref{eng:tlxx:pdf} and \ref{eng:tlxx:lua} +% \item \pkg{ccool} \docvers{2}{0} compiles satisfactorily on platform \ref{plat:lin} and engines \ref{eng:tlxx:pdf}, \ref{eng:tlxx:lua}, and \ref{eng:tlxx:xe} +% \item \pkg{ccool} \docvers{2}{1} compiles satisfactorily on platform \ref{plat:lin} and engines \ref{eng:tlxx:pdf}, \ref{eng:tlxx:lua}, and \ref{eng:tlxx:xe} +% \item \pkg{ccool} \docvers{2}{3} compiles satisfactorily on platform \ref{plat:lin} and engines \ref{eng:tlxx:pdf}, \ref{eng:tlxx:lua}, and \ref{eng:tlxx:xe} +% \item \pkg{ccool} \docvers{2}{7} compiles satisfactorily on platform \ref{plat:lin} and engines \ref{eng:tlxx:pdf}, \ref{eng:tlxx:lua}, and \ref{eng:tlxx:xe} +% \item \pkg{ccool} \docvers{2}{8} compiles satisfactorily 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} +% +% \section{To do}\label{other:todo} +% +% \begin{enumerate}[label=\emph{\alph*)}] +% \item Regression testing using \cite[Section 3.2—Specifying expectations]{l3build}. \label{todo:regtest} +% \end{enumerate} +% Also see: +% \begin{enumerate}[label=\emph{\alph*)}] +% \setcounter{enumi}{1} +% \item \env{NOTE} or \cs{NB} tagged \texttt{abandon\docpipe{}done\docpipe{}todo} inside \jobname|.dtx| +% \end{enumerate} +% +% \DocPhantomSection*{section}{References}{other:bib} +% \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{l3build} The \LaTeX3 Project Team {\em The \pkg{l3build} package}, 2020, +% \url{http://mirror.utexas.edu/ctan/macros/latex/contrib/l3build/l3build.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-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} +% \bibitem{p158966}\cs{Ccool}, extension à \LaTeX~à vocation mathématique, \url{http://forum.mathematex.net/latex-f6/ccool-extension-latex-a-vocation-mathematique-t17314.html} +% \bibitem{a-547018} \href{https://tex.stackexchange.com/users/5735/javier-bezos}{@{}Javier Bezos}'s answer to~\url{https://tex.stackexchange.com/a/547018/112708} +% \end{thebibliography} +% +% \changes{\docvers{1}{0}} +% {2020/03/08} +% {Initial version} +% \changes{\docvers{1}{1}} +% {2020/04/04} +% {Rearrange: much of the implementation} +% \changes{\docvers{1}{1}} +% {2020/04/04} +% {Replace: \Arg{kvl_{2}}~by~\docpard{\meta{kvl_{2}}}~given that option type \texttt{G} not recommended\cite{xparse}} +% \changes{\docvers{1}{1}} +% {2020/04/04} +% {Replace: \cs{OopsOptions}~by~\cs{OopsOption}} +% \changes{\docvers{1}{1}} +% {2020/04/04} +% {Replace: \docarg{GenericObject}~by~\docarg{Name}} +% \changes{\docvers{1}{1}} +% {2020/04/04} +% {Replace: \docarg{Separators}~by~\docarg{Separ}} +% \changes{\docvers{1}{1}} +% {2020/04/04} +% {Add:\cs{OopsTest}} +% \changes{\docvers{1}{1}} +% {2020/04/04} +% {Add:\cs{OopsRestore}} +% \changes{\docvers{1}{1}} +% {2020/04/04} +% {Add: \docarg{Save}} +% \changes{\docvers{1}{1}} +% {2020/04/04} +% {Delete: Listing 1-5 from \docvers{1}{0}} +% \changes{\docvers{1}{1}} +% {2020/04/04} +% {Add: Listing~1., 2., 3., 4., 6., and 9.} +% \changes{\docvers{1}{1}} +% {2020/04/04} +% {Fix: apparent anomaly in \docvers{1}{0}'s Listing~4, see \docreflist{hw:i}} +% \changes{\docvers{1}{2}} +% {2020/04/06} +% {Add: optional \pkgparex to \cs{OopsNew} as instruction to expand \pkgparkvl} +% \changes{\docvers{1}{2}} +% {2020/04/06} +% {Replace: \cs{OopsClear}\Arg{\pkgparpa} by \cs{OopsClear}\docparo{\meta{\doccceptkvl}}} +% \changes{\docvers{1}{2}} +% {2020/04/06} +% {Delete: \meta{kvl_{2}}~and~\meta{code_{2}}} +% \changes{\docvers{1}{2}} +% {2020/04/06} +% {Delete: \cs{OopsTest}} +% \changes{\docvers{1}{2}} +% {2020/04/06} +% {Delete: Listing~2-3 from \docvers{1}{1}.} +% \changes{\docvers{1}{2}} +% {2020/04/06} +% {Replace: \cs{Save} by \cs{Write}} +% \changes{\docvers{1}{2}} +% {2020/04/06} +% {Replace: \cs{Restore} by \cs{Read}} +% \changes{\docvers{1}{3}} +% {2020/04/06} +% {Replace: \cs{OopsNew} by \cs{Oops}} +% \changes{\docvers{1}{3}} +% {2020/04/06} +% {Replace: \Arg{\pkgparpa} and \docparo{\meta{\pkgparpa}} by \docpard{\meta{\pkgparpa}} } +% \changes{\docvers{1}{4}} +% {2020/04/10} +% {Replace: \docpare{s}{\Arg{\pkgparsi}\Arg{\pkgparsii}\Arg{\pkgparsiii}} +% by \docpare{s}{\Arg{\pkgparsi}\docpipe\Arg{\pkgparsi}\Arg{\pkgparsii}\docpipe\Arg{\pkgparsi}\Arg{\pkgparsii}\Arg{\pkgparsiii}}} +% \changes{\docvers{1}{4}} +% {2020/04/10} +% {Add:optional \pkgparap to \cs{OopsNew} to make side effects presist beyond local group} +% \changes{\docvers{1}{4}} +% {2020/04/10} +% {Add: \cs{OopsHook}} +% \changes{\docvers{1}{4}} +% {2020/04/10} +% {Delete: Listing~1., and 2. } +% \changes{\docvers{1}{4}} +% {2020/04/10} +% {Add: Listing~1., 2., and 3. } +% \changes{\docvers{1}{4}} +% {2020/04/10} +% {Add: \docarg{Expans} (for debugging' sake, but...) } +% \changes{\docvers{1}{4}} +% {2020/04/10} +% {Add: \autoref{usage:dosdont} } +% \changes{\docvers{1}{4}} +% {2020/04/10} +% {Add: \cs{OopsDebug} } +% \changes{\docvers{1}{5}} +% {2020/04/10} +% {Delete: dependence on \pkg{datetime} } +% \changes{\docvers{1}{5}} +% {2020/04/10} +% {Add: \pkgoptfi } +% \changes{\docvers{1}{6}} +% {2020/04/10} +% {Rename: \pkg{oops} to \pkg{ccool} (better describes the purpose) } +% \changes{\docvers{1}{6}} +% {2020/04/10} +% {Rename: \cs{Oops} to \cs{Ccool}} +% \changes{\docvers{1}{6}} +% {2020/04/10} +% {Rename: \cs{OopsClear} to \cs{CcoolClear}} +% \changes{\docvers{1}{6}} +% {2020/04/10} +% {Rename: \cs{OopsDebug} to \cs{CcoolDebug}} +% \changes{\docvers{1}{6}} +% {2020/04/10} +% {Rename: \cs{OopsHook} to \cs{CcoolHook}} +% \changes{\docvers{1}{6}} +% {2020/04/10} +% {Rename: \cs{OopsOption} to \cs{CcoolOption}} +% \changes{\docvers{1}{6}} +% {2020/04/10} +% {Rename: \cs{OopsRead} to \cs{CcoolRead}} +% \changes{\docvers{1}{6}} +% {2020/04/10} +% {Add: Listing showing part of the preamble } +% \changes{\docvers{1}{7}} +% {2020/04/11} +% {Add: \docreflist{cusum:i} (CUSUM) } +% \changes{\docvers{1}{7}} +% {2020/04/11} +% {Add: Legends to listings } +% \changes{\docvers{1}{7}} +% {2020/04/11} +% {Delete: \cs{CcoolDebug} } +% \changes{\docvers{1}{7}} +% {2020/04/11} +% {Delete: Listing~5 from \docvers{1}{6} } +% \changes{\docvers{1}{8}} +% {2020/04/12} +% {Add: \hyperref[usage:cs:lambda]{\cs{CcoolLambda}} } +% \changes{\docvers{1}{8}} +% {2020/04/12} +% {Add: \docreflist{fonc:i}, \docreflist{fonc:ii} } +% \changes{\docvers{1}{8}} +% {2020/04/12} +% {Add: \cs{CcoolVers} } +% \changes{\docvers{1}{8}} +% {2020/04/12} +% {Add: \docreflist{vers} } +% \changes{\docvers{1}{9}} +% {2020/04/14} +% {Add: support for \LuaTeX } +% \changes{\docvers{1}{9}} +% {2020/04/14} +% {Move: from \autoref{part:usage} to \autoref{part:impl}, what is now that part's \autoref{impl:frontend}} +% \changes{\docvers{2}{0}} +% {2020/04/15} +% {Delete: \pkgoptfi's dependency on \pkg{texosquery} and \cs{pdfcreationdate}} +% \changes{\docvers{2}{0}} +% {2020/04/15} +% {Add: support for \XeTeX} +% \changes{\docvers{2}{0}} +% {2020/04/15} +% {Update: \cs{RequirePackage}, \cs{NeedsTeXFormat}'s second argument / TeX Live 2020} +% \changes{\docvers{2}{1}} +% {2020/04/17} +% {Replace: \hyperref[usage:cs:lambda]{\cs{CcoolLambda}}'s optional integer argument (number of \texttt{m}'s) +% by a standard argument list} +% \changes{\docvers{2}{1}} +% {2020/04/17} +% {Replace: \hyperref[ccool:pa]{\meta{\pkgparpa}}'s position within \cs{Ccool}'s argument list, from first to second. Greater versatility } +% \changes{\docvers{2}{1}} +% {2020/04/17} +% {Replace: as~the~default~of~\pkgoptpa,~\docarg{Math}~by~\pkgoptpad} +% \changes{\docvers{2}{1}} +% {2020/04/17} +% {Replace: \docccept{\doccceptgopt}~\docarg{Name} by \nameref{usage:opt:pa} } +% \changes{\docvers{2}{1}} +% {2020/04/17} +% {Add:Listings 3, 4, 5, 6, 7, 8, and 9} +% \changes{\docvers{2}{2}} +% {2020/04/20} +% {Remove: \% from listings} +% \changes{\docvers{2}{2}} +% {2020/04/20} +% {Replace: part of the abstract's with more straighforward descriptions based on input from forum participtants} +% \changes{\docvers{2}{3}} +% {2020/05/16} +% {Replace: for \cs{Ccool}, \docpare{i}{} by \docpare{c}{}} +% \changes{\docvers{2}{3}} +% {2020/05/16} +% {Rearranged: \nameref{usage:cs:ccool}'s subsections. Previously, by argument. Now, by feature. } +% \changes{\docvers{2}{3}} +% {2020/05/16} +% {Replace: In \docstep{key}, the created command's implementation, from \cs{ProvideDocumentCommand} to \cs{DeclareDocumentCommand}} +% \changes{\docvers{2}{3}} +% {2020/05/16} +% {Complete: \docreflist{poly:real:i}} +% \changes{\docvers{2}{3}} +% {2020/05/16} +% {Add: \docreflist{poly:real:ii}, \docreflist{poly:arb:i}, and \docreflist{poly:arb:ii}} +% \changes{\docvers{2}{3}} +% {2020/05/16} +% {Remove: Listing showing part of the preamble } +% \changes{\docvers{2}{4}} +% {2020/05/16} +% {Fix: minor error in the listings (\cs{Real} rather than \cs{Reel}, hitherto unnoticed). } +% \changes{\docvers{2}{4}} +% {2020/05/16} +% {Remove: examples from \autoref{part:usage},~\nameref{usage:cs:ccool}, as redundant with \autoref{part:listing}~\docreflist{numbrsys:base}-\ref{listing:numbrsys:pa}} +% \changes{\docvers{2}{5}} +% {2020/05/21} +% {Modify: behavior of \autoref{part:usage}~\nameref{ccool:ex}, rely on \pkg{erw-l3}'s \cs{erw_seq_use:Nn} } +% +% \changes{\docvers{2}{5}} +% {2020/05/21} +% {Modify: \nameref{impl:opt:fi}, rely on \pkg{erw-l3}'s \cs{erw_jobnametimestamp:} } +% +% \changes{\docvers{2}{6}} +% {2020/05/22} +% {Modify: \nameref{impl:cs:lambda}, rely on \pkg{erw-l3}'s \cs{erw_lambda:nnn} } +% +% \changes{\docvers{2}{7}} +% {2020/05/28} +% {Add: \docccept{\doccceptgopt}~\nameref{usage:opt:an} } +% +% \changes{\docvers{2}{7}} +% {2020/05/28} +% {Add: \doclist{lang} } +% +% \changes{\docvers{2}{7}} +% {2020/05/28} +% {Modify: \nameref{usage:opt:se}'s default rely on \pkg{babel} and \pkg{amsmath}, if applicable} +% +% \changes{\docvers{2}{7}} +% {2020/05/28} +% {Modify: \nameref{usage:cs:option}'s \docxparsem by \docxparseo} +% +% \changes{\docvers{2}{8}} +% {2020/05/28} +% {Fix: conflict between \cs{usepackage}\docparo{spanish}\docparm{babel} and \nameref{ccool:pa} } +% +% \changes{\docvers{2}{9}} +% {2020/06/03} +% {Miscellaneous } +% +% \changes{\docvers{3}{0}} +% {2020/06/04} +% {Miscellaneous } +% +% \PrintChanges +% \PrintIndex +% \clearpage +% \StopEventually{ +% ^^A \PrintChanges +% ^^A \PrintIndex % } -%^^A \end{documentation} -%^^A% Commented out to eliminate WARNING: Reference `doc/function// -%^^A \begin{implementation} +% \end{documentation} +% \begin{implementation} +% \selectlanguage{english} % \part{Implementation}\label{part:impl} % -% \iffalse -%<*package> -% \fi +% \section{Opening} % \begin{macrocode} +%<*package> %<@@=ccool> \ExplSyntaxOn % \end{macrocode} -% \section{\texttt{aux}} +% \section{\textsf{aux}} % \begin{macro}{\@@_aux_inner_set:n} % \begin{arguments} % \item \meta{code} @@ -905,75 +1724,102 @@ ccool.sty, and ccool.pdf. } % \end{macrocode} % \end{macro} -% \begin{macro}{\@@_aux_separ:nn} +% \begin{macro}{\@@_aux_val:Nn} % \begin{arguments} -% \item \meta{ int } -% \item \meta{ tokens } +% \item \meta{ seq } +% \item \meta{ tl var name } % \end{arguments} % \begin{macrocode} -\cs_new:Nn \@@_aux_separ:nn +\cs_new_protected:Nn \@@_aux_val: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} - } + \seq_gclear_new:N \g@@_aux_val_seq + \@@_seq_from_prop:NNn \g@@_aux_val_seq #1 { \@@_prop_name:n{#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} +% \section{\textsf{lang}} +% \begin{macrocode} +\prop_new:N \g@@_lang_and_prop +% \end{macrocode} +% \begin{macro}{\@@_lang_and_update:n} % \begin{macrocode} -\cs_new:Nn \@@_aux_separ:n +\cs_new_protected:Nn \@@_lang_and_update:n { - \@@_aux_separ:en{ \tl_count:n{#1} }{#1} + \erw_prop_keyval_parse:NNNn + \g@@_lang_and_prop + \erw_keyval_error:Nn + \prop_gput:Nnn + { #1 } } +\cs_generate_variant:Nn \@@_lang_and_update:n { e } % \end{macrocode} % \end{macro} -% \begin{macro}{\@@_aux_val:Nn} -% \begin{arguments} -% \item \meta{ seq } -% \item \meta{ tl var name } -% \end{arguments} +% \begin{macro}{\@@_lang_and:n, \@@_lang_and:} % \begin{macrocode} -\cs_new_protected:Nn \@@_aux_val:Nn +\cs_new:Nn \@@_lang_and:n { - \seq_gclear_new:N \g@@_aux_val_seq - \@@_seq_from_prop:NNn \g@@_aux_val_seq #1 { \@@_prop_name:n{#2} } + \prop_if_in:NnTF + \g@@_lang_and_prop + {#1} + {\prop_item:Nn\g@@_lang_and_prop{#1}} + { + \msg_warning:nnn{@@}{lang_and}{#1} + \@@_lang_and:n{english} + } +} +\ifcsdef{languagename} +{ + \cs_new:Nn \@@_lang_and:{\exp_args:No\@@_lang_and:n{\languagename}} +} +{ + \cs_new:Nn \@@_lang_and:{english} } % \end{macrocode} % \end{macro} -% \section{\texttt{lambda}} -% \begin{macro}{\@@_lambda:nn}\cite{a-188053} +% \begin{variable}{\c@@_lang_and_tl} +%\NB{todo}{Non latin-alphabet languages} % \begin{macrocode} -\cs_new_protected:Npn \@@_lambda:nn #1 #2 +\tl_const:Nn \c@@_lang_and_tl { - \exp_args:NNx - \DeclareDocumentCommand \@@_lambda_expression - { \prg_replicate:nn { #1 } { m } } - {#2} - \@@_lambda_expression +%^^A https://www.overleaf.com/learn/latex/International_language_support + afrikaans=en, + basque=eta, + catalan=i, + croatian=i, + czech=a, + danish=og, + dutch=en, + english=and, + esperanto=kaj, + estonian=ja, + finnish=ja, + french=et, + galician=e, + german=und, + hungarian=\'es, + icelandic=og, + indonesian=dan, + irish=agus, + italian=e, + kurmanji=\^u, + latin=et, + latvian=un, + lithuanian=ir, + ngerman=und, + polish=i, + portuguese=e, + romanian=\c{s}i, + slovak=a, + spanish=y, + swedish=och, + swissgerman=und, + turkish=ve, + turkmen=we, + welsh=a } % \end{macrocode} -% \end{macro} -% \section{\texttt{log}} +% \end{variable} +% \section{\textsf{log}} % \begin{macro}{\@@_log_close:} % \begin{macrocode} \iow_new:N \g@@_log_iow @@ -1033,7 +1879,7 @@ ccool.sty, and ccool.pdf. \cs_generate_variant:Nn \@@_log_write:n { e } % \end{macrocode} % \end{macro} -% \section{\texttt{make_key}} +% \section{\textsf{make_key}} % \begin{macro}{\@@_make_key:Nn} % \begin{arguments} % \item \meta{ token } @@ -1043,8 +1889,8 @@ ccool.sty, and ccool.pdf. \cs_new_protected:Nn \@@_make_key:Nn { \exp_args:NNx - \ProvideDocumentCommand{#1} - { D<>{\g@@_option_name_tl} } + \DeclareDocumentCommand{#1} + { D<>{\g@@_option_param_tl} } { \@@_prop_item:nn{##1}{#2} } @@ -1075,7 +1921,7 @@ ccool.sty, and ccool.pdf. } % \end{macrocode} % \end{macro} -% \section{\texttt{make_ccool}} +% \section{\textsf{make_ccool}} % \begin{macro}{\@@_make_ccool_exp:nnn} % \begin{macrocode} \cs_new_protected:Nn \@@_make_ccool_exp:nnn @@ -1085,7 +1931,7 @@ ccool.sty, and ccool.pdf. \@@_aux_outer:n { \exp_args:NNf - \@@_seq_use:Nn + \erw_seq_use:Nn \g@@_aux_val_seq {#2} } @@ -1118,7 +1964,7 @@ ccool.sty, and ccool.pdf. \@@_log_write:n { \begingroup - \def \@@_log_entry { \Ccool<#1>i{#2}{#3} } \expandafter + \def \@@_log_entry { \Ccool<#1>c{#2}{#3} } \expandafter \endgroup \@@_log_entry } }{\c_empty_tl} @@ -1136,71 +1982,63 @@ ccool.sty, and ccool.pdf. \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 + {%^^A 2 3 4 5 6 7 8 9 + +o D<>{#1} E{ c }{{#2}} m t+ s E{ s c }{{#3}{#4}} +o } { - \IfValueT{##2}{##2} - \@@_make_ccool_sideeffect:nnn{##1}{##3}{##4} + \IfValueT{##1}{##1} + \@@_make_ccool_sideeffect:nnn{##2}{##3}{##4} \IfBooleanT{##6} { - \@@_make_ccool_exp:nnn{##1}{##7}{##8} + \@@_make_ccool_exp:nnn{##2}{##7}{##8} } \bool_if:nTF{##5} { \gappto{\CcoolHook} { - \@@_make_ccool_sideeffect:nnn{##1}{##3}{##4} + \@@_make_ccool_sideeffect:nnn{##2}{##3}{##4} } } {\c_empty_tl} \IfValueT{##9} { - \exp_not:n{ \Ccool<##1>[##9] } + \exp_not:n{ \Ccool[##9] } } } } % \end{macrocode} % \end{macro} -% \section{\texttt{msg}} +% \section{\textsf{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} +\msg_new:nnn {@@} +{ iow } +{#1~is~closed~can't~write} +\msg_new:nnn {@@} +{lang_and} +{~key~#1~missing~for~global~option~'And';~falling~back~on~'english'} % \end{macrocode} -% \section{\texttt{option}} -% \begin{macro}{\@@_aux_inner:n} +% \section{\textsf{option}} +% \begin{macro}{\@@_option_inner:n} % \begin{arguments} % \item \meta{code} % \end{arguments} % \begin{macrocode} +\tl_new:N \g@@_option_inner_tl \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{macro}{\@@_option_param:n} % \begin{arguments} % \item \meta{token list} % \end{arguments} % \begin{macrocode} -\cs_new:Nn \@@_option_name:n +\tl_new:N \g@@_option_param_tl +\cs_new_protected:Nn \@@_option_param:n { - \tl_gset:Nn \g@@_option_name_tl{#1} -} -\@@_option_name:n -{ - \msg_error:nnx{ @@ } - { generic } - { \exp_not:N\g@@_option_name_tl~undefined } + \tl_gset:Nn \g@@_option_param_tl{#1} } % \end{macrocode} % \end{macro} @@ -1209,14 +2047,11 @@ ccool.sty, and ccool.pdf. % \item \meta{ inline code } % \end{arguments} % \begin{macrocode} +\tl_new:N \g@@_option_outer_tl \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} @@ -1224,17 +2059,35 @@ ccool.sty, and ccool.pdf. % \item \Arg{ tl_{1} }\Arg{ tl_{2} }\Arg{ tl_{3} } % \end{arguments} % \begin{macrocode} +\tl_new:N \g@@_option_separ_tl \cs_new_protected:Nn \@@_option_separ:n { \cs_gset:Npn \g@@_option_separ_tl {#1} } -\@@_option_separ:n +% \end{macrocode} +% \end{macro} +% \begin{variable}{\g@@_option_separ_tl} +% \begin{macrocode} +\ifcsdef{text} { - \msg_warning:nnn{ @@ }{ unset }{ \exp_not:N \g@@_option_separ_tl } + \tl_const:Nn \c@@_option_separ_default_tl + { + { \text{{\ }\@@_lang_and:{\ }} } + { \text{,{\ }} } + { \text{,{\ }\@@_lang_and:{\ }} } + } +} +{ + \tl_const:Nn \c@@_option_separ_default_tl + { + { {\ }\@@_lang_and:{\ } } + { ,{\ } } + { ,{\ }\@@_lang_and:{\ } } + } } % \end{macrocode} -% \end{macro} -% \section{\texttt{prop}} +% \end{variable} +% \section{\textsf{prop}} % \begin{macro}{\@@_prop_append:NN} % \begin{arguments} % \item \meta{ prop_{1} } @@ -1331,7 +2184,7 @@ ccool.sty, and ccool.pdf. } % \end{macrocode} % \end{macro} -% \section{\texttt{seq}} +% \section{\textsf{seq}} % \begin{macro}{\@@_seq_from_prop:NNn} % \begin{arguments} % \item \meta{ seq_{1} } @@ -1349,189 +2202,82 @@ ccool.sty, and ccool.pdf. } % \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} +% \DocPhantomSection*{subsection}{\cs{CcoolClear}}{impl:cs:clear} +% \begin{macro}{\CcoolClear} % \begin{macrocode} \NewDocumentCommand{ \CcoolClear } -{ D<>{\g@@_option_name_tl} } +{ D<>{\g@@_option_param_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} +% \end{macro} +% \DocPhantomSection*{subsection}{\cs{CcoolHook}}{impl:cs:hook} +% \begin{macro}{\CcoolHook} % \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} +% \end{macro} +% \DocPhantomSection*{subsection}{\cs{CcoolLambda}}{impl:cs:lambda} +% \begin{macro}{\CcoolLambda} +% \NB{todo}{allow only m- or o-type arguments} % \begin{macrocode} -\ProvideDocumentCommand \CcoolLambda { O{1} m } +\ProvideDocumentCommand \CcoolLambda { O{m} m } { - \@@_lambda:nn { #1 } { #2 } + \erw_lambda:nnn \DeclareDocumentCommand { #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} +% \end{macro} +% \DocPhantomSection*{subsection}{\cs{CcoolOption}}{impl:cs:option} +% \begin{macro}{\CcoolOption} +% \NB{todo}{Fix placeholders passed to options requiring code (only one pound sign)} +% \NB{abandon}{Requirement: write to file if Write; Update: redundant with \cs{Ccool}+Write} % \begin{macrocode} \NewDocumentCommand{ \CcoolOption } -{ m } +{ O{ And, Expans, File, Inner, Param, Outer, Separ, Write } } { - \keys_set:nn{ @@ }{#1} + \keys_set:nn{ @@ }{#1} } % \end{macrocode} -% \end{function} +% \end{macro} % \begin{macrocode} \keys_define:nn { @@ } { % \end{macrocode} -% \leavevmode -% \refstepcounter{subsection} -% \docsetnameref{\pkgoptex} -% \label{usage:opt:ex} -% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\pkgoptex} +% \DocPhantomSection*{subsubsection}{\pkgoptan}{impl:opt:an} +% \DescribeOption{\pkgoptan} +% \begin{macrocode} +And .code:n = { \@@_lang_and_update:e{ #1 } }, +And .default:n = { \c@@_lang_and_tl }, +And .initial:n = { \c@@_lang_and_tl }, +% \end{macrocode} +% \DocPhantomSection*{subsubsection}{\pkgoptex}{impl:opt:ex} % \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} +% \DocPhantomSection*{subsubsection}{\pkgoptfi}{impl:opt:fi} % \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: }, +File .default:n = { \erw_sys_jobnametimestamp: }, +File .initial:n = { \erw_sys_jobnametimestamp: }, % \end{macrocode} -% \leavevmode -% \refstepcounter{subsubsection} -% \docsetnameref{\pkgoptin} -% \label{usage:opt:in} -% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\pkgoptin} +% \DocPhantomSection*{subsubsection}{\pkgoptin}{impl:opt:in} % \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_param_tl } { \g@@_option_inner_tl } { \g@@_option_separ_tl } { \g@@_option_outer_tl } @@ -1541,47 +2287,33 @@ 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} +% \DocPhantomSection*{subsubsection}{\pkgoptpa}{impl:opt:pa} +% \DescribeOption{\pkgoptpa} % \begin{macrocode} -Name .code:n={ - \@@_option_name:n{#1} +Param .code:n={ + \@@_option_param:n{#1} \exp_last_unbraced:Nf \@@_make_ccool:nnnn { - { \g@@_option_name_tl } + { \g@@_option_param_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 }, +Param .value_required:n = false, +Param .default:n = { Default }, +Param .initial:n = { Default }, % \end{macrocode} -% \leavevmode -% \refstepcounter{subsubsection} -% \docsetnameref{\pkgoptou} -% \label{usage:opt:ou} -% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\pkgoptou} +% \DocPhantomSection*{subsubsection}{\pkgoptou}{impl:opt:ou} % \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_param_tl } { \g@@_option_inner_tl } { \g@@_option_separ_tl } { \g@@_option_outer_tl } @@ -1591,40 +2323,26 @@ 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} +% \DocPhantomSection*{subsubsection}{\pkgoptse}{impl:opt:se} % \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_param_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{\ } }, +Separ .default:n = { \c@@_option_separ_default_tl }, +Separ .initial:n = { \c@@_option_separ_default_tl }, % \end{macrocode} -% \leavevmode -% \addtocounter{subsection}{1} -% \docsetnameref{\pkgoptwr} -% \label{usage:opt:wr} -% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\pkgoptwr} +% \DocPhantomSection*{subsubsection}{\pkgoptwr}{impl:opt:wr} % \DescribeOption{\pkgoptwr} -% \begin{description} -% \item[Value] \meta{\doccceptbool} -% \end{description} % \begin{macrocode} Write .code:n = { \bool_if:nTF{#1} @@ -1638,23 +2356,8 @@ Write .initial:n = \BooleanFalse % \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} +% \DocPhantomSection*{subsection}{\cs{CcoolRead}}{impl:cs:read} +% \begin{macro}{\CcoolRead} % \begin{macrocode} \NewDocumentCommand{\CcoolRead} {o} @@ -1664,29 +2367,23 @@ Write .initial:n = \BooleanFalse {\@@_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} +% \end{macro} +% \DocPhantomSection*{subsection}{\cs{CcoolVers}}{impl:cs:vers} +% \begin{macro}{\CcoolVers} % \begin{macrocode} \NewDocumentCommand{\CcoolVers} {} {\use:c{ver@ccool.sty}} % \end{macrocode} -% \section{Misc} +% \end{macro} +% \section{Closing} +% % \begin{macrocode} \ExplSyntaxOff +%</package> % \end{macrocode} -%^^A \end{implementation} % -% \iffalse -%</package> -% \fi +% \end{implementation} +% % \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 deleted file mode 100644 index 16203f4f56d..00000000000 --- a/Master/texmf-dist/source/latex/ccool/ccool.ins +++ /dev/null @@ -1,64 +0,0 @@ -%% -%% 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'. diff --git a/Master/texmf-dist/tex/latex/ccool/ccool.sty b/Master/texmf-dist/tex/latex/ccool/ccool.sty index ec374d5dee4..4dbe451b42e 100644 --- a/Master/texmf-dist/tex/latex/ccool/ccool.sty +++ b/Master/texmf-dist/tex/latex/ccool/ccool.sty @@ -6,431 +6,435 @@ %% %% ccool.dtx (with options: `package') %% ---------------------------------------------------------------------------- -%% ccool --- A tool for encoding mathematical notation +%% ccool --- A key-value document command parser %% Released under the LaTeX Project Public License v1.3c or later %% See http://www.latex-project.org/lppl.txt %% ---------------------------------------------------------------------------- %% \NeedsTeXFormat{LaTeX2e}[2020/02/02] + \RequirePackage{erw-l3}[2020/06/04] \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 + {ccool} % Package name + {2020/06/04} % Release date + {3.0} % Release version + {cool --- A key-value document command parser} % Description \ExplSyntaxOn -\cs_new_protected:Nn \@@_aux_inner_set:n +\cs_new_protected:Nn \__ccool_aux_inner_set:n { - \cs_gset:Npn \@@_aux_inner:n ##1 {#1} - \cs_generate_variant:Nn \@@_aux_inner:n { e } + \cs_gset:Npn \__ccool_aux_inner:n ##1 {#1} + \cs_generate_variant:Nn \__ccool_aux_inner:n { e } } -\cs_new_protected:Npn \@@_aux_key:w #1 = #2 \q_stop +\cs_new_protected:Npn \__ccool_aux_key:w #1 = #2 \q_stop { - \seq_gput_right:Nx \g@@_aux_key_seq { \tl_trim_spaces:n{#1} } + \seq_gput_right:Nx \g__ccool_aux_key_seq { \tl_trim_spaces:n{#1} } } -\cs_new_protected:Nn \@@_aux_key:n +\cs_new_protected:Nn \__ccool_aux_key:n { - \@@_aux_key:w #1 \q_stop + \__ccool_aux_key:w #1 \q_stop } -\cs_new_protected:Nn \@@_aux_key:N +\cs_new_protected:Nn \__ccool_aux_key:N { - \seq_gclear_new:N \g@@_aux_key_seq - \seq_map_function:NN #1 \@@_aux_key:n + \seq_gclear_new:N \g__ccool_aux_key_seq + \seq_map_function:NN #1 \__ccool_aux_key:n } -\cs_new_protected:Nn \@@_aux_outer_set:n +\cs_new_protected:Nn \__ccool_aux_outer_set:n { - \cs_gset:Npn \@@_aux_outer:n ##1 {#1} + \cs_gset:Npn \__ccool_aux_outer:n ##1 {#1} } -\prop_new:N \g@@_aux_prop -\cs_new_protected:Nn \@@_aux_prop:nn +\prop_new:N \g__ccool_aux_prop +\cs_new_protected:Nn \__ccool_aux_prop:nn { - \prop_gput:Nnn \g@@_aux_prop{#1}{#2} + \prop_gput:Nnn \g__ccool_aux_prop{#1}{#2} } -\cs_generate_variant:Nn \@@_aux_prop:nn { eo, ee, ex, xo, xe, xx } -\tl_new:N \g@@_option_expans_tl -\cs_new_protected:Npn \@@_aux_prop:w #1 = #2 \q_stop +\cs_generate_variant:Nn \__ccool_aux_prop:nn { eo, ee, ex, xo, xe, xx } +\tl_new:N \g__ccool_option_expans_tl +\cs_new_protected:Npn \__ccool_aux_prop:w #1 = #2 \q_stop { \exp_args:Nx - \use:c{@@_aux_prop:\g@@_option_expans_tl} + \use:c{__ccool_aux_prop:\g__ccool_option_expans_tl} { \tl_trim_spaces:n{#1} } - { \@@_aux_inner:n{ \tl_trim_spaces:n{#2} } } + { \__ccool_aux_inner:n{ \tl_trim_spaces:n{#2} } } } -\cs_new_protected:Nn \@@_aux_prop:n +\cs_new_protected:Nn \__ccool_aux_prop:n { - \@@_aux_prop:w #1 \q_stop + \__ccool_aux_prop:w #1 \q_stop } -\cs_new_protected:Nn \@@_aux_prop:N +\cs_new_protected:Nn \__ccool_aux_prop:N { - \prop_gclear_new:N \g@@_aux_prop + \prop_gclear_new:N \g__ccool_aux_prop \seq_if_empty:NTF #1 { \c_empty_tl } { - \seq_map_function:NN #1 \@@_aux_prop:n + \seq_map_function:NN #1 \__ccool_aux_prop:n } } -\cs_new:Nn \@@_aux_separ:nn +\cs_new_protected:Nn \__ccool_aux_val: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 } -\cs_new:Nn \@@_aux_separ:n -{ - \@@_aux_separ:en{ \tl_count:n{#1} }{#1} + \seq_gclear_new:N \g__ccool_aux_val_seq + \__ccool_seq_from_prop:NNn \g__ccool_aux_val_seq #1 { \__ccool_prop_name:n{#2} } } -\cs_new_protected:Nn \@@_aux_val:Nn +\prop_new:N \g__ccool_lang_and_prop +\cs_new_protected:Nn \__ccool_lang_and_update:n { - \seq_gclear_new:N \g@@_aux_val_seq - \@@_seq_from_prop:NNn \g@@_aux_val_seq #1 { \@@_prop_name:n{#2} } + \erw_prop_keyval_parse:NNNn + \g__ccool_lang_and_prop + \erw_keyval_error:Nn + \prop_gput:Nnn + { #1 } } -\cs_new_protected:Npn \@@_lambda:nn #1 #2 +\cs_generate_variant:Nn \__ccool_lang_and_update:n { e } +\cs_new:Nn \__ccool_lang_and:n { - \exp_args:NNx - \DeclareDocumentCommand \@@_lambda_expression - { \prg_replicate:nn { #1 } { m } } - {#2} - \@@_lambda_expression -} -\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 -} -\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 + \prop_if_in:NnTF + \g__ccool_lang_and_prop + {#1} + {\prop_item:Nn\g__ccool_lang_and_prop{#1}} + { + \msg_warning:nnn{__ccool}{lang_and}{#1} + \__ccool_lang_and:n{english} + } } -\cs_new_protected:Nn \@@_log_read:n +\ifcsdef{languagename} +{ + \cs_new:Nn \__ccool_lang_and:{\exp_args:No\__ccool_lang_and:n{\languagename}} +} +{ + \cs_new:Nn \__ccool_lang_and:{english} +} +\tl_const:Nn \c__ccool_lang_and_tl +{ + afrikaans=en, + basque=eta, + catalan=i, + croatian=i, + czech=a, + danish=og, + dutch=en, + english=and, + esperanto=kaj, + estonian=ja, + finnish=ja, + french=et, + galician=e, + german=und, + hungarian=\'es, + icelandic=og, + indonesian=dan, + irish=agus, + italian=e, + kurmanji=\^u, + latin=et, + latvian=un, + lithuanian=ir, + ngerman=und, + polish=i, + portuguese=e, + romanian=\c{s}i, + slovak=a, + spanish=y, + swedish=och, + swissgerman=und, + turkish=ve, + turkmen=we, + welsh=a +} +\iow_new:N \g__ccool_log_iow +\AtEndDocument{\iow_close:N \g__ccool_log_iow} +\bool_set_false:N \g__ccool_log_open_bool +\cs_new_protected:Nn \__ccool_log_close: +{ + \iow_close:N \g__ccool_log_iow + \bool_gset_false:N \g__ccool_log_open_bool +} +\tl_new:N \g__ccool_log_file_tl +\cs_new_protected:Nn \__ccool_log_open: +{ + \tl_gset:Nx \g__ccool_log_to_tl{\g__ccool_log_file_tl} + \iow_open:Nn \g__ccool_log_iow {\g__ccool_log_to_tl} + \bool_gset_true:N \g__ccool_log_open_bool +} +\cs_new_protected:Nn \__ccool_log_read:n { \file_input:n{#1} \tl_log:n{read~from~#1} } -\cs_generate_variant:Nn \@@_log_read:n { e } -\cs_new_protected:Nn \@@_log_read: +\cs_generate_variant:Nn \__ccool_log_read:n { e } +\cs_new_protected:Nn \__ccool_log_read: { - \@@_log_read:e{\g@@_log_to_tl} + \__ccool_log_read:e{\g__ccool_log_to_tl} } -\tl_new:N \g@@_log_to_tl -\cs_new_protected:Nn \@@_log_write:n +\tl_new:N \g__ccool_log_to_tl +\cs_new_protected:Nn \__ccool_log_write:n { - \bool_if:nTF{ \g@@_log_open_bool } + \bool_if:nTF{ \g__ccool_log_open_bool } { - \iow_now:Nn \g@@_log_iow {#1} + \iow_now:Nn \g__ccool_log_iow {#1} \tl_log:n{ write~to~#1 } } - { \msg_error:nnn{ @@ }{ iow }{ \g@@_log_iow } } + { \msg_error:nnn{ __ccool }{ iow }{ \g__ccool_log_iow } } } -\cs_generate_variant:Nn \@@_log_write:n { e } -\cs_new_protected:Nn \@@_make_key:Nn +\cs_generate_variant:Nn \__ccool_log_write:n { e } +\cs_new_protected:Nn \__ccool_make_key:Nn { \exp_args:NNx - \ProvideDocumentCommand{#1} - { D<>{\g@@_option_name_tl} } + \DeclareDocumentCommand{#1} + { D<>{\g__ccool_option_param_tl} } { - \@@_prop_item:nn{##1}{#2} + \__ccool_prop_item:nn{##1}{#2} } } -\cs_generate_variant:Nn \@@_make_key:Nn {c} -\cs_new_protected:Nn \@@_make_key:n +\cs_generate_variant:Nn \__ccool_make_key:Nn {c} +\cs_new_protected:Nn \__ccool_make_key:n { - \@@_make_key:cn{#1}{#1} + \__ccool_make_key:cn{#1}{#1} } -\cs_generate_variant:Nn \@@_make_key:n { e } -\cs_new_protected:Nn \@@_make_key:N +\cs_generate_variant:Nn \__ccool_make_key:n { e } +\cs_new_protected:Nn \__ccool_make_key:N { - \seq_map_function:NN #1 \@@_make_key:e + \seq_map_function:NN #1 \__ccool_make_key:e } -\cs_new_protected:Nn \@@_make_ccool_exp:nnn +\cs_new_protected:Nn \__ccool_make_ccool_exp:nnn { - \@@_aux_val:Nn \g@@_aux_key_seq {#1} - \@@_aux_outer_set:n{#3} - \@@_aux_outer:n + \__ccool_aux_val:Nn \g__ccool_aux_key_seq {#1} + \__ccool_aux_outer_set:n{#3} + \__ccool_aux_outer:n { \exp_args:NNf - \@@_seq_use:Nn - \g@@_aux_val_seq + \erw_seq_use:Nn + \g__ccool_aux_val_seq {#2} } } -\cs_new_protected:Nn \@@_make_ccool_key:nnn +\cs_new_protected:Nn \__ccool_make_ccool_key:nnn { - \@@_prop_if_exist:nTF{#1} + \__ccool_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 -} -\cs_new_protected:Nn \@@_make_ccool_sideeffect:nnn -{ - \@@_make_ccool_key:nnn{#1}{#2}{#3} - \bool_if:nTF{ \g@@_log_open_bool } + { \__ccool_prop_new:n{#1} } + \exp_args:No \__ccool_aux_inner_set:n{#2} + \seq_set_from_clist:Nn \g__ccool_aux_keyval_seq {#3} + \__ccool_aux_prop:N \g__ccool_aux_keyval_seq + \__ccool_prop_append:Nn \g__ccool_aux_prop {#1} + \__ccool_aux_key:N \g__ccool_aux_keyval_seq + \__ccool_make_key:N \g__ccool_aux_key_seq +} +\cs_new_protected:Nn \__ccool_make_ccool_sideeffect:nnn +{ + \__ccool_make_ccool_key:nnn{#1}{#2}{#3} + \bool_if:nTF{ \g__ccool_log_open_bool } { - \@@_log_write:n + \__ccool_log_write:n { \begingroup - \def \@@_log_entry { \Ccool<#1>i{#2}{#3} } \expandafter - \endgroup \@@_log_entry + \def \__ccool_log_entry { \Ccool<#1>c{#2}{#3} } \expandafter + \endgroup \__ccool_log_entry } }{\c_empty_tl} } -\cs_new_protected:Npn \@@_make_ccool:nnnn #1 #2 #3 #4 +\cs_new_protected:Npn \__ccool_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 + {%^^A 2 3 4 5 6 7 8 9 + +o D<>{#1} E{ c }{{#2}} m t+ s E{ s c }{{#3}{#4}} +o } { - \IfValueT{##2}{##2} - \@@_make_ccool_sideeffect:nnn{##1}{##3}{##4} + \IfValueT{##1}{##1} + \__ccool_make_ccool_sideeffect:nnn{##2}{##3}{##4} \IfBooleanT{##6} { - \@@_make_ccool_exp:nnn{##1}{##7}{##8} + \__ccool_make_ccool_exp:nnn{##2}{##7}{##8} } \bool_if:nTF{##5} { \gappto{\CcoolHook} { - \@@_make_ccool_sideeffect:nnn{##1}{##3}{##4} + \__ccool_make_ccool_sideeffect:nnn{##2}{##3}{##4} } } {\c_empty_tl} \IfValueT{##9} { - \exp_not:n{ \Ccool<##1>[##9] } + \exp_not:n{ \Ccool[##9] } } } } -\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} -\cs_new_protected:Nn \@@_option_inner:n -{ - \tl_gset:Nn \g@@_option_inner_tl {#1} -} -\@@_option_inner:n +\msg_new:nnn {__ccool} +{ iow } +{#1~is~closed~can't~write} +\msg_new:nnn {__ccool} +{lang_and} +{~key~#1~missing~for~global~option~'And';~falling~back~on~'english'} +\tl_new:N \g__ccool_option_inner_tl +\cs_new_protected:Nn \__ccool_option_inner:n { - \msg_warning:nnn{ @@ }{ unset }{ \exp_not:N \g@@_option_inner_tl } + \tl_gset:Nn \g__ccool_option_inner_tl {#1} } -\cs_new:Nn \@@_option_name:n +\tl_new:N \g__ccool_option_param_tl +\cs_new_protected:Nn \__ccool_option_param:n { - \tl_gset:Nn \g@@_option_name_tl{#1} + \tl_gset:Nn \g__ccool_option_param_tl{#1} } -\@@_option_name:n +\tl_new:N \g__ccool_option_outer_tl +\cs_new_protected:Nn \__ccool_option_outer:n { - \msg_error:nnx{ @@ } - { generic } - { \exp_not:N\g@@_option_name_tl~undefined } + \tl_gset:Nn \g__ccool_option_outer_tl {#1} } -\cs_new_protected:Nn \@@_option_outer:n +\tl_new:N \g__ccool_option_separ_tl +\cs_new_protected:Nn \__ccool_option_separ:n { - \tl_gset:Nn \g@@_option_outer_tl {#1} + \cs_gset:Npn \g__ccool_option_separ_tl {#1} } -\@@_option_outer:n +\ifcsdef{text} { - \msg_warning:nnn{ @@ }{ unset }{ \exp_not:N \g@@_option_outer_tl } -} -\cs_new_protected:Nn \@@_option_separ:n -{ - \cs_gset:Npn \g@@_option_separ_tl {#1} + \tl_const:Nn \c__ccool_option_separ_default_tl + { + { \text{{\ }\__ccool_lang_and:{\ }} } + { \text{,{\ }} } + { \text{,{\ }\__ccool_lang_and:{\ }} } + } } -\@@_option_separ:n { - \msg_warning:nnn{ @@ }{ unset }{ \exp_not:N \g@@_option_separ_tl } + \tl_const:Nn \c__ccool_option_separ_default_tl + { + { {\ }\__ccool_lang_and:{\ } } + { ,{\ } } + { ,{\ }\__ccool_lang_and:{\ } } + } } -\cs_new_protected:Npn \@@_prop_append:NN #1 #2 +\cs_new_protected:Npn \__ccool_prop_append:NN #1 #2 { - \cs_set:Nn \@@_prop_append:nn + \cs_set:Nn \__ccool_prop_append:nn { \prop_gput:Nnx #1 {##1}{ \prop_item:Nn #2{##1} } } - \prop_map_function:NN #2 \@@_prop_append:nn + \prop_map_function:NN #2 \__ccool_prop_append:nn } -\cs_generate_variant:Nn \@@_prop_append:NN { cN } -\cs_new_protected:Nn \@@_prop_append:Nn +\cs_generate_variant:Nn \__ccool_prop_append:NN { cN } +\cs_new_protected:Nn \__ccool_prop_append:Nn { - \@@_prop_append:cN{ \@@_prop_name:n {#2} } #1 + \__ccool_prop_append:cN{ \__ccool_prop_name:n {#2} } #1 } -\cs_new_protected:Nn \@@_prop_clear_new:n +\cs_new_protected:Nn \__ccool_prop_clear_new:n { - \exp_args:No \prop_clear_new:c{ \@@_prop_name:n {#1} } + \exp_args:No \prop_clear_new:c{ \__ccool_prop_name:n {#1} } } -\cs_new_protected:Nn \@@_prop_clear_new_map:n +\cs_new_protected:Nn \__ccool_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 + \seq_set_from_clist:Nn \g__ccool_aux_key_seq {#1} + \seq_map_function:NN \g__ccool_aux_key_seq \__ccool_prop_clear_new:n } -\cs_new:Nn \@@_prop_if_exist:nTF +\cs_new:Nn \__ccool_prop_if_exist:nTF { - \prop_if_exist:cTF{ \@@_prop_name:n {#1} }{#2}{#3} + \prop_if_exist:cTF{ \__ccool_prop_name:n {#1} }{#2}{#3} } -\cs_new:Nn \@@_prop_item:nn +\cs_new:Nn \__ccool_prop_item:nn { - \prop_item:cn { \@@_prop_name:n {#1} } {#2} + \prop_item:cn { \__ccool_prop_name:n {#1} } {#2} } -\cs_new:Npn \@@_prop_name:n #1{ @@_#1 } -\cs_new_protected:Nn \@@_prop_new:n +\cs_new:Npn \__ccool_prop_name:n #1{ __ccool_#1 } +\cs_new_protected:Nn \__ccool_prop_new:n { - \prop_new:c{ \@@_prop_name:n {#1} } + \prop_new:c{ \__ccool_prop_name:n {#1} } } -\cs_new_protected:Nn \@@_seq_from_prop:NNn +\cs_new_protected:Nn \__ccool_seq_from_prop:NNn { - \cs_set_protected:Nn \@@_seq_from_prop:n + \cs_set_protected:Nn \__ccool_seq_from_prop:n { \seq_gput_right:No #1 { \prop_item:cn{#3}{##1} } } - \seq_map_function:NN #2 \@@_seq_from_prop:n -} -\cs_new:Nn \@@_seq_use:Nn -{ - \exp_last_unbraced:NNf - \seq_use:Nnnn #1 - \@@_aux_separ:n{#2} -} -\cs_new:Nn \@@_sys_date: -{ - \int_eval:n - { - \c_sys_year_int * 10000 - +\c_sys_month_int * 100 - +\c_sys_day_int * 1 - } -} -\cs_new:Nn \@@_sys_date_hex: -{\int_to_hex:n{\@@_sys_date:}} -\cs_new:Nn \@@_sys_time: -{ - \int_eval:n - { - \c_sys_hour_int * 100 - +\c_sys_minute_int * 1 - } -} -\cs_new:Nn\@@_sys_time_hex: -{\int_to_hex:n{\@@_sys_time:}} -\cs_new:Nn\@@_sys_filename: -{ - \c_sys_jobname_str-- - \@@_sys_date_hex:-- - \@@_sys_time_hex: + \seq_map_function:NN #2 \__ccool_seq_from_prop:n } \NewDocumentCommand{ \CcoolClear } -{ D<>{\g@@_option_name_tl} } +{ D<>{\g__ccool_option_param_tl} } { - \@@_prop_clear_new_map:n{#1} + \__ccool_prop_clear_new_map:n{#1} } \NewDocumentCommand{\CcoolHook}{}{\c_empty_tl} -\ProvideDocumentCommand \CcoolLambda { O{1} m } +\ProvideDocumentCommand \CcoolLambda { O{m} m } { - \@@_lambda:nn { #1 } { #2 } + \erw_lambda:nnn \DeclareDocumentCommand { #1 } { #2 } } \NewDocumentCommand{ \CcoolOption } -{ m } +{ O{ And, Expans, File, Inner, Param, Outer, Separ, Write } } { - \keys_set:nn{ @@ }{#1} + \keys_set:nn{ __ccool }{#1} } -\keys_define:nn { @@ } +\keys_define:nn { __ccool } { +And .code:n = { \__ccool_lang_and_update:e{ #1 } }, +And .default:n = { \c__ccool_lang_and_tl }, +And .initial:n = { \c__ccool_lang_and_tl }, Expans .multichoices:nn = { eo, ee, ex, xo, xe, xx } -{ \tl_gset_eq:NN \g@@_option_expans_tl \l_keys_choice_tl }, +{ \tl_gset_eq:NN \g__ccool_option_expans_tl \l_keys_choice_tl }, Expans .default:n = { xo }, Expans .initial:n = { xo }, File .code:n = { - \tl_gset:Nx \g@@_log_file_tl{#1} + \tl_gset:Nx \g__ccool_log_file_tl{#1} }, -File .default:n = { \@@_sys_filename: }, -File .initial:n = { \@@_sys_filename: }, +File .default:n = { \erw_sys_jobnametimestamp: }, +File .initial:n = { \erw_sys_jobnametimestamp: }, Inner .code:n={ - \@@_option_inner:n{#1} + \__ccool_option_inner:n{#1} \exp_last_unbraced:Nf - \@@_make_ccool:nnnn + \__ccool_make_ccool:nnnn { - { \g@@_option_name_tl } - { \g@@_option_inner_tl } - { \g@@_option_separ_tl } - { \g@@_option_outer_tl } + { \g__ccool_option_param_tl } + { \g__ccool_option_inner_tl } + { \g__ccool_option_separ_tl } + { \g__ccool_option_outer_tl } } }, Inner .value_required:n = false, Inner .default:n = {####1}, Inner .initial:n = {####1}, -Name .code:n={ - \@@_option_name:n{#1} +Param .code:n={ + \__ccool_option_param:n{#1} \exp_last_unbraced:Nf - \@@_make_ccool:nnnn + \__ccool_make_ccool:nnnn { - { \g@@_option_name_tl } - { \g@@_option_inner_tl } - { \g@@_option_separ_tl } - { \g@@_option_outer_tl } + { \g__ccool_option_param_tl } + { \g__ccool_option_inner_tl } + { \g__ccool_option_separ_tl } + { \g__ccool_option_outer_tl } } }, -Name .value_required:n = false, -Name .default:n = { Math }, -Name .initial:n = { Math }, +Param .value_required:n = false, +Param .default:n = { Default }, +Param .initial:n = { Default }, Outer .code:n={ - \@@_option_outer:n{#1} + \__ccool_option_outer:n{#1} \exp_last_unbraced:Nf - \@@_make_ccool:nnnn + \__ccool_make_ccool:nnnn { - { \g@@_option_name_tl } - { \g@@_option_inner_tl } - { \g@@_option_separ_tl } - { \g@@_option_outer_tl } + { \g__ccool_option_param_tl } + { \g__ccool_option_inner_tl } + { \g__ccool_option_separ_tl } + { \g__ccool_option_outer_tl } } }, Outer .value_required:n = false, Outer .default:n = { \ensuremath{####1} }, Outer .initial:n = { \ensuremath{####1} }, Separ .code:n={ - \@@_option_separ:n{#1} + \__ccool_option_separ:n{#1} \exp_last_unbraced:Nf - \@@_make_ccool:nnnn + \__ccool_make_ccool:nnnn { - { \g@@_option_name_tl } - { \g@@_option_inner_tl } - { \g@@_option_separ_tl } - { \g@@_option_outer_tl } + { \g__ccool_option_param_tl } + { \g__ccool_option_inner_tl } + { \g__ccool_option_separ_tl } + { \g__ccool_option_outer_tl } } }, Separ .value_required:n = false, -Separ .default:n = { {\ }and{\ } } { ,{\ } } { ,{\ }and{\ } }, -Separ .initial:n = { {\ }and{\ } } { ,{\ } } { ,{\ }and{\ } }, +Separ .default:n = { \c__ccool_option_separ_default_tl }, +Separ .initial:n = { \c__ccool_option_separ_default_tl }, Write .code:n = { \bool_if:nTF{#1} - {\@@_log_open:} - {\@@_log_close:} + {\__ccool_log_open:} + {\__ccool_log_close:} }, Write .value_required:n = false, Write .default:n = \BooleanFalse, @@ -440,8 +444,8 @@ Write .initial:n = \BooleanFalse {o} { \IfValueTF{#1} - {\@@_log_read:e{#1}} - {\@@_log_read:} + {\__ccool_log_read:e{#1}} + {\__ccool_log_read:} } \NewDocumentCommand{\CcoolVers} {} |