From 675bcc9067ccef91624a9eca025506a4ce1d37b3 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Tue, 12 May 2020 03:03:03 +0000 Subject: CTAN sync 202005120303 --- .../latex/contrib/l3kernel/l3kernel-functions.dtx | 100 ++++++++++++++++++++- 1 file changed, 99 insertions(+), 1 deletion(-) (limited to 'macros/latex/contrib/l3kernel/l3kernel-functions.dtx') diff --git a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx index fa09742458..d5cc6170ad 100644 --- a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx +++ b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-05} +% \date{Released 2020-05-11} % % \maketitle % @@ -329,6 +329,104 @@ % and variable mappings. % \end{variable} % +% \begin{function}{\__kernel_quark_new_test:N} +% \begin{syntax} +% \cs{__kernel_quark_new_test:N} \cs[no-index]{\meta{name}:\meta{arg spec}} +% \end{syntax} +% Defines a quark-test function \cs[no-index]{\meta{name}:\meta{arg spec}} +% which tests if its argument is \cs[no-index]{q__\meta{namespace}_recursion_tail}, +% then acts accordingly, as described below for each possible +% \meta{arg spec}. +% +% The \meta{namespace} is determined as the first (nonempty) +% |_|-delimited word in \meta{name} and is used internally +% in the definition of auxiliaries. The function +% \cs{__kernel_quark_new_test:N} does \emph{not} define +% the \cs[no-index]{q__\meta{namespace}_recursion_tail} and +% \cs[no-index]{q__\meta{namespace}_recursion_stop} quarks. +% They should be manually defined with \cs{quark_new:N}. +% +% There are $6$ different types of quark-test functions. Which one is +% defined depends on the \meta{arg spec}, which \emph{must} be one of +% the options listed now. Four of them are modeled after +% \cs[no-index]{quark_if_recursion_tail:(N|n)} and +% \cs[no-index]{quark_if_recursion_tail_do:(N|n)n}. +% \begin{description} +% \def\makelabel#1{\texttt{#1}} +% \item[n] defines \cs[no-index]{\meta{name}:n} such that it +% checks if |#1| contains only \cs[no-index]{q__\meta{namespace}_recursion_tail}, and +% if so consumes all tokens up to \cs[no-index]{q__\meta{namespace}_recursion_stop} +% (\emph{c.f.}~\cs{quark_if_recursion_tail_stop:n}). +% \item[nn] defines \cs[no-index]{\meta{name}:nn} such that it +% checks if |#1| contains only \cs[no-index]{q__\meta{namespace}_recursion_tail}, and +% if so consumes all tokens up to \cs[no-index]{q__\meta{namespace}_recursion_stop}, +% then executes the code |#2| after that +% (\emph{c.f.}~\cs{quark_if_recursion_tail_stop_do:nn}). +% \item[N] defines \cs[no-index]{\meta{name}:N} such that it +% checks if |#1| is \cs[no-index]{q__\meta{namespace}_recursion_tail}, and if so consumes +% all tokens up to \cs[no-index]{q__\meta{namespace}_recursion_stop} +% (\emph{c.f.}~\cs{quark_if_recursion_tail_stop:N}). +% \item[Nn] defines \cs[no-index]{\meta{name}:Nn} such that it +% checks if |#1| is \cs[no-index]{q__\meta{namespace}_recursion_tail}, and if so consumes +% all tokens up to \cs[no-index]{q__\meta{namespace}_recursion_stop}, then executes +% the code |#2| after that +% (\emph{c.f.}~\cs{quark_if_recursion_tail_stop_do:Nn}). +% \end{description} +% The last two are modeled after +% \cs[no-index]{quark_if_recursion_tail_break:(n|N)N}, and in those +% cases the quark \cs[no-index]{q__\meta{namespace}_recursion_stop} is +% not used (and thus needs not be defined). +% \begin{description} +% \def\makelabel#1{\texttt{#1}} +% \item[nN] defines \cs[no-index]{\meta{name}:nN} such that it +% checks if |#1| contains only \cs[no-index]{q__\meta{namespace}_recursion_tail}, and +% if so uses the \cs[no-index]{\meta{type}_map_break:} function |#2|. +% \item[NN] defines \cs[no-index]{\meta{name}:NN} such that it +% checks if |#1| is \cs[no-index]{q__\meta{namespace}_recursion_tail}, and if so uses +% the \cs[no-index]{\meta{type}_map_break:} function |#2|. +% \end{description} +% Any other signature, as well as a function without signature +% are errors, and in such case the definition is aborted. +% \end{function} +% +% \begin{function}{\__kernel_quark_new_conditional:Nn} +% \begin{syntax} +% \cs{__kernel_quark_new_conditional:Nn} \cs[no-index]{__\meta{namespace}_quark_if_\meta{name}:\meta{arg spec}} \Arg{conditions} +% \end{syntax} +% Defines a collection of quark conditionals that test if their +% argument is the quark \cs[no-index]{q__\meta{namespace}_\meta{name}} +% and perform suitable actions. The \meta{conditions} are a +% comma-separated list of one or more of |p|, |T|, |F|, and |TF|, and +% one conditional is defined for each \meta{condition} in the list, as +% described for \cs{prg_new_conditional:Npnn}. The conditionals are +% defined using \cs{prg_new_conditional:Npnn}, so that their name is +% obtained by adding |p|, |T|, |F|, or |TF| to the base name +% \cs[no-index]{__\meta{namespace}_quark_if_\meta{name}:\meta{arg spec}}. +% +% The first argument of \cs{__kernel_quark_new_conditional:Nn} must +% contain |_quark_if_| and |:|, as these markers are used to determine +% the \meta{name} of the quark +% \cs[no-index]{q__\meta{namespace}_\meta{name}} to be tested. This +% quark should be manually defined with \cs{quark_new:N}, as +% \cs{__kernel_quark_new_conditional:Nn} does \emph{not} define it. +% +% The function \cs{__kernel_quark_new_conditional:Nn} can define $2$ +% different types of quark conditionals. Which one is defined depends +% on the \meta{arg spec}, which \emph{must} be one of the following +% options, modeled after \cs[no-index]{quark_if_nil:(N|n)(TF)}. +% \begin{description} +% \def\makelabel#1{\texttt{#1}} +% \item[n] defines \cs[no-index]{__\meta{namespace}_quark_if_\meta{name}:n(TF)} such that it +% checks if |#1| contains only \cs[no-index]{q__\meta{namespace}_\meta{name}}, and +% executes the proper conditional branch. +% \item[N] defines \cs[no-index]{__\meta{namespace}_quark_if_\meta{name}:N(TF)} such that it +% checks if |#1| is \cs[no-index]{q__\meta{namespace}_\meta{name}}, and +% executes the proper conditional branch. +% \end{description} +% Any other signature, as well as a function without signature +% are errors, and in such case the definition is aborted. +% \end{function} +% % \begin{variable}{\c__kernel_randint_max_int} % Maximal allowed argument to \cs{__kernel_randint:n}. Equal to % $2^{17}-1$. -- cgit v1.2.3