From d005bb4b33170da981bd0605bdb14c6e18911707 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Ke=C3=9Fler?= Date: Fri, 21 Jan 2022 13:27:48 +0100 Subject: [PATCH] generate document commands with helper function --- doc/environments/groupthm/groupthm.dtx | 108 ++++++++++++++----------- doc/environments/groupthm/groupthm.sty | 48 ++++++----- 2 files changed, 88 insertions(+), 68 deletions(-) diff --git a/doc/environments/groupthm/groupthm.dtx b/doc/environments/groupthm/groupthm.dtx index 52ebcac..9476826 100644 --- a/doc/environments/groupthm/groupthm.dtx +++ b/doc/environments/groupthm/groupthm.dtx @@ -1682,16 +1682,22 @@ % With the \cs{@@_set_normalized_keys:nnn} macro at hand, % it is also easy to provide key-value interfaces for these commands: % -% \begin{macro}{\groupthm_new_group:nn} + + +% \begin{macro}{\@@_wrap_multiple:nnn} % \begin{syntax} -% \cs{groupthm_new_group:nn}\marg{keys}\marg{theorem group} +% \cs{@@_wrap_multiple:nnn}\marg{declarator list}\marg{function name}\marg{code} % \end{syntax} % +% Defines \meta{function name}, which is assumed to contain \cs{declarator} +% by \meta{code} for each declarator in \meta{declarator list}. +% % \begin{macrocode} \cs_new:Npn \@@_wrap_multiple:nnn #1 #2 #3 { \cs_set:Npn \@@_map_aux:n ##1 { + \def \declarator { ##1 } \cs_new:cn { #2 } { #3 @@ -1699,75 +1705,83 @@ } \clist_map_function:nN { #1 } \@@_map_aux:n } - -\@@_wrap_multiple:nnn -{ new, renew, provide, declare } -{ groupthm_#1_group:nn } -{ - \@@_set_normalized_keys:nnn { ##1 } { theoremgroup } { ##2 } - \use:c { groupthm_#1_group:nVVVV } - { ##2 } - \l_@@_prefix_tl - \l_@@_suffix_tl - \l_@@_mapname_clist - \l_@@_thmtools_clist -} % \end{macrocode} % \end{macro} -% + +% \begin{macro} +% { +% \groupthm_new_group:nn, +% \groupthm_renew_group:nn, +% \groupthm_provide_group:nn, +% \groupthm_declare_group:nn +% } +% \begin{syntax} +% \cs{groupthm_new_group:nn}\marg{keys}\marg{theorem group} +% \end{syntax} +% +% \begin{macrocode} +\@@_wrap_multiple:nnn + { new, renew, provide, declare } + { groupthm_ \declarator _group:nn } + { + \@@_set_normalized_keys:nnn { ##1 } { theoremgroup } { ##2 } + \use:c { groupthm_#1_group:nVVVV } + { ##2 } + \l_@@_prefix_tl + \l_@@_suffix_tl + \l_@@_mapname_clist + \l_@@_thmtools_clist + } +% \end{macrocode} +% \end{macro} % % \end{macro} % % % Finally, we provide \LaTeX2e wrappers as document commands for these. % -% -% \begin{macro}{\NewTheoremGroup} +% \begin{macro}{\@@_wrap_multiple_document:nnnn} +% \begin{syntax} +% \cs{@@_wrap_multiple_document:nnnn}\marg{declarator list}\marg{function name}\marg{arg spec}\marg{code} +% \end{syntax} +% +% This is very similar to \cs{@@_wrap_multiple:nnn}, except that it produces document commands. +% For this reason, \cs{declarator} and \cs{Declarator} are available to refer to the lower +% and upper-case versions of the current declarator. % % \begin{macrocode} -\NewDocumentCommand{\NewTheoremGroup}{ O{} m } +\cs_new:Npn \@@_wrap_multiple_document:nnnn #1 #2 #3 #4 { - \groupthm_new_group:nn { #1 } { #2 } + \cs_set:Npn \@@_map_aux:n ##1 + { + \def \declarator { ##1 } + \def \Declarator { \text_titlecase_first:n { ##1 } } + \exp_args:Nc \NewDocumentCommand { #2 } { #3 } + { + #4 + } + } + \clist_map_function:nN { #1 } \@@_map_aux:n } % \end{macrocode} % \end{macro} % +% \begin{macro}{\NewTheoremGroup, \RenewTheoremGroup, \ProvideTheoremGroup, \DeclareTheoremGroup} % -% -% \begin{macro}{\RenewTheoremGroup} +% These just wrap the \cs{groupthm_\meta{declarator}_group:nn} macros. % % \begin{macrocode} -\NewDocumentCommand{\RenewTheoremGroup}{ O{} m } +\@@_wrap_multiple_document:nnnn + { new, renew, provide, declare } + { \Declarator TheoremGroup } + { O{} m } { - \groupthm_renew_group:nn { #1 } { #2 } + \use:c { groupthm_ \declarator _group:nn } { ##1 } { ##2 } } % \end{macrocode} % \end{macro} % % -% -% \begin{macro}{\ProvideTheoremGroup} -% -% \begin{macrocode} -\NewDocumentCommand{\ProvideTheoremGroup}{ O{} m } - { - \groupthm_provide_group:nn { #1 } { #2 } - } -% \end{macrocode} -% \end{macro} -% -% -% -% \begin{macro}{\DeclareTheoremGroup} -% -% \begin{macrocode} -\NewDocumentCommand{\DeclareTheoremGroup}{ O{} m } - { - \groupthm_declare_group:nn { #1 } { #2 } - } -% \end{macrocode} -% \end{macro} -% % We also provide the interface for declaring the precedence rules for theorem groups. % % diff --git a/doc/environments/groupthm/groupthm.sty b/doc/environments/groupthm/groupthm.sty index ed60126..a9d7c27 100644 --- a/doc/environments/groupthm/groupthm.sty +++ b/doc/environments/groupthm/groupthm.sty @@ -297,10 +297,12 @@ \cs_generate_variant:Nn \groupthm_renew_group:nnnnn { n V V V V } \cs_generate_variant:Nn \groupthm_provide_group:nnnnn { n V V V V } \cs_generate_variant:Nn \groupthm_declare_group:nnnnn { n V V V V } + \cs_new:Npn \__groupthm_wrap_multiple:nnn #1 #2 #3 { \cs_set:Npn \__groupthm_map_aux:n ##1 { + \def \declarator { ##1 } \cs_new:cn { #2 } { #3 @@ -310,32 +312,36 @@ } \__groupthm_wrap_multiple:nnn -{ new, renew, provide, declare } -{ groupthm_#1_group:nn } -{ - \__groupthm_set_normalized_keys:nnn { ##1 } { theoremgroup } { ##2 } - \use:c { groupthm_#1_group:nVVVV } - { ##2 } - \l__groupthm_prefix_tl - \l__groupthm_suffix_tl - \l__groupthm_mapname_clist - \l__groupthm_thmtools_clist -} -\NewDocumentCommand{\NewTheoremGroup}{ O{} m } + { new, renew, provide, declare } + { groupthm_ \declarator _group:nn } { - \groupthm_new_group:nn { #1 } { #2 } + \__groupthm_set_normalized_keys:nnn { ##1 } { theoremgroup } { ##2 } + \use:c { groupthm_#1_group:nVVVV } + { ##2 } + \l__groupthm_prefix_tl + \l__groupthm_suffix_tl + \l__groupthm_mapname_clist + \l__groupthm_thmtools_clist } -\NewDocumentCommand{\RenewTheoremGroup}{ O{} m } +\cs_new:Npn \__groupthm_wrap_multiple_document:nnnn #1 #2 #3 #4 { - \groupthm_renew_group:nn { #1 } { #2 } + \cs_set:Npn \__groupthm_map_aux:n ##1 + { + \def \declarator { ##1 } + \def \Declarator { \text_titlecase_first:n { ##1 } } + \exp_args:Nc \NewDocumentCommand { #2 } { #3 } + { + #4 + } + } + \clist_map_function:nN { #1 } \__groupthm_map_aux:n } -\NewDocumentCommand{\ProvideTheoremGroup}{ O{} m } +\__groupthm_wrap_multiple_document:nnnn + { new, renew, provide, declare } + { \Declarator TheoremGroup } + { O{} m } { - \groupthm_provide_group:nn { #1 } { #2 } - } -\NewDocumentCommand{\DeclareTheoremGroup}{ O{} m } - { - \groupthm_declare_group:nn { #1 } { #2 } + \use:c { groupthm_ \declarator _group:nn } { ##1 } { ##2 } } \cs_new:Npn \groupthm_declare_theorem_group_rule:nnnn #1 #2 #3 #4 {