add providing macro variants
This commit is contained in:
parent
e5b3a7f432
commit
5d103708c2
1 changed files with 131 additions and 18 deletions
|
@ -469,9 +469,31 @@
|
||||||
% \end{macro}
|
% \end{macro}
|
||||||
%
|
%
|
||||||
%
|
%
|
||||||
|
% \begin{macro}{\@@_wrap_multiple:nnn}
|
||||||
|
% \begin{syntax}
|
||||||
|
% \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
|
||||||
|
{
|
||||||
|
\cs_new:cn { #2 }
|
||||||
|
{
|
||||||
|
#3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
\clist_map_function:nN { #1 } \@@_map_aux:n
|
||||||
|
}
|
||||||
|
% \end{macrocode}
|
||||||
|
% \end{macro}
|
||||||
%
|
%
|
||||||
%
|
%
|
||||||
% \begin{macro}{\fancythm_new_theorem:nnnn}
|
% \begin{macro}{\fancythm_new_theorem:nnnn, \fancythm_provide_theorem:nnnn}
|
||||||
% \begin{syntax}
|
% \begin{syntax}
|
||||||
% \cs{fancythm_new_theorem:nnnn}\marg{fancy theorem}\marg{groups}
|
% \cs{fancythm_new_theorem:nnnn}\marg{fancy theorem}\marg{groups}
|
||||||
% \marg{name}\marg{thmtools keys}
|
% \marg{name}\marg{thmtools keys}
|
||||||
|
@ -480,25 +502,28 @@
|
||||||
%
|
%
|
||||||
%
|
%
|
||||||
% \begin{macrocode}
|
% \begin{macrocode}
|
||||||
\cs_new:Npn \fancythm_new_theorem:nnnn #1 #2 #3 #4
|
\@@_wrap_multiple:nnn
|
||||||
|
{ new, provide }
|
||||||
|
{ fancythm_#1_theorem:nnnn }
|
||||||
{
|
{
|
||||||
\groupthm_new_family:nnnnn { #1 } { dagger, star } { #3 } { #4 } { #2 }
|
\use:c { groupthm_#1_family:nnnnn } { ##1 } { dagger, star } { ##3 } { ##4 } { ##2 }
|
||||||
\groupthm_new_family_options:nnnn
|
\use:c { groupthm_#1_family_options:nnnn }
|
||||||
{ #1 }
|
{ ##1 }
|
||||||
{ !s !t+ }
|
{ !s !t+ }
|
||||||
{
|
{
|
||||||
\IfBooleanT { ##1 }
|
\IfBooleanT { ####1 }
|
||||||
{
|
{
|
||||||
\groupthm_add_theorem_to_group:n { star }
|
\groupthm_add_theorem_to_group:n { star }
|
||||||
}
|
}
|
||||||
\IfBooleanT { ##2 }
|
\IfBooleanT { ####2 }
|
||||||
{
|
{
|
||||||
\groupthm_add_theorem_to_group:n { dagger }
|
\groupthm_add_theorem_to_group:n { dagger }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
{ #2 }
|
{ ##2 }
|
||||||
}
|
}
|
||||||
\cs_generate_variant:Nn \fancythm_new_theorem:nnnn { n V V V }
|
\cs_generate_variant:Nn \fancythm_new_theorem:nnnn { n V V V }
|
||||||
|
\cs_generate_variant:Nn \fancythm_provide_theorem:nnnn { n V V V }
|
||||||
% \end{macrocode}
|
% \end{macrocode}
|
||||||
% \end{macro}
|
% \end{macro}
|
||||||
%
|
%
|
||||||
|
@ -512,11 +537,13 @@
|
||||||
%
|
%
|
||||||
%
|
%
|
||||||
% \begin{macrocode}
|
% \begin{macrocode}
|
||||||
\cs_new:Npn \fancythm_new_theorem:nn #1 #2
|
\@@_wrap_multiple:nnn
|
||||||
|
{ new, provide }
|
||||||
|
{ fancythm_#1_theorem:nn }
|
||||||
{
|
{
|
||||||
\@@_set_normalized_keys:nn { #1 } { #2 }
|
\@@_set_normalized_keys:nn { ##1 } { ##2 }
|
||||||
\fancythm_new_theorem:nVVV
|
\use:c { fancythm_#1_theorem:nVVV }
|
||||||
{ #2 }
|
{ ##2 }
|
||||||
\l_@@_group_clist
|
\l_@@_group_clist
|
||||||
\l_@@_name_tl
|
\l_@@_name_tl
|
||||||
\l_@@_thmtools_clist
|
\l_@@_thmtools_clist
|
||||||
|
@ -525,8 +552,49 @@
|
||||||
% \end{macro}
|
% \end{macro}
|
||||||
%
|
%
|
||||||
%
|
%
|
||||||
|
% \begin{macro}{\@@_new_document_command:Nnn, \@@_new_document_command:cnn}
|
||||||
%
|
%
|
||||||
% \begin{macro}{\NewFancyTheorem}
|
% Private wrappers around \cs{NewDocumentCommand}.
|
||||||
|
%
|
||||||
|
% \begin{macrocode}
|
||||||
|
\cs_new:Npn \@@_new_document_command:Nnn #1 #2 #3
|
||||||
|
{
|
||||||
|
\NewDocumentCommand { #1 } { #2 } { #3 }
|
||||||
|
}
|
||||||
|
\cs_generate_variant:Nn \@@_new_document_command:Nnn { c n n }
|
||||||
|
% \end{macrocode}
|
||||||
|
% \end{macro}
|
||||||
|
%
|
||||||
|
%
|
||||||
|
%
|
||||||
|
% \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}
|
||||||
|
\cs_new:Npn \@@_wrap_multiple_document:nnnn #1 #2 #3 #4
|
||||||
|
{
|
||||||
|
\cs_set:Npn \@@_map_aux:n ##1
|
||||||
|
{
|
||||||
|
\cs_set:Nn \@@_Declarator: { \text_titlecase_first:n { ##1 } }
|
||||||
|
\@@_new_document_command:cnn { #2 } { #3 } { #4 }
|
||||||
|
}
|
||||||
|
\clist_map_function:nN { #1 } \@@_map_aux:n
|
||||||
|
}
|
||||||
|
% \end{macrocode}
|
||||||
|
% \end{macro}
|
||||||
|
%
|
||||||
|
%
|
||||||
|
%
|
||||||
|
%
|
||||||
|
%
|
||||||
|
%
|
||||||
|
% \begin{macro}{\NewFancyTheorem, \ProvideFancyTheorem}
|
||||||
% \begin{syntax}
|
% \begin{syntax}
|
||||||
% \cs{NewFancyTheorem}\marg{key=value list}\marg{fancy theorem}
|
% \cs{NewFancyTheorem}\marg{key=value list}\marg{fancy theorem}
|
||||||
% \end{syntax}
|
% \end{syntax}
|
||||||
|
@ -534,17 +602,62 @@
|
||||||
%
|
%
|
||||||
%
|
%
|
||||||
% \begin{macrocode}
|
% \begin{macrocode}
|
||||||
\NewDocumentCommand { \NewFancyTheorem } { O{} m }
|
\@@_wrap_multiple_document:nnnn
|
||||||
|
{ new, provide }
|
||||||
|
{ \@@_Declarator: FancyTheorem }
|
||||||
|
{ O{} m }
|
||||||
{
|
{
|
||||||
\fancythm_new_theorem:nn { #1 } { #2 }
|
\use:c { fancythm_#1_theorem:nn } { ##1 } { ##2 }
|
||||||
}
|
}
|
||||||
% \end{macrocode}
|
% \end{macrocode}
|
||||||
% \end{macro}
|
% \end{macro}
|
||||||
%
|
%
|
||||||
% \begin{macrocode}
|
|
||||||
%
|
%
|
||||||
|
%
|
||||||
|
% \subsection{Provided resources}
|
||||||
|
%
|
||||||
|
%
|
||||||
|
% We introduce various new theorem groups that help us to organize the document
|
||||||
|
% in a flexible way.
|
||||||
|
%
|
||||||
|
% \begin{variable}{star, dagger, big, small, tiny, custom}
|
||||||
|
%
|
||||||
|
%
|
||||||
|
% \begin{macrocode}
|
||||||
|
\groupthm_new_group:nnnnn { star } { } { * } { } { }
|
||||||
|
\groupthm_new_group:nnnnn { dagger } { } { $^{\dagger}$ } { } { }
|
||||||
|
\groupthm_new_group:nnnnn { big } { } { } { } { sibling = toplevel }
|
||||||
|
\groupthm_new_group:nnnnn { small } { } { } { } { sibling = sublevel }
|
||||||
|
\groupthm_new_group:nnnnn { tiny } { } { } { } { numbered = no }
|
||||||
|
\groupthm_new_group:nnnnn { custom } { } { } { } { sibling = sublevel }
|
||||||
|
% \end{macrocode}
|
||||||
|
% \end{variable}
|
||||||
|
%
|
||||||
|
%
|
||||||
|
% \begin{macrocode}
|
||||||
|
\groupthm_add_parent:nn { star } { custom }
|
||||||
|
\groupthm_add_parent:nn { dagger } { custom }
|
||||||
|
% \end{macrocode}
|
||||||
|
% \begin{macrocode}
|
||||||
|
\DeclareTheoremGroupRule [ suffix ] { dagger } { higher } { star }
|
||||||
|
\DeclareTheoremGroupRule { tiny } { higher } { small }
|
||||||
|
\DeclareTheoremGroupRule { tiny } { higher } { big }
|
||||||
|
\DeclareTheoremGroupRule { tiny } { higher } { custom }
|
||||||
|
\DeclareTheoremGroupRule { small } { higher } { big }
|
||||||
|
\DeclareTheoremGroupRule { custom } { higher } { big }
|
||||||
|
% \end{macrocode}
|
||||||
|
%
|
||||||
|
%
|
||||||
|
% It remains to provide a list of theorems at the beginning of the document.
|
||||||
|
%
|
||||||
|
%
|
||||||
|
%
|
||||||
|
%
|
||||||
|
% \begin{macrocode}
|
||||||
|
\AddToHook { begindocument / before } [ fancythm ]
|
||||||
|
{
|
||||||
|
\ProvideFancyTheorem [ group = big, style = thmgreenmargin ] { example }
|
||||||
|
}
|
||||||
% \end{macrocode}
|
% \end{macrocode}
|
||||||
%
|
%
|
||||||
%
|
%
|
||||||
|
|
Loading…
Reference in a new issue