diff options
Diffstat (limited to 'macros')
19 files changed, 1639 insertions, 915 deletions
diff --git a/macros/latex/contrib/ccool/README.md b/macros/latex/contrib/ccool/README.md index 79ddcae18f..a3801bd081 100644 --- a/macros/latex/contrib/ccool/README.md +++ b/macros/latex/contrib/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/macros/latex/contrib/ccool/ccool.dtx b/macros/latex/contrib/ccool/ccool.dtx index 4dd2d47e22..a58f11a00c 100644 --- a/macros/latex/contrib/ccool/ccool.dtx +++ b/macros/latex/contrib/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/macros/latex/contrib/ccool/ccool.pdf b/macros/latex/contrib/ccool/ccool.pdf Binary files differindex 672af92977..e39ed031af 100644 --- a/macros/latex/contrib/ccool/ccool.pdf +++ b/macros/latex/contrib/ccool/ccool.pdf diff --git a/macros/latex/contrib/crop/Makefile b/macros/latex/contrib/crop/Makefile index 6b48c0902e..3f0ebd7860 100644 --- a/macros/latex/contrib/crop/Makefile +++ b/macros/latex/contrib/crop/Makefile @@ -1,14 +1,18 @@ NAME=crop -ARCHIVE_NAME=$(NAME).tar.gz -ARCHIVE_CONTENTS=$(NAME).dtx $(NAME).pdf Makefile README $(NAME).ins $(NAME).sty +VERSION=`cat VERSION` +ARCHIVE_NAME=$(NAME).zip +ARCHIVE_CONTENTS=$(NAME).dtx $(NAME).pdf Makefile README $(NAME).ins -all: $(NAME).sty $(NAME).pdf +all: $(NAME).sty $(NAME).pdf VERSION archive: $(ARCHIVE_CONTENTS) rm -rf $(NAME)/ mkdir $(NAME)/ cp $(ARCHIVE_CONTENTS) $(NAME)/ - tar -czf $(ARCHIVE_NAME) $(NAME) + zip -r $(ARCHIVE_NAME) $(NAME) + +$(NAME).dtx: $(NAME).dtx.in + nancy $(NAME).dtx.in . > $(NAME).dtx $(NAME).pdf: $(NAME.dtx) latexmk $(NAME).dtx @@ -18,3 +22,8 @@ $(NAME).sty: $(NAME).ins $(NAME).ins: pdflatex $(NAME).dtx + +release: archive + git diff --exit-code && \ + git tag -a -m "Release tag" "v$(VERSION)" && \ + git push && git push --tags diff --git a/macros/latex/contrib/crop/README b/macros/latex/contrib/crop/README index 704e46daf8..7bec48a74e 100644 --- a/macros/latex/contrib/crop/README +++ b/macros/latex/contrib/crop/README @@ -1,28 +1,12 @@ -crop.sty -======== - -provides different forms of cropmarks for -trimming paper stacks, for camera alignment and -for visualizing the page dimensions. -There are options for centering the page with -respect to some physical paper size, for marking -the vertical and horizontal middle axis, for -mounting pages on a physical sheet, for -reflecting and inverting the whole document or -printing it upside-down, and for suppressing -either text or graphics output. - - -author = "Melchior FRANZ" -maintainer = "Reuben Thomas" -version = "1.10.1" -date = "04 Jun 2020" -URL = "https://github.com/rrthomas/crop/" -email = "rrt@sc3d.org" -codetable = "ISO/ASCII" -keywords = "cropmarks, frame, mirror, rotate, invert" -supported = "yes" +crop +==== +This package provides different forms of cropmarks for trimming paper +stacks, for camera alignment and for visualizing the page dimensions. There +are options for centering the page with respect to some physical paper size, +for marking the vertical and horizontal middle axis, for mounting pages on a +physical sheet, for reflecting and inverting the whole document or printing +it upside-down, and for suppressing either text or graphics output. COPYRIGHT NOTICE @@ -32,9 +16,8 @@ under the terms of the LaTeX Project Public License as specified in the file macros/latex/base/lppl.txt on any CTAN archive server. +Extracting the package & processing the documentation +===================================================== -Installation -============ - -The package is supplied ready to install: just copy crop.sty and crop.pdf to -suitable directories. +Run "make" to get the style file and the documentation, then install +crop.sty and crop.pdf in appropriate directories. diff --git a/macros/latex/contrib/crop/crop.dtx b/macros/latex/contrib/crop/crop.dtx index 15e8f04c6f..678c235931 100644 --- a/macros/latex/contrib/crop/crop.dtx +++ b/macros/latex/contrib/crop/crop.dtx @@ -27,15 +27,15 @@ %% ==================================================================== %% @LaTeX-package-file{ %% author = "Melchior FRANZ", -%% version = "1.10.1", -%% date = "04 Jun 2020", +%% version = "1.10.2", +%% date = "05 Jun 2020", %% filename = "crop.dtx", %% address = "Melchior FRANZ %% Rieder Hauptstrasse 52 %% A-5212 SCHNEEGATTERN %% AUSTRIA", -%% URL = "https://github.com/drehscheibe/crop/", -%% email = "mfranz@aon.at", +%% URL = "https://github.com/rrthomas/crop/", +%% email = "rrt@sc3d.org", %% codetable = "ISO/ASCII", %% keywords = "cropmarks, frame, mirror, rotate, invert", %% supported = "yes", @@ -74,8 +74,8 @@ % % %<*driver> -\def\fileversion{1.10.1} -\def\filedate{2020/06/04g} +\def\fileversion{1.10.2} +\def\filedate{2020/06/05} \documentclass{ltxdoc} \usepackage{hyperref} \hypersetup{ @@ -2234,4 +2234,4 @@ % % ^^A \PrintChanges % ^^A vim:ts=4:sw=4:et:cindent -% \Finale ^^A.E.I.O.U.^^ +% \Finale ^^A.E.I.O.U.^^
\ No newline at end of file diff --git a/macros/latex/contrib/l3build/CHANGELOG.md b/macros/latex/contrib/l3build/CHANGELOG.md index 67509493f3..012467cd78 100644 --- a/macros/latex/contrib/l3build/CHANGELOG.md +++ b/macros/latex/contrib/l3build/CHANGELOG.md @@ -7,6 +7,12 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2020-06-04] + +### Added +- Store 'raw' PDF files when testing using PDFs, to allow further checks + with e.g. PDF validators + ## [2020-03-25] ### Changed @@ -466,7 +472,8 @@ this project uses date-based 'snapshot' version identifiers. - Rationalise short option names: removed `-d`, `-E`, `-r` - Target `cmdcheck`: specific to LaTeX3 kernel work -[Unreleased]: https://github.com/latex3/l3build/compare/2020-03-25...HEAD +[Unreleased]: https://github.com/latex3/l3build/compare/2020-06-04...HEAD +[2020-06-04]: https://github.com/latex3/l3build/compare/2020-03-25...2020-06-04 [2020-03-25]: https://github.com/latex3/l3build/compare/2020-03-16...2020-03-25 [2020-03-16]: https://github.com/latex3/l3build/compare/2020-03-13...2020-03-16 [2020-03-13]: https://github.com/latex3/l3build/compare/2020-03-12...2020-03-13 diff --git a/macros/latex/contrib/l3build/README.md b/macros/latex/contrib/l3build/README.md index b721010c22..c3630c8f0d 100644 --- a/macros/latex/contrib/l3build/README.md +++ b/macros/latex/contrib/l3build/README.md @@ -1,7 +1,7 @@ l3build: a testing and building system for LaTeX3 ================================================= -Release 2020-03-25 +Release 2020-06-04 Overview -------- diff --git a/macros/latex/contrib/l3build/l3build-check.lua b/macros/latex/contrib/l3build/l3build-check.lua index 9f83b93412..ff022c6079 100644 --- a/macros/latex/contrib/l3build/l3build-check.lua +++ b/macros/latex/contrib/l3build/l3build-check.lua @@ -57,6 +57,7 @@ local remove = os.remove function checkinit() if not options["dirty"] then cleandir(testdir) + cleandir(resultdir) end depinstall(checkdeps) -- Copy dependencies to the test directory itself: this makes the paths @@ -792,6 +793,8 @@ function runtest(name, engine, hide, ext, pdfmode, breakout) dvitopdf(name, testdir, engine, hide) end if pdfmode then + cp(name .. pdfext,testdir,resultdir) + ren(resultdir,name .. pdfext,name .. "." .. engine .. pdfext) rewrite(pdffile,npffile,normalize_pdf) else rewrite(logfile,newfile,normalize_log,engine,errlevels) diff --git a/macros/latex/contrib/l3build/l3build-upload.lua b/macros/latex/contrib/l3build/l3build-upload.lua index fc25d5d6ac..ba74309492 100644 --- a/macros/latex/contrib/l3build/l3build-upload.lua +++ b/macros/latex/contrib/l3build/l3build-upload.lua @@ -163,14 +163,19 @@ end fp_return = shell(ctan_post .. "validate") end end - if match(fp_return,"WARNING") or match(fp_return,"ERROR") then + if (match(fp_return,"ERROR")) then exit_status=1 end -- if upload requested and validation succeeded repost to the upload URL if (exit_status==0 or exit_status==nil) then if (ctanupload ~=nil and ctanupload ~=false and ctanupload ~= true) then - print("Validation successful, do you want to upload to CTAN? [y/n]" ) + if (match(fp_return,"WARNING")) then + print("Warnings from CTAN package validation:" .. fp_return:gsub("%[","\n["):gsub("%]%]","]\n]")) + else + print("Validation successful." ) + end + print("Do you want to upload to CTAN? [y/n]" ) local answer="" io.stdout:write("> ") io.stdout:flush() @@ -189,7 +194,11 @@ end exit_status=1 end else - print("CTAN validation successful") + if (match(fp_return,"WARNING")) then + print("Warnings from CTAN package validation:" .. fp_return:gsub("%[","\n["):gsub("%]%]","]\n]")) + else + print("CTAN validation successful") + end end else error("Warnings from CTAN package validation:\n" .. fp_return) diff --git a/macros/latex/contrib/l3build/l3build-variables.lua b/macros/latex/contrib/l3build/l3build-variables.lua index 432bfe6b15..87ce01d611 100644 --- a/macros/latex/contrib/l3build/l3build-variables.lua +++ b/macros/latex/contrib/l3build/l3build-variables.lua @@ -53,6 +53,7 @@ texmfdir = texmfdir or maindir .. "/texmf" builddir = builddir or maindir .. "/build" distribdir = distribdir or builddir .. "/distrib" localdir = localdir or builddir .. "/local" +resultdir = resultdir or builddir .. "/result" testdir = testdir or builddir .. "/test" typesetdir = typesetdir or builddir .. "/doc" unpackdir = unpackdir or builddir .. "/unpacked" diff --git a/macros/latex/contrib/l3build/l3build.1 b/macros/latex/contrib/l3build/l3build.1 index 776d9e9ede..9262d7c5b6 100644 --- a/macros/latex/contrib/l3build/l3build.1 +++ b/macros/latex/contrib/l3build/l3build.1 @@ -1,4 +1,4 @@ -.TH l3build 1 "2020-03-25" +.TH l3build 1 "2020-06-04" .SH NAME l3build \- Checking and building packages .SH SYNOPSIS diff --git a/macros/latex/contrib/l3build/l3build.dtx b/macros/latex/contrib/l3build/l3build.dtx index a513e3e6c5..198042469e 100644 --- a/macros/latex/contrib/l3build/l3build.dtx +++ b/macros/latex/contrib/l3build/l3build.dtx @@ -69,9 +69,10 @@ \luavarset{builddir} {maindir .. "/build"} {Directory for building and testing} \luavarset{distribdir}{builddir .. "/distrib"}{Directory for generating distribution structure} \luavarset{localdir} {builddir .. "/local"} {Directory for extracted files in \enquote{sandboxed} \TeX{} runs} +\luavarset{resultdir} {builddir .. "/result"} {Directory for PDF files when using PDF-based tests} \luavarset{testdir} {builddir .. "/test"} {Directory for running tests} \luavarset{typesetdir}{builddir .. "/doc"} {Directory for building documentation} -\luavarset{unpackdir} {builddir .. "/unpack"} {Directory for unpacking sources} +\luavarset{unpackdir} {builddir .. "/unpacked"}{Directory for unpacking sources} \luavarseparator \luavarset{ctandir}{distribdir .. "/ctan"}{Directory for organising files for CTAN} \luavarset{tdsdir} {distribdir .. "/tds"} {Directory for organised files into TDS structure} @@ -234,7 +235,7 @@ % }^^A % } % -% \date{Released 2020-03-25} +% \date{Released 2020-06-04} % % \maketitle % \tableofcontents diff --git a/macros/latex/contrib/l3build/l3build.lua b/macros/latex/contrib/l3build/l3build.lua index 083b6b81ba..e7acd47fb3 100755 --- a/macros/latex/contrib/l3build/l3build.lua +++ b/macros/latex/contrib/l3build/l3build.lua @@ -25,7 +25,7 @@ for those people who are interested. --]] -- Version information -release_date = "2020-03-25" +release_date = "2020-06-04" -- File operations are aided by the LuaFileSystem module local lfs = require("lfs") @@ -107,6 +107,7 @@ testsuppdir = escapepath(testsuppdir) builddir = escapepath(builddir) distribdir = escapepath(distribdir) localdir = escapepath(localdir) +resultdir = escapepath(resultdir) testdir = escapepath(testdir) typesetdir = escapepath(typesetdir) unpackdir = escapepath(unpackdir) @@ -158,6 +159,7 @@ if options["target"] == "check" then print("\n Check failed with difference files") local testdir = testdir if config ~= "build" then + resultdir = resultdir .. "-" .. config testdir = testdir .. "-" .. config end for _,i in ipairs(filelist(testdir,"*" .. os_diffext)) do diff --git a/macros/latex/contrib/l3build/l3build.pdf b/macros/latex/contrib/l3build/l3build.pdf Binary files differindex a3ee41c426..958de58c4d 100644 --- a/macros/latex/contrib/l3build/l3build.pdf +++ b/macros/latex/contrib/l3build/l3build.pdf diff --git a/macros/latex/contrib/rec-thy/README b/macros/latex/contrib/rec-thy/README index b08a80f03b..0d4e624988 100644 --- a/macros/latex/contrib/rec-thy/README +++ b/macros/latex/contrib/rec-thy/README @@ -36,3 +36,4 @@ Github URL: https://github.com/TruePath/Recursion-Theory-Latex-Package ?? - v3.2 Removed \reaop, \alphaREAop, \aREAop in favor of using the single form \REAop. Removed \functo, \map and funcomp, \hgtO as useless synonyms and removed \KleeneOBelow and KleeneOLess as beyond what the package should define. Added package option compat31 to ensure package compatibility with version 3.1. An optional parentheses delimited argument specifying the base has been added to \REAop. Both \REAop and the pair \REA/\CEA have been updated to ignore order of optional arguments. The square brackets used to delimit the argument to the use command are now auto-sized. Added \pmapsto, \pmapsfrom, \kleeneZero, \kleeneNum, \entersat. Also Misc typesetting fixes. 05/08/2020 - v3.3 Fixed/added tweak to overline so it looks correct. Also added real symbols so that \subfunneq and \supfunneq can be defined appropriately. Fixed incorrect use of tiny in math mode. 06/01/2020 - v3.3.1 Fixed typo causing error under pdflatex. +06/04/2020 - v3.4 Eliminated dependence on undertilde which is missing from texlive diff --git a/macros/latex/contrib/rec-thy/rec-thy.pdf b/macros/latex/contrib/rec-thy/rec-thy.pdf Binary files differindex 47a50ecb93..d466d49ff6 100644 --- a/macros/latex/contrib/rec-thy/rec-thy.pdf +++ b/macros/latex/contrib/rec-thy/rec-thy.pdf diff --git a/macros/latex/contrib/rec-thy/rec-thy.sty b/macros/latex/contrib/rec-thy/rec-thy.sty index 0edca35cbd..a758fe43fc 100644 --- a/macros/latex/contrib/rec-thy/rec-thy.sty +++ b/macros/latex/contrib/rec-thy/rec-thy.sty @@ -1,7 +1,7 @@ \NeedsTeXFormat{LaTeX2e} % Release Notes see README -\def\recthyVersion{3.3.1} -\ProvidesPackage{rec-thy}[v3.3.1 Provides commands for writing up recursion theory papers] +\def\recthyVersion{3.4} +\ProvidesPackage{rec-thy}[2020/06/04 v\recthyVersion Provides commands for writing up recursion theory papers] \makeatletter % \newcommand*{\@curpack}{\@currname} %rec-thy.sty \newcommand*{\@packinfo}[1]{\PackageInfo{rec-thy}{#1}} @@ -32,7 +32,17 @@ \ltx@ifpackageloaded{amsfonts}{}{\RequirePackage{amsfonts}} \ltx@ifpackageloaded{mathtools}{}{\RequirePackage{mathtools}} \ltx@ifpackageloaded{unicode-math}{}{\RequirePackage{mathrsfs}\RequirePackage{mathbbol}} -\ltx@ifpackageloaded{undertilde}{}{\RequirePackage{undertilde}} +% Undertilde doesn't exist in texlive so we remove the dependency and define it again. +\ltx@ifpackageloaded{undertilde}{}{ + \newlength\knuthian@fdfive + \def\mathpal@save#1{\let\was@math@style=#1\relax} + \def\utilde#1{\mathpalette\mathpal@save + {\setbox124=\hbox{$\was@math@style#1$}% + \setbox125=\hbox{$\fam=3\global\knuthian@fdfive=\fontdimen5\font$} + \setbox125=\hbox{$\widetilde{\vrule height 0pt depth 0pt width \wd124}$}% + \baselineskip=1pt\relax + \vtop{\copy124\copy125\vskip -\knuthian@fdfive}}} + } } % \ifxetex %workaround for bug...hopefully can dispense on later @@ -1853,7 +1863,7 @@ - \newcommand*{\@recthy@ttSYM}{\ensuremath{\tiny \mathtt{tt}}} + \newcommand*{\@recthy@ttSYM}{\ensuremath{\mathtt{tt}}} \newcommand*{\ttSYM}{\@recthy@ttSYM} \newcommand*{\ttlneq}{\lneq_{\@recthy@ttSYM}} \newcommand*{\ttleq}{\leq_{\@recthy@ttSYM}} diff --git a/macros/latex/contrib/rec-thy/rec-thy.tex b/macros/latex/contrib/rec-thy/rec-thy.tex index e024ef8edb..e43e148ec3 100644 --- a/macros/latex/contrib/rec-thy/rec-thy.tex +++ b/macros/latex/contrib/rec-thy/rec-thy.tex @@ -1,4 +1,5 @@ \documentclass[leqno,11pt]{amsart} +\usepackage{zwgetfdate} \usepackage{amsmath} % \RequirePackage{amsmath} \usepackage[disallowspaces,fixamsmath]{mathtools} @@ -48,7 +49,6 @@ \usepackage{multirow} \usepackage{booktabs} \usepackage{xtab} - \usepackage[suppPriorityTrees]{rec-thy} \usepackage{suffix} \usepackage{metalogo} @@ -81,19 +81,19 @@ \title{The rec-thy Package} \author{Peter M. Gerdes (gerdes@invariant.org)} -\date{06/01/2020: Version \recthyVersion} +\date{\DateOfPackage{rec-thy}: Version \recthyVersion} \begin{document} +\begin{abstract} +\noindent The rec-thy package is designed to help mathematicians publishing papers in the area of recursion theory (aka Computability Theory) easily use standard notation. This includes easy commands to denote Turing reductions, Turing functionals, \ce sets, stagewise computations, forcing and syntactic classes. +\end{abstract} -\maketitle +\maketitle -\begin{abstract} -\noindent The rec-thy package is designed to help mathematicians publishing papers in the area of recursion theory (aka Computability Theory) easily use standard notation. This includes easy commands to denote Turing reductions, Turing functionals, \ce sets, stagewise computations, forcing and syntactic classes. -\end{abstract} @@ -685,6 +685,7 @@ Finally to enable the mrref helper macros pass the option \verb=mrref=.\\ These % TESTING: \verb=\fpmapsto=, \verb=\fpmapsfrom=, \verb=\ParFuncs{Y}{X}= and \verb=\FinParFuncs{Y}{X}= \begin{itemize} + \item[3.4] Eliminated dependence on undertilde which is missing from texlive \item[3.3.1] Fixed typo causing error under pdflatex. \item[3.3] - Fixed/added tweak to overline so it looks correct. Also added real symbols so that \verb=\subfunneq= and \verb=\supfunneq= can be defined appropriately. Added \verb=\floor= and \verb=\ceil=. Note these aren't yet shown off in package doc. Fixed incorrect use of tiny in math mode. \item[3.2] - Removed \verb=\reaop=, \verb=\alphaREAop=, \verb=\aREAop= in favor of using the single form \verb=\REAop=. Removed \verb=\functo=, \verb=\map= and \verb=funcomp=, \verb=\hgtO= as useless synonyms and removed \verb=\KleeneOBelow= and \verb=KleeneOLess= as beyond what the package should define. Added package option compat31 to ensure package compatibility with version 3.1. An optional parentheses delimited argument specifying the base has been added to \verb=\REAop=. Both \verb=\REAop= and the pair \verb=\REA=/\verb=\CEA= have been updated to ignore order of optional arguments. The square brackets used to delimit the argument to the use command are now auto-sized. Added \verb=\pmapsto=, \verb=\pmapsfrom=, \verb=\kleeneZero=, \verb=\kleeneNum=, \verb=\entersat=. Also Misc typesetting fixes. |