diff options
author | Karl Berry <karl@freefriends.org> | 2009-09-06 23:20:42 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2009-09-06 23:20:42 +0000 |
commit | bfb16a7c8d3c77987590435854c647b54bc6450b (patch) | |
tree | cf65fafece2986d781a52ad28aaeb06fe48eed69 /Master/texmf-dist/tex/latex/xpackages | |
parent | 2b8eb47b09b2d853b8243d0fb61b408edb3d04a7 (diff) |
xpackages (5sep09)
git-svn-id: svn://tug.org/texlive/trunk@15164 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/xpackages')
-rw-r--r-- | Master/texmf-dist/tex/latex/xpackages/xbase/ldcsetup.sty (renamed from Master/texmf-dist/tex/latex/xpackages/ldcsetup.sty) | 0 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/xpackages/xbase/template.sty (renamed from Master/texmf-dist/tex/latex/xpackages/template.sty) | 5 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/xpackages/xbase/xparse.sty | 899 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/xpackages/xparse.sty | 563 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/xpackages/xtras/l3keys2e.sty | 117 |
5 files changed, 1018 insertions, 566 deletions
diff --git a/Master/texmf-dist/tex/latex/xpackages/ldcsetup.sty b/Master/texmf-dist/tex/latex/xpackages/xbase/ldcsetup.sty index 7f26ce16cbb..7f26ce16cbb 100644 --- a/Master/texmf-dist/tex/latex/xpackages/ldcsetup.sty +++ b/Master/texmf-dist/tex/latex/xpackages/xbase/ldcsetup.sty diff --git a/Master/texmf-dist/tex/latex/xpackages/template.sty b/Master/texmf-dist/tex/latex/xpackages/xbase/template.sty index a64a9cf4cc9..b91b2d6715e 100644 --- a/Master/texmf-dist/tex/latex/xpackages/template.sty +++ b/Master/texmf-dist/tex/latex/xpackages/xbase/template.sty @@ -54,7 +54,7 @@ %% ----------------------------------------------------------------------- %% \RequirePackage{expl3} -\GetIdInfo$Id: template.dtx 1295 2009-05-06 08:32:25Z will $ +\GetIdInfo$Id: template.dtx 1461 2009-08-15 08:38:12Z joseph $ {template} \ProvidesExplPackage {\filename}{\filedate}{\fileversion}{\filedescription} @@ -286,8 +286,7 @@ } \cs_set:Npn \TP_ignore_leading_space_in_arg_ii_aux:nn#1#2{#2{#1}} -\DeclareArgumentType t[{meaning}{}{\NoValue}{#1[#2]}{#2} -\DeclareDocumentCommand\TP_parse_optional_key_default:nw{mt}{ +\DeclareDocumentCommand\TP_parse_optional_key_default:nw{mo}{ \IfNoValueTF{#2} {\TP_templdecl_finish_key_setup:nw{#1}} {\TP_templdecl_finish_key_setup_with_default:nnw{#1}{#2}} diff --git a/Master/texmf-dist/tex/latex/xpackages/xbase/xparse.sty b/Master/texmf-dist/tex/latex/xpackages/xbase/xparse.sty new file mode 100644 index 00000000000..9bc5164a748 --- /dev/null +++ b/Master/texmf-dist/tex/latex/xpackages/xbase/xparse.sty @@ -0,0 +1,899 @@ +%% +%% This is file `xparse.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% xparse.dtx (with options: `package') +%% +%% (C) Copyright The LaTeX3 Project and any individual authors +%% listed elsewhere in this file. +%% +%% This is a generated file. +%% +%% This file was generated from file(s) of the xbase bundle. +%% --------------------------------------------------------- +%% +%% This file may only be distributed together with a copy of this bundle. +%% You may however distribute the bundle without such generated files. +%% +%% ====================================================================== +%% +%% File: xparse.dtx (C) Copyright 1999 Frank Mittelbach, Chris Rowley, +%% David Carlisle +%% (C) Copyright 2004-2008 Frank Mittelbach, +%% LaTeX3 Project +%% (C) Copyright 2009 LaTeX3 Project +%% +%% It may be distributed and/or modified under the conditions of the +%% LaTeX Project Public License (LPPL), either version 1.3c of this +%% license or (at your option) any later version. The latest version +%% of this license is in the file +%% +%% http://www.latex-project.org/lppl.txt +%% +%% This file is part of the ``xbase bundle'' (The Work in LPPL) +%% and all files in that bundle must be distributed together. +%% +%% The released version of this bundle is available from CTAN. +%% +%% ----------------------------------------------------------------------- +%% +%% The development version of the bundle can be found at +%% +%% http://www.latex-project.org/svnroot/experimental/trunk/ +%% +%% for those people who are interested. +%% +%%%%%%%%%%% +%% NOTE: %% +%%%%%%%%%%% +%% +%% Snapshots taken from the repository represent work in progress and may +%% not work or may contain conflicting material! We therefore ask +%% people _not_ to put them into distributions, archives, etc. without +%% prior consultation with the LaTeX Project Team. +%% +%% ----------------------------------------------------------------------- +%% +\RequirePackage{l3names} +\GetIdInfo$Id: xparse.dtx 1497 2009-08-31 19:17:53Z joseph $ + {Generic document command parser} +\ProvidesExplPackage + {\filename}{\filedate}{\fileversion}{\filedescription} +\RequirePackage{expl3} +\prop_new:N \c_xparse_shorthands_prop +\prop_put:Nnn \c_xparse_shorthands_prop { o } { d[] } +\prop_put:Nnn \c_xparse_shorthands_prop { O } { D[] } +\prop_put:Nnn \c_xparse_shorthands_prop { s } { t* } +\toks_new:N \l_xparse_arg_toks +\toks_new:N \l_xparse_args_toks +\toks_new:N \l_xparse_environment_args_toks +\bool_new:N \l_xparse_error_bool +\tl_new:N \l_xparse_function_tl +\toks_new:N \l_xparse_last_arg_tl +\bool_new:N \l_xparse_long_bool +\int_new:N \l_xparse_m_args_int +\bool_new:N \l_xparse_m_only_bool +\int_new:N \l_xparse_mandatory_args_int +\bool_new:N \l_xparse_processor_bool +\int_new:N \l_xparse_processor_int +\toks_new:N \l_xparse_signature_toks +\tl_new:N \l_xparse_tmp_tl +\int_new:N \l_xparse_total_args_int +\quark_new:N \q_xparse_stop +\cs_new_nopar:Nn \xparse_add_grabber_mandatory:N { + \toks_put_right:Nx \l_xparse_signature_toks { + \exp_not:c { + xparse_grab_ #1 \bool_if:NT \l_xparse_long_bool { _long } :w + } + } + \bool_set_false:N \l_xparse_long_bool + \int_decr:N \l_xparse_mandatory_args_int +} +\cs_new_nopar:Nn \xparse_add_grabber_optional:N { + \toks_put_right:Nx \l_xparse_signature_toks { + \exp_not:c { + xparse_grab_ #1 + \bool_if:NT \l_xparse_long_bool { _long } + \intexpr_compare:nF { + \l_xparse_mandatory_args_int > \c_zero + } { _trailing } + :w + } + } + \bool_set_false:N \l_xparse_long_bool +} +\cs_new_nopar:cpn { xparse_add_type_+:w } { + \xparse_flush_m_args: + \bool_set_true:N \l_xparse_long_bool + \bool_set_false:N \l_xparse_m_only_bool + \int_decr:N \l_xparse_total_args_int + \xparse_prepare_signature:N +} +\cs_new:cpn { xparse_add_type_>:w } #1 { + \bool_set_true:N \l_xparse_processor_bool + \xparse_flush_m_args: + \int_decr:N \l_xparse_total_args_int + \toks_put_right:Nn \l_xparse_signature_toks { + \xparse_process_arg:n {#1} + } + \xparse_prepare_signature_aux:N +} +\cs_new:Npn \xparse_add_type_d:w #1#2 { + \xparse_add_type_D:w #1 #2 { \NoValue } +} +\cs_new:Npn \xparse_add_type_D:w #1#2#3 { + \xparse_flush_m_args: + \xparse_add_grabber_optional:N D + \toks_put_right:Nn \l_xparse_signature_toks { #1 #2 {#3} } + \xparse_prepare_signature:N +} +\cs_new_nopar:Npn \xparse_add_type_g:w { + \xparse_add_type_G:w { \NoValue } +} +\cs_new:Npn \xparse_add_type_G:w #1 { + \xparse_flush_m_args: + \xparse_add_grabber_optional:N G + \toks_put_right:Nn \l_xparse_signature_toks { {#1} } + \xparse_prepare_signature:N +} +\cs_new_nopar:Npn \xparse_add_type_l:w { + \xparse_flush_m_args: + \xparse_add_grabber_mandatory:N l + \xparse_prepare_signature:N +} +\cs_new_nopar:Npn \xparse_add_type_m:w { + \bool_if:nTF { + \l_xparse_long_bool || \l_xparse_processor_bool + } { + \xparse_flush_m_args: + \xparse_add_grabber_mandatory:N m + }{ + \int_incr:N \l_xparse_m_args_int + } + \xparse_prepare_signature:N +} +\cs_new:Npn \xparse_add_type_t:w #1 { + \xparse_flush_m_args: + \xparse_add_grabber_optional:N t + \toks_put_right:Nn \l_xparse_signature_toks { #1 } + \xparse_prepare_signature:N +} +\cs_new:Npn \xparse_add_type_u:w #1 { + \xparse_flush_m_args: + \xparse_add_grabber_mandatory:N u + \toks_put_right:Nn \l_xparse_signature_toks { {#1} } + \xparse_prepare_signature:N +} +\cs_new_nopar:Nn \xparse_check_and_add:N { + \cs_if_free:cTF { xparse_add_type_ #1 :w } { + \msg_error:nnx { xparse } { unknown-argument-type } {#1} + \xparse_add_type_m:w + }{ + \use:c { xparse_add_type_ #1 :w } + } +} +\cs_new:Nn \xparse_count_mandatory:n { + \int_zero:N \l_xparse_mandatory_args_int + \xparse_count_mandatory:N #1 \q_nil +} +\cs_new:Nn \xparse_count_mandatory:N { + \quark_if_nil:NF #1 { + \prop_if_in:NnTF \c_xparse_shorthands_prop {#1} { + \prop_get:NnN \c_xparse_shorthands_prop {#1} \l_xparse_tmp_tl + \exp_last_unbraced:NV \xparse_count_mandatory:N \l_xparse_tmp_tl + }{ + \xparse_count_mandatory_aux:N #1 + } + } +} +\cs_new:Nn \xparse_count_mandatory_aux:N { + \cs_if_free:cTF { xparse_count_type_ #1 :w } { + \xparse_count_type_m:w + }{ + \use:c { xparse_count_type_ #1 :w } + } +} +\cs_new:cpn { xparse_count_type_>:w } #1 { + \xparse_count_mandatory:N +} +\cs_new_nopar:cpn { xparse_count_type_+:w } { + \xparse_count_mandatory:N +} +\cs_new:Npn \xparse_count_type_d:w #1#2 { + \xparse_count_mandatory:N +} +\cs_new:Npn \xparse_count_type_D:w #1#2#3 { + \xparse_count_mandatory:N +} +\cs_new_nopar:Npn \xparse_count_type_g:w { + \xparse_count_mandatory:N +} +\cs_new:Npn \xparse_count_type_G:w #1 { + \xparse_count_mandatory:N +} +\cs_new_nopar:Npn \xparse_count_type_l:w { + \int_incr:N \l_xparse_mandatory_args_int + \xparse_count_mandatory:N +} +\cs_new_nopar:Npn \xparse_count_type_m:w { + \int_incr:N \l_xparse_mandatory_args_int + \xparse_count_mandatory:N +} +\cs_new:Npn \xparse_count_type_t:w #1 { + \xparse_count_mandatory:N +} +\cs_new:Npn \xparse_count_type_u:w #1 { + \int_incr:N \l_xparse_mandatory_args_int + \xparse_count_mandatory:N +} +\cs_new:Nn \xparse_declare_cmd:Nnn { + \xparse_count_mandatory:n {#2} + \xparse_prepare_signature:n {#2} + \bool_if:NTF \l_xparse_m_only_bool { + \xparse_declare_cmd_all_m:Nn #1 {#3} + }{ + \xparse_declare_cmd_mixed:Nn #1 {#3} + } +} +\cs_generate_variant:Nn \xparse_declare_cmd:Nnn { cnn } +\cs_new:Nn \xparse_declare_cmd_all_m:Nn { + \cs_generate_from_arg_count:NNnn + #1 \cs_set_protected_nopar:Npn \l_xparse_total_args_int {#2} +} +\cs_new:Nn \xparse_declare_cmd_mixed:Nn { + \cs_set_protected_nopar:Npx #1 { + \exp_not:n { + \int_zero:N \l_xparse_processor_int + \toks_set:Nn \l_xparse_args_toks + } { \exp_not:c { \token_to_str:N #1 } } + \toks_use:N \l_xparse_signature_toks + \exp_not:n{ \toks_use:N \l_xparse_args_toks } + } + \cs_generate_from_arg_count:cNnn + { \token_to_str:N #1 } \cs_set:Npn \l_xparse_total_args_int {#2} +} +\cs_new:Nn \xparse_declare_cmd_implementation:nNn { + \cs_generate_from_arg_count:cNnn { implementation_ #1 :w } + \cs_set:Npn {#2} {#3} +} +\cs_new:Nn \xparse_declare_cmd_interface:Nnn { + \xparse_prepare_signature:n {#3} + \bool_if:NTF \l_xparse_m_only_bool { + \xparse_declare_cmd_interface_all_m:Nn #1 {#2} + }{ + \xparse_declare_cmd_interface_mixed:Nn #1 {#2} + } + \cs_generate_from_arg_count:cNnn { implementation_ #2 :w } + \cs_set:Npn \l_xparse_total_args_int { ``#2'' } +} +\cs_new:Nn \xparse_declare_cmd_interface_all_m:Nn { + \cs_generate_from_arg_count:NNnn + #1 \cs_set_protected_nopar:Npn \l_xparse_total_args_int + { \use:c { implementation_ #2 :w } } +} +\cs_new:Nn \xparse_declare_cmd_interface_mixed:Nn { + \cs_set_protected_nopar:Npx #1 { + \exp_not:n { + \int_zero:N \l_xparse_processor_int + \toks_set:Nn \l_xparse_args_toks + } { \exp_not:c { \token_to_str:N #1 } } + \toks_use:N \l_xparse_signature_toks + \exp_not:n{ \toks_use:N \l_xparse_args_toks } + } + \cs_generate_from_arg_count:cNnn + { \token_to_str:N #1 } \cs_set:Npn \l_xparse_total_args_int + { \use:c { implementation_ #2 :w } } +} +\cs_new:Nn \xparse_declare_env:nnnn { + \xparse_declare_cmd:cnn { environment_begin_ #1 :w } {#2} { + \group_begin: + \toks_set_eq:NN \l_xparse_environment_args_toks + \l_xparse_args_toks + #3 + } + \cs_set_nopar:cpx { environment_end_ #1 :w } { + \exp_not:N \exp_last_unbraced:NV + \exp_not:c { environment_end_ #1 _aux:N } + \exp_not:N \l_xparse_environment_args_toks + \exp_not:N \group_end: + } + \cs_set_nopar:cx { environment_end_ #1 _aux:N } { + \exp_not:c { environment_end_ #1 _aux :w } + } + \cs_generate_from_arg_count:cNnn + { environment_end_ #1 _aux :w } \cs_set:Npn + \l_xparse_total_args_int {#4} + \cs_set_eq:cc {#1} { environment_begin_ #1 :w } + \cs_set_eq:cc { end #1 } { environment_end_ #1 :w } +} +\cs_new_nopar:Nn \xparse_flush_m_args: { + \cs_if_exist:cT { + xparse_grab_m_ \int_use:N \l_xparse_m_args_int :w + } { + \toks_put_right:Nx \l_xparse_signature_toks { + \exp_not:c { xparse_grab_m_ \int_use:N \l_xparse_m_args_int :w } + } + \int_set:Nn \l_xparse_mandatory_args_int { + \l_xparse_mandatory_args_int - \l_xparse_m_args_int + } + } + \int_zero:N \l_xparse_m_args_int + \bool_set_false:N \l_xparse_m_only_bool +} +\prg_new_conditional:Nnn \xparse_if_no_value:n { TF,T,F } { + \tl_if_eq:nnTF {#1} { \NoValue } { + \prg_return_true: + }{ + \prg_return_false: + } +} +\cs_new:Nn \xparse_prepare_signature:n { + \bool_set_false:N \l_xparse_long_bool + \int_zero:N \l_xparse_m_args_int + \bool_set_true:N \l_xparse_m_only_bool + \bool_set_false:N \l_xparse_processor_bool + \toks_clear:N \l_xparse_signature_toks + \int_zero:N \l_xparse_total_args_int + \xparse_prepare_signature:N #1 \q_nil +} +\cs_new:Nn \xparse_prepare_signature:N { + \bool_set_false:N \l_xparse_processor_bool + \xparse_prepare_signature_aux:N #1 +} +\cs_new:Nn \xparse_prepare_signature_aux:N { + \quark_if_nil:NTF #1 { + \bool_if:NF \l_xparse_m_only_bool { + \xparse_flush_m_args: + } + }{ + \prop_if_in:NnTF \c_xparse_shorthands_prop {#1} { + \prop_get:NnN \c_xparse_shorthands_prop {#1} \l_xparse_tmp_tl + \exp_last_unbraced:NV \xparse_prepare_signature:N \l_xparse_tmp_tl + }{ + \int_incr:N \l_xparse_total_args_int + \xparse_check_and_add:N #1 + } + } +} +\cs_new:Nn \xparse_process_arg:n { + \int_incr:N \l_xparse_processor_int + \cs_set:cn { + xparse_processor_ \int_use:N \l_xparse_processor_int :n + } + { #1 {##1} } +} +\cs_new:Nn \xparse_add_arg:n { + \intexpr_compare:nTF { \l_xparse_processor_int = \c_zero } { + \toks_put_right:Nn \l_xparse_args_toks { {#1} } + }{ + \xparse_if_no_value:nTF {#1} { + \int_zero:N \l_xparse_processor_int + \toks_put_right:Nn \l_xparse_args_toks { {#1} } + }{ + \xparse_add_arg_aux:n {#1} + } + } +} +\cs_new:Nn \xparse_add_arg_aux:n { + \use:c { xparse_processor_ \int_use:N \l_xparse_processor_int :n } + {#1} + \int_decr:N \l_xparse_processor_int + \intexpr_compare:nTF { \l_xparse_processor_int = \c_zero } { + \toks_put_right:No \l_xparse_args_toks { + \exp_after:wN { \toks_use:N \l_xparse_arg_toks } + } + }{ + \xparse_add_arg_aux:V \l_xparse_arg_toks + } +} +\cs_generate_variant:Nn \xparse_add_arg_aux:n { V } +\cs_new:Npn \xparse_grab_aux:w { } +\cs_new:Npn \xparse_grab_D:w #1#2#3#4 \l_xparse_args_toks { + \xparse_grab_D_aux:NNnnNn #1 #2 {#3} {#4} \cs_set_nopar:Npn + { _ignore_spaces } +} +\cs_new:Npn \xparse_grab_D_long:w #1#2#3#4 \l_xparse_args_toks { + \xparse_grab_D_aux:NNnnNn #1 #2 {#3} {#4} \cs_set:Npn + { _ignore_spaces } +} +\cs_new:Npn \xparse_grab_D_trailing:w #1#2#3#4 \l_xparse_args_toks { + \xparse_grab_D_aux:NNnnNn #1 #2 {#3} {#4} \cs_set_nopar:Npn { } +} +\cs_new:Npn \xparse_grab_D_long_trailing:w #1#2#3#4 + \l_xparse_args_toks { + \xparse_grab_D_aux:NNnnNn #1 #2 {#3} {#4} \cs_set:Npn { } +} +\cs_set:Nn \xparse_grab_D_aux:NNnnNn { + #5 \xparse_grab_arg:w #1 ##1 #2 { + \xparse_add_arg:n {##1} + #4 \l_xparse_args_toks + } + \use:c { peek_charcode #6 :NTF } #1 { + \xparse_grab_arg:w + }{ + \xparse_add_arg:n {#3} + #4 \l_xparse_args_toks + } +} +\cs_new:Npn \xparse_grab_G:w #1#2 \l_xparse_args_toks { + \xparse_grab_G_aux:nnNn {#1} {#2} \cs_set_nopar:Npn { _ignore_spaces } +} +\cs_new:Npn \xparse_grab_G_long:w #1#2 \l_xparse_args_toks { + \xparse_grab_G_aux:nnNn {#1} {#2} \cs_set:Npn { _ignore_spaces } +} +\cs_new:Npn \xparse_grab_G_trailing:w #1#2 \l_xparse_args_toks { + \xparse_grab_G_aux:nnNn {#1} {#2} \cs_set_nopar:Npn { } +} +\cs_new:Npn \xparse_grab_G_long_trailing:w #1#2 \l_xparse_args_toks { + \xparse_grab_G_aux:nnNn {#1} {#2} \cs_set:Npn { } +} +\cs_set:Nn \xparse_grab_G_aux:nnNn { + #3 \xparse_grab_arg:w ##1 { + \xparse_add_arg:n {##1} + #2 \l_xparse_args_toks + } + \use:c { peek_meaning #4 :NTF } \c_group_begin_token { + \xparse_grab_arg:w + }{ + \xparse_add_arg:n {#1} + #2 \l_xparse_args_toks + } +} +\cs_new:Npn \xparse_grab_l:w #1 \l_xparse_args_toks { + \xparse_grab_l_aux:nN {#1} \cs_set_nopar:Npn +} +\cs_new:Npn \xparse_grab_l_long:w #1 \l_xparse_args_toks { + \xparse_grab_l_aux:nN {#1} \cs_set:Npn +} +\cs_new:Nn \xparse_grab_l_aux:nN { + #2 \xparse_grab_arg:w ##1## { + \xparse_add_arg:n \l_xparse_args_toks {##1} + #1 \l_xparse_args_toks + } + \xparse_grab_arg:w +} +\cs_new:Npn \xparse_grab_m:w #1 \l_xparse_args_toks { + \cs_set_nopar:Npn \xparse_grab_arg:w ##1 { + \xparse_add_arg:n {##1} + #1 \l_xparse_args_toks + } + \xparse_grab_arg:w +} +\cs_new:Npn \xparse_grab_m_long:w #1 \l_xparse_args_toks { + \cs_set:Npn \xparse_grab_arg:w ##1 { + \xparse_add_arg:n {##1} + #1 \l_xparse_args_toks + } + \xparse_grab_arg:w +} +\cs_new:cpn { xparse_grab_m_1:w } #1 \l_xparse_args_toks { + \cs_set_nopar:Npn \xparse_grab_arg:w ##1 { + \toks_put_right:Nn \l_xparse_args_toks { {##1} } + #1 \l_xparse_args_toks + } + \xparse_grab_arg:w +} +\cs_new:cpn { xparse_grab_m_2:w } #1 \l_xparse_args_toks { + \cs_set_nopar:Npn \xparse_grab_arg:w ##1##2 { + \toks_put_right:Nn \l_xparse_args_toks { {##1} {##2} } + #1 \l_xparse_args_toks + } + \xparse_grab_arg:w +} +\cs_new:cpn { xparse_grab_m_3:w } #1 \l_xparse_args_toks { + \cs_set_nopar:Npn \xparse_grab_arg:w ##1##2##3 { + \toks_put_right:Nn \l_xparse_args_toks { {##1} {##2} {##3} } + #1 \l_xparse_args_toks + } + \xparse_grab_arg:w +} +\cs_new:cpn { xparse_grab_m_4:w } #1 \l_xparse_args_toks { + \cs_set_nopar:Npn \xparse_grab_arg:w ##1##2##3##4 { + \toks_put_right:Nn \l_xparse_args_toks { {##1} {##2} {##3} {##4} } + #1 \l_xparse_args_toks + } + \xparse_grab_arg:w +} +\cs_new:cpn { xparse_grab_m_5:w } #1 \l_xparse_args_toks { + \cs_set_nopar:Npn \xparse_grab_arg:w ##1##2##3##4##5 { + \toks_put_right:Nn \l_xparse_args_toks { + {##1} {##2} {##3} {##4} {##5} + } + #1 \l_xparse_args_toks + } + \xparse_grab_arg:w +} +\cs_new:cpn { xparse_grab_m_6:w } #1 \l_xparse_args_toks { + \cs_set_nopar:Npn \xparse_grab_arg:w ##1##2##3##4##5##6 { + \toks_put_right:Nn \l_xparse_args_toks { + {##1} {##2} {##3} {##4} {##5} {##6} + } + #1 \l_xparse_args_toks + } + \xparse_grab_arg:w +} +\cs_new:cpn { xparse_grab_m_7:w } #1 \l_xparse_args_toks { + \cs_set_nopar:Npn \xparse_grab_arg:w ##1##2##3##4##5##6##7 { + \toks_put_right:Nn \l_xparse_args_toks { + {##1} {##2} {##3} {##4} {##5} {##6} {##7} + } + #1 \l_xparse_args_toks + } + \xparse_grab_arg:w +} +\cs_new:cpn { xparse_grab_m_8:w } #1 \l_xparse_args_toks { + \cs_set_nopar:Npn \xparse_grab_arg:w ##1##2##3##4##5##6##7##8 { + \toks_put_right:Nn \l_xparse_args_toks { + {##1} {##2} {##3} {##4} {##5} {##6} {##7} {##8} + } + #1 \l_xparse_args_toks + } + \xparse_grab_arg:w +} +\cs_new:Npn \xparse_grab_t:w #1#2 \l_xparse_args_toks { + \xparse_grab_t_aux:NnNn #1 {#2} \cs_set_nopar:Npn { _ignore_spaces } +} +\cs_new:Npn \xparse_grab_t_long:w #1#2 \l_xparse_args_toks { + \xparse_grab_t_aux:NnNn #1 {#2} \cs_set:Npn { _ignore_spaces } +} +\cs_new:Npn \xparse_grab_t_trailing:w #1#2 \l_xparse_args_toks { + \xparse_grab_t_aux:NnNn #1 {#2} \cs_set_nopar:Npn { } +} +\cs_new:Npn \xparse_grab_t_long_trailing:w #1#2 \l_xparse_args_toks { + \xparse_grab_t_aux:NnNn #1 {#2} \cs_set:Npn { } +} +\cs_new:Nn \xparse_grab_t_aux:NnNn { + #3 \xparse_grab_arg:w { + \use:c { peek_charcode_remove #4 :NTF } #1 { + \xparse_add_arg:n { \BooleanTrue } + #2 \l_xparse_args_toks + }{ + \xparse_add_arg:n { \BooleanFalse } + #2 \l_xparse_args_toks + } + } + \xparse_grab_arg:w +} +\cs_new:Npn \xparse_grab_u:w #1#2 \l_xparse_args_toks { + \xparse_grab_u_aux:NnN {#1} {#2} \cs_set_nopar:Npn +} +\cs_new:Npn \xparse_grab_u_long:w #1#2 \l_xparse_args_toks { + \xparse_grab_u_aux:NnN {#1} {#2} \cs_set:Npn +} +\cs_new:Nn \xparse_grab_u_aux:NnN { + #3 \xparse_grab_arg:w ##1 #1 { + \xparse_add_arg:n {##1} + #2 \l_xparse_args_toks + } + \xparse_grab_arg:w +} +\cs_new:Nn \xparse_process_to_str:n { + \toks_set:Nx \l_xparse_arg_toks { + \tl_to_str:n {#1} + } +} +\cs_new:Nn \xparse_process_comma_split:n { + \tl_if_in:nnTF {#1} { , } { + \xparse_process_comma_split_aux:w #1 \q_stop + }{ + \toks_set:Nn \l_xparse_arg_toks { {#1} { \NoValue } } + } +} +\cs_new:Npn \xparse_process_comma_split_aux:w #1 , #2 \q_stop { + \toks_set:Nn \l_xparse_arg_toks { {#1} {#2} } +} +\cs_new:Npn \xparse_exp_add_type_d:w #1#2 { + \xparse_exp_add_type_D:w #1 #2 { \NoValue } +} +\cs_new:Npn \xparse_exp_add_type_D:w #1#2#3 { + \tl_set:Nx \l_xparse_tmpa_tl { + \exp_after:wN \token_to_str:N \l_xparse_function_tl + \int_use:N \l_xparse_total_args_int + } + \xparse_exp_set:cpx { \l_xparse_tmpa_tl } ##1 \q_xparse_stop ##2 { + \exp_not:N \tl_if_head_eq_charcode:nNTF {##2} #1 { + \exp_not:c { \l_xparse_tmpa_tl aux } + ##1 \exp_not:N \q_xparse_stop + }{ + \exp_not:c { \l_xparse_tmpa_tl aux } + ##1 \exp_not:N \q_xparse_stop #3 #2 {##2} + } + } + \xparse_exp_set:cpx { \l_xparse_tmpa_tl aux} + ##1 \q_xparse_stop ##2 #2 { + \exp_not:c { + \exp_after:wN \token_to_str:N \l_xparse_function_tl + \intexpr_eval:n { \l_xparse_total_args_int + 1 } + } ##1 {##2} \exp_not:N \q_xparse_stop + } + \xparse_exp_prepare_function:N +} +\cs_new_nopar:Npn \xparse_exp_add_type_l:w { + \xparse_exp_set:cpx { + \exp_after:wN \token_to_str:N \l_xparse_function_tl + \int_use:N \l_xparse_total_args_int + } ##1 \q_xparse_stop ##2## { + \exp_not:c { + \exp_after:wN \token_to_str:N \l_xparse_function_tl + \intexpr_eval:n { \l_xparse_total_args_int + 1 } + } + ##1 {##2} \exp_not:N \q_xparse_stop + } + \xparse_exp_prepare_function:N +} +\cs_new_nopar:Npn \xparse_exp_add_type_m:w { + \int_incr:N \l_xparse_m_args_int + \xparse_exp_set:cpx { + \exp_after:wN \token_to_str:N \l_xparse_function_tl + \int_use:N \l_xparse_total_args_int + } ##1 \q_xparse_stop ##2 { + \exp_not:c { + \exp_after:wN \token_to_str:N \l_xparse_function_tl + \intexpr_eval:n { \l_xparse_total_args_int + 1 } + } + ##1 {##2} \exp_not:N \q_xparse_stop + } + \xparse_exp_prepare_function:N +} +\cs_new:Npn \xparse_exp_add_type_t:w #1 { + \tl_set:Nx \l_xparse_tmpa_tl { + \exp_after:wN \token_to_str:N \l_xparse_function_tl + \intexpr_eval:n { \l_xparse_total_args_int + 1 } + } + \xparse_exp_set:cpx { + \exp_after:wN \token_to_str:N \l_xparse_function_tl + \int_use:N \l_xparse_total_args_int + } ##1 \q_xparse_stop ##2 { + \exp_not:N \tl_if_head_eq_charcode:nNTF {##2} #1 { + \exp_not:c { \l_xparse_tmpa_tl } + ##1 \exp_not:n { { \BooleanTrue } \q_xparse_stop } + }{ + \exp_not:c { \l_xparse_tmpa_tl } + ##1 \exp_not:n { { \BooleanFalse } \q_xparse_stop {##2} } + } + } + \xparse_exp_prepare_function:N +} +\cs_new:Npn \xparse_exp_add_type_u:w #1 { + \xparse_exp_set:cpx { + \exp_after:wN \token_to_str:N \l_xparse_function_tl + \int_use:N \l_xparse_total_args_int + } ##1 \q_xparse_stop ##2 #1 { + \exp_not:c { + \exp_after:wN \token_to_str:N \l_xparse_function_tl + \intexpr_eval:n { \l_xparse_total_args_int + 1 } + } + ##1 {##2} \exp_not:N \q_xparse_stop + } + \xparse_exp_prepare_function:N +} +\cs_new_nopar:Nn \xparse_exp_check_and_add:N { + \cs_if_free:cTF { xparse_exp_add_type_ #1 :w } { + \msg_error:nnx { xparse } { unknown-argument-type } {#1} + \tl_set:Nn \l_xparse_last_arg_tl { m } + \xparse_exp_add_type_m:w + }{ + \tl_set:Nn \l_xparse_last_arg_tl {#1} + \use:c { xparse_exp_add_type_ #1 :w } + } +} +\cs_new:Nn \xparse_exp_declare_cmd:Nnn { + \tl_set:Nn \l_xparse_function_tl {#1} + \xparse_exp_prepare_function:n {#2} + \intexpr_compare:nTF { + \l_xparse_total_args_int = \l_xparse_m_args_int + } { + \xparse_exp_declare_cmd_all_m:Nn #1 {#3} + }{ + \xparse_exp_declare_cmd_mixed:Nn #1 {#3} + } +} +\cs_new:Nn \xparse_exp_declare_cmd_all_m:Nn { + \bool_if:NTF \l_xparse_long_bool { + \cs_generate_from_arg_count:NNnn + #1 \cs_set:Npn \l_xparse_total_args_int {#2} + }{ + \cs_generate_from_arg_count:NNnn + #1 \cs_set_nopar:Npn \l_xparse_total_args_int {#2} + } +} +\cs_new:Nn \xparse_exp_declare_cmd_mixed:Nn { + \exp_args:NnV \tl_if_in:nnTF { l m u } \l_xparse_last_arg_tl { + \xparse_exp_declare_cmd_mixed_aux:Nn #1 {#2} + }{ + \msg_error:nn { xparse } { expandable-ending-optional } + } +} +\cs_new:Nn \xparse_exp_declare_cmd_mixed_aux:Nn { + \cs_set_nopar:Npx #1 { + \exp_not:c { \token_to_str:N #1 1 } x \exp_not:N \q_xparse_stop + } + \cs_set_nopar:cpx { + \token_to_str:N #1 \intexpr_eval:n { \l_xparse_total_args_int + 1 } + } x ##1 \q_xparse_stop { + \exp_not:c { \token_to_str:N #1 } ##1 + } + \cs_generate_from_arg_count:cNnn + { \token_to_str:N #1 } \cs_set:Npn \l_xparse_total_args_int {#2} +} +\cs_new:Nn \xparse_exp_prepare_function:n { + \bool_set_false:N \l_xparse_error_bool + \tl_if_in:nnT {#1} { > } { + \msg_error:nnx { xparse } { processor-in-expandable } {#1} + \bool_set_true:N \l_xparse_error_bool + } + \tl_if_in:nnT {#1} { g } { + \msg_error:nnx { xparse } { grouped-in-expandable } {#1} + \bool_set_true:N \l_xparse_error_bool + } + \tl_if_in:nnT {#1} { G } { + \msg_error:nnx { xparse } { grouped-in-expandable } {#1} + \bool_set_true:N \l_xparse_error_bool + } + \bool_if:NF \l_xparse_error_bool { + \xparse_exp_prepare_function_aux:n {#1} + } +} +\cs_new:Nn \xparse_exp_prepare_function_aux:n { + \cs_set_eq:NN \xparse_prepare_next:w \xparse_exp_prepare_function:N + \cs_set_eq:NN \xparse_exp_set:cpx \cs_set_nopar:cpx + \bool_set_false:N \l_xparse_long_bool + \int_zero:N \l_xparse_m_args_int + \int_zero:N \l_xparse_total_args_int + \tl_if_in:nnT {#1} { + } { + \bool_set_true:N \l_xparse_long_bool + \cs_set_eq:NN \xparse_exp_set:cpx \cs_set:cpx + } + \xparse_exp_prepare_function:N #1 \q_nil +} +\cs_new:Nn \xparse_exp_prepare_function:N { + \bool_if:NTF \l_xparse_long_bool { + \xparse_exp_prepare_function_long:N #1 + }{ + \xparse_exp_prepare_function_short:N #1 + } +} +\cs_new:Nn \xparse_exp_prepare_function_long:N { + \quark_if_nil:NF #1 { + \tl_if_eq:nnTF {#1} { + } { + \xparse_exp_prepare_function_short:N + }{ + \msg_error:nn { xparse } { inconsistent-long } + \xparse_exp_prepare_function_short:N #1 + } + + } +} +\cs_new:Nn \xparse_exp_prepare_function_short:N { + \quark_if_nil:NF #1 { + \prop_if_in:NnTF \c_xparse_shorthands_prop {#1} { + \prop_get:NnN \c_xparse_shorthands_prop {#1} \l_xparse_tmp_tl + \bool_if:NT \l_xparse_long_bool { + \tl_put_left:Nn \l_xparse_tmp_tl { + } + } + \exp_last_unbraced:NV \xparse_exp_prepare_function:N + \l_xparse_tmp_tl + }{ + \int_incr:N \l_xparse_total_args_int + \xparse_exp_check_and_add:N #1 + } + } +} +\cs_new_eq:NN \xparse_exp_set:cpx \cs_set_nopar:cpx +\msg_new:nnnn { xparse } { command-already-defined } {% + Command name `\token_to_str:N #1' already defined!% +}{% + You have used \token_to_str:N \NewDocumentCommand\\% + with a command that already has a definition.\\% + Perhaps you meant \token_to_str:N \RenewDocumentCommand.% +} +\msg_new:nnnn { xparse } { command-not-yet-defined } {% + Command `\token_to_str:N #1' not yet defined!% +}{% + You have used \token_to_str:N \RenewDocumentCommand\\% + with a command that was never defined.\\% + Perhaps you meant \token_to_str:N \NewDocumentCommand.% +} +\msg_new:nnn { xparse } { environment-already-defined } {% + Environment `#1' already defined!% +} +\msg_new:nnn { xparse } { environment-not-yet-defined } {% + Environment `#1' not yet defined!% +} +\msg_new:nnnn { xparse } { expandable-ending-optional } {% + Expandable command signature ends in optional argument.% +}{% + Expandable functions must have a final mandatory argument.% +} +\msg_new:nnnn { xparse } { grouped-in-expandable } {% + Optional grouped arguments cannot be used with expandable functions.% +}{% + Argument specification `#1' contains an optional grouped argument:\\% + this is only supported for standard robust functions.% +} +\msg_new:nnnn { xparse } { inconsistent-long } {% + Inconsistent long arguments.% +}{% + Expandable commands must have all arguments long if any at all.% +} +\msg_new:nnnn { xparse } { processor-in-expandable } {% + Argument processors cannot be used with expandable functions.% +}{% + Argument specification `#1' contains a processor function:\\% + this is only supported for standard robust functions.% +} +\msg_new:nnn { xparse } { unknown-argument-type } {% + Unknown argument type `#1' replaced by `m'. Fingers crossed ...% +} +\cs_new_eq:NN \BooleanFalse \c_false_bool +\cs_new_eq:NN \BooleanTrue \c_true_bool +\xparse_declare_cmd:Nnn \DeclareDocumentCommand { +m +m +m } { + \xparse_declare_cmd:Nnn #1 {#2} {#3} +} +\DeclareDocumentCommand \NewDocumentCommand { +m +m +m } { + \cs_if_exist:NTF #1 { + \msg_error:nnx { xparse } { command-already-defined } {#1} + }{ + \xparse_declare_cmd:Nnn #1 {#2} {#3} + } +} +\NewDocumentCommand \RenewDocumentCommand { +m +m +m } { + \cs_if_exist:NTF #1 { + \xparse_declare_cmd:Nnn #1 {#2} {#3} + }{ + \msg_error:nnx { xparse } { command-not-yet-defined } {#1} + } +} +\NewDocumentCommand \ProvideDocumentCommand { +m +m +m } { + \cs_if_exist:NF #1 { + \xparse_declare_cmd:Nnn #1 {#2} {#3} + } +} +\NewDocumentCommand \DeclareDocumentCommandImplementation { m m +m } { + \xparse_declare_cmd_implementation:nNn {#1} #2 {#3} +} +\NewDocumentCommand \DeclareDocumentCommandInterface { m m +m } { + \xparse_declare_cmd_interface:Nnn #1 {#2} {#3} +} +\NewDocumentCommand \DeclareDocumentEnvironment { m +m +m +m } { + \xparse_declare_env:nnnn {#1} {#2} {#3} {#4} +} +\NewDocumentCommand \NewDocumentEnvironment { m +m +m +m } { + \cs_if_exist:cTF { environment_begin_ #1 :w } { + \msg_error:nnx { xparse } { environment-already-defined } {#1} + }{ + \xparse_declare_env:nnnn {#1} {#2} {#3} {#4} + } +} +\NewDocumentCommand \RenewDocumentEnvironment { m +m +m +m } { + \cs_if_exist:cTF { environment_begin_ #1 :w } { + \xparse_declare_env:nnnn {#1} {#2} {#3} {#4} + }{ + \msg_error:nnx { xparse } { environment-not-yet-defined } {#1} + } +} +\NewDocumentCommand \ProvideDocumentEnvironment { m +m +m +m } { + \cs_if_exist:cF { environment_begin_ #1 :w } { + \xparse_declare_env:nnnn {#1} {#2} {#3} {#4} + } +} +\NewDocumentCommand \DeclareExpandableDocumentCommand { +m +m +m } { + \xparse_exp_declare_cmd:Nnn #1 {#2} {#3} +} +\cs_new_eq:NN \IfBooleanTF \bool_if:NTF +\cs_new_eq:NN \IfBooleanT \bool_if:NT +\cs_new_eq:NN \IfBooleanF \bool_if:NF +\cs_new_eq:NN \IfNoValueF \xparse_if_no_value:nF +\cs_new_eq:NN \IfNoValueT \xparse_if_no_value:nT +\cs_new_eq:NN \IfNoValueTF \xparse_if_no_value:nTF +\cs_set:Npn \IfValueF { \xparse_if_no_value:nT } +\cs_set:Npn \IfValueT { \xparse_if_no_value:nF } +\cs_set:Npn \IfValueTF #1#2#3 { + \xparse_if_no_value:nTF {#1} {#3} {#2} +} +\NewDocumentCommand \NoValue { } { -NoValue- } +\endinput +%% +%% End of file `xparse.sty'. diff --git a/Master/texmf-dist/tex/latex/xpackages/xparse.sty b/Master/texmf-dist/tex/latex/xpackages/xparse.sty deleted file mode 100644 index b268d7b0957..00000000000 --- a/Master/texmf-dist/tex/latex/xpackages/xparse.sty +++ /dev/null @@ -1,563 +0,0 @@ -%% -%% This is file `xparse.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% xparse.dtx (with options: `package') -%% -%% (C) Copyright The LaTeX3 Project and any individual authors -%% listed elsewhere in this file. -%% -%% This is a generated file. -%% -%% This file was generated from file(s) of the xbase bundle. -%% --------------------------------------------------------- -%% -%% This file may only be distributed together with a copy of this bundle. -%% You may however distribute the bundle without such generated files. -%% -%% ====================================================================== -%% -%% File: xparse.dtx (C) Copyright 1999 Frank Mittelbach, Chris Rowley, David Carlisle -%% (C) Copyright 2004-2008 Frank Mittelbach, LaTeX3 Project -%% -%% It may be distributed and/or modified under the conditions of the -%% LaTeX Project Public License (LPPL), either version 1.3c of this -%% license or (at your option) any later version. The latest version -%% of this license is in the file -%% -%% http://www.latex-project.org/lppl.txt -%% -%% This file is part of the ``xbase bundle'' (The Work in LPPL) -%% and all files in that bundle must be distributed together. -%% -%% The released version of this bundle is available from CTAN. -%% -%% ----------------------------------------------------------------------- -%% -%% The development version of the bundle can be found at -%% -%% http://www.latex-project.org/cgi-bin/cvsweb.cgi/ -%% -%% for those people who are interested. -%% -%%%%%%%%%%% -%% NOTE: %% -%%%%%%%%%%% -%% -%% Snapshots taken from the repository represent work in progress and may -%% not work or may contain conflicting material! We therefore ask -%% people _not_ to put them into distributions, archives, etc. without -%% prior consultation with the LaTeX Project Team. -%% -%% ----------------------------------------------------------------------- -%% -\RequirePackage{expl3} -\GetIdInfo$Id: xparse.dtx 1365 2009-05-31 17:26:17Z mittelba $ - {generic document command parser} -\ProvidesExplPackage - {\filename}{\filedate}{\fileversion}{\filedescription} -\RequirePackage{expl3} -\cs_new_nopar:Nn \xparse_already_defined_error_msg:N { - \xparse_error:x { - Command~name~`\token_to_str:N #1'~ already~defined! - } -} -\cs_new_nopar:Nn \xparse_not_yet_defined_error_msg:N { - \xparse_error:x { - Command~`\token_to_str:N #1'~ not~ yet~defined! - } -} -\cs_new_nopar:Nn \xparse_begins_with_end_error_msg:N { - \xparse_error:x { - Command~`\token_to_str:N #1'~begins~with~ - `\token_to_str:N \end'! - } -} -\cs_new_nopar:Nn \xparse_unknown_arg_type_error_msg:N { - \xparse_error:x { - Unknown~ argument~ type~ `#1'~ - I'll~ substitute~ it~ with~ `m'~ for~ now.~ Fingers~ crossed... - } -} -\cs_new_nopar:Nn \xparse_no_command_implementation_warning:n { - \xparse_warning:x {No~ implementation~ for~ `#1'~ defined} -} -\cs_new_nopar:Nn \xparse_error:x {\tex_errmessage:D {xparse~error:~#1}} -\cs_new_nopar:Nn \xparse_warning:x {\iow_term:x{xparse~warning:~#1}} -\cs_new_nopar:Npn \xparse_if_definable:NTF #1 { - \cs_if_free:NTF #1 - { - \xparse_begins_with_end:NTF #1 - { \xparse_begins_with_end_error_msg:N #1 \use_ii:nn } - \use_i:nn - } - { \xparse_already_defined_error_msg:N #1 \use_ii:nn } -} -\cs_generate_variant:Nn \xparse_if_definable:NTF {c} -\cs_new_nopar:Npn \xparse_if_redefinable:NTF #1 { - \cs_if_free:NTF #1 - { \xparse_not_yet_defined_error_msg:N #1 \use_ii:nn } - { - \xparse_begins_with_end:NTF #1 - { \xparse_begins_with_end_error_msg:N #1 \use_ii:nn } - \use_i:nn - } -} -\cs_generate_variant:Nn \xparse_if_redefinable:NTF {c} -\cs_new_nopar:Npn \xparse_begins_with_end:NTF #1 { - \group_begin: - \exp_args:Nc \xparse_begins_with_end_aux:N { - \tl_head_iii:f { \cs_to_str:N #1 ??} - } -} -\cs_new_nopar:Nn \xparse_begins_with_end_aux:N { - \if_predicate:w \cs_if_eq_name_p:NN #1 \end - \group_end: - \exp_after:wN \use_i:nn - \else: - \group_end: - \exp_after:wN \use_ii:nn - \fi: -} -\toks_new:N \l_xparse_grabbed_args_toks -\toks_new:N \l_xparse_end_environment_args_toks -\int_new:N \l_xparse_mandatory_args_int -\int_new:N \l_xparse_total_args_int -\cs_set:Nn \xparse_declare_document_command:Nnn { - \xparse_prepare_signature:n {#2} - \cs_set_protected_nopar:Npx #1 { - \exp_not:n { \toks_set:Nn \l_xparse_grabbed_args_toks } - {\exp_not:c {\token_to_str:N #1}} - \toks_use:N \l_xparse_grabbed_args_toks - \exp_not:n{ \toks_use:N \l_xparse_grabbed_args_toks} - } - \cs_generate_from_arg_count:cNnn {\token_to_str:N #1}\cs_set:Npn - \l_xparse_total_args_int{#3} -} -\cs_generate_variant:Nn \xparse_declare_document_command:Nnn {cnn} -\cs_new:Nn \xparse_declare_document_environment:nnnn { - \xparse_declare_document_command:cnn {#1}{#2} - { \group_begin: - \toks_set_eq:NN \l_xparse_end_environment_args_toks - \l_xparse_grabbed_args_toks - #3 - } - \cs_set_eq:cN {end #1} \xparse_parsed_end_environment: - \cs_generate_from_arg_count:cNnn {end \token_to_str:N \\ #1}\cs_set:Npn - \l_xparse_total_args_int{#4} -} -\cs_new_protected_nopar:Nn \xparse_parsed_end_environment: { - \exp_after:wN \xparse_parsed_end_environment_aux:N - \toks_use:N \l_xparse_end_environment_args_toks - \group_end: -} -\cs_new_nopar:Nn \xparse_parsed_end_environment_aux:N { - \use:c {end \token_to_str:N #1 } -} -\cs_new_eq:NN \DeclareDocumentCommand \xparse_declare_document_command:Nnn -\cs_new_nopar:Npn \NewDocumentCommand #1 { - \xparse_if_definable:NTF #1 - { \xparse_declare_document_command:Nnn #1 } - \use_none:nn -} -\cs_new_nopar:Npn \RenewDocumentCommand #1 { - \xparse_if_redefinable:NTF #1 - { \xparse_declare_document_command:Nnn #1 } - \use_none:nn -} -\cs_new_eq:NN \DeclareDocumentEnvironment - \xparse_declare_document_environment:nnnn -\cs_new_nopar:Npn \NewDocumentEnvironment #1 { - \xparse_if_definable:cTF {#1} - { \xparse_declare_document_environment:nnnn {#1} } - \use_none:nnn -} -\cs_new_nopar:Npn \RenewDocumentEnvironment #1 { - \xparse_if_redefinable:cTF {#1} - { \xparse_declare_document_environment:nnnn {#1} } - \use_none:nnn -} -\cs_new_nopar:Npn \ProvideDocumentCommand #1{ - \cs_if_free:NTF #1 - { \DeclareDocumentCommand #1} - \use_none:nn -} -\cs_new_nopar:Npn \ProvideDocumentEnvironment #1{ - \cs_if_free:cTF {#1} - { \DeclareDocumentEnvironment {#1} } - \use_none:nnn -} -\cs_new:Npn \DeclareDocumentCommandInterface #1#2#3{ - \xparse_prepare_signature:n {#3} - \cs_set_protected_nopar:Npx #1 { - \exp_not:n { \toks_set:Nn \l_xparse_grabbed_args_toks } - {\exp_not:c {impl-#2}} - \toks_use:N\l_xparse_grabbed_args_toks - \exp_not:n{ \toks_use:N \l_xparse_grabbed_args_toks} - } - \cs_generate_from_arg_count:cNnn {impl-#2} \cs_set:Npn - \l_xparse_total_args_int - {\xparse_undefined_command_implementation:n{#2}} -} -\cs_new_nopar:Nn \xparse_undefined_command_implementation:n { - ``#1'' - \xparse_no_command_implementation_warning:n {#1} -} -\cs_new:Npn \DeclareDocumentCommandImplementation #1#2#3{ - \cs_generate_from_arg_count:cNnn {impl-#1}\cs_set:Npn {#2}{#3} -} -\cs_new_nopar:Nn \xparse_prepare_signature:n { - \int_zero:N \l_xparse_total_args_int - \toks_clear:N \l_xparse_grabbed_args_toks - \int_zero:N \l_xparse_mandatory_args_int - \bool_gset_false:N \g_xparse_insert_marker_bool - \bool_gset_false:N \g_xparse_allow_par_bool - \tl_gset_eq:NN \g_xparse_ignore_marker_tl - \g_xparse_ignore_spaces_marker_tl - \xparse_parse_signature:n #1 \q_nil -} -\tl_new:Nn \g_xparse_ignore_marker_tl {} -\seq_new:N \g_xparse_ignore_marker_seq -\bool_new:N \g_xparse_insert_marker_bool -\cs_new_nopar:cpn {xparse_add_arg_type_>:} #1 - \xparse_read_arg_type_or_grab_default:n #2{ - \xparse_add_remaining_m_args: - \bool_gset_true:N \g_xparse_insert_marker_bool - \int_decr:N \l_xparse_total_args_int - \tl_map_inline:nn{#2}{ - \xparse_check_and_add_argument_type:N ##1 - } - \xparse_parse_signature:n -} -\cs_new_nopar:Nn \xparse_add_ignore_marker:Nnn { - \tl_new:cn {g_xparse #2 _marker_tl}{#3} - \seq_gpush:Nv \g_xparse_ignore_marker_seq {g_xparse #2 _marker_tl} - \cs_new_nopar:cpn {xparse_add_arg_type_#1:}{ - \tl_gset_eq:Nc \g_xparse_ignore_marker_tl {g_xparse #2 _marker_tl} - } -} -\xparse_add_ignore_marker:Nnn W{_ignore_nothing}{} -\xparse_add_ignore_marker:Nnn i{_ignore_spaces}{_ignore_spaces} -\xparse_add_ignore_marker:Nnn I{_ignore_pars}{_ignore_pars} -\cs_new_nopar:Nn \xparse_add_arg_type_P: { - \bool_gset_true:N \g_xparse_allow_par_bool -} -\bool_new:N \g_xparse_allow_par_bool -\cs_new_nopar:Nn \xparse_parse_signature:n { - \quark_if_nil:NTF #1 - { - \xparse_add_remaining_m_args: - } - { - \int_incr:N \l_xparse_total_args_int - \xparse_check_and_add_argument_type:N #1 - \bool_if:NT \g_xparse_insert_marker_bool - { - \bool_gset_false:N \g_xparse_insert_marker_bool - \bool_gset_false:N \g_xparse_allow_par_bool - \tl_gset_eq:NN \g_xparse_ignore_marker_tl - \g_xparse_ignore_spaces_marker_tl - } - \xparse_read_arg_type_or_grab_default:n - } -} -\cs_new_nopar:Nn \xparse_check_and_add_argument_type:N { - \cs_if_free:cTF {xparse_add_arg_type_#1:} - { \xparse_unknown_arg_type_error_msg:N #1 - \int_incr:N \l_xparse_mandatory_args_int - } - { \use:c {xparse_add_arg_type_#1:} } -} -\cs_new_eq:NN \xparse_read_arg_type_or_grab_default:n - \xparse_parse_signature:n -\cs_new_nopar:Nn \xparse_grab_default_arg:n { - \toks_put_right:Nn \l_xparse_grabbed_args_toks {{#1}} - \cs_set_eq:NN \xparse_read_arg_type_or_grab_default:n - \xparse_parse_signature:n - \xparse_parse_signature:n -} -\cs_new:Nn \xparse_grab_default_arg_allow_par:n { - \toks_put_right:Nn \l_xparse_grabbed_args_toks {{#1}} - \cs_set_eq:NN \xparse_read_arg_type_or_grab_default:n - \xparse_parse_signature:n - \xparse_parse_signature:n -} -\cs_new_nopar:Nn \xparse_add_arg_type_m: { - \bool_if:NTF \g_xparse_allow_par_bool - { - \toks_put_right:Nn \l_xparse_grabbed_args_toks {\xparse_allow_par_m:w} - } - { \int_incr:N \l_xparse_mandatory_args_int } -} -\cs_new_nopar:Nn \xparse_add_remaining_m_args: { - \intexpr_compare:nNnF \l_xparse_mandatory_args_int = \c_zero - { - \toks_put_right:Nx \l_xparse_grabbed_args_toks { - \exp_not:c{xparse_m - \int_use:N \l_xparse_mandatory_args_int - :w } - } - \int_zero:N \l_xparse_mandatory_args_int - } -} -\cs_new_nopar:cpn {xparse_m1:w} #1 \l_xparse_grabbed_args_toks#2{ - \toks_put_right:Nn \l_xparse_grabbed_args_toks{{#2}} - #1 \l_xparse_grabbed_args_toks -} -\cs_new_nopar:cpn {xparse_m2:w} #1 \l_xparse_grabbed_args_toks #2#3{ - \toks_put_right:Nn \l_xparse_grabbed_args_toks{{#2}{#3}} - #1 \l_xparse_grabbed_args_toks -} -\cs_new_nopar:cpn {xparse_m3:w} #1 \l_xparse_grabbed_args_toks #2#3#4{ - \toks_put_right:Nn \l_xparse_grabbed_args_toks{{#2}{#3}{#4}} - #1 \l_xparse_grabbed_args_toks -} -\cs_new_nopar:cpn {xparse_m4:w} #1 \l_xparse_grabbed_args_toks #2#3#4#5{ - \toks_put_right:Nn \l_xparse_grabbed_args_toks{{#2}{#3}{#4}{#5}} - #1 \l_xparse_grabbed_args_toks -} -\cs_new_nopar:cpn {xparse_m5:w} #1 \l_xparse_grabbed_args_toks #2#3#4#5#6{ - \toks_put_right:Nn \l_xparse_grabbed_args_toks{{#2}{#3}{#4}{#5}{#6}} - #1 \l_xparse_grabbed_args_toks -} -\cs_new_nopar:cpn {xparse_m6:w} #1 \l_xparse_grabbed_args_toks #2#3#4#5#6#7{ - \toks_put_right:Nn \l_xparse_grabbed_args_toks - {{#2}{#3}{#4}{#5}{#6}{#7}} - #1 \l_xparse_grabbed_args_toks -} -\cs_new_nopar:cpn {xparse_m7:w} #1 \l_xparse_grabbed_args_toks#2#3#4#5#6#7#8{ - \toks_put_right:Nn \l_xparse_grabbed_args_toks - {{#2}{#3}{#4}{#5}{#6}{#7}{#8}} - #1 \l_xparse_grabbed_args_toks -} -\cs_new_nopar:cpn {xparse_m8:w} #1\l_xparse_grabbed_args_toks - #2#3#4#5#6#7#8#9{ - \toks_put_right:Nn \l_xparse_grabbed_args_toks - {{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}} - #1 \l_xparse_grabbed_args_toks -} -\cs_new_nopar:cpn {xparse_m9:w} \toks_use:N \l_xparse_grabbed_args_toks - #1#2#3#4#5#6#7#8#9{ - \toks_put_right:Nn \l_xparse_grabbed_args_toks - {{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}} - \toks_use:N \l_xparse_grabbed_args_toks -} -\cs_new:Npn \xparse_allow_par_m:w #1 \l_xparse_grabbed_args_toks#2{ - \toks_put_right:Nn \l_xparse_grabbed_args_toks{{#2}} - #1 \l_xparse_grabbed_args_toks -} -\cs_new_nopar:Nn \xparse_add_arg_type_l: { - \xparse_add_remaining_m_args: - \bool_if:NTF \g_xparse_allow_par_bool - { - \toks_put_right:Nn \l_xparse_grabbed_args_toks {\xparse_allow_par_l:w} - } - { \toks_put_right:Nn \l_xparse_grabbed_args_toks {\xparse_l:w} } -} -\cs_new_nopar:Npn \xparse_l:w #1 \l_xparse_grabbed_args_toks#2#{ - \toks_put_right:Nn \l_xparse_grabbed_args_toks{{#2}} - #1 \l_xparse_grabbed_args_toks -} -\cs_new:Npn \xparse_allow_par_l:w #1 \l_xparse_grabbed_args_toks#2#{ - \toks_put_right:Nn \l_xparse_grabbed_args_toks{{#2}} - #1 \l_xparse_grabbed_args_toks -} -\cs_new_nopar:Npn \DeclareSymbolArgument #1#2{ - \seq_map_variable:NNn \g_xparse_ignore_marker_seq \l_tmpa_tl { - \cs_set_nopar:cpx {xparse \l_tmpa_tl _#1:w}##1##2 - \l_xparse_grabbed_args_toks{ - \exp_not:c{peek_ #2 _remove \l_tmpa_tl :NTF} ##1 - { - \exp_not:N \toks_put_right:Nn \exp_not:N - \l_xparse_grabbed_args_toks \exp_not:N \c_true_bool - ##2 \exp_not:N\l_xparse_grabbed_args_toks - } - { - \exp_not:N \toks_put_right:Nn \exp_not:N - \l_xparse_grabbed_args_toks \exp_not:N \c_false_bool - ##2 \exp_not:N\l_xparse_grabbed_args_toks - } - } - } - \cs_set_nopar:cpn {xparse_add_arg_type_#1:} { - \xparse_add_remaining_m_args: - \toks_put_right:Nx \l_xparse_grabbed_args_toks - { \exp_not:c {xparse \g_xparse_ignore_marker_tl _#1:w } } - \cs_set_eq:NN \xparse_read_arg_type_or_grab_default:n - \xparse_grab_default_arg:n - } -} -\DeclareSymbolArgument S{meaning} -\cs_new_nopar:Npn \DeclareArgumentType #1#2#3#4#5#6#7{ - \seq_map_variable:NNn \g_xparse_ignore_marker_seq \l_tmpa_tl { - \cs_set_nopar:cpx {xparse \l_tmpa_tl _#1:w}##1\l_xparse_grabbed_args_toks{ - \exp_not:c{peek_#3 \l_tmpa_tl :NTF} \exp_not:N #2 - { \exp_not:c{xparse_#1_#3_help:nw}{##1} } - { - \exp_not:n { - #4 \toks_put_right:Nn \l_xparse_grabbed_args_toks {#5} - } - ##1 \exp_not:N\l_xparse_grabbed_args_toks - } - } - \cs_set:cpx {xparse_allow_par \l_tmpa_tl _#1:w}##1 - \l_xparse_grabbed_args_toks{ - \exp_not:c{peek_#3 \l_tmpa_tl :NTF} \exp_not:N #2 - { \exp_not:c{xparse_allow_par_#1_#3_help:nw}{##1} } - { - \exp_not:n { - #4 \toks_put_right:Nn \l_xparse_grabbed_args_toks {#5} - } - ##1 \exp_not:N\l_xparse_grabbed_args_toks - } - } - } - \cs_set_nopar:cpn {xparse_add_arg_type_#1:} { - \xparse_add_remaining_m_args: - \toks_put_right:Nx \l_xparse_grabbed_args_toks { - \exp_not:c {xparse - \bool_if:NT \g_xparse_allow_par_bool {_allow_par} - \g_xparse_ignore_marker_tl - _#1:w - } - } - \cs_set_eq:NN \xparse_read_arg_type_or_grab_default:n \xparse_parse_signature:n - } - \xparse_define_helper:Nnnn #1{#3}{#6}{#7} -} -\cs_new_nopar:Npn \DeclareArgumentTypeDefaultValue #1#2#3#4#5{ - \seq_map_variable:NNn \g_xparse_ignore_marker_seq \l_tmpa_tl { - \cs_set_nopar:cpx {xparse \l_tmpa_tl _#1:w}##1##2\l_xparse_grabbed_args_toks{ - \exp_not:c{peek_#3 \l_tmpa_tl :NTF} \exp_not:N #2 - { \exp_not:c{xparse_#1_#3_help:nw}{##2} } - { - \exp_not:N \toks_put_right:Nn - \exp_not:N \l_xparse_grabbed_args_toks {{##1}} - ##2 \exp_not:N \l_xparse_grabbed_args_toks - } - } - \cs_set:cpx {xparse_allow_par \l_tmpa_tl _#1:w}##1##2 - \l_xparse_grabbed_args_toks{ - \exp_not:c{peek_#3 \l_tmpa_tl :NTF} \exp_not:N #2 - { \exp_not:c{xparse_allow_par_#1_#3_help:nw}{##2} } - { - \exp_not:N \toks_put_right:Nn - \exp_not:N \l_xparse_grabbed_args_toks {{##1}} - ##2 \exp_not:N \l_xparse_grabbed_args_toks - } - } - } - \cs_set_nopar:cpn {xparse_add_arg_type_#1:} { - \xparse_add_remaining_m_args: - \toks_put_right:Nx \l_xparse_grabbed_args_toks { - \exp_not:c {xparse - \bool_if:NT \g_xparse_allow_par_bool {_allow_par} - \g_xparse_ignore_marker_tl - _#1:w - } - } - \cs_set_eq:Nc \xparse_read_arg_type_or_grab_default:n - {xparse_grab_default_arg - \bool_if:NT \g_xparse_allow_par_bool {_allow_par} - :n - } - } - \xparse_define_helper:Nnnn #1{#3}{#4}{#5} -} -\cs_new_nopar:Nn \xparse_define_helper:Nnnn { - \toks_set:Nn \l_tmpa_toks - { - #3 - { - \toks_put_right:Nn \l_xparse_grabbed_args_toks {{#4}} - ##1 \l_xparse_grabbed_args_toks - } - } - \toks_set:Nx \l_tmpa_toks { - \exp_not:n {\cs_set_nopar:cpn{xparse_#1_#2_help:nw}} - \toks_use:N \l_tmpa_toks - \exp_not:n {\cs_set_nopar:cpn{xparse_allow_par_#1_#2_help:nw}} - \toks_use:N\l_tmpa_toks - } - \toks_use:N \l_tmpa_toks -} -\DeclareArgumentType o[{meaning}{}{\NoValue}{#1[#2]}{#2} -\DeclareArgumentType c({meaning}{ - \xparse_error:x{ - Missing~ coordinate~ argument.~ A~ value~ of~ (0,0)~ is~ assumed} - } - {{00}} - {#1(#2,#3)}{{#2}{#3}} -\DeclareArgumentTypeDefaultValue O[{meaning}{#1[#2]}{#2} -\DeclareArgumentTypeDefaultValue C({meaning}{#1(#2,#3)}{{#2}{#3}} -\cs_new_nopar:Npn \DeclareArgumentTypeShorthand #1#2{ - \cs_new_nopar:cpn {xparse_add_arg_type_#1:} - ##1 \xparse_read_arg_type_or_grab_default:n { - \int_decr:N \l_xparse_total_args_int - \xparse_read_arg_type_or_grab_default:n #2 - } -} -\DeclareArgumentTypeShorthand s {S{*}} -\cs_new_eq:NN \IfBooleanTF \bool_if:NTF -\cs_new_eq:NN \IfBooleanT \bool_if:NT -\cs_new_eq:NN \IfBooleanF \bool_if:NF -\tl_new:Nn \NoValue {-NoValue-} -\tl_new:Nn \c_xparse_hidden_no_value_tl {\NoValue} -\cs_new:Npn \xparse_if_no_value:nTF #1{ - \tl_set:Nx \l_tmpa_tl{\exp_not:n{#1}} - \tl_if_eq:NNTF \l_tmpa_tl \c_xparse_hidden_no_value_tl - { \use_i:nn } - { \tl_if_blank:nTF {#1} - { \use_ii:nn } - {\peek_after:NN \xparse_if_no_value_aux: #1 \q_nil {#1} } - } -} -\cs_new:Nn \xparse_if_no_value_aux: { - \tl_set:Nx \l_tmpa_tl{\token_get_arg_spec:N \l_peek_token } - \tl_if_empty:NTF \l_tmpa_tl - {\use_i_delimit_by_q_nil:nw {\exp_args:No\xparse_if_no_value:nTF}} - {\use_i_delimit_by_q_nil:nw {\use_iii:nnn}} -} -\cs_new_eq:NN \IfNoValueTF \xparse_if_no_value:nTF -\cs_new:Npn \IfNoValueT #1#2 {\xparse_if_no_value:nTF{#1}{#2}{}} -\cs_new:Npn \IfNoValueF #1 {\xparse_if_no_value:nTF {#1}{}} -\cs_new:Npn \IfValueTF #1#2#3{\xparse_if_no_value:nTF {#1}{#3}{#2}} -\cs_new_eq:NN \IfValueT \IfNoValueF -\cs_new_eq:NN \IfValueF \IfNoValueT -\tl_new:Nn \l_xparse_pseudo_post_arg_tl {} -\cs_new:Npn \DeclarePseudoArgument #1#2#3#4{ - \cs_set:cn {xparse_pseudo_pre_arg_#1:\prg_replicate:nn{#2}{n}} {#3} - \cs_set:cn {xparse_pseudo_post_arg_#1:\prg_replicate:nn{#2}{n}} {#4} - \cs_set_nopar:cn {xparse_pseudo_nobrace_arg_#1:N} { - ##1 \l_xparse_pseudo_post_arg_tl - } - \cs_generate_from_arg_count:cNnn {xparse_pseudo_arg_#1:w} - \cs_set:Npx {#2} - { - \exp_not:c { - xparse_pseudo_pre_arg_#1: \prg_replicate:nn{#2}{n} - } - \use:c{use_ \intexpr_eval:n{#2} _parameter:} - \exp_not:n {\tl_set:Nn \l_xparse_pseudo_post_arg_tl} - { - \exp_not:c {xparse_pseudo_post_arg_#1:\prg_replicate:nn{#2}{n}} - \use:c{use_ \intexpr_eval:n{#2}_parameter:} - } - \exp_not:n{ \peek_catcode_remove_ignore_spaces:NTF \c_group_begin_token } - { - \exp_not:n { - \c_group_begin_token - \group_execute_after:N \l_xparse_pseudo_post_arg_tl - } - } - { - \exp_not:c{xparse_pseudo_nobrace_arg_#1:N} - } - } -} -\cs_new_nopar:Npn \UsePseudoArgument #1{\use:c{xparse_pseudo_arg_#1:w}} -\endinput -%% -%% End of file `xparse.sty'. diff --git a/Master/texmf-dist/tex/latex/xpackages/xtras/l3keys2e.sty b/Master/texmf-dist/tex/latex/xpackages/xtras/l3keys2e.sty new file mode 100644 index 00000000000..67e67fe285a --- /dev/null +++ b/Master/texmf-dist/tex/latex/xpackages/xtras/l3keys2e.sty @@ -0,0 +1,117 @@ +%% +%% This is file `l3keys2e.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% l3keys2e.dtx (with options: `package') +%% ---------------------------------------------------------------- +%% l3keys2e --- Parsing LaTeX3 keyvals as LaTeX2e package options +%% Copyright 2009 The LaTeX3 Project +%% Released under the LaTeX Project Public License v1.3c or later +%% See http://www.latex-project.org/lppl.txt +%% ---------------------------------------------------------------- +%% File: l3keys2e.dtx (C) Copyright 2009 LaTeX3 Project +%% +%% It may be distributed and/or modified under the conditions of the +%% LaTeX Project Public License (LPPL), either version 1.3c of this +%% license or (at your option) any later version. The latest version +%% of this license is in the file +%% +%% http://www.latex-project.org/lppl.txt +%% +%% This file is part of the ``l3keys2e'' (The Work in LPPL) +%% and all files in that bundle must be distributed together. +%% +%% The released version of this bundle is available from CTAN. +%% +%% ----------------------------------------------------------------------- +%% +%% The development version of the bundle can be found at +%% +%% http://www.latex-project.org/svnroot/experimental/trunk/ +%% +%% for those people who are interested. +%% +%%%%%%%%%%% +%% NOTE: %% +%%%%%%%%%%% +%% +%% Snapshots taken from the repository represent work in progress and may +%% not work or may contain conflicting material! We therefore ask +%% people _not_ to put them into distributions, archives, etc. without +%% prior consultation with the LaTeX Project Team. +%% +%% ----------------------------------------------------------------------- +%% +\RequirePackage{l3names} +\GetIdInfo$Id: l3keys2e.dtx 1494 2009-08-24 11:05:44Z joseph $ + {Parsing LaTeX3 keyvals as LaTeX2e package options} +\ProvidesExplPackage + {\filename}{\filedate}{\fileversion}{\filedescription} +\RequirePackage{xparse} +\clist_new:N \keys_latexe_options_clist +\cs_new:Nn \keys_latexe_options:n { + \clist_clear:N \keys_latexe_options_clist + \keys_latexe_options_global:n {#1} + \keys_latexe_options_local: + \keys_if_exist:nnF {#1} { unknown } { + \keys_define:nn {#1} { + unknown .code:n = { + \msg_warning:nnxx { Option~Processing } { unknown-option } + { \l_keys_key_tl } { \@currname } + } + } + } + \keys_set:nV {#1} \keys_latexe_options_clist + \AtEndOfPackage { \cs_set_eq:NN \@unprocessedoptions \scan_stop: } +} +\msg_new:nnn { Option~Processing } { unknown-option } {% + Unknown~option~`#1'\\% + for~module~#2.% +} +\cs_new:Nn \keys_latexe_options_global:n { + \cs_if_eq:NNF \@classoptionslist \scan_stop: { + \cs_if_eq:NNTF \@currext \@clsextension { + \keys_latexe_options_class:n {#1} + }{ + \keys_latexe_options_package:n {#1} + } + } +} +\cs_new:Nn \keys_latexe_options_class:n { + \clist_map_inline:Nn \@classoptionslist { + \keys_if_exist:nnTF {#1} { \keys_latexe_remove_equals:n {##1} } { + \clist_put_right:Nn \keys_latexe_options_clist {##1} + }{ + \clist_put_right:Nn \@unusedoptionlist {##1} + } + } +} +\cs_new:Nn \keys_latexe_options_package:n { + \clist_map_inline:Nn \@classoptionslist { + \keys_if_exist:nnT {#1} { \keys_latexe_remove_equals:n {##1} } { + \clist_put_right:Nn \keys_latexe_options_clist {##1} + \clist_remove_element:Nn \@unusedoptionlist {##1} + } + } +} +\cs_new_nopar:Nn \keys_latexe_options_local: { + \cs_if_eq:NNF \@currext \@clsextension { + \cs_if_exist:cT { opt@ \@currname . \@currext } { + \exp_args:NNc \clist_put_right:NV \keys_latexe_options_clist + { opt@ \@currname . \@currext } + } + } +} +\cs_new:Nn \keys_latexe_remove_equals:n { + \keys_latexe_remove_equals:w #1 = \q_stop +} +\cs_new:Npn \keys_latexe_remove_equals:w #1 = #2 \q_stop {#1} +\NewDocumentCommand \ProcessKeysOptions { m } { + \keys_latexe_options:n {#1} +} +\@onlypreamble \ProcessKeysOptions +\endinput +%% +%% End of file `l3keys2e.sty'. |