diff options
author | Karl Berry <karl@freefriends.org> | 2019-12-13 22:29:17 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2019-12-13 22:29:17 +0000 |
commit | cb469a4cf6caa11c383e3d4e8d84d23007779586 (patch) | |
tree | bdf78f666fc9cf39f35595552e1492641a532257 /Master/texmf-dist/source | |
parent | 4380844676de4c9d820f0e52e15dd7b182a19c17 (diff) |
erw-l3 (13dec19)
git-svn-id: svn://tug.org/texlive/trunk@53117 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source')
-rw-r--r-- | Master/texmf-dist/source/latex/erw-l3/erw-l3.dtx | 679 |
1 files changed, 387 insertions, 292 deletions
diff --git a/Master/texmf-dist/source/latex/erw-l3/erw-l3.dtx b/Master/texmf-dist/source/latex/erw-l3/erw-l3.dtx index 9c662375792..6fcffe4ca41 100644 --- a/Master/texmf-dist/source/latex/erw-l3/erw-l3.dtx +++ b/Master/texmf-dist/source/latex/erw-l3/erw-l3.dtx @@ -6,7 +6,7 @@ %<*readme> ---------------------------------------------------------------- erw-l3 --- Utilities built around expl3 -Source repository: https://github.com/er-cpp/erw-l3 +Source repository: https://github.com/rogard/erw-l3 Released under the LaTeX Project Public License v1.3c or later See http://www.latex-project.org/lppl.txt ---------------------------------------------------------------- @@ -72,8 +72,8 @@ and the derived files erw-l3.ins, %</internal> %<package>\ProvidesExplPackage %<package> {erw-l3} % Package name -%<package> {2018/6/21} % Release date -%<package> {0.1.3} % Release version +%<package> {2019/10/12} % Release date +%<package> {0.1.5} % Release version %<package> {Utilities built around expl3} % Description % %<*driver> @@ -116,29 +116,25 @@ and the derived files erw-l3.ins, % % \tableofcontents % -% \section{Preliminaries} +% \section*{Conventions} % -% See \autoref{part:other}~\autoref{support} on how to get this package. -% To use it, make sure the file \file{erw-l3.sty} is in the path of the \LaTeX~engine. -% In the preamble of your \LaTeX document, put: -% \begin{center} -% \cs{usepackage}\oarg{options}|{|\pkg{erw-l3}|}|\linebreak -% \end{center} +% The naming conventions are (loosely) those of \LaTeX3. +% For example, \meta{cs} stands for \emph{control sequence}, which is described in \cite[Part~\pkg{l3basics}]{interface3}. % -% \floatstyle{ruled} -% \newfloat{Listing}{H}{lop} -% \NewDocumentCommand{\erwtab}{O{0.5}}{\tabto{#1\linewidth}} +% \section*{Requirement} % -% \part{Usage}\label{part:usage} +% Have \file{erw-l3.sty} is in the path of the \LaTeX~engine. % -% The naming conventions are (loosely) those of \LaTeX3. -% For example, \meta{cs} stands for \emph{control sequence}, which is described in \cite[Part~\pkg{l3basics}]{interface3}. +% \part{Usage}\label{part:usage} % -% \section{backend} +% In the preamble of \cs{documentclass}, put: +% \begin{center} +% \cs{usepackage}\oarg{options}|{|\pkg{erw-l3}|}|\linebreak +% \end{center} % -% We call `backend' commands that are \pkg{expl3}-like. +% \section{\textsf{compose}} % -% \subsection{\textsf{compose}} +% \subsection{\textsf{backend}} % % \begin{function}{\erw_compose:nV,\erw_compose:nn} % \begin{syntax} @@ -180,45 +176,57 @@ and the derived files erw-l3.ins, % \begin{syntax} % \cs{erw_compose_seq_vers:nV}\marg{list of cs or code}\meta{seq} % \end{syntax} -% Not implemented. +% {\color{red}Not implemented} % \end{function} % -% \subsection{\textsf{csutil}} +% \section{\textsf{csutil}} % -% \begin{function}{\erw_apply:Nn, \erw_apply:cn} +% \subsection{\textsf{backend}} +% +% \begin{function}{\erw_accum:nn} +% \begin{syntax}{\cs{erw_accum:nn}}\marg{token list}\marg{item} +% \end{syntax}Expands to a token list comprising the items of \meta{token list} and \meta{item} +% \end{function} +% +% \begin{function}{\erw_apply:Nn, \erw_apply:cn, \erw_apply:Nnn, \erw_apply:Nnnn, \erw_apply:Nnnnn} % \begin{syntax}{\cs{erw_apply:Nn}}\meta{cs}\marg{arg} % \end{syntax}Expands to \meta{cs}\marg{arg} % \end{function} % -% \begin{function}{\erw_cs_set_eq:NN, \erw_cs_set_eq:cN} +% \begin{function}{\erw_cs_set_eq:NN, \erw_cs_set_eq:cN,\erw_cs_gset_eq:NN, \erw_cs_gset_eq:cN} % \begin{syntax}{\cs{erw_cs_set_eq:NN}}\meta{cs1}\meta{cs2} % \end{syntax}\meta{cs1}\textleftarrow\meta{cs2} % \end{function} % -% \begin{function}{\erw_cs_set_inline:Nn, \erw_cs_set_inline:cn} +% \begin{function}{\erw_cs_set_inline:Nn, \erw_cs_set_inline:cn,\erw_cs_gset_inline:Nn, \erw_cs_gset_inline:cn} % \begin{syntax}{\cs{erw_cs_set_inline:Nn}}\meta{cs}\marg{code} % \end{syntax} % \end{function} % -% \begin{function}{\erw_identity:N,\erw_identity:c} -% \begin{syntax}{\cs{erw_identity:N}}\marg{arg} +% \begin{function}{\erw_identity:n} +% \begin{syntax}{\cs{erw_identity:n}}\marg{arg} % \end{syntax} Expands to \meta{arg} % \end{function} % +% \begin{function}{\erw_is_matrix_p:n,\erw_is_matrix:nTF} +% \begin{syntax}{\cs{erw_is_matrix_p:n}}\marg{token list} +% \end{syntax} Checks if \meta{token list} is a (square) matrix. +% \end{function} +% % \begin{function}{\erw_fold:NV, \erw_fold:cV} % \begin{syntax}{\cs{erw_fold:NV}}\meta{cs}\meta{var} % \end{syntax}\meta{var}\textleftarrow \cs{erw_apply:NV}\meta{cs}\meta{var}. % See Listing~\autoref{listng:fold}. % \end{function} % -% \begin{function}{\erw_items_to:nn} -% \begin{syntax}{\cs{erw_items_to:nn}}\marg{int}\marg{token list} -% \end{syntax} See Listing~\autoref{listng:items} -% \end{function} -% % \begin{function}{\erw_last_item:nn} % \begin{syntax}{\cs{erw_last_item:nn}}\marg{int}\marg{token list} -% \end{syntax} See Listing~\autoref{listng:items} +% \end{syntax} ^^ASee Listing~\autoref{listng:items} +% \end{function} +% +% \begin{function}{\erw_merge:nn} +% \begin{syntax}{\cs{erw_merge:nn}}\marg{tl 1}\marg{tl 2} +% \end{syntax}Merges \meta{tl 1}\meta{tl 2} % \end{function} % % \begin{function}{\erw_repeat:nn} @@ -232,10 +240,41 @@ and the derived files erw-l3.ins, % \end{syntax} See Listing~\autoref{listng:split} % \end{function} % -% \subsection{\textsf{map}} +% \section{\textsf{int}} +% +% \subsection{\textsf{backend}} +% +% \begin{function}{\erw_int_range:nn} +% \begin{syntax}{\cs{erw_int_range:nn}}\marg{first}{last} +% \end{syntax} Returns a range of integers. Implementation different than \cs{int_step_inline} +% \end{function} +% +% \begin{function}{\erw_int_range:n} +% \begin{syntax}{\cs{erw_int_range:n}}\marg{count} +% \end{syntax} Returns a range of integers. Implementation different than \cs{int_step_inline}. See Listing~\autoref{listng:int:range} +% \end{function} +% +% \section{\textsf{map}} +% +% \subsection{\textsf{backend}} +% +% \begin{function}{\erw_set_map:N,\erw_gset_map:N} +% \begin{syntax}{\cs{erw_set_map:N}}\meta{cs} +% \end{syntax} Sets the function used by \cs{erw_map:n}. +% \end{function} +% +% \begin{function}{\erw_set_map_inline:n,\erw_gset_map_inline:n} +% \begin{syntax}{\cs{erw_set_map_inline:n}}\marg{code} +% \end{syntax} Sets the function used by \cs{erw_map:n}. +% \end{function} +% +% \begin{function}{\erw_map:n} +% \begin{syntax}{\cs{erw_map:n}}\marg{token list} +% \end{syntax} Applies the stored \meta{cs} to each item in \meta{token list}. An application is \cs{erw_is_matrix} +% \end{function} % % \begin{function}{\erw_map:Nn} -% \begin{syntax}{\cs{erw_map:Nn}}\meta{cs}\marg{args} +% \begin{syntax}{\cs{erw_map:Nn}}\meta{cs}\marg{token list} % \end{syntax} % See Listing~\autoref{listng:map}. % Redundant with \cs{tl_map_function:nN} @@ -247,9 +286,14 @@ and the derived files erw-l3.ins, % See Listing~\autoref{listng:mapinl} % \end{function} % +% \begin{function}{\erw_map_indexed:Nnn} +% \begin{syntax}{\cs{erw_map_indexed:Nnn}}\meta{cs}\marg{int}\marg{matrix of tokens} +% \end{syntax} {\color{red} Not implemented}. See Listing~\autoref{listng:mapindexed}. +% \end{function} +% % \begin{function}{\erw_map_thread:Nn} % \begin{syntax}{\cs{erw_map_thread:Nn}}\meta{cs}\marg{matrix of tokens} -% \end{syntax} Threads \meta{cs} over the columns, where the arity of \meta{cs} is equal to the number of rows. +% \end{syntax} Threads \meta{cs} over the columns, where the arity of \meta{cs} must be equal to the number of rows. % See Listing~\autoref{listng:thread} % \end{function} % @@ -258,9 +302,9 @@ and the derived files erw-l3.ins, % \end{syntax} % \end{function} % -% \subsection{\textsf{numbrdcs}} +% \section{\textsf{numbrdcs}} % -% Part of these commands have a frontend counterpart, see \autoref{usage:frontend:numbrdcs}. +% \subsection{backend} % % \begin{function}{\erw_numbrd_cs_reset:} % \begin{syntax}\cs{erw_numbrd_cs_reset:}|{}| @@ -282,33 +326,7 @@ and the derived files erw-l3.ins, % \end{syntax}See Listing~\ref{listng:numbrdcs:names} % \end{function} % -% \section{frontend}\label{part:frontend} -% -% We call frontend commands created with pkg{xparse}'s\cs{NewDocumentCommand}\cite{xparse} -% -% \subsection{\textsf{disambig}} -% -% \begin{function}{\disambignewcmd,\disambignewcmd*} -% \begin{syntax}{\cs{disambignewcmd}}\marg{token}\marg{pars}\marg{code} -% \end{syntax}Analogues of \cs{NewDocumentCommand} and \cs{RenewDocumentCommand}. See~Listing~\ref{listng:disambig:cmd} -% \end{function} -% -% \begin{function}{\disambignewenv,\disambignewenv*} -% \begin{syntax}{\cs{disambignewenv}}\marg{token}\marg{pars}\marg{code1}\marg{code2} -% \end{syntax}Analogues of \cs{NewDocumentEnvironment} and \cs{RenewDocumentEnvironment}. See~Listing~\ref{listng:disambig:env} -% \end{function} -% -% \begin{function}{\disambigset} -% \begin{syntax}{\cs{disambigset}}\marg{prefix} -% \end{syntax} -% \end{function} -% -% \begin{function}{\disambigunset} -% \begin{syntax}{\cs{disambigunset}}|{}| -% \end{syntax} -% \end{function} -% -% \subsection{\textsf{numbrdcs}}\label{usage:frontend:numbrdcs} +% \subsection{frontend} % % \begin{function}{\numbrdcsnew,\numbrdcsnew*} % \begin{syntax}\cs{numbrdcsnew}\marg{list of cs or code} @@ -324,14 +342,18 @@ and the derived files erw-l3.ins, % % \part{Listings}\label{part:listng} % -% \section{Backend} +% \floatstyle{ruled} +% \newfloat{Listing}{H}{lop} +% \NewDocumentCommand{\erwtab}{O{0.5}}{\tabto{#1\linewidth}} % -% \subsection{compose} +% \section{compose} +% +% \subsection{\textsf{backend}} % % \vspace*{\fill} % \begin{Listing} -% \ExplSyntaxOn -% \verb|\cs_set:Npn \__foo #1 {f(#1)}|\erwtab\cs_set:Npn \__foo #1 {f(#1)} +% \verb|\ExplSyntaxOn|\ExplSyntaxOn +% \\\verb|\cs_set:Npn \__foo #1 {f(#1)}|\erwtab\cs_set:Npn \__foo #1 {f(#1)} % \\\verb|\cs_set:Npn \__bar #1 {g[#1]}|\erwtab\cs_set:Npn \__bar #1 {g[#1]} % \\\verb|\cs_set:Npn \__baz #1 {h\{#1\}}|\erwtab\cs_set:Npn \__baz #1 {h\{#1\}} % \\\verb|\tl_set:Nn \l_tmpa_tl{X}|\erwtab\tl_set:Nn \l_tmpa_tl{X} @@ -343,14 +365,14 @@ and the derived files erw-l3.ins, % \\\verb|\erw_compose:nn{| % \\\verb| {\__baz}{\__bar}{\__foo}}| % \\\verb| {X}|\erwtab\erw_compose:nn{{\__baz}{\__bar}{\__foo}}{X} -% \ExplSyntaxOff +% \\\verb|\ExplSyntaxOff|\ExplSyntaxOff % \caption{ }\label{listng:compose} % \end{Listing} % % \vspace*{\fill} % \begin{Listing} -% \ExplSyntaxOn -% \verb|\cs_set:Npn \__foo #1 {f(#1)}|\cs_set:Npn \__foo #1 {f(#1)} +% \verb|\ExplSyntaxOn|\ExplSyntaxOn +% \\\verb|\cs_set:Npn \__foo #1 {f(#1)}|\cs_set:Npn \__foo #1 {f(#1)} % \\\verb|\cs_set:Npn \__bar #1 {g[#1]}|\cs_set:Npn \__bar #1 {g[#1]} % \\\verb|\cs_set:Npn \__baz #1 {h\{#1\}}|\cs_set:Npn \__baz #1 {h\{#1\}} % \\\verb|\tl_set:Nn \l_tmpa_tl{X}|\tl_set:Nn \l_tmpa_tl{X} @@ -361,14 +383,14 @@ and the derived files erw-l3.ins, % \\\verb|\erw_compose_c:nn{| % \\\verb| {__baz}{__bar}{__foo}}| % \\\verb| {X}|\erwtab\erw_compose_c:nn{{__baz}{__bar}{__foo}}{X} -% \ExplSyntaxOff +% \\\verb|\ExplSyntaxOff|\ExplSyntaxOff % \caption{ }\label{listng:compose:c} % \end{Listing} % % \vspace*{\fill} % \begin{Listing} -% \ExplSyntaxOn -% \verb|\cs_set:Npn \__foo #1 {f(#1)}|\cs_set:Npn \__foo #1 {f(#1)} +% \verb|\ExplSyntaxOn|\ExplSyntaxOn +% \\\verb|\cs_set:Npn \__foo #1 {f(#1)}|\cs_set:Npn \__foo #1 {f(#1)} % \\\verb|\cs_set:Npn \__bar #1 {g[#1]}|\cs_set:Npn \__bar #1 {g[#1]} % \\\verb|\cs_set:Npn \__baz #1 {h\{#1\}}|\cs_set:Npn \__baz #1 {h\{#1\}} % \\\verb|\seq_new:N\l_tmp_seq|\erwtab\seq_new:N \l_tmp_seq @@ -380,14 +402,14 @@ and the derived files erw-l3.ins, % \\\verb|\seq_item:Nn\l_tmp_seq{2}|\erwtab \seq_item:Nn \l_tmp_seq{2} % \\\verb|\seq_item:Nn\l_tmp_seq{3}|\erwtab \seq_item:Nn \l_tmp_seq{3} % \\\verb|\seq_item:Nn\l_tmp_seq{4}|\erwtab \seq_item:Nn \l_tmp_seq{4} -% \ExplSyntaxOff +% \\\verb|\ExplSyntaxOff|\ExplSyntaxOff % \caption{}\label{listng:compose:seq} % \end{Listing} % % \vspace*{\fill} % \begin{Listing} -% \ExplSyntaxOn -% \verb|\cs_set:Npn \__foo #1 {f(#1)}|\cs_set:Npn \__foo #1 {f(#1)} +% \verb|\ExplSyntaxOn|\ExplSyntaxOn +% \\\verb|\cs_set:Npn \__foo #1 {f(#1)}|\cs_set:Npn \__foo #1 {f(#1)} % \\\verb|\cs_set:Npn \__bar #1 {g[#1]}|\cs_set:Npn \__bar #1 {g[#1]} % \\\verb|\cs_set:Npn \__baz #1 {h\{#1\}}|\cs_set:Npn \__baz #1 {h\{#1\}} % \\\verb|\seq_new:N\l_tmp_seq| @@ -399,38 +421,40 @@ and the derived files erw-l3.ins, % \\\verb|\seq_item:Nn\l_tmp_seq{2}|\erwtab \seq_item:Nn \l_tmp_seq{2} % \\\verb|\seq_item:Nn\l_tmp_seq{3}|\erwtab \seq_item:Nn \l_tmp_seq{3} % \\\verb|\seq_item:Nn\l_tmp_seq{4}|\erwtab \seq_item:Nn \l_tmp_seq{4} -% \ExplSyntaxOff +% \\\verb|\ExplSyntaxOff|\ExplSyntaxOff % \caption{}\label{listng:compose:seq:c} % \end{Listing} % % \vspace*{\fill} % \begin{Listing} -% \ExplSyntaxOn -% \verb|\cs_set:Npn \__foo #1 {f(#1)}|\cs_set:Npn \__foo #1 {f(#1)} +% \verb|\ExplSyntaxOn|\ExplSyntaxOn +% \\\verb|\cs_set:Npn \__foo #1 {f(#1)}|\cs_set:Npn \__foo #1 {f(#1)} % \\\verb|\cs_set:Npn \__bar #1 {g[#1]}|\cs_set:Npn \__bar #1 {g[#1]} % \\\verb|\cs_set:Npn \__baz #1 {h\{#1\}}|\cs_set:Npn \__baz #1 {h\{#1\}} % \\\verb|\erw_compose_vers:nn{| % \\\verb| {\__baz}{g[#1]}{\__foo}}| % \\\verb| {X}|\erwtab\erw_compose_vers:nn{{\__baz}{g[#1]}{\__foo}}{X} -% \ExplSyntaxOff +% \\\verb|\ExplSyntaxOff|\ExplSyntaxOff % \caption{}\label{listng:compose:vers} % \end{Listing} % -% \subsection{csutil} +% \section{csutil} +% +% \subsection{\textsf{backend}} % % \vspace*{\fill} % \begin{Listing} % \verb|\ExplSyntaxOn| \ExplSyntaxOn -% \verb|\cs_set:Npn \__foo #1 {f(#1)}|\erwtab\cs_set:Npn \__foo #1 {f(#1)} +% \\\verb|\cs_set:Npn \__foo #1 {f(#1)}|\erwtab\cs_set:Npn \__foo #1 {f(#1)} % \\\verb|\erw_apply:Nn\__foo{X}|\erwtab\erw_apply:Nn\__foo{X} % \\\verb|\ExplSyntaxOff|\ExplSyntaxOff % \caption{ }\label{listng:apply} % \end{Listing} -% +% % \vspace*{\fill} % \begin{Listing} % \verb|\ExplSyntaxOn| \ExplSyntaxOn -% \verb|\cs_set:Npn \__foo #1 {f(#1)}|\cs_set:Npn \__foo #1 {f(#1)} +% \\\verb|\cs_set:Npn \__foo #1 {f(#1)}|\cs_set:Npn \__foo #1 {f(#1)} % \\\verb|\tl_set:Nn \l_tmpa_tl{X}|\erwtab\tl_set:Nn \l_tmpa_tl{X} % \\\verb|\erw_fold_set_par:n{Nf}|\erw_fold_set_par:n{Nf} % \\\verb|\erw_fold_apply_par:n{Nf}|\erw_fold_apply_par:n{Nf} @@ -446,20 +470,38 @@ and the derived files erw-l3.ins, % \vspace*{\fill} % \begin{Listing} % \verb|\ExplSyntaxOn| \ExplSyntaxOn -% \verb|\erw_last_item:n{{a}{b}{c}}|\erwtab \erw_last_item:n {{a}{b}{c}} -% \\\verb|\\\erw_items_to:nn{1}{{a}{b}{c}{d}}|\erwtab \erw_items_to:nn{1}{{a}{b}{c}{d}} -% \\\verb|\\\erw_items_to:nn{2}{{a}{b}{c}{d}}|\erwtab \erw_items_to:nn{2}{{a}{b}{c}{d}} -% \\\verb|\\\erw_items_to:nn{3}{{a}{b}{c}{d}}|\erwtab \erw_items_to:nn{3}{{a}{b}{c}{d}} -% \\\verb|\\\erw_items_to:nn{4}{{a}{b}{c}{d}}|\erwtab \erw_items_to:nn{4}{{a}{b}{c}{d}} -% \\\verb|\ExplSyntaxOff| \ExplSyntaxOff -% \caption{ }\label{listng:items} +% \\\verb|\erw_is_matrix:nTF| +% \\\verb|{| +% \\\verb| { {a}{b}{c} }| +% \\\verb| { {k}{l}{m} }| +% \\\verb| { {x}{y}{z} }| +% \\\verb|}{T}{F}|\erwtab\erw_is_matrix:nTF +% { +% { {a}{b}{c} } +% { {k}{l}{m} } +% { {x}{y}{z} } +% }{T}{F} +% \\\verb|\erw_is_matrix:nTF| +% \\\verb|{| +% \\\verb| { {a}{c} }| +% \\\verb| { {k} }| +% \\\verb| { {x}{y}{z} }| +% \\\verb|}{T}{F}|\erwtab +% \erw_is_matrix:nTF +% { +% { {a}{c} } +% { {k} } +% { {x}{y}{z} } +% }{T}{F} +% \\\verb|\ExplSyntaxOff|\ExplSyntaxOff +% \caption{ }\label{listng:ismatrix} % \end{Listing} % % \vspace*{\fill} % \begin{Listing} % \verb|\ExplSyntaxOn| \ExplSyntaxOn -% \\\verb|\erw_repeat:nn{| -% \\\verb| {3}{abracad}}abra| \erwtab \erw_repeat:nn{3}{abracad}abra +% \\\verb|\erw_repeat:nn| +% \\\verb| {3}{abracad}abra| \erwtab \erw_repeat:nn{3}{abracad}abra % \\\verb|\ExplSyntaxOff|\ExplSyntaxOff % \caption{ }\label{listng:repeat} % \end{Listing} @@ -467,18 +509,32 @@ and the derived files erw-l3.ins, % \vspace*{\fill} % \begin{Listing} % \verb|\ExplSyntaxOn| \ExplSyntaxOn -% \\\verb|\erw_split:nn{| -% \\\verb| {{a}{b}{c}}{==}}| \erwtab \erw_split:nn{{a}{b}{c}}{==} +% \\\verb|\erw_split:nn| +% \\\verb| {{a}{b}{c}}{==}| \erwtab \erw_split:nn{{a}{b}{c}}{==} % \\\verb|\ExplSyntaxOff|\ExplSyntaxOff % \caption{ }\label{listng:split} % \end{Listing} % -% \subsection{\textsf{map}} +% \section{\textsf{int}} +% +% \subsection{\textsf{backend}} +% +% \begin{Listing} +% \verb|\ExplSyntaxOn|\ExplSyntaxOn +% \\\verb|\erw_int_range:nn{2}{5}|\erwtab\erw_int_range:nn{2}{5} +% \\\verb|\erw_int_range:n{5}|\erwtab\erw_int_range:n{5} +% \\\verb|\ExplSyntaxOff|\ExplSyntaxOff +% \caption{ }\label{listng:int:range} +% \end{Listing} +% +% \section{\textsf{map}} +% +% \subsection{\textsf{backend}} % % \vspace*{\fill} % \begin{Listing} % \verb|\ExplSyntaxOn| \ExplSyntaxOn -%\verb|\cs_set:Npn \__foo #1 {(#1)}|\cs_set:Npn \__foo #1 {(#1)} +% \\\verb|\cs_set:Npn \__foo #1 {(#1)}|\cs_set:Npn \__foo #1 {(#1)} % \\\verb|\erw_map:Nn \__foo{{a}{b}{c}}|\erwtab\erw_map:Nn \__foo{{a}{b}{c}} % \\\verb|\ExplSyntaxOff|\ExplSyntaxOff % \caption{ }\label{listng:map} @@ -487,7 +543,7 @@ and the derived files erw-l3.ins, % \vspace*{\fill} % \begin{Listing} % \verb|\ExplSyntaxOn| \ExplSyntaxOn -% \verb|\cs_set:Npn \__foo #1 {(#1)}|\cs_set:Npn \__foo #1 {(#1)} +% \\\verb|\cs_set:Npn \__foo #1 {(#1)}|\cs_set:Npn \__foo #1 {(#1)} % \\\verb|\erw_map_inline:nn{| % \\\verb| (#1)}{{a}{b}{c}}| \erwtab\erw_map_inline:nn{(#1)}{{a}{b}{c}} % \\\verb|\ExplSyntaxOff|\ExplSyntaxOff @@ -496,8 +552,8 @@ and the derived files erw-l3.ins, % % \vspace*{\fill} % \begin{Listing} -% \ExplSyntaxOn -% \verb|\cs_set:Npn \__foo:n #1 {(#1)}|\cs_set:Npn \__foo:n #1 {(#1)} +% \verb|\ExplSyntaxOn|\ExplSyntaxOn +% \\\verb|\cs_set:Npn \__foo:n #1 {(#1)}|\cs_set:Npn \__foo:n #1 {(#1)} % \\\verb|\erw_map_thread:Nn \__foo:n| % \\\verb|{| % \\\verb| {{a}{b}{c}{d}{e}{f}}| @@ -546,11 +602,60 @@ and the derived files erw-l3.ins, % {{k}{l}{m}{n}{o}{p}} % {{K}{L}{M}{N}{O}{P}} % } +% \\\verb|\ExplSyntaxOff|\ExplSyntaxOff % \caption{ }\label{listng:thread} -% \ExplSyntaxOff % \end{Listing} % -% \subsection{\textsf{numbrdcs}} +% \begin{Listing} +% \verb|\ExplSyntaxOn|\ExplSyntaxOn +% \\\verb|\cs_set_protected:Npn \__foo:nn #1 #2| +% \\\verb| {(#1+#2)}| \cs_set_protected:Npn \__foo:nn #1 #2 {(#1+#2)} +% \\\verb|\erw_map_thread:Nn| +% \\\verb| \__foo:nn | +% \\\verb| { | +% \\\verb| {{1}{2}{3}} | +% \\\verb| {{a}{b}{c}}| +% \\\verb| }|\erwtab\erw_map_thread:Nn +% \__foo:nn +% { +% {{1}{2}{3}} +% {{a}{b}{c}} +% } +% \\\verb|\exp_last_unbraced:Nx| +% \\\verb|\erw_map_thread:Nn| +% \\\verb|{| +% \\\verb| \__foo:nn | +% \\\verb| { | +% \\\verb| {\erw_int_range:n{3}} | +% \\\verb| {{a}{b}{c}}| +% \\\verb| }| +% \\\verb|}| \erwtab +% \exp_last_unbraced:Nx +% \erw_map_thread:Nn +% { +% \__foo:nn +% { +% {\erw_int_range:n{3}} +% {{a}{b}{c}} +% } +% }\erwtab[0.7]{\color{red} (does~not~thread!)} +% \\\verb|\exp_last_unbraced:Nx| +% \\\verb|\erw_map_thread:Nn| +% \\\verb|{| +% \\\verb| \__foo:nn | +% \\\verb| { | +% \\\verb| {\int_step_inline:nn{3}{#1}} | +% \\\verb| {{a}{b}{c}}| +% \\\verb| }| +% \\\verb|}| +% \erwtab[0.2]{\color{red} \verb|Illegal parameter number in definition of \l__exp_internal_tl!|} +% \\\verb|\ExplSyntaxOff|\ExplSyntaxOff +% \caption{Debugging~for~\cs{erw_map_indexed}}\label{listng:mapindexed} +% \end{Listing} +% +% \section{\textsf{numbrdcs}} +% +% \subsection{\textsf{backend}} % % \vspace*{\fill} % \begin{Listing} @@ -562,8 +667,8 @@ and the derived files erw-l3.ins, % \\\verb|\exp_last_unbraced:Nx| % \\\verb| \erw_compose_c:nn| % \\\verb| {| -% \\\verb| {\erw_numbrd_cs_names| -% \\\verb| _braced:nnn{1}{1}{3}}| +% \\\verb| {\erw_numbrd_cs_names_braced:| +% \\\verb| nnn{1}{1}{3}}| % \\\verb| {X}| % \\\verb| }| % \\\verb|\ExplSyntaxOff|\erwtab @@ -576,61 +681,7 @@ and the derived files erw-l3.ins, % \caption{ }\label{listng:numbrdcs:names} % \end{Listing} % -% \section{Frontend} -% -% ^^A\vspace*{\fill} -% ^^A\begin{Listing} -% ^^A\verb|\NewDocumentCommand{\thefoo}{m}{f(#1)}| -% ^^A\\\verb|\NewDocumentCommand{\thebar}{m}{g[#1]}| -% ^^A\\\verb|\NewDocumentCommand{\thebaz}{m}{h\{#1\}}| -% ^^A\caption{Initialization}\label{listng:init:front} -% ^^A\end{Listing} -% -% \subsection{disambig} -% -% \begin{Listing} -% \textbf{Input} -% \begin{verbatim} -% \disambigset{my} -% \disambignewcmd{\foo}{m}{#1~world!} -% \noindent\myfoo{Hello} -% \disambignewcmd*{\foo}{m}{#1~universe!} -% \\\myfoo{Hello} -% \disambigunset -% \disambignewcmd{\foo}{m}{#1~world!} -% \\\foo{Hello} -% \end{verbatim} -% \textbf{Output} -% \\\disambigset{my} -% \disambignewcmd{\foo}{m}{#1~world!} -% \noindent\myfoo{Hello} -% \disambignewcmd*{\foo}{m}{#1~universe!} -% \\\myfoo{Hello} -% \disambigunset -% \disambignewcmd{\foo}{m}{#1~world!} -% \\\foo{Hello} -% \caption{}\label{listng:disambig:cmd} -% \end{Listing} -% -% \begin{Listing} -% \textbf{Input} -% \begin{verbatim} -% \disambigset{my} -% \disambignewenv{bar}{}{H}{!} -% \\\begin{mybar}ello~world\end{mybar} -% \disambignewenv*{bar}{}{J}{!} -% \\\begin{mybar}ello~world\end{mybar} -% \end{verbatim} -% \textbf{Output} -% \disambigset{my} -% \disambignewenv{bar}{}{H}{!} -% \\\begin{mybar}ello~world\end{mybar} -% \disambignewenv*{bar}{}{J}{!} -% \\\begin{mybar}ello~world\end{mybar} -% \caption{}\label{listng:disambig:env} -% \end{Listing} -% -% \subsection{\textsf{numbrdcs}} +% \subsection{frontend} % % \vspace*{\fill} % \begin{Listing} @@ -654,59 +705,6 @@ and the derived files erw-l3.ins, % \caption{ }\label{listng:numbrdcs} % \end{Listing} % -% \part{Other}\label{part:other} -% -% \section{Support}\label{support} -% -% This package is available from \url{https://www.ctan.org/pkg/erw-l3} (release) or \url{https://github.com/er-cpp/erw-l3} (development) where you can report issues. -% -% \section{Acknowledgment} -% I thank those that have answered my questions on forums pertaining to \LaTeX3. See here: \url{https://tex.stackexchange.com/users/112708/erwann?tab=questions} -% and here: \url{https://latex.org/forum/memberlist.php?mode=viewprofile&u=61329} -% -% ^^A \section{Change history} -% ^^A TODO Bring the change history under this section -% ^^A The versions showns are of those of the development stage, some may have been skipped in the release. -% ^^A \iffalse -% ^^A : changes -% ^^A \fi -% -% \changes{0.1}{2018/05/20}{Initial version} -% \changes{0.1.1}{2018/05/23}{} -% \changes{0.1.1}{2018/05/23}{Brought all the modules under one file; renamed \pkg{l3erw} to \pkg{erw-l3};} -% \changes{0.1.1}{2018/05/23}{\pkg{disambig}/backend: changes to the key, added \cs{ProcessPackageKeysOption};} -% \changes{0.1.1}{2018/05/23}{\cs{numbrdcsnew} changed to \cs{newnumbrdcs} and made 'disambiguable'} -% \changes{0.1.2}{2018/06/21}{} -% \changes{0.1.2}{2018/06/21}{\cs{erw_compose} reversed order in which the functions are composed, such that it now conforms to -% the mathematical convention ($g\circ f$ means $f$ comes before $g$)} -%\changes{0.1.2}{2018/06/21}{Front end cmds no longer generated with module \pkg{disambig}; Option of the same name deleted;} -%\changes{0.1.2}{2018/06/21}{\pkg{disambig}: pushed the code inside \cs{keys_define};\cs{disambignewcmd} no longer takes a token name as arg, rather a token.} -%\changes{0.1.2}{2018/06/21}{Added \cs{erw_repeat}} -%\changes{0.1.2}{2018/06/21}{Added \cs{erw_split}} -%\changes{0.1.2}{2018/06/21}{Added \cs{erw_last_item}} -%\changes{0.1.2}{2018/06/21}{Added \cs{erw_items_to}} -%\changes{0.1.2}{2018/06/21}{Added \cs{map_thread}} -%\changes{0.1.2}{2018/06/21}{Re-arranged the doc to clearly separate frontend from backend} -% -% % \begin{thebibliography}{1} -% -% ^^A\bibitem{expl3} The \LaTeX3 Project Team {\em The \pkg{expl3} package and \LaTeX3 programming} -% ^^A\url{http://ftp.math.purdue.edu/mirrors/ctan.org/macros/latex/contrib/l3kernel/expl3.pdf} -% -% \bibitem{interface3} The \LaTeX3 Project Team {\em The \LaTeX3 interfaces} -% \url{http://ftp.math.purdue.edu/mirrors/ctan.org/macros/latex/contrib/l3kernel/interface3.pdf} -% -% \bibitem{xparse} The \LaTeX3 Project Team {\em The \pkg{xparse} package} -% \url{http://ftp.math.purdue.edu/mirrors/ctan.org/macros/latex/contrib/l3packages/xparse.pdf} -% -% ^^A \bibitem{l3pckg} The \LaTeX3 Project Team {\em l3packages} \url{http://mirror.ctan.org/macros/latex/contrib/l3packages/} -% -% ^^A \bibitem{tex.stack:431046} \url{https://tex.stackexchange.com/questions/431046/calling-expl3s-usec-on-an-expression-expanding-to-a-cs-name-causes-error} -% -% ^^A \bibitem{tex.stack:432171} \url{https://tex.stackexchange.com/questions/432171/expl3-making-arguments-from-a-loop} -% -% \end{thebibliography} -% % %\StopEventually{^^A % \PrintChanges @@ -726,8 +724,8 @@ and the derived files erw-l3.ins, \ExplSyntaxOn \msg_new:nnn{erw}{generic}{#1} % \end{macrocode} -% \section{Back end} -% \subsection{\textsf{compose}} +% \section{\textsf{compose}} +% \subsection{backend} % \begin{macrocode} \cs_set:Npn \erw_compose:NnV #1 % method @@ -794,8 +792,13 @@ and the derived files erw-l3.ins, {#2} } % \end{macrocode} -% \subsection{\textsf{csutil}} +% \section{\textsf{csutil}} +% \subsection{\textsf{backend}} % \begin{macrocode} +\cs_set:Npn \erw_accum:nn #1 #2 +{ + {#1{#2}} +} \cs_set:Npn \__erw_cs_name:N #1 { \exp_last_unbraced:Nf \use_i:nnn {\cs_split_function:N #1} @@ -812,11 +815,21 @@ and the derived files erw-l3.ins, \cs_set:Npn #1 ##1{#2{##1}} } \cs_generate_variant:Nn \erw_cs_set_eq:NN {cN} +\cs_set:Npn \erw_cs_gset_eq:NN #1 #2 +{ + \cs_gset:Npn #1 ##1{#2{##1}} +} +\cs_generate_variant:Nn \erw_cs_gset_eq:NN {cN} \cs_set:Npn \erw_cs_set_inline:Nn #1 #2 { \cs_set:Npn #1 ##1{#2} } \cs_generate_variant:Nn \erw_cs_set_inline:Nn {cn} +\cs_set:Npn \erw_cs_gset_inline:Nn #1 #2 +{ + \cs_gset:Npn #1 ##1{#2} +} +\cs_generate_variant:Nn \erw_cs_gset_inline:Nn {cn} \tl_set:Nn \__erw_fold_set_par_tl{\c_novalue_tl} \tl_set:Nn \__erw_fold_apply_par_tl{\c_novalue_tl} \cs_set:Npn \erw_fold_set_par:n #1 @@ -847,28 +860,43 @@ and the derived files erw-l3.ins, } \cs_generate_variant:Nn \erw_fold_seq:NV {cV} \cs_set:Npn \erw_identity:n #1{#1} -\cs_set:Npn\__erw_items_to:nnn #1 #2 #3 +\prg_set_conditional:Npnn \erw_is_matrix:n #1 { p, TF } { - \int_compare:nNnTF - {#1}>{#2} - { - \exp_args:Nf \tl_head:n{#3} - \__erw_items_to:nnn - {#1} - {\int_eval:n{#2+1}} - {\exp_args:Nf \tl_tail:n{#3}} - } + \erw_gset_map_inline:n{==\tl_count:n{##1}} + \int_compare:nTF { - \exp_args:Nf \tl_head:n{#3} + \exp_args:Nf\tl_count:n{\tl_head:n{#1}} + \exp_args:Nf \erw_map:n + { + \tl_tail:n{#1} + } } + {\prg_return_true:} + {\prg_return_false:} } -\cs_set:Npn \erw_items_to:nn #1 #2 -{ - \__erw_items_to:nnn - {#1} - {1} - {#2} -} +% Deprecated in v0.1.4 after realizing \cs{tl_range:n} does the job +%\cs_set:Npn\__erw_items_to:nnn #1 #2 #3 +%{ +% \int_compare:nNnTF +% {#1}>{#2} +% { +% \exp_args:Nf \tl_head:n{#3} +% \__erw_items_to:nnn +% {#1} +% {\int_eval:n{#2+1}} +% {\exp_args:Nf \tl_tail:n{#3}} +% } +% { +% \exp_args:Nf \tl_head:n{#3} +% } +%} +%\cs_set:Npn \erw_items_to:nn #1 #2 +%{ +% \__erw_items_to:nnn +% {#1} +% {1} +% {#2} +%} \cs_set:Npn \erw_last_item:n #1 { \exp_args:Nof \tl_item:nn @@ -877,6 +905,10 @@ and the derived files erw-l3.ins, \tl_count:n{#1} } } +\cs_set:Npn \erw_merge:nn #1 #2 +{ + {#1#2} +} \cs_set:Npn \erw_repeat:nn #1 #2 { \int_step_inline:nnnn{1}{1}{#1}{#2} @@ -897,8 +929,52 @@ and the derived files erw-l3.ins, \erw_split:nnn{#1}{#2}{Nf} } % \end{macrocode} -% \subsection{\textsf{map}} +% \section{\textsf{map}} +% \subsection{\textsf{backend}} % \begin{macrocode} +\cs_set:Npn \__erw_int_range:nnn #1 #2 #3 +{ + \int_compare:nNnTF + { + \int_eval:n{#2+1} + }>{#3} + { + {#1} + } + { + \__erw_int_range:nnn + { + \exp_args:Nx\erw_accum:nn{#1} + { + \int_eval:n{#2+1} + } + } + {\int_eval:n{#2+1}} + {#3} + } +} +\cs_set:Npn \erw_int_range:nn #1 #2 +{ + \__erw_int_range:nnn {{#1}}{#1}{#2} +} +\cs_set:Npn \erw_int_range:n #1 +{ + \__erw_int_range:nnn {}{0}{#1} +% Alt to: +% \int_step_inline:nn {#1}{##1} +} +% \end{macrocode} +% \section{\textsf{map}} +% \subsection{\textsf{backend}} +% \begin{macrocode} +\cs_set:Npn \erw_gset_map:N #1 +{ + \erw_cs_gset_eq:NN \__erw_map:n #1 +} +\cs_set:Npn \erw_gset_map_inline:n #1 +{ + \erw_cs_gset_inline:Nn \__erw_map:n {#1} +} \cs_set:Npn \erw_map:n #1 { \__erw_map:nn#1\q_recursion_tail\q_recursion_stop\q_recursion_tail\q_recursion_stop @@ -941,7 +1017,6 @@ and the derived files erw-l3.ins, { #1{#2}{#3}{#4}{#5} } - \cs_set:Npn \__erw_map_thread_at:Nnn #1 #2 #3 { \erw_apply:Nn #1 @@ -989,7 +1064,6 @@ and the derived files erw-l3.ins, {erw_map_thread_at:~count~of~#3~not~withing~1~to~4} } } - \cs_set:Npn \erw_map_thread:Nn #1 #2 { % TODO check that #2 is a matrix @@ -1002,7 +1076,8 @@ and the derived files erw-l3.ins, } } % \end{macrocode} -% \subsection{\textsf{numbrdcs}} +% \section{\textsf{numbrdcs}} +% \subsection{\textsf{backend}} % \begin{macrocode} \int_new:N \__erw_numbrd_cs_int \cs_set:Npn \erw_numbrd_cs_name:n #1{__erw_numbrd_cs_\int_to_alph:n{#1}:n} @@ -1042,58 +1117,7 @@ and the derived files erw-l3.ins, \erw_numbrd_cs_names_braced:nnn{1}{1}{\__erw_numbrd_cs_int} } % \end{macrocode} -% \section{frontend} -% \subsection{\textsf{disambig}} -% \begin{macrocode} -\cs_set:Npn \__erw_disambig:NN #1 #2 {#1{#2}} -\cs_generate_variant:Nn \__erw_disambig:NN { Nc } -\NewDocumentCommand{\disambignewcmd}{ s m m m } -{ - \msg_error:nnn{erw}{generic}{disambignewcmd~undefined} -} -\NewDocumentCommand{\disambignewenv}{ s m m m m } -{ - \msg_error:nnn{erw}{generic}{disambignewenv~undefined} -} -\keys_define:nn { erw } -{ - disambig .code:n = - { - \RenewDocumentCommand{\disambignewcmd}{ s m m m } - { - \IfBooleanTF{##1} - {\__erw_disambig:Nc{\RenewDocumentCommand}} - {\__erw_disambig:Nc{\NewDocumentCommand}} - {#1 \__erw_cs_name:N ##2} - {##3} - {##4} - } - \RenewDocumentCommand{\disambignewenv}{ s m m m m } - { - \IfBooleanTF{##1} - {\RenewDocumentEnvironment} - {\NewDocumentEnvironment} - {#1##2} - {##3} - {##4} - {##5} - } - }, - disambig .initial:n = \c_empty_tl -} -\NewDocumentCommand{\disambigset}{ m } -{ - \keys_set:nn { erw } - { - disambig={#1} - } -} -\NewDocumentCommand{\disambigunset}{} -{ - \disambigset{\c_empty_tl} -} -% \end{macrocode} -% \subsection{\textsf{numbrdcs}} +% \subsection{\textsf{frontend}} % \begin{macrocode} \NewDocumentCommand{\numbrdcsnew}{ s m } { @@ -1106,11 +1130,82 @@ and the derived files erw-l3.ins, { \erw_numbrd_cs:nn{#1}{#2} } -% \end{macrocode} -% \begin{macrocode} % \ProcessKeysPackageOptions{ erw } \ExplSyntaxOff % \end{macrocode} +% \part{Other}\label{part:other} +% +% \section{Support}\label{support} +% +% This package is available from \url{https://www.ctan.org/pkg/erw-l3} (release) or \url{https://github.com/rogard/erw-l3} (development) where you can report issues. +% +% \section{To do}\label{todo} +% +% \begin{itemize} +% \item Missing variants of \cs{erw_compose} +% \item \cs{erw_map_indexed}. See Listing~\autoref{listng:mapindexed} +% \item Need to give some thought to `protected' +% \end{itemize} +% +% \section{Acknowledgment} +% I thank those that have answered my questions on forums pertaining to \LaTeX3. See here: \url{https://tex.stackexchange.com/users/112708/erwann?tab=questions} +% and here: \url{https://latex.org/forum/memberlist.php?mode=viewprofile&u=61329} +% +% ^^A \section{Change history} +% ^^A TODO Bring the change history under this section +% ^^A The versions showns are of those of the development stage, some may have been skipped in the release. +% ^^A \iffalse +% ^^A : changes +% ^^A \fi +% +% \changes{0.1}{2018/05/20}{Initial version} +% \changes{0.1.1}{2018/05/23}{} +% \changes{0.1.1}{2018/05/23}{Brought all the modules under one file; renamed \pkg{l3erw} to \pkg{erw-l3};} +% \changes{0.1.1}{2018/05/23}{\pkg{disambig}/backend: changes to the key, added \cs{ProcessPackageKeysOption};} +% \changes{0.1.1}{2018/05/23}{\cs{numbrdcsnew} changed to \cs{newnumbrdcs} and made 'disambiguable'} +% \changes{0.1.2}{2018/06/21}{} +% \changes{0.1.2}{2018/06/21}{\cs{erw_compose} reversed order in which the functions are composed, such that it now conforms to +% the mathematical convention ($g\circ f$ means $f$ comes before $g$)} +%\changes{0.1.2}{2018/06/21}{Front end cmds no longer generated with module \pkg{disambig}; Option of the same name deleted;} +%\changes{0.1.2}{2018/06/21}{\pkg{disambig}: pushed the code inside \cs{keys_define};\cs{disambignewcmd} no longer takes a token name as arg, rather a token.} +%\changes{0.1.2}{2018/06/21}{Added \cs{erw_repeat}} +%\changes{0.1.2}{2018/06/21}{Added \cs{erw_split}} +%\changes{0.1.2}{2018/06/21}{Added \cs{erw_last_item}} +%\changes{0.1.2}{2018/06/21}{Added \cs{erw_items_to}} +%\changes{0.1.2}{2018/06/21}{Added \cs{map_thread}} +%\changes{0.1.2}{2018/06/21}{Re-arranged the doc to clearly separate frontend from backend} +%\changes{0.1.3}{2018/06/22}{Wrong versioning, should have been 0.1.2} +%\changes{0.1.4}{2018/06/22}{} +%\changes{0.1.4}{2018/06/22}{Removed \cs{erw_items_to} (redundant with \cs{tl_range:nnn})} +%\changes{0.1.4}{2018/06/22}{Added \cs{erw_accum}} +%\changes{0.1.4}{2018/06/22}{Added \cs{erw_merge}} +%\changes{0.1.4}{2018/06/22}{Added \cs{erw_int_range}} +%\changes{0.1.4}{2018/06/22}{Added \cs{erw_set_map}} +%\changes{0.1.4}{2018/06/22}{Added \cs{erw_set_map_inline}} +%\changes{0.1.4}{2018/06/22}{Added \cs{erw_is_matrix}} +%\changes{0.1.5}{2019/12/12}{Modified source repository} +%\changes{0.1.5}{2019/12/12}{Rearranged frontend/backend sections} +%\changes{0.1.5}{2019/12/12}{Split Section Preliminaries into Conventions and Requirement.} +%\changes{0.1.5}{2019/12/12}{Removed \pkg{disambig}} +% +% % \begin{thebibliography}{1} +% +% ^^A\bibitem{expl3} The \LaTeX3 Project Team {\em The \pkg{expl3} package and \LaTeX3 programming} +% ^^A\url{http://ftp.math.purdue.edu/mirrors/ctan.org/macros/latex/contrib/l3kernel/expl3.pdf} +% +% \bibitem{interface3} The \LaTeX3 Project Team {\em The \LaTeX3 interfaces} +% \url{http://ftp.math.purdue.edu/mirrors/ctan.org/macros/latex/contrib/l3kernel/interface3.pdf} +% +% \bibitem{xparse} The \LaTeX3 Project Team {\em The \pkg{xparse} package} +% \url{http://ftp.math.purdue.edu/mirrors/ctan.org/macros/latex/contrib/l3packages/xparse.pdf} +% +% ^^A \bibitem{l3pckg} The \LaTeX3 Project Team {\em l3packages} \url{http://mirror.ctan.org/macros/latex/contrib/l3packages/} +% +% ^^A \bibitem{tex.stack:431046} \url{https://tex.stackexchange.com/questions/431046/calling-expl3s-usec-on-an-expression-expanding-to-a-cs-name-causes-error} +% +% ^^A \bibitem{tex.stack:432171} \url{https://tex.stackexchange.com/questions/432171/expl3-making-arguments-from-a-loop} +% +% \end{thebibliography} % % % \iffalse |