diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex-dev')
132 files changed, 5947 insertions, 2974 deletions
diff --git a/Master/texmf-dist/tex/latex-dev/amsmath/amsmath.sty b/Master/texmf-dist/tex/latex-dev/amsmath/amsmath.sty index 63f578290a7..4e3165add6a 100644 --- a/Master/texmf-dist/tex/latex-dev/amsmath/amsmath.sty +++ b/Master/texmf-dist/tex/latex-dev/amsmath/amsmath.sty @@ -26,7 +26,7 @@ \DeclareRelease{}{1994-06-01}{amsmath-2018-12-01.sty} \DeclareRelease{}{2018-12-01}{amsmath-2018-12-01.sty} \DeclareCurrentRelease{}{2019-04-01} -\ProvidesPackage{amsmath}[2024/05/23 v2.17q AMS math features] +\ProvidesPackage{amsmath}[2024/11/05 v2.17t AMS math features] \edef\@temp{\catcode 96=\number\catcode 96 } \catcode\string `\`=12 \def\do#1{\catcode\number`#1=\number\catcode`#1} diff --git a/Master/texmf-dist/tex/latex-dev/base/alltt.sty b/Master/texmf-dist/tex/latex-dev/base/alltt.sty index 78c5e6a9241..2cbaf54abb0 100644 --- a/Master/texmf-dist/tex/latex-dev/base/alltt.sty +++ b/Master/texmf-dist/tex/latex-dev/base/alltt.sty @@ -49,7 +49,7 @@ %% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{alltt} - [2024/02/08 v2.0g defines alltt environment] + [2024/07/07 v2.0g defines alltt environment] \begingroup \lccode`\~=`\' \lowercase{\endgroup diff --git a/Master/texmf-dist/tex/latex-dev/base/article.cls b/Master/texmf-dist/tex/latex-dev/base/article.cls index 869bdc0db41..0dcb9da0226 100644 --- a/Master/texmf-dist/tex/latex-dev/base/article.cls +++ b/Master/texmf-dist/tex/latex-dev/base/article.cls @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesClass{article} - [2024/02/08 v1.4n + [2024/06/29 v1.4n Standard LaTeX document class] \newcommand\@ptsize{} \newif\if@restonecol diff --git a/Master/texmf-dist/tex/latex-dev/base/bk10.clo b/Master/texmf-dist/tex/latex-dev/base/bk10.clo index ba4701bead9..958c45b467e 100644 --- a/Master/texmf-dist/tex/latex-dev/base/bk10.clo +++ b/Master/texmf-dist/tex/latex-dev/base/bk10.clo @@ -42,7 +42,7 @@ %% and covered by LPPL is defined by the unpacking scripts (with %% extension .ins) which are part of the distribution. \ProvidesFile{bk10.clo} - [2024/02/08 v1.4n + [2024/06/29 v1.4n Standard LaTeX file (size option)] \renewcommand\normalsize{% \@setfontsize\normalsize\@xpt\@xiipt diff --git a/Master/texmf-dist/tex/latex-dev/base/bk11.clo b/Master/texmf-dist/tex/latex-dev/base/bk11.clo index c0a4a4420f1..cbcbd0dae62 100644 --- a/Master/texmf-dist/tex/latex-dev/base/bk11.clo +++ b/Master/texmf-dist/tex/latex-dev/base/bk11.clo @@ -42,7 +42,7 @@ %% and covered by LPPL is defined by the unpacking scripts (with %% extension .ins) which are part of the distribution. \ProvidesFile{bk11.clo} - [2024/02/08 v1.4n + [2024/06/29 v1.4n Standard LaTeX file (size option)] \renewcommand\normalsize{% \@setfontsize\normalsize\@xipt{13.6}% diff --git a/Master/texmf-dist/tex/latex-dev/base/bk12.clo b/Master/texmf-dist/tex/latex-dev/base/bk12.clo index c4a5e3c2457..ccdb40f6d42 100644 --- a/Master/texmf-dist/tex/latex-dev/base/bk12.clo +++ b/Master/texmf-dist/tex/latex-dev/base/bk12.clo @@ -42,7 +42,7 @@ %% and covered by LPPL is defined by the unpacking scripts (with %% extension .ins) which are part of the distribution. \ProvidesFile{bk12.clo} - [2024/02/08 v1.4n + [2024/06/29 v1.4n Standard LaTeX file (size option)] \renewcommand\normalsize{% \@setfontsize\normalsize\@xiipt{14.5}% diff --git a/Master/texmf-dist/tex/latex-dev/base/book.cls b/Master/texmf-dist/tex/latex-dev/base/book.cls index 2838b7f1ce3..e73e83ea3c0 100644 --- a/Master/texmf-dist/tex/latex-dev/base/book.cls +++ b/Master/texmf-dist/tex/latex-dev/base/book.cls @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesClass{book} - [2024/02/08 v1.4n + [2024/06/29 v1.4n Standard LaTeX document class] \newcommand\@ptsize{} \newif\if@restonecol diff --git a/Master/texmf-dist/tex/latex-dev/base/checkencodingsubset.tex b/Master/texmf-dist/tex/latex-dev/base/checkencodingsubset.tex index 02410ad693a..54663361c3d 100644 --- a/Master/texmf-dist/tex/latex-dev/base/checkencodingsubset.tex +++ b/Master/texmf-dist/tex/latex-dev/base/checkencodingsubset.tex @@ -42,8 +42,8 @@ %% and covered by LPPL is defined by the unpacking scripts (with %% extension .ins) which are part of the distribution. %%% From File: lttextcomp.dtx -\Providesfile{checkencodingsubset.tex} - [2024/01/27 v0.5a Figure out safe TS1 encoding subsets] +\ProvidesFile{checkencodingsubset.tex} + [2024/10/18 v0.5b Figure out safe TS1 encoding subsets] \let\typeoutdetails\typeout \def\doesglyphexist#1#2{\iffontchar\testFont #1 0\else 1\relax \fi} \def\glyphmissingdetails#1#2{\iffontchar\testFont #1 \else diff --git a/Master/texmf-dist/tex/latex-dev/base/doc.sty b/Master/texmf-dist/tex/latex-dev/base/doc.sty index 16b0fbc897d..31930d29767 100644 --- a/Master/texmf-dist/tex/latex-dev/base/doc.sty +++ b/Master/texmf-dist/tex/latex-dev/base/doc.sty @@ -52,7 +52,7 @@ \DeclareCurrentRelease{v3}{2022-06-01} \ProvidesPackage{doc} - [2024/06/04 v3.0q + [2024/10/23 v3.0q Standard LaTeX documentation package V3 (FMi)] %% %% Package `doc' to use with LaTeX 2e diff --git a/Master/texmf-dist/tex/latex-dev/base/flafter.sty b/Master/texmf-dist/tex/latex-dev/base/flafter.sty index b1ec0552512..ca332b7b16b 100644 --- a/Master/texmf-dist/tex/latex-dev/base/flafter.sty +++ b/Master/texmf-dist/tex/latex-dev/base/flafter.sty @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. %%% From File: ltoutput.dtx \ProvidesPackage{flafter} - [2021/07/31 v1.4e + [2024/11/16 v1.4k Standard LaTeX floats after reference (FMi)] \IncludeInRelease{2015/01/01}% {\@addtocurcol}{float order in 2-column}% diff --git a/Master/texmf-dist/tex/latex-dev/base/fltrace.sty b/Master/texmf-dist/tex/latex-dev/base/fltrace.sty index f372c6da667..17adc6c4771 100644 --- a/Master/texmf-dist/tex/latex-dev/base/fltrace.sty +++ b/Master/texmf-dist/tex/latex-dev/base/fltrace.sty @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. %%% From File: ltoutput.dtx \ProvidesPackage{fltrace} - [2021/07/31 v1.4e + [2024/11/16 v1.4k Tracing LaTeX floats algorithm (FMi)] \def\onecolumn{% \clearpage @@ -1130,13 +1130,41 @@ \fi } \EndIncludeInRelease +\IncludeInRelease{2025/06/01}% + {\@outputdblcol}{Use new mark mechanism}% +\def\@outputdblcol{% + \if@firstcolumn + \global\@firstcolumnfalse + \global\setbox\@leftcolumn\copy\@outputbox + \fl@trace{PAGE: first column boxed}% + \else + \global\@firstcolumntrue + \setbox\@outputbox\vbox{% + \hb@xt@\textwidth{% + \hb@xt@\columnwidth{\box\@leftcolumn \hss}% + \hfil + {\normalcolor\vrule \@width\columnseprule}% + \hfil + \hb@xt@\columnwidth{\box\@outputbox \hss}}}% + \fl@trace{PAGE: second column also boxed}% + \@combinedblfloats + \@outputpage + \fl@trace{PAGE: two column page completed}% + \begingroup + \@dblfloatplacement + \@startdblcolumn + \@whilesw\if@fcolmade \fi{\@outputpage + \fl@trace{PAGE: double float page completed}% + \@startdblcolumn}% + \endgroup + \fi}% +\EndIncludeInRelease \IncludeInRelease{2015/01/01}% {\@outputdblcol}{2 column marks}% \def\@outputdblcol{% \if@firstcolumn \global\@firstcolumnfalse \global\setbox\@leftcolumn\copy\@outputbox - \fl@trace{PAGE: first column boxed}% \splitmaxdepth\maxdimen \vbadness\maxdimen \setbox\@outputbox\vbox{\unvbox\@outputbox\unskip}% @@ -1161,19 +1189,16 @@ {\normalcolor\vrule \@width\columnseprule}% \hfil \hb@xt@\columnwidth{\box\@outputbox \hss}}}% - \fl@trace{PAGE: second column also boxed}% \@combinedblfloats \@setmarks \@outputpage - \fl@trace{PAGE: two column page completed}% \begingroup \@dblfloatplacement \@startdblcolumn \@whilesw\if@fcolmade \fi{\@outputpage - \fl@trace{PAGE: double float page completed}% \@startdblcolumn}% \endgroup - \fi}% + \fi} \EndIncludeInRelease \IncludeInRelease{0000/00/00}% {\@outputdblcol}{2 column marks}% diff --git a/Master/texmf-dist/tex/latex-dev/base/fontenc.sty b/Master/texmf-dist/tex/latex-dev/base/fontenc.sty index 0eb19b6f6a0..51c2f7df284 100644 --- a/Master/texmf-dist/tex/latex-dev/base/fontenc.sty +++ b/Master/texmf-dist/tex/latex-dev/base/fontenc.sty @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. %%% From File: ltoutenc.dtx \ProvidesPackage{fontenc} - [2021/04/29 v2.0v + [2024/11/06 v2.1b Standard LaTeX package] \def\update@uclc@with@cyrillic{% \expandafter\def\expandafter\@uclclist\expandafter diff --git a/Master/texmf-dist/tex/latex-dev/base/fontmath.cfg b/Master/texmf-dist/tex/latex-dev/base/fontmath.cfg index eca079d15b3..0edfc33f6fe 100644 --- a/Master/texmf-dist/tex/latex-dev/base/fontmath.cfg +++ b/Master/texmf-dist/tex/latex-dev/base/fontmath.cfg @@ -37,7 +37,7 @@ %% %%% From File: fontdef.dtx \ProvidesFile{fontmath.cfg} - [2024/02/09 v3.0i LaTeX Kernel + [2024/11/19 v3.0l LaTeX Kernel (Uncustomized math font setup) ] %% diff --git a/Master/texmf-dist/tex/latex-dev/base/fontmath.ltx b/Master/texmf-dist/tex/latex-dev/base/fontmath.ltx index a7dd9cc44ad..c4a7d49a36e 100644 --- a/Master/texmf-dist/tex/latex-dev/base/fontmath.ltx +++ b/Master/texmf-dist/tex/latex-dev/base/fontmath.ltx @@ -37,7 +37,7 @@ %% %%% From File: fontdef.dtx \ProvidesFile{fontmath.ltx} - [2024/02/09 v3.0i LaTeX Kernel + [2024/11/19 v3.0l LaTeX Kernel (Math font setup) ] \typeout{=== Don't modify this file, use a .cfg file instead ===^^J} diff --git a/Master/texmf-dist/tex/latex-dev/base/fonttext.cfg b/Master/texmf-dist/tex/latex-dev/base/fonttext.cfg index b37c4407d63..dffaf71b43d 100644 --- a/Master/texmf-dist/tex/latex-dev/base/fonttext.cfg +++ b/Master/texmf-dist/tex/latex-dev/base/fonttext.cfg @@ -37,7 +37,7 @@ %% %%% From File: fontdef.dtx \ProvidesFile{fonttext.cfg} - [2024/02/09 v3.0i LaTeX Kernel + [2024/11/19 v3.0l LaTeX Kernel (Uncustomized text font setup) ] %% diff --git a/Master/texmf-dist/tex/latex-dev/base/fonttext.ltx b/Master/texmf-dist/tex/latex-dev/base/fonttext.ltx index ec6ce8ed910..06eb08221ae 100644 --- a/Master/texmf-dist/tex/latex-dev/base/fonttext.ltx +++ b/Master/texmf-dist/tex/latex-dev/base/fonttext.ltx @@ -37,7 +37,7 @@ %% %%% From File: fontdef.dtx \ProvidesFile{fonttext.ltx} - [2024/02/09 v3.0i LaTeX Kernel + [2024/11/19 v3.0l LaTeX Kernel (Text font setup) ] \typeout{=== Don't modify this file, use a .cfg file instead ===^^J} @@ -45,7 +45,7 @@ \input {omsenc.def} \input {ot1enc.def} \input {t1enc.def} -\input{ts1enc.def} +\input {ts1enc.def} \ifx\Umathcode\@undefined \fontencoding{OT1} \def\@fontenc@load@list{\@elt{T1,OT1}} @@ -68,17 +68,20 @@ \DeclareFontSubstitution{TU}{lmr}{m}{n} \fi \DeclareFontEncodingDefaults{}{} -\DeclareFontSubstitution{T1}{cmr}{m}{n} -\DeclareFontSubstitution{OT1}{cmr}{m}{n} \begingroup \nfss@catcodes \input {t1cmr.fd} \input {ot1cmr.fd} +\input {ts1cmr.fd} \endgroup \begingroup \nfss@catcodes +\input {t1cmss.fd} +\input {t1cmtt.fd} \input {ot1cmss.fd} \input {ot1cmtt.fd} +\input {ts1cmss.fd} +\input {ts1cmtt.fd} \endgroup \DeclareErrorFont{OT1}{cmr}{m}{n}{10} \ifx\Umathcode\@undefined diff --git a/Master/texmf-dist/tex/latex-dev/base/latex.ltx b/Master/texmf-dist/tex/latex-dev/base/latex.ltx index 66ee8826d2a..eeaba260833 100644 --- a/Master/texmf-dist/tex/latex-dev/base/latex.ltx +++ b/Master/texmf-dist/tex/latex-dev/base/latex.ltx @@ -128,7 +128,7 @@ \newlinechar`\^^J \def\typeout{\immediate\write17} \def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&% - \do\#\do\^\do\_\do\%\do\~} + \do\#\do\^\do\_\do\%\do\~\do\^^I} \def\@makeother#1{\catcode`#1=12\relax} \def\space{ } \def\@tempswafalse{\let\if@tempswa\iffalse} @@ -316,7 +316,7 @@ \catcode`\^^L=\active \def^^L{\par}% ascii form-feed is \par \message{catcodes,} \def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&% - \do\#\do\^\do\_\do\%\do\~} + \do\#\do\^\do\_\do\%\do\~\do\^^I} \catcode`@=11 \chardef\@ne=1 \chardef\tw@=2 @@ -709,8 +709,8 @@ %%% From File: ltvers.dtx \def\fmtname{LaTeX2e} \edef\fmtversion - {2024-11-01} -\def\patch@level{1} + {2025-06-01} +\def\patch@level{-1} \edef\development@branch@name{develop \the\year-\the\month-\the\day} \iffalse \def\reserved@a#1/#2/#3\@nil{% @@ -1811,8 +1811,8 @@ \xdef#1{\the\toks@}% \endgroup} %%% From File: ltcmd.dtx -\def\ltcmdversion{v1.2e} -\def\ltcmddate{2024-04-17} +\def\ltcmdversion{v1.2f} +\def\ltcmddate{2024-07-06} \message{document commands,} \ExplSyntaxOn \tl_new:N \l__cmd_arg_spec_tl @@ -2030,23 +2030,15 @@ } \cs_new_protected:Npn \__cmd_declare_env:nnnn #1#2 { - \str_set:Nx \l__cmd_environment_str {#1} - \str_set:Nx \l__cmd_environment_str - { \tl_trim_spaces:o { \l__cmd_environment_str } } - \cs_if_exist:cTF { \l__cmd_environment_str } - { - \msg_info:nnxx { cmd } { redefine-env } - { \l__cmd_environment_str } { \tl_to_str:n {#2} } - } - { - \msg_info:nnxx { cmd } { define-env } - { \l__cmd_environment_str } { \tl_to_str:n {#2} } - } + \str_set:Nn \l__cmd_environment_str {#1} + \cs_if_exist:cTF { #1 } + { \msg_info:nnnn { cmd } { redefine-env } { #1 } { #2 } } + { \msg_info:nnnn { cmd } { define-env } { #1 } { #2 } } \bool_set_false:N \l__cmd_expandable_bool \bool_set_true:N \l__cmd_environment_bool - \exp_args:NV \__cmd_declare_env_internal:nnnn - \l__cmd_environment_str {#2} + \__cmd_declare_env_internal:nnnn {#1} {#2} } +\cs_generate_variant:Nn \__cmd_declare_env:nnnn { e } \cs_new_protected:Npn \__cmd_declare_env_internal:nnnn #1#2#3#4 { \exp_args:Nc \__cmd_declare_cmd_internal:Nnnn { environment~ #1 } {#2} @@ -4556,24 +4548,54 @@ } \cs_new_protected:Npn \NewDocumentEnvironment #1#2#3#4 { + \__cmd_new_env:ennn { \tl_trim_spaces:e {#1} } {#2} {#3} {#4} + } +\cs_new_protected:Npn \RenewDocumentEnvironment #1#2#3#4 + { + \__cmd_renew_env:ennn { \tl_trim_spaces:e {#1} } {#2} {#3} {#4} + } +\cs_new_protected:Npn \ProvideDocumentEnvironment #1#2#3#4 + { + \__cmd_provide_env:ennn { \tl_trim_spaces:e {#1} } {#2} {#3} {#4} + } +\cs_new_protected:Npn \DeclareDocumentEnvironment #1#2#3#4 + { + \__cmd_declare_env:ennn { \tl_trim_spaces:e {#1} } {#2} {#3} {#4} + } +\cs_new_protected:Npn \__cmd_new_env:nnnn #1 + { \cs_if_exist:cTF {#1} - { \msg_error:nnx { cmd } { env-already-defined } {#1} } + { + \msg_error:nnx { cmd } { env-already-defined } {#1} + \use_none:nnn + } { \cs_if_exist:cTF { end #1 } - { \msg_error:nnx { cmd } { env-end-already-defined } {#1} } - { \__cmd_declare_env:nnnn {#1} {#2} {#3} {#4} } + { + \msg_error:nnx { cmd } { env-end-already-defined } {#1} + \use_none:nnn + } + { \__cmd_declare_env:nnnn {#1} } } } -\cs_new_protected:Npn \RenewDocumentEnvironment #1#2#3#4 +\cs_new_protected:Npn \__cmd_renew_env:nnnn #1 { \cs_if_exist:cTF {#1} - { \__cmd_declare_env:nnnn {#1} {#2} {#3} {#4} } - { \msg_error:nnx { cmd } { env-undefined } {#1} } + { \__cmd_declare_env:nnnn {#1} } + { + \msg_error:nnx { cmd } { env-undefined } {#1} + \use_none:nnn + } } -\cs_new_protected:Npn \ProvideDocumentEnvironment #1#2#3#4 - { \cs_if_exist:cF {#1} { \__cmd_declare_env:nnnn {#1} {#2} {#3} {#4} } } -\cs_new_protected:Npn \DeclareDocumentEnvironment #1#2#3#4 - { \__cmd_declare_env:nnnn {#1} {#2} {#3} {#4} } +\cs_new_protected:Npn \__cmd_provide_env:nnnn #1 + { + \cs_if_exist:cTF {#1} + { \use_none:nnn } + { \__cmd_declare_env:nnnn {#1} } + } +\cs_generate_variant:Nn \__cmd_new_env:nnnn { e } +\cs_generate_variant:Nn \__cmd_renew_env:nnnn { e } +\cs_generate_variant:Nn \__cmd_provide_env:nnnn { e } \cs_new_protected:Npn \NewExpandableDocumentCommand #1#2#3 { \__cmd_check_definable:nNT {#1} \NewExpandableDocumentCommand @@ -4842,17 +4864,19 @@ } } } -\cs_new:Npn \__hook_parse_label_default:n #1 +\cs_new:Npn \__hook_parse_label_default:nN #1#2 { \tl_if_novalue:nTF {#1} { \__hook_currname_or_default: } - { \tl_trim_spaces_apply:nN {#1} \__hook_parse_dot_label:n } + { \tl_trim_spaces_apply:nN {#1} \__hook_parse_dot_label:nN #2 } } -\cs_new:Npn \__hook_parse_dot_label:n #1 +\cs_new:Npn \__hook_parse_dot_label:nN #1#2 { \tl_if_empty:nTF {#1} { - \msg_expandable_error:nn { hooks } { empty-label } + \bool_if:NTF #2 + { \msg_expandable_error:nn { hooks } { empty-label } } + { \msg_expandable_error:nn { hooks } { empty-hook } } \__hook_currname_or_default: } { @@ -4907,24 +4931,24 @@ \cs_new_protected:Npn \__hook_normalize_hook_args:Nn #1 #2 { \__hook_normalize_hook_args_aux:Nn #1 - { { \__hook_parse_label_default:n {#2} } } + { { \__hook_parse_label_default:nN {#2} \c_false_bool } } } \cs_new_protected:Npn \__hook_normalize_hook_args:Nnn #1 #2 #3 { \__hook_normalize_hook_args_aux:Nn #1 { - { \__hook_parse_label_default:n {#2} } - { \__hook_parse_label_default:n {#3} } + { \__hook_parse_label_default:nN {#2} \c_false_bool } + { \__hook_parse_label_default:nN {#3} \c_true_bool } } } \cs_new_protected:Npn \__hook_normalize_hook_rule_args:Nnnnn #1 #2 #3 #4 #5 { \__hook_normalize_hook_args_aux:Nn #1 { - { \__hook_parse_label_default:n {#2} } - { \__hook_parse_label_default:n {#3} } + { \__hook_parse_label_default:nN {#2} \c_false_bool } + { \__hook_parse_label_default:nN {#3} \c_true_bool } { \tl_trim_spaces:n {#4} } - { \__hook_parse_label_default:n {#5} } + { \__hook_parse_label_default:nN {#5} \c_true_bool } } } \tl_gset:Nn \g__hook_hook_curr_name_tl { top-level } @@ -5789,7 +5813,9 @@ { #2 { The~hook~is~empty } } { \__hook_log_line:x { Code~chunks: } - \prop_if_empty:cTF { g__hook_#1_code_prop } + \bool_lazy_or:nnTF + { ! \prop_if_exist_p:c { g__hook_#1_code_prop } } + { \prop_if_empty_p:c { g__hook_#1_code_prop } } { \__hook_log_line_indent:x { --- } } { \prop_map_inline:cn { g__hook_#1_code_prop } @@ -5884,16 +5910,19 @@ } \cs_new_protected:Npn \__hook_list_rules:nn #1 #2 { - \cs_set_protected:Npn \__hook_tmp:w ##1 ##2 ##3 {#2} - \prop_map_inline:cn { g__hook_#1_code_prop } + \prop_if_exist:cT { g__hook_#1_code_prop } { + \cs_set_protected:Npn \__hook_tmp:w ##1 ##2 ##3 {#2} \prop_map_inline:cn { g__hook_#1_code_prop } { - \__hook_if_label_case:nnnnn {##1} {####1} - { \prop_map_break: } - { \__hook_list_one_rule:nnn {##1} {####1} } - { \__hook_list_one_rule:nnn {####1} {##1} } - {#1} + \prop_map_inline:cn { g__hook_#1_code_prop } + { + \__hook_if_label_case:nnnnn {##1} {####1} + { \prop_map_break: } + { \__hook_list_one_rule:nnn {##1} {####1} } + { \__hook_list_one_rule:nnn {####1} {##1} } + {#1} + } } } } @@ -6220,6 +6249,10 @@ Empty~code~label~\msg_line_context:.~ Using~'\__hook_currname_or_default:'~instead. } +\msg_new:nnn { hooks } { empty-hook } + { + Empty~hook~name~\msg_line_context:. + } \msg_new:nnn { hooks } { no-default-label } { Missing~(empty)~default~label~\msg_line_context:. \\ @@ -6358,6 +6391,8 @@ \NewDocumentCommand \ClearHookRule { m m m } { \hook_gset_rule:nnnn {#1}{#2}{unrelated}{#3} } \cs_new_eq:NN \IfHookEmptyTF \hook_if_empty:nTF +\cs_new_eq:NN \IfHookEmptyT \hook_if_empty:nT +\cs_new_eq:NN \IfHookEmptyF \hook_if_empty:nF \cs_new_eq:NN \IfHookExistsTF \__hook_if_usable:nTF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \cs_new_protected:Npn \hook_disable:n @@ -6957,7 +6992,7 @@ { \cs_generate_from_arg_count:cNnn { __socket_#1_plug_#2:w } - \cs_new_protected:Npn + \cs_new:Npn { \int_use:c { c__socket_#1_args_int } } {#3} \seq_put_right:cn { l__socket_#1_plugs_seq } {#2} @@ -6976,7 +7011,7 @@ { \cs_generate_from_arg_count:cNnn { __socket_#1_plug_#2:w } - \cs_set_protected:Npn + \cs_set:Npn { \int_use:c { c__socket_#1_args_int } } {#3} \__socket_debug_term:n @@ -7016,6 +7051,10 @@ \cs_new_eq:NN \socket_use:nn \socket_use:nw % socket with one input \cs_new_eq:NN \socket_use:nnn \socket_use:nw % socket with two inputs \cs_new_eq:NN \socket_use:nnnn \socket_use:nw % socket with three inputs +\cs_new:Npn \socket_use_expandable:nw #1 { + \use:c { __socket_#1_plug_ \str_use:c { l__socket_#1_plug_str } :w } +} +\cs_new_eq:NN \socket_use_expandable:n \socket_use_expandable:nw % socket with no inputs \msg_new:nnnn { socket } { already-declared } { Socket~ '#1'~ already~ declared! } @@ -7890,23 +7929,33 @@ } \cs_new_protected:Npn \__template_assign_variable: { - \__template_assign_variable:c + \exp_args:Ne \__template_assign_variable:n { - \__template_map_var_type: _ - \bool_if:NT \l__template_global_bool { g } set:Nn + \__template_map_var_type: + _ + \bool_if:NT \l__template_global_bool { g } + set:N } } -\cs_new_protected:Npn \__template_assign_variable:N #1 +\cs_new_protected:Npn \__template_assign_variable:n #1 { - \__template_if_key_value:VT \l__template_value_tl - { \__template_key_to_value: } - \tl_put_right:Ne \l__template_assignments_tl + \__template_if_key_value:VTF \l__template_value_tl + { + \__template_key_to_value: + \tl_put_right:Ne \l__template_assignments_tl + { + \exp_not:c { #1 V } \exp_not:V \l__template_var_tl + \exp_not:V \l__template_value_tl + } + } { - #1 \exp_not:V \l__template_var_tl - { \exp_not:V \l__template_value_tl } + \tl_put_right:Ne \l__template_assignments_tl + { + \exp_not:c { #1 n } \exp_not:V \l__template_var_tl + { \exp_not:V \l__template_value_tl } + } } } -\cs_generate_variant:Nn \__template_assign_variable:N { c } \cs_new_protected:Npn \__template_key_to_value: { \exp_after:wN \__template_key_to_value_auxi:w \l__template_value_tl } \cs_new_protected:Npn \__template_key_to_value_auxi:w \KeyValue #1 @@ -8524,6 +8573,8 @@ Type H <return> for immediate help.}% \@latex@error{% Bad \protect\line\space or \protect\vector \space argument}\@ehb} +\gdef\@LRmoderr{% + \@latex@error{Not allowed in LR mode}\@ehb} \gdef\@parmoderr{% \@latex@error{Not in outer par mode}\@ehb} \gdef\@fltovf{% @@ -8587,10 +8638,10 @@ Type H <return> for immediate help.}% \newtoks \everypar \tl_gput_right:Nx \g__para_standard_everypar_tl { - \exp_not:N \the - \exp_not:N \toks - \the \allocationnumber - \c_space_tl + \exp_not:N \the + \exp_not:N \toks + \the \allocationnumber + \c_space_tl } \box_new:N \g_para_indent_box @@ -8696,6 +8747,8 @@ Type H <return> for immediate help.}% \let \IfDocumentMetadataTF \@firstoftwo \DocumentMetadata } +\ExplSyntaxOn +\int_new:N\g__kernel_target_int \NewDocumentCommand\MakeLinkTarget{sO{}m}{% \ifvmode \special{}% @@ -8703,8 +8756,19 @@ Type H <return> for immediate help.}% \@savsf\spacefactor \smash{}% \spacefactor\@savsf - \fi} -\NewDocumentCommand\LinkTargetOn{}{} + \fi + \IfBooleanTF {#1} + { + \tl_gset:Ne \@currentHref {#3} + } + { + \int_gincr:N\g__kernel_target_int + \tl_gset:Ne \@currentHref {target*.\int_use:N\g__kernel_target_int} + } + \UseTaggingSocket{recordtarget} + } +\ExplSyntaxOff + \NewDocumentCommand\LinkTargetOn{}{} \NewDocumentCommand\LinkTargetOff{}{} \NewDocumentCommand\NextLinkTarget{m}{} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -8817,50 +8881,46 @@ Type H <return> for immediate help.}% \fi \fi \fi} -\def\addvspace#1{% - \ifvmode - \if@minipage\else - \ifdim \lastskip =\z@ - \@vspace@calcify{#1}% - \else - \setlength\@tempskipb{#1}% - \@xaddvskip - \fi - \fi +\protected\def\addvspace#1{% + \ifhmode \ifinner \@LRmoderr \else \par \fi \fi + \if@minipage\else + \ifdim \lastskip =\z@ + \@vspace@calcify{#1}% + \else + \setlength\@tempskipb{#1}% + \@xaddvskip + \fi + \fi +} +\protected\def\addpenalty#1{% + \ifhmode \ifinner \@LRmoderr \else \par \fi \fi + \if@minipage \else - \@noitemerr - \fi} -\def\addpenalty#1{% - \ifvmode - \if@minipage + \if@nobreak \else - \if@nobreak + \ifdim\lastskip=\z@ + \penalty#1\relax \else - \ifdim\lastskip=\z@ - \penalty#1\relax - \else - \@tempskipb\lastskip - \begingroup - \@tempskipa\@tempskipb - \advance \@tempskipb - \ifdim\prevdepth>\maxdepth\maxdepth\else - \ifdim \prevdepth = -\@m\p@ \z@ \else \prevdepth \fi - \fi - \vskip -\@tempskipb - \penalty#1% - \ifdim\@tempskipa=\@tempskipb - \else - \advance\@tempskipb -\@tempskipa - \vskip \@tempskipb + \@tempskipb\lastskip + \begingroup + \@tempskipa\@tempskipb + \advance \@tempskipb + \ifdim\prevdepth>\maxdepth\maxdepth\else + \ifdim \prevdepth = -\@m\p@ \z@ \else \prevdepth \fi \fi - \vskip \@tempskipa - \endgroup - \fi + \vskip -\@tempskipb + \penalty#1% + \ifdim\@tempskipa=\@tempskipb + \else + \advance\@tempskipb -\@tempskipa + \vskip \@tempskipb + \fi + \vskip \@tempskipa + \endgroup \fi \fi - \else - \@noitemerr - \fi}% + \fi +} \DeclareRobustCommand\vspace{\@ifstar\@vspacer\@vspace} \def\@vspace #1{% \ifvmode @@ -9625,6 +9685,8 @@ Type H <return> for immediate help.}% \global\expandafter\let\csname cl@#1\endcsname\@empty \@addtoreset{#1}{@ckpt}% \global\expandafter\let\csname p@#1\endcsname\@empty + \expandafter\xdef\csname theH#1\endcsname{% + \noexpand\the\noexpand\value{#1}}% \expandafter \ifx\csname the#1\endcsname\relax \expandafter @@ -9634,7 +9696,11 @@ Type H <return> for immediate help.}% \@latex@warning{Command `\string\the#1' already defined -- not changed}% \fi} -\def\@addtoreset#1#2{\expandafter\@cons\csname cl@#2\endcsname {{#1}}} +\def\@addtoreset#1#2{\expandafter\@cons\csname cl@#2\endcsname {{#1}}% + \expandafter\xdef\csname theH#1\endcsname{% + \expandafter\noexpand\csname theH#2\endcsname.% + \noexpand\the\noexpand\value{#1}}% +} \def\@removefromreset#1#2{% \@ifundefined{c@#2}\relax {\begingroup @@ -9728,7 +9794,8 @@ Type H <return> for immediate help.}% \def\newlength#1{\@ifdefinable#1{\newskip#1}} \def\setlength#1#2{#1 #2\relax} \def\addtolength#1#2{\advance#1 #2\relax} -\def\@settodim#1#2#3{\setbox\@tempboxa\hbox{{#3}}#2#1\@tempboxa +\def\@settodim#1#2#3{\setbox\@tempboxa\hbox + {{\SuspendTagging{\@settodim}#3\ResumeTagging{\@settodim}}}#2#1\@tempboxa \setbox\@tempboxa\box\voidb@x} \DeclareRobustCommand\settoheight{\@settodim\ht} \DeclareRobustCommand\settodepth {\@settodim\dp} @@ -9736,6 +9803,7 @@ Type H <return> for immediate help.}% \def\@settopoint#1{\divide#1\p@\multiply#1\p@} %%% From File: ltfssbas.dtx %% Copyright (C) 1989-2002 Frank Mittelbach and Rainer Sch\"opf +\message{NFSS base,} \def\@nomath#1{\relax\ifmmode \@font@warning{Command \noexpand#1invalid in math mode}\fi} \gdef\no@alphabet@error#1{\relax \ifmmode @@ -9882,6 +9950,40 @@ Type H <return> for immediate help.}% \@onlypreamble\DeclareFontEncodingDefaults \let\default@T\@empty \let\default@M\@empty +\def\DeclareEncodingSubset#1#2{% + \DeclareEncodingSubset@aux{#1}#2*\DeclareEncodingSubset@aux +} +\def\DeclareEncodingSubset@aux#1#2*#3\DeclareEncodingSubset@aux#4{% + \expandafter\ifx\expandafter X\detokenize{#3}X% + \@DeclareEncodingSubset{#1}{#2}{#4}% + \else + \@DeclareEncodingSubset{#1}{#2LF}{#4}% + \@DeclareEncodingSubset{#1}{#2TLF}{#4}% + \@DeclareEncodingSubset{#1}{#2OsF}{#4}% + \@DeclareEncodingSubset{#1}{#2TOsF}{#4}% + \fi +} +\def\@DeclareEncodingSubset#1#2#3{% + \@ifundefined{#1:#2}% + {\@font@info{Setting #2 sub-encoding to #1/#3}}% + {\@font@info{Changing #2 sub-encoding to #1/#3}}% + \global\@namedef{#1:#2}{#3}} + +\def\CheckEncodingSubset#1#2#3#4#5{% + \ifnum #4>% + \expandafter\ifx\csname #2:\f@family\endcsname\relax + 0\csname #2:?\endcsname + \else + \csname #2:\f@family\endcsname + \fi + \relax + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi + {#1{#2}}{#3}% + #5% +} \def\DeclarePreloadSizes#1#2#3#4#5{% \@ifundefined{T@#1}% {\@latex@error{Encoding scheme `#1' unknown}\@eha}% @@ -10201,6 +10303,7 @@ Type H <return> for immediate help.}% \hbadness\@M \hfuzz\maxdimen \tracingonline\z@ + \tracinglostchars\z@ \everypar={}% \leftskip\z@skip \rightskip\z@skip @@ -10257,6 +10360,7 @@ Type H <return> for immediate help.}% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% From File: ltfssaxes.dtx %% Copyright (C) 2019-2020 Frank Mittelbach +\message{NFSS axes,} \def\DeclareFontSeriesChangeRule#1#2#3#4{% \@namedef{series@#1@#2}{{#3}{#4}}} \DeclareFontSeriesChangeRule {bc}{b}{bc}{} @@ -10858,6 +10962,7 @@ Type H <return> for immediate help.}% %%% From File: ltfsstrc.dtx %% Copyright (C) 1989-97 by Frank Mittelbach and Rainer Sch\"opf. %% Copyright (C) 1994-97 by LaTeX Project. All rights reserved. +\message{NFSS tracing,} \def\tracingfonts{% \@font@warning{Command \noexpand\tracingfonts not provided.\MessageBreak @@ -11202,6 +11307,7 @@ Type H <return> for immediate help.}% %%% From File: ltfssdcl.dtx %% Copyright (C) 1989-1998 Frank Mittelbach and Rainer Sch\"opf, %% all rights reserved. +\message{NFSS declarative interface,} \def\in@#1#2% {% \begingroup @@ -12096,6 +12202,7 @@ Type H <return> for immediate help.}% %%% From File: ltfssini.dtx %% Copyright (C) 1989-2001 Frank Mittelbach and Rainer Sch\"opf, %% all rights reserved. +\message{NFSS initialization,} \DeclareMathVersion{normal} \DeclareMathVersion{bold} \DeclareRobustCommand\upshape @@ -12649,45 +12756,6 @@ Type H <return> for immediate help.}% \egroup } \def\textcompsubstdefault{\rmsubstdefault} -\def\DeclareEncodingSubset#1#2{% - \DeclareEncodingSubset@aux{#1}#2*\DeclareEncodingSubset@aux -} -\def\DeclareEncodingSubset@aux#1#2*#3\DeclareEncodingSubset@aux#4{% - \expandafter\ifx\expandafter X\detokenize{#3}X% - \@DeclareEncodingSubset{#1}{#2}{#4}% - \else - \@DeclareEncodingSubset{#1}{#2LF}{#4}% - \@DeclareEncodingSubset{#1}{#2TLF}{#4}% - \@DeclareEncodingSubset{#1}{#2OsF}{#4}% - \@DeclareEncodingSubset{#1}{#2TOsF}{#4}% - \fi -} -\def\@DeclareEncodingSubset#1#2#3{% - \@ifundefined{#1:#2}% - {\@font@info{Setting #2 sub-encoding to #1/#3}}% - {\@font@info{Changing #2 sub-encoding to #1/#3}}% - \global\@namedef{#1:#2}{#3}} -\@onlypreamble\DeclareEncodingSubset -\@onlypreamble\DeclareEncodingSubset@aux -\@onlypreamble\@DeclareEncodingSubset - - -\def\CheckEncodingSubset#1#2#3#4#5{% - \ifnum #4>% - \expandafter\ifx\csname #2:\f@family\endcsname\relax - 0\csname #2:?\endcsname - \else - \csname #2:\f@family\endcsname - \fi - \relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {#1{#2}}{#3}% - #5% -} - \def\tc@errorwarn#1#2{\@latex@info{#1}} \def\tc@subst#1{% @@ -13004,11 +13072,7 @@ Type H <return> for immediate help.}% \DeclareEncodingSubset{TS1}{?}{9} \DeclareEncodingSubset{TS1}{ccr} {0} \DeclareEncodingSubset{TS1}{cmbr} {0} -\DeclareEncodingSubset{TS1}{cmr} {0} -\DeclareEncodingSubset{TS1}{cmss} {0} \DeclareEncodingSubset{TS1}{cmtl} {0} -\DeclareEncodingSubset{TS1}{cmtt} {0} -\DeclareEncodingSubset{TS1}{cmvtt} {0} \DeclareEncodingSubset{TS1}{pxr} {0} \DeclareEncodingSubset{TS1}{pxss} {0} \DeclareEncodingSubset{TS1}{pxtt} {0} @@ -13273,11 +13337,27 @@ Type H <return> for immediate help.}% \endgroup \@esphack} \def\@currentcounter{} -\def\refstepcounter#1{\stepcounter{#1}% +\NewSocket{refstepcounter}{1} +\NewSocket{refstepcounter/target}{1} +\NewSocketPlug{refstepcounter/target}{kernel} + {\xdef\@currentHref {#1.\csname theH#1\endcsname}}% +\AssignSocketPlug{refstepcounter/target}{kernel} +\def\refstepcounter#1{% + \UseSocket{refstepcounter}{% + \stepcounter{#1}% \edef\@currentcounter{#1}% \protected@edef\@currentlabel {\csname p@#1\expandafter\endcsname\csname the#1\endcsname}% + \UseSocket{refstepcounter/target}{#1}% + \UseTaggingSocket{recordtarget}% + }% } +\def\@kernel@refstepcounter#1{% + \UseSocket{refstepcounter}{% + \stepcounter{#1}% + \edef\@currentcounter{#1}% + \protected@edef\@currentlabel + {\csname p@#1\expandafter\endcsname\csname the#1\endcsname}}}% \def\labelformat#1{\expandafter\def\csname p@#1\endcsname##1} \def\@kernel@Ref#1{\protected@edef\@tempa{\@kernel@ref{#1}}% \expandafter\MakeUppercase\@tempa} @@ -13337,14 +13417,11 @@ Type H <return> for immediate help.}% \cs_generate_variant:Nn \property_record:nn { nV , ee, oo } \cs_new_protected:Npn \__property_record:nn #1#2 { - \legacy_if:nT { @filesw } + \protected@write \@auxout {} { - \protected@write \@auxout {} - { - \token_to_str:N \new@label@record - {#1} - { \clist_map_function:nN {#2} \__property_record_value:n } - } + \token_to_str:N \new@label@record + {#1} + { \clist_map_function:nN {#2} \__property_record_value:n } } } \cs_generate_variant:Nn \__property_record:nn { e } @@ -13450,7 +13527,7 @@ Type H <return> for immediate help.}% \prg_return_false: } } -\prg_generate_conditional_variant:Nnn \property_if_exist:n {e} {TF} +\prg_generate_conditional_variant:Nnn \property_if_exist:n {e} { p , T , F, TF } \cs_new_eq:NN \IfPropertyExistsTF \property_if_exist:eTF \cs_new:Npn \IfPropertyExistsT #1#2 {\property_if_exist:eTF {#1}{#2}{} } \cs_new:Npn \IfPropertyExistsF #1 {\property_if_exist:eTF {#1}{} } @@ -13465,10 +13542,10 @@ Type H <return> for immediate help.}% \prg_return_false: } } -\prg_generate_conditional_variant:Nnn \property_if_recorded:n {e} {TF} +\prg_generate_conditional_variant:Nnn \property_if_recorded:n {e} { p , T , F, TF } \cs_new_eq:NN \IfLabelExistsTF \property_if_recorded:eTF -\cs_new:Npn \IfLabelExistsT #1#2 {\property_if_exist:eTF {#1}{#2}{} } -\cs_new:Npn \IfLabelExistsF #1 {\property_if_exist:eTF {#1}{} } +\cs_new:Npn \IfLabelExistsT #1#2 {\property_if_recorded:eTF {#1}{#2}{} } +\cs_new:Npn \IfLabelExistsF #1 {\property_if_recorded:eTF {#1}{} } \prg_new_conditional:Npnn \property_if_recorded:nn #1#2 { p , T , F, TF } % #1 label #2 property { @@ -13480,8 +13557,10 @@ Type H <return> for immediate help.}% \prg_return_false: } } -\prg_generate_conditional_variant:Nnn \property_if_recorded:nn {ee} {TF} +\prg_generate_conditional_variant:Nnn \property_if_recorded:nn {ee} { p , T , F, TF } \cs_new_eq:NN \IfPropertyRecordedTF \property_if_recorded:eeTF +\cs_new:Npn \IfPropertyRecordedT #1#2#3 { \property_if_recorded:eeTF {#1}{#2}{#3}{} } +\cs_new:Npn \IfPropertyRecordedF #1#2#3 { \property_if_recorded:eeTF {#1}{#2}{}{#3} } \cs_new_protected:Npn \property_ref_undefined_warn: { \flag_if_raised:nT { l__property_ref_flag } @@ -13644,7 +13723,7 @@ Type H <return> for immediate help.}% \def\stop{\clearpage\deadcycles\z@\let\par\@@par\@@end} \everypar{\@nodocument} %% To get an error if text appears before the \nullfont %% \begin{document} -\DeclareRobustCommand*\begin[1]{% +\protected\def\begin#1{% \UseHook{env/#1/before}% \@ifundefined{#1}% {\def\reserved@a{\@latex@error{Environment #1 undefined}\@eha}}% @@ -13662,6 +13741,7 @@ Type H <return> for immediate help.}% \fi \UseHook{env/#1/begin}% } + \edef\end {\unexpanded{% \romannumeral @@ -13680,13 +13760,14 @@ Type H <return> for immediate help.}% }% \expandafter\noexpand\csname end \endcsname } + \@namedef{end }#1{% \romannumeral \IfHookEmptyTF{env/#1/end}% {\expandafter\z@}% {\z@\UseHook{env/#1/end}}% \csname end#1\endcsname\@checkend{#1}% - \expandafter\endgroup\if@endpe\@doendpe\fi + \endgroup \UseHook{env/#1/after}% \if@ignore\@ignorefalse\ignorespaces\fi } @@ -14233,11 +14314,20 @@ Type H <return> for immediate help.}% \def\@doendpe{\@endpetrue \def\par{\@restorepar \clubpenalty\@clubpenalty - \everypar{}\par\@endpefalse}\everypar - {{\setbox\z@\lastbox}% - \everypar{}\@endpefalse}} + \@endpefalse + \everypar{}\par}% + \everypar + {{\setbox\z@\lastbox}% + \everypar{}\@endpefalse}} \newif\if@endpe -\@endpefalse +\def\@endpefalse{\global\let\if@endpe\iffalse} +\def\@endpetrue {% + \global\let\if@endpe\iftrue + \ifnum\currentgrouplevel>\z@ + \aftergroup\propagate@doendpe + \fi +} +\def\propagate@doendpe{\if@endpe \@doendpe \fi} \def\@mklab#1{\hfil #1} \def\item{% \@inmatherr\item @@ -14405,12 +14495,14 @@ Type H <return> for immediate help.}% \kern\z@}} \let\set@color\relax \let\color@begingroup\begingroup -\def\color@endgroup{\endgraf\endgroup} \def\color@setgroup{\color@begingroup} % changed further in color package \let\normalcolor\relax % remains untouched; only changed in a color package \def\color@hbox{\hbox\bgroup\color@begingroup} \def\color@vbox{\vbox\bgroup\color@begingroup} \def\color@endbox{\color@endgroup\egroup} + +\def\color@endgroup{\endgraf\@endpefalse\endgroup} + \def\newsavebox#1{\@ifdefinable{#1}{\newbox#1}} \DeclareRobustCommand\savebox[1]{% \@ifnextchar(%) @@ -16072,7 +16164,9 @@ Type H <return> for immediate help.}% %% Copyright (C) 2022-2024 %% Frank Mittelbach, The LaTeX Project %%% From File: ltmarks.dtx -%% \end{function} + + + \ExplSyntaxOn \seq_new:N \g__mark_classes_seq @@ -16091,43 +16185,42 @@ Type H <return> for immediate help.}% \__mark_debug:n { \iow_term:x { Marks:~new~mark:~#1~\msg_line_context: } } \exp_args:Nc \newmarks {c__mark_class_ #1 _mark} \seq_gput_right:Nn \g__mark_classes_seq {#1} - \tl_new:c { g__mark_page_top_ #1 _tl } - \tl_new:c { g__mark_page_first_ #1 _tl } - \tl_new:c { g__mark_page_last_ #1 _tl } - \tl_new:c { g__mark_previous-page_top_ #1 _tl } - \tl_new:c { g__mark_previous-page_first_ #1 _tl } - \tl_new:c { g__mark_previous-page_last_ #1 _tl } - \tl_new:c { g__mark_column_top_ #1 _tl } - \tl_new:c { g__mark_column_first_ #1 _tl } - \tl_new:c { g__mark_column_last_ #1 _tl } - \tl_new:c { g__mark_previous-column_top_ #1 _tl } - \tl_new:c { g__mark_previous-column_first_ #1 _tl } - \tl_new:c { g__mark_previous-column_last_ #1 _tl } - \tl_new:c { g__mark_first-column_top_ #1 _tl } - \tl_new:c { g__mark_first-column_first_ #1 _tl } - \tl_new:c { g__mark_first-column_last_ #1 _tl } - \tl_new:c { g__mark_last-column_top_ #1 _tl } - \tl_new:c { g__mark_last-column_first_ #1 _tl } - \tl_new:c { g__mark_last-column_last_ #1 _tl } - \tl_set:cn { g__mark_page_top_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_page_first_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_page_last_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_previous-page_top_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_previous-page_first_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_previous-page_last_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_column_top_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_column_first_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_column_last_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_previous-column_top_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_previous-column_first_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_previous-column_last_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_first-column_top_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_first-column_first_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_first-column_last_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_last-column_top_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_last-column_first_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_last-column_last_ #1 _tl }{ \__mark_id:n{0} } -} + \__mark_init_region:nn {page}{#1} + \__mark_init_region:nn {previous-page}{#1} + \__mark_init_region:nn {column}{#1} + \__mark_init_region:nn {previous-column}{#1} + \__mark_init_region:nn {first-column}{#1} + \__mark_init_region:nn {last-column}{#1} + \__mark_init_region:nn {mcol-1}{#1} + \__mark_init_region:nn {mcol-2}{#1} + \__mark_init_region:nn {mcol-3}{#1} + \__mark_init_region:nn {mcol-4}{#1} + \__mark_init_region:nn {mcol-5}{#1} + \__mark_init_region:nn {mcol-6}{#1} + \__mark_init_region:nn {mcol-7}{#1} + \__mark_init_region:nn {mcol-8}{#1} + \__mark_init_region:nn {mcol-9}{#1} + \__mark_init_region:nn {mcol-10}{#1} + \__mark_init_region:nn {mcol-11}{#1} + \__mark_init_region:nn {mcol-12}{#1} + \__mark_init_region:nn {mcol-13}{#1} + \__mark_init_region:nn {mcol-14}{#1} + \__mark_init_region:nn {mcol-15}{#1} + \__mark_init_region:nn {mcol-16}{#1} + \__mark_init_region:nn {mcol-17}{#1} + \__mark_init_region:nn {mcol-18}{#1} + \__mark_init_region:nn {mcol-19}{#1} + \__mark_init_region:nn {mcol-20}{#1} +} +\cs_new_protected:Npn \__mark_init_region:nn #1 #2 { + \tl_new:c { g__mark_#1_top_ #2 _tl } + \tl_new:c { g__mark_#1_first_ #2 _tl } + \tl_new:c { g__mark_#1_last_ #2 _tl } + \tl_set_eq:cN { g__mark_#1_top_ #2 _tl } \c__mark_empty_tl + \tl_set_eq:cN { g__mark_#1_first_ #2 _tl } \c__mark_empty_tl + \tl_set_eq:cN { g__mark_#1_last_ #2 _tl } \c__mark_empty_tl +} +\tl_const:Nn \c__mark_empty_tl { \__mark_value:nn{0}{} } \box_new:N \l__mark_box \box_new:N \l__mark_ii_box \tl_new:N \g__mark_tmp_tl @@ -16182,13 +16275,13 @@ Type H <return> for immediate help.}% \exp_not:N \l__mark_saved_parameters_tl } \tl_new:N \l__mark_saved_parameters_tl -\cs_new_protected:Npn \__mark_update_structure_from_material:nn #1#2 { +\cs_new_protected:Npn \mark_update_structure_from_material:nn #1#2 { \__mark_extract_and_handle_marks:nn { \__mark_update_structure_from_splitmarks:n {#1} } { #2 } } \cs_new_protected:Npn \__mark_update_structure_from_splitmarks:n #1 { - \__mark_update_structure_alias:nn { previous-#1 } {#1} + \mark_copy_structure:nn { previous-#1 } {#1} \seq_map_inline:Nn \g__mark_classes_seq { \tl_gset_eq:Nc \g__mark_new_top_tl { g__mark_#1_last_##1_tl } @@ -16212,9 +16305,9 @@ Type H <return> for immediate help.}% } } } -\cs_new_protected:Npn \__mark_get_marks_for_reinsertion:nNN #1#2#3 { - \tl_clear:N \g__mark_first_marks_tl - \tl_clear:N \g__mark_last_marks_tl +\cs_new_protected:Npn \mark_get_marks_for_reinsertion:nNN #1#2#3 { + \tl_gclear:N \g__mark_first_marks_tl + \tl_gclear:N \g__mark_last_marks_tl \__mark_extract_and_handle_marks:nn \__mark_get_from_splitmarks: { #1 } @@ -16236,7 +16329,7 @@ Type H <return> for immediate help.}% \__mark_debug:n { \iow_term:x { Marks:~ extract~ last~ mark~ for~ class~ '##1'~ =~ \g__mark_tmp_tl } } \tl_gput_right:Ne \g__mark_last_marks_tl - { \mark_insert:nn {##1} { \g__mark_tmp_tl } } + { \mark_insert:nn {##1} { \__mark_drop_id:o { \g__mark_tmp_tl } } } \__mark_debug:n { \iow_term:x { Marks:~ extract~ first~ mark~ for~ class~ '##1'~ =~ \tex_splitfirstmarks:D @@ -16245,8 +16338,10 @@ Type H <return> for immediate help.}% \tl_gput_right:Ne \g__mark_first_marks_tl { \mark_insert:nn {##1} { - \tex_splitfirstmarks:D - \use:c { c__mark_class_##1_mark } + \__mark_drop_id:o { + \tex_splitfirstmarks:D + \use:c { c__mark_class_##1_mark } + } } } } @@ -16254,7 +16349,7 @@ Type H <return> for immediate help.}% } \tl_new:N \g__mark_first_marks_tl \tl_new:N \g__mark_last_marks_tl -\cs_new_protected:Npn \__mark_update_structure_alias:nn #1#2 { +\cs_new_protected:Npn \mark_copy_structure:nn #1#2 { \seq_map_inline:Nn \g__mark_classes_seq { \tl_gset_eq:cc { g__mark_ #1 _top_ ##1 _tl } @@ -16265,16 +16360,27 @@ Type H <return> for immediate help.}% { g__mark_ #2 _last_ ##1 _tl } } } -\cs_new_protected:Npn \__mark_update_structure_to_err:n #1 { +\cs_new_protected:Npn \mark_clear_structure:n #1 { + \seq_map_inline:Nn \g__mark_classes_seq + { + \tl_gset_eq:cN { g__mark_ #1 _top_ ##1 _tl } + \c__mark_empty_tl + \tl_gset_eq:cN { g__mark_ #1 _first_ ##1 _tl } + \c__mark_empty_tl + \tl_gset_eq:cN { g__mark_ #1 _last_ ##1 _tl } + \c__mark_empty_tl + } +} +\cs_new_protected:Npn \mark_set_structure_to_err:n #1 { \seq_map_inline:Nn \g__mark_classes_seq { - \tl_gset:cn { g__mark_ #1 _top_ ##1 _tl } { \__mark_error:n {#1} } - \tl_gset:cn { g__mark_ #1 _first_ ##1 _tl } { \__mark_error:n {#1} } - \tl_gset:cn { g__mark_ #1 _last_ ##1 _tl } { \__mark_error:n {#1} } + \tl_gset:ce { g__mark_ #1 _top_ ##1 _tl } { \__mark_value:nn{?}{\__mark_error:nn {#1}{?} }} + \tl_gset:ce { g__mark_ #1 _first_ ##1 _tl } { \__mark_value:nn{?}{\__mark_error:nn {#1}{?} }} + \tl_gset:ce { g__mark_ #1 _last_ ##1 _tl } { \__mark_value:nn{?}{\__mark_error:nn {#1}{?} }} } } -\cs_new_protected:Npn \__mark_error:n #1 { - \msg_error:nnn { mark } { invalid-use } {#1} +\cs_new_protected:Npn \__mark_error:nn #1#2 { + \msg_error:nnnn { mark } { invalid-use } {#1} {#2} } \cs_new_protected:Npn \mark_insert:nn #1#2 { @@ -16285,8 +16391,7 @@ Type H <return> for immediate help.}% \hook_use:n { insertmark } \unrestored@protected@xdef \g__mark_tmp_tl { - \__mark_id:n{ \int_use:N\g__mark_int } - #2 + \__mark_value:nn{ \int_use:N\g__mark_int }{#2} } \__mark_debug:n{ \iow_term:x { Marks:~ set~#1~<-~ '\tl_to_str:V \g__mark_tmp_tl' ~ \msg_line_context: } } @@ -16302,7 +16407,7 @@ Type H <return> for immediate help.}% { \tl_to_str:n {#1} } } } -\cs_new_protected:Npn \__mark_id:n #1 { } +\cs_new_protected:Npn \__mark_value:nn #1#2 { #2 } \int_new:N \g__mark_int \cs_new:Npn \@kernel@before@insertmark { \cs_set_eq:NN \label \scan_stop: @@ -16314,11 +16419,16 @@ Type H <return> for immediate help.}% } \hook_new:n {insertmark} -\cs_new:Npn \mark_use_first:nn #1#2 { \__mark_use:v { g__mark_#1_first_#2_tl } } -\cs_new:Npn \mark_use_last:nn #1#2 { \__mark_use:v { g__mark_#1_last_#2_tl } } -\cs_new:Npn \mark_use_top:nn #1#2 { \__mark_use:v { g__mark_#1_top_#2_tl } } -\cs_new:Npn \__mark_use:n #1 { \exp_not:o { \use_none:nn #1 } } -\cs_generate_variant:Nn \__mark_use:n { v } +\cs_new:Npn \mark_use_first:nn #1#2 { \__mark_use_check:nnn { g__mark_#1_first_#2_tl } {#1} {#2} } +\cs_new:Npn \mark_use_last:nn #1#2 { \__mark_use_check:nnn { g__mark_#1_last_#2_tl } {#1} {#2} } +\cs_new:Npn \mark_use_top:nn #1#2 { \__mark_use_check:nnn { g__mark_#1_top_#2_tl } {#1} {#2} } +\cs_new:Npn \__mark_use_check:nnn #1#2#3 { + \tl_if_eq:cNTF {#1} \relax + { \__mark_error:nn {#2} {#3} } + { \__mark_drop_id:v {#1} } +} +\cs_new:Npn \__mark_drop_id:n #1 { \exp_not:o { #1 } } +\cs_generate_variant:Nn \__mark_drop_id:n { o, v } \prg_new_conditional:Npnn \mark_if_eq:nnnn #1#2#3#4 { T , F , TF } { \tl_if_eq:ccTF { g__mark_ #1 _#3_ #2 _tl } @@ -16349,13 +16459,14 @@ Type H <return> for immediate help.}% LaTeX~was~asked~to~manipulate~a~mark~of~class~'#1',~ but~this~class~of~marks~does~not~exist. } - \msg_new:nnnn { mark } { invalid-use } - { Mark~region~'#1'~not ~usable } + { Mark~region~'#1'~not~usable~or~class~'#2'~unknown } { \c__msg_coding_error_text_tl - The~region~'#1'~can~only~be~used~after~ - all~columns~have~been~assembled. + The~region~'#1'~is~either~not~known~or~data~for~it~ + still~needs~to~be~assembled,~e.g.,~last-column~ + while~building~the~first-column.~ + Also~possible:~the~class~namne~'#2'~is~misspelled. \c__msg_return_text_tl } \bool_new:N \g__mark_debug_bool @@ -16377,41 +16488,42 @@ Type H <return> for immediate help.}% } \cs_new_eq:NN \DebugMarksOn \mark_debug_on: \cs_new_eq:NN \DebugMarksOff \mark_debug_off: -\cs_new_protected:Npn \__mark_class_status:nn #1#2 - { - \typeout{ Marks:~#2~ #1:} - \typeout{\@spaces page~ (current): - | \exp_not:v { g__mark_page_top_ #2 _tl } - | \exp_not:v { g__mark_page_first_ #2 _tl } - | \exp_not:v { g__mark_page_last_ #2 _tl } |} - \typeout{\@spaces page~ (previous): - | \exp_not:v { g__mark_previous-page_top_ #2 _tl } - | \exp_not:v { g__mark_previous-page_first_ #2 _tl } - | \exp_not:v { g__mark_previous-page_last_ #2 _tl } |} - \typeout{\@spaces column~ (previous): - | \exp_not:v { g__mark_previous-column_top_ #2 _tl } - | \exp_not:v { g__mark_previous-column_first_ #2 _tl } - | \exp_not:v { g__mark_previous-column_last_ #2 _tl } |} - \typeout{\@spaces column~ (current): - | \exp_not:v { g__mark_column_top_ #2 _tl } - | \exp_not:v { g__mark_column_first_ #2 _tl } - | \exp_not:v { g__mark_column_last_ #2 _tl } |} - \typeout{\@spaces column~ (first): - | \exp_not:v { g__mark_first-column_top_ #2 _tl } - | \exp_not:v { g__mark_first-column_first_ #2 _tl } - | \exp_not:v { g__mark_first-column_last_ #2 _tl } |} - \typeout{\@spaces column~ (second): - | \exp_not:v { g__mark_last-column_top_ #2 _tl } - | \exp_not:v { g__mark_last-column_first_ #2 _tl } - | \exp_not:v { g__mark_last-column_last_ #2 _tl } |} -} -\cs_new_protected:Npn \__mark_status:n #1 +\cs_new_protected:Npn \__mark_class_status:nnn #1#2#3 { + \typeout{ Marks:~#2~ #1:} + \__mark_region_status:nnn {#2}{ page~ (previous) } { previous-page } + \__mark_region_status:nnn {#2}{ page~ (current)~ } { page } + \__mark_region_status:nnn {#2}{ column~ (previous) }{ previous-column } + \__mark_region_status:nnn {#2}{ column~ (current)~ }{ column } + \__mark_region_status:nnn {#2}{ column~ (first) } { first-column } + \__mark_region_status:nnn {#2}{ column~ (last)~ } { last-column } + \int_step_inline:nn {#3} + { + \__mark_region_status:nnn {#2}{ column~ (##1)~ } { mcol-##1 } + } +} +\cs_new_protected:Npn \__mark_region_status:nnn #1#2#3 { + \group_begin: + \cs_set:Npn \__mark_value:nn ##1##2{ \exp_not:n{ {##1} ~ ##2 } } + \tl_if_exist:cT { g__mark_#3_last_ #1 _tl } + { + \tl_if_eq:cNF { g__mark_#3_last_ #1 _tl } \c__mark_empty_tl + { + \typeout{\@spaces #2 = + ~|~ \use:c { g__mark_#3_top_ #1 _tl } ~|~ + \use:c { g__mark_#3_first_ #1 _tl } ~|~ + \use:c { g__mark_#3_last_ #1 _tl } ~| + } + } + } + \group_end: +} +\cs_new_protected:Npn \__mark_status:nn #1#2 { \seq_map_inline:Nn \g__mark_classes_seq - { \__mark_class_status:nn {#1} {##1} } + { \__mark_class_status:nnn {#1} {##1} {#2} } } -\cs_new_protected:Npn \ShowMarksAt #1 { - \__mark_debug:n { \__mark_status:n {#1} } +\NewDocumentCommand \ShowMarksAt {m O{4} } { + \__mark_debug:n { \__mark_status:nn {#1}{#2} } } \cs_new_eq:NN \NewMarkClass \mark_new_class:n \@onlypreamble \NewMarkClass @@ -16425,23 +16537,29 @@ Type H <return> for immediate help.}% \NewExpandableDocumentCommand \IfMarksEqualTF {O{page}mmm} { \mark_if_eq:nnnnTF {#1}{#2}{#3}{#4} } +\NewExpandableDocumentCommand \IfMarksEqualT {O{page}mmm} { + \mark_if_eq:nnnnT {#1}{#2}{#3}{#4} +} +\NewExpandableDocumentCommand \IfMarksEqualF {O{page}mmm} { + \mark_if_eq:nnnnF {#1}{#2}{#3}{#4} +} \cs_new_protected:Npn \__mark_update_singlecol_structures: { \box_if_vertical:NTF \@outputbox { - \__mark_update_structure_from_material:nn {page} + \mark_update_structure_from_material:nn {page} { \vbox_unpack:N \@outputbox } } { - \__mark_update_structure_from_material:nn {page} + \mark_update_structure_from_material:nn {page} { \hbox_unpack:N \@outputbox } } - \__mark_update_structure_alias:nn {previous-column}{previous-page} - \__mark_update_structure_alias:nn {column}{page} - \__mark_update_structure_alias:nn {first-column}{page} - \__mark_update_structure_alias:nn {last-column}{page} + \mark_copy_structure:nn {previous-column}{previous-page} + \mark_copy_structure:nn {column}{page} + \mark_copy_structure:nn {first-column}{page} + \mark_copy_structure:nn {last-column}{page} \__mark_debug:n { - \__mark_status:n + \__mark_status:nn { in~ OR~ ( \legacy_if:nTF {@twoside} { twoside- @@ -16451,25 +16569,26 @@ Type H <return> for immediate help.}% { oneside } ) } + {0} } } \cs_new_protected:Npn \__mark_update_dblcol_structures: { \box_if_vertical:NTF \@outputbox { - \__mark_update_structure_from_material:nn {column} + \mark_update_structure_from_material:nn {column} { \vbox_unpack:N \@outputbox } } { - \__mark_update_structure_from_material:nn {column} + \mark_update_structure_from_material:nn {column} { \hbox_unpack:N \@outputbox } } \legacy_if:nTF {@firstcolumn} { - \__mark_update_structure_alias:nn {first-column}{column} - \__mark_update_structure_to_err:n {last-column} + \mark_copy_structure:nn {first-column}{column} + \mark_set_structure_to_err:n {last-column} } { - \__mark_update_structure_alias:nn {last-column}{column} + \mark_copy_structure:nn {last-column}{column} \seq_map_inline:Nn \g__mark_classes_seq { \tl_gset_eq:cc { g__mark_previous-page_top_ ##1 _tl } @@ -16497,7 +16616,7 @@ Type H <return> for immediate help.}% } \__mark_debug:n { - \__mark_status:n + \__mark_status:nn { in~ OR~ ( \legacy_if:nTF {@twoside} { twoside- @@ -16510,8 +16629,10 @@ Type H <return> for immediate help.}% { first~ }{ second~ } column ) } + {0} } } + \cs_new_eq:NN \@expl@@@mark@update@singlecol@structures@@ \__mark_update_singlecol_structures: \cs_new_eq:NN \@expl@@@mark@update@dblcol@structures@@ @@ -16537,32 +16658,19 @@ Type H <return> for immediate help.}% \let\@rightmark\@secondoftwo \ExplSyntaxOn \DeclareRobustCommand*\markboth[2]{% - \begingroup - \let\label\relax \let\index\relax \let\glossary\relax - \unrestored@protected@xdef\@themark {{#1}{#2}}% - \@temptokena \expandafter{\@themark}% \mark_insert:nn{2e-left}{#1} \mark_insert:nn{2e-right}{#2} \tl_if_empty:nF{#2}{ \mark_insert:nn{2e-right-nonempty}{#2} } - \mark{\the\@temptokena}% - \endgroup - \if@nobreak\ifvmode\nobreak\fi\fi} +} \DeclareRobustCommand*\markright[1]{% - \begingroup - \let\label\relax \let\index\relax \let\glossary\relax - \expandafter\@markright\@themark {#1}% - \@temptokena \expandafter{\@themark}% \mark_insert:nn{2e-right}{#1} \tl_if_empty:nF{#1}{ \mark_insert:nn{2e-right-nonempty}{#1} } - \mark{\the\@temptokena}% - \endgroup - \if@nobreak\ifvmode\nobreak\fi\fi} +} +\ExplSyntaxOff +\ExplSyntaxOn +\cs_new:Npn \leftmark {\mark_use_last:nn{page}{2e-left}} +\cs_new:Npn \rightmark {\mark_use_first:nn{page}{2e-right}} \ExplSyntaxOff -\def\@markright#1#2#3{\@temptokena {#1}% - \unrestored@protected@xdef\@themark{{\the\@temptokena}{#3}}} -\def\leftmark{\expandafter\@leftmark\botmark\@empty\@empty} -\def\rightmark{\expandafter\@rightmark\firstmark\@empty\@empty} -\def\@themark{{}{}} \DeclareRobustCommand\raggedbottom{% \def\@textbottom{\vskip \z@ \@plus.0001fil}\let\@texttop\relax} \DeclareRobustCommand\flushbottom{% @@ -16780,7 +16888,9 @@ Type H <return> for immediate help.}% \@onlypreamble\DeclareOption \@onlypreamble\@declareoption \@onlypreamble\@defdefault@ds -\def\@remove@eq@value#1=#2\@nil{#1} +\ExplSyntaxOn +\def\@remove@eq@value#1=#2\@nil{\tl_trim_spaces:n{#1}} +\ExplSyntaxOff \def\OptionNotUsed{% \ifx\@currext\@clsextension \xdef\@unusedoptionlist{% @@ -17445,6 +17555,7 @@ Type H <return> for immediate help.}% \def\pkgcls@use@this@release#1#2{% \pkgcls@show@selection{#1}{#2}% \pkgcls@targetdate\z@ + \@addtofilelist{#1}% \@@input #1\relax \endinput } @@ -17537,7 +17648,40 @@ Type H <return> for immediate help.}% { \q_recursion_tail } { } \q_recursion_stop \group_end: +\cs_new_protected:cpn { \c__keys_props_root_str .pass-to-packages } + { + \bool_if:NTF \l__keys_no_value_bool + { \__keys_scope:n { true } } + { \__keys_scope:n } + } +\cs_new_protected:Npn \__keys_scope:n #1 + { + \str_case:nnF {#1} + { + { true } + { \__keys_scope:N \clist_put_right:NV } + { false } + { \__keys_scope:N \clist_remove_all:NV } + } + { + \msg_error:nnnn { keys } + { choice-unknown } + { .pass-to-packages } + {#1} + } + } +\cs_new_protected:Npn \__keys_scope:N #1 + { + \exp_after:wN \__keys_find_key_module:wNN + \l_keys_path_str \s__keys_stop + \l_keys_key_tl \l_keys_key_str + #1 \l__keys_forced_global_clist \l_keys_key_str + } +\cs_generate_variant:Nn \clist_if_in:NnT { Ne } +\cs_generate_variant:Nn \clist_if_in:NnTF { Ne } \cs_generate_variant:Nn \clist_put_right:Nn { Nv } +\clist_new:N \l__keys_class_only_clist +\clist_new:N \l__keys_forced_global_clist \clist_new:N \l__keys_options_clist \bool_new:N \l__keys_options_loading_bool \cs_new_protected:Npn \__keys_options:n #1 @@ -17590,18 +17734,11 @@ Type H <return> for immediate help.}% { \cs_if_free:cF { @raw@opt@ \@currname . \@currext } { - \keys_if_exist:nnTF {#1} { unknown } - { - \clist_put_right:Nv \l__keys_options_clist - { @raw@opt@ \@currname . \@currext } - } + \clist_map_inline:cn { @raw@opt@ \@currname . \@currext } { - \clist_map_inline:cn { @raw@opt@ \@currname . \@currext } - { - \exp_args:Ne \__keys_options_class:nnn - { \tl_trim_spaces:e { \__keys_remove_equals:n {##1} } } - {##1} {#1} - } + \exp_args:Ne \__keys_options_class:nnn + { \tl_trim_spaces:e { \__keys_remove_equals:n {##1} } } + {##1} {#1} } } } @@ -17609,14 +17746,23 @@ Type H <return> for immediate help.}% { \keys_if_exist:nnTF {#3} {#1} { - \clist_put_right:Nn \l__keys_options_clist {#2} - \clist_remove_all:Nn \@unusedoptionlist {#1} + \__keys_options_class:nn {#1} {#2} + \clist_put_right:Ne \l__keys_class_only_clist { \tl_to_str:n {#1} } } { - \clist_if_in:NnF \@unusedoptionlist {#1} - { \clist_put_right:Nn \@unusedoptionlist {#1} } + \keys_if_exist:nnTF {#3} { unknown } + { \__keys_options_class:nn {#1} {#2} } + { + \clist_if_in:NnF \@unusedoptionlist {#1} + { \clist_put_right:Nn \@unusedoptionlist {#1} } + } } } +\cs_new_protected:Npn \__keys_options_class:nn #1#2 + { + \clist_remove_all:Nn \@unusedoptionlist {#1} + \clist_put_right:Nn \l__keys_options_clist {#2} + } \cs_new_protected:Npn \__keys_options_package:n #1 { \clist_map_inline:Nn \@raw@classoptionslist @@ -17630,10 +17776,19 @@ Type H <return> for immediate help.}% { \keys_if_exist:nnT {#3} {#1} { - \clist_put_right:Nn \l__keys_options_clist {#2} - \clist_remove_all:Nn \@unusedoptionlist {#1} + \clist_if_in:NeTF \l__keys_class_only_clist { \tl_to_str:n {#1} } + { + \clist_if_in:NeT \l__keys_forced_global_clist { \tl_to_str:n {#1} } + { \__keys_options_package:nn {#1} {#2} } + } + { \__keys_options_package:nn {#1} {#2} } } } +\cs_new_protected:Npn \__keys_options_package:nn #1#2 + { + \clist_put_right:Nn \l__keys_options_clist {#2} + \clist_remove_all:Nn \@unusedoptionlist {#1} + } \cs_new_protected:Npn \__keys_options_local: { \cs_if_eq:NNF \@currext \@clsextension @@ -18918,7 +19073,6 @@ Type H <return> for immediate help.}% \global\let\if@newlist\@@if@newlist \global \@colht \textheight \stepcounter{page}% - \let\firstmark\botmark } \def \@begindvi{% \unvbox \@begindvibox @@ -19463,21 +19617,6 @@ Type H <return> for immediate help.}% \if@firstcolumn \global\@firstcolumnfalse \global\setbox\@leftcolumn\copy\@outputbox - \splitmaxdepth\maxdimen - \vbadness\maxdimen - \setbox\@outputbox\vbox{\unvbox\@outputbox\unskip}% - \setbox\@outputbox\vsplit\@outputbox to\maxdimen - \toks@\expandafter{\topmark}% - \xdef\@firstcoltopmark{\the\toks@}% - \toks@\expandafter{\splitfirstmark}% - \xdef\@firstcolfirstmark{\the\toks@}% - \ifx\@firstcolfirstmark\@empty - \global\let\@setmarks\relax - \else - \gdef\@setmarks{% - \let\firstmark\@firstcolfirstmark - \let\topmark\@firstcoltopmark}% - \fi \else \global\@firstcolumntrue \setbox\@outputbox\vbox{% @@ -19487,8 +19626,7 @@ Type H <return> for immediate help.}% {\normalcolor\vrule \@width\columnseprule}% \hfil \hb@xt@\columnwidth{\box\@outputbox \hss}}}% - \@combinedblfloats - \@setmarks + \@combinedblfloats \@outputpage \begingroup \@dblfloatplacement @@ -19538,37 +19676,70 @@ Type H <return> for immediate help.}% \let\dblfigrule=\relax %%% From File: lttagging.dtx \ExplSyntaxOn -\cs_new_eq:NN \SuspendTagging \use_none:n -\cs_new_eq:NN \ResumeTagging \use_none:n -\AddToHook{begindocument/before}{ - \cs_if_exist:NT \tag_stop:n - { - \cs_set:Npn \SuspendTagging #1 { - \tag_stop:n {#1} - } - \cs_set:Npn \ResumeTagging #1 { \tag_start:n {#1} } - } -} -\AddToHook{begindocument}[kernel]{ - \cs_if_exist:NF \tag_if_active:T - { - \prg_new_conditional:Npnn \tag_if_active: { p , T , TF, F } - { \prg_return_false: } - } -} + +\cs_new_eq:NN \tag_suspend:n \use_none:n +\cs_new_eq:NN \tag_resume:n \use_none:n +\cs_new_protected:Npn \SuspendTagging #1 { \tag_suspend:n {#1} } +\cs_new_protected:Npn \ResumeTagging #1 { \tag_resume:n {#1} } +\prg_new_conditional:Npnn \tag_if_active: { p , T , TF, F } + { \prg_return_false: } +\cs_new:Npn \tag_socket_use_expandable:n #1 { } \cs_new_protected:Npn \tag_socket_use:n #1 { } \cs_new_protected:Npn \tag_socket_use:nn #1#2 { } +\cs_new_protected:Npn \tag_socket_use:nnn #1#2#3 { #3 } \cs_new_protected:Npn \UseTaggingSocket #1 { \int_case:nnF { \int_use:c { c__socket_tagsupport/#1_args_int } } { 0 \prg_do_nothing: 1 \use_none:n - 2 \use_none:nn + 2 \use_ii:nn + } + \ERRORusetaggingsocket % that should get a proper error message +} +\cs_new:Npn \UseExpandableTaggingSocket #1 { + \int_case:nnF + { \int_use:c { c__socket_tagsupport/#1_args_int } } + { + 0 \prg_do_nothing: + 1 \use_none:n + 2 \use_ii:nn } \ERRORusetaggingsocket % that should get a proper error message } +\int_new:N \l__tag_block_flattened_level_int +\NewSocket{tagsupport/para/restore}{0} +\NewSocketPlug{tagsupport/para/restore}{default} + { + \tl_set:Nn \l__tag_para_main_tag_tl {text-unit} + \tl_set_eq:NN \l__tag_para_tag_tl\l__tag_para_tag_default_tl + \bool_set_false:N\l__tag_para_flattened_bool + \int_zero:N \l__tag_block_flattened_level_int + \bool_set_true:N \l__tag_para_bool + } +\AssignSocketPlug{tagsupport/para/restore}{default} + + +\NewSocket{tagsupport/recordtarget}{0} +\NewSocketPlug{tagsupport/recordtarget}{kernel} + { + \tl_if_blank:VF \@currentHref + { + \prop_gput:Nee + \g__tag_struct_dest_num_prop + {\@currentHref} + {\tag_get:n{struct_num}} + } + } +\AssignSocketPlug{tagsupport/recordtarget}{kernel} \ExplSyntaxOff + +\NewSocket{tagsupport/toc/contentsline/before}{1} +\NewSocket{tagsupport/toc/contentsline/after}{1} +\NewSocket{tagsupport/toc/starttoc/before}{1} +\NewSocket{tagsupport/toc/starttoc/after}{1} +\NewSocket{tagsupport/toc/leaders/before}{0} +\NewSocket{tagsupport/toc/leaders/after}{0} \NewSocket{tagsupport/tbl/cell/begin}{0} \NewSocket{tagsupport/tbl/cell/end}{0} \NewSocket{tagsupport/tbl/row/begin}{0} @@ -19576,7 +19747,9 @@ Type H <return> for immediate help.}% \NewSocket{tagsupport/tbl/pcell/begin}{0} \NewSocket{tagsupport/tbl/pcell/end}{0} \NewSocket{tagsupport/tbl/init}{0} +\NewSocket{tagsupport/tbl/init/celldata}{0} \NewSocket{tagsupport/tbl/finalize}{0} +\NewSocket{tagsupport/tbl/restore/celldata}{0} \NewSocket{tagsupport/tbl/colspan}{1} @@ -19588,6 +19761,16 @@ Type H <return> for immediate help.}% \NewSocket{tagsupport/tbl/longtable/finalize}{0} \NewSocket{tagsupport/tbl/longtable/head}{0} \NewSocket{tagsupport/tbl/longtable/foot}{0} +\NewSocket{tagsupport/tbl/leaders/begin}{0} +\NewSocket{tagsupport/tbl/leaders/end}{0} +\NewSocket{tagsupport/float/hmode/begin}{0} +\NewSocket{tagsupport/float/hmode/end}{0} +\NewSocket{tagsupport/float/begin}{0} +\NewSocket{tagsupport/float/end}{0} +\NewSocket{tagsupport/caption/begin}{1} +\NewSocket{tagsupport/caption/end}{0} +\NewSocket{tagsupport/caption/label/begin}{0} +\NewSocket{tagsupport/caption/label/end}{0} \ExplSyntaxOn \int_new:N \g__tbl_col_int \int_new:N \g__tbl_row_int @@ -19661,6 +19844,7 @@ Type H <return> for immediate help.}% { max:~ \l__tbl_saved_table_cols_tl } ) } + \UseTaggingSocket{tbl/init/celldata} \int_gzero:N \g__tbl_row_int \int_gzero:N \g__tbl_col_int \tl_gset:Nn \g__tbl_span_tl {1} @@ -19696,6 +19880,7 @@ Type H <return> for immediate help.}% \int_gset:Nn \g__tbl_row_int { \l__tbl_saved_row_tl } \tl_gset_eq:NN \g__tbl_span_tl \l__tbl_saved_span_tl \tl_gset_eq:NN \g__tbl_table_cols_tl \l__tbl_saved_table_cols_tl + \UseTaggingSocket{tbl/restore/celldata} \__tbl_trace:n { ==>~ restored~cell~data:~ \int_use:N \g__tbl_row_int, \int_use:N \g__tbl_col_int, @@ -19726,7 +19911,6 @@ Type H <return> for immediate help.}% \crcr } \ExplSyntaxOff -\let\@kernel@refstepcounter\refstepcounter \def\hyper@nopatch@longtable{} %%% From File: ltfinal.dtx \tracingstats1 @@ -20067,11 +20251,15 @@ Type H <return> for immediate help.}% \keys_define:nn { __kernel } { lang .str_set:N = \reserved@a , - locale .str_set:N = \reserved@a + locale .str_set:N = \reserved@a , + words .choices:nn = + { all , first } + { \str_set:Nn \reserved@b {#1} } } \cs_new_protected:Npn \@@text@case@aux #1#2#3 { \cs_set_nopar:Npn \reserved@a { } + \cs_set_nopar:Npn \reserved@b { } \tl_if_blank:nTF {#2} { \str_set:Nx \reserved@a @@ -20083,7 +20271,7 @@ Type H <return> for immediate help.}% } } { \keys_set:nn { __kernel } {#2} } - \use:c { text_ #1 case:Vn } \reserved@a {#3} + \use:c { text_ #1 :Vn } \reserved@a {#3} } \exp_args_generate:n { cnx } \cs_set_protected:Npn \reserved@a #1 @@ -20097,20 +20285,22 @@ Type H <return> for immediate help.}% \reserved@a { Upper } \reserved@a { Lower } \reserved@a { Title } +\cs_generate_variant:Nn \text_titlecase_all:nn { V } +\cs_generate_variant:Nn \text_titlecase_first:nn { V } \cs_new_protected:cpn { MakeLowercase \c_space_tl \c_space_tl \c_space_tl } [#1] #2 {{ \let \OE \oe - \@@text@case@aux { lower } {#1} {#2} + \@@text@case@aux { lowercase } {#1} {#2} }} \cs_new_protected:cpn { MakeUppercase \c_space_tl \c_space_tl \c_space_tl } [#1] #2 {{ \let \oe \OE - \@@text@case@aux { upper } {#1} {#2} + \@@text@case@aux { uppercase } {#1} {#2} }} \cs_new_protected:cpn { MakeTitlecase \c_space_tl \c_space_tl \c_space_tl } [#1] #2 {{ \let \oe \OE - \@@text@case@aux { title } {#1} {#2} + \@@text@case@aux { titlecase_ \reserved@b } {#1} {#2} }} \cs_new_protected_nopar:Npn\AddToNoCaseChangeList {\tl_put_right:Nn \l_text_case_exclude_arg_tl} diff --git a/Master/texmf-dist/tex/latex-dev/base/latex209.def b/Master/texmf-dist/tex/latex-dev/base/latex209.def index 633dbaebcd9..c4a6450ac4f 100644 --- a/Master/texmf-dist/tex/latex-dev/base/latex209.def +++ b/Master/texmf-dist/tex/latex-dev/base/latex209.def @@ -167,6 +167,11 @@ \newdimen\@maxsep \newdimen\@dblmaxsep \mark{{}{}} +\ExplSyntaxOn +\marks1{\__mark_value:nn {2.09-compat}{}} +\marks2{\__mark_value:nn {2.09-compat}{}} +\marks3{\__mark_value:nn {2.09-compat}{}} +\ExplSyntaxOff \def\sloppy{\tolerance \@M \hfuzz .5\p@ \vfuzz .5\p@} \def\@finalstrut#1{\unskip\strut} \let \@marginparreset \@empty diff --git a/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty b/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty index 5a696389f15..8a463b97ddb 100644 --- a/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty +++ b/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty @@ -226,6 +226,7 @@ \def\pkgcls@use@this@release#1#2{% \pkgcls@show@selection{#1}{#2}% \pkgcls@targetdate\z@ + \@addtofilelist{#1}% \@@input #1\relax \endinput } @@ -300,7 +301,7 @@ } %%% From File: ltvers.dtx \edef\latexreleaseversion - {2024-11-01} + {2025-06-01} \newif\if@includeinrelease \@includeinreleasefalse \def\IncludeInRelease#1{% @@ -431,7 +432,7 @@ \@skipping@modulefalse \fi} \ProvidesPackage{latexrelease} - [2022/11/14 v1.0p LaTeX release emulation and tests + [2024/08/11 v1.0p LaTeX release emulation and tests (including releases up to \latexreleaseversion)] \NeedsTeXFormat{LaTeX2e}[1996/06/01] \@ifundefined{sourceLaTeXdate}{% @@ -1989,8 +1990,8 @@ of this package available from CTAN} \EndIncludeInRelease %%% From File: ltcmd.dtx -\def\ltcmdversion{v1.2e} -\def\ltcmddate{2024-04-17} +\def\ltcmdversion{v1.2f} +\def\ltcmddate{2024-07-06} \edef\@latexrelease@catcode@null{\the\catcode`\^^@ } \catcode`\^^@=12 \ExplSyntaxOn @@ -2209,6 +2210,22 @@ of this package available from CTAN} { \cs_set_nopar:cpx } { \l__cmd_function_tl \c_space_tl } ##1##2 { ##1 {##2} } } +\IncludeInRelease{2024/11/01}{\__cmd_declare_env:nnnn}% + {Use~space-trimmed~envname~directly} +\cs_new_protected:Npn \__cmd_declare_env:nnnn #1#2 + { + \str_set:Nn \l__cmd_environment_str {#1} + \cs_if_exist:cTF { #1 } + { \msg_info:nnnn { cmd } { redefine-env } { #1 } { #2 } } + { \msg_info:nnnn { cmd } { define-env } { #1 } { #2 } } + \bool_set_false:N \l__cmd_expandable_bool + \bool_set_true:N \l__cmd_environment_bool + \__cmd_declare_env_internal:nnnn {#1} {#2} + } +\cs_generate_variant:Nn \__cmd_declare_env:nnnn { e } +\EndIncludeInRelease +\IncludeInRelease{2024/06/01}{\__cmd_declare_env:nnnn}% + {Use~space-trimmed~envname~directly} \cs_new_protected:Npn \__cmd_declare_env:nnnn #1#2 { \str_set:Nx \l__cmd_environment_str {#1} @@ -2228,6 +2245,8 @@ of this package available from CTAN} \exp_args:NV \__cmd_declare_env_internal:nnnn \l__cmd_environment_str {#2} } + +\EndIncludeInRelease \cs_new_protected:Npn \__cmd_declare_env_internal:nnnn #1#2#3#4 { \exp_args:Nc \__cmd_declare_cmd_internal:Nnnn { environment~ #1 } {#2} @@ -4806,6 +4825,61 @@ of this package available from CTAN} \__cmd_check_definable:nNT {#1} \DeclareDocumentCommand { \__cmd_declare_cmd:Nnn #1 {#2} {#3} } } +\IncludeInRelease{2024/11/01}{\NewDocumentEnvironment}% + {Trim~spaces~from~envname~first} +\cs_new_protected:Npn \NewDocumentEnvironment #1#2#3#4 + { + \__cmd_new_env:ennn { \tl_trim_spaces:e {#1} } {#2} {#3} {#4} + } +\cs_new_protected:Npn \RenewDocumentEnvironment #1#2#3#4 + { + \__cmd_renew_env:ennn { \tl_trim_spaces:e {#1} } {#2} {#3} {#4} + } +\cs_new_protected:Npn \ProvideDocumentEnvironment #1#2#3#4 + { + \__cmd_provide_env:ennn { \tl_trim_spaces:e {#1} } {#2} {#3} {#4} + } +\cs_new_protected:Npn \DeclareDocumentEnvironment #1#2#3#4 + { + \__cmd_declare_env:ennn { \tl_trim_spaces:e {#1} } {#2} {#3} {#4} + } +\cs_new_protected:Npn \__cmd_new_env:nnnn #1 + { + \cs_if_exist:cTF {#1} + { + \msg_error:nnx { cmd } { env-already-defined } {#1} + \use_none:nnn + } + { + \cs_if_exist:cTF { end #1 } + { + \msg_error:nnx { cmd } { env-end-already-defined } {#1} + \use_none:nnn + } + { \__cmd_declare_env:nnnn {#1} } + } + } +\cs_new_protected:Npn \__cmd_renew_env:nnnn #1 + { + \cs_if_exist:cTF {#1} + { \__cmd_declare_env:nnnn {#1} } + { + \msg_error:nnx { cmd } { env-undefined } {#1} + \use_none:nnn + } + } +\cs_new_protected:Npn \__cmd_provide_env:nnnn #1 + { + \cs_if_exist:cTF {#1} + { \use_none:nnn } + { \__cmd_declare_env:nnnn {#1} } + } +\cs_generate_variant:Nn \__cmd_new_env:nnnn { e } +\cs_generate_variant:Nn \__cmd_renew_env:nnnn { e } +\cs_generate_variant:Nn \__cmd_provide_env:nnnn { e } +\EndIncludeInRelease +\IncludeInRelease{2024/06/01}{\NewDocumentEnvironment}% + {Trim~spaces~from~envname~first} \cs_new_protected:Npn \NewDocumentEnvironment #1#2#3#4 { \cs_if_exist:cTF {#1} @@ -4826,6 +4900,14 @@ of this package available from CTAN} { \cs_if_exist:cF {#1} { \__cmd_declare_env:nnnn {#1} {#2} {#3} {#4} } } \cs_new_protected:Npn \DeclareDocumentEnvironment #1#2#3#4 { \__cmd_declare_env:nnnn {#1} {#2} {#3} {#4} } +\cs_undefine:N \__cmd_new_env:nnnn +\cs_undefine:N \__cmd_new_env:ennn +\cs_undefine:N \__cmd_renew_env:nnnn +\cs_undefine:N \__cmd_renew_env:ennn +\cs_undefine:N \__cmd_provide_env:nnnn +\cs_undefine:N \__cmd_provide_env:ennn + +\EndIncludeInRelease \cs_new_protected:Npn \NewExpandableDocumentCommand #1#2#3 { \__cmd_check_definable:nNT {#1} \NewExpandableDocumentCommand @@ -5249,17 +5331,19 @@ of this package available from CTAN} {Providing~hooks} \cs_gset_protected:Npn \hook_activate_generic:n #1 { } \EndIncludeInRelease -\cs_new:Npn \__hook_parse_label_default:n #1 +\cs_new:Npn \__hook_parse_label_default:nN #1#2 { \tl_if_novalue:nTF {#1} { \__hook_currname_or_default: } - { \tl_trim_spaces_apply:nN {#1} \__hook_parse_dot_label:n } + { \tl_trim_spaces_apply:nN {#1} \__hook_parse_dot_label:nN #2 } } -\cs_new:Npn \__hook_parse_dot_label:n #1 +\cs_new:Npn \__hook_parse_dot_label:nN #1#2 { \tl_if_empty:nTF {#1} { - \msg_expandable_error:nn { hooks } { empty-label } + \bool_if:NTF #2 + { \msg_expandable_error:nn { hooks } { empty-label } } + { \msg_expandable_error:nn { hooks } { empty-hook } } \__hook_currname_or_default: } { @@ -5314,24 +5398,24 @@ of this package available from CTAN} \cs_new_protected:Npn \__hook_normalize_hook_args:Nn #1 #2 { \__hook_normalize_hook_args_aux:Nn #1 - { { \__hook_parse_label_default:n {#2} } } + { { \__hook_parse_label_default:nN {#2} \c_false_bool } } } \cs_new_protected:Npn \__hook_normalize_hook_args:Nnn #1 #2 #3 { \__hook_normalize_hook_args_aux:Nn #1 { - { \__hook_parse_label_default:n {#2} } - { \__hook_parse_label_default:n {#3} } + { \__hook_parse_label_default:nN {#2} \c_false_bool } + { \__hook_parse_label_default:nN {#3} \c_true_bool } } } \cs_new_protected:Npn \__hook_normalize_hook_rule_args:Nnnnn #1 #2 #3 #4 #5 { \__hook_normalize_hook_args_aux:Nn #1 { - { \__hook_parse_label_default:n {#2} } - { \__hook_parse_label_default:n {#3} } + { \__hook_parse_label_default:nN {#2} \c_false_bool } + { \__hook_parse_label_default:nN {#3} \c_true_bool } { \tl_trim_spaces:n {#4} } - { \__hook_parse_label_default:n {#5} } + { \__hook_parse_label_default:nN {#5} \c_true_bool } } } \tl_gset:Nn \g__hook_hook_curr_name_tl { top-level } @@ -6781,7 +6865,9 @@ of this package available from CTAN} { #2 { The~hook~is~empty } } { \__hook_log_line:x { Code~chunks: } - \prop_if_empty:cTF { g__hook_#1_code_prop } + \bool_lazy_or:nnTF + { ! \prop_if_exist_p:c { g__hook_#1_code_prop } } + { \prop_if_empty_p:c { g__hook_#1_code_prop } } { \__hook_log_line_indent:x { --- } } { \prop_map_inline:cn { g__hook_#1_code_prop } @@ -6988,16 +7074,19 @@ of this package available from CTAN} } \cs_new_protected:Npn \__hook_list_rules:nn #1 #2 { - \cs_set_protected:Npn \__hook_tmp:w ##1 ##2 ##3 {#2} - \prop_map_inline:cn { g__hook_#1_code_prop } + \prop_if_exist:cT { g__hook_#1_code_prop } { + \cs_set_protected:Npn \__hook_tmp:w ##1 ##2 ##3 {#2} \prop_map_inline:cn { g__hook_#1_code_prop } { - \__hook_if_label_case:nnnnn {##1} {####1} - { \prop_map_break: } - { \__hook_list_one_rule:nnn {##1} {####1} } - { \__hook_list_one_rule:nnn {####1} {##1} } - {#1} + \prop_map_inline:cn { g__hook_#1_code_prop } + { + \__hook_if_label_case:nnnnn {##1} {####1} + { \prop_map_break: } + { \__hook_list_one_rule:nnn {##1} {####1} } + { \__hook_list_one_rule:nnn {####1} {##1} } + {#1} + } } } } @@ -7535,6 +7624,10 @@ of this package available from CTAN} Empty~code~label~\msg_line_context:.~ Using~'\__hook_currname_or_default:'~instead. } +\msg_new:nnn { hooks } { empty-hook } + { + Empty~hook~name~\msg_line_context:. + } \msg_new:nnn { hooks } { no-default-label } { Missing~(empty)~default~label~\msg_line_context:. \\ @@ -7712,6 +7805,8 @@ of this package available from CTAN} \NewDocumentCommand \ClearHookRule { m m m } { \hook_gset_rule:nnnn {#1}{#2}{unrelated}{#3} } \cs_new_eq:NN \IfHookEmptyTF \hook_if_empty:nTF +\cs_new_eq:NN \IfHookEmptyT \hook_if_empty:nT +\cs_new_eq:NN \IfHookEmptyF \hook_if_empty:nF \cs_new_eq:NN \IfHookExistsTF \__hook_if_usable:nTF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \cs_new_protected:Npn \hook_disable:n @@ -8547,7 +8642,7 @@ of this package available from CTAN} { \cs_generate_from_arg_count:cNnn { __socket_#1_plug_#2:w } - \cs_new_protected:Npn + \cs_new:Npn { \int_use:c { c__socket_#1_args_int } } {#3} \seq_put_right:cn { l__socket_#1_plugs_seq } {#2} @@ -8566,7 +8661,7 @@ of this package available from CTAN} { \cs_generate_from_arg_count:cNnn { __socket_#1_plug_#2:w } - \cs_set_protected:Npn + \cs_set:Npn { \int_use:c { c__socket_#1_args_int } } {#3} \__socket_debug_term:n @@ -8606,6 +8701,10 @@ of this package available from CTAN} \cs_new_eq:NN \socket_use:nn \socket_use:nw % socket with one input \cs_new_eq:NN \socket_use:nnn \socket_use:nw % socket with two inputs \cs_new_eq:NN \socket_use:nnnn \socket_use:nw % socket with three inputs +\cs_new:Npn \socket_use_expandable:nw #1 { + \use:c { __socket_#1_plug_ \str_use:c { l__socket_#1_plug_str } :w } +} +\cs_new_eq:NN \socket_use_expandable:n \socket_use_expandable:nw % socket with no inputs \msg_new:nnnn { socket } { already-declared } { Socket~ '#1'~ already~ declared! } @@ -9496,23 +9595,33 @@ of this package available from CTAN} } \cs_new_protected:Npn \__template_assign_variable: { - \__template_assign_variable:c + \exp_args:Ne \__template_assign_variable:n { - \__template_map_var_type: _ - \bool_if:NT \l__template_global_bool { g } set:Nn + \__template_map_var_type: + _ + \bool_if:NT \l__template_global_bool { g } + set:N } } -\cs_new_protected:Npn \__template_assign_variable:N #1 +\cs_new_protected:Npn \__template_assign_variable:n #1 { - \__template_if_key_value:VT \l__template_value_tl - { \__template_key_to_value: } - \tl_put_right:Ne \l__template_assignments_tl + \__template_if_key_value:VTF \l__template_value_tl { - #1 \exp_not:V \l__template_var_tl - { \exp_not:V \l__template_value_tl } + \__template_key_to_value: + \tl_put_right:Ne \l__template_assignments_tl + { + \exp_not:c { #1 V } \exp_not:V \l__template_var_tl + \exp_not:V \l__template_value_tl + } + } + { + \tl_put_right:Ne \l__template_assignments_tl + { + \exp_not:c { #1 n } \exp_not:V \l__template_var_tl + { \exp_not:V \l__template_value_tl } + } } } -\cs_generate_variant:Nn \__template_assign_variable:N { c } \cs_new_protected:Npn \__template_key_to_value: { \exp_after:wN \__template_key_to_value_auxi:w \l__template_value_tl } \cs_new_protected:Npn \__template_key_to_value_auxi:w \KeyValue #1 @@ -9926,6 +10035,13 @@ of this package available from CTAN} \msg_error:nnnn { hooks }{ para-mode }{begin}{horizontal} \fi: \__para_handle_indent: } +\cs_set:Npn \__para_tmp:w #1#2#3#4#5 { } +\tl_gput_right:Nx \g__para_standard_everypar_tl { + \exp_not:N \the + \exp_not:N \toks + \exp_after:wN \__para_tmp:w \token_to_meaning:N \everypar + \c_space_tl +} \EndIncludeInRelease \IncludeInRelease{2021/06/01} {\g__para_standard_everypar_tl}{minipage~ fix} @@ -9962,10 +10078,10 @@ of this package available from CTAN} \newtoks \everypar \tl_gput_right:Nx \g__para_standard_everypar_tl { - \exp_not:N \the - \exp_not:N \toks - \the \allocationnumber - \c_space_tl + \exp_not:N \the + \exp_not:N \toks + \the \allocationnumber + \c_space_tl } \box_new:N \g_para_indent_box @@ -10090,6 +10206,32 @@ of this package available from CTAN} \let \IfDocumentMetadataTF \@firstoftwo \DocumentMetadata } +\IncludeInRelease{2024/11/01}% + {\MakeLinkTarget}{Record target name for tagging support}% +\ExplSyntaxOn +\int_new:N\g__kernel_target_int +\NewDocumentCommand\MakeLinkTarget{sO{}m}{% + \ifvmode + \special{}% + \else + \@savsf\spacefactor + \smash{}% + \spacefactor\@savsf + \fi + \IfBooleanTF {#1} + { + \tl_gset:Ne \@currentHref {#3} + } + { + \int_gincr:N\g__kernel_target_int + \tl_gset:Ne \@currentHref {target*.\int_use:N\g__kernel_target_int} + } + \UseTaggingSocket{recordtarget} + } +\ExplSyntaxOff +\EndIncludeInRelease +\IncludeInRelease{2022/06/01}% + {\MakeLinkTarget}{Record target name for tagging support}% \NewDocumentCommand\MakeLinkTarget{sO{}m}{% \ifvmode \special{}% @@ -10098,7 +10240,8 @@ of this package available from CTAN} \smash{}% \spacefactor\@savsf \fi} -\NewDocumentCommand\LinkTargetOn{}{} +\EndIncludeInRelease + \NewDocumentCommand\LinkTargetOn{}{} \NewDocumentCommand\LinkTargetOff{}{} \NewDocumentCommand\NextLinkTarget{m}{} \IncludeInRelease{0000/00/00}{ltmeta}% @@ -10258,6 +10401,20 @@ of this package available from CTAN} \fi \fi}% \EndIncludeInRelease +\IncludeInRelease{2024/11/01}% + {\addvspace}{drop unnecessary no-item error}% +\protected\def\addvspace#1{% + \ifhmode \ifinner \@LRmoderr \else \par \fi \fi + \if@minipage\else + \ifdim \lastskip =\z@ + \@vspace@calcify{#1}% + \else + \setlength\@tempskipb{#1}% + \@xaddvskip + \fi + \fi +} +\EndIncludeInRelease \IncludeInRelease{2020/10/01}% {\addvspace}{\addvspace calc support}% \def\addvspace#1{% @@ -10291,6 +10448,38 @@ of this package available from CTAN} \@noitemerr \fi} \EndIncludeInRelease +\IncludeInRelease{2024/11/01}% + {\addpenalty}{\addpenalty drop error}% +\protected\def\addpenalty#1{% + \ifhmode \ifinner \@LRmoderr \else \par \fi \fi + \if@minipage + \else + \if@nobreak + \else + \ifdim\lastskip=\z@ + \penalty#1\relax + \else + \@tempskipb\lastskip + \begingroup + \@tempskipa\@tempskipb + \advance \@tempskipb + \ifdim\prevdepth>\maxdepth\maxdepth\else + \ifdim \prevdepth = -\@m\p@ \z@ \else \prevdepth \fi + \fi + \vskip -\@tempskipb + \penalty#1% + \ifdim\@tempskipa=\@tempskipb + \else + \advance\@tempskipb -\@tempskipa + \vskip \@tempskipb + \fi + \vskip \@tempskipa + \endgroup + \fi + \fi + \fi +} +\EndIncludeInRelease \IncludeInRelease{2015/01/01}% {\addpenalty}{\addpenalty}% \def\addpenalty#1{% @@ -11227,6 +11416,54 @@ of this package available from CTAN} {Reset nested counters}%% \def\@stpelt#1{\global\csname c@#1\endcsname \z@}% \EndIncludeInRelease +\IncludeInRelease{2024/11/01}{\@definecounter} + {provide theHfoo commands}% +\def\@definecounter#1{\expandafter\newcount\csname c@#1\endcsname + \setcounter{#1}\z@ + \global\expandafter\let\csname cl@#1\endcsname\@empty + \@addtoreset{#1}{@ckpt}% + \global\expandafter\let\csname p@#1\endcsname\@empty + \expandafter\xdef\csname theH#1\endcsname{% + \noexpand\the\noexpand\value{#1}}% + \expandafter + \ifx\csname the#1\endcsname\relax + \expandafter + \gdef\csname the#1\expandafter\endcsname\expandafter + {\expandafter\@arabic\csname c@#1\endcsname}% + \else + \@latex@warning{Command `\string\the#1' already + defined -- not changed}% + \fi} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}{\@definecounter} + {provide theHfoo commands}%% +\def\@definecounter#1{\expandafter\newcount\csname c@#1\endcsname + \setcounter{#1}\z@ + \global\expandafter\let\csname cl@#1\endcsname\@empty + \@addtoreset{#1}{@ckpt}% + \global\expandafter\let\csname p@#1\endcsname\@empty + \expandafter + \ifx\csname the#1\endcsname\relax + \expandafter + \gdef\csname the#1\expandafter\endcsname\expandafter + {\expandafter\@arabic\csname c@#1\endcsname}% + \else + \@latex@warning{Command `\string\the#1' already + defined -- not changed}% + \fi} +\EndIncludeInRelease +\IncludeInRelease{2024/11/01}{\@addtoreset} + {provide theHfoo commands}% +\def\@addtoreset#1#2{\expandafter\@cons\csname cl@#2\endcsname {{#1}}% + \expandafter\xdef\csname theH#1\endcsname{% + \expandafter\noexpand\csname theH#2\endcsname.% + \noexpand\the\noexpand\value{#1}}% +} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}{\@addtoreset} + {provide theHfoo commands}%% +\def\@addtoreset#1#2{\expandafter\@cons\csname cl@#2\endcsname {{#1}}} +\EndIncludeInRelease \IncludeInRelease{2018-04-01} {\@removefromreset}{Add interfaces}% \def\@removefromreset#1#2{% @@ -11359,6 +11596,17 @@ of this package available from CTAN} {\setlength}{Using \setlength with \dimen0}% \def\setlength#1#2{#1#2\relax} \EndIncludeInRelease +\IncludeInRelease{2024/11/01}% + {\@settodim}{suspend tagging}% +\def\@settodim#1#2#3{\setbox\@tempboxa\hbox + {{\SuspendTagging{\@settodim}#3\ResumeTagging{\@settodim}}}#2#1\@tempboxa + \setbox\@tempboxa\box\voidb@x} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@settodim}{suspend tagging}% +\def\@settodim#1#2#3{\setbox\@tempboxa\hbox{{#3}}#2#1\@tempboxa + \setbox\@tempboxa\box\voidb@x} +\EndIncludeInRelease %%% From File: ltfssbas.dtx %% Copyright (C) 1989-2002 Frank Mittelbach and Rainer Sch\"opf \IncludeInRelease{2020/02/02}% @@ -11664,6 +11912,7 @@ of this package available from CTAN} \hbadness\@M \hfuzz\maxdimen \tracingonline\z@ + \tracinglostchars\z@ \everypar={}% \leftskip\z@skip \rightskip\z@skip @@ -13718,45 +13967,6 @@ of this package available from CTAN} \egroup } \def\textcompsubstdefault{\rmsubstdefault} -\def\DeclareEncodingSubset#1#2{% - \DeclareEncodingSubset@aux{#1}#2*\DeclareEncodingSubset@aux -} -\def\DeclareEncodingSubset@aux#1#2*#3\DeclareEncodingSubset@aux#4{% - \expandafter\ifx\expandafter X\detokenize{#3}X% - \@DeclareEncodingSubset{#1}{#2}{#4}% - \else - \@DeclareEncodingSubset{#1}{#2LF}{#4}% - \@DeclareEncodingSubset{#1}{#2TLF}{#4}% - \@DeclareEncodingSubset{#1}{#2OsF}{#4}% - \@DeclareEncodingSubset{#1}{#2TOsF}{#4}% - \fi -} -\def\@DeclareEncodingSubset#1#2#3{% - \@ifundefined{#1:#2}% - {\@font@info{Setting #2 sub-encoding to #1/#3}}% - {\@font@info{Changing #2 sub-encoding to #1/#3}}% - \global\@namedef{#1:#2}{#3}} -\@onlypreamble\DeclareEncodingSubset -\@onlypreamble\DeclareEncodingSubset@aux -\@onlypreamble\@DeclareEncodingSubset - - -\def\CheckEncodingSubset#1#2#3#4#5{% - \ifnum #4>% - \expandafter\ifx\csname #2:\f@family\endcsname\relax - 0\csname #2:?\endcsname - \else - \csname #2:\f@family\endcsname - \fi - \relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {#1{#2}}{#3}% - #5% -} - \def\tc@errorwarn#1#2{\@latex@info{#1}} \def\tc@subst#1{% @@ -14073,11 +14283,7 @@ of this package available from CTAN} \DeclareEncodingSubset{TS1}{?}{9} \DeclareEncodingSubset{TS1}{ccr} {0} \DeclareEncodingSubset{TS1}{cmbr} {0} -\DeclareEncodingSubset{TS1}{cmr} {0} -\DeclareEncodingSubset{TS1}{cmss} {0} \DeclareEncodingSubset{TS1}{cmtl} {0} -\DeclareEncodingSubset{TS1}{cmtt} {0} -\DeclareEncodingSubset{TS1}{cmvtt} {0} \DeclareEncodingSubset{TS1}{pxr} {0} \DeclareEncodingSubset{TS1}{pxss} {0} \DeclareEncodingSubset{TS1}{pxtt} {0} @@ -14575,11 +14781,42 @@ of this package available from CTAN} \IncludeInRelease{2022/06/01}% {\Ref}{Add starred version}% \def\@currentcounter{} -\def\refstepcounter#1{\stepcounter{#1}% +\EndIncludeInRelease +\IncludeInRelease{2024/11/01}% + {\@currentHref}{set theHcounter representation}% +\NewSocket{refstepcounter}{1} +\NewSocket{refstepcounter/target}{1} +\NewSocketPlug{refstepcounter/target}{kernel} + {\xdef\@currentHref {#1.\csname theH#1\endcsname}}% +\AssignSocketPlug{refstepcounter/target}{kernel} +\def\refstepcounter#1{% + \UseSocket{refstepcounter}{% + \stepcounter{#1}% \edef\@currentcounter{#1}% \protected@edef\@currentlabel {\csname p@#1\expandafter\endcsname\csname the#1\endcsname}% + \UseSocket{refstepcounter/target}{#1}% + \UseTaggingSocket{recordtarget}% + }% +} +\def\@kernel@refstepcounter#1{% + \UseSocket{refstepcounter}{% + \stepcounter{#1}% + \edef\@currentcounter{#1}% + \protected@edef\@currentlabel + {\csname p@#1\expandafter\endcsname\csname the#1\endcsname}}}% +\EndIncludeInRelease +\IncludeInRelease{2022/06/01}% + {\@currentHref}{set theHcounter representation}% +\def\refstepcounter#1{\stepcounter{#1}% + \edef\@currentcounter{#1}% + \protected@edef\@currentlabel + {\csname p@#1\expandafter\endcsname\csname the#1\endcsname}% } +\let\@kernel@refstepcounter\refstepcounter +\EndIncludeInRelease +\IncludeInRelease{2022/06/01}% + {\Ref}{Add starred version}% \def\labelformat#1{\expandafter\def\csname p@#1\endcsname##1} \def\@kernel@Ref#1{\protected@edef\@tempa{\@kernel@ref{#1}}% \expandafter\MakeUppercase\@tempa} @@ -14685,14 +14922,11 @@ of this package available from CTAN} \cs_generate_variant:Nn \property_record:nn { nV , ee, oo } \cs_new_protected:Npn \__property_record:nn #1#2 { - \legacy_if:nT { @filesw } + \protected@write \@auxout {} { - \protected@write \@auxout {} - { - \token_to_str:N \new@label@record - {#1} - { \clist_map_function:nN {#2} \__property_record_value:n } - } + \token_to_str:N \new@label@record + {#1} + { \clist_map_function:nN {#2} \__property_record_value:n } } } \cs_generate_variant:Nn \__property_record:nn { e } @@ -14798,7 +15032,7 @@ of this package available from CTAN} \prg_return_false: } } -\prg_generate_conditional_variant:Nnn \property_if_exist:n {e} {TF} +\prg_generate_conditional_variant:Nnn \property_if_exist:n {e} { p , T , F, TF } \cs_new_eq:NN \IfPropertyExistsTF \property_if_exist:eTF \cs_new:Npn \IfPropertyExistsT #1#2 {\property_if_exist:eTF {#1}{#2}{} } \cs_new:Npn \IfPropertyExistsF #1 {\property_if_exist:eTF {#1}{} } @@ -14813,10 +15047,10 @@ of this package available from CTAN} \prg_return_false: } } -\prg_generate_conditional_variant:Nnn \property_if_recorded:n {e} {TF} +\prg_generate_conditional_variant:Nnn \property_if_recorded:n {e} { p , T , F, TF } \cs_new_eq:NN \IfLabelExistsTF \property_if_recorded:eTF -\cs_new:Npn \IfLabelExistsT #1#2 {\property_if_exist:eTF {#1}{#2}{} } -\cs_new:Npn \IfLabelExistsF #1 {\property_if_exist:eTF {#1}{} } +\cs_new:Npn \IfLabelExistsT #1#2 {\property_if_recorded:eTF {#1}{#2}{} } +\cs_new:Npn \IfLabelExistsF #1 {\property_if_recorded:eTF {#1}{} } \prg_new_conditional:Npnn \property_if_recorded:nn #1#2 { p , T , F, TF } % #1 label #2 property { @@ -14828,8 +15062,10 @@ of this package available from CTAN} \prg_return_false: } } -\prg_generate_conditional_variant:Nnn \property_if_recorded:nn {ee} {TF} +\prg_generate_conditional_variant:Nnn \property_if_recorded:nn {ee} { p , T , F, TF } \cs_new_eq:NN \IfPropertyRecordedTF \property_if_recorded:eeTF +\cs_new:Npn \IfPropertyRecordedT #1#2#3 { \property_if_recorded:eeTF {#1}{#2}{#3}{} } +\cs_new:Npn \IfPropertyRecordedF #1#2#3 { \property_if_recorded:eeTF {#1}{#2}{}{#3} } \cs_new_protected:Npn \property_ref_undefined_warn: { \flag_if_raised:nT { l__property_ref_flag } @@ -14943,6 +15179,9 @@ of this package available from CTAN} \NewHook{enddocument/afteraux} \NewHook{enddocument/info} \NewHook{enddocument/end} +\RemoveFromHook{enddocument/info}[kernel/filelist] +\RemoveFromHook{enddocument/info}[kernel/warnings] +\RemoveFromHook{enddocument/info}[kernel/release] \AddToHook{enddocument/info}[kernel/filelist]{\@dofilelist} \AddToHook{enddocument/info}[kernel/warnings]{\@enddocument@kernel@warnings} \AddToHook{enddocument/info}[kernel/release]{% @@ -15004,6 +15243,9 @@ of this package available from CTAN} \NewHook{enddocument/afteraux} \NewHook{enddocument/info} \NewHook{enddocument/end} +\RemoveFromHook{enddocument/info}[kernel/filelist] +\RemoveFromHook{enddocument/info}[kernel/warnings] +\RemoveFromHook{enddocument/info}[kernel/release] \AddToHook{enddocument/info}[kernel/filelist]{\@dofilelist} \AddToHook{enddocument/info}[kernel/warnings]{\@enddocument@kernel@warnings} \AddToHook{enddocument/info}[kernel/release]{% @@ -15127,7 +15369,7 @@ of this package available from CTAN} \EndIncludeInRelease \IncludeInRelease{2020/10/01}% {\begin}{Use hook system}% -\DeclareRobustCommand*\begin[1]{% +\protected\def\begin#1{% \UseHook{env/#1/before}% \@ifundefined{#1}% {\def\reserved@a{\@latex@error{Environment #1 undefined}\@eha}}% @@ -15145,34 +15387,6 @@ of this package available from CTAN} \fi \UseHook{env/#1/begin}% } -\edef\end - {\unexpanded{% - \romannumeral - \ifx\protect\@typeset@protect - \expandafter %1 - \expandafter %2 - \expandafter %1 - \expandafter %3 expands the \csname inside \end<space> - \expandafter %1 - \expandafter %2 expands \end<space> - \expandafter %1 expands the \else - \z@ - \else - \expandafter\z@\expandafter\protect - \fi - }% - \expandafter\noexpand\csname end \endcsname - } -\@namedef{end }#1{% - \romannumeral - \IfHookEmptyTF{env/#1/end}% - {\expandafter\z@}% - {\z@\UseHook{env/#1/end}}% - \csname end#1\endcsname\@checkend{#1}% - \expandafter\endgroup\if@endpe\@doendpe\fi - \UseHook{env/#1/after}% - \if@ignore\@ignorefalse\ignorespaces\fi -} \EndIncludeInRelease \IncludeInRelease{2019/10/01}% {\begin}{Making \begin/\end robust}% @@ -15184,6 +15398,23 @@ of this package available from CTAN} \csname #1\endcsname}}% \@ignorefalse \begingroup\@endpefalse\reserved@a} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\begin}{Making \begin/\end robust}% +\def\begin#1{% + \@ifundefined{#1}% + {\def\reserved@a{\@latex@error{Environment #1 undefined}\@eha}}% + {\def\reserved@a{\def\@currenvir{#1}% + \edef\@currenvline{\on@line}% + \csname #1\endcsname}}% + \@ignorefalse + \begingroup\@endpefalse\reserved@a} + +\expandafter\let\csname begin \endcsname\@undefined + +\EndIncludeInRelease +\IncludeInRelease{2019/10/01}% + {\end}{Making \begin/\end robust}% \edef\end {\unexpanded{% \romannumeral @@ -15202,27 +15433,52 @@ of this package available from CTAN} }% \expandafter\noexpand\csname end \endcsname } -\@namedef{end }#1{% - \csname end#1\endcsname\@checkend{#1}% - \expandafter\endgroup\if@endpe\@doendpe\fi - \if@ignore\@ignorefalse\ignorespaces\fi} \EndIncludeInRelease \IncludeInRelease{0000/00/00}% - {\begin}{Making \begin/\end robust}% -\def\begin#1{% - \@ifundefined{#1}% - {\def\reserved@a{\@latex@error{Environment #1 undefined}\@eha}}% - {\def\reserved@a{\def\@currenvir{#1}% - \edef\@currenvline{\on@line}% - \csname #1\endcsname}}% - \@ignorefalse - \begingroup\@endpefalse\reserved@a} + {\end}{Making \begin/\end robust}% \def\end#1{% \csname end#1\endcsname\@checkend{#1}% \expandafter\endgroup\if@endpe\@doendpe\fi \if@ignore\@ignorefalse\ignorespaces\fi} -\expandafter\let\csname begin \endcsname\@undefined +\EndIncludeInRelease +\IncludeInRelease{2024/11/01}% + {\end!space}{New @endpe handling}% +\@namedef{end }#1{% + \romannumeral + \IfHookEmptyTF{env/#1/end}% + {\expandafter\z@}% + {\z@\UseHook{env/#1/end}}% + \csname end#1\endcsname\@checkend{#1}% + \endgroup + \UseHook{env/#1/after}% + \if@ignore\@ignorefalse\ignorespaces\fi +} +\EndIncludeInRelease +\IncludeInRelease{2020/10/01}% + {\end!space}{Use hook system}% + +\@namedef{end }#1{% + \romannumeral + \IfHookEmptyTF{env/#1/end}% + {\expandafter\z@}% + {\z@\UseHook{env/#1/end}}% + \csname end#1\endcsname\@checkend{#1}% + \expandafter\endgroup\if@endpe\@doendpe\fi + \UseHook{env/#1/after}% + \if@ignore\@ignorefalse\ignorespaces\fi +} +\EndIncludeInRelease +\IncludeInRelease{2019/10/01}% + {\end!space}{Making \begin/\end robust}% + +\@namedef{end }#1{% + \csname end#1\endcsname\@checkend{#1}% + \expandafter\endgroup\if@endpe\@doendpe\fi + \if@ignore\@ignorefalse\ignorespaces\fi} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\end!space}{Making \begin/\end robust}% \expandafter\let\csname end \endcsname\@undefined \EndIncludeInRelease @@ -15697,6 +15953,25 @@ of this package available from CTAN} \let\leqno\@kernel@leqno \EndIncludeInRelease %%% From File: ltlists.dtx +\IncludeInRelease{2024/11/01}% + {\@endpetrue}{New @endpe handling}% +\def\@endpefalse{\global\let\if@endpe\iffalse} +\def\@endpetrue {% + \global\let\if@endpe\iftrue + \ifnum\currentgrouplevel>\z@ + \aftergroup\propagate@doendpe + \fi +} +\def\propagate@doendpe{\if@endpe \@doendpe \fi} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@endpetrue}{New @endpe handling}% + + +\def\@endpefalse{\let\if@endpe\iffalse} +\def\@endpetrue{\let\if@endpe\iftrue} + +\EndIncludeInRelease %%% From File: ltboxes.dtx \IncludeInRelease{2015/01/01}% {\makebox}{Make \makebox robust}% @@ -15776,7 +16051,6 @@ of this package available from CTAN} \IncludeInRelease{2021/06/01}% {\color@begingroup}{color group settings}% \let\color@begingroup\begingroup -\def\color@endgroup{\endgraf\endgroup} \def\color@setgroup{\color@begingroup} % changed further in color package \let\normalcolor\relax % remains untouched; only changed in a color package \def\color@hbox{\hbox\bgroup\color@begingroup} @@ -15787,7 +16061,6 @@ of this package available from CTAN} {\color@begingroup}{color group settings}% \let\color@begingroup\relax -\let\color@endgroup\relax \let\color@setgroup\relax \let\normalcolor\relax \let\color@hbox\relax @@ -15795,6 +16068,22 @@ of this package available from CTAN} \let\color@endbox\relax \EndIncludeInRelease +\IncludeInRelease{2024/11/01}% + {\color@endgroup}{color group settings}% +\def\color@endgroup{\endgraf\@endpefalse\endgroup} + +\EndIncludeInRelease +\IncludeInRelease{2021/06/01}% + {\color@endgroup}{color group settings}% +\def\color@endgroup{\endgraf\endgroup} + +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\color@endgroup}{color group settings}% + +\let\color@endgroup\relax + +\EndIncludeInRelease \IncludeInRelease{2015/01/01}% {\savebox}{Make \savebox robust}% \DeclareRobustCommand\savebox[1]{% @@ -17187,7 +17476,9 @@ of this package available from CTAN} %% Copyright (C) 2022-2024 %% Frank Mittelbach, The LaTeX Project %%% From File: ltmarks.dtx -%% \end{function} + + + \ExplSyntaxOn \NewModuleRelease{2022/06/01}{ltmarks} @@ -17207,43 +17498,42 @@ of this package available from CTAN} { \exp_args:Nc \newmarks {c__mark_class_ #1 _mark} \seq_gput_right:Nn \g__mark_classes_seq {#1} - \tl_new:c { g__mark_page_top_ #1 _tl } - \tl_new:c { g__mark_page_first_ #1 _tl } - \tl_new:c { g__mark_page_last_ #1 _tl } - \tl_new:c { g__mark_previous-page_top_ #1 _tl } - \tl_new:c { g__mark_previous-page_first_ #1 _tl } - \tl_new:c { g__mark_previous-page_last_ #1 _tl } - \tl_new:c { g__mark_column_top_ #1 _tl } - \tl_new:c { g__mark_column_first_ #1 _tl } - \tl_new:c { g__mark_column_last_ #1 _tl } - \tl_new:c { g__mark_previous-column_top_ #1 _tl } - \tl_new:c { g__mark_previous-column_first_ #1 _tl } - \tl_new:c { g__mark_previous-column_last_ #1 _tl } - \tl_new:c { g__mark_first-column_top_ #1 _tl } - \tl_new:c { g__mark_first-column_first_ #1 _tl } - \tl_new:c { g__mark_first-column_last_ #1 _tl } - \tl_new:c { g__mark_last-column_top_ #1 _tl } - \tl_new:c { g__mark_last-column_first_ #1 _tl } - \tl_new:c { g__mark_last-column_last_ #1 _tl } - \tl_set:cn { g__mark_page_top_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_page_first_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_page_last_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_previous-page_top_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_previous-page_first_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_previous-page_last_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_column_top_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_column_first_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_column_last_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_previous-column_top_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_previous-column_first_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_previous-column_last_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_first-column_top_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_first-column_first_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_first-column_last_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_last-column_top_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_last-column_first_ #1 _tl }{ \__mark_id:n{0} } - \tl_set:cn { g__mark_last-column_last_ #1 _tl }{ \__mark_id:n{0} } + \__mark_init_region:nn {page}{#1} + \__mark_init_region:nn {previous-page}{#1} + \__mark_init_region:nn {column}{#1} + \__mark_init_region:nn {previous-column}{#1} + \__mark_init_region:nn {first-column}{#1} + \__mark_init_region:nn {last-column}{#1} + \__mark_init_region:nn {mcol-1}{#1} + \__mark_init_region:nn {mcol-2}{#1} + \__mark_init_region:nn {mcol-3}{#1} + \__mark_init_region:nn {mcol-4}{#1} + \__mark_init_region:nn {mcol-5}{#1} + \__mark_init_region:nn {mcol-6}{#1} + \__mark_init_region:nn {mcol-7}{#1} + \__mark_init_region:nn {mcol-8}{#1} + \__mark_init_region:nn {mcol-9}{#1} + \__mark_init_region:nn {mcol-10}{#1} + \__mark_init_region:nn {mcol-11}{#1} + \__mark_init_region:nn {mcol-12}{#1} + \__mark_init_region:nn {mcol-13}{#1} + \__mark_init_region:nn {mcol-14}{#1} + \__mark_init_region:nn {mcol-15}{#1} + \__mark_init_region:nn {mcol-16}{#1} + \__mark_init_region:nn {mcol-17}{#1} + \__mark_init_region:nn {mcol-18}{#1} + \__mark_init_region:nn {mcol-19}{#1} + \__mark_init_region:nn {mcol-20}{#1} +} +\cs_new_protected:Npn \__mark_init_region:nn #1 #2 { + \tl_new:c { g__mark_#1_top_ #2 _tl } + \tl_new:c { g__mark_#1_first_ #2 _tl } + \tl_new:c { g__mark_#1_last_ #2 _tl } + \tl_set_eq:cN { g__mark_#1_top_ #2 _tl } \c__mark_empty_tl + \tl_set_eq:cN { g__mark_#1_first_ #2 _tl } \c__mark_empty_tl + \tl_set_eq:cN { g__mark_#1_last_ #2 _tl } \c__mark_empty_tl } +\tl_const:Nn \c__mark_empty_tl { \__mark_value:nn{0}{} } \box_new:N \l__mark_box \box_new:N \l__mark_ii_box \tl_new:N \g__mark_tmp_tl @@ -17295,13 +17585,13 @@ of this package available from CTAN} \exp_not:N \l__mark_saved_parameters_tl } \tl_new:N \l__mark_saved_parameters_tl -\cs_new_protected:Npn \__mark_update_structure_from_material:nn #1#2 { +\cs_new_protected:Npn \mark_update_structure_from_material:nn #1#2 { \__mark_extract_and_handle_marks:nn { \__mark_update_structure_from_splitmarks:n {#1} } { #2 } } \cs_new_protected:Npn \__mark_update_structure_from_splitmarks:n #1 { - \__mark_update_structure_alias:nn { previous-#1 } {#1} + \mark_copy_structure:nn { previous-#1 } {#1} \seq_map_inline:Nn \g__mark_classes_seq { \tl_gset_eq:Nc \g__mark_new_top_tl { g__mark_#1_last_##1_tl } @@ -17325,9 +17615,9 @@ of this package available from CTAN} } } } -\cs_new_protected:Npn \__mark_get_marks_for_reinsertion:nNN #1#2#3 { - \tl_clear:N \g__mark_first_marks_tl - \tl_clear:N \g__mark_last_marks_tl +\cs_new_protected:Npn \mark_get_marks_for_reinsertion:nNN #1#2#3 { + \tl_gclear:N \g__mark_first_marks_tl + \tl_gclear:N \g__mark_last_marks_tl \__mark_extract_and_handle_marks:nn \__mark_get_from_splitmarks: { #1 } @@ -17345,12 +17635,14 @@ of this package available from CTAN} } { \tl_gput_right:Ne \g__mark_last_marks_tl - { \mark_insert:nn {##1} { \g__mark_tmp_tl } } + { \mark_insert:nn {##1} { \__mark_drop_id:o { \g__mark_tmp_tl } } } \tl_gput_right:Ne \g__mark_first_marks_tl { \mark_insert:nn {##1} { - \tex_splitfirstmarks:D - \use:c { c__mark_class_##1_mark } + \__mark_drop_id:o { + \tex_splitfirstmarks:D + \use:c { c__mark_class_##1_mark } + } } } } @@ -17358,7 +17650,7 @@ of this package available from CTAN} } \tl_new:N \g__mark_first_marks_tl \tl_new:N \g__mark_last_marks_tl -\cs_new_protected:Npn \__mark_update_structure_alias:nn #1#2 { +\cs_new_protected:Npn \mark_copy_structure:nn #1#2 { \seq_map_inline:Nn \g__mark_classes_seq { \tl_gset_eq:cc { g__mark_ #1 _top_ ##1 _tl } @@ -17369,16 +17661,27 @@ of this package available from CTAN} { g__mark_ #2 _last_ ##1 _tl } } } -\cs_new_protected:Npn \__mark_update_structure_to_err:n #1 { +\cs_new_protected:Npn \mark_clear_structure:n #1 { + \seq_map_inline:Nn \g__mark_classes_seq + { + \tl_gset_eq:cN { g__mark_ #1 _top_ ##1 _tl } + \c__mark_empty_tl + \tl_gset_eq:cN { g__mark_ #1 _first_ ##1 _tl } + \c__mark_empty_tl + \tl_gset_eq:cN { g__mark_ #1 _last_ ##1 _tl } + \c__mark_empty_tl + } +} +\cs_new_protected:Npn \mark_set_structure_to_err:n #1 { \seq_map_inline:Nn \g__mark_classes_seq { - \tl_gset:cn { g__mark_ #1 _top_ ##1 _tl } { \__mark_error:n {#1} } - \tl_gset:cn { g__mark_ #1 _first_ ##1 _tl } { \__mark_error:n {#1} } - \tl_gset:cn { g__mark_ #1 _last_ ##1 _tl } { \__mark_error:n {#1} } + \tl_gset:ce { g__mark_ #1 _top_ ##1 _tl } { \__mark_value:nn{?}{\__mark_error:nn {#1}{?} }} + \tl_gset:ce { g__mark_ #1 _first_ ##1 _tl } { \__mark_value:nn{?}{\__mark_error:nn {#1}{?} }} + \tl_gset:ce { g__mark_ #1 _last_ ##1 _tl } { \__mark_value:nn{?}{\__mark_error:nn {#1}{?} }} } } -\cs_new_protected:Npn \__mark_error:n #1 { - \msg_error:nnn { mark } { invalid-use } {#1} +\cs_new_protected:Npn \__mark_error:nn #1#2 { + \msg_error:nnnn { mark } { invalid-use } {#1} {#2} } \cs_new_protected:Npn \mark_insert:nn #1#2 { @@ -17389,8 +17692,7 @@ of this package available from CTAN} \hook_use:n { insertmark } \unrestored@protected@xdef \g__mark_tmp_tl { - \__mark_id:n{ \int_use:N\g__mark_int } - #2 + \__mark_value:nn{ \int_use:N\g__mark_int }{#2} } \tex_marks:D \use:c { c__mark_class_ #1 _mark } { @@ -17404,7 +17706,7 @@ of this package available from CTAN} { \tl_to_str:n {#1} } } } -\cs_new_protected:Npn \__mark_id:n #1 { } +\cs_new_protected:Npn \__mark_value:nn #1#2 { #2 } \int_new:N \g__mark_int \cs_new:Npn \@kernel@before@insertmark { \cs_set_eq:NN \label \scan_stop: @@ -17416,11 +17718,16 @@ of this package available from CTAN} } \hook_new:n {insertmark} -\cs_new:Npn \mark_use_first:nn #1#2 { \__mark_use:v { g__mark_#1_first_#2_tl } } -\cs_new:Npn \mark_use_last:nn #1#2 { \__mark_use:v { g__mark_#1_last_#2_tl } } -\cs_new:Npn \mark_use_top:nn #1#2 { \__mark_use:v { g__mark_#1_top_#2_tl } } -\cs_new:Npn \__mark_use:n #1 { \exp_not:o { \use_none:nn #1 } } -\cs_generate_variant:Nn \__mark_use:n { v } +\cs_new:Npn \mark_use_first:nn #1#2 { \__mark_use_check:nnn { g__mark_#1_first_#2_tl } {#1} {#2} } +\cs_new:Npn \mark_use_last:nn #1#2 { \__mark_use_check:nnn { g__mark_#1_last_#2_tl } {#1} {#2} } +\cs_new:Npn \mark_use_top:nn #1#2 { \__mark_use_check:nnn { g__mark_#1_top_#2_tl } {#1} {#2} } +\cs_new:Npn \__mark_use_check:nnn #1#2#3 { + \tl_if_eq:cNTF {#1} \relax + { \__mark_error:nn {#2} {#3} } + { \__mark_drop_id:v {#1} } +} +\cs_new:Npn \__mark_drop_id:n #1 { \exp_not:o { #1 } } +\cs_generate_variant:Nn \__mark_drop_id:n { o, v } \prg_new_conditional:Npnn \mark_if_eq:nnnn #1#2#3#4 { T , F , TF } { \tl_if_eq:ccTF { g__mark_ #1 _#3_ #2 _tl } @@ -17451,13 +17758,14 @@ of this package available from CTAN} LaTeX~was~asked~to~manipulate~a~mark~of~class~'#1',~ but~this~class~of~marks~does~not~exist. } - \msg_new:nnnn { mark } { invalid-use } - { Mark~region~'#1'~not ~usable } + { Mark~region~'#1'~not~usable~or~class~'#2'~unknown } { \c__msg_coding_error_text_tl - The~region~'#1'~can~only~be~used~after~ - all~columns~have~been~assembled. + The~region~'#1'~is~either~not~known~or~data~for~it~ + still~needs~to~be~assembled,~e.g.,~last-column~ + while~building~the~first-column.~ + Also~possible:~the~class~namne~'#2'~is~misspelled. \c__msg_return_text_tl } \bool_new:N \g__mark_debug_bool @@ -17479,7 +17787,7 @@ of this package available from CTAN} } \cs_new_eq:NN \DebugMarksOn \mark_debug_on: \cs_new_eq:NN \DebugMarksOff \mark_debug_off: -\cs_new_protected:Npn \ShowMarksAt #1 { +\NewDocumentCommand \ShowMarksAt {m O{4} } { } \cs_new_eq:NN \NewMarkClass \mark_new_class:n \@onlypreamble \NewMarkClass @@ -17493,38 +17801,44 @@ of this package available from CTAN} \NewExpandableDocumentCommand \IfMarksEqualTF {O{page}mmm} { \mark_if_eq:nnnnTF {#1}{#2}{#3}{#4} } +\NewExpandableDocumentCommand \IfMarksEqualT {O{page}mmm} { + \mark_if_eq:nnnnT {#1}{#2}{#3}{#4} +} +\NewExpandableDocumentCommand \IfMarksEqualF {O{page}mmm} { + \mark_if_eq:nnnnF {#1}{#2}{#3}{#4} +} \cs_new_protected:Npn \__mark_update_singlecol_structures: { \box_if_vertical:NTF \@outputbox { - \__mark_update_structure_from_material:nn {page} + \mark_update_structure_from_material:nn {page} { \vbox_unpack:N \@outputbox } } { - \__mark_update_structure_from_material:nn {page} + \mark_update_structure_from_material:nn {page} { \hbox_unpack:N \@outputbox } } - \__mark_update_structure_alias:nn {previous-column}{previous-page} - \__mark_update_structure_alias:nn {column}{page} - \__mark_update_structure_alias:nn {first-column}{page} - \__mark_update_structure_alias:nn {last-column}{page} + \mark_copy_structure:nn {previous-column}{previous-page} + \mark_copy_structure:nn {column}{page} + \mark_copy_structure:nn {first-column}{page} + \mark_copy_structure:nn {last-column}{page} } \cs_new_protected:Npn \__mark_update_dblcol_structures: { \box_if_vertical:NTF \@outputbox { - \__mark_update_structure_from_material:nn {column} + \mark_update_structure_from_material:nn {column} { \vbox_unpack:N \@outputbox } } { - \__mark_update_structure_from_material:nn {column} + \mark_update_structure_from_material:nn {column} { \hbox_unpack:N \@outputbox } } \legacy_if:nTF {@firstcolumn} { - \__mark_update_structure_alias:nn {first-column}{column} - \__mark_update_structure_to_err:n {last-column} + \mark_copy_structure:nn {first-column}{column} + \mark_set_structure_to_err:n {last-column} } { - \__mark_update_structure_alias:nn {last-column}{column} + \mark_copy_structure:nn {last-column}{column} \seq_map_inline:Nn \g__mark_classes_seq { \tl_gset_eq:cc { g__mark_previous-page_top_ ##1 _tl } @@ -17551,6 +17865,7 @@ of this package available from CTAN} } } } + \cs_new_eq:NN \@expl@@@mark@update@singlecol@structures@@ \__mark_update_singlecol_structures: \cs_new_eq:NN \@expl@@@mark@update@dblcol@structures@@ @@ -17573,6 +17888,20 @@ of this package available from CTAN} \ExplSyntaxOff %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% From File: ltpage.dtx +\IncludeInRelease{2025/06/01}% + {\markboth}{Drop legacy mark support}% +\ExplSyntaxOn +\DeclareRobustCommand*\markboth[2]{% + \mark_insert:nn{2e-left}{#1} + \mark_insert:nn{2e-right}{#2} + \tl_if_empty:nF{#2}{ \mark_insert:nn{2e-right-nonempty}{#2} } +} +\DeclareRobustCommand*\markright[1]{% + \mark_insert:nn{2e-right}{#1} + \tl_if_empty:nF{#1}{ \mark_insert:nn{2e-right-nonempty}{#1} } +} +\ExplSyntaxOff +\EndIncludeInRelease \IncludeInRelease{2022/06/01}% {\markboth}{New mark support}% \ExplSyntaxOn @@ -17623,10 +17952,42 @@ of this package available from CTAN} \IncludeInRelease{0000/00/00}% {\markboth}{Make commands robust}% -\kernel@make@fragile\markboth -\kernel@make@fragile\markright +%\kernel@make@fragile\markboth +%\kernel@make@fragile\markright +\def\markboth#1#2{% + \begingroup + \let\label\relax \let\index\relax \let\glossary\relax + \unrestored@protected@xdef\@themark {{#1}{#2}}% + \@temptokena \expandafter{\@themark}% + \mark{\the\@temptokena}% + \endgroup + \if@nobreak\ifvmode\nobreak\fi\fi} +\def\markright#1{% + \begingroup + \let\label\relax \let\index\relax \let\glossary\relax + \expandafter\@markright\@themark {#1}% + \@temptokena \expandafter{\@themark}% + \mark{\the\@temptokena}% + \endgroup + \if@nobreak\ifvmode\nobreak\fi\fi} \EndIncludeInRelease +\IncludeInRelease{2025/06/01}% + {\leftmark}{Use new mark mechanism}% +\ExplSyntaxOn +\cs_new:Npn \leftmark {\mark_use_last:nn{page}{2e-left}} +\cs_new:Npn \rightmark {\mark_use_first:nn{page}{2e-right}} +\ExplSyntaxOff +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\leftmark}{Use new mark mechanism}% + +\def\leftmark{\expandafter\@leftmark\botmark\@empty\@empty} +\def\rightmark{\expandafter\@rightmark\firstmark\@empty\@empty} +\def\@themark{{}{}} +\def\@markright#1#2#3{\@temptokena {#1}% +\unrestored@protected@xdef\@themark{{\the\@temptokena}{#3}}} +\EndIncludeInRelease %%% From File: ltclass.dtx @@ -18003,7 +18364,9 @@ of this package available from CTAN} \EndIncludeInRelease \IncludeInRelease{2021/06/01}% {\OptionNotUsed}{filter unused option list}% -\def\@remove@eq@value#1=#2\@nil{#1} +\ExplSyntaxOn +\def\@remove@eq@value#1=#2\@nil{\tl_trim_spaces:n{#1}} +\ExplSyntaxOff \def\OptionNotUsed{% \ifx\@currext\@clsextension \xdef\@unusedoptionlist{% @@ -19982,6 +20345,63 @@ of this package available from CTAN} \fi }% \EndIncludeInRelease +\IncludeInRelease{2025/06/01}% + {\@outputpage}{Use new mark mechanism}% +\def\@outputpage{% +\begingroup + \let \protect \noexpand + \language\document@default@language + \@resetactivechars + \global\let\@@if@newlist\if@newlist + \global\@newlistfalse + \@parboxrestore + \shipout \vbox{% + \set@typeset@protect + \aftergroup \endgroup + \aftergroup \set@typeset@protect + \if@specialpage + \global\@specialpagefalse\@nameuse{ps@\@specialstyle}% + \fi + \if@twoside + \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot + \let\@themargin\oddsidemargin + \else \let\@thehead\@evenhead + \let\@thefoot\@evenfoot \let\@themargin\evensidemargin + \fi + \fi + \reset@font + \normalsize + \normalsfcodes + \let\label\@gobble + \let\index\@gobble + \let\glossary\@gobble + \baselineskip\z@skip \lineskip\z@skip \lineskiplimit\z@ + \@begindvi + \vskip \topmargin + \moveright\@themargin \vbox {% + \setbox\@tempboxa \vbox to\headheight{% + \vfil + \color@hbox + \normalcolor + \hb@xt@\textwidth{\@thehead}% + \color@endbox + }% + \dp\@tempboxa \z@ + \box\@tempboxa + \vskip \headsep + \box\@outputbox + \baselineskip \footskip + \color@hbox + \normalcolor + \hb@xt@\textwidth{\@thefoot}% + \color@endbox + }% + }% + \global\let\if@newlist\@@if@newlist + \global \@colht \textheight + \stepcounter{page}% +} +\EndIncludeInRelease \IncludeInRelease{2017/04/15}% {\@outputpage}{Reset language for hyphenation}% \def\@outputpage{% @@ -20555,6 +20975,31 @@ of this package available from CTAN} \endgroup } \EndIncludeInRelease +\IncludeInRelease{2025/06/01}% + {\@outputdblcol}{Use new mark mechanism}% +\def\@outputdblcol{% + \if@firstcolumn + \global\@firstcolumnfalse + \global\setbox\@leftcolumn\copy\@outputbox + \else + \global\@firstcolumntrue + \setbox\@outputbox\vbox{% + \hb@xt@\textwidth{% + \hb@xt@\columnwidth{\box\@leftcolumn \hss}% + \hfil + {\normalcolor\vrule \@width\columnseprule}% + \hfil + \hb@xt@\columnwidth{\box\@outputbox \hss}}}% + \@combinedblfloats + \@outputpage + \begingroup + \@dblfloatplacement + \@startdblcolumn + \@whilesw\if@fcolmade \fi{\@outputpage + \@startdblcolumn}% + \endgroup + \fi}% +\EndIncludeInRelease \IncludeInRelease{2015/01/01}% {\@outputdblcol}{2 column marks}% \def\@outputdblcol{% @@ -20594,7 +21039,7 @@ of this package available from CTAN} \@whilesw\if@fcolmade \fi{\@outputpage \@startdblcolumn}% \endgroup - \fi}% + \fi} \EndIncludeInRelease \IncludeInRelease{0000/00/00}% {\@outputdblcol}{2 column marks}% diff --git a/Master/texmf-dist/tex/latex-dev/base/letter.cls b/Master/texmf-dist/tex/latex-dev/base/letter.cls index f39504c561e..484203d5777 100644 --- a/Master/texmf-dist/tex/latex-dev/base/letter.cls +++ b/Master/texmf-dist/tex/latex-dev/base/letter.cls @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. \NeedsTeXFormat{LaTeX2e}[1996/06/01] \ProvidesClass{letter} - [2021/12/07 v1.3c + [2024/08/12 v1.3c Standard LaTeX document class] \newcommand\@ptsize{} \DeclareOption{a4paper} diff --git a/Master/texmf-dist/tex/latex-dev/base/ltluatex.lua b/Master/texmf-dist/tex/latex-dev/base/ltluatex.lua index e92a27eb3a4..8a650531558 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ltluatex.lua +++ b/Master/texmf-dist/tex/latex-dev/base/ltluatex.lua @@ -64,7 +64,7 @@ local function provides_module(info) luatexbase_log( "Lua module: " .. info.name .. spaced(info.date) - .. spaced(info.version) + .. spaced(info.version and string_gsub(info.version or "","^(%d)","v%1")) .. spaced(info.description) ) modules[info.name] = info @@ -301,7 +301,7 @@ local callbacklist = setmetatable({}, { end list[i] = current.value else - -- Cycle occured. TODO: Show cycle for debugging + -- Cycle occurred. TODO: Show cycle for debugging -- list[i] = ... local remaining = {} for name, entry in next, meta do @@ -335,7 +335,7 @@ local callbacklist = setmetatable({}, { for i=2, length//2 do cycle[i], cycle[length + 1 - i] = cycle[length + 1 - i], cycle[i] end - error('Cycle occured at ' .. table.concat(cycle, ' -> ', 1, length)) + error('Cycle occurred at ' .. table.concat(cycle, ' -> ', 1, length)) end end end diff --git a/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex b/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex index 2747e4f56f3..fc23e470097 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex +++ b/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex @@ -47,7 +47,7 @@ #1#2[#3]{\endgroup\immediate\write-1{File: #1 #3}} \fi \ProvidesFile{ltluatex.tex} -[2024/02/11 v1.2c +[2024/08/16 v1.2e LuaTeX support for plain TeX (core)% ] \edef\etatcatcode{\the\catcode`\@} diff --git a/Master/texmf-dist/tex/latex-dev/base/omlcmm.fd b/Master/texmf-dist/tex/latex-dev/base/omlcmm.fd index 7345df2bb09..bf6ad9d0a7c 100644 --- a/Master/texmf-dist/tex/latex-dev/base/omlcmm.fd +++ b/Master/texmf-dist/tex/latex-dev/base/omlcmm.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{omlcmm.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \DeclareFontFamily{OML}{cmm}{\skewchar\font127 } \DeclareFontShape{OML}{cmm}{m}{it}% {<5><6><7><8><9>gen*cmmi% diff --git a/Master/texmf-dist/tex/latex-dev/base/omlcmr.fd b/Master/texmf-dist/tex/latex-dev/base/omlcmr.fd index 562a6d51708..98b20aedd0d 100644 --- a/Master/texmf-dist/tex/latex-dev/base/omlcmr.fd +++ b/Master/texmf-dist/tex/latex-dev/base/omlcmr.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{omlcmr.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \DeclareFontFamily{OML}{cmr}{\skewchar\font127 } \DeclareFontShape{OML}{cmr}{m}{n}% {<->ssub*cmm/m/it}{} diff --git a/Master/texmf-dist/tex/latex-dev/base/omlenc.def b/Master/texmf-dist/tex/latex-dev/base/omlenc.def index ecc46f89f5c..e1df971f089 100644 --- a/Master/texmf-dist/tex/latex-dev/base/omlenc.def +++ b/Master/texmf-dist/tex/latex-dev/base/omlenc.def @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. %%% From File: ltoutenc.dtx \ProvidesFile{omlenc.def} - [2021/04/29 v2.0v + [2024/11/06 v2.1b Standard LaTeX file] \DeclareFontEncoding{OML}{}{} \DeclareTextSymbol{\textless}{OML}{`\<} diff --git a/Master/texmf-dist/tex/latex-dev/base/omscmr.fd b/Master/texmf-dist/tex/latex-dev/base/omscmr.fd index 610e916200b..707ace394f1 100644 --- a/Master/texmf-dist/tex/latex-dev/base/omscmr.fd +++ b/Master/texmf-dist/tex/latex-dev/base/omscmr.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{omscmr.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \DeclareFontFamily{OMS}{cmr}{\skewchar\font48 } \DeclareFontShape{OMS}{cmr}{m}{n}% {<->ssub*cmsy/m/n}{} diff --git a/Master/texmf-dist/tex/latex-dev/base/omscmsy.fd b/Master/texmf-dist/tex/latex-dev/base/omscmsy.fd index 8ec4eb09303..b4389f2e858 100644 --- a/Master/texmf-dist/tex/latex-dev/base/omscmsy.fd +++ b/Master/texmf-dist/tex/latex-dev/base/omscmsy.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{omscmsy.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \DeclareFontFamily{OMS}{cmsy}{\skewchar\font48 } \DeclareFontShape{OMS}{cmsy}{m}{n}{% <5><6><7><8><9><10>gen*cmsy% diff --git a/Master/texmf-dist/tex/latex-dev/base/omsenc.def b/Master/texmf-dist/tex/latex-dev/base/omsenc.def index 13ab8351bca..6bb512e53f7 100644 --- a/Master/texmf-dist/tex/latex-dev/base/omsenc.def +++ b/Master/texmf-dist/tex/latex-dev/base/omsenc.def @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. %%% From File: ltoutenc.dtx \ProvidesFile{omsenc.def} - [2021/04/29 v2.0v + [2024/11/06 v2.1b Standard LaTeX file] \DeclareFontEncoding{OMS}{}{} \DeclareTextSymbol{\textasteriskcentered}{OMS}{3} % "03 diff --git a/Master/texmf-dist/tex/latex-dev/base/omxcmex.fd b/Master/texmf-dist/tex/latex-dev/base/omxcmex.fd index 31a4753ff62..5e32aebc6db 100644 --- a/Master/texmf-dist/tex/latex-dev/base/omxcmex.fd +++ b/Master/texmf-dist/tex/latex-dev/base/omxcmex.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{omxcmex.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \DeclareFontFamily{OMX}{cmex}{} \DeclareFontShape{OMX}{cmex}{m}{n}{% <->sfixed*cmex10% diff --git a/Master/texmf-dist/tex/latex-dev/base/ot1cmdh.fd b/Master/texmf-dist/tex/latex-dev/base/ot1cmdh.fd index 254da740bf8..935344838ad 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ot1cmdh.fd +++ b/Master/texmf-dist/tex/latex-dev/base/ot1cmdh.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{ot1cmdh.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \DeclareFontFamily{OT1}{cmdh}{\hyphenchar\font45 } \DeclareFontShape{OT1}{cmdh}{m}{n}{% <10>cmdunh10% diff --git a/Master/texmf-dist/tex/latex-dev/base/ot1cmfib.fd b/Master/texmf-dist/tex/latex-dev/base/ot1cmfib.fd index 0276b7bde23..77373fbb58e 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ot1cmfib.fd +++ b/Master/texmf-dist/tex/latex-dev/base/ot1cmfib.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{ot1cmfib.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \DeclareFontFamily{OT1}{cmfib}{\hyphenchar\font45 } \DeclareFontShape{OT1}{cmfib}{m}{n}{% <8>cmfib8% diff --git a/Master/texmf-dist/tex/latex-dev/base/ot1cmfr.fd b/Master/texmf-dist/tex/latex-dev/base/ot1cmfr.fd index 33bb6d1b126..bd4d21551d5 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ot1cmfr.fd +++ b/Master/texmf-dist/tex/latex-dev/base/ot1cmfr.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{ot1cmfr.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \DeclareFontFamily{OT1}{cmfr}{\hyphenchar\font45 } \DeclareFontShape{OT1}{cmfr}{m}{n}{% <10>cmff10% diff --git a/Master/texmf-dist/tex/latex-dev/base/ot1cmr.fd b/Master/texmf-dist/tex/latex-dev/base/ot1cmr.fd index 45f862af9b4..2393e7caedd 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ot1cmr.fd +++ b/Master/texmf-dist/tex/latex-dev/base/ot1cmr.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{ot1cmr.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \DeclareFontFamily{OT1}{cmr}{\hyphenchar\font45 } \DeclareFontShape{OT1}{cmr}{m}{n}% {<5><6><7><8><9><10><12>gen*cmr% diff --git a/Master/texmf-dist/tex/latex-dev/base/ot1cmss.fd b/Master/texmf-dist/tex/latex-dev/base/ot1cmss.fd index ad2de5a308f..6c724c2effe 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ot1cmss.fd +++ b/Master/texmf-dist/tex/latex-dev/base/ot1cmss.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{ot1cmss.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \DeclareFontFamily{OT1}{cmss}{\hyphenchar\font45 } \DeclareFontShape{OT1}{cmss}{m}{n} {% diff --git a/Master/texmf-dist/tex/latex-dev/base/ot1cmtt.fd b/Master/texmf-dist/tex/latex-dev/base/ot1cmtt.fd index 54f383b51c7..2716074395a 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ot1cmtt.fd +++ b/Master/texmf-dist/tex/latex-dev/base/ot1cmtt.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{ot1cmtt.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \DeclareFontFamily{OT1}{cmtt}{\hyphenchar \font\m@ne} \DeclareFontShape{OT1}{cmtt}{m}{n} {% diff --git a/Master/texmf-dist/tex/latex-dev/base/ot1cmvtt.fd b/Master/texmf-dist/tex/latex-dev/base/ot1cmvtt.fd index bf7b2c9d401..b787fea9dfc 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ot1cmvtt.fd +++ b/Master/texmf-dist/tex/latex-dev/base/ot1cmvtt.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{ot1cmvtt.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \DeclareFontFamily{OT1}{cmvtt}{\hyphenchar\font45 } \DeclareFontShape{OT1}{cmvtt}{m}{n}% {% diff --git a/Master/texmf-dist/tex/latex-dev/base/ot1enc.def b/Master/texmf-dist/tex/latex-dev/base/ot1enc.def index bede1dd19d5..634b28158f3 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ot1enc.def +++ b/Master/texmf-dist/tex/latex-dev/base/ot1enc.def @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. %%% From File: ltoutenc.dtx \ProvidesFile{ot1enc.def} - [2021/04/29 v2.0v + [2024/11/06 v2.1b Standard LaTeX file] \DeclareFontEncoding{OT1}{}{} \DeclareTextAccent{\"}{OT1}{127} @@ -117,6 +117,7 @@ \DeclareTextCompositeCommand{\'}{OT1}{i}{\@tabacckludge'\i} \DeclareTextCompositeCommand{\^}{OT1}{i}{\^\i} \DeclareTextCompositeCommand{\"}{OT1}{i}{\"\i} +\DeclareTextCompositeCommand{\=}{OT1}{i}{\=\i} \ifx\textcommaabove\@undefined\else \DeclareTextCompositeCommand{\c}{OT1}{g}{\textcommaabove{g}} \fi diff --git a/Master/texmf-dist/tex/latex-dev/base/ot4enc.def b/Master/texmf-dist/tex/latex-dev/base/ot4enc.def index a15bb8af874..75ab485f172 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ot4enc.def +++ b/Master/texmf-dist/tex/latex-dev/base/ot4enc.def @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. %%% From File: ltoutenc.dtx \ProvidesFile{ot4enc.def} - [2021/04/29 v2.0v + [2024/11/06 v2.1b Standard LaTeX file] \DeclareFontEncoding{OT4}{}{} \DeclareFontSubstitution{OT4}{cmr}{m}{n} diff --git a/Master/texmf-dist/tex/latex-dev/base/preload.cfg b/Master/texmf-dist/tex/latex-dev/base/preload.cfg index 2e89d1f4e74..2c128ff0719 100644 --- a/Master/texmf-dist/tex/latex-dev/base/preload.cfg +++ b/Master/texmf-dist/tex/latex-dev/base/preload.cfg @@ -37,7 +37,7 @@ %% %%% From File: fontdef.dtx \ProvidesFile{preload.cfg} - [2024/02/09 v3.0i LaTeX Kernel + [2024/11/19 v3.0l LaTeX Kernel (Uncustomized preload font setup) ] %% diff --git a/Master/texmf-dist/tex/latex-dev/base/report.cls b/Master/texmf-dist/tex/latex-dev/base/report.cls index cb7a32f536d..b0f60a1f5db 100644 --- a/Master/texmf-dist/tex/latex-dev/base/report.cls +++ b/Master/texmf-dist/tex/latex-dev/base/report.cls @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesClass{report} - [2024/02/08 v1.4n + [2024/06/29 v1.4n Standard LaTeX document class] \newcommand\@ptsize{} \newif\if@restonecol diff --git a/Master/texmf-dist/tex/latex-dev/base/shortvrb.sty b/Master/texmf-dist/tex/latex-dev/base/shortvrb.sty index 8caa7e43a8b..4a9ae8833df 100644 --- a/Master/texmf-dist/tex/latex-dev/base/shortvrb.sty +++ b/Master/texmf-dist/tex/latex-dev/base/shortvrb.sty @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. \NeedsTeXFormat{LaTeX2e}[1994/12/01] \ProvidesPackage{shortvrb} - [2024/06/04 v3.0q + [2024/10/23 v3.0q Standard LaTeX documentation package V3 (FMi)] %% %% Package `doc' to use with LaTeX 2e diff --git a/Master/texmf-dist/tex/latex-dev/base/size10.clo b/Master/texmf-dist/tex/latex-dev/base/size10.clo index 11be942b3e9..a2c22c047f8 100644 --- a/Master/texmf-dist/tex/latex-dev/base/size10.clo +++ b/Master/texmf-dist/tex/latex-dev/base/size10.clo @@ -42,7 +42,7 @@ %% and covered by LPPL is defined by the unpacking scripts (with %% extension .ins) which are part of the distribution. \ProvidesFile{size10.clo} - [2024/02/08 v1.4n + [2024/06/29 v1.4n Standard LaTeX file (size option)] \renewcommand\normalsize{% \@setfontsize\normalsize\@xpt\@xiipt diff --git a/Master/texmf-dist/tex/latex-dev/base/size11.clo b/Master/texmf-dist/tex/latex-dev/base/size11.clo index a36fb7931ba..0259727c40c 100644 --- a/Master/texmf-dist/tex/latex-dev/base/size11.clo +++ b/Master/texmf-dist/tex/latex-dev/base/size11.clo @@ -42,7 +42,7 @@ %% and covered by LPPL is defined by the unpacking scripts (with %% extension .ins) which are part of the distribution. \ProvidesFile{size11.clo} - [2024/02/08 v1.4n + [2024/06/29 v1.4n Standard LaTeX file (size option)] \renewcommand\normalsize{% \@setfontsize\normalsize\@xipt{13.6}% diff --git a/Master/texmf-dist/tex/latex-dev/base/size12.clo b/Master/texmf-dist/tex/latex-dev/base/size12.clo index aa9f0808f73..e1dd32b0325 100644 --- a/Master/texmf-dist/tex/latex-dev/base/size12.clo +++ b/Master/texmf-dist/tex/latex-dev/base/size12.clo @@ -42,7 +42,7 @@ %% and covered by LPPL is defined by the unpacking scripts (with %% extension .ins) which are part of the distribution. \ProvidesFile{size12.clo} - [2024/02/08 v1.4n + [2024/06/29 v1.4n Standard LaTeX file (size option)] \renewcommand\normalsize{% \@setfontsize\normalsize\@xiipt{14.5}% diff --git a/Master/texmf-dist/tex/latex-dev/base/t1cmdh.fd b/Master/texmf-dist/tex/latex-dev/base/t1cmdh.fd index 76b5eb1a106..3ae4a12f0a0 100644 --- a/Master/texmf-dist/tex/latex-dev/base/t1cmdh.fd +++ b/Master/texmf-dist/tex/latex-dev/base/t1cmdh.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{t1cmdh.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \providecommand{\EC@family}[5]{% \DeclareFontShape{#1}{#2}{#3}{#4}% {<5><6><7><8><9><10><10.95><12><14.4>% diff --git a/Master/texmf-dist/tex/latex-dev/base/t1cmfib.fd b/Master/texmf-dist/tex/latex-dev/base/t1cmfib.fd index 8fe21d2fda0..04c5389628f 100644 --- a/Master/texmf-dist/tex/latex-dev/base/t1cmfib.fd +++ b/Master/texmf-dist/tex/latex-dev/base/t1cmfib.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{t1cmfib.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \providecommand{\EC@family}[5]{% \DeclareFontShape{#1}{#2}{#3}{#4}% {<5><6><7><8><9><10><10.95><12><14.4>% diff --git a/Master/texmf-dist/tex/latex-dev/base/t1cmfr.fd b/Master/texmf-dist/tex/latex-dev/base/t1cmfr.fd index 469b8d0d99a..1278f2b65ab 100644 --- a/Master/texmf-dist/tex/latex-dev/base/t1cmfr.fd +++ b/Master/texmf-dist/tex/latex-dev/base/t1cmfr.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{t1cmfr.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \providecommand{\EC@family}[5]{% \DeclareFontShape{#1}{#2}{#3}{#4}% {<5><6><7><8><9><10><10.95><12><14.4>% diff --git a/Master/texmf-dist/tex/latex-dev/base/t1cmr.fd b/Master/texmf-dist/tex/latex-dev/base/t1cmr.fd index ddebbdf6959..698686aa6e8 100644 --- a/Master/texmf-dist/tex/latex-dev/base/t1cmr.fd +++ b/Master/texmf-dist/tex/latex-dev/base/t1cmr.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{t1cmr.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \providecommand{\EC@family}[5]{% \DeclareFontShape{#1}{#2}{#3}{#4}% {<5><6><7><8><9><10><10.95><12><14.4>% diff --git a/Master/texmf-dist/tex/latex-dev/base/t1cmss.fd b/Master/texmf-dist/tex/latex-dev/base/t1cmss.fd index 5294fb74d91..5bc389b29aa 100644 --- a/Master/texmf-dist/tex/latex-dev/base/t1cmss.fd +++ b/Master/texmf-dist/tex/latex-dev/base/t1cmss.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{t1cmss.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \providecommand{\EC@ssfamily}[5]{% \DeclareFontShape{#1}{#2}{#3}{#4}% {<5><6><7><8>#50800% diff --git a/Master/texmf-dist/tex/latex-dev/base/t1cmtt.fd b/Master/texmf-dist/tex/latex-dev/base/t1cmtt.fd index ebd77a12951..044c63a222d 100644 --- a/Master/texmf-dist/tex/latex-dev/base/t1cmtt.fd +++ b/Master/texmf-dist/tex/latex-dev/base/t1cmtt.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{t1cmtt.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \providecommand{\EC@ttfamily}[5]{% \DeclareFontShape{#1}{#2}{#3}{#4}% {<5><6><7><8>#50800% diff --git a/Master/texmf-dist/tex/latex-dev/base/t1cmvtt.fd b/Master/texmf-dist/tex/latex-dev/base/t1cmvtt.fd index 4b22b9e7f1a..ffdbeade0c7 100644 --- a/Master/texmf-dist/tex/latex-dev/base/t1cmvtt.fd +++ b/Master/texmf-dist/tex/latex-dev/base/t1cmvtt.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{t1cmvtt.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \providecommand{\EC@ttfamily}[5]{% \DeclareFontShape{#1}{#2}{#3}{#4}% {<5><6><7><8>#50800% diff --git a/Master/texmf-dist/tex/latex-dev/base/t1enc.def b/Master/texmf-dist/tex/latex-dev/base/t1enc.def index a46de580623..6178c89a96c 100644 --- a/Master/texmf-dist/tex/latex-dev/base/t1enc.def +++ b/Master/texmf-dist/tex/latex-dev/base/t1enc.def @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. %%% From File: ltoutenc.dtx \ProvidesFile{t1enc.def} - [2021/04/29 v2.0v + [2024/11/06 v2.1b Standard LaTeX file] \DeclareFontEncoding{T1}{}{} \DeclareTextAccent{\`}{T1}{0} @@ -291,6 +291,7 @@ \DeclareTextCompositeCommand{\c}{T1}{R}{\textcommabelow{R}} \DeclareTextCompositeCommand{\c}{T1}{r}{\textcommabelow{r}} \fi +\DeclareTextCompositeCommand{\=}{T1}{\i}{\=\i} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \endinput %% diff --git a/Master/texmf-dist/tex/latex-dev/base/textcomp-2018-08-11.sty b/Master/texmf-dist/tex/latex-dev/base/textcomp-2018-08-11.sty index b611d19a427..3108e802e95 100644 --- a/Master/texmf-dist/tex/latex-dev/base/textcomp-2018-08-11.sty +++ b/Master/texmf-dist/tex/latex-dev/base/textcomp-2018-08-11.sty @@ -64,7 +64,6 @@ {\PackageInfo{textcomp}{Setting #2 sub-encoding to #1/#3}}% {\PackageInfo{textcomp}{Changing #2 sub-encoding to #1/#3}}% \@namedef{#1:#2}{#3}} -\@onlypreamble\DeclareEncodingSubset \newif\iftc@forced \tc@forcedfalse \DeclareOption{full}{\DeclareEncodingSubset{TS1}{?}{0}} diff --git a/Master/texmf-dist/tex/latex-dev/base/ts1cmr.fd b/Master/texmf-dist/tex/latex-dev/base/ts1cmr.fd index 8564159c267..fb97c97abeb 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ts1cmr.fd +++ b/Master/texmf-dist/tex/latex-dev/base/ts1cmr.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{ts1cmr.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \providecommand{\EC@family}[5]{% \DeclareFontShape{#1}{#2}{#3}{#4}% {<5><6><7><8><9><10><10.95><12><14.4>% @@ -60,6 +60,7 @@ \EC@family{TS1}{cmr}{bx}{it}{tcbi} \EC@family{TS1}{cmr}{bx}{sl}{tcbl} \EC@family{TS1}{cmr}{m}{ui}{tcui} +\DeclareEncodingSubset{TS1}{cmr}{0} \endinput %% %% End of file `ts1cmr.fd'. diff --git a/Master/texmf-dist/tex/latex-dev/base/ts1cmss.fd b/Master/texmf-dist/tex/latex-dev/base/ts1cmss.fd index bce10af852e..98a5d38e738 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ts1cmss.fd +++ b/Master/texmf-dist/tex/latex-dev/base/ts1cmss.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{ts1cmss.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \providecommand{\EC@family}[5]{% \DeclareFontShape{#1}{#2}{#3}{#4}% {<5><6><7><8><9><10><10.95><12><14.4>% @@ -58,6 +58,7 @@ \EC@family{TS1}{cmss}{bx}{n}{tcsx} \EC@family{TS1}{cmss}{bx}{it}{tcso} \EC@family{TS1}{cmss}{bx}{sl}{tcso} +\DeclareEncodingSubset{TS1}{cmss}{0} \endinput %% %% End of file `ts1cmss.fd'. diff --git a/Master/texmf-dist/tex/latex-dev/base/ts1cmtt.fd b/Master/texmf-dist/tex/latex-dev/base/ts1cmtt.fd index fc1d3eae689..1d6ae48c351 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ts1cmtt.fd +++ b/Master/texmf-dist/tex/latex-dev/base/ts1cmtt.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{ts1cmtt.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \providecommand{\EC@ttfamily}[5]{% \DeclareFontShape{#1}{#2}{#3}{#4}% {<5><6><7><8>#50800% @@ -56,6 +56,7 @@ \EC@ttfamily{TS1}{cmtt}{m}{n}{tctt} \EC@ttfamily{TS1}{cmtt}{m}{sl}{tcst} \EC@ttfamily{TS1}{cmtt}{m}{it}{tcit} +\DeclareEncodingSubset{TS1}{cmtt}{0} \endinput %% %% End of file `ts1cmtt.fd'. diff --git a/Master/texmf-dist/tex/latex-dev/base/ts1cmvtt.fd b/Master/texmf-dist/tex/latex-dev/base/ts1cmvtt.fd index 02fa3968abf..fce8290fb12 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ts1cmvtt.fd +++ b/Master/texmf-dist/tex/latex-dev/base/ts1cmvtt.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{ts1cmvtt.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \providecommand{\EC@ttfamily}[5]{% \DeclareFontShape{#1}{#2}{#3}{#4}% {<5><6><7><8>#50800% @@ -55,6 +55,7 @@ \DeclareFontFamily{TS1}{cmvtt}{} \EC@ttfamily{TS1}{cmvtt}{m}{n}{tcvt} \EC@ttfamily{TS1}{cmvtt}{m}{it}{tcvi} +\DeclareEncodingSubset{TS1}{cmvtt}{0} \endinput %% %% End of file `ts1cmvtt.fd'. diff --git a/Master/texmf-dist/tex/latex-dev/base/tuenc.def b/Master/texmf-dist/tex/latex-dev/base/tuenc.def index 7d32d90059f..c85c620c6bb 100644 --- a/Master/texmf-dist/tex/latex-dev/base/tuenc.def +++ b/Master/texmf-dist/tex/latex-dev/base/tuenc.def @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. %%% From File: ltoutenc.dtx \ProvidesFile{tuenc.def} - [2021/04/29 v2.0v + [2024/11/06 v2.1b Standard LaTeX file] \providecommand\UnicodeEncodingName{TU} \begingroup\expandafter\expandafter\expandafter\endgroup diff --git a/Master/texmf-dist/tex/latex-dev/base/ucmr.fd b/Master/texmf-dist/tex/latex-dev/base/ucmr.fd index 4ef1f56b42b..367aab2f0e4 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ucmr.fd +++ b/Master/texmf-dist/tex/latex-dev/base/ucmr.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{ucmr.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \DeclareFontFamily{U}{cmr}{\hyphenchar\font45 } \DeclareFontShape{U}{cmr}{m}{n}% {<5><6><7><8><9><10><12>gen*cmr% diff --git a/Master/texmf-dist/tex/latex-dev/base/ucmss.fd b/Master/texmf-dist/tex/latex-dev/base/ucmss.fd index 1611fc986c4..24c6e14bf3b 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ucmss.fd +++ b/Master/texmf-dist/tex/latex-dev/base/ucmss.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{ucmss.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \DeclareFontFamily{U}{cmss}{\hyphenchar\font45 } \DeclareFontShape{U}{cmss}{m}{n}% {% diff --git a/Master/texmf-dist/tex/latex-dev/base/ucmtt.fd b/Master/texmf-dist/tex/latex-dev/base/ucmtt.fd index 247768631e4..cd9cd439b0d 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ucmtt.fd +++ b/Master/texmf-dist/tex/latex-dev/base/ucmtt.fd @@ -46,7 +46,7 @@ %% making successful document exchange impossible. %% \ProvidesFile{ucmtt.fd} - [2023/04/13 v2.5m Standard LaTeX font definitions] + [2024/11/19 v2.5n Standard LaTeX font definitions] \DeclareFontFamily{U}{cmtt}{\hyphenchar \font\m@ne} \DeclareFontShape{U}{cmtt}{m}{n}% {% diff --git a/Master/texmf-dist/tex/latex-dev/firstaid/latex2e-first-aid-for-external-files.ltx b/Master/texmf-dist/tex/latex-dev/firstaid/latex2e-first-aid-for-external-files.ltx index d2317b204af..6e008fb9f04 100644 --- a/Master/texmf-dist/tex/latex-dev/firstaid/latex2e-first-aid-for-external-files.ltx +++ b/Master/texmf-dist/tex/latex-dev/firstaid/latex2e-first-aid-for-external-files.ltx @@ -34,8 +34,8 @@ %% %% The LaTeX Project and any individual authors listed elsewhere %% in this file. -\def\LaTeXFirstAidDate{2024/03/20} -\def\LaTeXFirstAidVersion{v1.1e} +\def\LaTeXFirstAidDate{2024/11/24} +\def\LaTeXFirstAidVersion{v1.1j} \ProvidesFile{latex2e-first-aid-for-external-files.ltx} [\LaTeXFirstAidDate\space \LaTeXFirstAidVersion\space LaTeX kernel fixes to external files and packages] @@ -228,8 +228,44 @@ {[\@tempb][\arabic{page}][\cref@result]\thepage}{}{}{}}}% <------- five \@esphack}% } + \newcommand\firstaid@cref@smugglelabel{\let\cref@currentlabel\cref@gcurrentlabel@temp} + \newcommand\firstaid@cref@updatelabeldata[1]{% + \cref@constructprefix{#1}{\cref@result}% + \@ifundefined{cref@#1@alias}% + {\def\@tempa{#1}}% + {\def\@tempa{\csname cref@#1@alias\endcsname}}% + \protected@xdef\cref@gcurrentlabel@temp{% + [\@tempa][\arabic{#1}][\cref@result]% + \csname p@#1\expandafter\endcsname\csname the#1\endcsname}% + \aftergroup\firstaid@cref@smugglelabel + } + \newif\iftag@ + \AddToHook{label}[firstaid/cleveref] + {\ifx + \@currentcounter\@empty + \else + \iftag@\else + \firstaid@cref@updatelabeldata{\@currentcounter}% + \fi + \fi} }% } +\AddToHook{package/arydshln/after}[firstaid]{% + \FirstAidNeededT{arydshln}{sty}{2019/02/21 v1.76 } + {% +\protected\def\adl@@vlineL#1#2#3#4{\adl@ivline#4\@nil{#1}{#2}% + \xdef\adl@colsL{\adl@colsL + \@elt{#3}{\number\@tempcnta}{\number\@tempcntb}% + {\adl@dashcolor}{\adl@gapcolor}}}% +\protected\def\adl@@vlineR#1#2#3#4{\adl@ivline#4\@nil{#1}{#2}% + \xdef\adl@colsR{% + \@elt{#3}{\number\@tempcnta}{\number\@tempcntb}% + {\adl@dashcolor}{\adl@gapcolor}% + \adl@colsR}}% +\let\adl@act@@vlineL\adl@@vlineL +\let\adl@act@@vlineR\adl@@vlineR + }% +} \endinput %% %% End of file `latex2e-first-aid-for-external-files.ltx'. diff --git a/Master/texmf-dist/tex/latex-dev/graphics/color.sty b/Master/texmf-dist/tex/latex-dev/graphics/color.sty index 7083345d319..6eac5d7e41a 100644 --- a/Master/texmf-dist/tex/latex-dev/graphics/color.sty +++ b/Master/texmf-dist/tex/latex-dev/graphics/color.sty @@ -25,7 +25,7 @@ %% \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesPackage{color} - [2024/01/14 v1.3d Standard LaTeX Color (DPC)] + [2024/06/23 v1.3e Standard LaTeX Color (DPC)] \edef\Gin@codes{% \catcode`\noexpand\^^A\the\catcode`\^^A\relax \catcode`\noexpand\"\the\catcode`\"\relax @@ -170,7 +170,7 @@ \input{mathcolor.ltx} \def\color@setgroup{\begingroup\set@color} \let\color@begingroup\begingroup -\def\color@endgroup{\endgraf\endgroup} +\def\color@endgroup{\endgraf\@endpefalse\endgroup} \def\color@hbox{\hbox\bgroup\color@begingroup} \def\color@vbox{\vbox\bgroup\color@begingroup} \def\color@endbox{\color@endgroup\egroup} diff --git a/Master/texmf-dist/tex/latex-dev/graphics/graphics.sty b/Master/texmf-dist/tex/latex-dev/graphics/graphics.sty index 9d6e6c3b176..bbbe11f3325 100644 --- a/Master/texmf-dist/tex/latex-dev/graphics/graphics.sty +++ b/Master/texmf-dist/tex/latex-dev/graphics/graphics.sty @@ -30,7 +30,7 @@ \DeclareCurrentRelease{}{2019-10-01} \ProvidesPackage{graphics} - [2024/05/23 v1.4g Standard LaTeX Graphics (DPC,SPQR)] + [2024/08/06 v1.4g Standard LaTeX Graphics (DPC,SPQR)] \edef\Gin@codes{% \catcode`\noexpand\^^A\the\catcode`\^^A\relax \catcode`\noexpand\"\the\catcode`\"\relax diff --git a/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-code.tex index 54aa898cc98..8d95f514b00 100644 --- a/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-code.tex +++ b/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-code.tex @@ -62,7 +62,7 @@ %% l3legacy.dtx (with options: `package') %% l3deprecation.dtx (with options: `package') %% -%% Copyright (C) 1990-2024 The LaTeX Project +%% Copyright (C) 1990-2025 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -75,7 +75,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2024-07-20}% +\def\ExplFileDate{2025-01-18}% \begingroup \def\next{\endgroup}% \expandafter\ifx\csname PackageError\endcsname\relax @@ -716,7 +716,6 @@ Type H <return> for immediate help}\def~{\errmessage{% \__kernel_primitive:NN \pdfoutline \tex_pdfoutline:D \__kernel_primitive:NN \pdfoutput \tex_pdfoutput:D \__kernel_primitive:NN \pdfpageattr \tex_pdfpageattr:D - \__kernel_primitive:NN \pdfpagesattr \tex_pdfpagesattr:D \__kernel_primitive:NN \pdfpagebox \tex_pdfpagebox:D \__kernel_primitive:NN \pdfpageref \tex_pdfpageref:D \__kernel_primitive:NN \pdfpageresources \tex_pdfpageresources:D @@ -1313,13 +1312,11 @@ Type H <return> for immediate help}\def~{\errmessage{% \__kernel_primitive:NN \ybaselineshift \tex_ybaselineshift:D \__kernel_primitive:NN \yoko \tex_yoko:D \__kernel_primitive:NN \vfi \tex_vfi:D - \__kernel_primitive:NN \currentcjktoken \tex_currentcjktoken:D \__kernel_primitive:NN \disablecjktoken \tex_disablecjktoken:D \__kernel_primitive:NN \enablecjktoken \tex_enablecjktoken:D \__kernel_primitive:NN \forcecjktoken \tex_forcecjktoken:D \__kernel_primitive:NN \kchar \tex_kchar:D \__kernel_primitive:NN \kchardef \tex_kchardef:D - \__kernel_primitive:NN \kuten \tex_kuten:D \__kernel_primitive:NN \uptexrevision \tex_uptexrevision:D \__kernel_primitive:NN \uptexversion \tex_uptexversion:D \__kernel_primitive:NN \odelcode \tex_odelcode:D @@ -3076,13 +3073,23 @@ Type H <return> for immediate help}\def~{\errmessage{% \__cs_generate_variant:w #2 \s__cs_mark {#3} {#4} {#5} } \cs_new_protected:Npn \__cs_generate_variant_p_form:nnn #1#2 - { \cs_generate_variant:cn { #1 _p : #2 } } + { \__cs_generate_variant_check:nn { #1 _p : #2 } } \cs_new_protected:Npn \__cs_generate_variant_T_form:nnn #1#2 - { \cs_generate_variant:cn { #1 : #2 T } } + { \__cs_generate_variant_check:nn { #1 : #2 T } } \cs_new_protected:Npn \__cs_generate_variant_F_form:nnn #1#2 - { \cs_generate_variant:cn { #1 : #2 F } } + { \__cs_generate_variant_check:nn { #1 : #2 F } } \cs_new_protected:Npn \__cs_generate_variant_TF_form:nnn #1#2 - { \cs_generate_variant:cn { #1 : #2 TF } } + { \__cs_generate_variant_check:nn { #1 : #2 TF } } +\cs_new_protected:Npn \__cs_generate_variant_check:nn #1#2 + { + \cs_if_exist:cTF {#1} + { \cs_generate_variant:cn {#1} {#2} } + { + \msg_error:nne + { kernel } { conditional-base-undefined } + { \token_to_str:c {#1} } + } + } \cs_new_protected:Npn \exp_args_generate:n #1 { \exp_args:No \clist_map_inline:nn { \tl_to_str:n {#1} } @@ -3476,7 +3483,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \__kernel_chk_if_free_cs:N #1 \cs_gset_nopar:Npe #1 { \__kernel_exp_not:w {#2} } } -\cs_generate_variant:Nn \tl_const:Nn { Ne , c , ce } +\cs_generate_variant:Nn \tl_const:Nn { NV , Ne , c , cV , ce } \cs_generate_variant:Nn \tl_const:Nn { Nx , cx } \cs_new_protected:Npn \tl_clear:N #1 { \tex_let:D #1 = ~ \c_empty_tl } @@ -3867,6 +3874,37 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs_new:Npn \__tl_replace_next_aux:w { \__tl_replace_next:w { } { } } \cs_new_eq:NN \__tl_replace_wrap:w ? \cs_new_eq:NN \__tl_replace_next:w ? +\cs_new_protected:Npn \tl_regex_replace_once:Nnn #1#2#3 + { \regex_replace_once:nnN {#2} {#3} #1 } +\cs_generate_variant:Nn \tl_regex_replace_once:Nnn { c } +\cs_new_protected:Npn \tl_regex_replace_once:NNn #1#2#3 + { \regex_replace_once:NnN #2 {#3} #1 } +\cs_generate_variant:Nn \tl_regex_replace_once:NNn { c } +\cs_new_protected:Npn \tl_regex_replace_all:Nnn #1#2#3 + { \regex_replace_all:nnN {#2} {#3} #1 } +\cs_generate_variant:Nn \tl_regex_replace_all:Nnn { c } +\cs_new_protected:Npn \tl_regex_replace_all:NNn #1#2#3 + { \regex_replace_all:NnN #2 {#3} #1 } +\cs_generate_variant:Nn \tl_regex_replace_all:NNn { c } +\group_begin: + \cs_set_protected:Npn \__tl_tmp:w #1#2#3 + { + \cs_new_protected:cpe { tl_regex_greplace_ #1 :N #2 n } ##1##2##3 + { + \group_begin: + \tl_set_eq:NN \exp_not:N \l__tl_internal_a_tl ##1 + \exp_not:c { regex_replace_ #1 :Nn #2 } + #3 {##2} {##3} \exp_not:N \l__tl_internal_a_tl + \tl_gset_eq:NN ##1 \exp_not:N \l__tl_internal_a_tl + \group_end: + } + \cs_generate_variant:cn { tl_regex_greplace_ #1 :N #2 n } { c } + } + \__tl_tmp:w { once } n { } + \__tl_tmp:w { once } N \use:n + \__tl_tmp:w { all } n { } + \__tl_tmp:w { all } N \use:n +\group_end: \cs_new_protected:Npn \tl_remove_once:Nn #1#2 { \tl_replace_once:Nnn #1 {#2} { } } \cs_new_protected:Npn \tl_gremove_once:Nn #1#2 @@ -4019,6 +4057,20 @@ Type H <return> for immediate help}\def~{\errmessage{% \prg_return_false: \fi: } +\prg_new_protected_conditional:Npnn \tl_if_regex_match:nn #1#2 { TF , T , F } + { + \regex_match:nnTF {#2} {#1} + \prg_return_true: \prg_return_false: + } +\prg_generate_conditional_variant:Nnn \tl_if_regex_match:nn + { V } { TF , T , F } +\prg_new_protected_conditional:Npnn \tl_if_regex_match:nN #1#2 { TF , T , F } + { + \regex_match:nNTF {#2} #1 + \prg_return_true: \prg_return_false: + } +\prg_generate_conditional_variant:Nnn \tl_if_regex_match:nN + { V } { TF , T , F } \cs_new:Npn \tl_map_function:nN #1#2 { \__tl_map_function:Nnnnnnnnn #2 #1 @@ -5622,6 +5674,45 @@ Type H <return> for immediate help}\def~{\errmessage{% #1 #2 { #3 } \__seq_pop_item_def: } +\cs_new_protected:Npn \seq_set_regex_extract_once:Nnn #1#2#3 + { \regex_extract_once:nnN {#2} {#3} #1 } +\cs_generate_variant:Nn \seq_set_regex_extract_once:Nnn { c } +\cs_new_protected:Npn \seq_set_regex_extract_once:NNn #1#2#3 + { \regex_extract_once:NnN #2 {#3} #1 } +\cs_generate_variant:Nn \seq_set_regex_extract_once:NNn { c } +\cs_new_protected:Npn \seq_set_regex_extract_all:Nnn #1#2#3 + { \regex_extract_all:nnN {#2} {#3} #1 } +\cs_generate_variant:Nn \seq_set_regex_extract_all:Nnn { c } +\cs_new_protected:Npn \seq_set_regex_extract_all:NNn #1#2#3 + { \regex_extract_all:NnN #2 {#3} #1 } +\cs_generate_variant:Nn \seq_set_regex_extract_all:NNn { c } +\cs_new_protected:Npn \seq_set_regex_split:Nnn #1#2#3 + { \regex_split:nnN {#2} {#3} #1 } +\cs_generate_variant:Nn \seq_set_regex_split:Nnn { c } +\cs_new_protected:Npn \seq_set_regex_split:NNn #1#2#3 + { \regex_split:NnN #2 {#3} #1 } +\cs_generate_variant:Nn \seq_set_regex_split:NNn { c } +\group_begin: + \cs_set_protected:Npn \__seq_tmp:w #1#2#3 + { + \cs_new_protected:cpe { seq_gset_regex_ #1 :N #2 n } ##1##2##3 + { + \group_begin: + \seq_set_eq:NN \exp_not:N \l__seq_tmp_seq ##1 + \exp_not:c { regex_ #1 :Nn #2 } + #3 {##2} {##3} \exp_not:N \l__seq_tmp_seq + \seq_gset_eq:NN ##1 \exp_not:N \l__seq_tmp_seq + \group_end: + } + \cs_generate_variant:cn { seq_gset_regex_ #1 :N #2 n } { c } + } + \__seq_tmp:w { extract_once } n { } + \__seq_tmp:w { extract_once } N \use:n + \__seq_tmp:w { extract_all } n { } + \__seq_tmp:w { extract_all } N \use:n + \__seq_tmp:w { split } n { } + \__seq_tmp:w { split } N \use:n +\group_end: \cs_new_protected:Npn \seq_concat:NNN #1#2#3 { \tl_set:Nf #1 { \exp_after:wN \use_i:nn \exp_after:wN #2 #3 } } \cs_new_protected:Npn \seq_gconcat:NNN #1#2#3 @@ -5662,20 +5753,20 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs_generate_variant:Nn \seq_gput_right:Nn { NV , Nv , Ne , No , Nx } \cs_generate_variant:Nn \seq_gput_right:Nn { c , cV , cv , ce , co , cx } \cs_new:Npn \__seq_wrap_item:n #1 { \exp_not:n { \__seq_item:n {#1} } } -\seq_new:N \l__seq_remove_seq +\seq_new:N \l__seq_tmp_seq \cs_new_protected:Npn \seq_remove_duplicates:N { \__seq_remove_duplicates:NN \seq_set_eq:NN } \cs_new_protected:Npn \seq_gremove_duplicates:N { \__seq_remove_duplicates:NN \seq_gset_eq:NN } \cs_new_protected:Npn \__seq_remove_duplicates:NN #1#2 { - \seq_clear:N \l__seq_remove_seq + \seq_clear:N \l__seq_tmp_seq \seq_map_inline:Nn #2 { - \seq_if_in:NnF \l__seq_remove_seq {##1} - { \seq_put_right:Nn \l__seq_remove_seq {##1} } + \seq_if_in:NnF \l__seq_tmp_seq {##1} + { \seq_put_right:Nn \l__seq_tmp_seq {##1} } } - #1 #2 \l__seq_remove_seq + #1 #2 \l__seq_tmp_seq } \cs_generate_variant:Nn \seq_remove_duplicates:N { c } \cs_generate_variant:Nn \seq_gremove_duplicates:N { c } @@ -6138,6 +6229,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__seq_map_pairwise_function:wNw #2 \s__seq_stop #3 #1 { ? \prg_break: } { } \prg_break_point: + \prg_break_point:Nn \seq_map_break: { } } \cs_new:Npn \__seq_map_pairwise_function:wNw \s__seq #1 \s__seq_stop #2 { @@ -6297,13 +6389,14 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs_new:Npn \int_eval:n #1 { \tex_the:D \__int_eval:w #1 \__int_eval_end: } \cs_new:Npn \int_eval:w { \tex_the:D \__int_eval:w } +\cs_new_eq:NN \__int_sep: \tex_right:D \cs_new:Npn \int_sign:n #1 { \int_value:w \exp_after:wN \__int_sign:Nw - \int_value:w \__int_eval:w #1 \__int_eval_end: ; + \int_value:w \__int_eval:w #1 \__int_eval_end: \__int_sep: \exp_stop_f: } -\cs_new:Npn \__int_sign:Nw #1#2 ; +\cs_new:Npn \__int_sign:Nw #1#2 \__int_sep: { \if_meaning:w 0 #1 0 @@ -6322,20 +6415,20 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs_new:Npn \int_max:nn #1#2 { \int_value:w \exp_after:wN \__int_maxmin:wwN - \int_value:w \__int_eval:w #1 \exp_after:wN ; - \int_value:w \__int_eval:w #2 ; + \int_value:w \__int_eval:w #1 \exp_after:wN \__int_sep: + \int_value:w \__int_eval:w #2 \__int_sep: > \exp_stop_f: } \cs_new:Npn \int_min:nn #1#2 { \int_value:w \exp_after:wN \__int_maxmin:wwN - \int_value:w \__int_eval:w #1 \exp_after:wN ; - \int_value:w \__int_eval:w #2 ; + \int_value:w \__int_eval:w #1 \exp_after:wN \__int_sep: + \int_value:w \__int_eval:w #2 \__int_sep: < \exp_stop_f: } -\cs_new:Npn \__int_maxmin:wwN #1 ; #2 ; #3 +\cs_new:Npn \__int_maxmin:wwN #1 \__int_sep: #2 \__int_sep: #3 { \if_int_compare:w #1 #3 #2 ~ #1 @@ -6347,11 +6440,11 @@ Type H <return> for immediate help}\def~{\errmessage{% { \int_value:w \__int_eval:w \exp_after:wN \__int_div_truncate:NwNw - \int_value:w \__int_eval:w #1 \exp_after:wN ; - \int_value:w \__int_eval:w #2 ; + \int_value:w \__int_eval:w #1 \exp_after:wN \__int_sep: + \int_value:w \__int_eval:w #2 \__int_sep: \__int_eval_end: } -\cs_new:Npn \__int_div_truncate:NwNw #1#2; #3#4; +\cs_new:Npn \__int_div_truncate:NwNw #1#2 \__int_sep: #3#4 \__int_sep: { \if_meaning:w 0 #1 0 @@ -6369,12 +6462,12 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs_new:Npn \int_mod:nn #1#2 { \int_value:w \__int_eval:w \exp_after:wN \__int_mod:ww - \int_value:w \__int_eval:w #1 \exp_after:wN ; - \int_value:w \__int_eval:w #2 ; + \int_value:w \__int_eval:w #1 \exp_after:wN \__int_sep: + \int_value:w \__int_eval:w #2 \__int_sep: \__int_eval_end: } -\cs_new:Npn \__int_mod:ww #1; #2; - { #1 - ( \__int_div_truncate:NwNw #1 ; #2 ; ) * #2 } +\cs_new:Npn \__int_mod:ww #1 \__int_sep: #2 \__int_sep: + { #1 - ( \__int_div_truncate:NwNw #1 \__int_sep: #2 \__int_sep: ) * #2 } \cs_new:Npn \__kernel_int_add:nnn #1#2#3 { \int_value:w \__int_eval:w #1 @@ -6470,8 +6563,32 @@ Type H <return> for immediate help}\def~{\errmessage{% { #1 = \__int_eval:w #2 \__int_eval_end: } \cs_new_protected:Npn \int_gset:Nn #1#2 { \tex_global:D #1 = \__int_eval:w #2 \__int_eval_end: } -\cs_generate_variant:Nn \int_set:Nn { c } -\cs_generate_variant:Nn \int_gset:Nn { c } +\cs_generate_variant:Nn \int_set:Nn { NV , c , cV } +\cs_generate_variant:Nn \int_gset:Nn { NV , c , cV } +\cs_new_protected:Npn \int_set_regex_count:Nnn #1#2#3 + { \regex_count:nnN {#2} {#3} #1 } +\cs_generate_variant:Nn \int_set_regex_count:Nnn { c } +\cs_new_protected:Npn \int_gset_regex_count:Nnn #1#2#3 + { + \group_begin: + \int_set_eq:NN \l__int_internal_a_int #1 + \regex_count:nnN {#2} {#3} \l__int_internal_a_int + \int_gset_eq:NN #1 \l__int_internal_a_int + \group_end: + } +\cs_generate_variant:Nn \int_gset_regex_count:Nnn { c } +\cs_new_protected:Npn \int_set_regex_count:NNn #1#2#3 + { \regex_count:NnN #2 {#3} #1 } +\cs_generate_variant:Nn \int_set_regex_count:Nnn { c } +\cs_new_protected:Npn \int_gset_regex_count:NNn #1#2#3 + { + \group_begin: + \int_set_eq:NN \l__int_internal_a_int #1 + \regex_count:NnN #2 {#3} \l__int_internal_a_int + \int_gset_eq:NN #1 \l__int_internal_a_int + \group_end: + } +\cs_generate_variant:Nn \int_gset_regex_count:NNn { c } \cs_new_eq:NN \int_use:N \tex_the:D \cs_new:Npn \int_use:c #1 { \tex_the:D \cs:w #1 \cs_end: } \cs_new_protected:Npn \__int_compare_error: @@ -6662,41 +6779,47 @@ Type H <return> for immediate help}\def~{\errmessage{% } \cs_new:Npn \int_step_function:nnnN #1#2#3 { - \exp_after:wN \__int_step:wwwN - \int_value:w \__int_eval:w #1 \exp_after:wN ; - \int_value:w \__int_eval:w #2 \exp_after:wN ; - \int_value:w \__int_eval:w #3 ; + \exp_after:wN \__int_step:w + \int_value:w \__int_eval:w #1 \exp_after:wN \__int_sep: + \int_value:w \__int_eval:w #2 \exp_after:wN \__int_sep: + \int_value:w \__int_eval:w #3 \__int_sep: } -\cs_new:Npn \__int_step:wwwN #1; #2; #3; #4 +\cs_new:Npn \__int_step:w #1 \__int_sep: #2 \__int_sep: #3 \__int_sep: #4 { \int_compare:nNnTF {#2} > \c_zero_int - { \__int_step:NwnnN > } + { \__int_step:Nw > } { - \int_compare:nNnTF {#2} = \c_zero_int + \if_meaning:w 0 #2 + \exp_after:wN \use_ii:nn + \fi: + \use_none:n { \msg_expandable_error:nnn { kernel } { zero-step } {#4} \prg_break: } - { \__int_step:NwnnN < } + \__int_step:Nw < } - #1 ; {#2} {#3} #4 + #1 \__int_sep: {#2} {#3} {#4} \prg_break_point: } -\cs_new:Npn \__int_step:NwnnN #1#2 ; #3#4#5 +\cs_new:Npn \__int_step:Nw #1#2 \__int_sep: #3#4#5 { \if_int_compare:w #2 #1 #4 \exp_stop_f: \prg_break:n \fi: #5 {#2} - \exp_after:wN \__int_step:NwnnN + \exp_after:wN \__int_step:Nw \exp_after:wN #1 - \int_value:w \__int_eval:w #2 + #3 ; {#3} {#4} #5 + \int_value:w \__int_eval:w #2 + #3 \__int_sep: {#3} {#4} {#5} } \cs_new:Npn \int_step_function:nN - { \int_step_function:nnnN { 1 } { 1 } } + { \int_step_function:nnnN \c_one_int \c_one_int } \cs_new:Npn \int_step_function:nnN #1 - { \int_step_function:nnnN {#1} { 1 } } + { \int_step_function:nnnN {#1} \c_one_int } +\cs_new_eq:NN \int_step_tokens:nn \int_step_function:nN +\cs_new_eq:NN \int_step_tokens:nnn \int_step_function:nnN +\cs_new_eq:NN \int_step_tokens:nnnn \int_step_function:nnnN \cs_new_protected:Npn \int_step_inline:nn { \int_step_inline:nnnn { 1 } { 1 } } \cs_new_protected:Npn \int_step_inline:nnn #1 @@ -7584,6 +7707,9 @@ Type H <return> for immediate help}\def~{\errmessage{% \__sys_const:nn { sys_if_engine_ #1 } { \str_if_eq_p:Vn \c_sys_engine_str {#1} } } +\__sys_const:nn + { sys_if_engine_opentype } + { \cs_if_exist_p:N \tex_Umathcode:D } \group_begin: \cs_set_eq:NN \lua_now:e \tex_directlua:D \str_const:Ne \c_sys_engine_exec_str @@ -8640,6 +8766,8 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs_new:Npn \clist_use:Nn #1#2 { \clist_use:Nnnn #1 {#2} {#2} {#2} } \cs_generate_variant:Nn \clist_use:Nn { c } +\cs_new_eq:NN \clist_use:N \tl_use:N +\cs_generate_variant:Nn \clist_use:N { c } \cs_new:Npn \clist_use:nnnn #1#2#3#4 { \__clist_use:Nw \__clist_use_none_delimit_by_s_stop:w @@ -9074,7 +9202,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \group_end: \group_begin: \char_set_catcode_active:N \* - \tl_const:Nn \c_catcode_active_tl { \exp_not:N * } + \tl_const:Nn \c__token_active_tl { \exp_not:N * } \group_end: \prg_new_conditional:Npnn \token_if_group_begin:N #1 { p , T , F , TF } { @@ -9132,7 +9260,7 @@ Type H <return> for immediate help}\def~{\errmessage{% } \prg_new_conditional:Npnn \token_if_active:N #1 { p , T , F , TF } { - \if_catcode:w \exp_not:N #1 \c_catcode_active_tl + \if_catcode:w \exp_not:N #1 \c__token_active_tl \prg_return_true: \else: \prg_return_false: \fi: } \prg_new_eq_conditional:NNn \token_if_eq_meaning:NN \cs_if_eq:NN @@ -9934,7 +10062,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN { \tl_to_str:n {#2} } } } - { \exp_after:wN \__prop_get_linked:w #1 {#2} \use:n { } { } } + { \exp_after:wN \__prop_get_linked:w #1 {#2} \exp_not:n { } { } } } \cs_new:Npn \__prop_item:nnn #1#2#3 { @@ -11054,6 +11182,13 @@ Type H <return> for immediate help}\def~{\errmessage{% } \msg_new:nnn { kernel } { randint-backward-range } { Wrong~order~of~bounds~in~\iow_char:N\\int_rand:nn{#1}{#2}. } +\msg_new:nnnn { kernel } { conditional-base-undefined } + { Undefined~conditional~base~function~'#1'. } + { + \c__msg_coding_error_text_tl + LaTeX~has~been~asked~to~define~a~variant~of~the~conditional~'#1',~ + but~the~latter~is~not~defined. + } \msg_new:nnnn { kernel } { conditional-form-unknown } { Conditional~form~'#1'~for~function~'#2'~unknown. } { @@ -12363,6 +12498,8 @@ Type H <return> for immediate help}\def~{\errmessage{% {#3} } } +\cs_new_protected:Npn \file_forget:n #1 + { \cs_undefine:c { __file_seen_ \file_full_name:n {#1} : } } \cs_new_protected:Npn \file_get_full_name:nN #1#2 { \file_get_full_name:nNF {#1} #2 @@ -12952,8 +13089,8 @@ Type H <return> for immediate help}\def~{\errmessage{% { #1 = \__dim_eval:w #2 \__dim_eval_end: \scan_stop: } \cs_new_protected:Npn \dim_gset:Nn #1#2 { \tex_global:D #1 = \__dim_eval:w #2 \__dim_eval_end: \scan_stop: } -\cs_generate_variant:Nn \dim_set:Nn { c } -\cs_generate_variant:Nn \dim_gset:Nn { c } +\cs_generate_variant:Nn \dim_set:Nn { NV , c , cV } +\cs_generate_variant:Nn \dim_gset:Nn { NV , c , cV } \cs_new_protected:Npn \dim_set_eq:NN #1#2 { #1 = #2 \scan_stop: } \cs_generate_variant:Nn \dim_set_eq:NN { c , Nc , cc } @@ -13379,8 +13516,8 @@ Type H <return> for immediate help}\def~{\errmessage{% { #1 = \tex_glueexpr:D #2 \scan_stop: } \cs_new_protected:Npn \skip_gset:Nn #1#2 { \tex_global:D #1 = \tex_glueexpr:D #2 \scan_stop: } -\cs_generate_variant:Nn \skip_set:Nn { c } -\cs_generate_variant:Nn \skip_gset:Nn { c } +\cs_generate_variant:Nn \skip_set:Nn { NV , c , cV } +\cs_generate_variant:Nn \skip_gset:Nn { NV , c , cV } \cs_new_protected:Npn \skip_set_eq:NN #1#2 { #1 = #2 } \cs_generate_variant:Nn \skip_set_eq:NN { c , Nc , cc } \cs_new_protected:Npn \skip_gset_eq:NN #1#2 { \tex_global:D #1 = #2 } @@ -13472,8 +13609,8 @@ Type H <return> for immediate help}\def~{\errmessage{% { #1 = \tex_muexpr:D #2 \scan_stop: } \cs_new_protected:Npn \muskip_gset:Nn #1#2 { \tex_global:D #1 = \tex_muexpr:D #2 \scan_stop: } -\cs_generate_variant:Nn \muskip_set:Nn { c } -\cs_generate_variant:Nn \muskip_gset:Nn { c } +\cs_generate_variant:Nn \muskip_set:Nn { NV , c , cV } +\cs_generate_variant:Nn \muskip_gset:Nn { NV , c , cV } \cs_new_protected:Npn \muskip_set_eq:NN #1#2 { #1 = #2 } \cs_generate_variant:Nn \muskip_set_eq:NN { c , Nc , cc } \cs_new_protected:Npn \muskip_gset_eq:NN #1#2 { \tex_global:D #1 = #2 } @@ -13781,16 +13918,27 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: \cs_set_eq:cN {#1} \tex_undefined:D } -\cs_new_protected:Npn \keys_define:nn - { \__keys_define:onn \l__keys_module_str } -\cs_generate_variant:Nn \keys_define:nn { ne , nx } -\cs_new_protected:Npn \__keys_define:nnn #1#2#3 +\cs_new_protected:Npn \keys_define:nn #1#2 { - \str_set:Ne \l__keys_module_str { \__keys_trim_spaces:n {#2} } - \keyval_parse:NNn \__keys_define:n \__keys_define:nn {#3} - \str_set:Nn \l__keys_module_str {#1} + \use:e + { + \exp_not:n + { + \str_set:Ne \l__keys_module_str { \__keys_trim_spaces:n {#1} } + \keyval_parse:NNn \__keys_define:n \__keys_define:nn {#2} + } + \__keys_reset_var:N \l__keys_module_str + \__keys_reset_var:N \l__keys_inherit_str + \__keys_reset_var:N \l_keys_choice_tl + \__keys_reset_var:N \l_keys_key_tl + \__keys_reset_var:N \l_keys_key_str + \__keys_reset_var:N \l_keys_path_tl + \__keys_reset_var:N \l_keys_path_str + \__keys_reset_var:N \l_keys_value_tl + \int_set:Nn \l_keys_choice_int { \int_use:N \l_keys_choice_int } + } } -\cs_generate_variant:Nn \__keys_define:nnn { o } +\cs_generate_variant:Nn \keys_define:nn { ne , nx } \cs_new_protected:Npn \__keys_define:n #1 { \bool_set_true:N \l__keys_no_value_bool @@ -14054,14 +14202,8 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs:w if#1 \cs_end: } } -\cs_new_protected:Npn \__keys_meta_make:n #1 - { - \exp_args:NVo \__keys_cmd_set_direct:nn \l_keys_path_str - { - \exp_after:wN \__keys_set:nn \exp_after:wN - { \l__keys_module_str } {#1} - } - } +\cs_new_protected:Npn \__keys_meta_make:n + { \exp_args:NV \__keys_meta_make:nn \l__keys_module_str } \cs_new_protected:Npn \__keys_meta_make:nn #1#2 { \exp_args:NV \__keys_cmd_set_direct:nn @@ -14388,33 +14530,34 @@ Type H <return> for immediate help}\def~{\errmessage{% { \__keys_value_requirement:nn { forbidden } {#1} } \cs_new_protected:cpn { \c__keys_props_root_str .value_required:n } #1 { \__keys_value_requirement:nn { required } {#1} } -\cs_new_protected:Npn \__keys_set:nnnnNn +\cs_new_protected:Npn \__keys_set:nnnnNn #1#2#3#4#5#6 { - \exp_args:Nooo \__keys_set:nnnnnnnNn - \l__keys_unused_clist - \l__keys_selective_clist - \l__keys_relative_tl - } -\cs_new_protected:Npn \__keys_set:nnnnnnnNn #1#2#3#4#5#6#7#8#9 - { - \clist_clear:N \l__keys_unused_clist - \clist_set:Ne \l__keys_selective_clist { \tl_to_str:n {#5} } - \tl_set:Nn \l__keys_relative_tl {#7} \use:e { \exp_not:n { - #9 - \__keys_set:nn {#4} {#6} + \clist_clear:N \l__keys_unused_clist + \clist_set:Ne \l__keys_selective_clist { \tl_to_str:n {#2} } + \tl_set:Nn \l__keys_relative_tl {#4} + #6 + \__keys_set:nn {#1} {#3} + \clist_set_eq:NN #5 \l__keys_unused_clist } \__keys_reset_bool:N \l__keys_only_known_bool \__keys_reset_bool:N \l__keys_exclude_bool \__keys_reset_bool:N \l__keys_selective_bool + \__keys_reset_var:N \l__keys_unused_clist + \__keys_reset_var:N \l__keys_selective_clist + \__keys_reset_var:N \l__keys_relative_tl + \__keys_reset_var:N \l__keys_inherit_str + \__keys_reset_var:N \l_keys_choice_tl + \__keys_reset_var:N \l_keys_key_tl + \__keys_reset_var:N \l_keys_key_str + \__keys_reset_var:N \l_keys_path_tl + \__keys_reset_var:N \l_keys_path_str + \__keys_reset_var:N \l_keys_value_tl + \int_set:Nn \l_keys_choice_int { \int_use:N \l_keys_choice_int } } - \clist_set_eq:NN #8 \l__keys_unused_clist - \__kernel_tl_set:Nx \l__keys_unused_clist { \exp_not:n {#1} } - \__kernel_tl_set:Nx \l__keys_selective_clist {#2} - \__kernel_tl_set:Nx \l__keys_relative_tl { \exp_not:n {#3} } } \cs_new:Npn \__keys_reset_bool:N #1 { @@ -14422,6 +14565,12 @@ Type H <return> for immediate help}\def~{\errmessage{% { bool_set_ \bool_if:NTF #1 { true } { false } :N } \exp_not:N #1 } +\cs_new:Npn \__keys_reset_var:N #1 + { + \exp_not:n + { \__kernel_tl_set:Nx #1 } + { \exp_not:N \exp_not:n { \exp_not:o { #1 } } } + } \cs_new_protected:Npn \__keys_set:nn #1#2 { \exp_args:No \__keys_set:nnn \l__keys_module_str {#1} {#2} } \cs_new_protected:Npn \__keys_set:nnn #1#2#3 @@ -15225,21 +15374,24 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs_new_eq:NN \__fp_int_eval:w \tex_numexpr:D \cs_new_eq:NN \__fp_int_eval_end: \scan_stop: \cs_new_eq:NN \__fp_int_to_roman:w \tex_romannumeral:D +\cs_new_eq:NN \__fp_sep: \tex_right:D \cs_new:Npn \__fp_use_none_stop_f:n #1 { \exp_stop_f: } -\cs_new:Npn \__fp_use_s:n #1 { #1; } -\cs_new:Npn \__fp_use_s:nn #1#2 { #1#2; } -\cs_new:Npn \__fp_use_none_until_s:w #1; { } -\cs_new:Npn \__fp_use_i_until_s:nw #1#2; {#1} -\cs_new:Npn \__fp_use_ii_until_s:nnw #1#2#3; {#2} -\cs_new:Npn \__fp_reverse_args:Nww #1 #2; #3; { #1 #3; #2; } -\cs_new:Npn \__fp_rrot:www #1; #2; #3; { #2; #3; #1; } -\cs_new:Npn \__fp_use_i:ww #1; #2; { #1; } -\cs_new:Npn \__fp_use_i:www #1; #2; #3; { #1; } +\cs_new:Npn \__fp_use_s:n #1 { #1\__fp_sep: } +\cs_new:Npn \__fp_use_s:nn #1#2 { #1#2\__fp_sep: } +\cs_new:Npn \__fp_use_none_until_s:w #1\__fp_sep: { } +\cs_new:Npn \__fp_use_i_until_s:nw #1#2\__fp_sep: {#1} +\cs_new:Npn \__fp_use_ii_until_s:nnw #1#2#3\__fp_sep: {#2} +\cs_new:Npn \__fp_reverse_args:Nww #1 #2\__fp_sep: #3\__fp_sep: + { #1 #3\__fp_sep: #2\__fp_sep: } +\cs_new:Npn \__fp_rrot:www #1\__fp_sep: #2\__fp_sep: #3\__fp_sep: + { #2\__fp_sep: #3\__fp_sep: #1\__fp_sep: } +\cs_new:Npn \__fp_use_i:ww #1\__fp_sep: #2\__fp_sep: { #1\__fp_sep: } +\cs_new:Npn \__fp_use_i:www #1\__fp_sep: #2\__fp_sep: #3\__fp_sep: { #1\__fp_sep: } \cs_new_protected:Npn \__fp_misused:n #1 { \msg_error:nne { fp } { misused } { \fp_to_tl:n {#1} } } \scan_new:N \s__fp -\cs_new_protected:Npn \__fp_chk:w #1 ; - { \__fp_misused:n { \s__fp \__fp_chk:w #1 ; } } +\cs_new_protected:Npn \__fp_chk:w #1 \__fp_sep: + { \__fp_misused:n { \s__fp \__fp_chk:w #1 \__fp_sep: } } \scan_new:N \s__fp_expr_mark \scan_new:N \s__fp_expr_stop \scan_new:N \s__fp_mark @@ -15250,11 +15402,11 @@ Type H <return> for immediate help}\def~{\errmessage{% \scan_new:N \s__fp_overflow \scan_new:N \s__fp_division \scan_new:N \s__fp_exact -\tl_const:Nn \c_zero_fp { \s__fp \__fp_chk:w 0 0 \s__fp_exact ; } -\tl_const:Nn \c_minus_zero_fp { \s__fp \__fp_chk:w 0 2 \s__fp_exact ; } -\tl_const:Nn \c_inf_fp { \s__fp \__fp_chk:w 2 0 \s__fp_exact ; } -\tl_const:Nn \c_minus_inf_fp { \s__fp \__fp_chk:w 2 2 \s__fp_exact ; } -\tl_const:Nn \c_nan_fp { \s__fp \__fp_chk:w 3 1 \s__fp_exact ; } +\tl_const:Nn \c_zero_fp { \s__fp \__fp_chk:w 0 0 \s__fp_exact \__fp_sep: } +\tl_const:Nn \c_minus_zero_fp { \s__fp \__fp_chk:w 0 2 \s__fp_exact \__fp_sep: } +\tl_const:Nn \c_inf_fp { \s__fp \__fp_chk:w 2 0 \s__fp_exact \__fp_sep: } +\tl_const:Nn \c_minus_inf_fp { \s__fp \__fp_chk:w 2 2 \s__fp_exact \__fp_sep: } +\tl_const:Nn \c_nan_fp { \s__fp \__fp_chk:w 3 1 \s__fp_exact \__fp_sep: } \int_const:Nn \c__fp_prec_int { 16 } \int_const:Nn \c__fp_half_prec_int { 8 } \int_const:Nn \c__fp_block_int { 4 } @@ -15266,12 +15418,12 @@ Type H <return> for immediate help}\def~{\errmessage{% { \s__fp \__fp_chk:w 1 0 { \int_eval:n { \c__fp_max_exponent_int + 1 } } - {1000} {0000} {0000} {0000} ; + {1000} {0000} {0000} {0000} \__fp_sep: } \cs_new:Npn \__fp_zero_fp:N #1 - { \s__fp \__fp_chk:w 0 #1 \s__fp_underflow ; } + { \s__fp \__fp_chk:w 0 #1 \s__fp_underflow \__fp_sep: } \cs_new:Npn \__fp_inf_fp:N #1 - { \s__fp \__fp_chk:w 2 #1 \s__fp_overflow ; } + { \s__fp \__fp_chk:w 2 #1 \s__fp_overflow \__fp_sep: } \cs_new:Npn \__fp_exponent:w \s__fp \__fp_chk:w #1 { \if_meaning:w 1 #1 @@ -15290,7 +15442,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \s__fp { \__fp_use_i_until_s:nw 4 } \s__fp_stop } -\cs_new:Npn \__fp_sanitize:Nw #1 #2; +\cs_new:Npn \__fp_sanitize:Nw #1 #2\__fp_sep: { \if_case:w \if_int_compare:w #2 > \c__fp_max_exponent_int 1 ~ \else: @@ -15302,8 +15454,8 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: \s__fp \__fp_chk:w 1 #1 {#2} } -\cs_new:Npn \__fp_sanitize:wN #1; #2 { \__fp_sanitize:Nw #2 #1; } -\cs_new:Npn \__fp_sanitize_zero:w \s__fp \__fp_chk:w #1 #2 #3; +\cs_new:Npn \__fp_sanitize:wN #1\__fp_sep: #2 { \__fp_sanitize:Nw #2 #1\__fp_sep: } +\cs_new:Npn \__fp_sanitize_zero:w \s__fp \__fp_chk:w #1 #2 #3\__fp_sep: { \c_zero_fp } \cs_new:Npn \__fp_exp_after_o:w \s__fp \__fp_chk:w #1 { @@ -15325,52 +15477,52 @@ Type H <return> for immediate help}\def~{\errmessage{% { \exp:w \exp_end_continue_f:w #1 } #2 } -\cs_new:Npn \__fp_exp_after_special:nNNw #1#2#3#4; +\cs_new:Npn \__fp_exp_after_special:nNNw #1#2#3#4\__fp_sep: { \exp_after:wN \s__fp \exp_after:wN \__fp_chk:w \exp_after:wN #2 \exp_after:wN #3 \exp_after:wN #4 - \exp_after:wN ; + \exp_after:wN \__fp_sep: #1 } -\cs_new:Npn \__fp_exp_after_normal:nNNw #1 1 #2 #3 #4#5#6#7; +\cs_new:Npn \__fp_exp_after_normal:nNNw #1 1 #2 #3 #4#5#6#7\__fp_sep: { \exp_after:wN \__fp_exp_after_normal:Nwwwww \exp_after:wN #2 - \int_value:w #3 \exp_after:wN ; - \int_value:w 1 #4 \exp_after:wN ; - \int_value:w 1 #5 \exp_after:wN ; - \int_value:w 1 #6 \exp_after:wN ; - \int_value:w 1 #7 \exp_after:wN ; #1 + \int_value:w #3 \exp_after:wN \__fp_sep: + \int_value:w 1 #4 \exp_after:wN \__fp_sep: + \int_value:w 1 #5 \exp_after:wN \__fp_sep: + \int_value:w 1 #6 \exp_after:wN \__fp_sep: + \int_value:w 1 #7 \exp_after:wN \__fp_sep: #1 } \cs_new:Npn \__fp_exp_after_normal:Nwwwww - #1 #2; 1 #3 ; 1 #4 ; 1 #5 ; 1 #6 ; - { \s__fp \__fp_chk:w 1 #1 {#2} {#3} {#4} {#5} {#6} ; } + #1 #2\__fp_sep: 1 #3 \__fp_sep: 1 #4 \__fp_sep: 1 #5 \__fp_sep: 1 #6 \__fp_sep: + { \s__fp \__fp_chk:w 1 #1 {#2} {#3} {#4} {#5} {#6} \__fp_sep: } \scan_new:N \s__fp_tuple -\cs_new_protected:Npn \__fp_tuple_chk:w #1 ; - { \__fp_misused:n { \s__fp_tuple \__fp_tuple_chk:w #1 ; } } +\cs_new_protected:Npn \__fp_tuple_chk:w #1 \__fp_sep: + { \__fp_misused:n { \s__fp_tuple \__fp_tuple_chk:w #1 \__fp_sep: } } \tl_const:Nn \c__fp_empty_tuple_fp - { \s__fp_tuple \__fp_tuple_chk:w { } ; } + { \s__fp_tuple \__fp_tuple_chk:w { } \__fp_sep: } \cs_new:Npn \__fp_array_count:n #1 - { \__fp_tuple_count:w \s__fp_tuple \__fp_tuple_chk:w {#1} ; } -\cs_new:Npn \__fp_tuple_count:w \s__fp_tuple \__fp_tuple_chk:w #1 ; + { \__fp_tuple_count:w \s__fp_tuple \__fp_tuple_chk:w {#1} \__fp_sep: } +\cs_new:Npn \__fp_tuple_count:w \s__fp_tuple \__fp_tuple_chk:w #1 \__fp_sep: { \int_value:w \__fp_int_eval:w 0 - \__fp_tuple_count_loop:Nw #1 { ? \prg_break: } ; + \__fp_tuple_count_loop:Nw #1 { ? \prg_break: } \__fp_sep: \prg_break_point: \__fp_int_eval_end: } -\cs_new:Npn \__fp_tuple_count_loop:Nw #1#2; +\cs_new:Npn \__fp_tuple_count_loop:Nw #1#2\__fp_sep: { \use_none:n #1 + 1 \__fp_tuple_count_loop:Nw } \cs_new:Npn \__fp_if_type_fp:NTwFw #1 \s__fp #2 #3 \s__fp_stop {#2} \cs_new:Npn \__fp_array_if_all_fp:nTF #1 { - \__fp_array_if_all_fp_loop:w #1 { \s__fp \prg_break: } ; + \__fp_array_if_all_fp_loop:w #1 { \s__fp \prg_break: } \__fp_sep: \prg_break_point: \use_i:nn } -\cs_new:Npn \__fp_array_if_all_fp_loop:w #1#2 ; +\cs_new:Npn \__fp_array_if_all_fp_loop:w #1#2 \__fp_sep: { \__fp_if_type_fp:NTwFw #1 \__fp_array_if_all_fp_loop:w @@ -15432,7 +15584,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs_new:Npn \__fp_exp_after_tuple_o:w { \__fp_exp_after_tuple_f:nw { \exp_after:wN \exp_stop_f: } } \cs_new:Npn \__fp_exp_after_tuple_f:nw - #1 \s__fp_tuple \__fp_tuple_chk:w #2 ; + #1 \s__fp_tuple \__fp_tuple_chk:w #2 \__fp_sep: { \exp_after:wN \s__fp_tuple \exp_after:wN \__fp_tuple_chk:w @@ -15440,7 +15592,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp:w \exp_end_continue_f:w \__fp_exp_after_array_f:w #2 \s__fp_expr_stop \exp_after:wN } - \exp_after:wN ; + \exp_after:wN \__fp_sep: \exp:w \exp_end_continue_f:w #1 } \cs_new:Npn \__fp_exp_after_array_f:w @@ -15448,42 +15600,43 @@ Type H <return> for immediate help}\def~{\errmessage{% \int_const:Nn \c__fp_leading_shift_int { - 5 0000 } \int_const:Nn \c__fp_middle_shift_int { 5 0000 * 9999 } \int_const:Nn \c__fp_trailing_shift_int { 5 0000 * 10000 } -\cs_new:Npn \__fp_pack:NNNNNw #1 #2#3#4#5 #6; { + #1#2#3#4#5 ; {#6} } +\cs_new:Npn \__fp_pack:NNNNNw #1 #2#3#4#5 #6\__fp_sep: + { + #1#2#3#4#5 \__fp_sep: {#6} } \int_const:Nn \c__fp_big_leading_shift_int { - 15 2374 } \int_const:Nn \c__fp_big_middle_shift_int { 15 2374 * 9999 } \int_const:Nn \c__fp_big_trailing_shift_int { 15 2374 * 10000 } -\cs_new:Npn \__fp_pack_big:NNNNNNw #1#2 #3#4#5#6 #7; - { + #1#2#3#4#5#6 ; {#7} } +\cs_new:Npn \__fp_pack_big:NNNNNNw #1#2 #3#4#5#6 #7\__fp_sep: + { + #1#2#3#4#5#6 \__fp_sep: {#7} } \int_const:Nn \c__fp_Bigg_leading_shift_int { - 20 0000 } \int_const:Nn \c__fp_Bigg_middle_shift_int { 20 0000 * 9999 } \int_const:Nn \c__fp_Bigg_trailing_shift_int { 20 0000 * 10000 } -\cs_new:Npn \__fp_pack_Bigg:NNNNNNw #1#2 #3#4#5#6 #7; - { + #1#2#3#4#5#6 ; {#7} } -\cs_new:Npn \__fp_pack_twice_four:wNNNNNNNN #1; #2#3#4#5 #6#7#8#9 - { #1 {#2#3#4#5} {#6#7#8#9} ; } -\cs_new:Npn \__fp_pack_eight:wNNNNNNNN #1; #2#3#4#5 #6#7#8#9 - { #1 {#2#3#4#5#6#7#8#9} ; } -\cs_new:Npn \__fp_basics_pack_low:NNNNNw #1 #2#3#4#5 #6; - { + #1 - 1 ; {#2#3#4#5} {#6} ; } -\cs_new:Npn \__fp_basics_pack_high:NNNNNw #1 #2#3#4#5 #6; +\cs_new:Npn \__fp_pack_Bigg:NNNNNNw #1#2 #3#4#5#6 #7\__fp_sep: + { + #1#2#3#4#5#6 \__fp_sep: {#7} } +\cs_new:Npn \__fp_pack_twice_four:wNNNNNNNN #1\__fp_sep: #2#3#4#5 #6#7#8#9 + { #1 {#2#3#4#5} {#6#7#8#9} \__fp_sep: } +\cs_new:Npn \__fp_pack_eight:wNNNNNNNN #1\__fp_sep: #2#3#4#5 #6#7#8#9 + { #1 {#2#3#4#5#6#7#8#9} \__fp_sep: } +\cs_new:Npn \__fp_basics_pack_low:NNNNNw #1 #2#3#4#5 #6\__fp_sep: + { + #1 - 1 \__fp_sep: {#2#3#4#5} {#6} \__fp_sep: } +\cs_new:Npn \__fp_basics_pack_high:NNNNNw #1 #2#3#4#5 #6\__fp_sep: { \if_meaning:w 2 #1 \__fp_basics_pack_high_carry:w \fi: - ; {#2#3#4#5} {#6} + \__fp_sep: {#2#3#4#5} {#6} } -\cs_new:Npn \__fp_basics_pack_high_carry:w \fi: ; #1 - { \fi: + 1 ; {1000} } -\cs_new:Npn \__fp_basics_pack_weird_low:NNNNw #1 #2#3#4 #5; +\cs_new:Npn \__fp_basics_pack_high_carry:w \fi: \__fp_sep: #1 + { \fi: + 1 \__fp_sep: {1000} } +\cs_new:Npn \__fp_basics_pack_weird_low:NNNNw #1 #2#3#4 #5\__fp_sep: { \if_meaning:w 2 #1 + 1 \fi: \__fp_int_eval_end: - #2#3#4; {#5} ; + #2#3#4\__fp_sep: {#5} \__fp_sep: } \cs_new:Npn \__fp_basics_pack_weird_high:NNNNNNNNw - 1 #1#2#3#4 #5#6#7#8 #9; { ; {#1#2#3#4} {#5#6#7#8} {#9} } + 1 #1#2#3#4 #5#6#7#8 #9\__fp_sep: { \__fp_sep: {#1#2#3#4} {#5#6#7#8} {#9} } \cs_new:Npn \__fp_decimate:nNnnnn #1 { \cs:w @@ -15497,17 +15650,17 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs_end: } \cs_new:Npn \__fp_decimate_:Nnnnn #1 #2#3#4#5 - { #1 0 {#2#3} {#4#5} ; } + { #1 0 {#2#3} {#4#5} \__fp_sep: } \cs_new:Npn \__fp_decimate_tiny:Nnnnn #1 #2#3#4#5 - { #1 1 { 0000 0000 } { 0000 0000 } 0 #2#3#4#5 ; } + { #1 1 { 0000 0000 } { 0000 0000 } 0 #2#3#4#5 \__fp_sep: } \cs_new:Npn \__fp_tmp:w #1 #2 #3 { \cs_new:cpn { __fp_decimate_ #1 :Nnnnn } ##1 ##2##3##4##5 { \exp_after:wN ##1 \int_value:w - \exp_after:wN \__fp_round_digit:Nw #2 ; - \__fp_decimate_pack:nnnnnnnnnnw #3 ; + \exp_after:wN \__fp_round_digit:Nw #2 \__fp_sep: + \__fp_decimate_pack:nnnnnnnnnnw #3 \__fp_sep: } } \__fp_tmp:w {i} {\use_none:nnn #50}{ 0{#2}#3{#4}#5 } @@ -15531,18 +15684,19 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs_new:Npn \__fp_decimate_pack:nnnnnnw #1 #2#3#4#5#6 { {#1} {#2#3#4#5#6} } \cs_new:Npn \__fp_case_use:nw #1#2 \fi: #3 \s__fp { \fi: #1 \s__fp } -\cs_new:Npn \__fp_case_return:nw #1#2 \fi: #3 ; { \fi: #1 } -\cs_new:Npn \__fp_case_return_o:Nw #1#2 \fi: #3 \s__fp #4 ; +\cs_new:Npn \__fp_case_return:nw #1#2 \fi: #3 \__fp_sep: { \fi: #1 } +\cs_new:Npn \__fp_case_return_o:Nw #1#2 \fi: #3 \s__fp #4 \__fp_sep: { \fi: \exp_after:wN #1 } \cs_new:Npn \__fp_case_return_same_o:w #1 \fi: #2 \s__fp { \fi: \__fp_exp_after_o:w \s__fp } -\cs_new:Npn \__fp_case_return_o:Nww #1#2 \fi: #3 \s__fp #4 ; #5 ; +\cs_new:Npn \__fp_case_return_o:Nww #1#2 \fi: #3 \s__fp #4 \__fp_sep: #5 \__fp_sep: { \fi: \exp_after:wN #1 } -\cs_new:Npn \__fp_case_return_i_o:ww #1 \fi: #2 \s__fp #3 ; \s__fp #4 ; - { \fi: \__fp_exp_after_o:w \s__fp #3 ; } -\cs_new:Npn \__fp_case_return_ii_o:ww #1 \fi: #2 \s__fp #3 ; +\cs_new:Npn \__fp_case_return_i_o:ww + #1 \fi: #2 \s__fp #3 \__fp_sep: \s__fp #4 \__fp_sep: + { \fi: \__fp_exp_after_o:w \s__fp #3 \__fp_sep: } +\cs_new:Npn \__fp_case_return_ii_o:ww #1 \fi: #2 \s__fp #3 \__fp_sep: { \fi: \__fp_exp_after_o:w } -\prg_new_conditional:Npnn \__fp_int:w \s__fp \__fp_chk:w #1 #2 #3 #4; +\prg_new_conditional:Npnn \__fp_int:w \s__fp \__fp_chk:w #1 #2 #3 #4\__fp_sep: { TF , T , F , p } { \if_case:w #1 \exp_stop_f: @@ -15561,26 +15715,26 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs_new:Npn \__fp_small_int:wTF \s__fp \__fp_chk:w #1#2 { \if_case:w #1 \exp_stop_f: - \__fp_case_return:nw { \__fp_small_int_true:wTF 0 ; } + \__fp_case_return:nw { \__fp_small_int_true:wTF 0 \__fp_sep: } \or: \exp_after:wN \__fp_small_int_normal:NnwTF \or: \__fp_case_return:nw { \exp_after:wN \__fp_small_int_true:wTF \int_value:w - \if_meaning:w 2 #2 - \fi: 1 0000 0000 ; + \if_meaning:w 2 #2 - \fi: 1 0000 0000 \__fp_sep: } \else: \__fp_case_return:nw \use_ii:nn \fi: #2 } -\cs_new:Npn \__fp_small_int_true:wTF #1; #2#3 { #2 {#1} } -\cs_new:Npn \__fp_small_int_normal:NnwTF #1#2#3; +\cs_new:Npn \__fp_small_int_true:wTF #1\__fp_sep: #2#3 { #2 {#1} } +\cs_new:Npn \__fp_small_int_normal:NnwTF #1#2#3\__fp_sep: { \__fp_decimate:nNnnnn { \c__fp_prec_int - #2 } \__fp_small_int_test:NnnwNw #3 #1 } -\cs_new:Npn \__fp_small_int_test:NnnwNw #1#2#3#4; #5 +\cs_new:Npn \__fp_small_int_test:NnnwNw #1#2#3#4\__fp_sep: #5 { \if_meaning:w 0 #1 \exp_after:wN \__fp_small_int_true:wTF @@ -15590,7 +15744,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \else: #3 \fi: - \exp_after:wN ; + \exp_after:wN \__fp_sep: \else: \exp_after:wN \use_ii:nn \fi: @@ -15646,19 +15800,21 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs_new_protected:Npn \__fp_trap_invalid_operation_set:N #1 { \exp_args:Nno \use:n - { \cs_set:Npn \__fp_invalid_operation:nnw ##1##2##3; } + { \cs_set:Npn \__fp_invalid_operation:nnw ##1##2##3\__fp_sep: } { #1 - \__fp_error:nnfn { invalid } {##2} { \fp_to_tl:n { ##3; } } { } + \__fp_error:nnfn { invalid } {##2} { \fp_to_tl:n { ##3\__fp_sep: } } { } \flag_ensure_raised:N \l_fp_invalid_operation_flag ##1 } \exp_args:Nno \use:n - { \cs_set:Npn \__fp_invalid_operation_o:Nww ##1##2; ##3; } + { \cs_set:Npn \__fp_invalid_operation_o:Nww ##1##2\__fp_sep: ##3\__fp_sep: } { #1 \__fp_error:nffn { invalid-ii } - { \fp_to_tl:n { ##2; } } { \fp_to_tl:n { ##3; } } {##1} + { \fp_to_tl:n { ##2\__fp_sep: } } + { \fp_to_tl:n { ##3\__fp_sep: } } + {##1} \flag_ensure_raised:N \l_fp_invalid_operation_flag \exp_after:wN \c_nan_fp } @@ -15680,19 +15836,23 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs_new_protected:Npn \__fp_trap_division_by_zero_set:N #1 { \exp_args:Nno \use:n - { \cs_set:Npn \__fp_division_by_zero_o:Nnw ##1##2##3; } + { \cs_set:Npn \__fp_division_by_zero_o:Nnw ##1##2##3\__fp_sep: } { #1 - \__fp_error:nnfn { zero-div } {##2} { \fp_to_tl:n { ##3; } } { } + \__fp_error:nnfn { zero-div } {##2} { \fp_to_tl:n { ##3\__fp_sep: } } { } \flag_ensure_raised:N \l_fp_division_by_zero_flag \exp_after:wN ##1 } \exp_args:Nno \use:n - { \cs_set:Npn \__fp_division_by_zero_o:NNww ##1##2##3; ##4; } + { + \cs_set:Npn \__fp_division_by_zero_o:NNww ##1##2##3\__fp_sep: ##4\__fp_sep: + } { #1 \__fp_error:nffn { zero-div-ii } - { \fp_to_tl:n { ##3; } } { \fp_to_tl:n { ##4; } } {##2} + { \fp_to_tl:n { ##3\__fp_sep: } } + { \fp_to_tl:n { ##4\__fp_sep: } } + {##2} \flag_ensure_raised:N \l_fp_division_by_zero_flag \exp_after:wN ##1 } @@ -15716,23 +15876,23 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs_new_protected:Npn \__fp_trap_overflow_set:NnNn #1#2#3#4 { \exp_args:Nno \use:n - { \cs_set:cpn { __fp_ #2 :w } \s__fp \__fp_chk:w ##1##2##3; } + { \cs_set:cpn { __fp_ #2 :w } \s__fp \__fp_chk:w ##1##2##3\__fp_sep: } { #1 \__fp_error:nffn { flow \if_meaning:w 1 ##1 -to \fi: } - { \fp_to_tl:n { \s__fp \__fp_chk:w ##1##2##3; } } + { \fp_to_tl:n { \s__fp \__fp_chk:w ##1##2##3\__fp_sep: } } { \token_if_eq_meaning:NNF 0 ##2 { - } #4 } {#2} \flag_ensure_raised:c { l_fp_#2_flag } #3 ##2 } } -\cs_new:Npn \__fp_invalid_operation:nnw #1#2#3; { } -\cs_new:Npn \__fp_invalid_operation_o:Nww #1#2; #3; { } +\cs_new:Npn \__fp_invalid_operation:nnw #1#2#3\__fp_sep: { } +\cs_new:Npn \__fp_invalid_operation_o:Nww #1#2\__fp_sep: #3\__fp_sep: { } \cs_new:Npn \__fp_invalid_operation_tl_o:ff #1 #2 { } -\cs_new:Npn \__fp_division_by_zero_o:Nnw #1#2#3; { } -\cs_new:Npn \__fp_division_by_zero_o:NNww #1#2#3; #4; { } +\cs_new:Npn \__fp_division_by_zero_o:Nnw #1#2#3\__fp_sep: { } +\cs_new:Npn \__fp_division_by_zero_o:NNww #1#2#3\__fp_sep: #4\__fp_sep: { } \cs_new:Npn \__fp_overflow:w { } \cs_new:Npn \__fp_underflow:w { } \fp_trap:nn { invalid_operation } { error } @@ -15870,7 +16030,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \c_zero_int } \cs_new_eq:NN \__fp_round:NNN \__fp_round_to_nearest:NNN -\cs_new:Npn \__fp_round_s:NNNw #1 #2 #3 #4; +\cs_new:Npn \__fp_round_s:NNNw #1 #2 #3 #4\__fp_sep: { \exp_after:wN \__fp_round:NNN \exp_after:wN #1 @@ -15884,9 +16044,9 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: \fi: #3 - ; + \__fp_sep: } -\cs_new:Npn \__fp_round_digit:Nw #1 #2; +\cs_new:Npn \__fp_round_digit:Nw #1 #2\__fp_sep: { \if_int_odd:w \if_meaning:w 0 #1 1 \else: \if_meaning:w 5 #1 1 \else: @@ -15946,7 +16106,8 @@ Type H <return> for immediate help}\def~{\errmessage{% } \exp_after:wN \c_nan_fp } -\cs_new:Npn \__fp_round:Nwww #1#2 ; #3 ; \s__fp \__fp_chk:w #4#5#6 ; #7 @ +\cs_new:Npn \__fp_round:Nwww + #1#2 \__fp_sep: #3 \__fp_sep: \s__fp \__fp_chk:w #4#5#6 \__fp_sep: #7 @ { \cs_if_eq:NNTF #1 \__fp_round_to_nearest:NNN { @@ -15959,7 +16120,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \if_case:w #5 \exp_stop_f: _pinf \or: \else: _ninf \fi: \fi: :NNN } - #2 ; #3 ; + #2 \__fp_sep: #3 \__fp_sep: } { \__fp_error:nnnn { num-args } { round () } { 1 } { 3 } @@ -15983,11 +16144,11 @@ Type H <return> for immediate help}\def~{\errmessage{% } } } -\cs_new:Npn \__fp_round:Nww #1#2 ; #3 ; +\cs_new:Npn \__fp_round:Nww #1#2 \__fp_sep: #3 \__fp_sep: { - \__fp_small_int:wTF #3; { \__fp_round:Nwn #1#2; } + \__fp_small_int:wTF #3\__fp_sep: { \__fp_round:Nwn #1#2\__fp_sep: } { - \if:w 3 \__fp_kind:w #3 ; + \if:w 3 \__fp_kind:w #3 \__fp_sep: \exp_after:wN \use_i:nn \else: \exp_after:wN \use_ii:nn @@ -15996,11 +16157,11 @@ Type H <return> for immediate help}\def~{\errmessage{% { \__fp_invalid_operation_tl_o:ff { \__fp_round_name_from_cs:N #1 } - { \__fp_array_to_clist:n { #2; #3; } } + { \__fp_array_to_clist:n { #2\__fp_sep: #3\__fp_sep: } } } } } -\cs_new:Npn \__fp_round:Nwn #1 \s__fp \__fp_chk:w #2#3#4; #5 +\cs_new:Npn \__fp_round:Nwn #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: #5 { \if_meaning:w 1 #2 \exp_after:wN \__fp_round_normal:NwNNnw @@ -16009,14 +16170,14 @@ Type H <return> for immediate help}\def~{\errmessage{% \else: \exp_after:wN \__fp_exp_after_o:w \fi: - \s__fp \__fp_chk:w #2#3#4; + \s__fp \__fp_chk:w #2#3#4\__fp_sep: } -\cs_new:Npn \__fp_round_normal:NwNNnw #1#2 \s__fp \__fp_chk:w 1#3#4#5; +\cs_new:Npn \__fp_round_normal:NwNNnw #1#2 \s__fp \__fp_chk:w 1#3#4#5\__fp_sep: { \__fp_decimate:nNnnnn { \c__fp_prec_int - #4 - #2 } \__fp_round_normal:NnnwNNnn #5 #1 #3 {#4} {#2} } -\cs_new:Npn \__fp_round_normal:NnnwNNnn #1#2#3#4; #5#6 +\cs_new:Npn \__fp_round_normal:NnnwNNnn #1#2#3#4\__fp_sep: #5#6 { \exp_after:wN \__fp_round_normal:NNwNnn \int_value:w \__fp_int_eval:w @@ -16034,7 +16195,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \use_none:nnnnnnn #3 #1 \__fp_int_eval_end: - 0000 0000 0000 0000 ; #6 + 0000 0000 0000 0000 \__fp_sep: #6 } \cs_new:Npn \__fp_round_pack:Nw #1 { \if_meaning:w 2 #1 + 1 \fi: \__fp_int_eval_end: } @@ -16047,14 +16208,14 @@ Type H <return> for immediate help}\def~{\errmessage{% \__fp_pack_twice_four:wNNNNNNNN \__fp_pack_twice_four:wNNNNNNNN \__fp_round_normal_end:wwNnn - ; #2 + \__fp_sep: #2 } -\cs_new:Npn \__fp_round_normal_end:wwNnn #1;#2;#3#4#5 +\cs_new:Npn \__fp_round_normal_end:wwNnn #1\__fp_sep:#2\__fp_sep:#3#4#5 { \exp_after:wN \__fp_exp_after_o:w \exp:w \exp_end_continue_f:w - \__fp_sanitize:Nw #3 #4 ; #1 ; + \__fp_sanitize:Nw #3 #4 \__fp_sep: #1 \__fp_sep: } -\cs_new:Npn \__fp_round_special:NwwNnn #1#2;#3;#4#5#6 +\cs_new:Npn \__fp_round_special:NwwNnn #1#2\__fp_sep:#3\__fp_sep:#4#5#6 { \if_meaning:w 0 #1 \__fp_case_return:nw @@ -16065,12 +16226,12 @@ Type H <return> for immediate help}\def~{\errmessage{% \int_value:w \__fp_int_eval:w 1 \if_meaning:w 1 #1 -#6 \else: +#5 \fi: \fi: - ; + \__fp_sep: } -\cs_new:Npn \__fp_round_special_aux:Nw #1#2; +\cs_new:Npn \__fp_round_special_aux:Nw #1#2\__fp_sep: { \exp_after:wN \__fp_exp_after_o:w \exp:w \exp_end_continue_f:w - \__fp_sanitize:Nw #1#2; {1000}{0000}{0000}{0000}; + \__fp_sanitize:Nw #1#2\__fp_sep: {1000}{0000}{0000}{0000}\__fp_sep: } %% File: l3fp-parse.dtx \int_const:Nn \c__fp_prec_func_int { 16 } @@ -16090,7 +16251,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \int_const:Nn \c__fp_prec_end_int { 0 } \cs_new:Npn \__fp_parse_expand:w #1 { \exp_end_continue_f:w #1 } \cs_new:Npn \__fp_parse_return_semicolon:w - #1 \fi: \__fp_parse_expand:w { \fi: ; #1 } + #1 \fi: \__fp_parse_expand:w { \fi: \__fp_sep: #1 } \cs_set_protected:Npn \__fp_tmp:w #1 #2 #3 { \cs_new:cpn { __fp_parse_digits_ #1 :N } ##1 @@ -16103,14 +16264,14 @@ Type H <return> for immediate help}\def~{\errmessage{% \__fp_parse_expand:w } } -\__fp_tmp:w {vii} \__fp_parse_digits_vi:N { 0000000 ; 7 } -\__fp_tmp:w {vi} \__fp_parse_digits_v:N { 000000 ; 6 } -\__fp_tmp:w {v} \__fp_parse_digits_iv:N { 00000 ; 5 } -\__fp_tmp:w {iv} \__fp_parse_digits_iii:N { 0000 ; 4 } -\__fp_tmp:w {iii} \__fp_parse_digits_ii:N { 000 ; 3 } -\__fp_tmp:w {ii} \__fp_parse_digits_i:N { 00 ; 2 } -\__fp_tmp:w {i} \__fp_parse_digits_:N { 0 ; 1 } -\cs_new:Npn \__fp_parse_digits_:N { ; ; 0 } +\__fp_tmp:w {vii} \__fp_parse_digits_vi:N { 0000000 \__fp_sep: 7 } +\__fp_tmp:w {vi} \__fp_parse_digits_v:N { 000000 \__fp_sep: 6 } +\__fp_tmp:w {v} \__fp_parse_digits_iv:N { 00000 \__fp_sep: 5 } +\__fp_tmp:w {iv} \__fp_parse_digits_iii:N { 0000 \__fp_sep: 4 } +\__fp_tmp:w {iii} \__fp_parse_digits_ii:N { 000 \__fp_sep: 3 } +\__fp_tmp:w {ii} \__fp_parse_digits_i:N { 00 \__fp_sep: 2 } +\__fp_tmp:w {i} \__fp_parse_digits_:N { 0 \__fp_sep: 1 } +\cs_new:Npn \__fp_parse_digits_:N { \__fp_sep: \__fp_sep: 0 } \cs_new:Npn \__fp_parse_one:Nw #1 #2 { \if_catcode:w \scan_stop: \exp_not:N #2 @@ -16210,26 +16371,26 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_parse_one_register_auxii:wwwNw } \exp_not:N \exp_after:wN { \exp_not:N \tex_the:D #1 } - ; \exp_not:N \__fp_parse_one_register_dim:ww - \tl_to_str:n { pt } ; \exp_not:N \__fp_parse_one_register_mu:www - . \tl_to_str:n { pt } ; \exp_not:N \__fp_parse_one_register_int:www + \__fp_sep: \exp_not:N \__fp_parse_one_register_dim:ww + \tl_to_str:n { pt } \__fp_sep: \exp_not:N \__fp_parse_one_register_mu:www + . \tl_to_str:n { pt } \__fp_sep: \exp_not:N \__fp_parse_one_register_int:www \s__fp_stop } \exp_args:Nno \use:nn { \cs_new:Npn \__fp_parse_one_register_auxii:wwwNw #1 . #2 } - { \tl_to_str:n { pt } #3 ; #4#5 \s__fp_stop } - { #4 #1.#2; } + { \tl_to_str:n { pt } #3 \__fp_sep: #4#5 \s__fp_stop } + { #4 #1.#2\__fp_sep: } \exp_args:Nno \use:nn { \cs_new:Npn \__fp_parse_one_register_mu:www #1 } - { \tl_to_str:n { mu } ; #2 ; } - { \__fp_parse_one_register_dim:ww #1 ; } -\cs_new:Npn \__fp_parse_one_register_int:www #1; #2.; #3; + { \tl_to_str:n { mu } \__fp_sep: #2 \__fp_sep: } + { \__fp_parse_one_register_dim:ww #1 \__fp_sep: } +\cs_new:Npn \__fp_parse_one_register_int:www #1\__fp_sep: #2.\__fp_sep: #3\__fp_sep: { \__fp_parse:n { #1 e #3 } } -\cs_new:Npn \__fp_parse_one_register_dim:ww #1; #2; +\cs_new:Npn \__fp_parse_one_register_dim:ww #1\__fp_sep: #2\__fp_sep: { \exp_after:wN \__fp_from_dim_test:ww \int_value:w #2 \exp_after:wN , - \int_value:w \dim_to_decimal_in_sp:n { #1 pt } ; + \int_value:w \dim_to_decimal_in_sp:n { #1 pt } \__fp_sep: } \cs_new:Npn \__fp_parse_one_register_special:N #1 { @@ -16262,11 +16423,11 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_parse_one_register_wd:Nw #4 \__fp_parse_expand:w e } -\cs_new:Npn \__fp_parse_one_register_wd:Nw #1#2 ; +\cs_new:Npn \__fp_parse_one_register_wd:Nw #1#2 \__fp_sep: { \exp_after:wN \__fp_from_dim_test:ww \exp_after:wN 0 \exp_after:wN , - \int_value:w \dim_to_decimal_in_sp:n { #1 #2 } ; + \int_value:w \dim_to_decimal_in_sp:n { #1 #2 } \__fp_sep: } \cs_new:Npn \__fp_parse_one_digit:NN #1 { @@ -16299,7 +16460,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: \__fp_parse_expand:w } -\cs_new:Npn \__fp_parse_word:Nw #1#2; +\cs_new:Npn \__fp_parse_word:Nw #1#2\__fp_sep: { \cs_if_exist_use:cF { __fp_parse_word_#2:N } { @@ -16404,7 +16565,7 @@ Type H <return> for immediate help}\def~{\errmessage{% } \cs_new:Npn \__fp_parse_zero: { - \exp_after:wN ; \exp_after:wN 1 + \exp_after:wN \__fp_sep: \exp_after:wN 1 \int_value:w \__fp_parse_exponent:N } \cs_new:Npn \__fp_parse_small:N #1 @@ -16416,7 +16577,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_parse_digits_vii:N \exp:w \__fp_parse_expand:w } -\cs_new:Npn \__fp_parse_small_leading:wwNN 1 #1 ; #2; #3 #4 +\cs_new:Npn \__fp_parse_small_leading:wwNN 1 #1 \__fp_sep: #2\__fp_sep: #3 #4 { #1 #2 \exp_after:wN \__fp_parse_pack_trailing:NNNNNNww @@ -16433,7 +16594,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: \__fp_parse_expand:w } -\cs_new:Npn \__fp_parse_small_trailing:wwNN 1 #1 ; #2; #3 #4 +\cs_new:Npn \__fp_parse_small_trailing:wwNN 1 #1 \__fp_sep: #2\__fp_sep: #3 #4 { #1 #2 \if_int_compare:w 9 < 1 \token_to_str:N #4 \exp_stop_f: @@ -16446,19 +16607,20 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: \__fp_parse_expand:w } -\cs_new:Npn \__fp_parse_pack_trailing:NNNNNNww #1 #2 #3#4#5#6 #7; #8 ; +\cs_new:Npn \__fp_parse_pack_trailing:NNNNNNww + #1 #2 #3#4#5#6 #7\__fp_sep: #8 \__fp_sep: { \if_meaning:w 2 #2 + 1 \fi: - ; #8 + #1 ; {#3#4#5#6} {#7}; + \__fp_sep: #8 + #1 \__fp_sep: {#3#4#5#6} {#7}\__fp_sep: } -\cs_new:Npn \__fp_parse_pack_leading:NNNNNww #1 #2#3#4#5 #6; #7; +\cs_new:Npn \__fp_parse_pack_leading:NNNNNww #1 #2#3#4#5 #6\__fp_sep: #7\__fp_sep: { + #7 \if_meaning:w 2 #1 \__fp_parse_pack_carry:w \fi: - ; 0 {#2#3#4#5} {#6} + \__fp_sep: 0 {#2#3#4#5} {#6} } -\cs_new:Npn \__fp_parse_pack_carry:w \fi: ; 0 #1 - { \fi: + 1 ; 0 {1000} } +\cs_new:Npn \__fp_parse_pack_carry:w \fi: \__fp_sep: 0 #1 + { \fi: + 1 \__fp_sep: 0 {1000} } \cs_new:Npn \__fp_parse_large:N #1 { \exp_after:wN \__fp_parse_large_leading:wwNN @@ -16466,7 +16628,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_parse_digits_vii:N \exp:w \__fp_parse_expand:w } -\cs_new:Npn \__fp_parse_large_leading:wwNN 1 #1 ; #2; #3 #4 +\cs_new:Npn \__fp_parse_large_leading:wwNN 1 #1 \__fp_sep: #2\__fp_sep: #3 #4 { + \c__fp_half_prec_int - #3 \exp_after:wN \__fp_parse_pack_leading:NNNNNww @@ -16496,7 +16658,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: \__fp_parse_expand:w } -\cs_new:Npn \__fp_parse_large_trailing:wwNN 1 #1 ; #2; #3 #4 +\cs_new:Npn \__fp_parse_large_trailing:wwNN 1 #1 \__fp_sep: #2\__fp_sep: #3 #4 { \if_int_compare:w 9 < 1 \token_to_str:N #4 \exp_stop_f: \exp_after:wN \__fp_parse_pack_trailing:NNNNNNww @@ -16551,9 +16713,9 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: \__fp_parse_expand:w } -\cs_new:Npn \__fp_parse_round_after:wN #1; #2 +\cs_new:Npn \__fp_parse_round_after:wN #1\__fp_sep: #2 { - + #2 \exp_after:wN ; + + #2 \exp_after:wN \__fp_sep: \int_value:w \__fp_int_eval:w #1 + \__fp_parse_exponent:N } \cs_new:Npn \__fp_parse_small_round:NN #1#2 @@ -16603,7 +16765,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: \__fp_parse_expand:w } -\cs_new:Npn \__fp_parse_large_round_aux:wNN #1 ; #2 #3 +\cs_new:Npn \__fp_parse_large_round_aux:wNN #1 \__fp_sep: #2 #3 { + #2 \exp_after:wN \__fp_parse_round_after:wN @@ -16613,14 +16775,14 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_parse_round_loop:N \exp:w \exp_after:wN \__fp_parse_expand:w \else: - \exp_after:wN ; + \exp_after:wN \__fp_sep: \exp_after:wN 0 \exp_after:wN #3 \fi: } \cs_new:Npn \__fp_parse_exponent:Nw #1 #2 \__fp_parse_expand:w { - \exp_after:wN ; + \exp_after:wN \__fp_sep: \int_value:w #2 \__fp_parse_exponent:N #1 } \cs_new:Npn \__fp_parse_exponent:N #1 @@ -16638,7 +16800,7 @@ Type H <return> for immediate help}\def~{\errmessage{% { \if_int_compare:w \if_catcode:w \scan_stop: \exp_not:N #2 0 \else: `#2 \fi: > `9 \exp_stop_f: - 0 \exp_after:wN ; \exp_after:wN #1 + 0 \exp_after:wN \__fp_sep: \exp_after:wN #1 \else: \exp_after:wN \__fp_parse_exponent_sign:N \fi: @@ -16664,7 +16826,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \__fp_parse_exponent_keep:NTF #1 { \__fp_parse_return_semicolon:w #1 } { - \exp_after:wN ; + \exp_after:wN \__fp_sep: \exp:w } \fi: @@ -16721,12 +16883,12 @@ Type H <return> for immediate help}\def~{\errmessage{% } \cs_new:Npn \__fp_parse_apply_unary:NNNwN #1#2#3#4@#5 { - \__fp_parse_apply_unary_chk:NwNw #4 @ ; . \s__fp_stop + \__fp_parse_apply_unary_chk:NwNw #4 @ \__fp_sep: . \s__fp_stop \__fp_parse_apply_unary_type:NNN #3 #2 #4 @ \exp:w \exp_end_continue_f:w #5 #1 } -\cs_new:Npn \__fp_parse_apply_unary_chk:NwNw #1#2 ; #3#4 \s__fp_stop +\cs_new:Npn \__fp_parse_apply_unary_chk:NwNw #1#2 \__fp_sep: #3#4 \s__fp_stop { \if_meaning:w @ #3 \else: \token_if_eq_meaning:NNTF . #3 @@ -16840,7 +17002,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs_new:cpn { __fp_parse_word_#1:N } { \__fp_exp_after_f:nw { \__fp_parse_infix:NN } - \s__fp \__fp_chk:w 10 #2 ; + \s__fp \__fp_chk:w 10 #2 \__fp_sep: } } \__fp_tmp:w {pt} { {1} {1000} {0000} {0000} {0000} } @@ -16860,7 +17022,7 @@ Type H <return> for immediate help}\def~{\errmessage{% { \exp_after:wN \__fp_from_dim_test:ww \exp_after:wN 0 \exp_after:wN , - \int_value:w \dim_to_decimal_in_sp:n { 1 #1 } \exp_after:wN ; + \int_value:w \dim_to_decimal_in_sp:n { 1 #1 } \exp_after:wN \__fp_sep: \exp:w \exp_end_continue_f:w \__fp_parse_infix:NN } } @@ -16949,7 +17111,7 @@ Type H <return> for immediate help}\def~{\errmessage{% #2 \__fp_invalid_operation_o:Nww #1 } -\cs_new:Npn \__fp_binary_type_o:Nww #1 #2#3 ; #4 +\cs_new:Npn \__fp_binary_type_o:Nww #1 #2#3 \__fp_sep: #4 { \exp_after:wN \__fp_parse_apply_binary_chk:NN \cs:w @@ -16960,9 +17122,9 @@ Type H <return> for immediate help}\def~{\errmessage{% _o:ww \cs_end: #1 - #2 #3 ; #4 + #2 #3 \__fp_sep: #4 } -\cs_new:Npn \__fp_binary_rev_type_o:Nww #1 #2#3 ; #4#5 ; +\cs_new:Npn \__fp_binary_rev_type_o:Nww #1 #2#3 \__fp_sep: #4#5 \__fp_sep: { \exp_after:wN \__fp_parse_apply_binary_chk:NN \cs:w @@ -16973,12 +17135,12 @@ Type H <return> for immediate help}\def~{\errmessage{% _o:ww \cs_end: #1 - #4 #5 ; #2 #3 ; + #4 #5 \__fp_sep: #2 #3 \__fp_sep: } -\cs_new:Npn \__fp_parse_infix_after_operand:NwN #1 #2; +\cs_new:Npn \__fp_parse_infix_after_operand:NwN #1 #2\__fp_sep: { \__fp_exp_after_f:nw { \__fp_parse_infix:NN #1 } - #2; + #2\__fp_sep: } \cs_new:Npn \__fp_parse_infix:NN #1 #2 { @@ -17102,7 +17264,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN #1 \exp:w \exp_end_continue_f:w \__fp_exp_after_tuple_f:nw { } - \s__fp_tuple \__fp_tuple_chk:w { #2 #4 } ; + \s__fp_tuple \__fp_tuple_chk:w { #2 #4 } \__fp_sep: #5 #1 } \cs_set_protected:Npn \__fp_tmp:w #1#2#3#4 @@ -17287,14 +17449,14 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: #1 #8 #9 } -\cs_new:Npn \__fp_parse_apply_compare_aux:NNwN #1 #2 #3; #4 +\cs_new:Npn \__fp_parse_apply_compare_aux:NNwN #1 #2 #3\__fp_sep: #4 { \if_meaning:w \__fp_parse_compare:NNNNNNN #4 \exp_after:wN \__fp_parse_continue_compare:NNwNN \exp_after:wN #1 \exp_after:wN #2 \exp:w \exp_end_continue_f:w - \__fp_exp_after_o:w #3; + \__fp_exp_after_o:w #3\__fp_sep: \exp:w \exp_end_continue_f:w \else: \exp_after:wN \__fp_parse_continue:NwN @@ -17314,7 +17476,7 @@ Type H <return> for immediate help}\def~{\errmessage{% { \__fp_error:nffn { bad-args } {#1} - { \fp_to_tl:n { \s__fp_tuple \__fp_tuple_chk:w {#3} ; } } + { \fp_to_tl:n { \s__fp_tuple \__fp_tuple_chk:w {#3} \__fp_sep: } } { } \exp_after:wN \c_nan_fp } @@ -17329,11 +17491,11 @@ Type H <return> for immediate help}\def~{\errmessage{% { \__fp_error:nffn { bad-args } {#2} - { \fp_to_tl:n { \s__fp_tuple \__fp_tuple_chk:w {#4} ; } } + { \fp_to_tl:n { \s__fp_tuple \__fp_tuple_chk:w {#4} \__fp_sep: } } { } \exp_after:wN \c_nan_fp } -\cs_new:Npn \__fp_parse_function_one_two_aux:nnw #1#2 #3; #4 +\cs_new:Npn \__fp_parse_function_one_two_aux:nnw #1#2 #3\__fp_sep: #4 { \__fp_if_type_fp:NTwFw #4 { } @@ -17345,52 +17507,52 @@ Type H <return> for immediate help}\def~{\errmessage{% \__fp_parse_function_one_two_error_o:w } \s__fp_stop - \__fp_parse_function_one_two_auxii:nnw {#1} {#2} #3; #4 + \__fp_parse_function_one_two_auxii:nnw {#1} {#2} #3\__fp_sep: #4 } -\cs_new:Npn \__fp_parse_function_one_two_auxii:nnw #1#2#3; #4; #5 +\cs_new:Npn \__fp_parse_function_one_two_auxii:nnw #1#2#3\__fp_sep: #4\__fp_sep: #5 { \if_meaning:w @ #5 \else: \exp_after:wN \__fp_parse_function_one_two_error_o:w \fi: - \use_ii:nn {#1} { \use_none:n #2 } #3; #4; #5 + \use_ii:nn {#1} { \use_none:n #2 } #3\__fp_sep: #4\__fp_sep: #5 } -\cs_new:Npn \__fp_tuple_map_o:nw #1 \s__fp_tuple \__fp_tuple_chk:w #2 ; +\cs_new:Npn \__fp_tuple_map_o:nw #1 \s__fp_tuple \__fp_tuple_chk:w #2 \__fp_sep: { \exp_after:wN \s__fp_tuple \exp_after:wN \__fp_tuple_chk:w \exp_after:wN { \exp:w \exp_end_continue_f:w \__fp_tuple_map_loop_o:nw {#1} #2 - { \s__fp \prg_break: } ; + { \s__fp \prg_break: } \__fp_sep: \prg_break_point: - \exp_after:wN } \exp_after:wN ; + \exp_after:wN } \exp_after:wN \__fp_sep: } -\cs_new:Npn \__fp_tuple_map_loop_o:nw #1#2#3 ; +\cs_new:Npn \__fp_tuple_map_loop_o:nw #1#2#3 \__fp_sep: { \use_none:n #2 - #1 #2 #3 ; + #1 #2 #3 \__fp_sep: \exp:w \exp_end_continue_f:w \__fp_tuple_map_loop_o:nw {#1} } \cs_new:Npn \__fp_tuple_mapthread_o:nww #1 - \s__fp_tuple \__fp_tuple_chk:w #2 ; - \s__fp_tuple \__fp_tuple_chk:w #3 ; + \s__fp_tuple \__fp_tuple_chk:w #2 \__fp_sep: + \s__fp_tuple \__fp_tuple_chk:w #3 \__fp_sep: { \exp_after:wN \s__fp_tuple \exp_after:wN \__fp_tuple_chk:w \exp_after:wN { \exp:w \exp_end_continue_f:w \__fp_tuple_mapthread_loop_o:nw {#1} - #2 { \s__fp \prg_break: } ; @ - #3 { \s__fp \prg_break: } ; + #2 { \s__fp \prg_break: } \__fp_sep: @ + #3 { \s__fp \prg_break: } \__fp_sep: \prg_break_point: - \exp_after:wN } \exp_after:wN ; + \exp_after:wN } \exp_after:wN \__fp_sep: } -\cs_new:Npn \__fp_tuple_mapthread_loop_o:nw #1#2#3 ; #4 @ #5#6 ; +\cs_new:Npn \__fp_tuple_mapthread_loop_o:nw #1#2#3 \__fp_sep: #4 @ #5#6 \__fp_sep: { \use_none:n #2 \use_none:n #5 - #1 #2 #3 ; #5 #6 ; + #1 #2 #3 \__fp_sep: #5 #6 \__fp_sep: \exp:w \exp_end_continue_f:w \__fp_tuple_mapthread_loop_o:nw {#1} #4 @ } @@ -17437,8 +17599,8 @@ Type H <return> for immediate help}\def~{\errmessage{% { \__kernel_tl_gset:Nx #1 { \exp_not:f { \__fp_parse:n {#2} } } } \cs_new_protected:Npn \fp_const:Nn #1#2 { \tl_const:Ne #1 { \exp_not:f { \__fp_parse:n {#2} } } } -\cs_generate_variant:Nn \fp_set:Nn {c} -\cs_generate_variant:Nn \fp_gset:Nn {c} +\cs_generate_variant:Nn \fp_set:Nn { NV , c , cV } +\cs_generate_variant:Nn \fp_gset:Nn { NV , c , cV } \cs_generate_variant:Nn \fp_const:Nn {c} \cs_new_eq:NN \fp_set_eq:NN \tl_set_eq:NN \cs_new_eq:NN \fp_gset_eq:NN \tl_gset_eq:NN @@ -17478,9 +17640,9 @@ Type H <return> for immediate help}\def~{\errmessage{% { \__fp_show_validate:nn { #1 } { - \s__fp \__fp_chk:w ??? ;~ or \iow_newline: - \s__fp_tuple \__fp_tuple_chk:w ? ;~ or \iow_newline: - \s__fp_symbolic \__fp_symbolic_chk:w ? , ? ; + \s__fp \__fp_chk:w ??? \__fp_sep: or \iow_newline: + \s__fp_tuple \__fp_tuple_chk:w ? \__fp_sep: or \iow_newline: + \s__fp_symbolic \__fp_symbolic_chk:w ? , ? \__fp_sep: } } \cs_new:Npn \__fp_show_validate_aux:n #1 @@ -17496,46 +17658,49 @@ Type H <return> for immediate help}\def~{\errmessage{% { \s__fp } { \__fp_show_validate:w #1 \s__fp - \__fp_chk:w ??? ; \s__fp_stop + \__fp_chk:w ??? \__fp_sep: \s__fp_stop } { \s__fp_tuple } { \__fp_tuple_show_validate:w #1 - \s__fp_tuple \__fp_tuple_chk:w ?? ; \s__fp_stop + \s__fp_tuple \__fp_tuple_chk:w ?? \__fp_sep: \s__fp_stop } { \s__fp_symbolic } { \__fp_symbolic_show_validate:w #1 - \s__fp_symbolic \__fp_symbolic_chk:w ? , ?? ; \s__fp_stop + \s__fp_symbolic \__fp_symbolic_chk:w ? , ?? \__fp_sep: \s__fp_stop } } { #2 } } } \cs_new:Npn \__fp_show_validate:w - #1 \s__fp \__fp_chk:w #2#3#4#5 ; #6 \s__fp_stop + #1 \s__fp \__fp_chk:w #2#3#4#5 \__fp_sep: #6 \s__fp_stop { \str_if_eq:nnF { #2 } {?} { \token_if_eq_meaning:NNTF #2 1 - { \s__fp \__fp_chk:w #2 #3 { #4 } #5 ; } - { \s__fp \__fp_chk:w #2 #3 #4 #5 ; } + { \s__fp \__fp_chk:w #2 #3 { #4 } #5 \__fp_sep: } + { \s__fp \__fp_chk:w #2 #3 #4 #5 \__fp_sep: } \__fp_show_validate_aux:n { #6 } } } \cs_new:Npn \__fp_tuple_show_validate:w - #1 \s__fp_tuple \__fp_tuple_chk:w #2#3 ; #4 \s__fp_stop + #1 \s__fp_tuple \__fp_tuple_chk:w #2#3 \__fp_sep: #4 \s__fp_stop { \str_if_eq:nnF { #2 } {?} - { \s__fp_tuple \__fp_tuple_chk:w { \__fp_show_validate_aux:n { #2 } } ; } + { + \s__fp_tuple \__fp_tuple_chk:w { \__fp_show_validate_aux:n { #2 } } + \__fp_sep: + } } \cs_new:Npn \__fp_symbolic_show_validate:w - #1 \s__fp_symbolic \__fp_symbolic_chk:w #2 , #3#4 ; #5 \s__fp_stop + #1 \s__fp_symbolic \__fp_symbolic_chk:w #2 , #3#4 \__fp_sep: #5 \s__fp_stop { \str_if_eq:nnF { #2 } {?} { \s__fp_symbolic \__fp_symbolic_chk:w \exp_not:n { #2 } , - { \__fp_show_validate_aux:n { #3 } }; + { \__fp_show_validate_aux:n { #3 } }\__fp_sep: \__fp_show_validate_aux:n { #5 } } } @@ -17571,7 +17736,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_compare_return:w \exp:w \exp_end_continue_f:w \__fp_parse:n {#1} } -\cs_new:Npn \__fp_compare_return:w #1#2#3; +\cs_new:Npn \__fp_compare_return:w #1#2#3\__fp_sep: { \if_charcode:w 0 \__fp_if_type_fp:NTwFw @@ -17593,12 +17758,12 @@ Type H <return> for immediate help}\def~{\errmessage{% \prg_return_false: \fi: } -\cs_new:Npn \__fp_compare_aux:wn #1; #2 +\cs_new:Npn \__fp_compare_aux:wn #1\__fp_sep: #2 { \exp_after:wN \__fp_compare_back_any:ww - \exp:w \exp_end_continue_f:w \__fp_parse:n {#2} #1; + \exp:w \exp_end_continue_f:w \__fp_parse:n {#2} #1\__fp_sep: } -\cs_new:Npn \__fp_compare_back:ww #1#2; #3#4; +\cs_new:Npn \__fp_compare_back:ww #1#2\__fp_sep: #3#4\__fp_sep: { \cs:w __fp @@ -17607,9 +17772,9 @@ Type H <return> for immediate help}\def~{\errmessage{% \__fp_type_from_scan:N #3 :ww \cs_end: - #1#2; #3#4; + #1#2\__fp_sep: #3#4\__fp_sep: } -\cs_new:Npn \__fp_compare_back_any:ww #1#2; #3 +\cs_new:Npn \__fp_compare_back_any:ww #1#2\__fp_sep: #3 { \__fp_if_type_fp:NTwFw #1 { \__fp_if_type_fp:NTwFw #3 \use_i:nn \s__fp \use_ii:nn \s__fp_stop } @@ -17624,11 +17789,11 @@ Type H <return> for immediate help}\def~{\errmessage{% :ww \cs_end: } - #1#2 ; #3 + #1#2 \__fp_sep: #3 } \cs_new:Npn \__fp_bcmp:ww - \s__fp \__fp_chk:w #1 #2 #3; - \s__fp \__fp_chk:w #4 #5 #6; + \s__fp \__fp_chk:w #1 #2 #3\__fp_sep: + \s__fp \__fp_chk:w #4 #5 #6\__fp_sep: { \int_value:w \if_meaning:w 3 #1 \exp_after:wN \__fp_compare_nan:w \fi: @@ -17637,7 +17802,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \if_meaning:w #2 #5 \if_meaning:w #1 #4 \if_meaning:w 1 #1 - \__fp_compare_npos:nwnw #6; #3; + \__fp_compare_npos:nwnw #6\__fp_sep: #3\__fp_sep: \else: 0 \fi: @@ -17654,36 +17819,36 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_stop_f: } \cs_new:Npn \__fp_compare_nan:w #1 \fi: \exp_stop_f: { 2 \exp_stop_f: } -\cs_new:Npn \__fp_compare_back_tuple:ww #1; #2; { 2 } -\cs_new:Npn \__fp_tuple_compare_back:ww #1; #2; { 2 } +\cs_new:Npn \__fp_compare_back_tuple:ww #1\__fp_sep: #2\__fp_sep: { 2 } +\cs_new:Npn \__fp_tuple_compare_back:ww #1\__fp_sep: #2\__fp_sep: { 2 } \cs_new:Npn \__fp_tuple_compare_back_tuple:ww - \s__fp_tuple \__fp_tuple_chk:w #1; - \s__fp_tuple \__fp_tuple_chk:w #2; + \s__fp_tuple \__fp_tuple_chk:w #1\__fp_sep: + \s__fp_tuple \__fp_tuple_chk:w #2\__fp_sep: { \int_compare:nNnTF { \__fp_array_count:n {#1} } = { \__fp_array_count:n {#2} } { \int_value:w 0 \__fp_tuple_compare_back_loop:w - #1 { \s__fp \prg_break: } ; @ - #2 { \s__fp \prg_break: } ; + #1 { \s__fp \prg_break: } \__fp_sep: @ + #2 { \s__fp \prg_break: } \__fp_sep: \prg_break_point: \exp_stop_f: } { 2 } } -\cs_new:Npn \__fp_tuple_compare_back_loop:w #1#2 ; #3 @ #4#5 ; +\cs_new:Npn \__fp_tuple_compare_back_loop:w #1#2 \__fp_sep: #3 @ #4#5 \__fp_sep: { \use_none:n #1 \use_none:n #4 \if_int_compare:w - \__fp_compare_back_any:ww #1 #2 ; #4 #5 ; = \c_zero_int + \__fp_compare_back_any:ww #1 #2 \__fp_sep: #4 #5 \__fp_sep: = \c_zero_int \else: 2 \exp_after:wN \prg_break: \fi: \__fp_tuple_compare_back_loop:w #3 @ } -\cs_new:Npn \__fp_compare_npos:nwnw #1#2; #3#4; +\cs_new:Npn \__fp_compare_npos:nwnw #1#2\__fp_sep: #3#4\__fp_sep: { \if_int_compare:w #1 = #3 \exp_stop_f: \__fp_compare_significand:nnnnnnnn #2 #4 @@ -17767,20 +17932,22 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp:w \exp_end_continue_f:w \__fp_parse:n {#3} } \cs_generate_variant:Nn \fp_step_function:nnnN { nnnc } -\cs_new:Npn \__fp_step:wwwN #1#2; #3#4; #5#6; #7 +\cs_new:Npn \__fp_step:wwwN #1#2\__fp_sep: #3#4\__fp_sep: #5#6\__fp_sep: #7 { \__fp_if_type_fp:NTwFw #1 { } \s__fp \prg_break: \s__fp_stop \__fp_if_type_fp:NTwFw #3 { } \s__fp \prg_break: \s__fp_stop \__fp_if_type_fp:NTwFw #5 { } \s__fp \prg_break: \s__fp_stop - \use_i:nnnn { \__fp_step_fp:wwwN #1#2; #3#4; #5#6; #7 } + \use_i:nnnn + { \__fp_step_fp:wwwN #1#2\__fp_sep: #3#4\__fp_sep: #5#6\__fp_sep: #7 } \prg_break_point: \use:n { - \__fp_error:nfff { step-tuple } { \fp_to_tl:n { #1#2 ; } } - { \fp_to_tl:n { #3#4 ; } } { \fp_to_tl:n { #5#6 ; } } + \__fp_error:nfff { step-tuple } { \fp_to_tl:n { #1#2 \__fp_sep: } } + { \fp_to_tl:n { #3#4 \__fp_sep: } } { \fp_to_tl:n { #5#6 \__fp_sep: } } } } -\cs_new:Npn \__fp_step_fp:wwwN #1 ; \s__fp \__fp_chk:w #2#3#4 ; #5; #6 +\cs_new:Npn \__fp_step_fp:wwwN + #1 \__fp_sep: \s__fp \__fp_chk:w #2#3#4 \__fp_sep: #5\__fp_sep: #6 { \token_if_eq_meaning:NNTF #2 1 { @@ -17796,11 +17963,15 @@ Type H <return> for immediate help}\def~{\errmessage{% } { \__fp_error:nnfn { bad-step } { } - { \fp_to_tl:n { \s__fp \__fp_chk:w #2#3#4 ; } } {#6} + { \fp_to_tl:n { \s__fp \__fp_chk:w #2#3#4 \__fp_sep: } } {#6} } \use_none:nnnnn } - { #1 ; } { \c_nan_fp } { \s__fp \__fp_chk:w #2#3#4 ; } { #5 ; } #6 + { #1 \__fp_sep: } + { \c_nan_fp } + { \s__fp \__fp_chk:w #2#3#4 \__fp_sep: } + { #5 \__fp_sep: } + #6 } \cs_new:Npn \__fp_step:NnnnnN #1#2#3#4#5#6 { @@ -17864,11 +18035,11 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_minmax_loop:Nww \exp_after:wN - \fi: #2 - \s__fp \__fp_chk:w 2 #1 \s__fp_exact ; - \s__fp \__fp_chk:w { 3 \__fp_minmax_break_o:w } ; + \s__fp \__fp_chk:w 2 #1 \s__fp_exact \__fp_sep: + \s__fp \__fp_chk:w { 3 \__fp_minmax_break_o:w } \__fp_sep: } \cs_new:Npn \__fp_minmax_loop:Nww - #1 \s__fp \__fp_chk:w #2#3; \s__fp \__fp_chk:w #4#5; + #1 \s__fp \__fp_chk:w #2#3\__fp_sep: \s__fp \__fp_chk:w #4#5\__fp_sep: { \if_meaning:w 3 #4 \if_meaning:w 3 #2 @@ -17879,8 +18050,8 @@ Type H <return> for immediate help}\def~{\errmessage{% \else: \if_int_compare:w \__fp_compare_back:ww - \s__fp \__fp_chk:w #4#5; - \s__fp \__fp_chk:w #2#3; + \s__fp \__fp_chk:w #4#5\__fp_sep: + \s__fp \__fp_chk:w #2#3\__fp_sep: = #1 1 \exp_stop_f: \__fp_minmax_auxii:ww \else: @@ -17888,16 +18059,17 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: \fi: \__fp_minmax_loop:Nww #1 - \s__fp \__fp_chk:w #2#3; - \s__fp \__fp_chk:w #4#5; + \s__fp \__fp_chk:w #2#3\__fp_sep: + \s__fp \__fp_chk:w #4#5\__fp_sep: } -\cs_new:Npn \__fp_minmax_auxi:ww #1 \fi: \fi: #2 \s__fp #3 ; \s__fp #4; - { \fi: \fi: #2 \s__fp #3 ; } -\cs_new:Npn \__fp_minmax_auxii:ww #1 \fi: \fi: #2 \s__fp #3 ; +\cs_new:Npn \__fp_minmax_auxi:ww + #1 \fi: \fi: #2 \s__fp #3 \__fp_sep: \s__fp #4\__fp_sep: + { \fi: \fi: #2 \s__fp #3 \__fp_sep: } +\cs_new:Npn \__fp_minmax_auxii:ww #1 \fi: \fi: #2 \s__fp #3 \__fp_sep: { \fi: \fi: #2 } -\cs_new:Npn \__fp_minmax_break_o:w #1 \fi: \fi: #2 \s__fp #3; #4; - { \fi: \__fp_exp_after_o:w \s__fp #3; } -\cs_new:Npn \__fp_not_o:w #1 \s__fp \__fp_chk:w #2#3; @ +\cs_new:Npn \__fp_minmax_break_o:w #1 \fi: \fi: #2 \s__fp #3\__fp_sep: #4\__fp_sep: + { \fi: \__fp_exp_after_o:w \s__fp #3\__fp_sep: } +\cs_new:Npn \__fp_not_o:w #1 \s__fp \__fp_chk:w #2#3\__fp_sep: @ { \if_meaning:w 0 #2 \exp_after:wN \exp_after:wN \exp_after:wN \c_one_fp @@ -17909,30 +18081,31 @@ Type H <return> for immediate help}\def~{\errmessage{% \group_begin: \char_set_catcode_letter:N & \char_set_catcode_letter:N | - \cs_new:Npn \__fp_&_o:ww #1 \s__fp \__fp_chk:w #2#3; + \cs_new:Npn \__fp_&_o:ww #1 \s__fp \__fp_chk:w #2#3\__fp_sep: { \if_meaning:w 0 #2 #1 - \__fp_and_return:wNw \s__fp \__fp_chk:w #2#3; + \__fp_and_return:wNw \s__fp \__fp_chk:w #2#3\__fp_sep: \fi: \__fp_exp_after_o:w } - \cs_new:Npn \__fp_&_tuple_o:ww #1 \s__fp \__fp_chk:w #2#3; + \cs_new:Npn \__fp_&_tuple_o:ww #1 \s__fp \__fp_chk:w #2#3\__fp_sep: { \if_meaning:w 0 #2 #1 - \__fp_and_return:wNw \s__fp \__fp_chk:w #2#3; + \__fp_and_return:wNw \s__fp \__fp_chk:w #2#3\__fp_sep: \fi: \__fp_exp_after_tuple_o:w } - \cs_new:Npn \__fp_tuple_&_o:ww #1; { \__fp_exp_after_o:w } - \cs_new:Npn \__fp_tuple_&_tuple_o:ww #1; { \__fp_exp_after_tuple_o:w } + \cs_new:Npn \__fp_tuple_&_o:ww #1\__fp_sep: { \__fp_exp_after_o:w } + \cs_new:Npn \__fp_tuple_&_tuple_o:ww #1\__fp_sep: { \__fp_exp_after_tuple_o:w } \cs_new:Npn \__fp_|_o:ww { \__fp_&_o:ww \else: } \cs_new:Npn \__fp_|_tuple_o:ww { \__fp_&_tuple_o:ww \else: } - \cs_new:Npn \__fp_tuple_|_o:ww #1; #2; { \__fp_exp_after_tuple_o:w #1; } - \cs_new:Npn \__fp_tuple_|_tuple_o:ww #1; #2; - { \__fp_exp_after_tuple_o:w #1; } + \cs_new:Npn \__fp_tuple_|_o:ww #1\__fp_sep: #2\__fp_sep: + { \__fp_exp_after_tuple_o:w #1\__fp_sep: } + \cs_new:Npn \__fp_tuple_|_tuple_o:ww #1\__fp_sep: #2\__fp_sep: + { \__fp_exp_after_tuple_o:w #1\__fp_sep: } \group_end: -\cs_new:Npn \__fp_and_return:wNw #1; \fi: #2; - { \fi: \__fp_exp_after_o:w #1; } +\cs_new:Npn \__fp_and_return:wNw #1\__fp_sep: \fi: #2\__fp_sep: + { \fi: \__fp_exp_after_o:w #1\__fp_sep: } \cs_new:Npn \__fp_ternary:NwwN #1 #2#3@ #4@ #5 { \if_meaning:w \__fp_parse_infix_::N #5 @@ -17993,7 +18166,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_not:n { \s__fp \__fp_neg_sign:N } } \cs_new:cpn { __fp_+_o:ww } - \s__fp #1 \__fp_chk:w #2 #3 ; \s__fp \__fp_chk:w #4 #5 + \s__fp #1 \__fp_chk:w #2 #3 \__fp_sep: \s__fp \__fp_chk:w #4 #5 { \if_case:w \if_meaning:w #2 #4 @@ -18013,10 +18186,10 @@ Type H <return> for immediate help}\def~{\errmessage{% \else: \exp_after:wN \__fp_add_return_ii_o:Nww \int_value:w \fi: #1 #5 - \s__fp \__fp_chk:w #2 #3 ; + \s__fp \__fp_chk:w #2 #3 \__fp_sep: \s__fp \__fp_chk:w #4 #5 } -\cs_new:Npn \__fp_add_return_ii_o:Nww #1 #2 ; \s__fp \__fp_chk:w #3 #4 +\cs_new:Npn \__fp_add_return_ii_o:Nww #1 #2 \__fp_sep: \s__fp \__fp_chk:w #3 #4 { \__fp_exp_after_o:w \s__fp \__fp_chk:w #3 #1 } \cs_new:Npn \__fp_add_zeros_o:Nww #1 \s__fp \__fp_chk:w 0 #2 { @@ -18029,7 +18202,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \s__fp \__fp_chk:w 0 #2 } \cs_new:Npn \__fp_add_inf_o:Nww - #1 \s__fp \__fp_chk:w 2 #2 #3; \s__fp \__fp_chk:w 2 #4 + #1 \s__fp \__fp_chk:w 2 #2 #3\__fp_sep: \s__fp \__fp_chk:w 2 #4 { \if_meaning:w #1 #2 \__fp_case_return_i_o:ww @@ -18040,7 +18213,7 @@ Type H <return> for immediate help}\def~{\errmessage{% { \token_if_eq_meaning:NNTF #1 #4 + - } } \fi: - \s__fp \__fp_chk:w 2 #2 #3; + \s__fp \__fp_chk:w 2 #2 #3\__fp_sep: \s__fp \__fp_chk:w 2 #4 } \cs_new:Npn \__fp_add_normal_o:Nww #1 \s__fp \__fp_chk:w 1 #2 @@ -18052,7 +18225,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: #2 } -\cs_new:Npn \__fp_add_npos_o:NnwNnw #1#2#3 ; \s__fp \__fp_chk:w 1 #4 #5 +\cs_new:Npn \__fp_add_npos_o:NnwNnw #1#2#3 \__fp_sep: \s__fp \__fp_chk:w 1 #4 #5 { \exp_after:wN \__fp_sanitize:Nw \exp_after:wN #1 @@ -18064,9 +18237,9 @@ Type H <return> for immediate help}\def~{\errmessage{% #5 \exp_after:wN \__fp_add_big_ii_o:wNww \int_value:w \fi: - \__fp_int_eval:w #5 - #2 ; #1 #3; + \__fp_int_eval:w #5 - #2 \__fp_sep: #1 #3\__fp_sep: } -\cs_new:Npn \__fp_add_big_i_o:wNww #1; #2 #3; #4; +\cs_new:Npn \__fp_add_big_i_o:wNww #1\__fp_sep: #2 #3\__fp_sep: #4\__fp_sep: { \__fp_decimate:nNnnnn {#1} \__fp_add_significand_o:NnnwnnnnN @@ -18074,7 +18247,7 @@ Type H <return> for immediate help}\def~{\errmessage{% #3 #2 } -\cs_new:Npn \__fp_add_big_ii_o:wNww #1; #2 #3; #4; +\cs_new:Npn \__fp_add_big_ii_o:wNww #1\__fp_sep: #2 #3\__fp_sep: #4\__fp_sep: { \__fp_decimate:nNnnnn {#1} \__fp_add_significand_o:NnnwnnnnN @@ -18082,19 +18255,19 @@ Type H <return> for immediate help}\def~{\errmessage{% #4 #2 } -\cs_new:Npn \__fp_add_significand_o:NnnwnnnnN #1 #2#3 #4; #5#6#7#8 +\cs_new:Npn \__fp_add_significand_o:NnnwnnnnN #1 #2#3 #4\__fp_sep: #5#6#7#8 { \exp_after:wN \__fp_add_significand_test_o:N \int_value:w \__fp_int_eval:w 1#5#6 + #2 \exp_after:wN \__fp_add_significand_pack:NNNNNNN - \int_value:w \__fp_int_eval:w 1#7#8 + #3 ; #1 + \int_value:w \__fp_int_eval:w 1#7#8 + #3 \__fp_sep: #1 } \cs_new:Npn \__fp_add_significand_pack:NNNNNNN #1 #2#3#4#5#6#7 { \if_meaning:w 2 #1 + 1 \fi: - ; #2 #3 #4 #5 #6 #7 ; + \__fp_sep: #2 #3 #4 #5 #6 #7 \__fp_sep: } \cs_new:Npn \__fp_add_significand_test_o:N #1 { @@ -18105,17 +18278,17 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: } \cs_new:Npn \__fp_add_significand_no_carry_o:wwwNN - #1; #2; #3#4 ; #5#6 + #1\__fp_sep: #2\__fp_sep: #3#4 \__fp_sep: #5#6 { \exp_after:wN \__fp_basics_pack_high:NNNNNw \int_value:w \__fp_int_eval:w 1 #1 \exp_after:wN \__fp_basics_pack_low:NNNNNw \int_value:w \__fp_int_eval:w 1 #2 #3#4 + \__fp_round:NNN #6 #4 #5 - \exp_after:wN ; + \exp_after:wN \__fp_sep: } \cs_new:Npn \__fp_add_significand_carry_o:wwwNN - #1; #2; #3#4; #5#6 + #1\__fp_sep: #2\__fp_sep: #3#4\__fp_sep: #5#6 { + 1 \exp_after:wN \__fp_basics_pack_weird_high:NNNNNNNNw @@ -18125,28 +18298,31 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_round:NNN \exp_after:wN #6 \exp_after:wN #3 - \int_value:w \__fp_round_digit:Nw #4 #5 ; - \exp_after:wN ; + \int_value:w \__fp_round_digit:Nw #4 #5 \__fp_sep: + \exp_after:wN \__fp_sep: } -\cs_new:Npn \__fp_sub_npos_o:NnwNnw #1#2#3; \s__fp \__fp_chk:w 1 #4#5#6; +\cs_new:Npn \__fp_sub_npos_o:NnwNnw + #1#2#3\__fp_sep: \s__fp \__fp_chk:w 1 #4#5#6\__fp_sep: { - \if_case:w \__fp_compare_npos:nwnw {#2} #3; {#5} #6; \exp_stop_f: + \if_case:w + \__fp_compare_npos:nwnw {#2} #3\__fp_sep: {#5} #6\__fp_sep: \exp_stop_f: \exp_after:wN \__fp_sub_eq_o:Nnwnw \or: \exp_after:wN \__fp_sub_npos_i_o:Nnwnw \else: \exp_after:wN \__fp_sub_npos_ii_o:Nnwnw \fi: - #1 {#2} #3; {#5} #6; + #1 {#2} #3\__fp_sep: {#5} #6\__fp_sep: } -\cs_new:Npn \__fp_sub_eq_o:Nnwnw #1#2; #3; { \exp_after:wN \c_zero_fp } -\cs_new:Npn \__fp_sub_npos_ii_o:Nnwnw #1 #2; #3; +\cs_new:Npn \__fp_sub_eq_o:Nnwnw #1#2\__fp_sep: #3\__fp_sep: + { \exp_after:wN \c_zero_fp } +\cs_new:Npn \__fp_sub_npos_ii_o:Nnwnw #1 #2\__fp_sep: #3\__fp_sep: { \exp_after:wN \__fp_sub_npos_i_o:Nnwnw \int_value:w \__fp_neg_sign:N #1 - #3; #2; + #3\__fp_sep: #2\__fp_sep: } -\cs_new:Npn \__fp_sub_npos_i_o:Nnwnw #1 #2#3; #4#5; +\cs_new:Npn \__fp_sub_npos_i_o:Nnwnw #1 #2#3\__fp_sep: #4#5\__fp_sep: { \exp_after:wN \__fp_sanitize:Nw \exp_after:wN #1 @@ -18168,42 +18344,43 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_sub_back_near_after:wNNNNw \int_value:w \__fp_int_eval:w 10#5#6 - #1#2 - 11 \exp_after:wN \__fp_sub_back_near_pack:NNNNNNw - \int_value:w \__fp_int_eval:w 11#7#8 - #3#4 \exp_after:wN ; + \int_value:w \__fp_int_eval:w 11#7#8 - #3#4 \exp_after:wN \__fp_sep: } -\cs_new:Npn \__fp_sub_back_near_pack:NNNNNNw #1#2#3#4#5#6#7 ; - { + #1#2 ; {#3#4#5#6} {#7} ; } -\cs_new:Npn \__fp_sub_back_near_after:wNNNNw 10 #1#2#3#4 #5 ; +\cs_new:Npn \__fp_sub_back_near_pack:NNNNNNw #1#2#3#4#5#6#7 \__fp_sep: + { + #1#2 \__fp_sep: {#3#4#5#6} {#7} \__fp_sep: } +\cs_new:Npn \__fp_sub_back_near_after:wNNNNw 10 #1#2#3#4 #5 \__fp_sep: { \if_meaning:w 0 #1 \exp_after:wN \__fp_sub_back_shift:wnnnn \fi: - ; {#1#2#3#4} {#5} + \__fp_sep: {#1#2#3#4} {#5} } -\cs_new:Npn \__fp_sub_back_shift:wnnnn ; #1#2 +\cs_new:Npn \__fp_sub_back_shift:wnnnn \__fp_sep: #1#2 { \exp_after:wN \__fp_sub_back_shift_ii:ww - \int_value:w #1 #2 0 ; + \int_value:w #1 #2 0 \__fp_sep: } -\cs_new:Npn \__fp_sub_back_shift_ii:ww #1 0 ; #2#3 ; +\cs_new:Npn \__fp_sub_back_shift_ii:ww #1 0 \__fp_sep: #2#3 \__fp_sep: { \if_meaning:w @ #1 @ - 7 - \exp_after:wN \use_i:nnn \exp_after:wN \__fp_sub_back_shift_iii:NNNNNNNNw - \int_value:w #2#3 0 ~ 123456789; + \int_value:w #2#3 0 ~ 123456789\__fp_sep: \else: - - \__fp_sub_back_shift_iii:NNNNNNNNw #1 123456789; + - \__fp_sub_back_shift_iii:NNNNNNNNw #1 123456789\__fp_sep: \fi: \exp_after:wN \__fp_pack_twice_four:wNNNNNNNN \exp_after:wN \__fp_pack_twice_four:wNNNNNNNN \exp_after:wN \__fp_sub_back_shift_iv:nnnnw - \exp_after:wN ; + \exp_after:wN \__fp_sep: \int_value:w - #1 ~ #2#3 0 ~ 0000 0000 0000 000 ; + #1 ~ #2#3 0 ~ 0000 0000 0000 000 \__fp_sep: } -\cs_new:Npn \__fp_sub_back_shift_iii:NNNNNNNNw #1#2#3#4#5#6#7#8#9; {#8} -\cs_new:Npn \__fp_sub_back_shift_iv:nnnnw #1 ; #2 ; { ; #1 ; } -\cs_new:Npn \__fp_sub_back_far_o:NnnwnnnnN #1 #2#3 #4; #5#6#7#8 +\cs_new:Npn \__fp_sub_back_shift_iii:NNNNNNNNw #1#2#3#4#5#6#7#8#9\__fp_sep: {#8} +\cs_new:Npn \__fp_sub_back_shift_iv:nnnnw #1 \__fp_sep: #2 \__fp_sep: + { \__fp_sep: #1 \__fp_sep: } +\cs_new:Npn \__fp_sub_back_far_o:NnnwnnnnN #1 #2#3 #4\__fp_sep: #5#6#7#8 { \if_case:w \if_int_compare:w 1 #2 = #5#6 \use_i:nnnn #7 \exp_stop_f: @@ -18220,9 +18397,9 @@ Type H <return> for immediate help}\def~{\errmessage{% \or: \exp_after:wN \__fp_sub_back_very_far_o:wwwwNN \else: \exp_after:wN \__fp_sub_back_not_far_o:wwwwNN \fi: - #2 ~ #3 ; #5 #6 ~ #7 #8 ; #1 + #2 ~ #3 \__fp_sep: #5 #6 ~ #7 #8 \__fp_sep: #1 } -\cs_new:Npn \__fp_sub_back_quite_far_o:wwNN #1; #2; #3#4 +\cs_new:Npn \__fp_sub_back_quite_far_o:wwNN #1\__fp_sep: #2\__fp_sep: #3#4 { \exp_after:wN \__fp_sub_back_quite_far_ii:NN \exp_after:wN #3 @@ -18235,10 +18412,10 @@ Type H <return> for immediate help}\def~{\errmessage{% \else: \exp_after:wN \use_ii:nn \fi: - { ; {1000} {0000} {0000} {0000} ; } - { - 1 ; {9999} {9999} {9999} {9999} ; } + { \__fp_sep: {1000} {0000} {0000} {0000} \__fp_sep: } + { - 1 \__fp_sep: {9999} {9999} {9999} {9999} \__fp_sep: } } -\cs_new:Npn \__fp_sub_back_not_far_o:wwwwNN #1 ~ #2; #3 ~ #4; #5#6 +\cs_new:Npn \__fp_sub_back_not_far_o:wwwwNN #1 ~ #2\__fp_sep: #3 ~ #4\__fp_sep: #5#6 { - 1 \exp_after:wN \__fp_sub_back_near_after:wNNNNw @@ -18248,16 +18425,17 @@ Type H <return> for immediate help}\def~{\errmessage{% - \exp_after:wN \__fp_round_neg:NNN \exp_after:wN #6 \use_none:nnnnnnn #2 #5 - \exp_after:wN ; + \exp_after:wN \__fp_sep: } \cs_new:Npn \__fp_sub_back_very_far_o:wwwwNN #1#2#3#4#5#6#7 { \__fp_pack_eight:wNNNNNNNN \__fp_sub_back_very_far_ii_o:nnNwwNN { 0 #1#2#3 #4#5#6#7 } - ; + \__fp_sep: } -\cs_new:Npn \__fp_sub_back_very_far_ii_o:nnNwwNN #1#2 ; #3 ; #4 ~ #5; #6#7 +\cs_new:Npn \__fp_sub_back_very_far_ii_o:nnNwwNN + #1#2 \__fp_sep: #3 \__fp_sep: #4 ~ #5\__fp_sep: #6#7 { \exp_after:wN \__fp_basics_pack_high:NNNNNw \int_value:w \__fp_int_eval:w 1#4 - #1 - 1 @@ -18268,8 +18446,8 @@ Type H <return> for immediate help}\def~{\errmessage{% \int_value:w \if_int_odd:w \__fp_int_eval:w #5 - #2 \__fp_int_eval_end: 1 \else: 2 \fi: - \int_value:w \__fp_round_digit:Nw #3 #6 ; - \exp_after:wN ; + \int_value:w \__fp_round_digit:Nw #3 #6 \__fp_sep: + \exp_after:wN \__fp_sep: } \cs_new:cpn { __fp_*_o:ww } { @@ -18280,7 +18458,7 @@ Type H <return> for immediate help}\def~{\errmessage{% { } } \cs_new:Npn \__fp_mul_cases_o:NnNnww - #1#2#3#4 \s__fp \__fp_chk:w #5#6#7; \s__fp \__fp_chk:w #8#9 + #1#2#3#4 \s__fp \__fp_chk:w #5#6#7\__fp_sep: \s__fp \__fp_chk:w #8#9 { \if_case:w \__fp_int_eval:w \if_int_compare:w #5 #8 = 11 ~ @@ -18314,11 +18492,12 @@ Type H <return> for immediate help}\def~{\errmessage{% \or: \__fp_case_return_o:Nww \c_minus_inf_fp #4 \fi: - \s__fp \__fp_chk:w #5 #6 #7; + \s__fp \__fp_chk:w #5 #6 #7\__fp_sep: \s__fp \__fp_chk:w #8 #9 } \cs_new:Npn \__fp_mul_npos_o:Nww - #1 \s__fp \__fp_chk:w #2 #3 #4 #5 ; \s__fp \__fp_chk:w #6 #7 #8 #9 ; + #1 \s__fp \__fp_chk:w #2 #3 #4 #5 \__fp_sep: + \s__fp \__fp_chk:w #6 #7 #8 #9 \__fp_sep: { \exp_after:wN \__fp_sanitize:Nw \exp_after:wN #1 @@ -18344,13 +18523,13 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_mul_significand_drop:NNNNNw \int_value:w \__fp_int_eval:w 99990000 + #3*#9 + #4*#8 + \exp_after:wN \__fp_mul_significand_drop:NNNNNw - \int_value:w \__fp_int_eval:w 100000000 + #4*#9 ; - ; \exp_after:wN ; + \int_value:w \__fp_int_eval:w 100000000 + #4*#9 \__fp_sep: + \__fp_sep: \exp_after:wN \__fp_sep: } -\cs_new:Npn \__fp_mul_significand_drop:NNNNNw #1#2#3#4#5 #6; - { #1#2#3#4#5 ; + #6 } -\cs_new:Npn \__fp_mul_significand_keep:NNNNNw #1#2#3#4#5 #6; - { #1#2#3#4#5 ; #6 ; } +\cs_new:Npn \__fp_mul_significand_drop:NNNNNw #1#2#3#4#5 #6\__fp_sep: + { #1#2#3#4#5 \__fp_sep: + #6 } +\cs_new:Npn \__fp_mul_significand_keep:NNNNNw #1#2#3#4#5 #6\__fp_sep: + { #1#2#3#4#5 \__fp_sep: #6 \__fp_sep: } \cs_new:Npn \__fp_mul_significand_test_f:NNN #1 #2 #3 { \if_meaning:w 0 #3 @@ -18360,7 +18539,8 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: #1 #3 } -\cs_new:Npn \__fp_mul_significand_large_f:NwwNNNN #1 #2; #3; #4#5#6#7; + +\cs_new:Npn \__fp_mul_significand_large_f:NwwNNNN + #1 #2\__fp_sep: #3\__fp_sep: #4#5#6#7\__fp_sep: + { \exp_after:wN \__fp_basics_pack_high:NNNNNw \int_value:w \__fp_int_eval:w 1#2 @@ -18371,7 +18551,8 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN #7 \int_value:w \__fp_round_digit:Nw } -\cs_new:Npn \__fp_mul_significand_small_f:NNwwwN #1 #2#3; #4#5; #6; + #7 +\cs_new:Npn \__fp_mul_significand_small_f:NNwwwN + #1 #2#3\__fp_sep: #4#5\__fp_sep: #6\__fp_sep: + #7 { - 1 \exp_after:wN \__fp_basics_pack_high:NNNNNw @@ -18399,25 +18580,26 @@ Type H <return> for immediate help}\def~{\errmessage{% } } \cs_new:Npn \__fp_div_npos_o:Nww - #1 \s__fp \__fp_chk:w 1 #2 #3 #4 ; \s__fp \__fp_chk:w 1 #5 #6 #7#8#9; + #1 \s__fp \__fp_chk:w 1 #2 #3 #4 \__fp_sep: + \s__fp \__fp_chk:w 1 #5 #6 #7#8#9\__fp_sep: { \exp_after:wN \__fp_sanitize:Nw \exp_after:wN #1 \int_value:w \__fp_int_eval:w #3 - #6 \exp_after:wN \__fp_div_significand_i_o:wnnw - \int_value:w \__fp_int_eval:w #7 \use_i:nnnn #8 + 1 ; + \int_value:w \__fp_int_eval:w #7 \use_i:nnnn #8 + 1 \__fp_sep: #4 - {#7}{#8}#9 ; + {#7}{#8}#9 \__fp_sep: #1 } -\cs_new:Npn \__fp_div_significand_i_o:wnnw #1 ; #2#3 #4 ; +\cs_new:Npn \__fp_div_significand_i_o:wnnw #1 \__fp_sep: #2#3 #4 \__fp_sep: { \exp_after:wN \__fp_div_significand_test_o:w \int_value:w \__fp_int_eval:w \exp_after:wN \__fp_div_significand_calc:wwnnnnnnn - \int_value:w \__fp_int_eval:w 999999 + #2 #3 0 / #1 ; - #2 #3 ; + \int_value:w \__fp_int_eval:w 999999 + #2 #3 0 / #1 \__fp_sep: + #2 #3 \__fp_sep: #4 { \exp_after:wN \__fp_div_significand_ii:wwn \int_value:w #1 } { \exp_after:wN \__fp_div_significand_ii:wwn \int_value:w #1 } @@ -18433,10 +18615,10 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: } \cs_new:Npn \__fp_div_significand_calc_i:wwnnnnnnn - #1; #2;#3#4 #5#6#7#8 #9 + #1\__fp_sep: #2\__fp_sep:#3#4 #5#6#7#8 #9 { 1 1 #1 - #9 \exp_after:wN ; + #9 \exp_after:wN \__fp_sep: \int_value:w \__fp_int_eval:w \c__fp_Bigg_leading_shift_int + #2 - #1 * #5 - #5#60 \exp_after:wN \__fp_pack_Bigg:NNNNNNw @@ -18447,14 +18629,14 @@ Type H <return> for immediate help}\def~{\errmessage{% + #4 - #1 * #7 - #80 \exp_after:wN \__fp_pack_Bigg:NNNNNNw \int_value:w \__fp_int_eval:w \c__fp_Bigg_trailing_shift_int - - #1 * #8 ; + - #1 * #8 \__fp_sep: {#5}{#6}{#7}{#8} } \cs_new:Npn \__fp_div_significand_calc_ii:wwnnnnnnn - #1; #2;#3#4 #5#6#7#8 #9 + #1\__fp_sep: #2\__fp_sep:#3#4 #5#6#7#8 #9 { 1 0 #1 - #9 \exp_after:wN ; + #9 \exp_after:wN \__fp_sep: \int_value:w \__fp_int_eval:w \c__fp_Bigg_leading_shift_int + #2 - #1 * #5 \exp_after:wN \__fp_pack_Bigg:NNNNNNw @@ -18465,25 +18647,27 @@ Type H <return> for immediate help}\def~{\errmessage{% + #4 - #1 * #7 \exp_after:wN \__fp_pack_Bigg:NNNNNNw \int_value:w \__fp_int_eval:w \c__fp_Bigg_trailing_shift_int - - #1 * #8 ; + - #1 * #8 \__fp_sep: {#5}{#6}{#7}{#8} } -\cs_new:Npn \__fp_div_significand_ii:wwn #1; #2;#3 +\cs_new:Npn \__fp_div_significand_ii:wwn #1\__fp_sep: #2\__fp_sep:#3 { \exp_after:wN \__fp_div_significand_pack:NNN \int_value:w \__fp_int_eval:w \exp_after:wN \__fp_div_significand_calc:wwnnnnnnn - \int_value:w \__fp_int_eval:w 999999 + #2 #3 0 / #1 ; #2 #3 ; + \int_value:w \__fp_int_eval:w + 999999 + #2 #3 0 / #1 \__fp_sep: #2 #3 \__fp_sep: } -\cs_new:Npn \__fp_div_significand_iii:wwnnnnn #1; #2;#3#4#5 #6#7 +\cs_new:Npn \__fp_div_significand_iii:wwnnnnn #1\__fp_sep: #2\__fp_sep:#3#4#5 #6#7 { 0 \exp_after:wN \__fp_div_significand_iv:wwnnnnnnn - \int_value:w \__fp_int_eval:w ( 2 * #2 #3) / #6 #7 ; % <- P - #2 ; {#3} {#4} {#5} + \int_value:w \__fp_int_eval:w ( 2 * #2 #3) / #6 #7 \__fp_sep: % <- P + #2 \__fp_sep: {#3} {#4} {#5} {#6} {#7} } -\cs_new:Npn \__fp_div_significand_iv:wwnnnnnnn #1; #2;#3#4#5 #6#7#8#9 +\cs_new:Npn \__fp_div_significand_iv:wwnnnnnnn + #1\__fp_sep: #2\__fp_sep:#3#4#5 #6#7#8#9 { + 5 * #1 \exp_after:wN \__fp_div_significand_vi:Nw @@ -18491,19 +18675,19 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_div_significand_v:NN \int_value:w \__fp_int_eval:w 499950 + 2*#4 - #1*#8 + \exp_after:wN \__fp_div_significand_v:NN - \int_value:w \__fp_int_eval:w 500000 + 2*#5 - #1*#9 ; + \int_value:w \__fp_int_eval:w 500000 + 2*#5 - #1*#9 \__fp_sep: } \cs_new:Npn \__fp_div_significand_v:NN #1#2 { #1#2 \__fp_int_eval_end: + } -\cs_new:Npn \__fp_div_significand_vi:Nw #1#2; +\cs_new:Npn \__fp_div_significand_vi:Nw #1#2\__fp_sep: { \if_meaning:w 0 #1 \if_int_compare:w \__fp_int_eval:w #2 > 0 + 1 \fi: \else: \if_meaning:w - #1 - \else: + \fi: 1 \fi: - ; + \__fp_sep: } -\cs_new:Npn \__fp_div_significand_pack:NNN 1 #1 #2 { + #1 #2 ; } +\cs_new:Npn \__fp_div_significand_pack:NNN 1 #1 #2 { + #1 #2 \__fp_sep: } \cs_new:Npn \__fp_div_significand_test_o:w 10 #1 { \if_meaning:w 0 #1 @@ -18514,17 +18698,17 @@ Type H <return> for immediate help}\def~{\errmessage{% #1 } \cs_new:Npn \__fp_div_significand_small_o:wwwNNNNwN - 0 #1; #2; #3; #4#5#6#7#8; #9 + 0 #1\__fp_sep: #2\__fp_sep: #3\__fp_sep: #4#5#6#7#8\__fp_sep: #9 { \exp_after:wN \__fp_basics_pack_high:NNNNNw \int_value:w \__fp_int_eval:w 1 #1#2 \exp_after:wN \__fp_basics_pack_low:NNNNNw \int_value:w \__fp_int_eval:w 1 #3#4#5#6#7 + \__fp_round:NNN #9 #7 #8 - \exp_after:wN ; + \exp_after:wN \__fp_sep: } \cs_new:Npn \__fp_div_significand_large_o:wwwNNNNwN - #1; #2; #3; #4#5#6#7#8; #9 + #1\__fp_sep: #2\__fp_sep: #3\__fp_sep: #4#5#6#7#8\__fp_sep: #9 { + 1 \exp_after:wN \__fp_basics_pack_weird_high:NNNNNNNNw @@ -18534,10 +18718,10 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_round:NNN \exp_after:wN #9 \exp_after:wN #6 - \int_value:w \__fp_round_digit:Nw #7 #8 ; - \exp_after:wN ; + \int_value:w \__fp_round_digit:Nw #7 #8 \__fp_sep: + \exp_after:wN \__fp_sep: } -\cs_new:Npn \__fp_sqrt_o:w #1 \s__fp \__fp_chk:w #2#3#4; @ +\cs_new:Npn \__fp_sqrt_o:w #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: @ { \if_meaning:w 0 #2 \__fp_case_return_same_o:w \fi: \if_meaning:w 2 #3 @@ -18545,9 +18729,9 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: \if_meaning:w 1 #2 \else: \__fp_case_return_same_o:w \fi: \__fp_sqrt_npos_o:w - \s__fp \__fp_chk:w #2 #3 #4; + \s__fp \__fp_chk:w #2 #3 #4\__fp_sep: } -\cs_new:Npn \__fp_sqrt_npos_o:w \s__fp \__fp_chk:w 1 0 #1#2#3#4#5; +\cs_new:Npn \__fp_sqrt_npos_o:w \s__fp \__fp_chk:w 1 0 #1#2#3#4#5\__fp_sep: { \exp_after:wN \__fp_sanitize:Nw \exp_after:wN 0 @@ -18556,19 +18740,19 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_sqrt_npos_auxi_o:wwnnN \fi: #1 / 2 - \__fp_sqrt_Newton_o:wwn 56234133; 0; {#2#3} {#4#5} 0 + \__fp_sqrt_Newton_o:wwn 56234133\__fp_sep: 0\__fp_sep: {#2#3} {#4#5} 0 } -\cs_new:Npn \__fp_sqrt_npos_auxi_o:wwnnN #1 / 2 #2; 0; #3#4#5 +\cs_new:Npn \__fp_sqrt_npos_auxi_o:wwnnN #1 / 2 #2\__fp_sep: 0\__fp_sep: #3#4#5 { ( #1 + 1 ) / 2 \__fp_pack_eight:wNNNNNNNN \__fp_sqrt_npos_auxii_o:wNNNNNNNN - ; + \__fp_sep: 0 #3 #4 } -\cs_new:Npn \__fp_sqrt_npos_auxii_o:wNNNNNNNN #1; #2#3#4#5#6#7#8#9 - { \__fp_sqrt_Newton_o:wwn 17782794; 0; {#1} {#2#3#4#5#6#7#8#9} } -\cs_new:Npn \__fp_sqrt_Newton_o:wwn #1; #2; #3 +\cs_new:Npn \__fp_sqrt_npos_auxii_o:wNNNNNNNN #1\__fp_sep: #2#3#4#5#6#7#8#9 + { \__fp_sqrt_Newton_o:wwn 17782794\__fp_sep: 0\__fp_sep: {#1} {#2#3#4#5#6#7#8#9} } +\cs_new:Npn \__fp_sqrt_Newton_o:wwn #1\__fp_sep: #2\__fp_sep: #3 { \if_int_compare:w #1 = #2 \exp_stop_f: \exp_after:wN \__fp_sqrt_auxi_o:NNNNwnnN @@ -18576,10 +18760,10 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_use_none_until_s:w \fi: \exp_after:wN \__fp_sqrt_Newton_o:wwn - \int_value:w \__fp_int_eval:w (#1 + #3 * 1 0000 0000 / #1) / 2 ; - #1; {#3} + \int_value:w \__fp_int_eval:w (#1 + #3 * 1 0000 0000 / #1) / 2 \__fp_sep: + #1\__fp_sep: {#3} } -\cs_new:Npn \__fp_sqrt_auxi_o:NNNNwnnN 1 #1#2#3#4#5; +\cs_new:Npn \__fp_sqrt_auxi_o:NNNNwnnN 1 #1#2#3#4#5\__fp_sep: { \__fp_sqrt_auxii_o:NnnnnnnnN \__fp_sqrt_auxiii_o:wnnnnnnnn @@ -18615,13 +18799,13 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_pack_big:NNNNNNw \int_value:w \__fp_int_eval:w \c__fp_big_trailing_shift_int - - #6 * #6 ; + - #6 * #6 \__fp_sep: % ( - - 257 ) * 5000 0000 / (#2#3 + 1) + 10 0000 0000 ; + - 257 ) * 5000 0000 / (#2#3 + 1) + 10 0000 0000 \__fp_sep: {#2}{#3}{#4}{#5}{#6} {#7}{#8}#9 } \cs_new:Npn \__fp_sqrt_auxiii_o:wnnnnnnnn - #1; #2#3#4#5#6#7#8#9 + #1\__fp_sep: #2#3#4#5#6#7#8#9 { \if_int_compare:w #1 > \c_one_int \exp_after:wN \__fp_sqrt_auxiv_o:NNNNNw @@ -18641,13 +18825,13 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: \fi: } -\cs_new:Npn \__fp_sqrt_auxiv_o:NNNNNw 1#1#2#3#4#5#6; +\cs_new:Npn \__fp_sqrt_auxiv_o:NNNNNw 1#1#2#3#4#5#6\__fp_sep: { \__fp_sqrt_auxviii_o:nnnnnnn {#1#2#3#4#5#6} {00000000} } -\cs_new:Npn \__fp_sqrt_auxv_o:NNNNNw 1#1#2#3#4#5#6; +\cs_new:Npn \__fp_sqrt_auxv_o:NNNNNw 1#1#2#3#4#5#6\__fp_sep: { \__fp_sqrt_auxviii_o:nnnnnnn {000#1#2#3#4#5} {#60000} } -\cs_new:Npn \__fp_sqrt_auxvi_o:NNNNNw 1#1#2#3#4#5#6; +\cs_new:Npn \__fp_sqrt_auxvi_o:NNNNNw 1#1#2#3#4#5#6\__fp_sep: { \__fp_sqrt_auxviii_o:nnnnnnn {0000000#1} {#2#3#4#5#6} } -\cs_new:Npn \__fp_sqrt_auxvii_o:NNNNNw 1#1#2#3#4#5#6; +\cs_new:Npn \__fp_sqrt_auxvii_o:NNNNNw 1#1#2#3#4#5#6\__fp_sep: { \if_int_compare:w #1#2 = \c_zero_int \exp_after:wN \__fp_sqrt_auxx_o:Nnnnnnnn @@ -18661,9 +18845,9 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_basics_pack_low:NNNNNw \int_value:w \__fp_int_eval:w #1 + 1#4#5 \exp_after:wN \__fp_basics_pack_low:NNNNNw - \int_value:w \__fp_int_eval:w #2 + 1#6#7 ; + \int_value:w \__fp_int_eval:w #2 + 1#6#7 \__fp_sep: } -\cs_new:Npn \__fp_sqrt_auxix_o:wnwnw #1; #2#3; #4#5; +\cs_new:Npn \__fp_sqrt_auxix_o:wnwnw #1\__fp_sep: #2#3\__fp_sep: #4#5\__fp_sep: { \__fp_sqrt_auxii_o:NnnnnnnnN \__fp_sqrt_auxiii_o:wnnnnnnnn {#1}{#2}{#3}{#4}{#5} @@ -18672,17 +18856,17 @@ Type H <return> for immediate help}\def~{\errmessage{% { \exp_after:wN \__fp_sqrt_auxxi_o:wwnnN \int_value:w \__fp_int_eval:w - (#8 + 2499) / 5000 * 5000 ; - {#4} {#5} {#6} {#7} ; + (#8 + 2499) / 5000 * 5000 \__fp_sep: + {#4} {#5} {#6} {#7} \__fp_sep: } -\cs_new:Npn \__fp_sqrt_auxxi_o:wwnnN #1; #2; #3#4#5 +\cs_new:Npn \__fp_sqrt_auxxi_o:wwnnN #1\__fp_sep: #2\__fp_sep: #3#4#5 { \__fp_sqrt_auxii_o:NnnnnnnnN \__fp_sqrt_auxxii_o:nnnnnnnnw #2 {#1} {#3} { #4 + 1 } #5 } -\cs_new:Npn \__fp_sqrt_auxxii_o:nnnnnnnnw 0; #1#2#3#4#5#6#7#8 #9; +\cs_new:Npn \__fp_sqrt_auxxii_o:nnnnnnnnw 0\__fp_sep: #1#2#3#4#5#6#7#8 #9\__fp_sep: { \if_int_compare:w #1#2 > \c_zero_int \if_int_compare:w #1#2 = \c_one_int @@ -18700,14 +18884,14 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_sqrt_auxxiv_o:wnnnnnnnN \int_value:w 10000 \fi: - ; + \__fp_sep: } -\cs_new:Npn \__fp_sqrt_auxxiii_o:w \fi: \fi: \fi: \fi: #1 \fi: ; +\cs_new:Npn \__fp_sqrt_auxxiii_o:w \fi: \fi: \fi: \fi: #1 \fi: \__fp_sep: { \fi: \fi: \fi: \fi: \fi: - \__fp_sqrt_auxxiv_o:wnnnnnnnN 9999 ; + \__fp_sqrt_auxxiv_o:wnnnnnnnN 9999 \__fp_sep: } -\cs_new:Npn \__fp_sqrt_auxxiv_o:wnnnnnnnN #1; #2#3#4#5#6 #7#8#9 +\cs_new:Npn \__fp_sqrt_auxxiv_o:wnnnnnnnN #1\__fp_sep: #2#3#4#5#6 #7#8#9 { \exp_after:wN \__fp_basics_pack_high:NNNNNw \int_value:w \__fp_int_eval:w 1 0000 0000 + #2#3 @@ -18721,10 +18905,10 @@ Type H <return> for immediate help}\def~{\errmessage{% \int_value:w \exp_after:wN \use_i:nn \exp_after:wN \__fp_round_digit:Nw - \int_value:w \__fp_int_eval:w #6 + 19999 - #1 ; - \exp_after:wN ; + \int_value:w \__fp_int_eval:w #6 + 19999 - #1 \__fp_sep: + \exp_after:wN \__fp_sep: } -\cs_new:Npn \__fp_logb_o:w ? \s__fp \__fp_chk:w #1#2; @ +\cs_new:Npn \__fp_logb_o:w ? \s__fp \__fp_chk:w #1#2\__fp_sep: @ { \if_case:w #1 \exp_stop_f: \__fp_case_use:nw @@ -18733,14 +18917,14 @@ Type H <return> for immediate help}\def~{\errmessage{% \or: \__fp_case_return_o:Nw \c_inf_fp \else: \__fp_case_return_same_o:w \fi: - \s__fp \__fp_chk:w #1 #2; + \s__fp \__fp_chk:w #1 #2\__fp_sep: } -\cs_new:Npn \__fp_logb_aux_o:w \s__fp \__fp_chk:w #1 #2 #3 #4 ; +\cs_new:Npn \__fp_logb_aux_o:w \s__fp \__fp_chk:w #1 #2 #3 #4 \__fp_sep: { \exp_after:wN \__fp_parse:n \exp_after:wN { \int_value:w \int_eval:w #3 - 1 \exp_after:wN } } -\cs_new:Npn \__fp_sign_o:w ? \s__fp \__fp_chk:w #1#2; @ +\cs_new:Npn \__fp_sign_o:w ? \s__fp \__fp_chk:w #1#2\__fp_sep: @ { \if_case:w #1 \exp_stop_f: \__fp_case_return_same_o:w @@ -18748,11 +18932,11 @@ Type H <return> for immediate help}\def~{\errmessage{% \or: \exp_after:wN \__fp_sign_aux_o:w \else: \__fp_case_return_same_o:w \fi: - \s__fp \__fp_chk:w #1 #2; + \s__fp \__fp_chk:w #1 #2\__fp_sep: } -\cs_new:Npn \__fp_sign_aux_o:w \s__fp \__fp_chk:w #1 #2 #3 ; +\cs_new:Npn \__fp_sign_aux_o:w \s__fp \__fp_chk:w #1 #2 #3 \__fp_sep: { \exp_after:wN \__fp_set_sign_o:w \exp_after:wN #2 \c_one_fp @ } -\cs_new:Npn \__fp_set_sign_o:w #1 \s__fp \__fp_chk:w #2#3#4; @ +\cs_new:Npn \__fp_set_sign_o:w #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: @ { \exp_after:wN \__fp_exp_after_o:w \exp_after:wN \s__fp @@ -18760,7 +18944,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN #2 \int_value:w \if_case:w #3 \exp_stop_f: #1 \or: 1 \or: 0 \fi: \exp_stop_f: - #4; + #4\__fp_sep: } \cs_new:Npn \__fp_tuple_set_sign_o:w #1#2 @ { @@ -18772,53 +18956,60 @@ Type H <return> for immediate help}\def~{\errmessage{% } \cs_new:Npn \__fp_tuple_set_sign_aux_o:Nnw #1#2 { \__fp_tuple_map_o:nw \__fp_tuple_set_sign_aux_o:w } -\cs_new:Npn \__fp_tuple_set_sign_aux_o:w #1#2 ; +\cs_new:Npn \__fp_tuple_set_sign_aux_o:w #1#2 \__fp_sep: { \__fp_change_func_type:NNN #1 \__fp_set_sign_o:w \__fp_parse_apply_unary_error:NNw - 2 #1 #2 ; @ - } -\cs_new:cpn { __fp_*_tuple_o:ww } #1 ; - { \__fp_tuple_map_o:nw { \__fp_binary_type_o:Nww * #1 ; } } -\cs_new:cpn { __fp_tuple_*_o:ww } #1 ; #2 ; - { \__fp_tuple_map_o:nw { \__fp_binary_rev_type_o:Nww * #2 ; } #1 ; } -\cs_new:cpn { __fp_tuple_/_o:ww } #1 ; #2 ; - { \__fp_tuple_map_o:nw { \__fp_binary_rev_type_o:Nww / #2 ; } #1 ; } + 2 #1 #2 \__fp_sep: @ + } +\cs_new:cpn { __fp_*_tuple_o:ww } #1 \__fp_sep: + { \__fp_tuple_map_o:nw { \__fp_binary_type_o:Nww * #1 \__fp_sep: } } +\cs_new:cpn { __fp_tuple_*_o:ww } #1 \__fp_sep: #2 \__fp_sep: + { + \__fp_tuple_map_o:nw { \__fp_binary_rev_type_o:Nww * #2 \__fp_sep: } + #1 \__fp_sep: + } +\cs_new:cpn { __fp_tuple_/_o:ww } #1 \__fp_sep: #2 \__fp_sep: + { + \__fp_tuple_map_o:nw { \__fp_binary_rev_type_o:Nww / #2 \__fp_sep: } + #1 \__fp_sep: + } \cs_set_protected:Npn \__fp_tmp:w #1 { \cs_new:cpn { __fp_tuple_#1_tuple_o:ww } - \s__fp_tuple \__fp_tuple_chk:w ##1 ; - \s__fp_tuple \__fp_tuple_chk:w ##2 ; + \s__fp_tuple \__fp_tuple_chk:w ##1 \__fp_sep: + \s__fp_tuple \__fp_tuple_chk:w ##2 \__fp_sep: { \int_compare:nNnTF { \__fp_array_count:n {##1} } = { \__fp_array_count:n {##2} } { \__fp_tuple_mapthread_o:nww { \__fp_binary_type_o:Nww #1 } } { \__fp_invalid_operation_o:nww #1 } - \s__fp_tuple \__fp_tuple_chk:w {##1} ; - \s__fp_tuple \__fp_tuple_chk:w {##2} ; + \s__fp_tuple \__fp_tuple_chk:w {##1} \__fp_sep: + \s__fp_tuple \__fp_tuple_chk:w {##2} \__fp_sep: } } \__fp_tmp:w + \__fp_tmp:w - %% File: l3fp-extended.dtx \tl_const:Nn \c__fp_one_fixed_tl - { {10000} {0000} {0000} {0000} {0000} {0000} ; } -\cs_new:Npn \__fp_fixed_continue:wn #1; #2 { #2 #1; } -\cs_new:Npn \__fp_fixed_add_one:wN #1#2; #3 + { {10000} {0000} {0000} {0000} {0000} {0000} \__fp_sep: } +\cs_new:Npn \__fp_fixed_continue:wn #1\__fp_sep: #2 { #2 #1\__fp_sep: } +\cs_new:Npn \__fp_fixed_add_one:wN #1#2\__fp_sep: #3 { \exp_after:wN #3 \exp_after:wN - { \int_value:w \__fp_int_eval:w \c__fp_myriad_int + #1 } #2 ; + { \int_value:w \__fp_int_eval:w \c__fp_myriad_int + #1 } #2 \__fp_sep: } -\cs_new:Npn \__fp_fixed_div_myriad:wn #1#2#3#4#5#6; +\cs_new:Npn \__fp_fixed_div_myriad:wn #1#2#3#4#5#6\__fp_sep: { \exp_after:wN \__fp_fixed_mul_after:wwn \int_value:w \__fp_int_eval:w \c__fp_leading_shift_int \exp_after:wN \__fp_pack:NNNNNw \int_value:w \__fp_int_eval:w \c__fp_trailing_shift_int - + #1 ; {#2}{#3}{#4}{#5}; + + #1 \__fp_sep: {#2}{#3}{#4}{#5}\__fp_sep: } -\cs_new:Npn \__fp_fixed_mul_after:wwn #1; #2; #3 { #3 {#1} #2; } -\cs_new:Npn \__fp_fixed_mul_short:wwn #1#2#3#4#5#6; #7#8#9; +\cs_new:Npn \__fp_fixed_mul_after:wwn #1\__fp_sep: #2\__fp_sep: #3 + { #3 {#1} #2\__fp_sep: } +\cs_new:Npn \__fp_fixed_mul_short:wwn #1#2#3#4#5#6\__fp_sep: #7#8#9\__fp_sep: { \exp_after:wN \__fp_fixed_mul_after:wwn \int_value:w \__fp_int_eval:w \c__fp_leading_shift_int @@ -18839,29 +19030,29 @@ Type H <return> for immediate help}\def~{\errmessage{% \int_value:w \__fp_int_eval:w \c__fp_trailing_shift_int + #4*#9 + #5*#8 + #6*#7 + ( #5*#9 + #6*#8 + #6*#9 / \c__fp_myriad_int ) - / \c__fp_myriad_int ; ; + / \c__fp_myriad_int \__fp_sep: \__fp_sep: } -\cs_new:Npn \__fp_fixed_div_int:wwN #1#2#3#4#5#6 ; #7 ; #8 +\cs_new:Npn \__fp_fixed_div_int:wwN #1#2#3#4#5#6 \__fp_sep: #7 \__fp_sep: #8 { \exp_after:wN \__fp_fixed_div_int_after:Nw \exp_after:wN #8 \int_value:w \__fp_int_eval:w - 1 \__fp_fixed_div_int:wnN - #1; {#7} \__fp_fixed_div_int_auxi:wnn - #2; {#7} \__fp_fixed_div_int_auxi:wnn - #3; {#7} \__fp_fixed_div_int_auxi:wnn - #4; {#7} \__fp_fixed_div_int_auxi:wnn - #5; {#7} \__fp_fixed_div_int_auxi:wnn - #6; {#7} \__fp_fixed_div_int_auxii:wnn ; + #1\__fp_sep: {#7} \__fp_fixed_div_int_auxi:wnn + #2\__fp_sep: {#7} \__fp_fixed_div_int_auxi:wnn + #3\__fp_sep: {#7} \__fp_fixed_div_int_auxi:wnn + #4\__fp_sep: {#7} \__fp_fixed_div_int_auxi:wnn + #5\__fp_sep: {#7} \__fp_fixed_div_int_auxi:wnn + #6\__fp_sep: {#7} \__fp_fixed_div_int_auxii:wnn \__fp_sep: } -\cs_new:Npn \__fp_fixed_div_int:wnN #1; #2 #3 +\cs_new:Npn \__fp_fixed_div_int:wnN #1\__fp_sep: #2 #3 { \exp_after:wN #3 - \int_value:w \__fp_int_eval:w #1 / #2 - 1 ; + \int_value:w \__fp_int_eval:w #1 / #2 - 1 \__fp_sep: {#2} {#1} } -\cs_new:Npn \__fp_fixed_div_int_auxi:wnn #1; #2 #3 +\cs_new:Npn \__fp_fixed_div_int_auxi:wnn #1\__fp_sep: #2 #3 { + #1 \exp_after:wN \__fp_fixed_div_int_pack:Nw @@ -18869,12 +19060,12 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_fixed_div_int:wnN \int_value:w \__fp_int_eval:w #3 - #1*#2 \__fp_int_eval_end: } -\cs_new:Npn \__fp_fixed_div_int_auxii:wnn #1; #2 #3 { + #1 + 2 ; } -\cs_new:Npn \__fp_fixed_div_int_pack:Nw #1 #2; { + #1; {#2} } -\cs_new:Npn \__fp_fixed_div_int_after:Nw #1 #2; { #1 {#2} } +\cs_new:Npn \__fp_fixed_div_int_auxii:wnn #1\__fp_sep: #2 #3 { + #1 + 2 \__fp_sep: } +\cs_new:Npn \__fp_fixed_div_int_pack:Nw #1 #2\__fp_sep: { + #1\__fp_sep: {#2} } +\cs_new:Npn \__fp_fixed_div_int_after:Nw #1 #2\__fp_sep: { #1 {#2} } \cs_new:Npn \__fp_fixed_add:wwn { \__fp_fixed_add:Nnnnnwnn + } \cs_new:Npn \__fp_fixed_sub:wwn { \__fp_fixed_add:Nnnnnwnn - } -\cs_new:Npn \__fp_fixed_add:Nnnnnwnn #1 #2#3#4#5 #6; #7#8 +\cs_new:Npn \__fp_fixed_add:Nnnnnwnn #1 #2#3#4#5 #6\__fp_sep: #7#8 { \exp_after:wN \__fp_fixed_add_after:NNNNNwn \int_value:w \__fp_int_eval:w 9 9999 9998 + #2#3 #1 #7#8 @@ -18882,17 +19073,18 @@ Type H <return> for immediate help}\def~{\errmessage{% \int_value:w \__fp_int_eval:w 1 9999 9998 + #4#5 \__fp_fixed_add:nnNnnnwn #6 #1 } -\cs_new:Npn \__fp_fixed_add:nnNnnnwn #1#2 #3 #4#5 #6#7 ; #8 +\cs_new:Npn \__fp_fixed_add:nnNnnnwn #1#2 #3 #4#5 #6#7 \__fp_sep: #8 { #3 #4#5 \exp_after:wN \__fp_fixed_add_pack:NNNNNwn - \int_value:w \__fp_int_eval:w 2 0000 0000 #3 #6#7 + #1#2 ; {#8} ; + \int_value:w \__fp_int_eval:w + 2 0000 0000 #3 #6#7 + #1#2 \__fp_sep: {#8} \__fp_sep: } -\cs_new:Npn \__fp_fixed_add_pack:NNNNNwn #1 #2#3#4#5 #6; #7 - { + #1 ; {#7} {#2#3#4#5} {#6} } -\cs_new:Npn \__fp_fixed_add_after:NNNNNwn 1 #1 #2#3#4#5 #6; #7 +\cs_new:Npn \__fp_fixed_add_pack:NNNNNwn #1 #2#3#4#5 #6\__fp_sep: #7 + { + #1 \__fp_sep: {#7} {#2#3#4#5} {#6} } +\cs_new:Npn \__fp_fixed_add_after:NNNNNwn 1 #1 #2#3#4#5 #6\__fp_sep: #7 { #7 {#1#2#3#4#5} {#6} } -\cs_new:Npn \__fp_fixed_mul:wwn #1#2#3#4 #5; #6#7#8#9 +\cs_new:Npn \__fp_fixed_mul:wwn #1#2#3#4 #5\__fp_sep: #6#7#8#9 { \exp_after:wN \__fp_fixed_mul_after:wwn \int_value:w \__fp_int_eval:w \c__fp_leading_shift_int @@ -18914,32 +19106,33 @@ Type H <return> for immediate help}\def~{\errmessage{% + ( #3*#9 + #4*#8 + \__fp_fixed_mul:nnnnnnnw #5 {#6}{#7} {#1}{#2} } -\cs_new:Npn \__fp_fixed_mul:nnnnnnnw #1#2 #3#4 #5#6 #7#8 ; +\cs_new:Npn \__fp_fixed_mul:nnnnnnnw #1#2 #3#4 #5#6 #7#8 \__fp_sep: { #1*#4 + #2*#3 + #5*#8 + #6*#7 ) / \c__fp_myriad_int - + #1*#3 + #5*#7 ; ; + + #1*#3 + #5*#7 \__fp_sep: \__fp_sep: } -\cs_new:Npn \__fp_fixed_mul_add:wwwn #1; #2; #3#4#5#6#7#8; +\cs_new:Npn \__fp_fixed_mul_add:wwwn #1\__fp_sep: #2\__fp_sep: #3#4#5#6#7#8\__fp_sep: { \exp_after:wN \__fp_fixed_mul_after:wwn \int_value:w \__fp_int_eval:w \c__fp_big_leading_shift_int \exp_after:wN \__fp_pack_big:NNNNNNw \int_value:w \__fp_int_eval:w \c__fp_big_middle_shift_int + #3 #4 \__fp_fixed_mul_add:Nwnnnwnnn + - + #5 #6 ; #2 ; #1 ; #2 ; + - + #7 #8 ; ; + + #5 #6 \__fp_sep: #2 \__fp_sep: #1 \__fp_sep: #2 \__fp_sep: + + + #7 #8 \__fp_sep: \__fp_sep: } -\cs_new:Npn \__fp_fixed_mul_sub_back:wwwn #1; #2; #3#4#5#6#7#8; +\cs_new:Npn \__fp_fixed_mul_sub_back:wwwn + #1\__fp_sep: #2\__fp_sep: #3#4#5#6#7#8\__fp_sep: { \exp_after:wN \__fp_fixed_mul_after:wwn \int_value:w \__fp_int_eval:w \c__fp_big_leading_shift_int \exp_after:wN \__fp_pack_big:NNNNNNw \int_value:w \__fp_int_eval:w \c__fp_big_middle_shift_int + #3 #4 \__fp_fixed_mul_add:Nwnnnwnnn - - + #5 #6 ; #2 ; #1 ; #2 ; - - + #7 #8 ; ; + + #5 #6 \__fp_sep: #2 \__fp_sep: #1 \__fp_sep: #2 \__fp_sep: - + + #7 #8 \__fp_sep: \__fp_sep: } -\cs_new:Npn \__fp_fixed_one_minus_mul:wwn #1; #2; +\cs_new:Npn \__fp_fixed_one_minus_mul:wwn #1\__fp_sep: #2\__fp_sep: { \exp_after:wN \__fp_fixed_mul_after:wwn \int_value:w \__fp_int_eval:w \c__fp_big_leading_shift_int @@ -18947,10 +19140,10 @@ Type H <return> for immediate help}\def~{\errmessage{% \int_value:w \__fp_int_eval:w \c__fp_big_middle_shift_int + 1 0000 0000 \__fp_fixed_mul_add:Nwnnnwnnn - - ; #2 ; #1 ; #2 ; - - ; ; + \__fp_sep: #2 \__fp_sep: #1 \__fp_sep: #2 \__fp_sep: - + \__fp_sep: \__fp_sep: } -\cs_new:Npn \__fp_fixed_mul_add:Nwnnnwnnn #1 #2; #3#4#5#6; #7#8#9 +\cs_new:Npn \__fp_fixed_mul_add:Nwnnnwnnn #1 #2\__fp_sep: #3#4#5#6\__fp_sep: #7#8#9 { #1 #7*#3 \exp_after:wN \__fp_pack_big:NNNNNNw @@ -18963,7 +19156,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \int_value:w \__fp_int_eval:w \c__fp_big_middle_shift_int #1 \__fp_fixed_mul_add:nnnnwnnnn {#7}{#8}{#9} } -\cs_new:Npn \__fp_fixed_mul_add:nnnnwnnnn #1#2#3#4#5; #6#7#8#9 +\cs_new:Npn \__fp_fixed_mul_add:nnnnwnnnn #1#2#3#4#5\__fp_sep: #6#7#8#9 { ( #1*#9 + #2*#8 + #3*#7 + #4*#6 ) \exp_after:wN \__fp_pack_big:NNNNNNw @@ -18971,10 +19164,10 @@ Type H <return> for immediate help}\def~{\errmessage{% \__fp_fixed_mul_add:nnnnwnnwN { #6 + #4*#7 + #3*#8 + #2*#9 + #1 } { #7 + #4*#8 + #3*#9 + #2 } - {#1} #5; + {#1} #5\__fp_sep: {#6} } -\cs_new:Npn \__fp_fixed_mul_add:nnnnwnnwN #1#2 #3#4#5; #6#7#8; #9 +\cs_new:Npn \__fp_fixed_mul_add:nnnnwnnwN #1#2 #3#4#5\__fp_sep: #6#7#8\__fp_sep: #9 { #9 (#4* #1 *#7) #9 (#5*#6+#4* #2 *#7+#3*#8) / \c__fp_myriad_int @@ -18982,29 +19175,30 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs_new:Npn \__fp_ep_to_fixed:wwn #1,#2 { \exp_after:wN \__fp_ep_to_fixed_auxi:www - \int_value:w \__fp_int_eval:w 1 0000 0000 + #2 \exp_after:wN ; + \int_value:w \__fp_int_eval:w 1 0000 0000 + #2 \exp_after:wN \__fp_sep: \exp:w \exp_end_continue_f:w - \prg_replicate:nn { 4 - \int_max:nn {#1} { -32 } } { 0 } ; + \prg_replicate:nn { 4 - \int_max:nn {#1} { -32 } } { 0 } \__fp_sep: } -\cs_new:Npn \__fp_ep_to_fixed_auxi:www 1#1; #2; #3#4#5#6#7; +\cs_new:Npn \__fp_ep_to_fixed_auxi:www + 1#1\__fp_sep: #2\__fp_sep: #3#4#5#6#7\__fp_sep: { \__fp_pack_eight:wNNNNNNNN \__fp_pack_twice_four:wNNNNNNNN \__fp_pack_twice_four:wNNNNNNNN \__fp_pack_twice_four:wNNNNNNNN - \__fp_ep_to_fixed_auxii:nnnnnnnwn ; + \__fp_ep_to_fixed_auxii:nnnnnnnwn \__fp_sep: #2 #1#3#4#5#6#7 0000 ! } -\cs_new:Npn \__fp_ep_to_fixed_auxii:nnnnnnnwn #1#2#3#4#5#6#7; #8! #9 - { #9 {#1#2}{#3}{#4}{#5}{#6}{#7}; } -\cs_new:Npn \__fp_ep_to_ep:wwN #1,#2#3#4#5#6#7; #8 +\cs_new:Npn \__fp_ep_to_fixed_auxii:nnnnnnnwn #1#2#3#4#5#6#7\__fp_sep: #8! #9 + { #9 {#1#2}{#3}{#4}{#5}{#6}{#7}\__fp_sep: } +\cs_new:Npn \__fp_ep_to_ep:wwN #1,#2#3#4#5#6#7\__fp_sep: #8 { \exp_after:wN #8 \int_value:w \__fp_int_eval:w #1 + 4 \exp_after:wN \use_i:nn \exp_after:wN \__fp_ep_to_ep_loop:N \int_value:w \__fp_int_eval:w 1 0000 0000 + #2 \__fp_int_eval_end: - #3#4#5#6#7 ; ; ! + #3#4#5#6#7 \__fp_sep: \__fp_sep: ! } \cs_new:Npn \__fp_ep_to_ep_loop:N #1 { @@ -19016,27 +19210,29 @@ Type H <return> for immediate help}\def~{\errmessage{% \__fp_ep_to_ep_loop:N } \cs_new:Npn \__fp_ep_to_ep_end:www - #1 \fi: \__fp_ep_to_ep_loop:N #2; #3! + #1 \fi: \__fp_ep_to_ep_loop:N #2\__fp_sep: #3! { \fi: - \if_meaning:w ; #1 + \if_meaning:w \__fp_sep: #1 - 2 * \c__fp_max_exponent_int \__fp_ep_to_ep_zero:ww \fi: \__fp_pack_twice_four:wNNNNNNNN \__fp_pack_twice_four:wNNNNNNNN \__fp_pack_twice_four:wNNNNNNNN - \__fp_use_i:ww , ; - #1 #2 0000 0000 0000 0000 0000 0000 ; + \__fp_use_i:ww , \__fp_sep: + #1 #2 0000 0000 0000 0000 0000 0000 \__fp_sep: } -\cs_new:Npn \__fp_ep_to_ep_zero:ww \fi: #1; #2; #3; - { \fi: , {1000}{0000}{0000}{0000}{0000}{0000} ; } -\cs_new:Npn \__fp_ep_compare:wwww #1,#2#3#4#5#6#7; - { \__fp_ep_compare_aux:wwww {#1}{#2}{#3}{#4}{#5}; #6#7; } -\cs_new:Npn \__fp_ep_compare_aux:wwww #1;#2;#3,#4#5#6#7#8#9; +\cs_new:Npn \__fp_ep_to_ep_zero:ww \fi: #1\__fp_sep: #2\__fp_sep: #3\__fp_sep: + { \fi: , {1000}{0000}{0000}{0000}{0000}{0000} \__fp_sep: } +\cs_new:Npn \__fp_ep_compare:wwww #1,#2#3#4#5#6#7\__fp_sep: + { \__fp_ep_compare_aux:wwww {#1}{#2}{#3}{#4}{#5}\__fp_sep: #6#7\__fp_sep: } +\cs_new:Npn \__fp_ep_compare_aux:wwww + #1\__fp_sep:#2\__fp_sep:#3,#4#5#6#7#8#9\__fp_sep: { \if_case:w - \__fp_compare_npos:nwnw #1; {#3}{#4}{#5}{#6}{#7}; \exp_stop_f: + \__fp_compare_npos:nwnw + #1\__fp_sep: {#3}{#4}{#5}{#6}{#7}\__fp_sep: \exp_stop_f: \if_int_compare:w #2 = #8#9 \exp_stop_f: 0 \else: @@ -19046,77 +19242,79 @@ Type H <return> for immediate help}\def~{\errmessage{% \else: -1 \fi: } -\cs_new:Npn \__fp_ep_mul:wwwwn #1,#2; #3,#4; +\cs_new:Npn \__fp_ep_mul:wwwwn #1,#2\__fp_sep: #3,#4\__fp_sep: { - \__fp_ep_to_ep:wwN #3,#4; + \__fp_ep_to_ep:wwN #3,#4\__fp_sep: \__fp_fixed_continue:wn { - \__fp_ep_to_ep:wwN #1,#2; + \__fp_ep_to_ep:wwN #1,#2\__fp_sep: \__fp_ep_mul_raw:wwwwN } \__fp_fixed_continue:wn } -\cs_new:Npn \__fp_ep_mul_raw:wwwwN #1,#2; #3,#4; #5 +\cs_new:Npn \__fp_ep_mul_raw:wwwwN #1,#2\__fp_sep: #3,#4\__fp_sep: #5 { - \__fp_fixed_mul:wwn #2; #4; + \__fp_fixed_mul:wwn #2\__fp_sep: #4\__fp_sep: { \exp_after:wN #5 \int_value:w \__fp_int_eval:w #1 + #3 , } } -\cs_new:Npn \__fp_ep_div:wwwwn #1,#2; #3,#4; +\cs_new:Npn \__fp_ep_div:wwwwn #1,#2\__fp_sep: #3,#4\__fp_sep: { - \__fp_ep_to_ep:wwN #1,#2; + \__fp_ep_to_ep:wwN #1,#2\__fp_sep: \__fp_fixed_continue:wn { - \__fp_ep_to_ep:wwN #3,#4; + \__fp_ep_to_ep:wwN #3,#4\__fp_sep: \__fp_ep_div_esti:wwwwn } } -\cs_new:Npn \__fp_ep_div_esti:wwwwn #1,#2#3; #4, +\cs_new:Npn \__fp_ep_div_esti:wwwwn #1,#2#3\__fp_sep: #4, { \exp_after:wN \__fp_ep_div_estii:wwnnwwn \int_value:w \__fp_int_eval:w 10 0000 0000 / ( #2 + 1 ) - \exp_after:wN ; + \exp_after:wN \__fp_sep: \int_value:w \__fp_int_eval:w #4 - #1 + 1 , - {#2} #3; + {#2} #3\__fp_sep: } -\cs_new:Npn \__fp_ep_div_estii:wwnnwwn #1; #2,#3#4#5; #6; #7 +\cs_new:Npn \__fp_ep_div_estii:wwnnwwn + #1\__fp_sep: #2,#3#4#5\__fp_sep: #6\__fp_sep: #7 { \exp_after:wN \__fp_ep_div_estiii:NNNNNwwwn \int_value:w \__fp_int_eval:w 10 0000 0000 - 1750 - + #1 000 + (10 0000 0000 / #3 - #1) * (1000 - #4 / 10) ; - {#3}{#4}#5; #6; { #7 #2, } + + #1 000 + (10 0000 0000 / #3 - #1) * (1000 - #4 / 10) \__fp_sep: + {#3}{#4}#5\__fp_sep: #6\__fp_sep: { #7 #2, } } -\cs_new:Npn \__fp_ep_div_estiii:NNNNNwwwn 1#1#2#3#4#5#6; #7; +\cs_new:Npn \__fp_ep_div_estiii:NNNNNwwwn 1#1#2#3#4#5#6\__fp_sep: #7\__fp_sep: { - \__fp_fixed_mul_short:wwn #7; {#1}{#2#3#4#5}{#6}; + \__fp_fixed_mul_short:wwn #7\__fp_sep: {#1}{#2#3#4#5}{#6}\__fp_sep: \__fp_ep_div_epsi:wnNNNNNn {#1#2#3#4}#5#6 \__fp_fixed_mul:wwn } -\cs_new:Npn \__fp_ep_div_epsi:wnNNNNNn #1#2#3#4#5#6; +\cs_new:Npn \__fp_ep_div_epsi:wnNNNNNn #1#2#3#4#5#6\__fp_sep: { \exp_after:wN \__fp_ep_div_epsii:wwnNNNNNn \int_value:w \__fp_int_eval:w 1 9998 - #2 \exp_after:wN \__fp_ep_div_eps_pack:NNNNNw \int_value:w \__fp_int_eval:w 1 9999 9998 - #3#4 \exp_after:wN \__fp_ep_div_eps_pack:NNNNNw - \int_value:w \__fp_int_eval:w 2 0000 0000 - #5#6 ; ; + \int_value:w \__fp_int_eval:w 2 0000 0000 - #5#6 \__fp_sep: \__fp_sep: } -\cs_new:Npn \__fp_ep_div_eps_pack:NNNNNw #1#2#3#4#5#6; - { + #1 ; {#2#3#4#5} {#6} } -\cs_new:Npn \__fp_ep_div_epsii:wwnNNNNNn 1#1; #2; #3#4#5#6#7#8 +\cs_new:Npn \__fp_ep_div_eps_pack:NNNNNw #1#2#3#4#5#6\__fp_sep: + { + #1 \__fp_sep: {#2#3#4#5} {#6} } +\cs_new:Npn \__fp_ep_div_epsii:wwnNNNNNn 1#1\__fp_sep: #2\__fp_sep: #3#4#5#6#7#8 { - \__fp_fixed_mul:wwn {0000}{#1}#2; {0000}{#1}#2; + \__fp_fixed_mul:wwn {0000}{#1}#2\__fp_sep: {0000}{#1}#2\__fp_sep: \__fp_fixed_add_one:wN - \__fp_fixed_mul:wwn {10000} {#1} #2 ; + \__fp_fixed_mul:wwn {10000} {#1} #2 \__fp_sep: { - \__fp_fixed_mul_short:wwn {0000}{#1}#2; {#3}{#4#5#6#7}{#8000}; + \__fp_fixed_mul_short:wwn + {0000}{#1}#2\__fp_sep: {#3}{#4#5#6#7}{#8000}\__fp_sep: \__fp_fixed_div_myriad:wn \__fp_fixed_mul:wwn } - \__fp_fixed_add:wwn {#3}{#4#5#6#7}{#8000}{0000}{0000}{0000}; + \__fp_fixed_add:wwn {#3}{#4#5#6#7}{#8000}{0000}{0000}{0000}\__fp_sep: } -\cs_new:Npn \__fp_ep_isqrt:wwn #1,#2; +\cs_new:Npn \__fp_ep_isqrt:wwn #1,#2\__fp_sep: { - \__fp_ep_to_ep:wwN #1,#2; + \__fp_ep_to_ep:wwN #1,#2\__fp_sep: \__fp_ep_isqrt_auxi:wwn } \cs_new:Npn \__fp_ep_isqrt_auxi:wwn #1, @@ -19127,10 +19325,10 @@ Type H <return> for immediate help}\def~{\errmessage{% { (1 - #1) / 2 , 535 , { 0 } { } } { 1 - #1 / 2 , 168 , { } { 0 } } } -\cs_new:Npn \__fp_ep_isqrt_auxii:wwnnnwn #1, #2, #3#4 #5#6; #7 +\cs_new:Npn \__fp_ep_isqrt_auxii:wwnnnwn #1, #2, #3#4 #5#6\__fp_sep: #7 { \__fp_ep_isqrt_esti:wwwnnwn #2, 0, #5, {#3} {#4} - {#5} #6 ; { #7 #1 , } + {#5} #6 \__fp_sep: { #7 #1 , } } \cs_new:Npn \__fp_ep_isqrt_esti:wwwnnwn #1, #2, #3, #4 { @@ -19146,45 +19344,47 @@ Type H <return> for immediate help}\def~{\errmessage{% { \exp_after:wN \__fp_ep_isqrt_estiii:NNNNNwwwn \int_value:w \__fp_int_eval:w 1000 0000 + #2 * #2 #5 * 5 - \exp_after:wN , \int_value:w \__fp_int_eval:w 10000 + #2 ; + \exp_after:wN , \int_value:w \__fp_int_eval:w 10000 + #2 \__fp_sep: } -\cs_new:Npn \__fp_ep_isqrt_estiii:NNNNNwwwn 1#1#2#3#4#5#6, 1#7#8; #9; +\cs_new:Npn \__fp_ep_isqrt_estiii:NNNNNwwwn + 1#1#2#3#4#5#6, 1#7#8\__fp_sep: #9\__fp_sep: { - \__fp_fixed_mul_short:wwn #9; {#1} {#2#3#4#5} {#600} ; + \__fp_fixed_mul_short:wwn #9\__fp_sep: {#1} {#2#3#4#5} {#600} \__fp_sep: \__fp_ep_isqrt_epsi:wN - \__fp_fixed_mul_short:wwn {#7} {#80} {0000} ; + \__fp_fixed_mul_short:wwn {#7} {#80} {0000} \__fp_sep: } -\cs_new:Npn \__fp_ep_isqrt_epsi:wN #1; +\cs_new:Npn \__fp_ep_isqrt_epsi:wN #1\__fp_sep: { - \__fp_fixed_sub:wwn {15000}{0000}{0000}{0000}{0000}{0000}; #1; - \__fp_ep_isqrt_epsii:wwN #1; - \__fp_ep_isqrt_epsii:wwN #1; - \__fp_ep_isqrt_epsii:wwN #1; + \__fp_fixed_sub:wwn {15000}{0000}{0000}{0000}{0000}{0000}\__fp_sep: #1\__fp_sep: + \__fp_ep_isqrt_epsii:wwN #1\__fp_sep: + \__fp_ep_isqrt_epsii:wwN #1\__fp_sep: + \__fp_ep_isqrt_epsii:wwN #1\__fp_sep: } -\cs_new:Npn \__fp_ep_isqrt_epsii:wwN #1; #2; +\cs_new:Npn \__fp_ep_isqrt_epsii:wwN #1\__fp_sep: #2\__fp_sep: { - \__fp_fixed_mul:wwn #1; #1; - \__fp_fixed_mul_sub_back:wwwn #2; - {15000}{0000}{0000}{0000}{0000}{0000}; - \__fp_fixed_mul:wwn #1; + \__fp_fixed_mul:wwn #1\__fp_sep: #1\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn #2\__fp_sep: + {15000}{0000}{0000}{0000}{0000}{0000}\__fp_sep: + \__fp_fixed_mul:wwn #1\__fp_sep: } \cs_new:Npn \__fp_ep_to_float_o:wwN #1, { + \__fp_int_eval:w #1 \__fp_fixed_to_float_o:wN } -\cs_new:Npn \__fp_ep_inv_to_float_o:wwN #1,#2; +\cs_new:Npn \__fp_ep_inv_to_float_o:wwN #1,#2\__fp_sep: { - \__fp_ep_div:wwwwn 1,{1000}{0000}{0000}{0000}{0000}{0000}; #1,#2; + \__fp_ep_div:wwwwn + 1,{1000}{0000}{0000}{0000}{0000}{0000}\__fp_sep: #1,#2\__fp_sep: \__fp_ep_to_float_o:wwN } \cs_new:Npn \__fp_fixed_inv_to_float_o:wN { \__fp_ep_inv_to_float_o:wwN 0, } -\cs_new:Npn \__fp_fixed_to_float_rad_o:wN #1; +\cs_new:Npn \__fp_fixed_to_float_rad_o:wN #1\__fp_sep: { - \__fp_fixed_mul:wwn #1; {5729}{5779}{5130}{8232}{0876}{7981}; + \__fp_fixed_mul:wwn #1\__fp_sep: {5729}{5779}{5130}{8232}{0876}{7981}\__fp_sep: { \__fp_ep_to_float_o:wwN 2, } } -\cs_new:Npn \__fp_fixed_to_float_o:Nw #1#2; - { \__fp_fixed_to_float_o:wN #2; #1 } -\cs_new:Npn \__fp_fixed_to_float_o:wN #1#2#3#4#5#6; #7 +\cs_new:Npn \__fp_fixed_to_float_o:Nw #1#2\__fp_sep: + { \__fp_fixed_to_float_o:wN #2\__fp_sep: #1 } +\cs_new:Npn \__fp_fixed_to_float_o:wN #1#2#3#4#5#6\__fp_sep: #7 { % for the 8-digit-at-the-start thing + \__fp_int_eval:w \c__fp_block_int \exp_after:wN \exp_after:wN @@ -19195,8 +19395,8 @@ Type H <return> for immediate help}\def~{\errmessage{% \int_value:w 1#2 \exp_after:wN \__fp_use_none_stop_f:n \int_value:w 1#3#4 \exp_after:wN \__fp_use_none_stop_f:n \int_value:w 1#5#6 - \exp_after:wN ; - \exp_after:wN ; + \exp_after:wN \__fp_sep: + \exp_after:wN \__fp_sep: } \cs_new:Npn \__fp_fixed_to_loop:N #1 { @@ -19208,36 +19408,36 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN #1 \fi: } -\cs_new:Npn \__fp_fixed_to_loop_end:w #1 #2 ; +\cs_new:Npn \__fp_fixed_to_loop_end:w #1 #2 \__fp_sep: { - \if_meaning:w ; #1 + \if_meaning:w \__fp_sep: #1 \exp_after:wN \__fp_fixed_to_float_zero:w \else: \exp_after:wN \__fp_pack_twice_four:wNNNNNNNN \exp_after:wN \__fp_pack_twice_four:wNNNNNNNN \exp_after:wN \__fp_fixed_to_float_pack:ww - \exp_after:wN ; + \exp_after:wN \__fp_sep: \fi: - #1 #2 0000 0000 0000 0000 ; + #1 #2 0000 0000 0000 0000 \__fp_sep: } -\cs_new:Npn \__fp_fixed_to_float_zero:w ; 0000 0000 0000 0000 ; +\cs_new:Npn \__fp_fixed_to_float_zero:w \__fp_sep: 0000 0000 0000 0000 \__fp_sep: { - - 2 * \c__fp_max_exponent_int ; - {0000} {0000} {0000} {0000} ; + - 2 * \c__fp_max_exponent_int \__fp_sep: + {0000} {0000} {0000} {0000} \__fp_sep: } -\cs_new:Npn \__fp_fixed_to_float_pack:ww #1 ; #2#3 ; ; +\cs_new:Npn \__fp_fixed_to_float_pack:ww #1 \__fp_sep: #2#3 \__fp_sep: \__fp_sep: { \if_int_compare:w #2 > 4 \exp_stop_f: \exp_after:wN \__fp_fixed_to_float_round_up:wnnnnw \fi: - ; #1 ; + \__fp_sep: #1 \__fp_sep: } -\cs_new:Npn \__fp_fixed_to_float_round_up:wnnnnw ; #1#2#3#4 ; +\cs_new:Npn \__fp_fixed_to_float_round_up:wnnnnw \__fp_sep: #1#2#3#4 \__fp_sep: { \exp_after:wN \__fp_basics_pack_high:NNNNNw \int_value:w \__fp_int_eval:w 1 #1#2 \exp_after:wN \__fp_basics_pack_low:NNNNNw - \int_value:w \__fp_int_eval:w 1 #3#4 + 1 ; + \int_value:w \__fp_int_eval:w 1 #3#4 + 1 \__fp_sep: } %% File: l3fp-expo.dtx \cs_new:Npn \__fp_parse_word_exp:N @@ -19246,16 +19446,25 @@ Type H <return> for immediate help}\def~{\errmessage{% { \__fp_parse_unary_function:NNN \__fp_ln_o:w ? } \cs_new:Npn \__fp_parse_word_fact:N { \__fp_parse_unary_function:NNN \__fp_fact_o:w ? } -\tl_const:Nn \c__fp_ln_i_fixed_tl { {0000}{0000}{0000}{0000}{0000}{0000};} -\tl_const:Nn \c__fp_ln_ii_fixed_tl { {6931}{4718}{0559}{9453}{0941}{7232};} -\tl_const:Nn \c__fp_ln_iii_fixed_tl {{10986}{1228}{8668}{1096}{9139}{5245};} -\tl_const:Nn \c__fp_ln_iv_fixed_tl {{13862}{9436}{1119}{8906}{1883}{4464};} -\tl_const:Nn \c__fp_ln_vi_fixed_tl {{17917}{5946}{9228}{0550}{0081}{2477};} -\tl_const:Nn \c__fp_ln_vii_fixed_tl {{19459}{1014}{9055}{3133}{0510}{5353};} -\tl_const:Nn \c__fp_ln_viii_fixed_tl{{20794}{4154}{1679}{8359}{2825}{1696};} -\tl_const:Nn \c__fp_ln_ix_fixed_tl {{21972}{2457}{7336}{2193}{8279}{0490};} -\tl_const:Nn \c__fp_ln_x_fixed_tl {{23025}{8509}{2994}{0456}{8401}{7991};} -\cs_new:Npn \__fp_ln_o:w #1 \s__fp \__fp_chk:w #2#3#4; @ +\tl_const:Nn \c__fp_ln_i_fixed_tl + { {0000}{0000}{0000}{0000}{0000}{0000}\__fp_sep:} +\tl_const:Nn \c__fp_ln_ii_fixed_tl + { {6931}{4718}{0559}{9453}{0941}{7232}\__fp_sep:} +\tl_const:Nn \c__fp_ln_iii_fixed_tl + {{10986}{1228}{8668}{1096}{9139}{5245}\__fp_sep:} +\tl_const:Nn \c__fp_ln_iv_fixed_tl + {{13862}{9436}{1119}{8906}{1883}{4464}\__fp_sep:} +\tl_const:Nn \c__fp_ln_vi_fixed_tl + {{17917}{5946}{9228}{0550}{0081}{2477}\__fp_sep:} +\tl_const:Nn \c__fp_ln_vii_fixed_tl + {{19459}{1014}{9055}{3133}{0510}{5353}\__fp_sep:} +\tl_const:Nn \c__fp_ln_viii_fixed_tl + {{20794}{4154}{1679}{8359}{2825}{1696}\__fp_sep:} +\tl_const:Nn \c__fp_ln_ix_fixed_tl + {{21972}{2457}{7336}{2193}{8279}{0490}\__fp_sep:} +\tl_const:Nn \c__fp_ln_x_fixed_tl + {{23025}{8509}{2994}{0456}{8401}{7991}\__fp_sep:} +\cs_new:Npn \__fp_ln_o:w #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: @ { \if_meaning:w 2 #3 \__fp_case_use:nw { \__fp_invalid_operation_o:nw { ln } } @@ -19267,9 +19476,9 @@ Type H <return> for immediate help}\def~{\errmessage{% \else: \__fp_case_return_same_o:w \fi: - \__fp_ln_npos_o:w \s__fp \__fp_chk:w #2#3#4; + \__fp_ln_npos_o:w \s__fp \__fp_chk:w #2#3#4\__fp_sep: } -\cs_new:Npn \__fp_ln_npos_o:w \s__fp \__fp_chk:w 10#1#2#3; +\cs_new:Npn \__fp_ln_npos_o:w \s__fp \__fp_chk:w 10#1#2#3\__fp_sep: { %^^A todo: ln(1) should be "exact zero", not "underflow" \exp_after:wN \__fp_sanitize:Nw \int_value:w % for the overall sign @@ -19301,9 +19510,9 @@ Type H <return> for immediate help}\def~{\errmessage{% \or: 2 \else: 1 \fi: - ; { #1 #2 #3 #4 } + \__fp_sep: { #1 #2 #3 #4 } } -\cs_new:Npn \__fp_ln_x_ii:wnnnn #1; #2#3#4#5 +\cs_new:Npn \__fp_ln_x_ii:wnnnn #1\__fp_sep: #2#3#4#5 { \exp_after:wN \__fp_ln_div_after:Nw \cs:w c__fp_ln_ \__fp_int_to_roman:w #1 _fixed_tl \exp_after:wN \cs_end: @@ -19313,22 +19522,22 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_ln_x_iii_var:NNNNNw \int_value:w \__fp_int_eval:w 9999 9990 + #1*#2#3 + \exp_after:wN \__fp_ln_x_iii:NNNNNNw - \int_value:w \__fp_int_eval:w 10 0000 0000 + #1*#4#5 ; + \int_value:w \__fp_int_eval:w 10 0000 0000 + #1*#4#5 \__fp_sep: {20000} {0000} {0000} {0000} } %^^A todo: reoptimize (a generalization attempt failed). -\cs_new:Npn \__fp_ln_x_iii:NNNNNNw #1#2 #3#4#5#6 #7; - { #1#2; {#3#4#5#6} {#7} } -\cs_new:Npn \__fp_ln_x_iii_var:NNNNNw #1 #2#3#4#5 #6; +\cs_new:Npn \__fp_ln_x_iii:NNNNNNw #1#2 #3#4#5#6 #7\__fp_sep: + { #1#2\__fp_sep: {#3#4#5#6} {#7} } +\cs_new:Npn \__fp_ln_x_iii_var:NNNNNw #1 #2#3#4#5 #6\__fp_sep: { - #1#2#3#4#5 + 1 ; + #1#2#3#4#5 + 1 \__fp_sep: {#1#2#3#4#5} {#6} } -\cs_new:Npn \__fp_ln_x_iv:wnnnnnnnn #1; #2#3#4#5 #6#7#8#9 +\cs_new:Npn \__fp_ln_x_iv:wnnnnnnnn #1\__fp_sep: #2#3#4#5 #6#7#8#9 { \exp_after:wN \__fp_div_significand_pack:NNN \int_value:w \__fp_int_eval:w - \__fp_ln_div_i:w #1 ; - #6 #7 ; {#8} {#9} + \__fp_ln_div_i:w #1 \__fp_sep: + #6 #7 \__fp_sep: {#8} {#9} {#2} {#3} {#4} {#5} { \exp_after:wN \__fp_ln_div_ii:wwn \int_value:w #1 } { \exp_after:wN \__fp_ln_div_ii:wwn \int_value:w #1 } @@ -19336,25 +19545,27 @@ Type H <return> for immediate help}\def~{\errmessage{% { \exp_after:wN \__fp_ln_div_ii:wwn \int_value:w #1 } { \exp_after:wN \__fp_ln_div_vi:wwn \int_value:w #1 } } -\cs_new:Npn \__fp_ln_div_i:w #1; +\cs_new:Npn \__fp_ln_div_i:w #1\__fp_sep: { \exp_after:wN \__fp_div_significand_calc:wwnnnnnnn - \int_value:w \__fp_int_eval:w 999999 + 2 0000 0000 / #1 ; % Q1 + \int_value:w \__fp_int_eval:w 999999 + 2 0000 0000 / #1 \__fp_sep: % Q1 } -\cs_new:Npn \__fp_ln_div_ii:wwn #1; #2;#3 % y; B1;B2 <- for k=1 +\cs_new:Npn \__fp_ln_div_ii:wwn + #1\__fp_sep: #2\__fp_sep:#3 % y\__fp_sep: B1\__fp_sep:B2 <- for k=1 { \exp_after:wN \__fp_div_significand_pack:NNN \int_value:w \__fp_int_eval:w \exp_after:wN \__fp_div_significand_calc:wwnnnnnnn - \int_value:w \__fp_int_eval:w 999999 + #2 #3 / #1 ; % Q2 - #2 #3 ; + \int_value:w \__fp_int_eval:w 999999 + #2 #3 / #1 \__fp_sep: % Q2 + #2 #3 \__fp_sep: } -\cs_new:Npn \__fp_ln_div_vi:wwn #1; #2;#3#4#5 #6#7#8#9 %y;F1;F2F3F4x1x2x3x4 +\cs_new:Npn \__fp_ln_div_vi:wwn + #1\__fp_sep: #2\__fp_sep:#3#4#5 #6#7#8#9 %y\__fp_sep:F1\__fp_sep:F2F3F4x1x2x3x4 { \exp_after:wN \__fp_div_significand_pack:NNN - \int_value:w \__fp_int_eval:w 1000000 + #2 #3 / #1 ; % Q6 + \int_value:w \__fp_int_eval:w 1000000 + #2 #3 / #1 \__fp_sep: % Q6 } -\cs_new:Npn \__fp_ln_div_after:Nw #1#2; +\cs_new:Npn \__fp_ln_div_after:Nw #1#2\__fp_sep: { \if_meaning:w 0 #2 \exp_after:wN \__fp_ln_t_small:Nw @@ -19364,19 +19575,22 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: #1 } -\cs_new:Npn \__fp_ln_t_small:Nw #1 #2; #3; #4; #5; #6; #7; +\cs_new:Npn \__fp_ln_t_small:Nw + #1 #2\__fp_sep: #3\__fp_sep: #4\__fp_sep: #5\__fp_sep: #6\__fp_sep: #7\__fp_sep: { \exp_after:wN \__fp_ln_t_large:NNw \exp_after:wN + % <sign> \exp_after:wN #1 - \int_value:w \__fp_int_eval:w 9999 - #2 \exp_after:wN ; - \int_value:w \__fp_int_eval:w 9999 - #3 \exp_after:wN ; - \int_value:w \__fp_int_eval:w 9999 - #4 \exp_after:wN ; - \int_value:w \__fp_int_eval:w 9999 - #5 \exp_after:wN ; - \int_value:w \__fp_int_eval:w 9999 - #6 \exp_after:wN ; - \int_value:w \__fp_int_eval:w 1 0000 - #7 ; - } -\cs_new:Npn \__fp_ln_t_large:NNw #1 #2 #3; #4; #5; #6; #7; #8; + \int_value:w \__fp_int_eval:w 9999 - #2 \exp_after:wN \__fp_sep: + \int_value:w \__fp_int_eval:w 9999 - #3 \exp_after:wN \__fp_sep: + \int_value:w \__fp_int_eval:w 9999 - #4 \exp_after:wN \__fp_sep: + \int_value:w \__fp_int_eval:w 9999 - #5 \exp_after:wN \__fp_sep: + \int_value:w \__fp_int_eval:w 9999 - #6 \exp_after:wN \__fp_sep: + \int_value:w \__fp_int_eval:w 1 0000 - #7 \__fp_sep: + } +\cs_new:Npn \__fp_ln_t_large:NNw + #1 #2 + #3\__fp_sep: #4\__fp_sep: #5\__fp_sep: #6\__fp_sep: #7\__fp_sep: #8\__fp_sep: { \exp_after:wN \__fp_ln_square_t_after:w \int_value:w \__fp_int_eval:w 9999 0000 + #3*#3 @@ -19390,7 +19604,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \int_value:w \__fp_int_eval:w 1 0000 0000 + 2*#3*#7 + 2*#4*#6 + #5*#5 + (2*#3*#8 + 2*#4*#7 + 2*#5*#6) / 1 0000 - % ; ; ; + % \__fp_sep: \__fp_sep: \__fp_sep: \exp_after:wN \__fp_ln_twice_t_after:w \int_value:w \__fp_int_eval:w -1 + 2*#3 \exp_after:wN \__fp_ln_twice_t_pack:Nw @@ -19402,48 +19616,53 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_ln_twice_t_pack:Nw \int_value:w \__fp_int_eval:w 9999 + 2*#7 \exp_after:wN \__fp_ln_twice_t_pack:Nw - \int_value:w \__fp_int_eval:w 10000 + 2*#8 ; ; + \int_value:w \__fp_int_eval:w 10000 + 2*#8 \__fp_sep: \__fp_sep: { \__fp_ln_c:NwNw #1 } #2 } -\cs_new:Npn \__fp_ln_twice_t_pack:Nw #1 #2; { + #1 ; {#2} } -\cs_new:Npn \__fp_ln_twice_t_after:w #1; { ;;; {#1} } -\cs_new:Npn \__fp_ln_square_t_pack:NNNNNw #1 #2#3#4#5 #6; - { + #1#2#3#4#5 ; {#6} } -\cs_new:Npn \__fp_ln_square_t_after:w 1 0 #1#2#3 #4; +\cs_new:Npn \__fp_ln_twice_t_pack:Nw #1 #2\__fp_sep: { + #1 \__fp_sep: {#2} } +\cs_new:Npn \__fp_ln_twice_t_after:w #1\__fp_sep: + { \__fp_sep:\__fp_sep:\__fp_sep: {#1} } +\cs_new:Npn \__fp_ln_square_t_pack:NNNNNw #1 #2#3#4#5 #6\__fp_sep: + { + #1#2#3#4#5 \__fp_sep: {#6} } +\cs_new:Npn \__fp_ln_square_t_after:w 1 0 #1#2#3 #4\__fp_sep: { \__fp_ln_Taylor:wwNw {0#1#2#3} {#4} } \cs_new:Npn \__fp_ln_Taylor:wwNw - { \__fp_ln_Taylor_loop:www 21 ; {0000}{0000}{0000}{0000}{0000}{0000} ; } -\cs_new:Npn \__fp_ln_Taylor_loop:www #1; #2; #3; + { + \__fp_ln_Taylor_loop:www + 21 \__fp_sep: {0000}{0000}{0000}{0000}{0000}{0000} \__fp_sep: + } +\cs_new:Npn \__fp_ln_Taylor_loop:www #1\__fp_sep: #2\__fp_sep: #3\__fp_sep: { \if_int_compare:w #1 = \c_one_int \__fp_ln_Taylor_break:w \fi: - \exp_after:wN \__fp_fixed_div_int:wwN \c__fp_one_fixed_tl #1; - \__fp_fixed_add:wwn #2; - \__fp_fixed_mul:wwn #3; + \exp_after:wN \__fp_fixed_div_int:wwN \c__fp_one_fixed_tl #1\__fp_sep: + \__fp_fixed_add:wwn #2\__fp_sep: + \__fp_fixed_mul:wwn #3\__fp_sep: { \exp_after:wN \__fp_ln_Taylor_loop:www - \int_value:w \__fp_int_eval:w #1 - 2 ; + \int_value:w \__fp_int_eval:w #1 - 2 \__fp_sep: } - #3; + #3\__fp_sep: } -\cs_new:Npn \__fp_ln_Taylor_break:w \fi: #1 \__fp_fixed_add:wwn #2#3; #4 ;; +\cs_new:Npn \__fp_ln_Taylor_break:w + \fi: #1 \__fp_fixed_add:wwn #2#3\__fp_sep: #4 \__fp_sep:\__fp_sep: { \fi: \exp_after:wN \__fp_fixed_mul:wwn - \exp_after:wN { \int_value:w \__fp_int_eval:w 10000 + #2 } #3; + \exp_after:wN { \int_value:w \__fp_int_eval:w 10000 + #2 } #3\__fp_sep: } -\cs_new:Npn \__fp_ln_c:NwNw #1 #2; #3 +\cs_new:Npn \__fp_ln_c:NwNw #1 #2\__fp_sep: #3 { \if_meaning:w + #1 \exp_after:wN \exp_after:wN \exp_after:wN \__fp_fixed_sub:wwn \else: \exp_after:wN \exp_after:wN \exp_after:wN \__fp_fixed_add:wwn \fi: - #3 #2 ; + #3 #2 \__fp_sep: } -\cs_new:Npn \__fp_ln_exponent:wn #1; #2 +\cs_new:Npn \__fp_ln_exponent:wn #1\__fp_sep: #2 { \if_case:w #2 \exp_stop_f: 0 \__fp_case_return:nw { \__fp_fixed_to_float_o:Nw 2 } @@ -19460,25 +19679,25 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_fixed_add:wwn \int_value:w - \fi: \fi: - #2; #1; + #2\__fp_sep: #1\__fp_sep: } -\cs_new:Npn \__fp_ln_exponent_one:ww 1; #1; +\cs_new:Npn \__fp_ln_exponent_one:ww 1\__fp_sep: #1\__fp_sep: { 0 - \exp_after:wN \__fp_fixed_sub:wwn \c__fp_ln_x_fixed_tl #1; + \exp_after:wN \__fp_fixed_sub:wwn \c__fp_ln_x_fixed_tl #1\__fp_sep: \__fp_fixed_to_float_o:wN 0 } -\cs_new:Npn \__fp_ln_exponent_small:NNww #1#2#3; #4#5#6#7#8#9; +\cs_new:Npn \__fp_ln_exponent_small:NNww #1#2#3\__fp_sep: #4#5#6#7#8#9\__fp_sep: { 4 \exp_after:wN \__fp_fixed_mul:wwn \c__fp_ln_x_fixed_tl - {#3}{0000}{0000}{0000}{0000}{0000} ; + {#3}{0000}{0000}{0000}{0000}{0000} \__fp_sep: #2 - {0000}{#4}{#5}{#6}{#7}{#8}; + {0000}{#4}{#5}{#6}{#7}{#8}\__fp_sep: \__fp_fixed_to_float_o:wN #1 } -\cs_new:Npn \__fp_exp_o:w #1 \s__fp \__fp_chk:w #2#3#4; @ +\cs_new:Npn \__fp_exp_o:w #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: @ { \if_case:w #2 \exp_stop_f: \__fp_case_return_o:Nw \c_one_fp @@ -19495,7 +19714,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \or: \__fp_case_return_same_o:w \fi: - \s__fp \__fp_chk:w #2#3#4; + \s__fp \__fp_chk:w #2#3#4\__fp_sep: } \cs_new:Npn \__fp_exp_normal_o:w \s__fp \__fp_chk:w 1#1 { @@ -19505,7 +19724,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \__fp_exp_pos_o:NNwnw - \__fp_fixed_inv_to_float_o:wN \fi: } -\cs_new:Npn \__fp_exp_pos_o:NNwnw #1#2#3 \fi: #4#5; +\cs_new:Npn \__fp_exp_pos_o:NNwnw #1#2#3 \fi: #4#5\__fp_sep: { \fi: \if_int_compare:w #4 > \c__fp_max_exp_exponent_int @@ -19544,33 +19763,33 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN #1 \exp_after:wN #2 } -\cs_new:Npn \__fp_exp_Taylor:Nnnwn #1#2#3 #4; #5 #6 +\cs_new:Npn \__fp_exp_Taylor:Nnnwn #1#2#3 #4\__fp_sep: #5 #6 { #6 \__fp_pack_twice_four:wNNNNNNNN \__fp_pack_twice_four:wNNNNNNNN \__fp_pack_twice_four:wNNNNNNNN \__fp_exp_Taylor_ii:ww - ; #2#3#4 0000 0000 ; + \__fp_sep: #2#3#4 0000 0000 \__fp_sep: } -\cs_new:Npn \__fp_exp_Taylor_ii:ww #1; #2; - { \__fp_exp_Taylor_loop:www 10 ; #1 ; #1 ; \s__fp_stop } -\cs_new:Npn \__fp_exp_Taylor_loop:www #1; #2; #3; +\cs_new:Npn \__fp_exp_Taylor_ii:ww #1\__fp_sep: #2\__fp_sep: + { \__fp_exp_Taylor_loop:www 10 \__fp_sep: #1 \__fp_sep: #1 \__fp_sep: \s__fp_stop } +\cs_new:Npn \__fp_exp_Taylor_loop:www #1\__fp_sep: #2\__fp_sep: #3\__fp_sep: { \if_int_compare:w #1 = \c_one_int \exp_after:wN \__fp_exp_Taylor_break:Nww \fi: - \__fp_fixed_div_int:wwN #3 ; #1 ; + \__fp_fixed_div_int:wwN #3 \__fp_sep: #1 \__fp_sep: \__fp_fixed_add_one:wN - \__fp_fixed_mul:wwn #2 ; + \__fp_fixed_mul:wwn #2 \__fp_sep: { \exp_after:wN \__fp_exp_Taylor_loop:www - \int_value:w \__fp_int_eval:w #1 - 1 ; - #2 ; + \int_value:w \__fp_int_eval:w #1 - 1 \__fp_sep: + #2 \__fp_sep: } } -\cs_new:Npn \__fp_exp_Taylor_break:Nww #1 #2; #3 \s__fp_stop - { \__fp_fixed_add_one:wN #2 ; } +\cs_new:Npn \__fp_exp_Taylor_break:Nww #1 #2\__fp_sep: #3 \s__fp_stop + { \__fp_fixed_add_one:wN #2 \__fp_sep: } \intarray_const_from_clist:Nn \c__fp_exp_intarray { 1 , 1 1105 1709 , 1 1807 5647 , 1 6248 1171 , @@ -19628,23 +19847,23 @@ Type H <return> for immediate help}\def~{\errmessage{% 34744 , 1 3618 6973 , 1 3140 0875 , 1 3856 4102 , 39087 , 1 3186 9209 , 1 6113 3900 , 1 6705 9685 , } -\cs_new:Npn \__fp_exp_pos_large:NnnNwn #1#2#3 #4#5; #6 +\cs_new:Npn \__fp_exp_pos_large:NnnNwn #1#2#3 #4#5\__fp_sep: #6 { \exp_after:wN \exp_after:wN \exp_after:wN \__fp_exp_large:NwN \exp_after:wN \exp_after:wN \exp_after:wN #6 \exp_after:wN \c__fp_one_fixed_tl \int_value:w #3 #4 \exp_stop_f: - #5 00000 ; + #5 00000 \__fp_sep: } -\cs_new:Npn \__fp_exp_large:NwN #1#2; #3 +\cs_new:Npn \__fp_exp_large:NwN #1#2\__fp_sep: #3 { \if_case:w #3 ~ \exp_after:wN \__fp_fixed_continue:wn \else: \exp_after:wN \__fp_exp_intarray:w - \int_value:w \__fp_int_eval:w 36 * #1 + 4 * #3 \exp_after:wN ; + \int_value:w \__fp_int_eval:w 36 * #1 + 4 * #3 \exp_after:wN \__fp_sep: \fi: - #2; + #2\__fp_sep: { \if_meaning:w 0 #1 \exp_after:wN \__fp_exp_large_after:wwn @@ -19654,7 +19873,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: } } -\cs_new:Npn \__fp_exp_intarray:w #1 ; +\cs_new:Npn \__fp_exp_intarray:w #1 \__fp_sep: { + \__kernel_intarray_item:Nn \c__fp_exp_intarray @@ -19669,16 +19888,18 @@ Type H <return> for immediate help}\def~{\errmessage{% \int_value:w \__kernel_intarray_item:Nn \c__fp_exp_intarray { \__fp_int_eval:w #1 - 1 } \exp_after:wN \__fp_exp_intarray_aux:w - \int_value:w \__kernel_intarray_item:Nn \c__fp_exp_intarray {#1} ; ; + \int_value:w \__kernel_intarray_item:Nn + \c__fp_exp_intarray {#1} \__fp_sep: \__fp_sep: } -\cs_new:Npn \__fp_exp_intarray_aux:w 1 #1#2#3#4#5 ; { ; {#1#2#3#4} {#5} } -\cs_new:Npn \__fp_exp_large_after:wwn #1; #2; #3 +\cs_new:Npn \__fp_exp_intarray_aux:w 1 #1#2#3#4#5 \__fp_sep: + { \__fp_sep: {#1#2#3#4} {#5} } +\cs_new:Npn \__fp_exp_large_after:wwn #1\__fp_sep: #2\__fp_sep: #3 { - \__fp_exp_Taylor:Nnnwn ? { } { } 0 #2; {} #3 - \__fp_fixed_mul:wwn #1; + \__fp_exp_Taylor:Nnnwn ? { } { } 0 #2\__fp_sep: {} #3 + \__fp_fixed_mul:wwn #1\__fp_sep: } \cs_new:cpn { __fp_ \iow_char:N \^ _o:ww } - \s__fp \__fp_chk:w #1#2#3; \s__fp \__fp_chk:w #4#5#6; + \s__fp \__fp_chk:w #1#2#3\__fp_sep: \s__fp \__fp_chk:w #4#5#6\__fp_sep: { \if_meaning:w 0 #4 \__fp_case_return_o:Nw \c_one_fp @@ -19697,13 +19918,13 @@ Type H <return> for immediate help}\def~{\errmessage{% \else: \exp_after:wN \__fp_pow_zero_or_inf:ww \fi: - \s__fp \__fp_chk:w #1#2#3; + \s__fp \__fp_chk:w #1#2#3\__fp_sep: } - { \s__fp \__fp_chk:w #4#5#6; \s__fp \__fp_chk:w #1#2#3; } - \s__fp \__fp_chk:w #4#5#6; + { \s__fp \__fp_chk:w #4#5#6\__fp_sep: \s__fp \__fp_chk:w #1#2#3\__fp_sep: } + \s__fp \__fp_chk:w #4#5#6\__fp_sep: } \cs_new:Npn \__fp_pow_zero_or_inf:ww - \s__fp \__fp_chk:w #1#2; \s__fp \__fp_chk:w #3#4 + \s__fp \__fp_chk:w #1#2\__fp_sep: \s__fp \__fp_chk:w #3#4 { \if_meaning:w 1 #4 \__fp_case_return_same_o:w @@ -19720,13 +19941,13 @@ Type H <return> for immediate help}\def~{\errmessage{% \__fp_case_use:nw { \__fp_division_by_zero_o:NNww \c_inf_fp ^ - \s__fp \__fp_chk:w #1 #2 ; + \s__fp \__fp_chk:w #1 #2 \__fp_sep: } \fi: \s__fp \__fp_chk:w #3#4 } \cs_new:Npn \__fp_pow_normal_o:ww - \s__fp \__fp_chk:w 1 #1#2#3; \s__fp \__fp_chk:w #4#5 + \s__fp \__fp_chk:w 1 #1#2#3\__fp_sep: \s__fp \__fp_chk:w #4#5 { \if:w 0 \__fp_str_if_eq:nn { #2 #3 } { 1 {1000} {0000} {0000} {0000} } \if_int_compare:w #4 #1 = 32 \exp_stop_f: @@ -19750,7 +19971,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \or: \__fp_case_return_ii_o:ww \fi: - \s__fp \__fp_chk:w 1 #1 {#2} #3 ; + \s__fp \__fp_chk:w 1 #1 {#2} #3 \__fp_sep: \s__fp \__fp_chk:w #4 #5 } \cs_new:Npn \__fp_pow_npos_o:Nww #1 \s__fp \__fp_chk:w 1#2#3 @@ -19769,17 +19990,18 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: {#3} } -\cs_new:Npn \__fp_pow_npos_aux:NNnww #1#2#3#4#5; \s__fp \__fp_chk:w 1#6#7#8; +\cs_new:Npn \__fp_pow_npos_aux:NNnww + #1#2#3#4#5\__fp_sep: \s__fp \__fp_chk:w 1#6#7#8\__fp_sep: { #1 \__fp_int_eval:w \__fp_ln_significand:NNNNnnnN #4#5 \__fp_pow_exponent:wnN {#3} - \__fp_fixed_mul:wwn #8 {0000}{0000} ; - \__fp_pow_B:wwN #7; + \__fp_fixed_mul:wwn #8 {0000}{0000} \__fp_sep: + \__fp_pow_B:wwN #7\__fp_sep: #1 #2 0 % fixed_to_float_o:wN } -\cs_new:Npn \__fp_pow_exponent:wnN #1; #2 +\cs_new:Npn \__fp_pow_exponent:wnN #1\__fp_sep: #2 { \if_int_compare:w #2 > \c_zero_int \exp_after:wN \__fp_pow_exponent:Nwnnnnnw % n\ln(10) - (-\ln(x)) @@ -19788,9 +20010,9 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_pow_exponent:Nwnnnnnw % -(|n|\ln(10) + (-\ln(x))) \exp_after:wN - \fi: - #2; #1; + #2\__fp_sep: #1\__fp_sep: } -\cs_new:Npn \__fp_pow_exponent:Nwnnnnnw #1#2; #3#4#5#6#7#8; +\cs_new:Npn \__fp_pow_exponent:Nwnnnnnw #1#2\__fp_sep: #3#4#5#6#7#8\__fp_sep: { %^^A todo: use that in ln. \exp_after:wN \__fp_fixed_mul_after:wwn \int_value:w \__fp_int_eval:w \c__fp_leading_shift_int @@ -19809,9 +20031,9 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_pack:NNNNNw \int_value:w \__fp_int_eval:w \c__fp_trailing_shift_int #1 #2*8401 - #1 #7 - #1 ( #2*7991 - #8 ) / 1 0000 ; ; + #1 ( #2*7991 - #8 ) / 1 0000 \__fp_sep: \__fp_sep: } -\cs_new:Npn \__fp_pow_B:wwN #1#2#3#4#5#6; #7; +\cs_new:Npn \__fp_pow_B:wwN #1#2#3#4#5#6\__fp_sep: #7\__fp_sep: { \if_int_compare:w #7 < \c_zero_int \exp_after:wN \__fp_pow_C_neg:w \int_value:w - @@ -19822,23 +20044,23 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_pow_C_overflow:w \int_value:w \fi: \fi: - #7 \exp_after:wN ; + #7 \exp_after:wN \__fp_sep: \int_value:w \__fp_int_eval:w 10 0000 + #1 \__fp_int_eval_end: - #2#3#4#5#6 0000 0000 0000 0000 0000 0000 ; %^^A todo: how many 0? + #2#3#4#5#6 0000 0000 0000 0000 0000 0000 \__fp_sep: %^^A todo: how many 0? } -\cs_new:Npn \__fp_pow_C_overflow:w #1; #2; #3 +\cs_new:Npn \__fp_pow_C_overflow:w #1\__fp_sep: #2\__fp_sep: #3 { + 2 * \c__fp_max_exponent_int \exp_after:wN \__fp_fixed_continue:wn \c__fp_one_fixed_tl } -\cs_new:Npn \__fp_pow_C_neg:w #1 ; 1 +\cs_new:Npn \__fp_pow_C_neg:w #1 \__fp_sep: 1 { \exp_after:wN \exp_after:wN \exp_after:wN \__fp_pow_C_pack:w \prg_replicate:nn {#1} {0} } -\cs_new:Npn \__fp_pow_C_pos:w #1; 1 - { \__fp_pow_C_pos_loop:wN #1; } -\cs_new:Npn \__fp_pow_C_pos_loop:wN #1; #2 +\cs_new:Npn \__fp_pow_C_pos:w #1\__fp_sep: 1 + { \__fp_pow_C_pos_loop:wN #1\__fp_sep: } +\cs_new:Npn \__fp_pow_C_pos_loop:wN #1\__fp_sep: #2 { \if_meaning:w 0 #1 \exp_after:wN \__fp_pow_C_pack:w @@ -19849,7 +20071,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \else: \exp_after:wN \__fp_pow_C_overflow:w \int_value:w \fi: - \__fp_int_eval:w #1 - 1 \exp_after:wN ; + \__fp_int_eval:w #1 - 1 \exp_after:wN \__fp_sep: \fi: } \cs_new:Npn \__fp_pow_C_pack:w @@ -19858,20 +20080,21 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN 5 \c__fp_one_fixed_tl } -\cs_new:Npn \__fp_pow_neg:www \s__fp \__fp_chk:w #1#2; #3; #4; +\cs_new:Npn \__fp_pow_neg:www + \s__fp \__fp_chk:w #1#2\__fp_sep: #3\__fp_sep: #4\__fp_sep: { - \if_case:w \__fp_pow_neg_case:w #4 ; + \if_case:w \__fp_pow_neg_case:w #4 \__fp_sep: \exp_after:wN \__fp_pow_neg_aux:wNN \or: \if_int_compare:w \__fp_int_eval:w #1 / 2 = \c_one_int - \__fp_invalid_operation_o:Nww ^ #3; #4; + \__fp_invalid_operation_o:Nww ^ #3\__fp_sep: #4\__fp_sep: \exp:w \exp_end_continue_f:w \exp_after:wN \exp_after:wN \exp_after:wN \__fp_use_none_until_s:w \fi: \fi: \__fp_exp_after_o:w - \s__fp \__fp_chk:w #1#2; + \s__fp \__fp_chk:w #1#2\__fp_sep: } \cs_new:Npn \__fp_pow_neg_aux:wNN #1 \s__fp \__fp_chk:w #2#3 { @@ -19881,7 +20104,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN #2 \int_value:w \__fp_int_eval:w 2 - #3 \__fp_int_eval_end: } -\cs_new:Npn \__fp_pow_neg_case:w \s__fp \__fp_chk:w #1#2#3; +\cs_new:Npn \__fp_pow_neg_case:w \s__fp \__fp_chk:w #1#2#3\__fp_sep: { \if_case:w #1 \exp_stop_f: -1 @@ -19901,7 +20124,7 @@ Type H <return> for immediate help}\def~{\errmessage{% {#2} {#3} {#4} {#5} \fi: } -\cs_new:Npn \__fp_pow_neg_case_aux:Nnnw #1#2#3#4 ; +\cs_new:Npn \__fp_pow_neg_case_aux:Nnnw #1#2#3#4 \__fp_sep: { \if_meaning:w 0 #1 \if_int_odd:w #3 \exp_stop_f: @@ -19914,7 +20137,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: } \int_const:Nn \c__fp_fact_max_arg_int { 3248 } -\cs_new:Npn \__fp_fact_o:w #1 \s__fp \__fp_chk:w #2#3#4; @ +\cs_new:Npn \__fp_fact_o:w #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: @ { \if_case:w #2 \exp_stop_f: \__fp_case_return_o:Nw \c_one_fp @@ -19930,13 +20153,13 @@ Type H <return> for immediate help}\def~{\errmessage{% \__fp_case_use:nw { \__fp_invalid_operation_o:fw { fact } } \fi: \__fp_fact_pos_o:w - \s__fp \__fp_chk:w #2 #3 #4 ; + \s__fp \__fp_chk:w #2 #3 #4 \__fp_sep: } -\cs_new:Npn \__fp_fact_pos_o:w #1; +\cs_new:Npn \__fp_fact_pos_o:w #1\__fp_sep: { - \__fp_small_int:wTF #1; + \__fp_small_int:wTF #1\__fp_sep: { \__fp_fact_int_o:n } - { \__fp_invalid_operation_o:fw { fact } #1; } + { \__fp_invalid_operation_o:fw { fact } #1\__fp_sep: } } \cs_new:Npn \__fp_fact_int_o:n #1 { @@ -19950,9 +20173,9 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_sanitize:Nw \exp_after:wN 0 \int_value:w \__fp_int_eval:w - \__fp_fact_loop_o:w #1 . 4 , { 1 } { } { } { } { } { } ; + \__fp_fact_loop_o:w #1 . 4 , { 1 } { } { } { } { } { } \__fp_sep: } -\cs_new:Npn \__fp_fact_loop_o:w #1 . #2 ; +\cs_new:Npn \__fp_fact_loop_o:w #1 . #2 \__fp_sep: { \if_int_compare:w #1 < 12 \exp_stop_f: \__fp_fact_small_o:w #1 @@ -19960,14 +20183,14 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_ep_mul:wwwwn \exp_after:wN 4 \exp_after:wN , \exp_after:wN { \int_value:w \__fp_int_eval:w #1 * (#1 - 1) } - { } { } { } { } { } ; - #2 ; + { } { } { } { } { } \__fp_sep: + #2 \__fp_sep: { \exp_after:wN \__fp_fact_loop_o:w \int_value:w \__fp_int_eval:w #1 - 2 . } } -\cs_new:Npn \__fp_fact_small_o:w #1 \fi: #2 ; #3 ; #4 +\cs_new:Npn \__fp_fact_small_o:w #1 \fi: #2 \__fp_sep: #3 \__fp_sep: #4 { \fi: \exp_after:wN \__fp_ep_mul:wwwwn @@ -19979,8 +20202,8 @@ Type H <return> for immediate help}\def~{\errmessage{% 1 \or: 1 \or: 2 \or: 6 \or: 24 \or: 120 \or: 720 \or: 5040 \or: 40320 \or: 362880 \or: 3628800 \or: 39916800 \fi: - } { } { } { } { } { } ; - #3 ; + } { } { } { } { } { } \__fp_sep: + #3 \__fp_sep: \__fp_ep_to_float_o:wwN 0 } %% File: l3fp-trig.dtx @@ -20011,7 +20234,7 @@ Type H <return> for immediate help}\def~{\errmessage{% { \__fp_parse_function:NNN \__fp_atan_o:Nw \use_i:nn } \cs_new:Npn \__fp_parse_word_atand:N { \__fp_parse_function:NNN \__fp_atan_o:Nw \use_ii:nn } -\cs_new:Npn \__fp_sin_o:w #1 \s__fp \__fp_chk:w #2#3#4; @ +\cs_new:Npn \__fp_sin_o:w #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: @ { \if_case:w #2 \exp_stop_f: \__fp_case_return_same_o:w @@ -20024,9 +20247,9 @@ Type H <return> for immediate help}\def~{\errmessage{% { \__fp_invalid_operation_o:fw { #1 { sin } { sind } } } \else: \__fp_case_return_same_o:w \fi: - \s__fp \__fp_chk:w #2 #3 #4; + \s__fp \__fp_chk:w #2 #3 #4\__fp_sep: } -\cs_new:Npn \__fp_cos_o:w #1 \s__fp \__fp_chk:w #2#3; @ +\cs_new:Npn \__fp_cos_o:w #1 \s__fp \__fp_chk:w #2#3\__fp_sep: @ { \if_case:w #2 \exp_stop_f: \__fp_case_return_o:Nw \c_one_fp @@ -20039,9 +20262,9 @@ Type H <return> for immediate help}\def~{\errmessage{% { \__fp_invalid_operation_o:fw { #1 { cos } { cosd } } } \else: \__fp_case_return_same_o:w \fi: - \s__fp \__fp_chk:w #2 #3; + \s__fp \__fp_chk:w #2 #3\__fp_sep: } -\cs_new:Npn \__fp_csc_o:w #1 \s__fp \__fp_chk:w #2#3#4; @ +\cs_new:Npn \__fp_csc_o:w #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: @ { \if_case:w #2 \exp_stop_f: \__fp_cot_zero_o:Nfw #3 { #1 { csc } { cscd } } @@ -20054,9 +20277,9 @@ Type H <return> for immediate help}\def~{\errmessage{% { \__fp_invalid_operation_o:fw { #1 { csc } { cscd } } } \else: \__fp_case_return_same_o:w \fi: - \s__fp \__fp_chk:w #2 #3 #4; + \s__fp \__fp_chk:w #2 #3 #4\__fp_sep: } -\cs_new:Npn \__fp_sec_o:w #1 \s__fp \__fp_chk:w #2#3; @ +\cs_new:Npn \__fp_sec_o:w #1 \s__fp \__fp_chk:w #2#3\__fp_sep: @ { \if_case:w #2 \exp_stop_f: \__fp_case_return_o:Nw \c_one_fp @@ -20069,9 +20292,9 @@ Type H <return> for immediate help}\def~{\errmessage{% { \__fp_invalid_operation_o:fw { #1 { sec } { secd } } } \else: \__fp_case_return_same_o:w \fi: - \s__fp \__fp_chk:w #2 #3; + \s__fp \__fp_chk:w #2 #3\__fp_sep: } -\cs_new:Npn \__fp_tan_o:w #1 \s__fp \__fp_chk:w #2#3#4; @ +\cs_new:Npn \__fp_tan_o:w #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: @ { \if_case:w #2 \exp_stop_f: \__fp_case_return_same_o:w @@ -20084,9 +20307,9 @@ Type H <return> for immediate help}\def~{\errmessage{% { \__fp_invalid_operation_o:fw { #1 { tan } { tand } } } \else: \__fp_case_return_same_o:w \fi: - \s__fp \__fp_chk:w #2 #3 #4; + \s__fp \__fp_chk:w #2 #3 #4\__fp_sep: } -\cs_new:Npn \__fp_cot_o:w #1 \s__fp \__fp_chk:w #2#3#4; @ +\cs_new:Npn \__fp_cot_o:w #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: @ { \if_case:w #2 \exp_stop_f: \__fp_cot_zero_o:Nfw #3 { #1 { cot } { cotd } } @@ -20099,7 +20322,7 @@ Type H <return> for immediate help}\def~{\errmessage{% { \__fp_invalid_operation_o:fw { #1 { cot } { cotd } } } \else: \__fp_case_return_same_o:w \fi: - \s__fp \__fp_chk:w #2 #3 #4; + \s__fp \__fp_chk:w #2 #3 #4\__fp_sep: } \cs_new:Npn \__fp_cot_zero_o:Nfw #1#2#3 \fi: { @@ -20109,7 +20332,7 @@ Type H <return> for immediate help}\def~{\errmessage{% { \exp_args:NNf \__fp_division_by_zero_o:Nnw \c_minus_inf_fp } {#2} } -\cs_new:Npn \__fp_trig:NNNNNwn #1#2#3#4#5 \s__fp \__fp_chk:w 1#6#7#8; +\cs_new:Npn \__fp_trig:NNNNNwn #1#2#3#4#5 \s__fp \__fp_chk:w 1#6#7#8\__fp_sep: { \exp_after:wN #2 \exp_after:wN #3 @@ -20121,44 +20344,44 @@ Type H <return> for immediate help}\def~{\errmessage{% \else: #1 \__fp_trig_small:ww \__fp_trigd_small:ww \fi: - #7,#8{0000}{0000}; + #7,#8{0000}{0000}\__fp_sep: } -\cs_new:Npn \__fp_trig_small:ww #1,#2; - { \__fp_ep_to_fixed:wwn #1,#2; . #1,#2; } -\cs_new:Npn \__fp_trigd_small:ww #1,#2; +\cs_new:Npn \__fp_trig_small:ww #1,#2\__fp_sep: + { \__fp_ep_to_fixed:wwn #1,#2\__fp_sep: . #1,#2\__fp_sep: } +\cs_new:Npn \__fp_trigd_small:ww #1,#2\__fp_sep: { \__fp_ep_mul_raw:wwwwN - -1,{1745}{3292}{5199}{4329}{5769}{2369}; #1,#2; + -1,{1745}{3292}{5199}{4329}{5769}{2369}\__fp_sep: #1,#2\__fp_sep: \__fp_trig_small:ww } -\cs_new:Npn \__fp_trigd_large:ww #1, #2#3#4#5#6#7; +\cs_new:Npn \__fp_trigd_large:ww #1, #2#3#4#5#6#7\__fp_sep: { \exp_after:wN \__fp_pack_eight:wNNNNNNNN \exp_after:wN \__fp_pack_eight:wNNNNNNNN \exp_after:wN \__fp_pack_twice_four:wNNNNNNNN \exp_after:wN \__fp_pack_twice_four:wNNNNNNNN \exp_after:wN \__fp_trigd_large_auxi:nnnnwNNNN - \exp_after:wN ; + \exp_after:wN \__fp_sep: \exp:w \exp_end_continue_f:w \prg_replicate:nn { \int_max:nn { 22 - #1 } { 0 } } { 0 } #2#3#4#5#6#7 0000 0000 0000 ! } -\cs_new:Npn \__fp_trigd_large_auxi:nnnnwNNNN #1#2#3#4#5; #6#7#8#9 +\cs_new:Npn \__fp_trigd_large_auxi:nnnnwNNNN #1#2#3#4#5\__fp_sep: #6#7#8#9 { \exp_after:wN \__fp_trigd_large_auxii:wNw \int_value:w \__fp_int_eval:w #1 + #2 - (#1 + #2 - 4) / 9 * 9 \__fp_int_eval_end: - #3; - #4; #5{#6#7#8#9}; + #3\__fp_sep: + #4\__fp_sep: #5{#6#7#8#9}\__fp_sep: } -\cs_new:Npn \__fp_trigd_large_auxii:wNw #1; #2#3; +\cs_new:Npn \__fp_trigd_large_auxii:wNw #1\__fp_sep: #2#3\__fp_sep: { + (#1#2 - 4) / 9 * 2 \exp_after:wN \__fp_trigd_large_auxiii:www \int_value:w \__fp_int_eval:w #1#2 - - (#1#2 - 4) / 9 * 9 \__fp_int_eval_end: #3 ; + - (#1#2 - 4) / 9 * 9 \__fp_int_eval_end: #3 \__fp_sep: } -\cs_new:Npn \__fp_trigd_large_auxiii:www #1; #2; #3! +\cs_new:Npn \__fp_trigd_large_auxiii:www #1\__fp_sep: #2\__fp_sep: #3! { \if_int_compare:w #1 < 4500 \exp_stop_f: \exp_after:wN \__fp_use_i_until_s:nw @@ -20166,8 +20389,8 @@ Type H <return> for immediate help}\def~{\errmessage{% \else: + 1 \fi: - \__fp_fixed_sub:wwn {9000}{0000}{0000}{0000}{0000}{0000}; - {#1}#2{0000}{0000}; + \__fp_fixed_sub:wwn {9000}{0000}{0000}{0000}{0000}{0000}\__fp_sep: + {#1}#2{0000}{0000}\__fp_sep: { \__fp_trigd_small:ww 2, } } \intarray_const_from_clist:Nn \c__fp_trig_intarray @@ -20384,12 +20607,12 @@ Type H <return> for immediate help}\def~{\errmessage{% 159592267, 181172796, 144388537, 196763139, 127431422, 179531145, 100064922, 112650013, 132686230, 121550837, } -\cs_new:Npn \__fp_trig_large:ww #1, #2#3#4#5#6; +\cs_new:Npn \__fp_trig_large:ww #1, #2#3#4#5#6\__fp_sep: { \exp_after:wN \__fp_trig_large_auxi:w \int_value:w \__fp_int_eval:w (#1 - 4) / 8 \exp_after:wN , - \int_value:w #1 , ; - {#2}{#3}{#4}{#5} ; + \int_value:w #1 , \__fp_sep: + {#2}{#3}{#4}{#5} \__fp_sep: } \cs_new:Npn \__fp_trig_large_auxi:w #1, #2, { @@ -20434,10 +20657,10 @@ Type H <return> for immediate help}\def~{\errmessage{% \__fp_pack_twice_four:wNNNNNNNN \__fp_pack_twice_four:wNNNNNNNN \__fp_pack_twice_four:wNNNNNNNN \__fp_pack_twice_four:wNNNNNNNN \__fp_pack_twice_four:wNNNNNNNN \__fp_pack_twice_four:wNNNNNNNN - \__fp_trig_large_auxv:www ; + \__fp_trig_large_auxv:www \__fp_sep: } \cs_new:Npn \__fp_trig_large_auxiii:w 1 { \exp_stop_f: } -\cs_new:Npn \__fp_trig_large_auxv:www #1; #2; #3; +\cs_new:Npn \__fp_trig_large_auxv:www #1\__fp_sep: #2\__fp_sep: #3\__fp_sep: { \exp_after:wN \__fp_use_i_until_s:nw \exp_after:wN \__fp_trig_large_auxvii:w @@ -20446,24 +20669,24 @@ Type H <return> for immediate help}\def~{\errmessage{% { \__fp_trig_large_auxvi:wnnnnnnnn } + \c__fp_trailing_shift_int - \c__fp_middle_shift_int \__fp_use_i_until_s:nw - ; #3 #1 ; ; + \__fp_sep: #3 #1 \__fp_sep: \__fp_sep: } -\cs_new:Npn \__fp_trig_large_auxvi:wnnnnnnnn #1; #2#3#4#5#6#7#8#9 +\cs_new:Npn \__fp_trig_large_auxvi:wnnnnnnnn #1\__fp_sep: #2#3#4#5#6#7#8#9 { \exp_after:wN \__fp_trig_large_pack:NNNNNw \int_value:w \__fp_int_eval:w \c__fp_middle_shift_int + #2*#9 + #3*#8 + #4*#7 + #5*#6 - #1; {#2}{#3}{#4}{#5} {#7}{#8}{#9} + #1\__fp_sep: {#2}{#3}{#4}{#5} {#7}{#8}{#9} } -\cs_new:Npn \__fp_trig_large_pack:NNNNNw #1#2#3#4#5#6; - { + #1#2#3#4#5 ; #6 } +\cs_new:Npn \__fp_trig_large_pack:NNNNNw #1#2#3#4#5#6\__fp_sep: + { + #1#2#3#4#5 \__fp_sep: #6 } \cs_new:Npn \__fp_trig_large_auxvii:w #1#2#3 { \exp_after:wN \__fp_trig_large_auxviii:ww - \int_value:w \__fp_int_eval:w (#1#2#3 - 62) / 125 ; + \int_value:w \__fp_int_eval:w (#1#2#3 - 62) / 125 \__fp_sep: #1#2#3 } -\cs_new:Npn \__fp_trig_large_auxviii:ww #1; +\cs_new:Npn \__fp_trig_large_auxviii:ww #1\__fp_sep: { + #1 \if_int_odd:w #1 \exp_stop_f: @@ -20482,25 +20705,25 @@ Type H <return> for immediate help}\def~{\errmessage{% \prg_replicate:nn { 13 } { \__fp_trig_large_auxx:wNNNNN } + \c__fp_trailing_shift_int - \c__fp_middle_shift_int - ; + \__fp_sep: } -\cs_new:Npn \__fp_trig_large_auxx:wNNNNN #1; #2 #3#4#5#6 +\cs_new:Npn \__fp_trig_large_auxx:wNNNNN #1\__fp_sep: #2 #3#4#5#6 { \exp_after:wN \__fp_trig_large_pack:NNNNNw \int_value:w \__fp_int_eval:w \c__fp_middle_shift_int #2 8 * #3#4#5#6 - #1; #2 + #1\__fp_sep: #2 } -\cs_new:Npn \__fp_trig_large_auxxi:w #1; +\cs_new:Npn \__fp_trig_large_auxxi:w #1\__fp_sep: { \exp_after:wN \__fp_ep_mul_raw:wwwwN - \int_value:w \__fp_int_eval:w 0 \__fp_ep_to_ep_loop:N #1 ; ; ! - 0,{7853}{9816}{3397}{4483}{0961}{5661}; + \int_value:w \__fp_int_eval:w 0 \__fp_ep_to_ep_loop:N #1 \__fp_sep: \__fp_sep: ! + 0,{7853}{9816}{3397}{4483}{0961}{5661}\__fp_sep: \__fp_trig_small:ww } -\cs_new:Npn \__fp_sin_series_o:NNwwww #1#2#3. #4; +\cs_new:Npn \__fp_sin_series_o:NNwwww #1#2#3. #4\__fp_sep: { - \__fp_fixed_mul:wwn #4; #4; + \__fp_fixed_mul:wwn #4\__fp_sep: #4\__fp_sep: { \exp_after:wN \__fp_sin_series_aux_o:NNnwww \exp_after:wN #1 @@ -20513,7 +20736,7 @@ Type H <return> for immediate help}\def~{\errmessage{% {#3} } } -\cs_new:Npn \__fp_sin_series_aux_o:NNnwww #1#2#3 #4; #5,#6; +\cs_new:Npn \__fp_sin_series_aux_o:NNnwww #1#2#3 #4\__fp_sep: #5,#6\__fp_sep: { \if_int_odd:w \__fp_int_eval:w #3 / 2 \__fp_int_eval_end: \exp_after:wN \use_i:nn @@ -20521,29 +20744,46 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \use_ii:nn \fi: { % 1/18! - \__fp_fixed_mul_sub_back:wwwn {0000}{0000}{0000}{0001}{5619}{2070}; - #4;{0000}{0000}{0000}{0477}{9477}{3324}; - \__fp_fixed_mul_sub_back:wwwn #4;{0000}{0000}{0011}{4707}{4559}{7730}; - \__fp_fixed_mul_sub_back:wwwn #4;{0000}{0000}{2087}{6756}{9878}{6810}; - \__fp_fixed_mul_sub_back:wwwn #4;{0000}{0027}{5573}{1922}{3985}{8907}; - \__fp_fixed_mul_sub_back:wwwn #4;{0000}{2480}{1587}{3015}{8730}{1587}; - \__fp_fixed_mul_sub_back:wwwn #4;{0013}{8888}{8888}{8888}{8888}{8889}; - \__fp_fixed_mul_sub_back:wwwn #4;{0416}{6666}{6666}{6666}{6666}{6667}; - \__fp_fixed_mul_sub_back:wwwn #4;{5000}{0000}{0000}{0000}{0000}{0000}; - \__fp_fixed_mul_sub_back:wwwn#4;{10000}{0000}{0000}{0000}{0000}{0000}; + \__fp_fixed_mul_sub_back:wwwn {0000}{0000}{0000}{0001}{5619}{2070}\__fp_sep: + #4\__fp_sep: + {0000}{0000}{0000}{0477}{9477}{3324}\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep: + {0000}{0000}{0011}{4707}{4559}{7730}\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep: + {0000}{0000}{2087}{6756}{9878}{6810}\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep: + {0000}{0027}{5573}{1922}{3985}{8907}\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep: + {0000}{2480}{1587}{3015}{8730}{1587}\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep: + {0013}{8888}{8888}{8888}{8888}{8889}\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep: + {0416}{6666}{6666}{6666}{6666}{6667}\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep: + {5000}{0000}{0000}{0000}{0000}{0000}\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn#4\__fp_sep: + {10000}{0000}{0000}{0000}{0000}{0000}\__fp_sep: { \__fp_fixed_continue:wn 0, } } { % 1/17! - \__fp_fixed_mul_sub_back:wwwn {0000}{0000}{0000}{0028}{1145}{7254}; - #4;{0000}{0000}{0000}{7647}{1637}{3182}; - \__fp_fixed_mul_sub_back:wwwn #4;{0000}{0000}{0160}{5904}{3836}{8216}; - \__fp_fixed_mul_sub_back:wwwn #4;{0000}{0002}{5052}{1083}{8544}{1719}; - \__fp_fixed_mul_sub_back:wwwn #4;{0000}{0275}{5731}{9223}{9858}{9065}; - \__fp_fixed_mul_sub_back:wwwn #4;{0001}{9841}{2698}{4126}{9841}{2698}; - \__fp_fixed_mul_sub_back:wwwn #4;{0083}{3333}{3333}{3333}{3333}{3333}; - \__fp_fixed_mul_sub_back:wwwn #4;{1666}{6666}{6666}{6666}{6666}{6667}; - \__fp_fixed_mul_sub_back:wwwn#4;{10000}{0000}{0000}{0000}{0000}{0000}; - { \__fp_ep_mul:wwwwn 0, } #5,#6; + \__fp_fixed_mul_sub_back:wwwn {0000}{0000}{0000}{0028}{1145}{7254}\__fp_sep: + #4\__fp_sep: + {0000}{0000}{0000}{7647}{1637}{3182}\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep: + {0000}{0000}{0160}{5904}{3836}{8216}\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep: + {0000}{0002}{5052}{1083}{8544}{1719}\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep: + {0000}{0275}{5731}{9223}{9858}{9065}\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep: + {0001}{9841}{2698}{4126}{9841}{2698}\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep: + {0083}{3333}{3333}{3333}{3333}{3333}\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep: + {1666}{6666}{6666}{6666}{6666}{6667}\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn#4\__fp_sep: + {10000}{0000}{0000}{0000}{0000}{0000}\__fp_sep: + { \__fp_ep_mul:wwwwn 0, } #5,#6\__fp_sep: } { \exp_after:wN \__fp_sanitize:Nw @@ -20552,9 +20792,9 @@ Type H <return> for immediate help}\def~{\errmessage{% } #2 } -\cs_new:Npn \__fp_tan_series_o:NNwwww #1#2#3. #4; +\cs_new:Npn \__fp_tan_series_o:NNwwww #1#2#3. #4\__fp_sep: { - \__fp_fixed_mul:wwn #4; #4; + \__fp_fixed_mul:wwn #4\__fp_sep: #4\__fp_sep: { \exp_after:wN \__fp_tan_series_aux_o:Nnwww \int_value:w @@ -20565,22 +20805,32 @@ Type H <return> for immediate help}\def~{\errmessage{% {#3} } } -\cs_new:Npn \__fp_tan_series_aux_o:Nnwww #1 #2 #3; #4,#5; - { - \__fp_fixed_mul_sub_back:wwwn {0000}{0000}{1527}{3493}{0856}{7059}; - #3; {0000}{0159}{6080}{0274}{5257}{6472}; - \__fp_fixed_mul_sub_back:wwwn #3; {0002}{4571}{2320}{0157}{2558}{8481}; - \__fp_fixed_mul_sub_back:wwwn #3; {0115}{5830}{7533}{5397}{3168}{2147}; - \__fp_fixed_mul_sub_back:wwwn #3; {1929}{8245}{6140}{3508}{7719}{2982}; - \__fp_fixed_mul_sub_back:wwwn #3;{10000}{0000}{0000}{0000}{0000}{0000}; - { \__fp_ep_mul:wwwwn 0, } #4,#5; +\cs_new:Npn \__fp_tan_series_aux_o:Nnwww #1 #2 #3\__fp_sep: #4,#5\__fp_sep: + { + \__fp_fixed_mul_sub_back:wwwn {0000}{0000}{1527}{3493}{0856}{7059}\__fp_sep: + #3\__fp_sep: + {0000}{0159}{6080}{0274}{5257}{6472}\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn #3\__fp_sep: + {0002}{4571}{2320}{0157}{2558}{8481}\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn #3\__fp_sep: + {0115}{5830}{7533}{5397}{3168}{2147}\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn #3\__fp_sep: + {1929}{8245}{6140}{3508}{7719}{2982}\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn #3\__fp_sep: + {10000}{0000}{0000}{0000}{0000}{0000}\__fp_sep: + { \__fp_ep_mul:wwwwn 0, } #4,#5\__fp_sep: { - \__fp_fixed_mul_sub_back:wwwn {0000}{0007}{0258}{0681}{9408}{4706}; - #3;{0000}{2343}{7175}{1399}{6151}{7670}; - \__fp_fixed_mul_sub_back:wwwn #3;{0019}{2638}{4588}{9232}{8861}{3691}; - \__fp_fixed_mul_sub_back:wwwn #3;{0536}{6357}{0691}{4344}{6852}{4252}; - \__fp_fixed_mul_sub_back:wwwn #3;{5263}{1578}{9473}{6842}{1052}{6315}; - \__fp_fixed_mul_sub_back:wwwn#3;{10000}{0000}{0000}{0000}{0000}{0000}; + \__fp_fixed_mul_sub_back:wwwn {0000}{0007}{0258}{0681}{9408}{4706}\__fp_sep: + #3\__fp_sep: + {0000}{2343}{7175}{1399}{6151}{7670}\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn #3\__fp_sep: + {0019}{2638}{4588}{9232}{8861}{3691}\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn #3\__fp_sep: + {0536}{6357}{0691}{4344}{6852}{4252}\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn #3\__fp_sep: + {5263}{1578}{9473}{6842}{1052}{6315}\__fp_sep: + \__fp_fixed_mul_sub_back:wwwn#3\__fp_sep: + {10000}{0000}{0000}{0000}{0000}{0000}\__fp_sep: { \reverse_if:N \if_int_odd:w \__fp_int_eval:w (#2 - 1) / 2 \__fp_int_eval_end: @@ -20610,7 +20860,7 @@ Type H <return> for immediate help}\def~{\errmessage{% } \cs_new:Npe \__fp_atan_default:w #1#2#3 @ { #1 #2 #3 \c_one_fp @ } \cs_new:Npn \__fp_atanii_o:Nww - #1 \s__fp \__fp_chk:w #2#3#4; \s__fp \__fp_chk:w #5 #6 @ + #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: \s__fp \__fp_chk:w #5 #6 @ { \if_meaning:w 3 #2 \__fp_case_return_i_o:ww \fi: \if_meaning:w 3 #5 \__fp_case_return_ii_o:ww \fi: @@ -20626,29 +20876,29 @@ Type H <return> for immediate help}\def~{\errmessage{% \or: \__fp_case_return:nw { \__fp_atan_inf_o:NNNw #1 #3 0 } \fi: \__fp_atan_normal_o:NNnwNnw #1 - \s__fp \__fp_chk:w #2#3#4; + \s__fp \__fp_chk:w #2#3#4\__fp_sep: \s__fp \__fp_chk:w #5 #6 } -\cs_new:Npn \__fp_acotii_o:Nww #1#2; #3; - { \__fp_atanii_o:Nww #1#3; #2; } -\cs_new:Npn \__fp_atan_inf_o:NNNw #1#2#3 \s__fp \__fp_chk:w #4#5#6; +\cs_new:Npn \__fp_acotii_o:Nww #1#2\__fp_sep: #3\__fp_sep: + { \__fp_atanii_o:Nww #1#3\__fp_sep: #2\__fp_sep: } +\cs_new:Npn \__fp_atan_inf_o:NNNw #1#2#3 \s__fp \__fp_chk:w #4#5#6\__fp_sep: { \exp_after:wN \__fp_atan_combine_o:NwwwwwN \exp_after:wN #2 \int_value:w \__fp_int_eval:w - \if_meaning:w 2 #5 7 - \fi: #3 \exp_after:wN ; + \if_meaning:w 2 #5 7 - \fi: #3 \exp_after:wN \__fp_sep: \c__fp_one_fixed_tl - {0000}{0000}{0000}{0000}{0000}{0000}; - 0,{0000}{0000}{0000}{0000}{0000}{0000}; #1 + {0000}{0000}{0000}{0000}{0000}{0000}\__fp_sep: + 0,{0000}{0000}{0000}{0000}{0000}{0000}\__fp_sep: #1 } \cs_new_protected:Npn \__fp_atan_normal_o:NNnwNnw - #1 \s__fp \__fp_chk:w 1#2#3#4; \s__fp \__fp_chk:w 1#5#6#7; + #1 \s__fp \__fp_chk:w 1#2#3#4\__fp_sep: \s__fp \__fp_chk:w 1#5#6#7\__fp_sep: { \__fp_atan_test_o:NwwNwwN - #2 #3, #4{0000}{0000}; - #5 #6, #7{0000}{0000}; #1 + #2 #3, #4{0000}{0000}\__fp_sep: + #5 #6, #7{0000}{0000}\__fp_sep: #1 } -\cs_new:Npn \__fp_atan_test_o:NwwNwwN #1#2,#3; #4#5,#6; +\cs_new:Npn \__fp_atan_test_o:NwwNwwN #1#2,#3\__fp_sep: #4#5,#6\__fp_sep: { \exp_after:wN \__fp_atan_combine_o:NwwwwwN \exp_after:wN #1 @@ -20657,13 +20907,13 @@ Type H <return> for immediate help}\def~{\errmessage{% 7 - \__fp_int_eval:w \fi: \if_int_compare:w - \__fp_ep_compare:wwww #2,#3; #5,#6; > \c_zero_int + \__fp_ep_compare:wwww #2,#3\__fp_sep: #5,#6\__fp_sep: > \c_zero_int 3 - \exp_after:wN \__fp_reverse_args:Nww \fi: - \__fp_atan_div:wnwwnw #2,#3; #5,#6; + \__fp_atan_div:wnwwnw #2,#3\__fp_sep: #5,#6\__fp_sep: } -\cs_new:Npn \__fp_atan_div:wnwwnw #1,#2#3; #4,#5#6; +\cs_new:Npn \__fp_atan_div:wnwwnw #1,#2#3\__fp_sep: #4,#5#6\__fp_sep: { \if_int_compare:w \__fp_int_eval:w 41421 * #5 < #2 000 @@ -20673,49 +20923,50 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_atan_near:wwwn \fi: 0 - \__fp_ep_div:wwwwn #1,{#2}#3; #4,{#5}#6; + \__fp_ep_div:wwwwn #1,{#2}#3\__fp_sep: #4,{#5}#6\__fp_sep: \__fp_atan_auxi:ww } \cs_new:Npn \__fp_atan_near:wwwn - 0 \__fp_ep_div:wwwwn #1,#2; #3, + 0 \__fp_ep_div:wwwwn #1,#2\__fp_sep: #3, { 1 - \__fp_ep_to_fixed:wwn #1 - #3, #2; + \__fp_ep_to_fixed:wwn #1 - #3, #2\__fp_sep: \__fp_atan_near_aux:wwn } -\cs_new:Npn \__fp_atan_near_aux:wwn #1; #2; +\cs_new:Npn \__fp_atan_near_aux:wwn #1\__fp_sep: #2\__fp_sep: { - \__fp_fixed_add:wwn #1; #2; - { \__fp_fixed_sub:wwn #2; #1; { \__fp_ep_div:wwwwn 0, } 0, } + \__fp_fixed_add:wwn #1\__fp_sep: #2\__fp_sep: + { \__fp_fixed_sub:wwn #2\__fp_sep: #1\__fp_sep: { \__fp_ep_div:wwwwn 0, } 0, } } -\cs_new:Npn \__fp_atan_auxi:ww #1,#2; - { \__fp_ep_to_fixed:wwn #1,#2; \__fp_atan_auxii:w #1,#2; } -\cs_new:Npn \__fp_atan_auxii:w #1; +\cs_new:Npn \__fp_atan_auxi:ww #1,#2\__fp_sep: + { \__fp_ep_to_fixed:wwn #1,#2\__fp_sep: \__fp_atan_auxii:w #1,#2\__fp_sep: } +\cs_new:Npn \__fp_atan_auxii:w #1\__fp_sep: { - \__fp_fixed_mul:wwn #1; #1; + \__fp_fixed_mul:wwn #1\__fp_sep: #1\__fp_sep: { - \__fp_atan_Taylor_loop:www 39 ; - {0000}{0000}{0000}{0000}{0000}{0000} ; + \__fp_atan_Taylor_loop:www 39 \__fp_sep: + {0000}{0000}{0000}{0000}{0000}{0000} \__fp_sep: } - ! #1; + ! #1\__fp_sep: } -\cs_new:Npn \__fp_atan_Taylor_loop:www #1; #2; #3; +\cs_new:Npn \__fp_atan_Taylor_loop:www #1\__fp_sep: #2\__fp_sep: #3\__fp_sep: { \if_int_compare:w #1 = - \c_one_int \__fp_atan_Taylor_break:w \fi: - \exp_after:wN \__fp_fixed_div_int:wwN \c__fp_one_fixed_tl #1; - \__fp_rrot:www \__fp_fixed_mul_sub_back:wwwn #2; #3; + \exp_after:wN \__fp_fixed_div_int:wwN \c__fp_one_fixed_tl #1\__fp_sep: + \__fp_rrot:www \__fp_fixed_mul_sub_back:wwwn #2\__fp_sep: #3\__fp_sep: { \exp_after:wN \__fp_atan_Taylor_loop:www - \int_value:w \__fp_int_eval:w #1 - 2 ; + \int_value:w \__fp_int_eval:w #1 - 2 \__fp_sep: } - #3; + #3\__fp_sep: } \cs_new:Npn \__fp_atan_Taylor_break:w - \fi: #1 \__fp_fixed_mul_sub_back:wwwn #2; #3 ! - { \fi: ; #2 ; } -\cs_new:Npn \__fp_atan_combine_o:NwwwwwN #1 #2; #3; #4; #5,#6; #7 + \fi: #1 \__fp_fixed_mul_sub_back:wwwn #2\__fp_sep: #3 ! + { \fi: \__fp_sep: #2 \__fp_sep: } +\cs_new:Npn \__fp_atan_combine_o:NwwwwwN + #1 #2\__fp_sep: #3\__fp_sep: #4\__fp_sep: #5,#6\__fp_sep: #7 { \exp_after:wN \__fp_sanitize:Nw \exp_after:wN #1 @@ -20725,22 +20976,22 @@ Type H <return> for immediate help}\def~{\errmessage{% \else: \exp_after:wN \use_ii:nn \fi: - { #5 \__fp_fixed_mul:wwn #3; #6; } + { #5 \__fp_fixed_mul:wwn #3\__fp_sep: #6\__fp_sep: } { - \__fp_fixed_mul:wwn #3; #4; + \__fp_fixed_mul:wwn #3\__fp_sep: #4\__fp_sep: { \exp_after:wN \__fp_atan_combine_aux:ww - \int_value:w \__fp_int_eval:w #2 / 2 ; #2; + \int_value:w \__fp_int_eval:w #2 / 2 \__fp_sep: #2\__fp_sep: } } { #7 \__fp_fixed_to_float_o:wN \__fp_fixed_to_float_rad_o:wN } #1 } -\cs_new:Npn \__fp_atan_combine_aux:ww #1; #2; +\cs_new:Npn \__fp_atan_combine_aux:ww #1\__fp_sep: #2\__fp_sep: { \__fp_fixed_mul_short:wwn - {7853}{9816}{3397}{4483}{0961}{5661}; - {#1}{0000}{0000}; + {7853}{9816}{3397}{4483}{0961}{5661}\__fp_sep: + {#1}{0000}{0000}\__fp_sep: { \if_int_odd:w #2 \exp_stop_f: \exp_after:wN \__fp_fixed_sub:wwn @@ -20749,7 +21000,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: } } -\cs_new:Npn \__fp_asin_o:w #1 \s__fp \__fp_chk:w #2#3; @ +\cs_new:Npn \__fp_asin_o:w #1 \s__fp \__fp_chk:w #2#3\__fp_sep: @ { \if_case:w #2 \exp_stop_f: \__fp_case_return_same_o:w @@ -20762,9 +21013,9 @@ Type H <return> for immediate help}\def~{\errmessage{% \else: \__fp_case_return_same_o:w \fi: - \s__fp \__fp_chk:w #2 #3; + \s__fp \__fp_chk:w #2 #3\__fp_sep: } -\cs_new:Npn \__fp_acos_o:w #1 \s__fp \__fp_chk:w #2#3; @ +\cs_new:Npn \__fp_acos_o:w #1 \s__fp \__fp_chk:w #2#3\__fp_sep: @ { \if_case:w #2 \exp_stop_f: \__fp_case_use:nw { \__fp_atan_inf_o:NNNw #1 0 4 } @@ -20780,10 +21031,10 @@ Type H <return> for immediate help}\def~{\errmessage{% \else: \__fp_case_return_same_o:w \fi: - \s__fp \__fp_chk:w #2 #3; + \s__fp \__fp_chk:w #2 #3\__fp_sep: } \cs_new:Npn \__fp_asin_normal_o:NfwNnnnnw - #1#2#3 \s__fp \__fp_chk:w 1#4#5#6#7#8#9; + #1#2#3 \s__fp \__fp_chk:w 1#4#5#6#7#8#9\__fp_sep: { \if_int_compare:w #5 < \c_one_int \exp_after:wN \__fp_use_none_until_s:w @@ -20793,30 +21044,30 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: \__fp_use_i:ww \__fp_invalid_operation_o:fw {#2} - \s__fp \__fp_chk:w 1#4{#5}{#6}{#7}{#8}{#9}; + \s__fp \__fp_chk:w 1#4{#5}{#6}{#7}{#8}{#9}\__fp_sep: \__fp_asin_auxi_o:NnNww - #1 {#3} #4 #5,{#6}{#7}{#8}{#9}{0000}{0000}; + #1 {#3} #4 #5,{#6}{#7}{#8}{#9}{0000}{0000}\__fp_sep: } -\cs_new:Npn \__fp_asin_auxi_o:NnNww #1#2#3#4,#5; +\cs_new:Npn \__fp_asin_auxi_o:NnNww #1#2#3#4,#5\__fp_sep: { - \__fp_ep_to_fixed:wwn #4,#5; + \__fp_ep_to_fixed:wwn #4,#5\__fp_sep: \__fp_asin_isqrt:wn - \__fp_ep_mul:wwwwn #4,#5; + \__fp_ep_mul:wwwwn #4,#5\__fp_sep: \__fp_ep_to_ep:wwN \__fp_fixed_continue:wn { #2 \__fp_atan_test_o:NwwNwwN #3 } - 0 1,{1000}{0000}{0000}{0000}{0000}{0000}; #1 + 0 1,{1000}{0000}{0000}{0000}{0000}{0000}\__fp_sep: #1 } -\cs_new:Npn \__fp_asin_isqrt:wn #1; +\cs_new:Npn \__fp_asin_isqrt:wn #1\__fp_sep: { - \exp_after:wN \__fp_fixed_sub:wwn \c__fp_one_fixed_tl #1; + \exp_after:wN \__fp_fixed_sub:wwn \c__fp_one_fixed_tl #1\__fp_sep: { - \__fp_fixed_add_one:wN #1; + \__fp_fixed_add_one:wN #1\__fp_sep: \__fp_fixed_continue:wn { \__fp_ep_mul:wwwwn 0, } 0, } \__fp_ep_isqrt:wwn } -\cs_new:Npn \__fp_acsc_o:w #1 \s__fp \__fp_chk:w #2#3#4; @ +\cs_new:Npn \__fp_acsc_o:w #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: @ { \if_case:w \if_meaning:w 2 #2 #3 \fi: #2 \exp_stop_f: \__fp_case_use:nw @@ -20827,9 +21078,9 @@ Type H <return> for immediate help}\def~{\errmessage{% \or: \__fp_case_return_same_o:w \else: \__fp_case_return_o:Nw \c_minus_zero_fp \fi: - \s__fp \__fp_chk:w #2 #3 #4; + \s__fp \__fp_chk:w #2 #3 #4\__fp_sep: } -\cs_new:Npn \__fp_asec_o:w #1 \s__fp \__fp_chk:w #2#3; @ +\cs_new:Npn \__fp_asec_o:w #1 \s__fp \__fp_chk:w #2#3\__fp_sep: @ { \if_case:w #2 \exp_stop_f: \__fp_case_use:nw @@ -20843,24 +21094,24 @@ Type H <return> for immediate help}\def~{\errmessage{% \or: \__fp_case_use:nw { \__fp_atan_inf_o:NNNw #1 0 4 } \else: \__fp_case_return_same_o:w \fi: - \s__fp \__fp_chk:w #2 #3; + \s__fp \__fp_chk:w #2 #3\__fp_sep: } -\cs_new:Npn \__fp_acsc_normal_o:NfwNnw #1#2#3 \s__fp \__fp_chk:w 1#4#5#6; +\cs_new:Npn \__fp_acsc_normal_o:NfwNnw #1#2#3 \s__fp \__fp_chk:w 1#4#5#6\__fp_sep: { \int_compare:nNnTF {#5} < 1 { \__fp_invalid_operation_o:fw {#2} - \s__fp \__fp_chk:w 1#4{#5}#6; + \s__fp \__fp_chk:w 1#4{#5}#6\__fp_sep: } { \__fp_ep_div:wwwwn - 1,{1000}{0000}{0000}{0000}{0000}{0000}; - #5,#6{0000}{0000}; + 1,{1000}{0000}{0000}{0000}{0000}{0000}\__fp_sep: + #5,#6{0000}{0000}\__fp_sep: { \__fp_asin_auxi_o:NnNww #1 {#3} #4 } } } %% File: l3fp-convert.dtx -\cs_new:Npn \__fp_tuple_convert:Nw #1 \s__fp_tuple \__fp_tuple_chk:w #2 ; +\cs_new:Npn \__fp_tuple_convert:Nw #1 \s__fp_tuple \__fp_tuple_chk:w #2 \__fp_sep: { \int_case:nnF { \__fp_array_count:n {#2} } { @@ -20869,26 +21120,29 @@ Type H <return> for immediate help}\def~{\errmessage{% } { \__fp_tuple_convert_loop:nNw { } #1 - #2 { ? \__fp_tuple_convert_end:w } ; + #2 { ? \__fp_tuple_convert_end:w } \__fp_sep: @ { \use_none:nn } } } -\cs_new:Npn \__fp_tuple_convert_loop:nNw #1#2#3#4; #5 @ #6 +\cs_new:Npn \__fp_tuple_convert_loop:nNw #1#2#3#4\__fp_sep: #5 @ #6 { \use_none:n #3 - \exp_args:Nf \__fp_tuple_convert_loop:nNw { #2 #3#4 ; } #2 #5 + \exp_args:Nf \__fp_tuple_convert_loop:nNw { #2 #3#4 \__fp_sep: } #2 #5 @ { #6 , ~ #1 } } \cs_new:Npn \__fp_tuple_convert_end:w #1 @ #2 { \exp_after:wN ( \exp:w \exp_end_continue_f:w #2 ) } -\cs_new:Npn \__fp_trim_zeros:w #1 ; +\cs_new:Npn \__fp_trim_zeros:w #1 \__fp_sep: { - \__fp_trim_zeros_loop:w #1 - ; \__fp_trim_zeros_loop:w 0; \__fp_trim_zeros_dot:w .; \s__fp_stop + \__fp_trim_zeros_loop:w #1 \__fp_sep: + \__fp_trim_zeros_loop:w 0\__fp_sep: + \__fp_trim_zeros_dot:w .\__fp_sep: + \s__fp_stop } -\cs_new:Npn \__fp_trim_zeros_loop:w #1 0; #2 { #2 #1 ; #2 } -\cs_new:Npn \__fp_trim_zeros_dot:w #1 .; { \__fp_trim_zeros_end:w #1 ; } -\cs_new:Npn \__fp_trim_zeros_end:w #1 ; #2 \s__fp_stop { #1 } +\cs_new:Npn \__fp_trim_zeros_loop:w #1 0\__fp_sep: #2 { #2 #1 \__fp_sep: #2 } +\cs_new:Npn \__fp_trim_zeros_dot:w #1 .\__fp_sep: + { \__fp_trim_zeros_end:w #1 \__fp_sep: } +\cs_new:Npn \__fp_trim_zeros_end:w #1 \__fp_sep: #2 \s__fp_stop { #1 } \cs_new:Npn \fp_to_scientific:N #1 { \exp_after:wN \__fp_to_scientific_dispatch:w #1 } \cs_generate_variant:Nn \fp_to_scientific:N { c } @@ -20903,9 +21157,9 @@ Type H <return> for immediate help}\def~{\errmessage{% #1 \__fp_to_scientific:w \__fp_to_scientific_recover:w #1 } -\cs_new:Npn \__fp_to_scientific_recover:w #1 #2 ; +\cs_new:Npn \__fp_to_scientific_recover:w #1 #2 \__fp_sep: { - \__fp_error:nffn { unknown-type } { \tl_to_str:n { #2 ; } } { } { } + \__fp_error:nffn { unknown-type } { \tl_to_str:n { #2 \__fp_sep: } } { } { } nan } \cs_new:Npn \__fp_tuple_to_scientific:w @@ -20934,14 +21188,14 @@ Type H <return> for immediate help}\def~{\errmessage{% \s__fp \__fp_chk:w #1 #2 } \cs_new:Npn \__fp_to_scientific_normal:wnnnnn - \s__fp \__fp_chk:w 1 #1 #2 #3#4#5#6 ; + \s__fp \__fp_chk:w 1 #1 #2 #3#4#5#6 \__fp_sep: { \exp_after:wN \__fp_to_scientific_normal:wNw \exp_after:wN e \int_value:w \__fp_int_eval:w #2 - 1 - ; #3 #4 #5 #6 ; + \__fp_sep: #3 #4 #5 #6 \__fp_sep: } -\cs_new:Npn \__fp_to_scientific_normal:wNw #1 ; #2#3; +\cs_new:Npn \__fp_to_scientific_normal:wNw #1 \__fp_sep: #2#3\__fp_sep: { #2.#3 #1 } \cs_new:Npn \fp_to_decimal:N #1 { \exp_after:wN \__fp_to_decimal_dispatch:w #1 } @@ -20957,9 +21211,9 @@ Type H <return> for immediate help}\def~{\errmessage{% #1 \__fp_to_decimal:w \__fp_to_decimal_recover:w #1 } -\cs_new:Npn \__fp_to_decimal_recover:w #1 #2 ; +\cs_new:Npn \__fp_to_decimal_recover:w #1 #2 \__fp_sep: { - \__fp_error:nffn { unknown-type } { \tl_to_str:n { #2 ; } } { } { } + \__fp_error:nffn { unknown-type } { \tl_to_str:n { #2 \__fp_sep: } } { } { } nan } \cs_new:Npn \__fp_tuple_to_decimal:w @@ -20988,7 +21242,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \s__fp \__fp_chk:w #1 #2 } \cs_new:Npn \__fp_to_decimal_normal:wnnnnn - \s__fp \__fp_chk:w 1 #1 #2 #3#4#5#6 ; + \s__fp \__fp_chk:w 1 #1 #2 #3#4#5#6 \__fp_sep: { \int_compare:nNnTF {#2} > 0 { @@ -21000,7 +21254,7 @@ Type H <return> for immediate help}\def~{\errmessage{% { \exp_after:wN \exp_after:wN \exp_after:wN \__fp_to_decimal_huge:wnnnn - \prg_replicate:nn { #2 - \c__fp_prec_int } { 0 } ; + \prg_replicate:nn { #2 - \c__fp_prec_int } { 0 } \__fp_sep: } {#3} {#4} {#5} {#6} } @@ -21009,19 +21263,19 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN 0 \exp_after:wN . \exp:w \exp_end_continue_f:w \prg_replicate:nn { - #2 } { 0 } - #3#4#5#6 ; + #3#4#5#6 \__fp_sep: } } -\cs_new:Npn \__fp_to_decimal_large:Nnnw #1#2#3#4; +\cs_new:Npn \__fp_to_decimal_large:Nnnw #1#2#3#4\__fp_sep: { \exp_after:wN \__fp_trim_zeros:w \int_value:w \if_int_compare:w #2 > \c_zero_int #2 \fi: \exp_stop_f: - #3.#4 ; + #3.#4 \__fp_sep: } -\cs_new:Npn \__fp_to_decimal_huge:wnnnn #1; #2#3#4#5 { #2#3#4#5 #1 } +\cs_new:Npn \__fp_to_decimal_huge:wnnnn #1\__fp_sep: #2#3#4#5 { #2#3#4#5 #1 } \cs_new:Npn \fp_to_tl:N #1 { \exp_after:wN \__fp_to_tl_dispatch:w #1 } \cs_generate_variant:Nn \fp_to_tl:N { c } \cs_new:Npn \fp_to_tl:n @@ -21031,9 +21285,9 @@ Type H <return> for immediate help}\def~{\errmessage{% } \cs_new:Npn \__fp_to_tl_dispatch:w #1 { \__fp_change_func_type:NNN #1 \__fp_to_tl:w \__fp_to_tl_recover:w #1 } -\cs_new:Npn \__fp_to_tl_recover:w #1 #2 ; +\cs_new:Npn \__fp_to_tl_recover:w #1 #2 \__fp_sep: { - \__fp_error:nffn { unknown-type } { \tl_to_str:n { #2 ; } } { } { } + \__fp_error:nffn { unknown-type } { \tl_to_str:n { #2 \__fp_sep: } } { } { } nan } \cs_new:Npn \__fp_tuple_to_tl:w @@ -21057,15 +21311,15 @@ Type H <return> for immediate help}\def~{\errmessage{% \s__fp \__fp_chk:w 1 0 {#1} } \cs_new:Npn \__fp_to_tl_scientific:wnnnnn - \s__fp \__fp_chk:w 1 #1 #2 #3#4#5#6 ; + \s__fp \__fp_chk:w 1 #1 #2 #3#4#5#6 \__fp_sep: { \exp_after:wN \__fp_to_tl_scientific:wNw \exp_after:wN e \int_value:w \__fp_int_eval:w #2 - 1 - ; #3 #4 #5 #6 ; + \__fp_sep: #3 #4 #5 #6 \__fp_sep: } -\cs_new:Npn \__fp_to_tl_scientific:wNw #1 ; #2#3; - { \__fp_trim_zeros:w #2.#3 ; #1 } +\cs_new:Npn \__fp_to_tl_scientific:wNw #1 \__fp_sep: #2#3\__fp_sep: + { \__fp_trim_zeros:w #2.#3 \__fp_sep: #1 } \cs_new:Npn \fp_to_dim:N #1 { \exp_after:wN \__fp_to_dim_dispatch:w #1 } \cs_generate_variant:Nn \fp_to_dim:N { c } @@ -21074,14 +21328,14 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_to_dim_dispatch:w \exp:w \exp_end_continue_f:w \__fp_parse:n } -\cs_new:Npn \__fp_to_dim_dispatch:w #1#2 ; +\cs_new:Npn \__fp_to_dim_dispatch:w #1#2 \__fp_sep: { \__fp_change_func_type:NNN #1 \__fp_to_dim:w \__fp_to_dim_recover:w - #1 #2 ; + #1 #2 \__fp_sep: } \cs_new:Npn \__fp_to_dim_recover:w #1 { \__fp_invalid_operation:nnw { 0pt } { fp_to_dim } } -\cs_new:Npn \__fp_to_dim:w #1 ; { \__fp_to_decimal:w #1 ; pt } +\cs_new:Npn \__fp_to_dim:w #1 \__fp_sep: { \__fp_to_decimal:w #1 \__fp_sep: pt } \cs_new:Npn \fp_to_int:N #1 { \exp_after:wN \__fp_to_int_dispatch:w #1 } \cs_generate_variant:Nn \fp_to_int:N { c } \cs_new:Npn \fp_to_int:n @@ -21089,24 +21343,24 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_to_int_dispatch:w \exp:w \exp_end_continue_f:w \__fp_parse:n } -\cs_new:Npn \__fp_to_int_dispatch:w #1#2 ; +\cs_new:Npn \__fp_to_int_dispatch:w #1#2 \__fp_sep: { \__fp_change_func_type:NNN #1 \__fp_to_int:w \__fp_to_int_recover:w - #1 #2 ; + #1 #2 \__fp_sep: } \cs_new:Npn \__fp_to_int_recover:w #1 { \__fp_invalid_operation:nnw { 0 } { fp_to_int } } -\cs_new:Npn \__fp_to_int:w #1; +\cs_new:Npn \__fp_to_int:w #1\__fp_sep: { \exp_after:wN \__fp_to_decimal:w \exp:w \exp_end_continue_f:w - \__fp_round:Nwn \__fp_round_to_nearest:NNN #1; { 0 } + \__fp_round:Nwn \__fp_round_to_nearest:NNN #1\__fp_sep: { 0 } } \cs_new:Npn \dim_to_fp:n #1 { \exp_after:wN \__fp_from_dim_test:ww \exp_after:wN 0 \exp_after:wN , - \int_value:w \tex_glueexpr:D #1 ; + \int_value:w \tex_glueexpr:D #1 \__fp_sep: } \cs_new:Npn \__fp_from_dim_test:ww #1, #2 { @@ -21122,18 +21376,18 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: \fi: } -\cs_new:Npn \__fp_from_dim:wNw #1,#2#3; +\cs_new:Npn \__fp_from_dim:wNw #1,#2#3\__fp_sep: { - \__fp_pack_twice_four:wNNNNNNNN \__fp_from_dim:wNNnnnnnn ; - #3 000 0000 00 {10}987654321; #2 {#1} + \__fp_pack_twice_four:wNNNNNNNN \__fp_from_dim:wNNnnnnnn \__fp_sep: + #3 000 0000 00 {10}987654321\__fp_sep: #2 {#1} } -\cs_new:Npn \__fp_from_dim:wNNnnnnnn #1; #2#3#4#5#6#7#8#9 - { \__fp_from_dim:wnnnnwNn #1 {#2#300} {0000} ; } -\cs_new:Npn \__fp_from_dim:wnnnnwNn #1; #2#3#4#5#6; #7#8 +\cs_new:Npn \__fp_from_dim:wNNnnnnnn #1\__fp_sep: #2#3#4#5#6#7#8#9 + { \__fp_from_dim:wnnnnwNn #1 {#2#300} {0000} \__fp_sep: } +\cs_new:Npn \__fp_from_dim:wnnnnwNn #1\__fp_sep: #2#3#4#5#6\__fp_sep: #7#8 { \__fp_mul_npos_o:Nww #7 - \s__fp \__fp_chk:w 1 #7 {#5} #1 ; - \s__fp \__fp_chk:w 1 0 {#8} {1525} {8789} {0625} {0000} ; + \s__fp \__fp_chk:w 1 #7 {#5} #1 \__fp_sep: + \s__fp \__fp_chk:w 1 0 {#8} {1525} {8789} {0625} {0000} \__fp_sep: \prg_do_nothing: } \cs_new_eq:NN \fp_use:N \fp_to_decimal:N @@ -21153,16 +21407,16 @@ Type H <return> for immediate help}\def~{\errmessage{% { \exp_last_unbraced:Ne \use_ii:nn { - \__fp_array_to_clist_loop:Nw #1 { ? \prg_break: } ; + \__fp_array_to_clist_loop:Nw #1 { ? \prg_break: } \__fp_sep: \prg_break_point: } } } -\cs_new:Npn \__fp_array_to_clist_loop:Nw #1#2; +\cs_new:Npn \__fp_array_to_clist_loop:Nw #1#2\__fp_sep: { \use_none:n #1 , ~ - \exp_not:f { \__fp_to_tl_dispatch:w #1 #2 ; } + \exp_not:f { \__fp_to_tl_dispatch:w #1 #2 \__fp_sep: } \__fp_array_to_clist_loop:Nw } %% File: l3fp-random.dtx @@ -21177,7 +21431,7 @@ Type H <return> for immediate help}\def~{\errmessage{% + \tex_uniformdeviate:D #1 + 8192 ) / 16384 } \cs_new:Npn \__fp_rand_myriads:n #1 - { \__fp_rand_myriads_loop:w #1 \prg_break: X \prg_break_point: ; } + { \__fp_rand_myriads_loop:w #1 \prg_break: X \prg_break_point: \__fp_sep: } \cs_new:Npn \__fp_rand_myriads_loop:w #1 X { #1 @@ -21186,14 +21440,14 @@ Type H <return> for immediate help}\def~{\errmessage{% \__kernel_randint:n { 10000 } \__fp_rand_myriads_loop:w } -\cs_new:Npn \__fp_rand_myriads_get:w 1 #1 ; { ; {#1} } +\cs_new:Npn \__fp_rand_myriads_get:w 1 #1 \__fp_sep: { \__fp_sep: {#1} } \cs_new:Npn \__fp_rand_o:Nw ? #1 @ { \tl_if_empty:nTF {#1} { \exp_after:wN \__fp_rand_o:w \exp:w \exp_end_continue_f:w - \__fp_rand_myriads:n { XXXX } { 0000 } { 0000 } ; 0 + \__fp_rand_myriads:n { XXXX } { 0000 } { 0000 } \__fp_sep: 0 } { \msg_expandable_error:nnnnn @@ -21201,7 +21455,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \c_nan_fp } } -\cs_new:Npn \__fp_rand_o:w ; +\cs_new:Npn \__fp_rand_o:w \__fp_sep: { \exp_after:wN \__fp_sanitize:Nw \exp_after:wN 0 @@ -21215,41 +21469,41 @@ Type H <return> for immediate help}\def~{\errmessage{% { \__fp_randint_default:w \__fp_randint_o:w } } \cs_new:Npn \__fp_randint_default:w #1 { \exp_after:wN #1 \c_one_fp } -\cs_new:Npn \__fp_randint_badarg:w \s__fp \__fp_chk:w #1#2#3; +\cs_new:Npn \__fp_randint_badarg:w \s__fp \__fp_chk:w #1#2#3\__fp_sep: { - \__fp_int:wTF \s__fp \__fp_chk:w #1#2#3; + \__fp_int:wTF \s__fp \__fp_chk:w #1#2#3\__fp_sep: { \if_meaning:w 1 #1 \if_int_compare:w - \__fp_use_i_until_s:nw #3 ; > \c__fp_prec_int + \__fp_use_i_until_s:nw #3 \__fp_sep: > \c__fp_prec_int \c_one_int \fi: \fi: } { \c_one_int } } -\cs_new:Npn \__fp_randint_o:w #1; #2; @ +\cs_new:Npn \__fp_randint_o:w #1\__fp_sep: #2\__fp_sep: @ { \if_case:w - \__fp_randint_badarg:w #1; - \__fp_randint_badarg:w #2; - \if:w 1 \__fp_compare_back:ww #2; #1; \c_one_int \fi: + \__fp_randint_badarg:w #1\__fp_sep: + \__fp_randint_badarg:w #2\__fp_sep: + \if:w 1 \__fp_compare_back:ww #2\__fp_sep: #1\__fp_sep: \c_one_int \fi: \c_zero_int - \__fp_randint_auxi_o:ww #1; #2; + \__fp_randint_auxi_o:ww #1\__fp_sep: #2\__fp_sep: \or: \__fp_invalid_operation_tl_o:ff - { randint } { \__fp_array_to_clist:n { #1; #2; } } + { randint } { \__fp_array_to_clist:n { #1\__fp_sep: #2\__fp_sep: } } \exp:w \fi: \exp_after:wN \exp_end: } -\cs_new:Npn \__fp_randint_auxi_o:ww #1 ; #2 ; #3 \exp_end: +\cs_new:Npn \__fp_randint_auxi_o:ww #1 \__fp_sep: #2 \__fp_sep: #3 \exp_end: { \fi: - \__fp_randint_auxii:wn #2 ; - { \__fp_randint_auxii:wn #1 ; \__fp_randint_auxiii_o:ww } + \__fp_randint_auxii:wn #2 \__fp_sep: + { \__fp_randint_auxii:wn #1 \__fp_sep: \__fp_randint_auxiii_o:ww } } -\cs_new:Npn \__fp_randint_auxii:wn \s__fp \__fp_chk:w #1#2#3#4 ; +\cs_new:Npn \__fp_randint_auxii:wn \s__fp \__fp_chk:w #1#2#3#4 \__fp_sep: { \if_meaning:w 0 #1 \exp_after:wN \use_i:nn @@ -21260,7 +21514,7 @@ Type H <return> for immediate help}\def~{\errmessage{% { \exp_after:wN \__fp_ep_to_fixed:wwn \int_value:w \__fp_int_eval:w - #3 - \c__fp_prec_int , #4 {0000} {0000} ; + #3 - \c__fp_prec_int , #4 {0000} {0000} \__fp_sep: { \if_meaning:w 0 #2 \exp_after:wN \use_i:nnnn @@ -21271,22 +21525,22 @@ Type H <return> for immediate help}\def~{\errmessage{% \__fp_fixed_continue:wn } } -\cs_new:Npn \__fp_randint_auxiii_o:ww #1 ; #2 ; +\cs_new:Npn \__fp_randint_auxiii_o:ww #1 \__fp_sep: #2 \__fp_sep: { - \__fp_fixed_add:wwn #2 ; - {0000} {0000} {0000} {0001} {0000} {0000} ; - \__fp_fixed_sub:wwn #1 ; + \__fp_fixed_add:wwn #2 \__fp_sep: + {0000} {0000} {0000} {0001} {0000} {0000} \__fp_sep: + \__fp_fixed_sub:wwn #1 \__fp_sep: { \exp_after:wN \use_i:nn \exp_after:wN \__fp_fixed_mul_add:wwwn - \exp:w \exp_end_continue_f:w \__fp_rand_myriads:n { XXXXXX } ; + \exp:w \exp_end_continue_f:w \__fp_rand_myriads:n { XXXXXX } \__fp_sep: } - #1 ; + #1 \__fp_sep: \__fp_randint_auxiv_o:ww - #2 ; - \__fp_randint_auxv_o:w #1 ; @ + #2 \__fp_sep: + \__fp_randint_auxv_o:w #1 \__fp_sep: @ } -\cs_new:Npn \__fp_randint_auxiv_o:ww #1#2#3#4#5 ; #6#7#8#9 +\cs_new:Npn \__fp_randint_auxiv_o:ww #1#2#3#4#5 \__fp_sep: #6#7#8#9 { \if_int_compare:w \if_int_compare:w #1#2 > #6#7 \exp_stop_f: 1 \else: @@ -21296,7 +21550,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \fi: \__fp_randint_auxv_o:w {#1}{#2}{#3}{#4}#5 } -\cs_new:Npn \__fp_randint_auxv_o:w #1#2#3#4#5 ; #6 @ +\cs_new:Npn \__fp_randint_auxv_o:w #1#2#3#4#5 \__fp_sep: #6 @ { \exp_after:wN \__fp_sanitize:Nw \int_value:w @@ -21308,7 +21562,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_reverse_args:Nww \fi: \exp_after:wN \__fp_fixed_sub:wwn \c__fp_one_fixed_tl - {#1} {#2} {#3} {#4} {0000} {0000} ; + {#1} {#2} {#3} {#4} {0000} {0000} \__fp_sep: { \exp_after:wN \exp_stop_f: \int_value:w \__fp_int_eval:w \c__fp_prec_int @@ -21322,16 +21576,16 @@ Type H <return> for immediate help}\def~{\errmessage{% \int_eval:n { \exp_after:wN \__fp_randint:ww - \int_value:w \int_eval:n {#1} \exp_after:wN ; - \int_value:w \int_eval:n {#2} ; + \int_value:w \int_eval:n {#1} \exp_after:wN \__fp_sep: + \int_value:w \int_eval:n {#2} \__fp_sep: } } -\cs_new:Npn \__fp_randint:ww #1; #2; +\cs_new:Npn \__fp_randint:ww #1\__fp_sep: #2\__fp_sep: { \if_int_compare:w #1 > #2 \exp_stop_f: \msg_expandable_error:nnnn { kernel } { randint-backward-range } {#1} {#2} - \__fp_randint:ww #2; #1; + \__fp_randint:ww #2\__fp_sep: #1\__fp_sep: \else: \if_int_compare:w \__fp_int_eval:w #2 \if_int_compare:w #1 > \c_zero_int @@ -21355,46 +21609,49 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_randint_wide_aux:w \int_value:w \exp_after:wN \__fp_randint_split_o:Nw - \tex_uniformdeviate:D 268435456 ; + \tex_uniformdeviate:D 268435456 \__fp_sep: \int_value:w \exp_after:wN \__fp_randint_split_o:Nw - \tex_uniformdeviate:D 268435456 ; + \tex_uniformdeviate:D 268435456 \__fp_sep: \int_value:w \exp_after:wN \__fp_randint_split_o:Nw \int_value:w \__fp_int_eval:w 131072 + \exp_after:wN \__fp_randint_split_o:Nw \int_value:w - \__kernel_int_add:nnn {#2} { -#1 } { -\c_max_int } ; + \__kernel_int_add:nnn {#2} { -#1 } { -\c_max_int } \__fp_sep: . } -\cs_new:Npn \__fp_randint_split_o:Nw #1#2 ; +\cs_new:Npn \__fp_randint_split_o:Nw #1#2 \__fp_sep: { \if_meaning:w 0 #1 - 0 \exp_after:wN ; \int_value:w 0 + 0 \exp_after:wN \__fp_sep: \int_value:w 0 \else: \exp_after:wN \__fp_randint_split_aux:w - \int_value:w \__fp_int_eval:w (#1#2 - 8192) / 16384 ; + \int_value:w \__fp_int_eval:w (#1#2 - 8192) / 16384 \__fp_sep: + #1#2 \fi: - \exp_after:wN ; + \exp_after:wN \__fp_sep: } -\cs_new:Npn \__fp_randint_split_aux:w #1 ; +\cs_new:Npn \__fp_randint_split_aux:w #1 \__fp_sep: { - #1 \exp_after:wN ; + #1 \exp_after:wN \__fp_sep: \int_value:w \__fp_int_eval:w - #1 * 16384 } -\cs_new:Npn \__fp_randint_wide_aux:w #1;#2; #3;#4; #5;#6;#7; . +\cs_new:Npn \__fp_randint_wide_aux:w + #1\__fp_sep:#2\__fp_sep: #3\__fp_sep:#4\__fp_sep: + #5\__fp_sep:#6\__fp_sep:#7\__fp_sep: . { \exp_after:wN \__fp_randint_wide_auxii:w \int_value:w \__fp_int_eval:w #5 * #3 + #6 * #1 + (#5 * #4 + #6 * #3 + #7 * #1 + (#5 * #2 + #7 * #3 + (16384 * #6 + #7) * (16384 * #4 + #2) / 268435456) / 16384 - ) / 16384 \exp_after:wN ; - \int_value:w \__fp_int_eval:w (#5 + #6) * 16384 + #7 ; - #1 ; #5 ; + ) / 16384 \exp_after:wN \__fp_sep: + \int_value:w \__fp_int_eval:w (#5 + #6) * 16384 + #7 \__fp_sep: + #1 \__fp_sep: #5 \__fp_sep: } -\cs_new:Npn \__fp_randint_wide_auxii:w #1; #2; #3; #4; +\cs_new:Npn \__fp_randint_wide_auxii:w + #1\__fp_sep: #2\__fp_sep: #3\__fp_sep: #4\__fp_sep: { \if_int_odd:w 0 \if_int_compare:w #1 = #2 \else: \exp_stop_f: \fi: @@ -21421,7 +21678,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \if_int_compare:w #1 < \c_one_int \msg_expandable_error:nnnn { kernel } { randint-backward-range } { 1 } {#1} - \__fp_randint:ww #1; 1; + \__fp_randint:ww #1\__fp_sep: 1\__fp_sep: \else: \if_int_compare:w #1 > \c__kernel_randint_max_int \__kernel_randint:nn { 1 } {#1} @@ -21469,7 +21726,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_last_unbraced:Nf \__fp_types_binary_auxi:Nww { \__fp_types_cs_to_op:N #1 } } -\cs_new:Npn \__fp_types_binary_auxi:Nww #1#2#3; #4#5; @ +\cs_new:Npn \__fp_types_binary_auxi:Nww #1#2#3\__fp_sep: #4#5\__fp_sep: @ { \exp_after:wN \__fp_types_binary_auxii:NNww \cs:w @@ -21479,7 +21736,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \__fp_type_from_scan:N #4 _o:ww \cs_end: - #1 #2#3; #4#5; + #1 #2#3\__fp_sep: #4#5\__fp_sep: } \cs_new:Npn \__fp_types_binary_auxii:NNww #1#2 { @@ -21490,12 +21747,12 @@ Type H <return> for immediate help}\def~{\errmessage{% %% File l3fp-symbolic.dtx (C) Copyright 2012-2015,2017,2018,2020,2021,2023 The LaTeX Project \fp_new:N \l__fp_symbolic_fp \scan_new:N \s__fp_symbolic -\cs_new_protected:Npn \__fp_symbolic_chk:w #1,#2#3; +\cs_new_protected:Npn \__fp_symbolic_chk:w #1,#2#3\__fp_sep: { \msg_error:nne { fp } { misused-fp } { \__fp_to_tl_dispatch:w - \s__fp_symbolic \__fp_symbolic_chk:w #1,{#2}; + \s__fp_symbolic \__fp_symbolic_chk:w #1,{#2}\__fp_sep: } } \cs_new:Npn \__fp_if_has_symbolic:nTF #1 @@ -21508,7 +21765,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs_new:Npn \__fp_if_has_symbolic_aux:w #1 \s__fp_symbolic #2 \s__fp_mark #3#4 \s__fp_stop { #3 } \cs_new:Npn \__fp_exp_after_symbolic_f:nw - #1 \s__fp_symbolic \__fp_symbolic_chk:w #2, #3#4; + #1 \s__fp_symbolic \__fp_symbolic_chk:w #2, #3#4\__fp_sep: { \exp_after:wN \__fp_exp_after_symbolic_aux:w \exp:w @@ -21520,13 +21777,13 @@ Type H <return> for immediate help}\def~{\errmessage{% \__fp_exp_after_array_f:w #3 \s__fp_expr_stop \exp_after:wN } - \exp_after:wN ; + \exp_after:wN \__fp_sep: \exp:w \exp_end_continue_f:w #1 } -\cs_new:Npn \__fp_exp_after_symbolic_aux:w #1, #2; +\cs_new:Npn \__fp_exp_after_symbolic_aux:w #1, #2\__fp_sep: { \__fp_if_has_symbolic:nTF {#2} - { \s__fp_symbolic \__fp_symbolic_chk:w #1, {#2} ; } + { \s__fp_symbolic \__fp_symbolic_chk:w #1, {#2} \__fp_sep: } { #1 #2 @ \prg_do_nothing: } } \cs_new:Npn \__fp_exp_after_symbolic_loop:N #1 @@ -21536,11 +21793,11 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp:w \__fp_exp_after_symbolic_loop:N } -\cs_new:Npn \__fp_symbolic_binary_o:Nww #1 #2; #3; +\cs_new:Npn \__fp_symbolic_binary_o:Nww #1 #2\__fp_sep: #3\__fp_sep: { \__fp_exp_after_symbolic_f:nw { \exp_after:wN \exp_stop_f: } \s__fp_symbolic \__fp_symbolic_chk:w - \__fp_types_binary:Nww #1 , { #2; #3; } ; + \__fp_types_binary:Nww #1 , { #2\__fp_sep: #3\__fp_sep: } \__fp_sep: } \cs_set_protected:Npn \__fp_tmp:w #1#2 { @@ -21556,11 +21813,11 @@ Type H <return> for immediate help}\def~{\errmessage{% } \tl_map_inline:nn { + - * / ^ & | } { \exp_args:Nc \__fp_tmp:w { __fp_#1_o:ww } {#1} } -\cs_new:Npn \__fp_symbolic_unary_o:NNw #1#2#3; @ +\cs_new:Npn \__fp_symbolic_unary_o:NNw #1#2#3\__fp_sep: @ { \__fp_exp_after_symbolic_f:nw { \exp_after:wN \exp_stop_f: } \s__fp_symbolic \__fp_symbolic_chk:w - \__fp_types_unary:NNw #1#2 , { #3; } ; + \__fp_types_unary:NNw #1#2 , { #3\__fp_sep: } \__fp_sep: } \tl_map_inline:nn { @@ -21586,11 +21843,11 @@ Type H <return> for immediate help}\def~{\errmessage{% \__fp_tmp:w { decimal } { 0 } \__fp_to_decimal_dispatch:w \__fp_tmp:w { int } { 0 } \__fp_to_int_dispatch:w \__fp_tmp:w { scientific } { nan } \__fp_to_scientific_dispatch:w -\cs_new:Npn \__fp_symbolic_convert:wnnN #1#2; #3#4#5 +\cs_new:Npn \__fp_symbolic_convert:wnnN #1#2\__fp_sep: #3#4#5 { \str_if_eq:nnTF {#1} { \s__fp_symbolic } - { \__fp_invalid_operation:nnw {#3} {#4} #1#2; } - { #5 #1#2; } + { \__fp_invalid_operation:nnw {#3} {#4} #1#2\__fp_sep: } + { #5 #1#2\__fp_sep: } } \cs_new:Npn \__fp_symbolic_cs_arg_to_fn:NN #1 { @@ -21611,7 +21868,7 @@ Type H <return> for immediate help}\def~{\errmessage{% } } \cs_new:Npn \__fp_symbolic_to_tl:w - \s__fp_symbolic \__fp_symbolic_chk:w #1#2, #3#4; + \s__fp_symbolic \__fp_symbolic_chk:w #1#2, #3#4\__fp_sep: { \str_case:nnTF {#1} { @@ -21630,13 +21887,13 @@ Type H <return> for immediate help}\def~{\errmessage{% ( \__fp_to_tl_dispatch:w #3 ) } } -\cs_new:Npn \__fp_symbolic_binary_to_tl:Nww #1, #2; #3; @ +\cs_new:Npn \__fp_symbolic_binary_to_tl:Nww #1, #2\__fp_sep: #3\__fp_sep: @ { \use:e { - ( \__fp_to_tl_dispatch:w #2; ) + ( \__fp_to_tl_dispatch:w #2\__fp_sep: ) \__fp_types_cs_to_op:N #1 - ( \__fp_to_tl_dispatch:w #3; ) + ( \__fp_to_tl_dispatch:w #3\__fp_sep: ) } } \cs_new:Npn \__fp_symbolic_function_to_tl:Nw #1, #2@ @@ -21684,7 +21941,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \token_if_eq_meaning:NNTF #2 \prg_do_nothing: { \s__fp_symbolic \__fp_symbolic_chk:w - \__fp_variable_o:w #1 , { } ; + \__fp_variable_o:w #1 , { } \__fp_sep: } { \exp_after:wN \s__fp_symbolic @@ -21694,7 +21951,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \__fp_exp_after_symbolic_loop:N #1 { , \exp:w \use_none:nn } \exp_after:wN \exp_end: - \exp_after:wN { \exp_after:wN } \exp_after:wN ; + \exp_after:wN { \exp_after:wN } \exp_after:wN \__fp_sep: #2 } } @@ -21705,7 +21962,7 @@ Type H <return> for immediate help}\def~{\errmessage{% { \__fp_exp_after_symbolic_f:nw { \__fp_parse_infix:NN } \s__fp_symbolic \__fp_symbolic_chk:w - \__fp_variable_o:w #2 , { } ; + \__fp_variable_o:w #2 , { } \__fp_sep: } \exp_args:NNc \__fp_variable_set_parsing_aux:NNn #1 { __fp_parse_word_#2:N } {#2} @@ -21870,7 +22127,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \__fp_exp_after_array_f:w #2 \s__fp_expr_stop \exp_after:wN } - \exp_after:wN ; + \exp_after:wN \__fp_sep: } } \int_new:N \l__fp_function_arg_int @@ -21902,7 +22159,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_not:N \__fp_symbolic_chk:w \exp_not:N \__fp_function_arg_o:w \int_use:N \l__fp_function_arg_int - ########1 , { } ; + ########1 , { } \__fp_sep: } } \cs_set:Npn \__fp_function_arg_o:w ##1 @ @@ -21914,7 +22171,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \__fp_exp_after_symbolic_loop:N ##1 { , \tex_romannumeral:D \use_none:nn } \exp_after:wN \c_zero_int - \exp_after:wN { \exp_after:wN } \exp_after:wN ; + \exp_after:wN { \exp_after:wN } \exp_after:wN \__fp_sep: } \fp_set:Nn \l__fp_symbolic_fp {#4} \use:e @@ -21951,9 +22208,9 @@ Type H <return> for immediate help}\def~{\errmessage{% #2 } \cs_new:Npn \__fp_function_arg_few:w #1 @ { \exp_after:wN \c_nan_fp } -\cs_new:Npn \__fp_function_arg_get:w #1#2#3; #4 @ +\cs_new:Npn \__fp_function_arg_get:w #1#2#3\__fp_sep: #4 @ { - \__fp_exp_after_array_f:w #3; \s__fp_expr_stop + \__fp_exp_after_array_f:w #3\__fp_sep: \s__fp_expr_stop \exp_after:wN \exp_stop_f: } \cs_new_protected:Npn \fp_clear_function:n #1 @@ -22028,25 +22285,25 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_after:wN \__fp_array_gset:NNNNww \exp_after:wN #1 \exp_after:wN #1 - \int_value:w \int_eval:n {#2} \exp_after:wN ; + \int_value:w \int_eval:n {#2} \exp_after:wN \__fp_sep: \exp:w \exp_end_continue_f:w \__fp_parse:n {#3} } \cs_generate_variant:Nn \fparray_gset:Nnn { c } -\cs_new_protected:Npn \__fp_array_gset:NNNNww #1#2#3#4#5 ; #6 ; +\cs_new_protected:Npn \__fp_array_gset:NNNNww #1#2#3#4#5 \__fp_sep: #6 \__fp_sep: { \__fp_array_bounds:NNnTF \msg_error:nneee #4 {#5} { \exp_after:wN \__fp_change_func_type:NNN - \__fp_use_i_until_s:nw #6 ; + \__fp_use_i_until_s:nw #6 \__fp_sep: \__fp_array_gset:w \__fp_array_gset_recover:Nw - #6 ; {#5} #1 #2 #3 + #6 \__fp_sep: {#5} #1 #2 #3 } { } } -\cs_new_protected:Npn \__fp_array_gset_recover:Nw #1#2 ; +\cs_new_protected:Npn \__fp_array_gset_recover:Nw #1#2 \__fp_sep: { - \__fp_error:nffn { unknown-type } { \tl_to_str:n { #2 ; } } { } { } + \__fp_error:nffn { unknown-type } { \tl_to_str:n { #2 \__fp_sep: } } { } { } \exp_after:wN #1 \c_nan_fp } \cs_new_protected:Npn \__fp_array_gset:w \s__fp \__fp_chk:w #1#2 @@ -22060,7 +22317,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \s__fp \__fp_chk:w #1 #2 } \cs_new_protected:Npn \__fp_array_gset_normal:w - \s__fp \__fp_chk:w 1 #1 #2 #3#4#5 ; #6#7#8#9 + \s__fp \__fp_chk:w 1 #1 #2 #3#4#5 \__fp_sep: #6#7#8#9 { \__kernel_intarray_gset:Nnn #7 {#6} {#2} \__kernel_intarray_gset:Nnn #8 {#6} @@ -22090,7 +22347,7 @@ Type H <return> for immediate help}\def~{\errmessage{% { \exp_after:wN \__fp_array_item:NwN \exp_after:wN #1 - \int_value:w \int_eval:n {#2} ; + \int_value:w \int_eval:n {#2} \__fp_sep: \__fp_to_decimal:w } \cs_generate_variant:Nn \fparray_item:Nn { c } @@ -22098,11 +22355,11 @@ Type H <return> for immediate help}\def~{\errmessage{% { \exp_after:wN \__fp_array_item:NwN \exp_after:wN #1 - \int_value:w \int_eval:n {#2} ; + \int_value:w \int_eval:n {#2} \__fp_sep: \__fp_to_tl:w } \cs_generate_variant:Nn \fparray_item_to_tl:Nn { c } -\cs_new:Npn \__fp_array_item:NwN #1#2 ; #3 +\cs_new:Npn \__fp_array_item:NwN #1#2 \__fp_sep: #3 { \__fp_array_bounds:NNnTF \msg_expandable_error:nnfff #1 {#2} { \exp_after:wN \__fp_array_item:NNNnN #1 {#2} #3 } @@ -22111,22 +22368,22 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs_new:Npn \__fp_array_item:NNNnN #1#2#3#4 { \exp_after:wN \__fp_array_item:N - \int_value:w \__kernel_intarray_item:Nn #2 {#4} \exp_after:wN ; - \int_value:w \__kernel_intarray_item:Nn #3 {#4} \exp_after:wN ; - \int_value:w \__kernel_intarray_item:Nn #1 {#4} ; + \int_value:w \__kernel_intarray_item:Nn #2 {#4} \exp_after:wN \__fp_sep: + \int_value:w \__kernel_intarray_item:Nn #3 {#4} \exp_after:wN \__fp_sep: + \int_value:w \__kernel_intarray_item:Nn #1 {#4} \__fp_sep: } \cs_new:Npn \__fp_array_item:N #1 { \if_meaning:w 0 #1 \exp_after:wN \__fp_array_item_special:w \fi: \__fp_array_item:w #1 } -\cs_new:Npn \__fp_array_item:w #1 #2#3#4#5 #6 ; 1 #7 ; +\cs_new:Npn \__fp_array_item:w #1 #2#3#4#5 #6 \__fp_sep: 1 #7 \__fp_sep: { \exp_after:wN \__fp_array_item_normal:w \int_value:w \if_meaning:w #1 1 0 \else: 2 \fi: \exp_stop_f: - #7 ; {#2#3#4#5} {#6} ; + #7 \__fp_sep: {#2#3#4#5} {#6} \__fp_sep: } -\cs_new:Npn \__fp_array_item_special:w #1 ; #2 ; #3 ; #4 +\cs_new:Npn \__fp_array_item_special:w #1 \__fp_sep: #2 \__fp_sep: #3 \__fp_sep: #4 { \exp_after:wN #4 \exp:w \exp_end_continue_f:w @@ -22138,8 +22395,9 @@ Type H <return> for immediate help}\def~{\errmessage{% \else: \exp_after:wN \c_minus_inf_fp \fi: } -\cs_new:Npn \__fp_array_item_normal:w #1 #2#3#4#5 #6 ; #7 ; #8 ; #9 - { #9 \s__fp \__fp_chk:w 1 #1 {#8} #7 {#2#3#4#5} {#6} ; } +\cs_new:Npn \__fp_array_item_normal:w + #1 #2#3#4#5 #6 \__fp_sep: #7 \__fp_sep: #8 \__fp_sep: #9 + { #9 \s__fp \__fp_chk:w 1 #1 {#8} #7 {#2#3#4#5} {#6} \__fp_sep: } \prg_new_eq_conditional:NNn \fparray_if_exist:N \cs_if_exist:N { TF , T , F , p } \prg_new_eq_conditional:NNn \fparray_if_exist:c \cs_if_exist:c @@ -22287,6 +22545,8 @@ Type H <return> for immediate help}\def~{\errmessage{% } \cs_generate_variant:Nn \bitset_to_arabic:N { c } \cs_generate_variant:Nn \bitset_to_bin:N { c } +\cs_new_eq:NN \bitset_use:N \tl_use:N +\cs_generate_variant:Nn \bitset_use:N { c } \cs_new:Npn \bitset_item:Nn #1#2 { \prop_if_in:cnTF { g__bitset_ \cs_to_str:N #1 _name_prop } {#2} @@ -22669,8 +22929,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \group_begin: \int_set:Nn \tex_endlinechar:D { 32 } \char_set_catcode_invalid:n { 0 } - \bool_lazy_or:nnTF - { \sys_if_engine_xetex_p: } { \sys_if_engine_luatex_p: } + \sys_if_engine_opentype:TF { \int_step_function:nN { 31 } \char_set_catcode_invalid:n } { \int_step_function:nN { 31 } \char_set_catcode_active:n } \int_step_function:nnN { 33 } { 64 } \char_set_catcode_other:n @@ -22695,8 +22954,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \char_set_catcode_group_end:n { 125 } % right brace \char_set_catcode_space:n { 126 } % tilde \char_set_catcode_invalid:n { 127 } % ^^? - \bool_lazy_or:nnF - { \sys_if_engine_xetex_p: } { \sys_if_engine_luatex_p: } + \sys_if_engine_opentype:F { \int_step_function:nnN { 128 } { 255 } \char_set_catcode_active:n } \__cctab_gset:n { \c_code_cctab } \group_end: @@ -24475,9 +24733,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \exp_args:Ne \tl_to_str:n { \str_map_function:nN {#1} \__str_convert_pdfname:n } } -\bool_lazy_or:nnTF - { \sys_if_engine_luatex_p: } - { \sys_if_engine_xetex_p: } +\sys_if_engine_opentype:TF { \cs_new:Npn \__str_convert_pdfname:n #1 { @@ -24884,27 +25140,30 @@ Type H <return> for immediate help}\def~{\errmessage{% \__tl_analysis_map:NwNw #1 } \cs_new_protected:Npn \tl_analysis_show:N - { \__tl_analysis_show:NNN \msg_show:nneeee \tl_show:N } + { \__tl_analysis_show:NNnnN \msg_show:nneeee \tl_show:N {} {} } \cs_new_protected:Npn \tl_analysis_log:N - { \__tl_analysis_show:NNN \msg_log:nneeee \tl_log:N } -\cs_new_protected:Npn \__tl_analysis_show:NNN #1#2#3 { - \tl_if_exist:NTF #3 + \__tl_analysis_show:NNnnN \msg_log:nneeee \tl_log:N + { \iow_newline: >~ . } { . } + } +\cs_new_protected:Npn \__tl_analysis_show:NNnnN #1#2#3#4#5 + { + \tl_if_exist:NTF #5 { - \exp_args:No \__tl_analysis:n {#3} + \exp_args:No \__tl_analysis:n {#5} #1 { tl } { show-analysis } - { \token_to_str:N #3 } { \__tl_analysis_show: } { } { } + { \token_to_str:N #5 } { \__tl_analysis_show: } {#3} {#4} } { #2 #3 } } \cs_new_protected:Npn \tl_analysis_show:n - { \__tl_analysis_show:Nn \msg_show:nneeee } + { \__tl_analysis_show:Nnnn \msg_show:nneeee {} {} } \cs_new_protected:Npn \tl_analysis_log:n - { \__tl_analysis_show:Nn \msg_log:nneeee } -\cs_new_protected:Npn \__tl_analysis_show:Nn #1#2 + { \__tl_analysis_show:Nnnn \msg_log:nneeee { \iow_newline: >~ . } { . } } +\cs_new_protected:Npn \__tl_analysis_show:Nnnn #1#2#3#4 { - \__tl_analysis:n {#2} - #1 { tl } { show-analysis } { } { \__tl_analysis_show: } { } { } + \__tl_analysis:n {#4} + #1 { tl } { show-analysis } { } { \__tl_analysis_show: } {#2} {#3} } \cs_new:Npn \__tl_analysis_show: { @@ -25237,8 +25496,8 @@ Type H <return> for immediate help}\def~{\errmessage{% { The~token~list~ \tl_if_empty:nF {#1} { #1 ~ } \tl_if_empty:nTF {#2} - { is~empty } - { contains~the~tokens: #2 } + { is~empty #3 } + { contains~the~tokens: #2 #4 } } %% File: l3regex.dtx \cs_new_eq:NN \__regex_int_eval:w \tex_numexpr:D @@ -30569,11 +30828,19 @@ Type H <return> for immediate help}\def~{\errmessage{% } \cs_new_protected:Npn \color_select:nn #1#2 { - \__color_select_main:Nw \l__color_current_tl - #1 / / \s__color_mark #2 / / \s__color_stop + \__color_select_main:Nnn \l__color_current_tl {#1} {#2} \__color_finalise_current: \__color_select:N \l__color_current_tl } +\cs_new_protected:Npn \__color_select_main:Nnn #1#2#3 + { + \use:e + { + \exp_not:N \__color_select_main:Nw \exp_not:N #1 + \exp_not:n {#2} / / \exp_not:N \s__color_mark + #3 / / \exp_not:N \s__color_stop + } + } \cs_new_protected:Npn \__color_select_main:Nw #1 #2 / #3 / #4 \s__color_mark #5 / #6 / #7 \s__color_stop { @@ -30620,10 +30887,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs_new_protected:Npn \color_math:nnn #1#2#3 { \__color_math:nn {#3} - { - \__color_select_main:Nw \l__color_current_tl - #1 / / \s__color_mark #2 / / \s__color_stop - } + { \__color_select_main:Nnn \l__color_current_tl {#1} {#2} } } \cs_new_protected:Npn \__color_math:nn #1#2 { @@ -30721,14 +30985,12 @@ Type H <return> for immediate help}\def~{\errmessage{% } \cs_new_protected:Npn \color_fill:nn #1#2 { - \__color_select_main:Nw \l__color_current_tl - #1 / / \s__color_mark #2 / / \s__color_stop + \__color_select_main:Nnn \l__color_current_tl {#1} {#2} \exp_after:wN \__color_draw:nnn \l__color_current_tl { fill } } \cs_new_protected:Npn \color_stroke:nn #1#2 { - \__color_select_main:Nw \l__color_current_tl - #1 / / \s__color_mark #2 / / \s__color_stop + \__color_select_main:Nnn \l__color_current_tl {#1} {#2} \exp_after:wN \__color_draw:nnn \l__color_current_tl { stroke } } \cs_new_protected:Npn \__color_draw:nnn #1#2#3 @@ -30857,6 +31119,8 @@ Type H <return> for immediate help}\def~{\errmessage{% \prop_new:c { l__color_named_._prop } \tl_new:c { l__color_named_._tl } \tl_set:ce { l__color_named_._tl } { \__color_model:N \l__color_current_tl } +\prop_put:cve { l__color_named_._prop } { l__color_named_._tl } + { \__color_values:N \l__color_current_tl } \cs_new_protected:Npn \color_export:nnN #1#2#3 { \group_begin: @@ -30869,8 +31133,7 @@ Type H <return> for immediate help}\def~{\errmessage{% } \cs_new_protected:Npn \color_export:nnnN #1#2#3#4 { - \__color_select_main:Nw #4 - #1 / / \s__color_mark #2 / / \s__color_stop + \__color_select_main:Nnn #4 {#1} {#2} \__color_export:nN {#3} #4 } \cs_new_protected:Npn \__color_export:nN #1#2 @@ -32263,7 +32526,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs_new_protected:Npn \vcoffin_gset_end: { } \cs_new_protected:Npn \coffin_set_eq:NN #1#2 { - \__coffin_if_exist:NT #1 + \__coffin_if_exist:NT #2 { \box_set_eq:NN #1 #2 \prop_set_eq:cc { coffin ~ \__coffin_to_value:N #1 ~ corners } @@ -32275,7 +32538,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs_generate_variant:Nn \coffin_set_eq:NN { c , Nc , cc } \cs_new_protected:Npn \coffin_gset_eq:NN #1#2 { - \__coffin_if_exist:NT #1 + \__coffin_if_exist:NT #2 { \box_gset_eq:NN #1 #2 \prop_gset_eq:cc { coffin ~ \__coffin_to_value:N #1 ~ corners } @@ -32296,6 +32559,8 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs_new_eq:NN \coffin_dp:c \box_dp:c \cs_new_eq:NN \coffin_ht:N \box_ht:N \cs_new_eq:NN \coffin_ht:c \box_ht:c +\cs_new_eq:NN \coffin_ht_plus_dp:N \box_ht_plus_dp:N +\cs_new_eq:NN \coffin_ht_plus_dp:c \box_ht_plus_dp:c \cs_new_eq:NN \coffin_wd:N \box_wd:N \cs_new_eq:NN \coffin_wd:c \box_wd:c \cs_new_protected:Npn \__coffin_get_pole:NnN #1#2#3 @@ -33360,9 +33625,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \prop_gput:Nnn \g_msg_module_name_prop { luatex } { LaTeX } \prop_gput:Nnn \g_msg_module_type_prop { luatex } { } %% File: l3unicode.dtx -\bool_lazy_or:nnTF - { \sys_if_engine_luatex_p: } - { \sys_if_engine_xetex_p: } +\sys_if_engine_opentype:TF { \cs_new:Npn \codepoint_str_generate:n #1 { @@ -33540,9 +33803,7 @@ Type H <return> for immediate help}\def~{\errmessage{% { \exp_args:Ne \__codepoint_to_nfd:n { \int_eval:n {#1} } } \cs_new:Npn \__codepoint_to_nfd:n #1 { \__codepoint_to_nfd:nn {#1} { \char_value_catcode:n {#1} } } -\bool_lazy_or:nnF - { \sys_if_engine_luatex_p: } - { \sys_if_engine_xetex_p: } +\sys_if_engine_opentype:F { \cs_gset:Npn \__codepoint_to_nfd:n #1 { @@ -33740,15 +34001,17 @@ Type H <return> for immediate help}\def~{\errmessage{% \tl_set:ce { l__codepoint_ #1 _block_tl } { \int_eval:n { \tl_use:c { l__codepoint_ #1 _block_tl } + 1 } } } - \prg_replicate:nn {#2} + \int_step_inline:nnn + { \tl_use:c { l__codepoint_ #1 _pos_tl } + 1 } + { \tl_use:c { l__codepoint_ #1 _pos_tl } + #2 } { - \tl_set:ce { l__codepoint_ #1 _pos_tl } - { \int_eval:n { \tl_use:c { l__codepoint_ #1 _pos_tl } + 1 } } \exp_args:Nc \__kernel_intarray_gset:Nnn { g__codepoint_ #1 _index_intarray } - { \tl_use:c { l__codepoint_ #1 _pos_tl } } + {##1} \l__codepoint_matched_block_tl } + \tl_set:ce { l__codepoint_ #1 _pos_tl } + { \int_eval:n { \tl_use:c { l__codepoint_ #1 _pos_tl } + #2 } } \clist_clear:c { l__codepoint_ #1 _block_clist } } \cs_set_protected:Npn \__codepoint_finalise_blocks: @@ -34128,9 +34391,7 @@ Type H <return> for immediate help}\def~{\errmessage{% } { \prg_return_false: } } -\bool_lazy_or:nnTF - { \sys_if_engine_luatex_p: } - { \sys_if_engine_xetex_p: } +\sys_if_engine_opentype:TF { \cs_new:Npn \__text_codepoint_process:nN #1#2 { #1 {#2} } } @@ -34168,9 +34429,7 @@ Type H <return> for immediate help}\def~{\errmessage{% \cs_new:Npn \__text_codepoint_process:nNNNN #1#2#3#4#5 { #1 {#2#3#4#5} } } -\bool_lazy_or:nnTF - { \sys_if_engine_luatex_p: } - { \sys_if_engine_xetex_p: } +\sys_if_engine_opentype:TF { \prg_new_conditional:Npnn \__text_codepoint_compare:nNn #1#2#3 { TF , p } @@ -35162,9 +35421,7 @@ Type H <return> for immediate help}\def~{\errmessage{% } } } -\bool_lazy_or:nnTF - { \sys_if_engine_luatex_p: } - { \sys_if_engine_xetex_p: } +\sys_if_engine_opentype:TF { \cs_new:Npn \__text_change_case_catcode:nn #1#2 { \__text_char_catcode:N #1 } @@ -36278,9 +36535,7 @@ Type H <return> for immediate help}\def~{\errmessage{% } } } -\bool_lazy_or:nnF - { \sys_if_engine_luatex_p: } - { \sys_if_engine_xetex_p: } +\sys_if_engine_opentype:F { \text_declare_uppercase_mapping:nn { "01F0 } { \v { J } } } diff --git a/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-generic.tex index 6f417c325c5..355f6dc1bbe 100644 --- a/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-generic.tex +++ b/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-generic.tex @@ -6,7 +6,7 @@ %% %% expl3.dtx (with options: `generic,loader') %% -%% Copyright (C) 1990-2024 The LaTeX Project +%% Copyright (C) 1990-2025 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2024-07-20}% +\def\ExplFileDate{2025-01-18}% \let\ExplLoaderFileDate\ExplFileDate \begingroup \catcode`\_=11 diff --git a/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.ltx b/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.ltx index 512497e7a09..5e107c4ac95 100644 --- a/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.ltx +++ b/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.ltx @@ -6,7 +6,7 @@ %% %% expl3.dtx (with options: `2ekernel,loader') %% -%% Copyright (C) 1990-2024 The LaTeX Project +%% Copyright (C) 1990-2025 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2024-07-20}% +\def\ExplFileDate{2025-01-18}% \let\ExplLoaderFileDate\ExplFileDate \begingroup \catcode`\_=11 diff --git a/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.lua b/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.lua index f436dc4daf3..8478874bd2b 100644 --- a/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.lua +++ b/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.lua @@ -11,7 +11,7 @@ -- l3intarray.dtx (with options: `package,lua') -- l3pdf.dtx (with options: `package,lua') -- --- Copyright (C) 1990-2024 The LaTeX Project +-- Copyright (C) 1990-2025 The LaTeX Project -- -- It may be distributed and/or modified under the conditions of -- the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.sty index 10c4ecbc700..114fe98424d 100644 --- a/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.sty +++ b/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.sty @@ -6,7 +6,7 @@ %% %% expl3.dtx (with options: `package,loader') %% -%% Copyright (C) 1990-2024 The LaTeX Project +%% Copyright (C) 1990-2025 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2024-07-20}% +\def\ExplFileDate{2025-01-18}% \let\ExplLoaderFileDate\ExplFileDate \ProvidesPackage{expl3} [% diff --git a/Master/texmf-dist/tex/latex-dev/l3kernel/l3debug.def b/Master/texmf-dist/tex/latex-dev/l3kernel/l3debug.def index 000b6dcb41c..4dd189fdef2 100644 --- a/Master/texmf-dist/tex/latex-dev/l3kernel/l3debug.def +++ b/Master/texmf-dist/tex/latex-dev/l3kernel/l3debug.def @@ -6,7 +6,7 @@ %% %% l3debug.dtx (with options: `package') %% -%% Copyright (C) 1990-2024 The LaTeX Project +%% Copyright (C) 1990-2025 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: l3debug.dtx -\ProvidesExplFile{l3debug.def}{2024-07-20}{}{L3 Debugging support} +\ProvidesExplFile{l3debug.def}{2025-01-18}{}{L3 Debugging support} \scan_new:N \s__debug_stop \cs_new:Npn \__debug_use_i_delimit_by_s_stop:nw #1 #2 \s__debug_stop {#1} \quark_new:N \q__debug_recursion_tail diff --git a/Master/texmf-dist/tex/latex-dev/l3kernel/l3doc.cls b/Master/texmf-dist/tex/latex-dev/l3kernel/l3doc.cls index 4d4876f5607..14e4c01f6ac 100644 --- a/Master/texmf-dist/tex/latex-dev/l3kernel/l3doc.cls +++ b/Master/texmf-dist/tex/latex-dev/l3kernel/l3doc.cls @@ -6,7 +6,7 @@ %% %% l3doc.dtx (with options: `class') %% -%% Copyright (C) 1990-2024 The LaTeX Project +%% Copyright (C) 1990-2025 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of @@ -20,7 +20,7 @@ %% %% File: l3doc.dtx \RequirePackage{calc} -\ProvidesExplClass{l3doc}{2024-07-20}{} +\ProvidesExplClass{l3doc}{2025-01-18}{} {L3 Experimental documentation class} \clist_new:N \g_docinput_clist \seq_new:N \g_doc_functions_seq @@ -91,8 +91,8 @@ \bool_new:N \l__codedoc_in_implementation_bool \bool_new:N \g__codedoc_typeset_documentation_bool \bool_new:N \g__codedoc_typeset_implementation_bool -\bool_set_true:N \g__codedoc_typeset_documentation_bool -\bool_set_true:N \g__codedoc_typeset_implementation_bool +\bool_gset_true:N \g__codedoc_typeset_documentation_bool +\bool_gset_true:N \g__codedoc_typeset_implementation_bool \tl_new:N \g__codedoc_base_name_tl \prop_new:N \l__codedoc_variants_prop \clist_new:N \l__codedoc_function_label_clist @@ -439,12 +439,22 @@ \raggedbottom \bool_if:NT \g__codedoc_lmodern_bool { - \RequirePackage[T1]{fontenc} - \RequirePackage{lmodern} - \group_begin: - \ttfamily - \DeclareFontShape{T1}{lmtt}{m}{it}{<->ec-lmtto10}{} - \group_end: + \sys_if_engine_opentype:TF + { + \group_begin: + \ttfamily + \DeclareFontShape{TU}{lmtt}{m}{it} + {<-> \UnicodeFontFile{lmmonoslant10-regular}{}}{} + \group_end: + } + { + \RequirePackage[T1]{fontenc} + \RequirePackage{lmodern} + \group_begin: + \ttfamily + \DeclareFontShape{T1}{lmtt}{m}{it}{<->ec-lmtto10}{} + \group_end: + } } \RequirePackage{hypdoc} \cs_gset:Npn \MakePrivateLetters @@ -789,17 +799,20 @@ \cs_generate_variant:Nn \__codedoc_get_hyper_target:nN { o , e } \cs_new_protected:Npn \__codedoc_names_get_seq:nN #1#2 { - \__kernel_tl_set:Nx \l__codedoc_tmpa_tl { \tl_to_str:n {#1} } \bool_if:NTF \l__codedoc_names_verb_bool { \seq_clear:N #2 - \seq_put_right:NV #2 \l__codedoc_tmpa_tl + \seq_put_right:No #2 { \tl_to_str:n {#1} } } { + \tl_set:Nn \l__codedoc_tmpa_tl {#1} \tl_remove_all:Ne \l__codedoc_tmpa_tl - { \iow_char:N \^^M \c_percent_str } + { \exp_not:N \obeyedline \c_percent_str } + \tl_remove_all:Ne \l__codedoc_tmpa_tl + { \exp_not:N \obeyedline } + \__kernel_tl_set:Nx \l__codedoc_tmpa_tl { \tl_to_str:N \l__codedoc_tmpa_tl } \tl_remove_all:Ne \l__codedoc_tmpa_tl - { \token_to_str:N \obeyedline \c_space_tl \c_percent_str } + { \iow_char:N \^^M \c_percent_str } \tl_remove_all:Ne \l__codedoc_tmpa_tl { \tl_to_str:n { ^ ^ A } } \tl_remove_all:Ne \l__codedoc_tmpa_tl { \iow_char:N \^^I } \tl_remove_all:Ne \l__codedoc_tmpa_tl { \iow_char:N \^^M } @@ -1023,7 +1036,7 @@ \cs_new_protected:Npn \__codedoc_function_typeset_stop: { \par - \dim_set:Nn \prevdepth { \box_dp:N \l__codedoc_descr_coffin } + \dim_set:Nn \prevdepth { \coffin_dp:N \l__codedoc_descr_coffin } \allowbreak } \cs_new_protected:Npn \__codedoc_function_init: @@ -1059,7 +1072,7 @@ \dim_zero:N \l__codedoc_trial_width_dim \hcoffin_set:Nn \l__codedoc_functions_coffin { \__codedoc_typeset_functions: } \dim_set:Nn \l__codedoc_trial_width_dim - { \box_wd:N \l__codedoc_functions_coffin } + { \coffin_wd:N \l__codedoc_functions_coffin } \bool_set:Nn \l__codedoc_long_name_bool { \dim_compare_p:nNn \l__codedoc_trial_width_dim > \marginparwidth } } @@ -1087,7 +1100,7 @@ \coffin_join:NnnNnnnn \l__codedoc_output_coffin {l} {b} \l__codedoc_descr_coffin {l} {t} - {0.75\marginparwidth + \marginparsep} {-\medskipamount} + {\marginparwidth + \marginparsep} {-\medskipamount} \coffin_typeset:Nnnnn \l__codedoc_output_coffin {\l__codedoc_descr_coffin-l} {\l__codedoc_descr_coffin-t} {0pt} {0pt} @@ -1136,7 +1149,6 @@ { \__codedoc_typeset_variant_list:nN {#1} #2 } \\ } -\cs_generate_variant:Nn \__codedoc_typeset_function_block:nN { e } \cs_new_protected:Npn \__codedoc_function_index:n #1 { \seq_gput_right:Nn \g_doc_functions_seq {#1} @@ -1234,7 +1246,7 @@ { \textwidth \bool_if:NT \l__codedoc_long_name_bool - { + 0.75 \marginparwidth - \l__codedoc_trial_width_dim } + { + \marginparwidth - \l__codedoc_trial_width_dim } } \hbox_gset:Nw \g__codedoc_syntax_box \small \ttfamily @@ -1707,7 +1719,7 @@ \AddToHook{env/variable/begin}{\def\footnote{\__codedoc_fn_footnote:nn{variable}}} \newenvironment{TemplateInterfaceDescription}[1] { - \subsection{The~object~type~`#1'} + \subsection{The~template~type~`#1'} \begingroup \@beginparpenalty\@M \description @@ -1723,7 +1735,7 @@ } \newenvironment{TemplateDescription}[2] { - \subsection{The~template~`#2'~(object~type~#1)} + \subsection{The~template~`#2'~(template~type~#1)} \subsubsection*{Attributes:} \begingroup \@beginparpenalty\@M @@ -1789,7 +1801,7 @@ { \clist_map_inline:nn {#1} { - \clist_put_right:Nn \g_docinput_clist {##1} + \clist_gput_right:Nn \g_docinput_clist {##1} \__codedoc_input:n {##1} } } @@ -1883,7 +1895,7 @@ { MMMMV - \filesep \int_use:N \c@CodelineNo } } } -\tl_gclear:N \filesep +\tl_clear_new:N \filesep \cs_new_protected:Npn \__codedoc_index_page_hc:nn #1#2 { \protected@write \@indexfile {} @@ -2186,7 +2198,6 @@ {#2} \l__codedoc_index_internal_bool } -\cs_generate_variant:Nn \__codedoc_special_index:nn { o } \tl_new:N \l__codedoc_index_escaped_macro_tl \tl_new:N \l__codedoc_index_escaped_key_tl \cs_new_protected:Npn \__codedoc_special_index_module:nnnnN #1#2#3#4#5 diff --git a/Master/texmf-dist/tex/latex-dev/l3kernel/l3docstrip.tex b/Master/texmf-dist/tex/latex-dev/l3kernel/l3docstrip.tex index eda3985bd07..ab0a23bae62 100644 --- a/Master/texmf-dist/tex/latex-dev/l3kernel/l3docstrip.tex +++ b/Master/texmf-dist/tex/latex-dev/l3kernel/l3docstrip.tex @@ -6,7 +6,7 @@ %% %% l3docstrip.dtx (with options: `program') %% -%% Copyright (C) 1990-2024 The LaTeX Project +%% Copyright (C) 1990-2025 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88591.def b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88591.def index 485fa39a1df..334eb11de1c 100644 --- a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88591.def +++ b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88591.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso88591') %% -%% Copyright (C) 1990-2024 The LaTeX Project +%% Copyright (C) 1990-2025 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885910.def b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885910.def index a7af4567560..e5efe83983e 100644 --- a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885910.def +++ b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885910.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso885910') %% -%% Copyright (C) 1990-2024 The LaTeX Project +%% Copyright (C) 1990-2025 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885911.def b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885911.def index ec28015dd4c..4b1e383afdb 100644 --- a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885911.def +++ b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885911.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso885911') %% -%% Copyright (C) 1990-2024 The LaTeX Project +%% Copyright (C) 1990-2025 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885913.def b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885913.def index b28db7deda2..9fdc01d2ab0 100644 --- a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885913.def +++ b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885913.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso885913') %% -%% Copyright (C) 1990-2024 The LaTeX Project +%% Copyright (C) 1990-2025 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885914.def b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885914.def index a154a1c0cb5..35816cbc87c 100644 --- a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885914.def +++ b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885914.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso885914') %% -%% Copyright (C) 1990-2024 The LaTeX Project +%% Copyright (C) 1990-2025 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885915.def b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885915.def index ca071e99247..f976fc6ab26 100644 --- a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885915.def +++ b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885915.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso885915') %% -%% Copyright (C) 1990-2024 The LaTeX Project +%% Copyright (C) 1990-2025 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885916.def b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885916.def index 44d4a1ae608..273c55d245a 100644 --- a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885916.def +++ b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso885916.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso885916') %% -%% Copyright (C) 1990-2024 The LaTeX Project +%% Copyright (C) 1990-2025 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88592.def b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88592.def index d54a4820c7d..897c07532db 100644 --- a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88592.def +++ b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88592.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso88592') %% -%% Copyright (C) 1990-2024 The LaTeX Project +%% Copyright (C) 1990-2025 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88593.def b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88593.def index d195b703b44..712722dcee3 100644 --- a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88593.def +++ b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88593.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso88593') %% -%% Copyright (C) 1990-2024 The LaTeX Project +%% Copyright (C) 1990-2025 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88594.def b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88594.def index 2249de98bcc..9fe91bc8bb9 100644 --- a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88594.def +++ b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88594.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso88594') %% -%% Copyright (C) 1990-2024 The LaTeX Project +%% Copyright (C) 1990-2025 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88595.def b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88595.def index e54409a6e1d..8d70b8a14b5 100644 --- a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88595.def +++ b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88595.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso88595') %% -%% Copyright (C) 1990-2024 The LaTeX Project +%% Copyright (C) 1990-2025 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88596.def b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88596.def index e7c6e888cc0..c047db5f307 100644 --- a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88596.def +++ b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88596.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso88596') %% -%% Copyright (C) 1990-2024 The LaTeX Project +%% Copyright (C) 1990-2025 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88597.def b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88597.def index 292b3600ee5..653f60578e1 100644 --- a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88597.def +++ b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88597.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso88597') %% -%% Copyright (C) 1990-2024 The LaTeX Project +%% Copyright (C) 1990-2025 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88598.def b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88598.def index eef8f134bb1..d82350194bd 100644 --- a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88598.def +++ b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88598.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso88598') %% -%% Copyright (C) 1990-2024 The LaTeX Project +%% Copyright (C) 1990-2025 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88599.def b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88599.def index cb640b641a3..677706e16b3 100644 --- a/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88599.def +++ b/Master/texmf-dist/tex/latex-dev/l3kernel/l3str-enc-iso88599.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso88599') %% -%% Copyright (C) 1990-2024 The LaTeX Project +%% Copyright (C) 1990-2025 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/bib-latex-lab-testphase.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/bib-latex-lab-testphase.ltx index ee69798ec39..d0fb0b78fa5 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/bib-latex-lab-testphase.ltx +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/bib-latex-lab-testphase.ltx @@ -33,7 +33,7 @@ %% %% %% File: latex-lab-bib.dtx (C) Copyright 2023 LaTeX Project -\def\ltlabbibdate{2024-02-12} +\def\ltlabbibdate{2024-07-05} \def\ltlabbibversion{0.81b} \ProvidesFile{bib-latex-lab-testphase.ltx} [\ltlabbibdate\space v\ltlabbibversion\space diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/block-latex-lab-testphase.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/block-latex-lab-testphase.ltx index 937f08d1e1c..41d2430e8e6 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/block-latex-lab-testphase.ltx +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/block-latex-lab-testphase.ltx @@ -33,8 +33,8 @@ %% %% %% File: latex-lab-block.dtx (C) Copyright 2021-2024 LaTeX Project -\def\ltlabblockdate{2024-03-23} -\def\ltlabblockversion{0.8n} +\def\ltlabblockdate{2024-11-25} +\def\ltlabblockversion{0.8w} \ProvidesFile{block-latex-lab-testphase.ltx} [\ltlabblockdate\space v\ltlabblockversion\space blockenv implementation] diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/documentmetadata-support.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/documentmetadata-support.ltx index 91ae548e191..765755ee106 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/documentmetadata-support.ltx +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/documentmetadata-support.ltx @@ -33,8 +33,8 @@ %% %% %% File: documentmetadata-support.dtx -\def\documentmetadatasupportversion{1.0h} -\def\documentmetadatasupportdate{2024-03-26} +\def\documentmetadatasupportversion{1.0j} +\def\documentmetadatasupportdate{2024-09-13} \RequirePackage{pdfmanagement-testphase} @@ -44,12 +44,20 @@ { \clist_new:N \g__pdfmanagement_firstaidoff_clist } \tl_if_exist:NF \g__pdfmanagement_testphase_tl { \tl_new:N \g__pdfmanagement_testphase_tl } +\cs_new_protected:Npn \@kernel@before@DocumentMetadata + { + \ifx\Umathcode\@undefined + \fontencoding{T1} + \renewcommand\encodingdefault{T1} + \fi + } \cs_set_protected:Npn \DocumentMetadata #1 { \cs_if_eq:NNTF \documentclass \@twoclasseserror { \msg_error:nn { meta } { after-class } } { + \@kernel@before@DocumentMetadata \bool_gset_true:N \g__pdfmanagement_active_bool \keys_set_groups:nnn { document / metadata} {init}{ #1 } %if no backend has been loaded force it now: @@ -163,7 +171,7 @@ } ,_pdfstandard / unknown .code:n = { - \msg_warning:nnn{pdf}{unknown-standard}{#1} + \msg_error:nnn{pdf}{unknown-standard}{#1} } ,testphase .multichoice: ,testphase / tagpdf .code:n = diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/firstaid-latex-lab-testphase.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/firstaid-latex-lab-testphase.ltx index 7003ae1856d..6103a8fd9d6 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/firstaid-latex-lab-testphase.ltx +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/firstaid-latex-lab-testphase.ltx @@ -33,9 +33,8 @@ %% %% %% File: latex-lab-firstaid.dtx (C) Copyright 2023-2024 LaTeX Project -\def\ltlabfirstaiddate{2024-05-25} -\def\ltlabfirstaidversion{0.85d} - +\def\ltlabfirstaiddate{2024-11-23} +\def\ltlabfirstaidversion{0.85i} \ProvidesFile{firstaid-latex-lab-testphase.ltx} [\ltlabfirstaiddate\space v\ltlabfirstaidversion\space latex-lab wrapper firstaid] diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/float-latex-lab-testphase.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/float-latex-lab-testphase.ltx index 59fdaa63d95..9dff3eac3ec 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/float-latex-lab-testphase.ltx +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/float-latex-lab-testphase.ltx @@ -33,8 +33,8 @@ %% %% %% File: latex-lab-float.dtx (C) Copyright 2023 LaTeX Project -\def\ltlabfloatdate{2024-03-23} -\def\ltlabfloatversion{0.81e} +\def\ltlabfloatdate{2024-11-21} +\def\ltlabfloatversion{0.81g} \ProvidesFile{float-latex-lab-testphase.ltx} [\ltlabfloatdate\space v\ltlabfloatversion\space latex-lab wrapper float] diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/graphic-latex-lab-testphase.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/graphic-latex-lab-testphase.ltx index 3cc259063d4..30d6cd9efd0 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/graphic-latex-lab-testphase.ltx +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/graphic-latex-lab-testphase.ltx @@ -33,8 +33,8 @@ %% %% %% File: latex-lab-graphic.dtx (C) Copyright 2022-2024 LaTeX Project -\def\ltlabgraphicdate{2024-03-13} -\def\ltlabgraphicversion{0.80d} +\def\ltlabgraphicdate{2024-09-18} +\def\ltlabgraphicversion{0.80e} \ProvidesFile{graphic-latex-lab-testphase.ltx} [\ltlabgraphicdate\space v\ltlabgraphicversion\space latex-lab wrapper graphic] diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-amsmath.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-amsmath.ltx index cab7e10f301..0ca17cffdce 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-amsmath.ltx +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-amsmath.ltx @@ -34,7 +34,7 @@ %% %% File: latex-lab-amsmath.dtx \ProvidesFile{latex-lab-amsmath.ltx} - [2024-02-12 v0.1b amsmath adaptions] + [2024-09-18 v0.1c amsmath adaptions] \RequirePackage{tagpdf-base} \ExplSyntaxOn \AddToHook{package/amsmath/after} @@ -45,7 +45,7 @@ \noalign{% \penalty\postdisplaypenalty\vskip-\belowdisplayskip \vbox{ - \ifmeasuring@\tag_stop:\fi + \ifmeasuring@\tag_suspend:n{\measuring}\fi \normalbaselines \ifdim\linewidth=\columnwidth \else \parshape\@ne \@totalleftmargin \linewidth @@ -84,7 +84,7 @@ \def\text@#1 {{ \int_gincr:N\g__math_mathchoice_int - \tag_stop: + \tag_suspend:n{\text@} \mathchoice { \__math_tag_if_mathstyle:en{mathchoice-\int_use:N\g__math_mathchoice_int}{0} diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footmisc.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footmisc.ltx index 954efe086a5..3fb53a3934a 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footmisc.ltx +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footmisc.ltx @@ -33,8 +33,8 @@ %% %% %% File: latex-lab-footnotes.dtx -\def\ltlabfootnotedate{2024-03-12} -\def\ltlabfootnoteversion{0.8d} +\def\ltlabfootnotedate{2024-09-30} +\def\ltlabfootnoteversion{0.8g} %% %% Copyright (c) 1995-2011 Robin Fairbairns diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx index 2277a40c6f8..85a3b2b32a7 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx @@ -33,8 +33,8 @@ %% %% %% File: latex-lab-footnotes.dtx -\def\ltlabfootnotedate{2024-03-12} -\def\ltlabfootnoteversion{0.8d} +\def\ltlabfootnotedate{2024-09-30} +\def\ltlabfootnoteversion{0.8g} \ProvidesFile{latex-lab-footnotes.ltx} [\ltlabfootnotedate\space v\ltlabfootnoteversion\space @@ -57,7 +57,7 @@ \bool_new:N \l__fnote_autodetect_bool \bool_set_true:N \l__fnote_autodetect_bool \tl_new:N \l__fnote_currentstruct_tl -\tl_set:Nn \l__fnote_currentstruct_tl {1} +\tl_set:Nn \l__fnote_currentstruct_tl {2} \cs_generate_variant:Nn \hook_gput_code:nnn{nne} \cs_generate_variant:Nn \tag_struct_use:n {e} \cs_new_protected:Npn \fnote_step_fnmark:nn #1#2 { @@ -157,6 +157,17 @@ \cs_new_eq:NN \__fnote_footnotemark_finish: \__fnote_footnotemark_default_finish: \NewSocket{tagsupport/fnmark}{1} \cs_set_eq:NN \@footnotemark \fnote_footnotemark: +\str_if_exist:cF { l__socket_tagsupport/para/restore_plug_str } + { + \NewSocket{tagsupport/para/restore}{0} + \NewSocketPlug{tagsupport/para/restore}{default} + { + \tl_set:Nn \l__tag_para_main_tag_tl {text-unit} + \tl_set_eq:NN \l__tag_para_tag_tl\l__tag_para_tag_default_tl + \bool_set_false:N\l__tag_para_flattened_bool + } + \AssignSocketPlug{tagsupport/para/restore}{default} + } \cs_new_protected:Npn \fnote_footnotetext:n #1 { \__fnote_debug_footnotetext: \hook_use:n {fntext/before} @@ -172,6 +183,7 @@ \floatingpenalty \@MM \hsize\columnwidth \@parboxrestore + \UseTaggingSocket{para/restore} \parindent 1em % typical default used in \@makefntext moved up here \def\@currentcounter{footnote} \protected@edef \@currentlabel { \p@footnote \@thefnmark } @@ -454,10 +466,7 @@ \cs_new_protected:Npn \__fnote_gput_ref:nn #1 #2 %#1 the structure number receiving the ref #2 { - \tag_if_active:T - { - \tag_struct_gput:nne {#1}{ref}{\tag_struct_object_ref:e { #2 }} - } + \tag_struct_gput:nnn {#1}{ref_num}{#2} } \cs_new_protected:Npn \fnote_gput_refs:nn #1 #2 % pair of numbers { @@ -465,8 +474,6 @@ \__fnote_gput_ref:nn {#2}{#1} } \cs_generate_variant:Nn \fnote_gput_refs:nn {ee} -\tl_new:N \l__fnote_dflt_struct_tl -\tl_set:Nn \l__fnote_dflt_struct_tl {1} \NewSocketPlug{tagsupport/fntext/begin}{FENote} { \tag_mc_end_push: @@ -475,10 +482,13 @@ \tag_struct_begin:n { tag=footnote } } { - \tag_struct_begin:n { tag=footnote,parent=\l__fnote_dflt_struct_tl } + \tag_struct_begin:n + { + tag=footnote, + parent=\int_max:nn{2}{\tag_get:n{current_Sect}+0} + } } \tl_set:Ne \l__fnote_currentstruct_tl { \tag_get:n{struct_num} } - \tag_struct_begin:n { tag=footnotelabel }\tag_struct_end: \bool_if:NTF \l__fnote_autodetect_bool { \fnote_mark_gpop_all:ooN { \@thefnmark }{ \l_fnote_type_tl } \l__fnote_currentrefs_seq @@ -505,7 +515,7 @@ %\seq_show:N\l__fnote_currentrefs_seq \seq_map_inline:Nn\l__fnote_currentrefs_seq {\MakeLinkTarget*{footnote*.##1}} \MakeLinkTarget*{footnote*.\l__fnote_currentstruct_tl} - \tag_struct_begin:n { tag=NonStruct,parent=\l__fnote_currentstruct_tl +1 } + \tag_struct_begin:n { tag=footnotelabel,parent=\l__fnote_currentstruct_tl,firstkid } \tag_mc_begin:n { tag=Lbl } #1 \tag_mc_end: diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-kernel-changes.sty b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-kernel-changes.sty index 1282f9d899c..762391f091f 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-kernel-changes.sty +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-kernel-changes.sty @@ -34,39 +34,13 @@ %% %% %% File: latex-lab-toc-kernel-changes.dtx (C) Copyright 2022-2024 LaTeX Project -\def\ltlabkerneldate{2024-02-12} -\def\ltlabkernelversion{0.85c} +\def\ltlabkerneldate{2024-07-11} +\def\ltlabkernelversion{0.85d} \ProvidesPackage{latex-lab-kernel-changes} [\ltlabkerneldate\space v\ltlabkernelversion\space General kernel and class changes] \def\hyper@nopatch@counter{} -\def\@definecounter#1{\expandafter\newcount\csname c@#1\endcsname - \setcounter{#1}\z@ - \global\expandafter\let\csname cl@#1\endcsname\@empty - \@addtoreset{#1}{@ckpt}% - \global\expandafter\let\csname p@#1\endcsname\@empty - \expandafter\gdef\csname theH#1\endcsname{\the\value{#1}}%new - \expandafter - \gdef\csname the#1\expandafter\endcsname\expandafter - {\expandafter\@arabic\csname c@#1\endcsname}} -\def\@addtoreset#1#2{\expandafter\@cons\csname cl@#2\endcsname {{#1}}% - \expandafter\gdef\csname theH#1\endcsname{\csname theH#2\endcsname.\the\value{#1}}% -} -\gdef\theHenumi{\the\value{enumi}} -\gdef\theHenumii{\the\value{enumii}} -\gdef\theHenumiii{\the\value{enumiii}} -\gdef\theHenumiv{\the\value{enumiv}} -\gdef\theHequation{\the\value{equation}} -\gdef\theHfootnote{\the\value{footnote}} -\gdef\theHmpfootnote{\the\value{mpfootnote}} -\def\@currentHref{} -\def\refstepcounter#1{\stepcounter{#1}% - \edef\@currentcounter{#1}% - \xdef\@currentHref {#1.\csname theH#1\endcsname}% - \protected@edef\@currentlabel - {\csname p@#1\expandafter\endcsname\csname the#1\endcsname}% -} -\let\@kernel@refstepcounter\refstepcounter + \def\toclevel@document{-10} \def\toclevel@part{-1} \def\toclevel@chapter{0} @@ -78,20 +52,23 @@ \def\toclevel@figure{1} \def\toclevel@table{1} \ExplSyntaxOn -\AddToHookWithArguments{cmd/MakeLinkTarget/after} - { - \tag_if_active:T - { - \tl_if_blank:VF \@currentHref - { - \prop_gput:Nee \g__tag_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}} - } - } +\str_if_exist:cF { l__socket_tagsupport/recordtarget_str } + { + \AddToHookWithArguments{cmd/MakeLinkTarget/after} + { + \tag_if_active:T + { + \tl_if_blank:VF \@currentHref + { + \prop_gput:Nee \g__tag_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}} + } + } + } } \ExplSyntaxOff %% File: latex-lab-sec.dtx (C) Copyright 2022-2024 LaTeX Project -\def\ltlabsecdate{2024-02-12} -\def\ltlabsecversion{0.84c} +\def\ltlabsecdate{2024-10-04} +\def\ltlabsecversion{0.84f} \ifdefined\directlua \ifnum\outputmode > 0 \pdfvariable gentounicode =1 @@ -104,23 +81,26 @@ \input{glyphtounicode-cmex} \fi \ExplSyntaxOn -\int_new:N\g__kernel_target_int -\RenewDocumentCommand\MakeLinkTarget{sO{}m} - {% - \ifvmode - \special{}% - \else - \@savsf\spacefactor - \smash{}% - \spacefactor\@savsf - \fi - \IfBooleanTF {#1} - { - \tl_gset:Ne \@currentHref {#3} - } - { - \int_gincr:N\g__kernel_target_int - \tl_gset:Ne \@currentHref {target*.\int_use:N\g__kernel_target_int} +\str_if_exist:cF { l__socket_tagsupport/recordtarget_plug_str } + { + \int_new:N\g__kernel_target_int + \RenewDocumentCommand\MakeLinkTarget{sO{}m} + {% + \ifvmode + \special{}% + \else + \@savsf\spacefactor + \smash{}% + \spacefactor\@savsf + \fi + \IfBooleanTF {#1} + { + \tl_gset:Ne \@currentHref {#3} + } + { + \int_gincr:N\g__kernel_target_int + \tl_gset:Ne \@currentHref {target*.\int_use:N\g__kernel_target_int} + } } } \ExplSyntaxOff diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-math.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-math.ltx index 343a184d379..e76fcff474e 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-math.ltx +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-math.ltx @@ -33,8 +33,8 @@ %% %% %% File: latex-lab-math.dtx -\def\ltlabmathdate{2024-04-16} -\def\ltlabmathversion{0.5j} +\def\ltlabmathdate{2024-11-26} +\def\ltlabmathversion{0.6j} \ProvidesFile{latex-lab-math.ltx} [\ltlabmathdate\space v\ltlabmathversion\space @@ -48,6 +48,7 @@ \tl_new:N \g__math_grabbed_math_tl \tl_new:N \l__math_tmpa_tl \skip_new:N \l__math_tmpa_skip +\str_new:N \l__math_tmpa_str \tl_new:N \l__math_content_alt_tl \tl_new:N \l__math_content_actual_tl \tl_new:N \l__math_content_AF_source_tl @@ -74,14 +75,16 @@ \bool_new:N\g__tag_math_mathml_AF_bool \bool_new:N\l__tag_math_mathml_pane_bool \bool_new:N\l__tag_math_alt_bool +\tl_new:N\g__tag_math_luamml_tl +\tl_gset:Nn\g__tag_math_luamml_tl {0} \int_new:N\g__math_mathml_total_int \int_new:N\g__math_mathml_int \int_new:N\g__math_math_total_int \int_new:N\g__math_mathml_AF_found_int \int_new:N\g__math_mathml_AF_attached_int \clist_new:N\l__tag_math_mathml_files_clist -\clist_put_right:Ne\l__tag_math_mathml_files_clist {\c_sys_jobname_str-mathml} - +\clist_put_right:Ne\l__tag_math_mathml_files_clist + {\c_sys_jobname_str-mathml,\c_sys_jobname_str-luamml-mathml} \cs_new_protected:Npn \__math_AF_mml:nnnn #1 #2 #3 #4 { \int_gincr:N \g__math_mathml_total_int @@ -108,28 +111,305 @@ \endgroup \__math_AF_mml:nnnn{#1}{#2}{#3}{#4} } +\tl_const:Nn \c__math_mathml_write_init_tl + { + <!DOCTYPE~html> + \iow_newline: + <html> + \iow_newline: + } +\tl_new:N \l__math_mathml_write_before_tl +\tl_const:Nn \c__math_mathml_write_after_tl + { + \iow_newline: + </div> + \iow_newline: + } +\tl_const:Nn \c__math_mathml_write_final_tl + { + </html> + } -\socket_new:nn {tagsupport/math/mathml/write}{0} -\socket_new_plug:nnn{tagsupport/math/mathml/write}{On} - { +\socket_new:nn {tagsupport/math/mathml/write/prepare}{0} +\socket_new_plug:nnn{tagsupport/math/mathml/write/prepare}{On} + { \str_set:NV\l__math_tmpa_str\l__math_content_AF_source_tl \str_replace_all:Nnn\l__math_tmpa_str{&}{&} \str_replace_all:Nnn\l__math_tmpa_str{<}{<} + \tl_set:Nn \l__math_mathml_write_before_tl + { + <div> + \iow_newline: + <h2>\c_backslash_str mml\c_space_tl \int_use:N \g__math_math_total_int </h2> + \iow_newline: + <p>\l__math_tmpa_str</p> + \iow_newline: + <p>\l__math_content_hash_tl </p> + \iow_newline: + } + } +\cs_new_protected:Npn\__math_provide_luamml_commands: + { + \providecommand\luamml_flag_structelem:{} + \cs_if_free:NT \luamml_structelem: + { + \cs_set_eq:NN\luamml_structelem:\luamml_flag_structelem: + } + \providecommand\luamml_flag_process:{} + \cs_if_free:NT \luamml_process: + { + \cs_set_eq:NN\luamml_process:\luamml_flag_process: + } + \providecommand\luamml_flag_ignore:{} + \cs_if_free:NT \luamml_ignore: + { + \cs_set_eq:NN\luamml_ignore:\luamml_flag_ignore: + } + } +\sys_if_engine_luatex:TF + { + \cs_new_protected:Npn \__math_correct_luamml_array_patches: + { + \AddToHook{package/array/after} + { + \cs_set:Npn \endarray + { + \tbl_crcr:n{endarray} + \__luamml_array_save_array: + \egroup + \UseTaggingSocket{tbl/finalize} + \tbl_restore_outer_cell_data: + \egroup + \mode_if_math:T { \__luamml_array_finalize_array: } + \@arrayright + \gdef \@preamble {} + } + \cs_set:Npn \@classz + { + \@classx + \@tempcnta \count@ + \prepnext@tok + \@addtopreamble { + \ifcase \@chnum + \hfil + \hskip 1sp + \d@llarbegin + \cs_if_eq:NNTF \d@llarbegin \begingroup { + \insert@column + \d@llarend + } { + \__luamml_array_init_col: + \insert@column + \luamml_flag_save:nn {} {mtd} + \d@llarend + \__luamml_array_finalize_col:w 0~ + } + \do@row@strut + \hfil + \or + \hskip 1sp + \d@llarbegin + \cs_if_eq:NNTF \d@llarbegin \begingroup { + \insert@column + \d@llarend + } { + \__luamml_array_init_col: + \insert@column + \luamml_flag_save:nn {} {mtd} + \d@llarend + \__luamml_array_finalize_col:w 1~ + } + \do@row@strut + \hfil + \or + \hfil + \hskip 1sp + \d@llarbegin + \cs_if_eq:NNTF \d@llarbegin \begingroup { + \insert@column + \d@llarend + } { + \__luamml_array_init_col: + \insert@column + \luamml_flag_save:nn {} {mtd} + \d@llarend + \__luamml_array_finalize_col:w 2~ + } + \do@row@strut + \or + \setbox \ar@mcellbox \vbox \@startpbox { \@nextchar } + \insert@pcolumn + \@endpbox + \ar@align@mcell + \do@row@strut + \or + \vtop \@startpbox { \@nextchar } + \insert@pcolumn + \@endpbox + \do@row@strut + \or + \vbox \@startpbox { \@nextchar } + \insert@pcolumn + \@endpbox + \do@row@strut + \fi + } + \prepnext@tok + } + } + } + \AddToHook{begindocument/before} + { + \str_case:on \g__math_luamml_load_tl + { + { 1 } { + \RequirePackage { luamml } + \__math_correct_luamml_array_patches: + \AddToHook{begindocument/end} + { + \__math_luamml_activate_write: + } + } + {-1 } { + \AddToHook{begindocument/end} + { + \msg_note:nnnn { tag } + { luamml-status }{ disabled }{ not~create } + } + } + { 0 } + { + \@ifpackageloaded { unicode-math } + { + \RequirePackage { luamml } + \__math_correct_luamml_array_patches: + \AddToHook{begindocument/end} + { + \__math_luamml_activate_write: + } + } + { \msg_warning:nn { tag }{ unicode-math-missing } } + } + } + \__math_provide_luamml_commands: + } + } + { + \__math_provide_luamml_commands: + } +\msg_new:nnn { tag }{ luamml-status } + { + luamml~has~been~#1~and~will~#2~an~MathML~file. + } + +\msg_new:nnn { tag }{ unicode-math-missing } + { + The~package~unicode-math~is~missing\\ + luamml~will~not~create~an~MathML~file.\\ + To~avoid~this~warning~load~unicode-math~\\ + or~disable~luamml~with~\\ + \tl_to_str:n{\tagpdfsetup{math/mathml/luamml/load=false}}\\ + or~force~luamml~with~\\ + \tl_to_str:n{\tagpdfsetup{math/mathml/luamml/load=true}} + } +\cs_new_protected:Npn \__math_luamml_activate_write: + { + \bool_if:NT \g__math_luamml_write_bool + { + \bool_gset_true:N\g__tag_math_mathml_AF_bool + \AssignSocketPlug{tagsupport/math/struct/begin}{mathml-AF} + \AssignSocketPlug{tagsupport/math/struct/end}{mathml-AF} + \AssignSocketPlug{tagsupport/math/substruct/begin}{single} + \AssignSocketPlug{tagsupport/math/substruct/end}{single} + \int_set:Nn \l__luamml_pretty_int { 7 } + \RegisterFamilyMapping\symsymbols{oms} + \RegisterFamilyMapping\symletters{oml} + \AssignSocketPlug{tagsupport/math/mathml/write/prepare}{On} + \iow_new:N \g__math_luamml_iow + \iow_open:Nn \g__math_luamml_iow {\c_sys_jobname_str-luamml-mathml.html} + \iow_now:Ne \g__math_luamml_iow { \c__math_mathml_write_init_tl } + \cs_new:Npn \__math_luamml_output_hook:n ##1 + { + \tl_if_empty:NF \l__math_mathml_write_before_tl + { + \iow_now:Ne \g__math_luamml_iow + { + \l__math_mathml_write_before_tl + ##1 + \c__math_mathml_write_after_tl + } + } + } + \__luamml_register_output_hook:N \__math_luamml_output_hook:n + \AddToHook{enddocument/afterlastpage} + { + \iow_now:Ne \g__math_luamml_iow + { \c__math_mathml_write_final_tl } + \iow_close:N \g__math_luamml_iow + } + \msg_note:nnnn { tag } + { luamml-status }{ enabled }{ create } + } + } +\tl_new:N \g__math_luamml_load_tl +\tl_gset:Nn \g__math_luamml_load_tl {0} +\bool_new:N \g__math_luamml_write_bool +\bool_gset_true:N \g__math_luamml_write_bool +\cs_new:Npn\__math_luamml_structelem:{} +\cs_new:Npn\__math_luamml_ignore:{} +\msg_new:nnn { tag }{ PDF-2.0-recommended } + { + The~key~#1~will~not~work~properly~with~PDF~#2.\\ + Switching~to~PDF~2.0~is~recommended. + } +\keys_define:nn { __tag / setup } + { + math/mathml/luamml/load .choice: , + math/mathml/luamml/load/true .code:n = {\tl_gset:Nn \g__math_luamml_load_tl{1}}, + math/mathml/luamml/load/false .code:n = {\tl_gset:Nn \g__math_luamml_load_tl{-1}}, + math/mathml/luamml/load .default:n = true, + math/mathml/luamml/load .usage:n=preamble, + math/mathml/structelem .choice:, + math/mathml/structelem/true .code:n = + { + \pdf_version_compare:NnT < {2.0} + { + \msg_warning:nnne { tag }{ PDF-2.0-recommended } + { math/mathml/structelem }{ \pdf_version: } + } + \cs_set:Npn\__math_luamml_structelem:{\luamml_structelem:} + \cs_set:Npn\__math_luamml_ignore:{\luamml_ignore:} + }, + math/mathml/structelem/false .code:n = + { + \cs_set_eq:NN\__math_luamml_structelem:\prg_do_nothing: + \cs_set_eq:NN\__math_luamml_ignore:\prg_do_nothing: + }, + math/mathml/structelem .default:n = true, + math/mathml/ignore .code:n = {\luamml_ignore:}, + math/mathml/luamml/write .choice:, + math/mathml/luamml/write/true .code:n = + { + \tl_gset:Nn \g__math_luamml_load_tl{1} + \bool_gset_true:N \g__math_luamml_write_bool + }, + math/mathml/luamml/write/false .code:n = + { + \bool_gset_false:N \g__math_luamml_write_bool + }, + math/mathml/luamml/write .default:n = true, + math/mathml/luamml/write .usage:n=preamble, + math/mathml/luamml .bool_gset:N = \g__math_luamml_write_bool, + math/mathml/luamml .usage:n=preamble + } +\socket_new:nn {tagsupport/math/mathml/write}{0} +\socket_new_plug:nnn{tagsupport/math/mathml/write}{On} + { \iow_now:Ne \g__math_writedummy_iow { - \iow_newline: - <div> - \iow_newline: - <h2>\c_backslash_str mml\c_space_tl \int_use:N \g__math_math_total_int </h2> - \iow_newline: - <p>\l__math_tmpa_str</p> - \iow_newline: - <p>\l__math_content_hash_tl </p> - \iow_newline: + \l__math_mathml_write_before_tl <math></math> - \iow_newline: - </div> - \iow_newline: + \c__math_mathml_write_after_tl } } @@ -147,14 +427,14 @@ } \iow_now:Ne \g__math_writedummy_iow { - <!DOCTYPE~html> - \iow_newline: - <html> + \c__math_mathml_write_init_tl } + \AssignSocketPlug {tagsupport/math/mathml/write/prepare}{On} \AssignSocketPlug {tagsupport/math/mathml/write}{On} \AddToHook{enddocument/afterlastpage} { - \iow_now:Nn \g__math_writedummy_iow {</html>} + \iow_now:Ne \g__math_writedummy_iow + { \c__math_mathml_write_final_tl } \iow_close:N \g__math_writedummy_iow } } @@ -188,8 +468,8 @@ \bool_if:NT\g__tag_math_mathml_AF_bool { \typeout{Info:~Activating~mathml~support} - \AssignSocketPlug{tagsupport/math/struct/begin}{test-mathml} - \AssignSocketPlug{tagsupport/math/struct/end}{test-mathml} + \AssignSocketPlug{tagsupport/math/struct/begin}{mathml-AF} + \AssignSocketPlug{tagsupport/math/struct/end}{mathml-AF} \AssignSocketPlug{tagsupport/math/substruct/begin}{single} \AssignSocketPlug{tagsupport/math/substruct/end}{single} \AddToHook{enddocument/info} @@ -220,13 +500,13 @@ \int_set:Nn \l__math_mathstyle_int {#2} \property_record:nn {#1} { mathstyle } \int_compare:nNnTF { \property_ref:nn {#1}{ mathstyle} } = { #2 } - { \tag_start: }{ \tag_stop: } + { \tag_resume:n{\mathchoice} }{ \tag_suspend:n{\mathchoice} } } \cs_generate_variant:Nn \__math_tag_if_mathstyle:nn {en} \keys_define:nn { __tag / setup } { math/mathml/sources .clist_set:N = \l__tag_math_mathml_files_clist, - math/alt/use .bool_set:N = \l__tag_math_alt_bool, + math/alt/use .bool_set:N = \l__tag_math_alt_bool, viewer/pane/mathml .bool_set:N = \l__tag_math_mathml_pane_bool, viewer/pane/mathml .initial:n = true, viewer/pane/mathsource .bool_set:N = \l__tag_math_texsource_pane_bool, @@ -235,9 +515,26 @@ math/tex/AF .bool_set:N = \l__tag_math_texsource_AF_bool, math/tex/AF .initial:n = true } +\AddToHook{begindocument/end} + { + \str_if_eq:eeT + {1} + { + \exp_last_unbraced:Ne\use_i:nn + {\GetDocumentProperties{document/pdfstandard-UA}} + \c_empty_tl\c_empty_tl + } + { + \bool_if:NF \l__tag_math_alt_bool + { + \typeout{PDF/UA-1~detected.~Enabling~alt~text~on~Formula} + } + \bool_set_true:N\l__tag_math_alt_bool + } + } \socket_new:nn {tagsupport/math/inline/begin}{0} \socket_new:nn {tagsupport/math/inline/end}{0} -\socket_new:nn {tagsupport/math/inline/formula/begin}{1} % +\socket_new:nn {tagsupport/math/inline/formula/begin}{2} % \socket_new:nn {tagsupport/math/inline/formula/end}{0} \socket_new_plug:nnn {tagsupport/math/inline/begin} @@ -250,13 +547,14 @@ \socket_new_plug:nnn {tagsupport/math/inline/formula/begin} {default} - { - \socket_use:n{tagsupport/math/content} - \socket_use:n{tagsupport/math/struct/begin} + { \tagpdfparaOff + \__math_luamml_structelem: + \tag_socket_use:n{math/content} + \tag_socket_use:n{math/struct/begin} % inner formula if multiple parts (not really implemented yet) - \socket_use:n{tagsupport/math/substruct/begin} - #1 - \socket_use:n{tagsupport/math/end} + \tag_socket_use:n{math/substruct/begin} + #2 + \tag_socket_use:n{math/end} } \socket_new_plug:nnn {tagsupport/math/inline/formula/end} @@ -267,7 +565,7 @@ } \socket_new:nn {tagsupport/math/display/begin}{0} \socket_new:nn {tagsupport/math/display/end}{0} -\socket_new:nn {tagsupport/math/display/formula/begin}{1} % +\socket_new:nn {tagsupport/math/display/formula/begin}{2} % \socket_new:nn {tagsupport/math/display/formula/end}{0} \socket_new_plug:nnn @@ -284,11 +582,13 @@ {tagsupport/math/display/formula/begin} {default} { - \socket_use:n{tagsupport/math/content} - \socket_use:n{tagsupport/math/struct/begin} - \socket_use:n{tagsupport/math/substruct/begin} - #1 - \socket_use:n{tagsupport/math/end} + \tagpdfparaOff + \__math_luamml_structelem: + \tag_socket_use:n{math/content} + \tag_socket_use:n{math/struct/begin} + \tag_socket_use:n{math/substruct/begin} + #2 + \tag_socket_use:n{math/end} } \socket_new_plug:nnn {tagsupport/math/display/formula/end} @@ -367,9 +667,19 @@ \bool_if:NTF\l__tag_math_texsource_AF_bool { \tl_set_eq:NN \l__math_content_AF_source_tmpa_tl \l__math_content_AF_source_tl } { \tl_clear:N \l__math_content_AF_source_tmpa_tl } + \tl_if_eq:NnTF\g__math_grabbed_env_tl {math} + { + \tl_set:Nn\l__math_attribute_class_tl{inline} + } + { + \tl_set:Nn\l__math_attribute_class_tl{display} + } + \bool_if:NF\l__tag_math_alt_bool + { \tl_set:Nn \l__math_content_alt_tl{} } \tag_struct_begin:n { tag=Formula, + attribute-class=\l__math_attribute_class_tl, texsource = \l__math_content_AF_source_tmpa_tl, title-o = \g__math_grabbed_env_tl, actualtext = \l__math_content_actual_tl, @@ -388,7 +698,7 @@ \tl_new:N\l__math_grabbed_math_tl \socket_new_plug:nnn {tagsupport/math/struct/begin} - {test-mathml} + {mathml-AF} { \int_gincr:N\g__math_math_total_int \tl_set:Ne\l__math_content_hash_tl @@ -404,20 +714,24 @@ \bool_if:NF\l__tag_math_alt_bool { \tl_set:Nn \l__math_content_alt_tl{} } \tl_if_exist:cTF { g__math_mathml_ \l__math_content_hash_tl _tl } - { - \int_gincr:N\g__math_mathml_AF_found_int - \bool_if:NTF \l__tag_math_mathml_AF_bool - { - \int_gincr:N\g__math_mathml_AF_attached_int - \typeout {Inserting~mathml~with~Hash~\l__math_content_hash_tl} - } - { - \typeout {Ignoring~mathml~with~Hash~\l__math_content_hash_tl} - } - } - { - \typeout{WARNING:~mathml~missing~for~hash~\l__math_content_hash_tl} - } + { + \int_gincr:N\g__math_mathml_AF_found_int + \bool_if:NTF \l__tag_math_mathml_AF_bool + { + \int_gincr:N\g__math_mathml_AF_attached_int + \typeout {Inserting~mathml~with~Hash~\l__math_content_hash_tl} + } + { + \typeout {Ignoring~mathml~with~Hash~\l__math_content_hash_tl} + } + } + { + \bool_if:NT \l__tag_math_mathml_AF_bool + { + \typeout {WARNING:~mathml~missing~for~hash~\l__math_content_hash_tl} + } + } + \socket_use:n {tagsupport/math/mathml/write/prepare} \socket_use:n {tagsupport/math/mathml/write} % write hash if request \bool_if:NTF\l__tag_math_texsource_AF_bool { \tl_set_eq:NN \l__math_content_AF_source_tmpa_tl \l__math_content_AF_source_tl } @@ -438,7 +752,7 @@ } \socket_new_plug:nnn {tagsupport/math/struct/end} - {test-mathml} + {mathml-AF} { \tag_struct_end: } @@ -473,30 +787,14 @@ {single} { \tag_mc_end:} \socket_new:nn {tagsupport/math/end}{0} - -\cs_new_protected:Npn \__tag_math_disable: - { - \socket_assign_plug:nn {tagsupport/math/inline/begin}{noop} - \socket_assign_plug:nn {tagsupport/math/inline/end}{noop} - \socket_assign_plug:nn {tagsupport/math/inline/formula/begin}{identity} - \socket_assign_plug:nn {tagsupport/math/inline/formula/end}{noop} - \socket_assign_plug:nn {tagsupport/math/display/begin}{noop} - \socket_assign_plug:nn {tagsupport/math/display/end}{noop} - \socket_assign_plug:nn {tagsupport/math/display/formula/begin}{identity} - \socket_assign_plug:nn {tagsupport/math/display/formula/end}{noop} - } -\cs_new_protected:Npn \__tag_math_enable: - { - \socket_assign_plug:nn {tagsupport/math/inline/begin}{MC} - \socket_assign_plug:nn {tagsupport/math/inline/end}{MC} - \socket_assign_plug:nn {tagsupport/math/inline/formula/begin}{default} - \socket_assign_plug:nn {tagsupport/math/inline/formula/end}{default} - \socket_assign_plug:nn {tagsupport/math/display/begin}{default} - \socket_assign_plug:nn {tagsupport/math/display/end}{default} - \socket_assign_plug:nn {tagsupport/math/display/formula/begin}{default} - \socket_assign_plug:nn {tagsupport/math/display/formula/end}{default} - } -\AtBeginDocument{\tag_if_active:T{\__tag_math_enable: }} +\socket_assign_plug:nn {tagsupport/math/inline/begin}{MC} +\socket_assign_plug:nn {tagsupport/math/inline/end}{MC} +\socket_assign_plug:nn {tagsupport/math/inline/formula/begin}{default} +\socket_assign_plug:nn {tagsupport/math/inline/formula/end}{default} +\socket_assign_plug:nn {tagsupport/math/display/begin}{default} +\socket_assign_plug:nn {tagsupport/math/display/end}{default} +\socket_assign_plug:nn {tagsupport/math/display/formula/begin}{default} +\socket_assign_plug:nn {tagsupport/math/display/formula/end}{default} \cs_new_protected:Npn \__math_process:nn #1#2 { \legacy_if:nF { measuring@ } @@ -516,46 +814,52 @@ \cs_new_protected:Npn \__math_process_auxii:nn #1#2 { } \cs_new_protected:Npn \math_processor:n #1 { \cs_set_protected:Npn \__math_process_auxii:nn ##1##2 {#1} } -\cs_new_protected:Npn \__math_grab_dollar:w % $ - #1 $ +\cs_new_protected:Npn \__math_grab_dollar:w { \__math_grab_dollar_delim:w } +\cs_new_protected:Npn \__math_grab_dollar:n #1 { - \tl_if_blank:nF {#1} - { - \__math_process:nn { math } {#1} % $ - \bool_lazy_or:nnTF - {\legacy_if_p:n { measuring@ }} - { \l__math_fakemath_bool } - { #1 $ } + \__math_process:nn { math } {#1} + \bool_lazy_any:nTF + { + {\legacy_if_p:n { measuring@ }} + { \l__math_fakemath_bool } + { \tl_if_blank_p:n {#1} } + } + { + \__math_luamml_ignore: + #1 $ % $ + } { \tag_socket_use:n {math/inline/begin} %end P-MC - \tag_socket_use:nn {math/inline/formula/begin}{#1} - $ + \tag_socket_use:nnn {math/inline/formula/begin}{}{#1} + $ % $ \tag_socket_use:n {math/inline/formula/end} \tag_socket_use:n {math/inline/end} % restart P-MC } - } } +\cs_new_protected:Npn \__math_grab_dollar_delim:w #1 $ % $ + { \__math_grab_dollar:n {#1} } \cs_new_protected:Npn \__math_grab_dollardollar:w % $$ #1 $$ { \tl_if_blank:nF {#1} { \__math_process:nn { equation* } {#1} - \socket_use:n {tagsupport/math/display/begin} - \socket_use:nn{tagsupport/math/display/formula/begin}{#1} - $$ + \tag_socket_use:n {math/display/begin} + \tag_socket_use:nn{math/display/formula/begin}{}{#1} } + $$ } \cs_new_protected:Npn \__math_tag_dollardollar_display_end: { % \typeout{== tag dollarldollar display end} % \ShowTagging{struct-stack} \para_raw_end: - \tagpdfparaOn \l__math_tmpa_skip \lastskip - \socket_use:n{tagsupport/math/display/formula/end} + \tag_socket_use:n{math/display/formula/end} + \nobreak + \skip_vertical:n { -\l__math_tmpa_skip } % remove the negative belowdisplayskip \penalty \postdisplaypenalty - \skip_vertical:n { -\l__math_tmpa_skip * 2 } + \skip_vertical:n { -\l__math_tmpa_skip } % insert the correct skip \@doendpe % this has no \end{...} to take care of it } @@ -573,6 +877,82 @@ { \begin { equation* } #1 \end { equation* } } +\tl_new:N \l__math_grabbed_tl +\int_new:N \l__math_grab_env_int +\cs_new_protected:Npn \__math_grab_dollar_loop: + { + \group_begin: + \tl_clear:N \l__math_grabbed_tl + \__math_grab_loop: + } +\cs_new_protected:Npn \__math_grab_loop: + { + \peek_remove_spaces:n + { + \peek_meaning:NTF \c_group_begin_token + { \__math_grab_loop_group:n } + { \__math_grab_loop_token:N } + } + } +\cs_new_protected:Npn \__math_grab_loop_group:n #1 + { \__math_grab_loop_store:n { {#1} } } +\cs_new_protected:Npn \__math_grab_loop_store:n #1 + { + \tl_put_right:Nn \l__math_grabbed_tl {#1} + \__math_grab_loop: + } +\cs_new_protected:Npn \__math_grab_loop_token:N #1 + { + \cs_if_exist_use:cF + { __math_grab_loop_ \token_to_str:N #1 : } + { \__math_grab_loop_store:n {#1} } + } +\cs_new_protected:cpn { __math_grab_loop_ \token_to_str:N $ : } + { \__math_grab_loop_end: } +\cs_new_protected:cpn { __math_grab_loop_ \token_to_str:N \\ : } + { + \int_compare:nNnTF \l__math_grab_env_int = 0 + { \__math_grab_loop_newline: } + { \__math_grab_loop_store:n { \\ } } + } +\cs_new_protected:cpn { __math_grab_loop_ \token_to_str:N \begin : } + { + \int_incr:N \l__math_grab_env_int + \__math_grab_loop_store:n { \begin } + } +\cs_new_protected:cpn { __math_grab_loop_ \token_to_str:N \end : } + { + \int_compare:nNnTF \l__math_grab_env_int = 0 + { + \__math_grab_loop_newline: + \end + } + { + \int_decr:N \l__math_grab_env_int + \__math_grab_loop_store:n { \end } + } + } +\tl_map_inline:nn { \ignorespaces \unskip \textonly@unskip } + { + \cs_new_protected:cpn { __math_grab_loop_ \token_to_str:N #1 : } + { \__math_grab_loop: } + } +\cs_new_protected:Npn \__math_grab_loop_newline: + { + \if_false: { \fi: + \cs_set_protected:Npn \cr + { + \__math_grab_loop: + \tex_cr:D + } + \if_false: } \fi: + \\ + } +\cs_new_protected:Npn \__math_grab_loop_end: + { + \exp_args:NNV \group_end: + \__math_grab_dollar:n \l__math_grabbed_tl + } \tl_new:N \l__math_env_name_tl \keys_define:nn { __math } { @@ -686,14 +1066,13 @@ { \__tag_tool_close_P: } - \socket_use:nn{tagsupport/math/display/formula/begin}{} - \tagpdfparaOff + \tag_socket_use:nn{math/display/formula/begin}{}{} } \cs_new:Npn \@kernel@math@registered@end { \para_raw_end: \tagpdfparaOn - \socket_use:n{tagsupport/math/display/formula/end} + \tag_socket_use:n{tagsupport/math/display/formula/end} \@endpetrue } @@ -781,6 +1160,7 @@ \bool_set_false:N \l__math_collected_bool \col@sep\tabcolsep \let\d@llarbegin\begingroup \let\d@llarend\endgroup + \cs_set_protected:Npn \__math_grab_dollar:w { \__math_grab_dollar_loop: } \@tabarray} } \cs_new_eq:NN \__math_m@th: \m@th @@ -870,7 +1250,7 @@ \iftagsleft@ \@xp\lendmultline@ \else \@xp\rendmultline@ \fi \ignorespacesafterend } -\def\measuring@true{\let\ifmeasuring@\iftrue\tag_stop:} +\def\measuring@true{\let\ifmeasuring@\iftrue\tag_suspend:n{\measuring}} \math_register_halign_env:nn {align}{} \math_register_halign_env:nn {align*}{} \math_register_halign_env:nn {alignat}{} diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-mathtools.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-mathtools.ltx index 43663b8f9ef..ec0624be4d6 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-mathtools.ltx +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-mathtools.ltx @@ -33,8 +33,10 @@ %% %% %% File: latex-lab-mathtools.dtx +\def\ltlabmathtoolsdate{2024-09-18} +\def\ltlabmathtoolsversion{0.80a} \ProvidesFile{latex-lab-mathtools.ltx} - [2023-01-05 v0.1a mathtools adaptions] + [2024-07-13 v0.1a mathtools adaptions] \RequirePackage{tagpdf-base} \ExplSyntaxOn \tl_new:N\l__math_mathtools_init_tl @@ -65,7 +67,7 @@ \vskip\normallineskiplimit % CCS \vskip\l_MT_above_intertext_sep \vbox{% - \ifmeasuring@\tag_stop:\fi + \ifmeasuring@\tag_suspend:n{\measuring}\fi \normalbaselines \ifdim \ifdim\@totalleftmargin=\z@ @@ -93,7 +95,7 @@ \noalign{% \penalty\postdisplaypenalty\vskip\abovedisplayshortskip \vbox{% - \ifmeasuring@\tag_stop:\fi + \ifmeasuring@\tag_suspend:n{\measuring}\fi \normalbaselines \MH_if_dim:w \MH_if_dim:w \@totalleftmargin=\z@ @@ -122,7 +124,7 @@ \vskip\normallineskiplimit \vskip\l_MT_above_shortintertext_sep \vbox{% - \ifmeasuring@\tag_stop:\fi + \ifmeasuring@\tag_suspend:n{\measuring}\fi \normalbaselines \MH_if_dim:w \MH_if_dim:w \@totalleftmargin=\z@ diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-bib.sty b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-bib.sty index 4cfa0b055c8..49f0207bc39 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-bib.sty +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-bib.sty @@ -33,7 +33,7 @@ %% %% %% File: latex-lab-bib.dtx (C) Copyright 2023 LaTeX Project -\def\ltlabbibdate{2024-02-12} +\def\ltlabbibdate{2024-07-05} \def\ltlabbibversion{0.81b} \ProvidesExplPackage {latex-lab-testphase-bib} {\ltlabbibdate} {\ltlabbibversion} {Code related to the tagging of bibliography and cite command} diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-block.sty b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-block.sty index a4d646636fc..e3b4f050f3e 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-block.sty +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-block.sty @@ -33,15 +33,13 @@ %% %% %% File: latex-lab-block.dtx (C) Copyright 2021-2024 LaTeX Project -\def\ltlabblockdate{2024-03-23} -\def\ltlabblockversion{0.8n} +\def\ltlabblockdate{2024-11-25} +\def\ltlabblockversion{0.8w} \ProvidesPackage {latex-lab-testphase-block} [\ltlabblockdate\space v\ltlabblockversion\space blockenv implementation] \RequirePackage{latex-lab-kernel-changes} \ExplSyntaxOn -\tl_new:N \l__block_item_align_tl -\tl_new:N\l__block_legacy_env_params_tl \def\@doendpe{\@endpetrue \def\par { @@ -58,8 +56,6 @@ } } \cs_new_eq:NN \__kernel_displayblock_doendpe: \prg_do_nothing: -\def\@endpetrue {\global\let\if@endpe\iftrue} -\def\@endpefalse{\global\let\if@endpe\iffalse} \NewTemplateType{blockenv}{1} \NewTemplateType{block}{1} \NewTemplateType{para}{1} @@ -84,20 +80,22 @@ } \DeclareTemplateInterface{block}{display}{1} { - heading : tokenlist = , %?? + heading : tokenlist = , % ?? beginsep : skip = \topsep , begin-par-skip : skip = \partopsep , par-skip : skip = \parsep , - end-skip : skip = \KeyValue{beginsep} , % conflict with name below + end-skip : skip = \KeyValue{beginsep} , % conflict with name below end-par-skip : skip = \KeyValue{begin-par-skip} , + item-skip : skip = \itemsep , beginpenalty : integer = \UseName{@beginparpenalty} , endpenalty : integer = \UseName{@endparpenalty} , leftmargin : length = \leftmargin , rightmargin : length = \rightmargin , - parindent : length = \listparindent , + parindent : length = 0pt , } \DeclareTemplateInterface{para}{std}{1} { + para-class : tokenlist = justify , indent-width : length = \parindent , start-skip : skip = 0pt , left-skip : skip = 0pt , @@ -106,7 +104,6 @@ fixed-word-spaces : boolean = false , final-hyphen-demerits : integer = 5000 , cr-cmd : tokenlist = \@normalcr , - para-class : tokenlist = justify , } \DeclareTemplateInterface{list}{std}{1} % optional { @@ -164,226 +161,6 @@ \cs_new_protected:Npn \DebugBlocksOn { \block_debug_on: } \cs_new_protected:Npn \DebugBlocksOff { \block_debug_off: } \DebugBlocksOff -\NewDocumentEnvironment{displayblock}{ !O{} } - { \UseInstance{blockenv}{displayblock} {#1} } - { \endblockenv } -\NewDocumentEnvironment{displayblockflattened}{ !O{} } - { \UseInstance{blockenv}{displayblockflattened} {#1} } - { \endblockenv } -\AddToHook{begindocument/before}{ - \RenewDocumentEnvironment{center} { !O{} } - { \UseInstance{blockenv}{center}{#1} } - { \endblockenv } - \RenewDocumentEnvironment{flushright} { !O{} } - { \UseInstance{blockenv}{flushright}{#1} } - { \endblockenv } - \RenewDocumentEnvironment{flushleft} { !O{} } - { \UseInstance{blockenv}{flushleft}{#1} } - { \endblockenv } -} -\AddToHook{begindocument/before}{ - \RenewDocumentEnvironment{quote}{ !O{} } - { \UseInstance{blockenv}{quote} {#1} } - { \endblockenv } - \RenewDocumentEnvironment{quotation}{ !O{} } - { \UseInstance{blockenv}{quotation} {#1} } - { \endblockenv } -} -\AddToHook{begindocument/before}{ - \RenewDocumentEnvironment{verbatim}{ !O{} } - { \UseInstance{blockenv}{verbatim} {#1} - \@setupverbinvisiblespace\frenchspacing\@vobeyspaces - \@xverbatim - } - { \endblockenv } - \RenewDocumentEnvironment{verbatim*}{ !O{} } - { \UseInstance{blockenv}{verbatim} {#1} - \@setupverbvisiblespace\frenchspacing\@vobeyspaces - \@sxverbatim - } - { \endblockenv } -} -\def\legacyverbatimsetup{% - \language\l@nohyphenation - \@tempswafalse - \def\par{% - \if@tempswa - \leavevmode \null {\@@par}\penalty\interlinepenalty - \else - \@tempswatrue - \ifhmode{\@@par}\penalty\interlinepenalty\fi - \fi}% - \let\do\@makeother \dospecials - \obeylines \verbatim@font \@noligs - \everypar \expandafter{\the\everypar \unpenalty}% - \tl_set:Nn \l__tag_para_main_tag_tl {codeline} - \tagtool{paratag=Code}% oder faster: \tl_set:Nn\l__tag_para_tag_tl{Code} -} -\newcommand\@setupverbinvisiblespace{} -\tag_if_active:T { - \bool_if:NF\g__tag_mode_lua_bool - { - \renewcommand\@setupverbinvisiblespace{\def\@xobeysp{\nobreakspace\pdffakespace}} - } -} -\AddToHook{begindocument/before}{ - \RenewDocumentEnvironment{itemize}{!O{}} - { \UseInstance{blockenv}{itemize} {#1} } - { \endblockenv } - \RenewDocumentEnvironment{enumerate}{!O{}} - { \UseInstance{blockenv}{enumerate} {#1} } - { \endblockenv } - \RenewDocumentEnvironment{description}{!O{}} - { \UseInstance{blockenv}{description} {#1} } - { \endblockenv } -} -\AddToHook{begindocument/before}{ - \RenewDocumentEnvironment{verse}{ !O{} } - { - \let\\\@centercr - \UseInstance{blockenv}{list} - { - item-indent=-1.5em, - parindent=-1.5em, - item-skip=0pt, - rightmargin=\leftmargin, - leftmargin=\leftmargin+1.5em, - #1 - } - \item\relax - } - { \endblockenv } - } -\AddToHook{begindocument/before}{ - \RenewDocumentEnvironment{list}{O{} m m } - { - \tl_set:Nn \@itemlabel {#2} - \tl_set:Nn \l__block_legacy_env_params_tl {#3} - \UseInstance{blockenv}{list} {#1} - } - { \endblockenv } -} -\tl_new:N \l__block_env_params_tl -\cs_new:Npn \legacylistsetupcode { - \dim_zero:N \listparindent - \dim_zero:N \rightmargin - \dim_zero:N \itemindent - \tl_set:Nn \@listctr {} - \legacy_if_set_false:n { @nmbrlist } % needed if lists are nested - \let\makelabel\@mklab % TODO: customize - \l__block_legacy_env_params_tl - \legacy_if:nTF { @nmbrlist } - { \tl_set:Nn \l__tag_L_attr_class_tl {enumerate} } % numbered list - { \tl_if_empty:NTF \@itemlabel - { \tl_set:Nn \l__tag_L_attr_class_tl {list} } % no label - { \tl_set:Nn \l__tag_L_attr_class_tl {itemize} } % unnumbered, unordered - } -} -\AddToHook{begindocument/before}{ - \RenewDocumentEnvironment{trivlist}{ !O{} } - { \list[#1]{} - { - \dim_zero:N \leftmargin - \dim_zero:N \labelwidth - \cs_set_eq:NN \makelabel \use:n - } - } - { \endblockenv } -} -\RenewDocumentCommand \newtheorem { m O{#1} m o } -{ - \expandafter\@ifdefinable\csname #1\endcsname - { - \str_if_eq:nnTF{#1}{#2} - { - \@definecounter {#2} - \IfNoValueTF {#4} - { % @ynthm - \tl_gset:ce { the #2 } - { - \@thmcounter{#2} - } - } - { % @xnthm - \@newctr{#1}[#4] - \tl_gset:ce { the #2 } - { - \expandafter\noexpand\csname the#4\endcsname - \@thmcountersep - \@thmcounter{#2} - } - } - } - { % @othm - \@ifundefined{c@#2} - { \@nocounterr{#2} } - { - \tl_gset:cn { the #1 } - { \UseName { the #2 } } - } - } - \global\@namedef{#1} { \@thm{#2}{#3} } - \global\@namedef{end#1}{ \@endtheorem } - } -} -\tl_new:N \l__block_thm_current_counter_tl -\def\@thm#1#2{% - \@kernel@refstepcounter{#1} - \tl_set:Nn \l__block_thm_current_counter_tl{#1} - \@ifnextchar[{\@ythm{#1}{#2}}{\@xthm{#1}{#2}}} -\def\hyper@nopatch@thm{} -\def\@begintheorem#1#2{ - \UseInstance{blockenv}{theorem}{} - \tagpdfparaOff - \mode_leave_vertical: - \MakeLinkTarget{\l__block_thm_current_counter_tl} - \tag_struct_begin:n{tag=Caption} - \group_begin: - \bfseries - \tag_mc_begin:n {} - #1\ - \tag_mc_end: - \tag_struct_begin:n{tag=Lbl} - \tag_mc_begin:n {} - #2 - \tag_mc_end: - \tag_struct_end: - \group_end: - \tag_struct_end: - \tagpdfparaOn - \__block_start_para_structure_unconditionally:n { \PARALABEL } - \itshape - \hskip\labelsep - \ignorespaces -} -\def\@opargbegintheorem#1#2#3{ - \UseInstance{blockenv}{theorem}{} - \tagpdfparaOff - \mode_leave_vertical: - \MakeLinkTarget{\l__block_thm_current_counter_tl} - \tag_struct_begin:n{tag=Caption} - \group_begin: - \bfseries - \tag_mc_begin:n {} - #1\ - \tag_mc_end: - \tag_struct_begin:n{tag=Lbl} - \tag_mc_begin:n {} - #2 - \tag_mc_end: - \tag_struct_end: - \tag_mc_begin:n {} - \ (#3) - \tag_mc_end: - \group_end: - \tag_struct_end: - \tagpdfparaOn - \__block_start_para_structure_unconditionally:n { \PARALABEL } - \itshape - \hskip\labelsep - \ignorespaces -} -\def\@endtheorem{\endblockenv} \cs_new:Npn \g_block_nesting_depth_int { \@listdepth } % a fake int % for now \DeclareTemplateCode{blockenv}{display}{1} @@ -396,25 +173,25 @@ setup-code = \l__block_setup_code_tl , block-instance = \l__block_block_instance_tl , para-instance = \l__block_para_instance_tl , + para-flattened = \l__tag_para_flattened_bool , inner-level-counter = \l__block_inner_level_counter_tl , max-inner-levels = \l__block_max_inner_levels_tl , inner-instance-type = \l__block_inner_instance_type_tl , inner-instance = \l__block_inner_instance_tl , - para-flattened = \l__tag_para_flattened_bool , final-code = \l__block_final_code_tl , } { \__block_debug_typeout:n{\l__block_env_name_tl -env-start} \tl_if_empty:nF {#1} { \SetTemplateKeys{blockenv}{display}{#1} } % \begin{macrocode} - \int_compare:nNnTF \l__block_flattened_level_int > 0 + \int_compare:nNnTF \l__tag_block_flattened_level_int > 0 { - \int_incr:N \l__block_flattened_level_int + \int_incr:N \l__tag_block_flattened_level_int } { \bool_if:NT \l__tag_para_flattened_bool { - \int_incr:N \l__block_flattened_level_int + \int_incr:N \l__tag_block_flattened_level_int } } \tl_if_empty:NF \l__block_inner_level_counter_tl @@ -431,10 +208,15 @@ { \@toodeep } { \int_gincr:N \g_block_nesting_depth_int - \use:c { @list \int_to_roman:n { \g_block_nesting_depth_int } } + \use:c { @list \int_to_roman:n + { \g_block_nesting_depth_int } } } } - \tag_if_active:T { \use:c { __block_recipe_ \l__block_tagging_recipe_tl : } } + \tag_if_active:T + { \use:c { __block_recipe_ \l__block_tagging_recipe_tl : } } + \tl_clear:N \@itemlabel + \tl_clear:N \@listctr + \legacy_if_set_false:n { @nmbrlist } \l__block_setup_code_tl \__block_debug_typeout:n{use~ instance:~ \l__block_block_instance_tl - \int_use:N \g_block_nesting_depth_int } @@ -444,7 +226,8 @@ {#1} \tl_if_empty:NF \l__block_para_instance_tl { - \__block_debug_typeout:n{use~ para~ instance:~ \l__block_para_instance_tl } + \__block_debug_typeout:n{ use~ para~ instance:~ + \l__block_para_instance_tl } \UseInstance{para}{ \l__block_para_instance_tl } {} } \tl_if_empty:NF \l__block_inner_instance_tl @@ -455,14 +238,17 @@ \UseInstance{ \l__block_inner_instance_type_tl } { \l__block_inner_instance_tl \tl_if_empty:NF \l__block_inner_level_counter_tl - { - \int_use:N \l__block_inner_level_counter_tl } % not clean - % use "o"? + % not clean use "o"? + { - \int_use:N \l__block_inner_level_counter_tl } } {#1} } \l__block_final_code_tl } -\int_new:N \l__block_flattened_level_int +\int_if_exist:NF \l__tag_block_flattened_level_int + { + \int_new:N \l__tag_block_flattened_level_int + } \newcounter{maxblocklevels} \setcounter{maxblocklevels}{6} \cs_new:Npn \endblockenv { @@ -474,15 +260,12 @@ \mode_leave_vertical: \legacy_if_gset_false:n { @inlabel } } - \legacy_if:nT { @newlist } - { - \@noitemerr - \legacy_if_gset_false:n { @newlist } - } + \__block_if_list:T { \legacy_if:nT { @newlist } { \@noitemerr } } \mode_if_horizontal:TF { \__block_skip_remove_last: \__block_skip_remove_last: \par } { \@inmatherr{\end{\@currenvir}} } \__kernel_displayblock_end: + \__block_if_list:T { \legacy_if_gset_false:n { @newlist } } \legacy_if:nF { @noparlist } { \__block_skip_set_to_last:N \l_tmpa_skip @@ -496,14 +279,16 @@ } \socket_use:n {tagsupport/block-endpe} } +\cs_new:Npn \__block_if_list:T + { \tl_if_eq:NnT \l__block_block_instance_tl {list} } \cs_new:Npn \__kernel_displayblock_end: { \__block_debug_typeout:n{\detokenize{__kernel_displayblock_end:}} } \socket_new:nn {tagsupport/block-endpe}{0} \socket_new_plug:nnn{tagsupport/block-endpe}{on} - { \legacy_if_gset_true:n { @endpe } } + { \@endpetrue } \socket_new_plug:nnn{tagsupport/block-endpe}{off} - { \legacy_if_gset_false:n { @endpe } } + { \@endpefalse } \socket_assign_plug:nn{tagsupport/block-endpe}{on} \DeclareTemplateCode{para}{std}{1} { @@ -529,16 +314,18 @@ par-skip = \parsep , end-skip = \l__block_botsep_skip , end-par-skip = \l__block_parbotsep_skip , + item-skip = \itemsep , beginpenalty = \@beginparpenalty , endpenalty = \@endparpenalty , rightmargin = \rightmargin , leftmargin = \leftmargin , - parindent = \listparindent , + parindent = \l__block_parindent_dim , } { \tl_if_empty:nF {#1} { \SetTemplateKeys{block}{display}{#1} } \tl_if_blank:oF \l__block_heading_tl - { \mode_leave_vertical: \textbf{\l__block_heading_tl} } % TODO customize + { \mode_leave_vertical: + \textbf{\l__block_heading_tl} } % TODO customize \legacy_if:nT { @noskipsec } { \mode_leave_vertical: } \skip_set:Nn \l__block_topsepadd_skip { \topsep } \mode_if_vertical:TF @@ -581,7 +368,7 @@ } \skip_set_eq:NN \@outerparskip \parskip \skip_set_eq:NN \parskip \parsep - \dim_set_eq:NN \parindent \listparindent + \dim_set_eq:NN \parindent \l__block_parindent_dim \dim_add:Nn \linewidth { - \rightmargin - \leftmargin } \dim_add:Nn \@totalleftmargin { \leftmargin } \tex_parshape:D 1 ~ \@totalleftmargin \linewidth @@ -599,7 +386,8 @@ { \__block_skip_set_to_last:N \l__block_tmpa_skip \skip_vertical:n { - \l__block_tmpa_skip } - \skip_vertical:n { \l__block_tmpa_skip + \@outerparskip - \parskip } + \skip_vertical:n { \l__block_tmpa_skip + + \@outerparskip - \parskip } } } { @@ -619,16 +407,20 @@ ,listparindent .skip_set:N = \listparindent } \cs_new:Npn \__kernel_displayblock_begin: { - \__block_debug_typeout:n{\detokenize{__kernel_displayblock_begin:}} + \__block_debug_typeout:n + {\detokenize{__kernel_displayblock_begin:}} } \cs_new:Npn \__kernel_displayblock_beginpar_hmode:w { - \__block_debug_typeout:n{\detokenize{__kernel_displayblock_beginpar_hmode:w}} + \__block_debug_typeout:n + {\detokenize{__kernel_displayblock_beginpar_hmode:w}} } \cs_new:Npn \__kernel_displayblock_beginpar_vmode: { - \__block_debug_typeout:n{\detokenize{__kernel_displayblock_beginpar_vmode:}} + \__block_debug_typeout:n + {\detokenize{__kernel_displayblock_beginpar_vmode:}} } \tl_new:N \@itemlabel % should have a top-level definition \tl_new:N \@listctr % should have a top-level definition +\cs_new_eq:NN \__block_evaluate_saved_user_keys:nn \use_none:nn \DeclareTemplateCode{list}{std}{1} { counter = \l__block_counter_tl, @@ -645,18 +437,23 @@ } { \__block_debug_typeout:n{template:list:std} - \tl_if_empty:nF {#1} { \SetTemplateKeys{list}{std}{#1} } + \tl_if_empty:nTF {#1} + { \cs_set_eq:NN \__block_evaluate_saved_user_keys:nn \use_none:nn } + { + \SetTemplateKeys{list}{std}{#1} + \cs_set:Npe \__block_evaluate_saved_user_keys:nn ##1##2 + { \SetTemplateKeys{##1}{##2}{ \exp_not:n{#1} } } + } \tl_if_empty:NTF \l__block_counter_tl { - \tl_if_blank:oF \@listctr - { + \legacy_if:nT { @nmbrlist } + { \bool_if:NF \l__block_resume_bool { \int_gset:cn{ c@ \@listctr } { \l__block_counter_start_int - 1 } } - } - { \@nmbrlistfalse } + } } { \@nmbrlisttrue @@ -672,6 +469,7 @@ \tl_set_eq:NN \@itemlabel \l__block_item_label_tl } \legacy_if_gset_true:n { @newlist } + \cs_set_eq:NN \__block_item_everypar: \__block_item_everypar_first: \__block_debug_typeout:n{template:list:std~end} } \keys_define:nn { template/list/std } @@ -708,14 +506,18 @@ { \__block_debug_typeout:n{template:item:std} \tl_set_eq:NN \l__block_label_given_tl \c_novalue_tl + \__block_evaluate_saved_user_keys:nn {item}{std} \tl_if_empty:nF{#1}{ \SetTemplateKeys{item}{std}{#1} } \tl_if_novalue:oTF \l__block_label_given_tl { \tl_if_blank:oF \@listctr { \@kernel@refstepcounter \@listctr } - \bool_if:NTF \l__block_item_compatibility_bool % not sure that conditional - % makes sense - { \__block_make_label_box:n { \MakeLinkTarget[\@listctr]{}\@itemlabel } } % TODO ? - { \__block_make_label_box:n { \MakeLinkTarget[\@listctr]{}\__block_counter_label:n { \@listctr } } } + \bool_if:NTF \l__block_item_compatibility_bool % not sure that + % conditional + % makes sense + { \__block_make_label_box:n { \MakeLinkTarget[\@listctr]{}% + \@itemlabel } } % TODO ? + { \__block_make_label_box:n { \MakeLinkTarget[\@listctr]{}% + \__block_counter_label:n { \@listctr } } } } { \__block_debug_typeout:n{item~ with~ optional} @@ -723,7 +525,8 @@ \bool_if:nT { \l__block_label_boxed_bool - && \dim_compare_p:n { \box_wd:N \l__block_one_label_box <= \linewidth } % TODO: is \linewidth correct? + && \dim_compare_p:n + { \box_wd:N \l__block_one_label_box <= \linewidth } } { \dim_compare:nNnT @@ -752,11 +555,13 @@ { \bool_if:NT \l__block_long_label_bool { \nobreak \hfil \break } } % version of \newline inside an hbox that will be unpacked } - % \skip_set_eq:NN \parsep \l__block_item_parsep_skip TODO??? FMi - % what's that? - \dim_set_eq:NN \parindent \listparindent + % TODO??? FMi what's that? + % \skip_set_eq:NN \parsep \l__block_item_parsep_skip + \dim_compare:nNnF \listparindent = {0pt} + { \dim_set_eq:NN \parindent \listparindent } \cs_set_eq:NN \__block_item_everypar: \__block_item_everypar_std: } +\tl_new:N \l__block_item_align_tl \box_new:N \l__block_one_label_box \box_new:N \g__block_labels_box \bool_new:N \l__block_long_label_bool @@ -779,8 +584,8 @@ \cs_new_eq:NN \__kernel_list_label_begin: \prg_do_nothing: \cs_new_eq:NN \__kernel_list_label_end: \prg_do_nothing: \cs_new_eq:NN \__block_item_everypar: \prg_do_nothing: -\AddToHook{para/begin}[lists]{\__block_item_everypar:} -\DeclareHookRule{para/begin}{lists}{after}{tagpdf} +\AddToHook{para/begin}[items]{\__block_item_everypar:} +\DeclareHookRule{para/begin}{items}{after}{tagpdf} \cs_new_protected:Npn \__block_item_everypar_std: { \__block_debug_typeout:n{item~ everypar \on@line } \legacy_if_set_false:n { @minipage } @@ -804,6 +609,9 @@ \cs_set_eq:NN \__block_item_everypar: \prg_do_nothing: } } +\cs_new:Npn \__block_item_everypar_first: { + \legacy_if:nT { @newlist } { \@noitemerr } +} \cs_new_eq:NN \__kernel_list_label_after: \prg_do_nothing: \skip_new:N \l__block_tmpa_skip \skip_new:N \l__block_topsepadd_skip @@ -819,8 +627,11 @@ } { \legacy_if:nTF { @newlist } - { \__kernel_list_item_begin: } - { \__block_inter_item: } + { + \__kernel_list_item_begin: + \legacy_if_gset_false:n { @newlist } + } + { \__block_inter_item: } \tl_if_novalue:nTF {#1} % avoids reparsing label={} { \__block_item_instance:n { } } { \__block_item_instance:n {#1} } @@ -841,6 +652,270 @@ } \cs_new_eq:NN \__kernel_list_item_begin: \prg_do_nothing: \cs_new_eq:NN \__kernel_list_item_end: \prg_do_nothing: +\tag_if_active:TF { + \cs_set:Npn \__block_beginpar_vmode: { + \__block_debug_typeout:n + { @endpe = \legacy_if:nTF { @endpe }{true}{false} + \on@line } + \legacy_if:nTF { @endpe } + { + \legacy_if_gset_false:n { @endpe } + } + { + \int_compare:nNnT \l__tag_block_flattened_level_int < 2 + { + \__tag_gincr_para_main_begin_int: + \tag_struct_begin:n + { + tag=\l__tag_para_main_tag_tl, + attribute-class=\l__tag_para_main_attr_class_tl, + } + \__tag_para_main_store_struct: + } + } + } + \cs_set:Npn \__block_beginpar_hmode:N #1 + { + \tag_mc_end: + \__tag_gincr_para_end_int: + \__block_debug_typeout:n{increment~ /P \on@line } + \bool_if:NT \l__tag_para_show_bool + { \tag_mc_begin:n{artifact} + \rlap{\color_select:n{red}\tiny\ \int_use:N\g__tag_para_end_int} + \tag_mc_end: + } + \tag_struct_end: + \tagpdfparaOff \par \tagpdfparaOn + } +\cs_set:Npn \__kernel_displayblock_doendpe: { + \bool_if:NT \l__tag_para_bool + { + \legacy_if:nT { @endpe } + { + \__block_debug_typeout:n + { flattened= \bool_if:NTF + \l__tag_para_flattened_bool + {true}{false} + \on@line } + \bool_if:NF \l__tag_para_flattened_bool + { + \__block_debug_typeout:n{Structure-end~ + \l__tag_para_main_tag_tl\space + after~ displayblock \on@line } + \__tag_gincr_para_main_end_int: + \tag_struct_end: %text-unit + } + } + } +} +\RemoveFromHook{para/begin}[tagpdf] +\AddToHook{para/begin}[tagpdf]{ + \bool_if:NT \l__tag_para_bool { + \legacy_if:nF { @inlabel } + { + \__block_start_para_structure:n { \PARALABEL } + } + } +} +\cs_new_protected:Npn \__block_start_para_structure:n #1 { + \__block_debug_typeout:n + { @endpe = \legacy_if:nTF { @endpe }{true}{false} + \on@line } + \legacy_if:nF { @endpe } + { + \bool_if:NF \l__tag_para_flattened_bool + { + \__tag_gincr_para_main_begin_int: + \tag_struct_begin:n + { + tag=\l__tag_para_main_tag_tl, + attribute-class=\l__tag_para_main_attr_class_tl, + } + \__tag_para_main_store_struct: + } + } + \__tag_gincr_para_begin_int: + \__block_debug_typeout:n{increment~ P \on@line } + \tag_struct_begin:n + { + tag=\l__tag_para_tag_tl + ,attribute-class=\l__tag_para_attr_class_tl + } + \__tag_check_para_begin_show:nn {green}{#1} + \tag_mc_begin:n {} +} +\cs_new_protected:Npn \__block_start_para_structure_unconditionally:n #1 { + \bool_if:NF \l__tag_para_flattened_bool + { + \__tag_gincr_para_main_begin_int: + \tag_struct_begin:n + { + tag=\l__tag_para_main_tag_tl, + attribute-class=\l__tag_para_main_attr_class_tl, + } + \__tag_para_main_store_struct: + } + \__tag_gincr_para_begin_int: + \__block_debug_typeout:n{increment~ P \on@line } + \tag_struct_begin:n + { + tag=\l__tag_para_tag_tl + ,attribute-class=\l__tag_para_attr_class_tl + } + \__tag_check_para_begin_show:nn {green}{#1} + \tag_mc_begin:n {} +} +\RemoveFromHook{para/end}[tagpdf] +\AddToHook{para/end} + { + \bool_if:NT \l__tag_para_bool + { + \__tag_gincr_para_end_int: + \__block_debug_typeout:n{increment~ /P \on@line } + \tag_mc_end: + \__tag_check_para_end_show:nn {red}{} + \tag_struct_end: + \bool_if:NF \l__tag_para_flattened_bool + { + \__tag_gincr_para_main_end_int: + \tag_struct_end: + } + } + } +\def\PARALABEL{NP-} +\cs_set_protected:Npn \para_end: { + \scan_stop: + \mode_if_horizontal:TF { + \mode_if_inner:F { + \tex_unskip:D + \hook_use:n{para/end} + \@kernel@after@para@end + \mode_if_horizontal:TF { + \if_int_compare:w 11 = \tex_lastnodetype:D + \tex_hskip:D \c_zero_dim + \fi: + \tex_par:D + \hook_use:n{para/after} + \@kernel@after@para@after + } + { \msg_error:nnnn { hooks }{ para-mode }{end}{horizontal} } + } + } + { + \__kernel_endpe_vmode: % should do nothing if no tagging + \tex_par:D + } +} +\cs_set_eq:NN \par \para_end: +\cs_set_eq:NN \__blockpar \para_end: +\cs_set_eq:NN \endgraf \para_end: +\DeclareRobustCommand*\begin[1]{% + \UseHook{env/#1/before}% + \@ifundefined{#1}% + {\def\reserved@a{\@latex@error{Environment~#1~undefined}\@eha}}% + {\def\reserved@a{\def\@currenvir{#1}% + \edef\@currenvline{\on@line}% + \@execute@begin@hook{#1}% + \csname #1\endcsname}}% + \@ignorefalse + \begingroup + \__kernel_endpe_vmode: + \reserved@a} +\cs_new:Npn \__kernel_endpe_vmode: { + \if@endpe \ifvmode + \bool_if:NT \l__tag_para_bool +{ + \bool_if:NF \l__tag_para_flattened_bool + { + \__tag_gincr_para_main_end_int: + \tag_struct_end: + } + \@endpefalse +} + \fi \fi +} +\cs_set:Npn \__kernel_list_label_after: { + \bool_if:NT \l__tag_para_bool + { + \__block_start_para_structure_unconditionally:n { LI- } + } +} +\cs_new:Npn \__block_inner_begin: { + \tagstructbegin{tag=\l__block_tag_inner_tag_tl} +} +\cs_new:Npn \__block_inner_end: { + \__block_debug_typeout:n{block-end \on@line} + \legacy_if:nT { @endpe } + { + \__tag_gincr_para_main_end_int: + \__block_debug_typeout:n{close~ /text-unit \on@line} + \tagstructend + } + \tagstructend % end inner structure +} +\tl_new:N \l__tag_L_tag_tl +\tl_set:Nn \l__tag_L_tag_tl {L} + +\tl_new:N\l__tag_L_attr_class_tl +\tl_set:Nn \l__tag_L_attr_class_tl {list} +\tag_if_active:T +{ + \tagpdfsetup + { + role/new-attribute = {itemize} + {/O /List /ListNumbering/Unordered}, + role/new-attribute = {enumerate} + {/O /List /ListNumbering/Ordered}, + role/new-attribute = {description} + {/O /List /ListNumbering/Description}, + % default if unknown + role/new-attribute = {list}{/O /List /ListNumbering/Unordered}, + } +} +\def\LItag{LI} +\cs_set:Npn \__block_list_begin: { + \tagstructbegin + { + tag=\l__tag_L_tag_tl + ,attribute-class=\l__tag_L_attr_class_tl + } +} +\cs_set:Npn \__block_list_item_begin: { \tagstructbegin{tag=\LItag} } +\cs_set:Npn \__kernel_list_label_begin: { + \tagstructbegin{tag=Lbl} + \tagmcbegin{tag=Lbl} +} +\cs_set:Npn \__kernel_list_label_end: { + \tagmcend % end mc-Lbl or artifact + \tagstructend % end Lbl + \tagstructbegin{tag=\LBody} +} +\def\LBody{LBody} +\cs_set:Npn \__block_list_item_end: { + \legacy_if:nT { @endpe } + { + \__tag_gincr_para_main_end_int: + \tagstructend % text-unit + } + \tagstructend \tagstructend % end LBody, LI +} +\cs_set:Npn \__block_list_end: { + \legacy_if:nF { @newlist } + { + \legacy_if:nT { @endpe } + { + \__tag_gincr_para_main_end_int: + \tagstructend % text-unit + \__block_debug_typeout:n{Structure-end~ P~ at~ list-end \on@line } + } + \tagstructend\tagstructend % end LBody, LI + } + \tagstructend % end L +} +} +{ + \cs_new:Npn \__block_start_para_structure_unconditionally:n #1 {} +} \cs_new:Npn \__block_recipe_basic: { \cs_set_eq:NN \__kernel_displayblock_beginpar_hmode:w \__block_beginpar_hmode:N @@ -894,18 +969,233 @@ { \tl_set:Nn \l__tag_L_attr_class_tl {} } { \tl_set_eq:NN \l__tag_L_attr_class_tl \l__block_tag_class_tl } } - +\NewDocumentEnvironment{displayblock}{ !O{} } + { \UseInstance{blockenv}{displayblock} {#1} } + { \endblockenv } +\NewDocumentEnvironment{displayblockflattened}{ !O{} } + { \UseInstance{blockenv}{displayblockflattened} {#1} } + { \endblockenv } +\AddToHook{begindocument/before}{ + \RenewDocumentEnvironment{center} { !O{} } + { \UseInstance{blockenv}{center}{#1} } + { \endblockenv } + \RenewDocumentEnvironment{flushright} { !O{} } + { \UseInstance{blockenv}{flushright}{#1} } + { \endblockenv } + \RenewDocumentEnvironment{flushleft} { !O{} } + { \UseInstance{blockenv}{flushleft}{#1} } + { \endblockenv } +} +\AddToHook{begindocument/before}{ + \RenewDocumentEnvironment{quote}{ !O{} } + { \UseInstance{blockenv}{quote} {#1} } + { \endblockenv } + \RenewDocumentEnvironment{quotation}{ !O{} } + { \UseInstance{blockenv}{quotation} {#1} } + { \endblockenv } +} +\AddToHook{begindocument/before}{ + \RenewDocumentEnvironment{verbatim}{ !O{} } + { \UseInstance{blockenv}{verbatim} {#1} + \@setupverbinvisiblespace\frenchspacing\@vobeyspaces + \@xverbatim + } + { \endblockenv } + \RenewDocumentEnvironment{verbatim*}{ !O{} } + { \UseInstance{blockenv}{verbatim} {#1} + \@setupverbvisiblespace\frenchspacing\@vobeyspaces + \@sxverbatim + } + { \endblockenv } +} +\def\legacyverbatimsetup{% + \language\l@nohyphenation + \@tempswafalse + \def\par{% + \if@tempswa + \leavevmode \null {\@@par}\penalty\interlinepenalty + \else + \@tempswatrue + \ifhmode{\@@par}\penalty\interlinepenalty\fi + \fi}% + \let\do\@makeother \dospecials + \obeylines \verbatim@font \@noligs + \everypar \expandafter{\the\everypar \unpenalty}% + \tl_set:Nn \l__tag_para_main_tag_tl {codeline} + \tagtool{paratag=Code}% oder faster: \tl_set:Nn\l__tag_para_tag_tl{Code} +} +\newcommand\@setupverbinvisiblespace{} +\tag_if_active:T { + \bool_if:NF\g__tag_mode_lua_bool + { + \renewcommand\@setupverbinvisiblespace + {\def\@xobeysp{\nobreakspace\pdffakespace}} + } +} +\AddToHook{begindocument/before}{ + \RenewDocumentEnvironment{itemize}{!O{}} + { \UseInstance{blockenv}{itemize} {#1} } + { \endblockenv } + \RenewDocumentEnvironment{enumerate}{!O{}} + { \UseInstance{blockenv}{enumerate} {#1} } + { \endblockenv } + \RenewDocumentEnvironment{description}{!O{}} + { \UseInstance{blockenv}{description} {#1} } + { \endblockenv } +} +\AddToHook{begindocument/before}{ + \RenewDocumentEnvironment{verse}{ !O{} } + { + \let\\\@centercr + \UseInstance{blockenv}{list} + { + item-indent=-1.5em, + parindent=-1.5em, + item-skip=0pt, + rightmargin=\leftmargin, + leftmargin=\leftmargin+1.5em, + #1 + } + \item\relax + } + { \endblockenv } + } +\AddToHook{begindocument/before}{ + \RenewDocumentEnvironment{list}{O{} m m } + { + \tl_set:Nn \l__block_legacy_env_params_tl + { + \tl_set:Nn \@itemlabel {#2} + #3 + } + \UseInstance{blockenv}{list} {#1} + } + { \endblockenv } +} +\cs_new:Npn \legacylistsetupcode { + \dim_zero:N \listparindent + \dim_zero:N \rightmargin + \dim_zero:N \itemindent + \let\makelabel\@mklab % TODO: customize + \l__block_legacy_env_params_tl + \legacy_if:nTF { @nmbrlist } + { \tl_set:Nn \l__tag_L_attr_class_tl {enumerate} } % numbered list + { \tl_if_empty:NTF \@itemlabel + { \tl_set:Nn \l__tag_L_attr_class_tl {list} } % no label + { \tl_set:Nn \l__tag_L_attr_class_tl {itemize} } % unnumbered, + % unordered + } +} +\tl_new:N\l__block_legacy_env_params_tl +\AddToHook{begindocument/before}{ + \RenewDocumentEnvironment{trivlist}{ !O{} } + { \list[#1]{} + { + \dim_zero:N \leftmargin + \dim_zero:N \labelwidth + \cs_set_eq:NN \makelabel \use:n + } + } + { \endblockenv } +} +\RenewDocumentCommand \newtheorem { m O{#1} m o } +{ + \expandafter\@ifdefinable\csname #1\endcsname + { + \str_if_eq:nnTF{#1}{#2} + { + \@definecounter {#2} + \IfNoValueTF {#4} + { % @ynthm + \tl_gset:ce { the #2 } + { + \@thmcounter{#2} + } + } + { % @xnthm + \@newctr{#1}[#4] + \tl_gset:ce { the #2 } + { + \expandafter\noexpand\csname the#4\endcsname + \@thmcountersep + \@thmcounter{#2} + } + } + } + { % @othm + \@ifundefined{c@#2} + { \@nocounterr{#2} } + { + \tl_gset:cn { the #1 } + { \UseName { the #2 } } + } + } + \global\@namedef{#1} { \@thm{#2}{#3} } + \global\@namedef{end#1}{ \@endtheorem } + } +} +\tl_new:N \l__block_thm_current_counter_tl +\def\@thm#1#2{% + \@kernel@refstepcounter{#1} + \tl_set:Nn \l__block_thm_current_counter_tl{#1} + \@ifnextchar[{\@ythm{#1}{#2}}{\@xthm{#1}{#2}}} +\def\hyper@nopatch@thm{} +\def\@begintheorem#1#2{ + \UseInstance{blockenv}{theorem}{} + \tagpdfparaOff + \noindent + \MakeLinkTarget{\l__block_thm_current_counter_tl} + \tag_struct_begin:n{tag=Caption} + \group_begin: + \bfseries + \tag_mc_begin:n {} + #1\ + \tag_mc_end: + \tag_struct_begin:n{tag=Lbl} + \tag_mc_begin:n {} + #2 + \tag_mc_end: + \tag_struct_end: + \group_end: + \tag_struct_end: + \tagpdfparaOn + \__block_start_para_structure_unconditionally:n { \PARALABEL } + \itshape + \hskip\labelsep + \ignorespaces +} +\def\@opargbegintheorem#1#2#3{ + \UseInstance{blockenv}{theorem}{} + \tagpdfparaOff + \noindent + \MakeLinkTarget{\l__block_thm_current_counter_tl} + \tag_struct_begin:n{tag=Caption} + \group_begin: + \bfseries + \tag_mc_begin:n {} + #1\ + \tag_mc_end: + \tag_struct_begin:n{tag=Lbl} + \tag_mc_begin:n {} + #2 + \tag_mc_end: + \tag_struct_end: + \tag_mc_begin:n {} + \ (#3) + \tag_mc_end: + \group_end: + \tag_struct_end: + \tagpdfparaOn + \__block_start_para_structure_unconditionally:n { \PARALABEL } + \itshape + \hskip\labelsep + \ignorespaces +} +\def\@endtheorem{\endblockenv} \DeclareInstance{blockenv}{displayblock}{display} { env-name = displayblock, - tag-name = , - tag-class = , - tagging-recipe = standard, - inner-level-counter = , level-increase = false, - setup-code = , - block-instance = displayblock , - inner-instance = , } \DeclareInstance{blockenv}{displayblockflattened}{display} { @@ -962,7 +1252,7 @@ para-instance = raggedleft , inner-instance = , } - % + \DeclareInstance{blockenv}{quotation}{display} { env-name = quotation, @@ -987,7 +1277,6 @@ block-instance = quoteblock , inner-instance = , } - \DeclareInstance{blockenv}{theorem}{display} { env-name = theorem-like, @@ -997,7 +1286,7 @@ inner-level-counter = , level-increase = false, setup-code = , - block-instance = displayblock , + block-instance = theoremblock , } \DeclareInstance{blockenv}{verbatim}{display} { @@ -1011,6 +1300,7 @@ block-instance = verbatimblock , inner-instance = , final-code = \legacyverbatimsetup , + para-instance = justify } \DeclareInstance{blockenv}{itemize}{display} { @@ -1067,7 +1357,6 @@ \DeclareInstance{block}{displayblock-0}{display} { leftmargin = 0pt , - parindent = 0pt , } \DeclareInstanceCopy{block}{displayblock-1}{displayblock-0} \DeclareInstanceCopy{block}{displayblock-2}{displayblock-0} @@ -1078,7 +1367,6 @@ \DeclareInstance{block}{verbatimblock-0}{display} { leftmargin = 0pt , - parindent = 0pt , par-skip = 0pt , } \DeclareInstanceCopy{block}{verbatimblock-1}{verbatimblock-0} @@ -1101,6 +1389,12 @@ \DeclareInstanceCopy{block}{quotationblock-4}{quotationblock-1} \DeclareInstanceCopy{block}{quotationblock-5}{quotationblock-1} \DeclareInstanceCopy{block}{quotationblock-6}{quotationblock-1} +\DeclareInstance{block}{theoremblock-0}{display} + { + leftmargin = 0pt , + parindent = \parindent , + par-skip = \parskip , + } \DeclareInstance{block}{list-1}{display}{ } \DeclareInstance{block}{list-2}{display}{} @@ -1126,9 +1420,7 @@ } \DeclareInstance{list}{description}{std} { item-instance = description } \DeclareInstance{item}{basic}{std} - { - label-align = right , - } + { label-align = right } \DeclareInstance{item}{description}{std} { label-format = \normalfont\bfseries #1 , @@ -1146,309 +1438,42 @@ } \DeclareInstance{para}{center}{std} { + para-class = center , indent-width = 0pt , - start-skip = 0pt , left-skip = \@flushglue , right-skip = \@flushglue , end-skip = \z@skip , final-hyphen-demerits = 0 , cr-cmd = \@centercr , - para-class = center , } \DeclareInstance{para}{raggedright}{std} { + para-class = raggedright , indent-width = 0pt , - start-skip = 0pt , left-skip = \z@skip , right-skip = \@flushglue , end-skip = \z@skip , final-hyphen-demerits = 0 , cr-cmd = \@centercr , - para-class = raggedright , } \DeclareInstance{para}{raggedleft}{std} { + para-class = raggedleft , indent-width = 0pt , - start-skip = 0pt , left-skip = \@flushglue , right-skip = \z@skip , end-skip = \z@skip , final-hyphen-demerits = 0 , cr-cmd = \@centercr , - para-class = raggedleft , } \DeclareInstance{para}{justify}{std} { - start-skip = 0pt , - left-skip = \z@skip , - right-skip = \z@skip , - end-skip = \@flushglue , - final-hyphen-demerits = 5000 , - cr-cmd = \@normalcr , - para-class = justify , } \DeclareRobustCommand\centering {\UseInstance{para}{center}{}} \DeclareRobustCommand\raggedleft {\UseInstance{para}{raggedleft}{}} \DeclareRobustCommand\raggedright{\UseInstance{para}{raggedright}{}} \DeclareRobustCommand\justifying {\UseInstance{para}{justify}{}} - \justifying -\tag_if_active:TF { - \cs_set:Npn \__block_beginpar_vmode: { - \__block_debug_typeout:n - { @endpe = \legacy_if:nTF { @endpe }{true}{false} - \on@line } - \legacy_if:nTF { @endpe } - { - \legacy_if_gset_false:n { @endpe } - } - { - \int_compare:nNnT \l__block_flattened_level_int < 2 - { - \__tag_gincr_para_main_begin_int: - \tag_struct_begin:n - { - tag=\l__tag_para_main_tag_tl, - attribute-class=\l__tag_para_main_attr_class_tl, - } - \__tag_para_main_store_struct: - } - } - } - \cs_set:Npn \__block_beginpar_hmode:N #1 - { - \tag_mc_end: - \__tag_gincr_para_end_int: - \__block_debug_typeout:n{increment~ /P \on@line } - \bool_if:NT \l__tag_para_show_bool - { \tag_mc_begin:n{artifact} - \rlap{\color_select:n{red}\tiny\ \int_use:N\g__tag_para_end_int} - \tag_mc_end: - } - \tag_struct_end: - \tagpdfparaOff \par \tagpdfparaOn - } -\cs_set:Npn \__kernel_displayblock_doendpe: { - \bool_if:NT \l__tag_para_bool - { - \legacy_if:nT { @endpe } - { - \__block_debug_typeout:n - { flattened= \bool_if:NTF - \l__tag_para_flattened_bool {true}{false} - \on@line } - \bool_if:NF \l__tag_para_flattened_bool - { - \__block_debug_typeout:n{Structure-end~ - \l__tag_para_main_tag_tl\space after~ displayblock \on@line } - \__tag_gincr_para_main_end_int: - \tag_struct_end: %text-unit - } - } - } -} -\RemoveFromHook{para/begin}[tagpdf] -\AddToHook{para/begin}[tagpdf]{ - \bool_if:NT \l__tag_para_bool { - \legacy_if:nF { @inlabel } - { - \__block_start_para_structure:n { \PARALABEL } - } - } -} -\cs_new_protected:Npn \__block_start_para_structure:n #1 { - \__block_debug_typeout:n - { @endpe = \legacy_if:nTF { @endpe }{true}{false} - \on@line } - \legacy_if:nF { @endpe } - { - \bool_if:NF \l__tag_para_flattened_bool - { - \__tag_gincr_para_main_begin_int: - \tag_struct_begin:n - { - tag=\l__tag_para_main_tag_tl, - attribute-class=\l__tag_para_main_attr_class_tl, - } - \__tag_para_main_store_struct: - } - } - \__tag_gincr_para_begin_int: - \__block_debug_typeout:n{increment~ P \on@line } - \tag_struct_begin:n - { - tag=\l__tag_para_tag_tl - ,attribute-class=\l__tag_para_attr_class_tl - } - \__tag_check_para_begin_show:nn {green}{#1} - \tag_mc_begin:n {} -} -\cs_new_protected:Npn \__block_start_para_structure_unconditionally:n #1 { - \bool_if:NF \l__tag_para_flattened_bool - { - \__tag_gincr_para_main_begin_int: - \tag_struct_begin:n - { - tag=\l__tag_para_main_tag_tl, - attribute-class=\l__tag_para_main_attr_class_tl, - } - \__tag_para_main_store_struct: - } - \__tag_gincr_para_begin_int: - \__block_debug_typeout:n{increment~ P \on@line } - \tag_struct_begin:n - { - tag=\l__tag_para_tag_tl - ,attribute-class=\l__tag_para_attr_class_tl - } - \__tag_check_para_begin_show:nn {green}{#1} - \tag_mc_begin:n {} -} -\RemoveFromHook{para/end}[tagpdf] -\AddToHook{para/end} - { - \bool_if:NT \l__tag_para_bool - { - \__tag_gincr_para_end_int: - \__block_debug_typeout:n{increment~ /P \on@line } - \tag_mc_end: - \__tag_check_para_end_show:nn {red}{} - \tag_struct_end: - \bool_if:NF \l__tag_para_flattened_bool - { - \__tag_gincr_para_main_end_int: - \tag_struct_end: - } - } - } -\def\PARALABEL{NP-} -\cs_set_protected:Npn \para_end: { - \scan_stop: - \mode_if_horizontal:TF { - \mode_if_inner:F { - \tex_unskip:D - \hook_use:n{para/end} - \@kernel@after@para@end - \mode_if_horizontal:TF { - \if_int_compare:w 11 = \tex_lastnodetype:D - \tex_hskip:D \c_zero_dim - \fi: - \tex_par:D - \hook_use:n{para/after} - \@kernel@after@para@after - } - { \msg_error:nnnn { hooks }{ para-mode }{end}{horizontal} } - } - } - { - \__kernel_endpe_vmode: % should do nothing if no tagging - \tex_par:D - } -} -\cs_set_eq:NN \par \para_end: -\cs_set_eq:NN \__blockpar \para_end: -\cs_set_eq:NN \endgraf \para_end: -\DeclareRobustCommand*\begin[1]{% - \UseHook{env/#1/before}% - \@ifundefined{#1}% - {\def\reserved@a{\@latex@error{Environment~#1~undefined}\@eha}}% - {\def\reserved@a{\def\@currenvir{#1}% - \edef\@currenvline{\on@line}% - \@execute@begin@hook{#1}% - \csname #1\endcsname}}% - \@ignorefalse - \begingroup - \__kernel_endpe_vmode: - \reserved@a} -\cs_new:Npn \__kernel_endpe_vmode: { - \if@endpe \ifvmode - \bool_if:NT \l__tag_para_bool -{ - \bool_if:NF \l__tag_para_flattened_bool - { - \__tag_gincr_para_main_end_int: - \tag_struct_end: - } - \@endpefalse -} - \fi \fi -} -\cs_set:Npn \__kernel_list_label_after: { - \bool_if:NT \l__tag_para_bool - { - \__block_start_para_structure_unconditionally:n { LI- } - } -} -\cs_new:Npn \__block_inner_begin: { - \tagstructbegin{tag=\l__block_tag_inner_tag_tl} -} -\cs_new:Npn \__block_inner_end: { - \__block_debug_typeout:n{block-end \on@line} - \legacy_if:nT { @endpe } - { - \__tag_gincr_para_main_end_int: - \__block_debug_typeout:n{close~ /text-unit \on@line} - \tagstructend - } - \tagstructend % end inner structure -} -\tl_new:N \l__tag_L_tag_tl -\tl_set:Nn \l__tag_L_tag_tl {L} - -\tl_new:N\l__tag_L_attr_class_tl -\tl_set:Nn \l__tag_L_attr_class_tl {list} -\tag_if_active:T -{ - \tagpdfsetup - { - role/new-attribute = {itemize}{/O /List /ListNumbering/Unordered}, - role/new-attribute = {enumerate}{/O /List /ListNumbering/Ordered}, - role/new-attribute = {description}{/O /List /ListNumbering/Description}, - % default if unknown - role/new-attribute = {list}{/O /List /ListNumbering/Unordered}, - } -} -\def\LItag{LI} -\cs_set:Npn \__block_list_begin: { - \tagstructbegin - { - tag=\l__tag_L_tag_tl - ,attribute-class=\l__tag_L_attr_class_tl - } -} -\cs_set:Npn \__block_list_item_begin: { \tagstructbegin{tag=\LItag} } -\cs_set:Npn \__kernel_list_label_begin: { - \tagstructbegin{tag=Lbl} - \tagmcbegin{tag=Lbl} -} -\cs_set:Npn \__kernel_list_label_end: { - \tagmcend % end mc-Lbl or artifact - \tagstructend % end Lbl - \tagstructbegin{tag=\LBody} -} -\def\LBody{LBody} -\cs_set:Npn \__block_list_item_end: { - \legacy_if:nT { @endpe } - { - \__tag_gincr_para_main_end_int: - \tagstructend % text-unit - } - \tagstructend \tagstructend % end LBody, LI -} -\cs_set:Npn \__block_list_end: { - \legacy_if:nT { @endpe } - { - \__tag_gincr_para_main_end_int: - \tagstructend % text-unit - \__block_debug_typeout:n{Structure-end~ P~ at~ list-end \on@line } - } - \tagstructend\tagstructend % end LBody, LI - \tagstructend % end L -} -} -{ - \cs_new:Npn \__block_start_para_structure_unconditionally:n #1 {} -} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \endinput diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-firstaid.sty b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-firstaid.sty index 552dfee1832..465eaf84795 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-firstaid.sty +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-firstaid.sty @@ -33,9 +33,8 @@ %% %% %% File: latex-lab-firstaid.dtx (C) Copyright 2023-2024 LaTeX Project -\def\ltlabfirstaiddate{2024-05-25} -\def\ltlabfirstaidversion{0.85d} - +\def\ltlabfirstaiddate{2024-11-23} +\def\ltlabfirstaidversion{0.85i} \ProvidesPackage {latex-lab-testphase-firstaid} [% \ltlabfirstaiddate\space v\ltlabfirstaiddate\space Temporary patches to external packages needed for the tagging project] @@ -51,12 +50,117 @@ } } \exp_args:Ncx\str_if_eq:onT{ver@#1.#2}{#3} } -\ExplSyntaxOff \AddToHook{class/amsart/after} {\def\@author{\authors}} \AddToHook{class/amsbook/after} {\def\@author{\authors}} +\AddToHook{class/amsproc/after} + {\def\@author{\authors}} +\AddToHook{class/amsart/after}[latex-lab-testphase-firstaid/amsthm] + {\tag_if_active:T{\__tag_firstaid_amsthm:}} +\AddToHook{class/amsbook/after}[latex-lab-testphase-firstaid/amsthm] + {\tag_if_active:T{\__tag_firstaid_amsthm:}} +\AddToHook{class/amsproc/after}[latex-lab-testphase-firstaid/amsthm] + {\tag_if_active:T{\__tag_firstaid_amsthm:}} +\AddToHook{package/amsthm/after}[latex-lab-testphase-firstaid/amsthm] + {\tag_if_active:T{\__tag_firstaid_amsthm:}} +\cs_new_protected:Npn \__tag_firstaid_amsthm: + { + \def\@endtheorem{\endblockenv} + \RenewDocumentCommand\@thm{mmmO{}}{% + \ifhmode\unskip\unskip\par\fi + \normalfont + \let\thmheadnl\relax + \let\thm@swap\@gobble + \thm@notefont{\fontseries\mddefault\upshape}% + \thm@headpunct{.}% add period after heading + \thm@headsep 5\p@ plus\p@ minus\p@\relax + \thm@space@setup + ##1% style overrides + \@topsep \thm@preskip % used by thm head + \@topsepadd \thm@postskip % used by \@endparenv + \tl_set:Nn \l__block_thm_current_counter_tl{##2} + \tl_if_empty:nTF{##2} + { + \@begintheorem{##3}{}[##4] + } + { + \@kernel@refstepcounter{##2} + \@begintheorem{##3}{\csname the##2\endcsname}[##4] + } + } + \def\@begintheorem##1##2[##3]{% + \UseInstance{blockenv}{theorem}{beginsep=\thm@preskip} + \skip_set:Nn\l__block_topsepadd_skip { \thm@postskip } + \tagpdfparaOff + \group_begin: + \normalfont + \the\thm@headfont \thm@indent + \tl_if_empty:NTF \l__block_thm_current_counter_tl + {\MakeLinkTarget[theorem]{}} + {\MakeLinkTarget{\l__block_thm_current_counter_tl}} + \@ifempty{##1} + {\let\thmname\@gobble} + {\def\thmname####1{\tag_mc_begin:n {}####1\tag_mc_end:}}% + \@ifempty{##2} + {\let\thmnumber\@gobble} + {\def\thmnumber####1 + {\tag_struct_begin:n{tag=Lbl}\tag_mc_begin:n {} + ####1 + \tag_mc_end:\tag_struct_end:}}% + \@ifempty{##3} + {\let\thmnote\@gobble} + {\def\thmnote####1{\tag_mc_begin:n{}####1\tag_mc_end:}}% + \tag_struct_begin:n{tag=Caption} + \thm@swap\swappedhead\thmhead{##1}{##2}{##3}% + \tag_mc_begin:n{}\the\thm@headpunct\tag_mc_end: + \tag_struct_end: + \thmheadnl % possibly a newline. + \hskip\thm@headsep + \group_end: + \tagpdfparaOn + \UseTaggingSocket{para/begin} + \ignorespaces} + \def\thmhead@plain##1##2##3{% + \thmname{##1} + \thmnumber{ + \@ifnotempty{##1}{~}\@upn{##2} + }% + \thmnote{\pdffakespace\space{\the\thm@notefont(##3)}} + } + \let\thmhead\thmhead@plain + \def\swappedhead##1##2##3{% + \thmnumber{##2} + \thmname{\@ifnotempty{##2}{\nobreakspace}##1} + \thmnote{\pdffakespace\space{\the\thm@notefont(##3)}} + } + \let\swappedhead@plain=\swappedhead + \renewcommand{\openbox}{\leavevmode + \hbox to.77778em{\pdf_bdc:nn{Span}{/ActualText<FEFF220E>}% + \pdffakespace\hfil\vrule + \vbox to.675em{\hrule width.6em\vfil\hrule}% + \vrule\hfil\pdf_emc:}} + \renewenvironment{proof}[1][\proofname]{\par + \pushQED{\qed}% + \UseInstance{blockenv}{theorem}{beginsep=6\p@\@plus6\p@} + \normalfont + \tagpdfparaOff + \AddToHookNext{para/begin} + {\tag_struct_begin:n{tag=Caption} + \tag_mc_begin:n{}% + \textit{##1\@addpunct{.}}% + \tag_mc_end: + \tag_struct_end: + \tagpdfparaOn + \UseTaggingSocket{para/begin} + \pdffakespace\hspace{\labelsep}} + \ignorespaces + }{% + \popQED\endblockenv\par + } + } +\ExplSyntaxOff \AddToHook{package/verse/after}[latex-lab-firstaid]{% \FirstAidNeededT{verse}{sty}{2014/05/10 v2.4b verse typesetting}% {% @@ -85,41 +189,6 @@ }% }% } -\AddToHook{file/blindtext.sty/after}[latex-lab-firstaid]{% - \FirstAidNeededT{blindtext}{sty}{\blindfiledate\space\blindfileversion\space% - blindtext-Package}% - {% - \renewcommand{\blind@items}{% - \setcounter{blind@listcount}{1}% - \loop - \ifblind@optional - \ifblind@long - \item[\blindtext@countitem] \blindtext@text - \else - \item[\blindtext@count] \blindtext@item - \fi - \else % \blind@optionalfalse - \ifblind@long - \item \blindtext@text - \else - \item \blindtext@countitem - \fi - \fi % \ifblind@optional - {% - \loop - \ifnum\value{blindlistlevel}>\value{blindlist@level}% - \stepcounter{blind@levelcount}% - \blind@list[\value{blindlist}]\relax - \addtocounter{blind@levelcount}{-1}% - \setcounter{blind@listcount}{1}% - \repeat - \expandafter}\if@endpe\@doendpe\fi % <----------changed - \ifnum\value{blind@listcount}<\value{blindlist}% - \stepcounter{blind@listcount}% - \repeat - } - }% - } \AddToHook{package/cleveref/after} { \let\@makefntext\cref@old@makefntext @@ -128,11 +197,6 @@ \protected@edef\cref@currentlabel{% [footnote][\arabic{footnote}][\cref@result]% \p@footnote\@thefnmark}} - \RenewDocumentCommand\refstepcounter{om}{% - \IfNoValueTF{#1}% - {\refstepcounter@noarg{#2}}% - {\refstepcounter@optarg[#1]{#2}}% - }% } \ExplSyntaxOn \AddToHook{package/booktabs/after} @@ -159,6 +223,102 @@ \cr} } \ExplSyntaxOff + +\ExplSyntaxOn +\AddToHook{package/fancyvrb/after} +{ + \def\FV@LeaveVMode{% + \if@noskipsec + \leavevmode + \else + \if@FV@ResetMargins\if@inlabel\leavevmode\fi\fi + \fi + \ifvmode + \@noparlisttrue + \__tag_gincr_para_main_begin_int: + \tag_struct_begin:n{tag=\l__tag_para_main_tag_tl} + \else + \bool_set_true:N\l__tag_para_flattened_bool + \@noparlistfalse + \unskip\par + \fi + } + \def\FV@List#1{% + \begingroup + \FV@UseKeyValues + \FV@LeaveVMode + \if@inlabel\else\setbox\@labels=\box\voidb@x\fi + \FV@ListNesting{#1}% + \FV@ListParameterHook + \FV@ListVSpace + \FV@SetLineWidth + \FV@InterLinePenalty + \let\FV@ProcessLine\FV@ListProcessLine@i + \FV@CatCodes + \FV@FormattingPrep + \FV@ObeyTabsInit + \cs_if_exist:NT \FV@BeginListFrame + { + \tag_mc_begin:n{artifact} + \FV@BeginListFrame + \tag_mc_end: + } + \tag_struct_begin:n{tag=verbatim} + } + \def\FV@EndList{% + \FV@ListProcessLastLine + \tag_struct_end: + \cs_if_exist:NT \FV@EndListFrame + { + \tag_mc_begin:n{artifact} + \FV@EndListFrame + \tag_mc_end: + } + \@endparenv + \endgroup + \@endpetrue + } + \def\FV@ListProcessLine#1{% + \hbox to \hsize{% + \kern\leftmargin + \hbox to \linewidth{% + \cs_if_exist:NT \FV@LeftListNumber + { + \tag_struct_begin:n{tag=Lbl} + \tag_mc_begin:n{} + \FV@LeftListNumber + \tag_mc_end: + \tag_struct_end: + } + \cs_if_exist:NT \FV@LeftListFrame + { + \tag_mc_begin:n{artifact} + \FV@LeftListFrame + \tag_mc_end: + } + \tag_struct_begin:n{tag=codeline} + \tag_mc_begin:n{}% + \FancyVerbFormatLine{#1}% + \tag_mc_end: + \tag_struct_end:\hss + \cs_if_exist:NT \FV@RightListFrame + { + \tag_mc_begin:n{artifact} + \FV@RightListFrame + \tag_mc_end: + } + \cs_if_exist:NT \FV@RightListNumber + { + \tag_struct_begin:n{tag=Lbl} + \tag_mc_begin:n{} + \FV@RightListNumber + \tag_mc_begin:n{} + \tag_struct_end: + } + } + \hss}} + } +\ExplSyntaxOff \endinput %% %% End of file `latex-lab-testphase-firstaid.sty'. diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-float.sty b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-float.sty index a944c944b20..71d5e771574 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-float.sty +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-float.sty @@ -33,8 +33,8 @@ %% %% %% File: latex-lab-float.dtx (C) Copyright 2023 LaTeX Project -\def\ltlabfloatdate{2024-03-23} -\def\ltlabfloatversion{0.81e} +\def\ltlabfloatdate{2024-11-21} +\def\ltlabfloatversion{0.81g} \ProvidesExplPackage {latex-lab-testphase-float} {\ltlabfloatdate} {\ltlabfloatversion} {Code related to the tagging of floats} \prop_new:N \g__tag_float_sect_prop @@ -42,8 +42,14 @@ \seq_gput_right:Nn \g__tag_float_types_seq {figure} \seq_gput_right:Nn \g__tag_float_types_seq {table} \tl_new:N\@current@float@struct +\int_new:N\g__tag_float_int \bool_new:N \g__tag_float_sect_bool \bool_gset_true:N \g__tag_float_sect_bool +\cs_new_protected:Npn \__tag_float_init: + { + \int_gincr:N \g__tag_float_int + \tl_set:Ne \@current@float@struct { \int_use:N \g__tag_float_int} + } \cs_new_protected:Npn\__tag_float_init_collect: { \bool_if:NT\g__tag_float_sect_bool @@ -91,12 +97,39 @@ { split-float .code:n = { - \__tag_float_end: - \__tag_float_begin: - \MakeLinkTarget*{floatstructure.\int_use:N\c@g__tag_struct_abs_int} + \UseTaggingSocket{float/end} + \__tag_float_init: + \UseTaggingSocket{float/begin} + \MakeLinkTarget*{floatstructure.\@current@float@struct} } } - +\str_if_exist:cF { l__socket_tagsupport/float/begin_plug_str } + { + \NewSocket{tagsupport/float/hmode/begin}{0} + \NewSocket{tagsupport/float/hmode/end}{0} + \NewSocket{tagsupport/float/begin}{0} + \NewSocket{tagsupport/float/end}{0} + } +\NewSocketPlug {tagsupport/float/hmode/begin}{default} + { + \__tag_float_stop_par: + } +\AssignSocketPlug{tagsupport/float/hmode/begin}{default} +\NewSocketPlug{tagsupport/float/hmode/end}{default} + { + \__tag_float_start_par: + } +\AssignSocketPlug{tagsupport/float/hmode/end}{default} +\NewSocketPlug{tagsupport/float/begin}{default} + { + \__tag_float_begin: + } +\AssignSocketPlug{tagsupport/float/begin}{default} +\NewSocketPlug{tagsupport/float/end}{default} + { + \__tag_float_end: + } +\AssignSocketPlug{tagsupport/float/end}{default} \cs_new_protected:Npn \__tag_float_stop_par: { \tag_mc_end: @@ -113,7 +146,6 @@ } \tag_mc_begin:n{tag=P} } - \cs_new_protected:Npn \__tag_float_begin: {% \bool_if:NTF\g__tag_float_sect_bool @@ -147,7 +179,7 @@ \fi \ifhmode \@bsphack - \@nameuse{__tag_float_stop_par:}% <---end P + \UseTaggingSocket{float/hmode/begin}% \@floatpenalty -\@Mii \else \@floatpenalty-\@Miii @@ -190,7 +222,8 @@ }% \@fltovf \fi - \@nameuse{__tag_float_begin:}% + \csname __tag_float_init:\endcsname + \UseTaggingSocket{float/begin}% \global \setbox\@currbox \color@vbox \normalcolor @@ -198,11 +231,11 @@ \hsize\columnwidth \@parboxrestore \@floatboxreset - \MakeLinkTarget*{floatstructure.\number\value{g__tag_struct_abs_int}}% + \MakeLinkTarget*{\@captype.struct.\@current@float@struct}% }% \def\end@float{% \@endfloatbox - \@nameuse{__tag_float_end:}% + \UseTaggingSocket{float/end}% \ifnum\@floatpenalty <\z@ \@largefloatcheck \@cons\@currlist\@currbox @@ -214,14 +247,14 @@ \penalty\@floatpenalty \else \vadjust{\penalty -\@Miv \vbox{}\penalty\@floatpenalty}\@Esphack - \@nameuse{__tag_float_start_par:}% restart P safe here?? + \UseTaggingSocket{float/hmode/end}% \fi \fi } \def\end@dblfloat{% \if@twocolumn \@endfloatbox - \@nameuse{__tag_float_end:}% + \UseTaggingSocket{float/end}% \ifnum\@floatpenalty <\z@ \@largefloatcheck \global\dp\@currbox1sp % @@ -234,7 +267,7 @@ \penalty\@floatpenalty \else \vadjust{\penalty -\@Miv \vbox{}\penalty\@floatpenalty}\@Esphack - \@nameuse{__tag_float_start_par:}% restart P safe here?? + \UseTaggingSocket{float/hmode/end}% \fi \fi \else @@ -243,7 +276,55 @@ }% \ExplSyntaxOn \def\hyper@nopatch@caption{} -\let\@kernel@refstepcounter\refstepcounter %as long it is not in the kernel +\str_if_exist:cF { l__socket_tagsupport/caption/begin_plug_str } + { + \NewSocket{tagsupport/caption/begin}{1} + \NewSocket{tagsupport/caption/end}{0} + \NewSocket{tagsupport/caption/label/begin}{0} + \NewSocket{tagsupport/caption/label/end}{0} + } +\str_if_exist:cF { l__socket_tagsupport/para/begin_plug_str } + { + \NewSocket{tagsupport/para/begin}{0} + \NewSocket{tagsupport/para/end}{0} + } +\NewSocket{caption/label}{1} +\NewSocketPlug{caption/label}{kernel} + { + #1:~ + } +\AssignSocketPlug{caption/label}{kernel} +\NewSocketPlug {tagsupport/caption/begin}{default} + { + \tl_if_empty:eTF {#1} + { + \tag_struct_begin:n{tag=Caption,firstkid} + } + { + \tag_struct_begin:n{tag=Caption,parent=#1,firstkid} + } + \bool_set_true:N \l__tag_para_flattened_bool + } +\AssignSocketPlug{tagsupport/caption/begin}{default} +\NewSocketPlug {tagsupport/caption/end}{default} + { + \tag_struct_end: + } +\AssignSocketPlug{tagsupport/caption/end}{default} +\NewSocketPlug {tagsupport/caption/label/begin}{default} + { + \tagpdfparaOff + \tag_struct_begin:n{tag=Lbl} + \tag_mc_begin:n{} + } +\AssignSocketPlug{tagsupport/caption/label/begin}{default} +\NewSocketPlug {tagsupport/caption/label/end}{default} + { + \tag_mc_end: + \tag_struct_end: + \tagpdfparaOn + } +\AssignSocketPlug{tagsupport/caption/label/end}{default} \def\caption{% \ifx\@captype\@undefined \@latex@error{\noexpand\caption\c_space_tl outside~float}\@ehd @@ -255,52 +336,39 @@ } { \@kernel@refstepcounter\@captype - \xdef\@currentHref{floatstructure.\@current@float@struct}% + \xdef\@currentHref{\@captype.struct.\@current@float@struct}% } \expandafter\@firstofone \fi {\@dblarg{\@caption\@captype}}% } -\providecommand\theHg__tag_struct_abs_int{\int_use:N\c@g__tag_struct_abs_int} - \AddToHook{begindocument} { \long\def\@makecaption#1#2{% \vskip\abovecaptionskip - \tag_stop:n{caption} + \SuspendTagging{\@makecaption} \sbox\@tempboxa{#1:~#2}% - \tag_start:n{caption} - \tagtool{para=false} - \tl_if_empty:NT \@current@float@struct - { \tl_set:Ne \@current@float@struct {\tag_get:n{struct_num}} } - \tag_struct_begin:n{tag=Caption,parent=\@current@float@struct} - \tag_if_active:T - { - \seq_gpop_right:cN {g__tag_struct_kids_\@current@float@struct _seq}\l__tag_tmpa_tl - \seq_gput_left:cV {g__tag_struct_kids_\@current@float@struct _seq}\l__tag_tmpa_tl - } + \ResumeTagging{\@makecaption} + \UseTaggingSocket{caption/begin}{\@current@float@struct} \ifdim \wd\@tempboxa >\hsize - \tag_struct_begin:n{tag=Lbl} - \tag_mc_begin:n{} - #1:~ - \tag_mc_end: - \tag_struct_end: - \tag_mc_begin:n{} - #2\par - \tag_mc_end: + \UseTaggingSocket{caption/label/begin} + \UseSocket{caption/label}{#1} + \UseTaggingSocket{caption/label/end} + \UseTaggingSocket{para/begin} + #2 + \par \else \global \@minipagefalse \hb@xt@\hsize{\hfil - \tag_struct_begin:n{tag=Lbl} - \tag_mc_begin:n{} - #1:~ - \tag_mc_end: - \tag_struct_end: - \tag_mc_begin:n{} + \UseTaggingSocket{caption/label/begin} + \UseSocket{caption/label}{#1} + \UseTaggingSocket{caption/label/end} + \UseTaggingSocket{para/begin} #2 - \tag_mc_end:\hfil}% + \UseTaggingSocket{para/end} + \hfil}% \fi - \tag_struct_end: %caption + \UseTaggingSocket{caption/end} \vskip\belowcaptionskip} } diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-graphic.sty b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-graphic.sty index 2ea6e529d73..942f2deeddf 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-graphic.sty +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-graphic.sty @@ -33,8 +33,8 @@ %% %% %% File: latex-lab-graphic.dtx (C) Copyright 2022-2024 LaTeX Project -\def\ltlabgraphicdate{2024-03-13} -\def\ltlabgraphicversion{0.80d} +\def\ltlabgraphicdate{2024-09-18} +\def\ltlabgraphicversion{0.80e} \ProvidesExplPackage {latex-lab-testphase-graphic} {\ltlabgraphicdate} {\ltlabgraphicversion} {Code related to the tagging of graphics} \RequirePackage{l3opacity} @@ -222,7 +222,7 @@ \bool_set_true:N \l__tag_graphic_artifact_bool \bool_set_false:N \l__tag_graphic_BBox_bool } - {false}{\tag_stop:} + {false}{\tag_suspend:n{Gin}} } {\tl_set:Nn\l__tag_graphic_struct_tl{#1}} } @@ -257,7 +257,7 @@ \bool_set_true:N \l__tag_graphic_artifact_bool \bool_set_false:N \l__tag_graphic_BBox_bool } - {false}{\tag_stop:} + {false}{\tag_suspend:n{picture}} } {\tl_set:Nn\l__tag_graphic_struct_tl{#1}} } @@ -657,7 +657,7 @@ \@defaultunitsset\@tempdimc{#1}\unitlength \Gin@tag@struct@begin \setbox\@picbox\hb@xt@\@tempdimc\bgroup - \tag_stop: %do not tag inside the picture box + \tag_suspend:n{\@picture} %do not tag inside the picture box \@defaultunitsset\@tempdimc{#3}\unitlength \hskip -\@tempdimc \@defaultunitsset\@tempdimc{#4}\unitlength diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-marginpar.sty b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-marginpar.sty index e40ab0ca2a8..0f8001ce861 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-marginpar.sty +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-marginpar.sty @@ -34,19 +34,35 @@ %% %% File: latex-lab-marginpar.dtx %% -\def\ltlabmarginpardate{2024-02-12} -\def\ltlabmarginparversion{0.85b} +\def\ltlabmarginpardate{2024-09-18} +\def\ltlabmarginparversion{0.85d} \ProvidesExplPackage {latex-lab-testphase-marginpar} {\ltlabmarginpardate} {\ltlabmarginparversion} {Changes related to the tagging of the margin notes} \int_new:N \g__kernel_marginpar_int \socket_new:nn {tagsupport/marginpar/begin}{0} \socket_new:nn {tagsupport/marginpar/end}{0} +\cs_new_protected:Npn\__tag_get_marginpar_parent_aux:nn #1 #2 + { + \str_if_eq:eeT{\use_ii:nn #1}{Part}{\seq_put_right:Nn\l__tag_tmpa_seq {#2}} + } +\cs_new_protected:Npn \__tag_get_marginpar_parent:N #1 + { + \seq_clear:N\l__tag_tmpa_seq + \seq_map_pairwise_function:NNN + \g__tag_struct_tag_stack_seq + \g__tag_struct_stack_seq + \__tag_get_marginpar_parent_aux:nn + \seq_put_right:Nn\l__tag_tmpa_seq {2} + \seq_get_left:NN \l__tag_tmpa_seq #1 + } +\cs_generate_variant:Nn \tag_struct_begin:n {e} \socket_new_plug:nnn {tagsupport/marginpar/begin}{default} { \if_mode_horizontal: \tag_mc_end: - \tag_struct_begin:n{tag=Aside,parent=\g__tag_para_main_struct_tl}% + \__tag_get_marginpar_parent:N \l__tag_tmpa_tl + \tag_struct_begin:e{tag=Aside,parent=\l__tag_tmpa_tl}% \else: \tag_struct_begin:n{tag=Aside}% \fi: @@ -77,9 +93,9 @@ \long\def\@ympar#1{% \@savemarbox\@marbox{#1}% \global\setbox\@currbox\copy\@marbox - \tag_stop: + \tag_suspend:n{\@ympar} \@xympar - \tag_start:} + \tag_resume:n{\@ympar}} \long\def\@xmpar[#1]#2{% \int_gincr:N\g__kernel_marginpar_int \property_if_recorded:eTF { tag_marginpar-opt-\int_use:N\g__kernel_marginpar_int } @@ -88,21 +104,21 @@ \property_record:ee { tag_marginpar-opt-\int_use:N\g__kernel_marginpar_int }{page} }% - \tag_stop: + \tag_suspend:n{\@xmpar} \@savemarbox\@currbox{#2}% - \tag_start: + \tag_resume:n{\@xmpar} } { \@savemarbox\@currbox{#2}% - \tag_stop: + \tag_suspend:n{\@xmpar} \@savemarbox\@marbox{#1 \property_record:ee { tag_marginpar-opt-\int_use:N\g__kernel_marginpar_int }{page}} - \tag_start: + \tag_resume:n{\@xmpar} } - \tag_stop: + \tag_suspend:n{\@xmpar} \@xympar - \tag_start: + \tag_resume:n{\@xmpar} } \endinput %% diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-minipage.sty b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-minipage.sty index 3b35a7beb38..a82944e5d10 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-minipage.sty +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-minipage.sty @@ -34,8 +34,8 @@ %% %% File: latex-lab-minipage.dtx %% -\def\ltlabminipagedate{2023-10-30} -\def\ltlabminipageversion{0.81c} +\def\ltlabminipagedate{2024-09-18} +\def\ltlabminipageversion{0.81e} \ProvidesExplPackage {latex-lab-testphase-minipage} {\ltlabminipagedate} {\ltlabminipageversion} {Code related to the tagging of minipages and parboxes} @@ -54,12 +54,13 @@ \@pboxswfalse \setlength\@tempdima{#4}% \def\@mpargs{{#1}{#2}[#3]{#4}}% - \socket_use:n{tagsupport/minipage/before}% new + \UseTaggingSocket{minipage/before}% new \setbox\@tempboxa\vbox\bgroup \color@begingroup \hsize\@tempdima \textwidth\hsize \columnwidth\hsize \@parboxrestore + \UseTaggingSocket{para/restore} \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c@mpfootnote\z@ \socket_assign_plug:nn{fntext/process}{mp}% \let\@listdepth\@mplistdepth \@mplistdepth\z@ @@ -77,18 +78,20 @@ \@minipagefalse %% added 24 May 89 \color@endgroup \egroup - \tag_stop:n{minipage} + \tag_suspend:n{minipage} \expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}% - \tag_start:n{minipage} - \socket_use:n{tagsupport/minipage/after} %new end ... + \tag_resume:n{minipage} + \UseTaggingSocket{minipage/after} %new end ... } \long\def\@iiiparbox#1#2[#3]#4#5{% \@kernel@init@parbox \leavevmode \@pboxswfalse \setlength\@tempdima{#4}% - \socket_use:n{tagsupport/parbox/before} - \@begin@tempboxa\vbox{\hsize\@tempdima\@parboxrestore#5\@@par}% + \UseTaggingSocket{parbox/before} + \@begin@tempboxa\vbox{\hsize\@tempdima\@parboxrestore + \UseTaggingSocket{para/restore} + #5\@@par}% \ifx\relax#2\else \setlength\@tempdimb{#2}% \edef\@parboxto{to\the\@tempdimb}% @@ -102,23 +105,36 @@ \csname bm@#3\endcsname}% \if@pboxsw \m@th$\fi \@end@tempboxa% - \socket_use:n{tagsupport/parbox/after} + \UseTaggingSocket{parbox/after} } \tl_new:N \l__ltboxes_tag_tl \tl_set:Nn \l__ltboxes_tag_tl {Div} \socket_new_plug:nnn{tagsupport/minipage/before}{tag/dflt} { - \tag_mc_end_push:\tag_struct_end: + \tag_mc_end_push: + \bool_if:NT \l__tag_para_bool {\tag_struct_end:} \tag_struct_begin:n{tag=\l__ltboxes_tag_tl} } \socket_new_plug:nnn{tagsupport/minipage/after}{tag/dflt} - {\tag_struct_end:\tag_struct_begin:n{tag=\l__tag_para_tag_tl}\tag_mc_begin_pop:n{}} + { + \tag_struct_end: + \bool_if:NT \l__tag_para_bool {\tag_struct_begin:n{tag=\l__tag_para_tag_tl}} + \tag_mc_begin_pop:n{} + } \socket_new_plug:nnn{tagsupport/parbox/before}{tag/dflt} - {\tag_mc_end_push:\tag_struct_end:\tag_struct_begin:n{tag=\l__ltboxes_tag_tl}} + { + \tag_mc_end_push: + \bool_if:NT \l__tag_para_bool {\tag_struct_end:} + \tag_struct_begin:n{tag=\l__ltboxes_tag_tl} + } \socket_new_plug:nnn{tagsupport/parbox/after}{tag/dflt} - {\tag_struct_end:\tag_struct_begin:n{tag=\l__tag_para_tag_tl}\tag_mc_begin_pop:n{}} + { + \tag_struct_end: + \bool_if:NT \l__tag_para_bool {\tag_struct_begin:n{tag=\l__tag_para_tag_tl}} + \tag_mc_begin_pop:n{} + } \socket_assign_plug:nn{tagsupport/minipage/before}{tag/dflt} \socket_assign_plug:nn{tagsupport/minipage/after} {tag/dflt} \socket_assign_plug:nn{tagsupport/parbox/before} {tag/dflt} diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-new-or-1.sty b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-new-or-1.sty index 38bc8993446..1a46498b353 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-new-or-1.sty +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-new-or-1.sty @@ -33,8 +33,8 @@ %% %% %% File: latex-lab-new-or-1.dtx (C) Copyright 2020-2024 Frank Mittelbach -\def\ltlabneworIdate{2023-07-20} -\def\ltlabneworIversion{0.85a} +\def\ltlabneworIdate{2024-11-12} +\def\ltlabneworIversion{0.85b} \ProvidesPackage{latex-lab-testphase-new-or-1} [\ltlabneworIdate\space v\ltlabneworIversion\space Temporary output patches for tagging and better link support] @@ -43,7 +43,7 @@ \providecommand\@kernel@before@foot{} \providecommand\@kernel@after@head{} \providecommand\@kernel@after@foot{} -\providecommand\@mult@ptagging@hook{}% multicol +\providecommand\@mult@ptagging@hook{}% should be replaced with a socket, eventually \patchcmd\@outputpage {\vfil\color@hbox\normalcolor\hb@xt@\textwidth{\@thehead}\color@endbox} @@ -84,16 +84,6 @@ \fi \global \maxdepth \@maxdepth} } -\AddToHook{package/multicol/after} - {% multicol needs later loading - \patchcmd\page@sofar - {\global\dimen\tw@\dp\z@}% - {% - \global\dimen\tw@\dp\z@ - \@mult@ptagging@hook - }% - {\typeout{Patching \string\page@sofar\space for tagging}}{\PATCHerror}% -} \ExplSyntaxOn \def\@kernel@before@head{\pdfannot_link_off:} \def\@kernel@before@foot{\pdfannot_link_off:} diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-sec.sty b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-sec.sty index 6fee3cc5a94..b0c5a1c2fd4 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-sec.sty +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-sec.sty @@ -33,16 +33,19 @@ %% %% %% File: latex-lab-sec.dtx (C) Copyright 2022-2024 LaTeX Project -\def\ltlabsecdate{2024-02-12} -\def\ltlabsecversion{0.84c} +\def\ltlabsecdate{2024-10-04} +\def\ltlabsecversion{0.84f} \ProvidesExplPackage {latex-lab-testphase-sec} {\ltlabsecdate} {\ltlabsecversion} {Code related to the tagging of sectioning commands} \RequirePackage{latex-lab-kernel-changes} \seq_new:N \g__tag_sec_stack_seq -\seq_gpush:Nn\g__tag_sec_stack_seq {{Document}{-100}} +\seq_gpush:Nn\g__tag_sec_stack_seq {{Document}{-100}{2}} +\cs_new:Npn \__tag_get_data_current_Sect: + { + \exp_last_unbraced:Ne\use_iii:nnn{\seq_item:Nn\g__tag_sec_stack_seq{1}} + } \bool_new:N \l__tag_sec_Sect_bool \bool_set_true:N\l__tag_sec_Sect_bool - \cs_new_protected:Npn\__tag_sec_begin:nn #1 #2 %#1 level #2 keyval { \tag_struct_begin:n @@ -50,7 +53,8 @@ tag= {\int_compare:nNnTF {#1}={-1}{Part}{Sect}} ,#2 } - \seq_gpush:Ne \g__tag_sec_stack_seq {{\g__tag_struct_tag_tl}{\int_eval:n{#1}}} + \seq_gpush:Ne \g__tag_sec_stack_seq + {{\g__tag_struct_tag_tl}{\int_eval:n{#1}}{\g__tag_struct_stack_current_tl}} } \msg_new:nnn { tag } {wrong-sect-nesting} { @@ -61,12 +65,12 @@ \cs_new_protected:Npn\__tag_sec_end:n #1 % #1 level { \seq_get:NN \g__tag_sec_stack_seq \l__tag_tmpa_tl - \int_compare:nNnT {#1}<{\exp_last_unbraced:NV\use_ii:nn\l__tag_tmpa_tl+1} + \int_compare:nNnT {#1}<{\exp_last_unbraced:NV\use_ii:nnn\l__tag_tmpa_tl+1} { \seq_get:NN\g__tag_struct_tag_stack_seq \l__tag_tmpb_tl \exp_args:Nee \tl_if_eq:nnTF - {\exp_last_unbraced:NV\use_i:nn\l__tag_tmpa_tl} + {\exp_last_unbraced:NV\use_i:nnn\l__tag_tmpa_tl} {\exp_last_unbraced:NV\use_i:nn\l__tag_tmpb_tl} { \seq_gpop:NN \g__tag_sec_stack_seq \l__tag_tmpa_tl @@ -75,7 +79,7 @@ } { \msg_warning:nnee {tag}{wrong-sect-nesting} - { \exp_last_unbraced:NV\use_i:nn \l__tag_tmpa_tl } + { \exp_last_unbraced:NV\use_i:nnn \l__tag_tmpa_tl } { \exp_last_unbraced:NV\use_i:nn \l__tag_tmpb_tl } } } @@ -187,7 +191,7 @@ \IfBooleanTF {#1} { \@spart {#3} } - { \@part [#2]{#3} } + { \@part [{#2}]{#3} } \tag_tool:n {sec-stop-part} } } @@ -219,7 +223,7 @@ \IfBooleanTF {#1} { \@schapter {#3} } - { \@chapter [#2]{#3} } + { \@chapter [{#2}]{#3} } \tag_tool:n {sec-stop-chapter} } \RenewDocumentCommand\part{ s O{#3} m } @@ -257,7 +261,7 @@ \IfBooleanTF {#1} { \@spart {#3} } - { \@part [#2]{#3} } + { \@part [{#2}]{#3} } \tag_tool:n{sec-stop-part} } } @@ -303,9 +307,9 @@ {\tagmcbegin{tag=Lbl}} {#1} } - \tag_stop:n{hangfrom} + \tag_suspend:n{hangfrom} \hangindent \wd\@tempboxa\noindent - \tag_start:n{hangfrom} + \tag_resume:n{hangfrom} \tagmcbegin{}\box\@tempboxa\tagmcend\tagstructend\tagmcbegin{}} \cs_new_protected:Npn \@kernel@tag@svsec { @@ -329,7 +333,7 @@ \@tempskipa #5\relax \ifdim \@tempskipa>\z@ \begingroup - \tagtool{para-flattened=true} % or \bool_set_true\l__tag_para_flattened_bool + \tagtool{para-flattened=true} % or \bool_set_true\l_@@_para_flattened_bool #6{% \ifnum #2>\c@secnumdepth \@hangfrom {\hskip #3\relax\@svsec}% diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-table.sty b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-table.sty index 4af648e77c4..91a750b20a5 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-table.sty +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-table.sty @@ -33,8 +33,8 @@ %% %% %% File: latex-lab-table.dtx (C) Copyright 2023-2024 LaTeX Project -\def\ltlabtbldate{2024-05-25} -\def\ltlabtblversion{0.85i} +\def\ltlabtbldate{2024-09-18} +\def\ltlabtblversion{0.85n} \ProvidesExplPackage {latex-lab-testphase-table} {\ltlabtbldate} {\ltlabtblversion} {Code related to the tagging of tables} \RequirePackage{array} @@ -50,47 +50,97 @@ \tl_set:Nn \l__tbl_cellattribute_tl {} \tl_new:N \l__tbl_rowattribute_tl \tl_set:Nn \l__tbl_rowattribute_tl {} +\prop_new:N\g__tbl_untagged_cells_prop +\prop_new:N\l__tbl_saved_untagged_cells_prop \clist_new:N \l__tbl_tmpa_clist \tl_new:N \l__tbl_tmpa_tl +\str_new:N \l__tbl_tmpa_str +\str_if_exist:cF { l__socket_tagsupport/tbl/init/celldata_plug_str } + { + \NewSocket{tagsupport/tbl/init/celldata}{0} + \NewSocket{tagsupport/tbl/restore/celldata}{0} + } +\NewSocketPlug{tagsupport/tbl/init/celldata}{default} + { + \prop_set_eq:NN\l__tbl_saved_untagged_cells_prop \g__tbl_untagged_cells_prop + \prop_gclear:N \g__tbl_untagged_cells_prop + } +\AssignSocketPlug{tagsupport/tbl/init/celldata}{default} + +\NewSocketPlug{tagsupport/tbl/restore/celldata}{default} + { + \prop_gset_eq:NN\g__tbl_untagged_cells_prop \l__tbl_saved_untagged_cells_prop + } +\AssignSocketPlug{tagsupport/tbl/restore/celldata}{default} \NewSocketPlug{tagsupport/tbl/cell/begin}{TD} { \__tbl_show_curr_cell_data: - \tag_struct_begin:n + \__tbl_if_tag_cell:nnT {\g__tbl_row_int } { \g__tbl_col_int } { - tag =\l__tbl_celltag_tl, - attribute-class =\l__tbl_cellattribute_tl - } - \seq_gput_right:Ne \g__tbl_struct_cur_seq { \tag_get:n {struct_num} } - \int_step_inline:nn { \g__tbl_span_tl - 1 } - { - \seq_gput_right:Ne \g__tbl_struct_cur_seq { -\tag_get:n {struct_num} } + \clist_if_in:NVT \l__tbl_header_columns_clist\g__tbl_col_int + { + \tl_set:Nn \l__tbl_celltag_tl {TH} + \tl_set:Ne \l__tbl_cellattribute_tl {\l__tbl_cellattribute_tl,TH-row} + } + \tl_set:Ne \l__tbl_tmpa_tl {\int_eval:n { \g__tbl_col_int - 1 - \g__tbl_table_cols_tl }} + \clist_if_in:NoT \l__tbl_header_columns_clist { \l__tbl_tmpa_tl } + { + \tl_set:Nn \l__tbl_celltag_tl {TH} + \tl_set:Ne \l__tbl_cellattribute_tl {\l__tbl_cellattribute_tl,TH-row} + } + \tag_struct_begin:n + { + tag =\l__tbl_celltag_tl, + attribute-class ={\l__tbl_cellattribute_tl} + } + \seq_gput_right:Ne \g__tbl_struct_cur_seq { \tag_get:n {struct_num} } + \int_step_inline:nn { \g__tbl_span_tl - 1 } + { + \seq_gput_right:Ne \g__tbl_struct_cur_seq { -\tag_get:n {struct_num} } + } + \tag_mc_begin:n{} } - \tag_mc_begin:n{} } \NewSocketPlug{tagsupport/tbl/cell/end}{TD} { - \tag_mc_end: - \tag_struct_end: + \__tbl_if_tag_cell:nnT {\g__tbl_row_int } { \g__tbl_col_int } + { + \tag_mc_end: + \tag_struct_end: + } } \NewSocketPlug{tagsupport/tbl/pcell/begin}{TDpbox} { \__tbl_show_curr_cell_data: - \tag_struct_begin:n - { - tag =\l__tbl_pcelltag_tl, - attribute-class =\l__tbl_cellattribute_tl - } - \seq_gput_right:Ne \g__tbl_struct_cur_seq { \tag_get:n {struct_num} } - \int_step_inline:nn { \g__tbl_span_tl - 1 } + \__tbl_if_tag_cell:nnT {\g__tbl_row_int } { \g__tbl_col_int } { - \seq_gput_right:Ne \g__tbl_struct_cur_seq { -\tag_get:n {struct_num} } - } - \tagpdfparaOn - \tl_set:Nn \l__tag_para_main_tag_tl {Div} + \clist_if_in:NVT \l__tbl_header_columns_clist\g__tbl_col_int + { + \tl_set:Nn \l__tbl_celltag_tl {TH} + \tl_set:Ne \l__tbl_cellattribute_tl {\l__tbl_cellattribute_tl,TH-row} + } + \tag_struct_begin:n + { + tag =\l__tbl_pcelltag_tl, + attribute-class ={\l__tbl_cellattribute_tl} + } + \seq_gput_right:Ne \g__tbl_struct_cur_seq { \tag_get:n {struct_num} } + \int_step_inline:nn { \g__tbl_span_tl - 1 } + { + \seq_gput_right:Ne \g__tbl_struct_cur_seq { -\tag_get:n {struct_num} } + } + \tagpdfparaOn + \tl_set:Nn \l__tag_para_main_tag_tl {Div} + } } \NewSocketPlug{tagsupport/tbl/pcell/end}{TDpbox} { - \tag_struct_end: + \__tbl_if_tag_cell:nnT {\g__tbl_row_int } { \g__tbl_col_int } + { + \tag_struct_end: + \legacy_if:nT {@endpe}{\par} + \mode_if_vertical:T{ \tagpdfparaOff } + } } \NewSocketPlug{tagsupport/tbl/row/begin}{TR} { @@ -116,7 +166,7 @@ { \__tbl_trace:n {==>~ - stucture~stored~for~row~\int_use:N\g__tbl_row_int :~ + structure~stored~for~row~\int_use:N\g__tbl_row_int :~ \seq_use:Nn \g__tbl_struct_cur_seq {,} } } @@ -124,13 +174,23 @@ \tag_struct_end: } } +\int_if_exist:NF \l__tag_block_flattened_level_int + { + \int_new:N \l__tag_block_flattened_level_int + } +\NewSocketPlug{tagsupport/para/restore}{Table} + { + \tl_set:Nn \l__tag_para_main_tag_tl {Div} + \tl_set_eq:NN \l__tag_para_tag_tl\l__tag_para_tag_default_tl + \bool_set_true:N \l__tag_para_bool + \bool_set_false:N \l__tag_para_flattened_bool + \int_zero:N \l__tag_block_flattened_level_int + } \NewSocketPlug{tagsupport/tbl/init}{Table} { - \tag_if_active:T - { - \bool_set_false:N \l__tag_para_bool - \__tbl_init_struct_data: - } + \bool_set_false:N \l__tag_para_bool + \AssignSocketPlug{tagsupport/para/restore}{Table} + \__tbl_init_struct_data: } \NewSocketPlug{tagsupport/tbl/finalize}{Table} { @@ -190,7 +250,7 @@ \prop_if_exist:cT { g__tag_struct_ \l__tbl_tmpa_tl _prop } { - \exp_args:No \__tag_struct_prop_gput:nnn {\l__tbl_tmpa_tl} {S}{/Artifact} + \__tag_struct_prop_gput:onn { \l__tbl_tmpa_tl } {S}{/Artifact} } } } @@ -261,7 +321,7 @@ \prop_if_exist:cT { g__tag_struct_ \l__tbl_tmpa_tl _prop } { - \exp_args:No\__tag_struct_prop_gput:nnn {\l__tbl_tmpa_tl} {S}{/Artifact} + \__tag_struct_prop_gput:onn {\l__tbl_tmpa_tl} {S}{/Artifact} } } } @@ -320,14 +380,21 @@ {/O /Table /ColSpan~\int_eval:n{#1}} } \tl_set:Ne \l__tbl_cellattribute_tl - {colspan-\int_eval:n{#1}} + {\l__tbl_cellattribute_tl,colspan-\int_eval:n{#1}} } } -\tag_if_active:T - { \cs_generate_variant:Nn \__tag_attr_new_entry:nn {ee} } - +\str_if_exist:cF { l__socket_tagsupport/tbl/leaders/end_plug_str } + { + \NewSocket{tagsupport/tbl/leaders/begin}{0} + \NewSocket{tagsupport/tbl/leaders/end}{0} + } +\NewSocketPlug{tagsupport/tbl/leaders/begin}{code} + { \tag_mc_begin:n{artifact} } +\NewSocketPlug{tagsupport/tbl/leaders/end}{code} + { \tag_mc_end: } \AddToHook{cmd/array/before}{\__tag_tbl_disable:} + \cs_new_protected:Npn \__tag_tbl_disable: { \AssignSocketPlug{tagsupport/tbl/cell/begin}{noop} @@ -347,6 +414,8 @@ \AssignSocketPlug{tagsupport/tbl/vmode/begin}{noop} \AssignSocketPlug{tagsupport/tbl/vmode/end}{noop} \AssignSocketPlug{tagsupport/tbl/colspan}{noop} + \AssignSocketPlug{tagsupport/tbl/leaders/begin}{noop} + \AssignSocketPlug{tagsupport/tbl/leaders/end}{noop} } \cs_new_protected:Npn \__tag_tbl_enable: @@ -368,6 +437,8 @@ \AssignSocketPlug{tagsupport/tbl/vmode/begin}{Table} \AssignSocketPlug{tagsupport/tbl/vmode/end}{Table} \AssignSocketPlug{tagsupport/tbl/colspan}{code} + \AssignSocketPlug{tagsupport/tbl/leaders/begin}{code} + \AssignSocketPlug{tagsupport/tbl/leaders/end}{code} } \keys_define:nn { __tag / setup } @@ -385,6 +456,7 @@ \tl_set:Nn\l__tbl_celltag_tl {text} \tl_set:Nn\l__tbl_tabletag_tl {Div} \clist_clear:N \l__tbl_header_rows_clist + \clist_clear:N \l__tbl_header_columns_clist }, table/tagging .default:n = true, table/tagging .initial:n = true @@ -416,6 +488,7 @@ } \clist_new:N \l__tbl_header_rows_clist +\clist_new:N \l__tbl_header_columns_clist \cs_new_protected:Npn \__tbl_set_header_rows: { \clist_map_inline:Nn \l__tbl_header_rows_clist @@ -433,7 +506,19 @@ { g__tag_struct_####1_prop } { C } \l__tbl_tmpa_tl - {\__tag_struct_prop_gput:nne{ ####1 }{C}{[/TH-col~\l__tbl_tmpa_tl]} } + { + \str_set:Ne \l__tbl_tmpa_str {\l__tbl_tmpa_tl} + \str_remove_once:Nn \l__tbl_tmpa_str {[} + \str_remove_once:Nn \l__tbl_tmpa_str {]} + \str_if_in:NnTF\l__tbl_tmpa_str{/TH-row} + { + \str_replace_once:Nnn \l__tbl_tmpa_str {/TH-row}{/TH-both} + \__tag_struct_prop_gput:nne{ ####1 }{C}{[\l__tbl_tmpa_str]} + } + { + \__tag_struct_prop_gput:nne{ ####1 }{C}{[/TH-col~\l__tbl_tmpa_str]} + } + } {\__tag_struct_prop_gput:nnn{ ####1 }{C}{/TH-col}} } } @@ -442,8 +527,68 @@ \keys_define:nn { __tag / setup } { table/header-rows .clist_set:N = \l__tbl_header_rows_clist, + table/header-columns .clist_set:N = \l__tbl_header_columns_clist, table-header-rows .meta:n = {table/header-rows={#1}} } +\cs_if_exist:NT \__tag_struct_prop_gput:nnn + { + \cs_generate_variant:Nn \__tag_struct_prop_gput:nnn {one} + } +\cs_new_protected:Npn \__tbl_multirow:n #1 + { + \prop_get:NeNF \g__tag_attr_entries_prop + {rowspan-\int_eval:n{#1}} + \l__tbl_tmpa_tl + { + \__tag_attr_new_entry:ee + {rowspan-\int_eval:n{#1}} + {/O /Table /RowSpan~\int_eval:n{#1}} + } + \seq_gput_left:Ne\g__tag_attr_class_used_seq + {\pdf_name_from_unicode_e:n{rowspan-\int_eval:n{#1}}} + \seq_get_right:NN\g__tbl_struct_cur_seq \l__tbl_tmpb_tl + \tl_set:Ne \l__tbl_tmpb_tl { \int_abs:n{\l__tbl_tmpb_tl} } + \prop_get:cnNTF + { g__tag_struct_\l__tbl_tmpb_tl _prop } + { C } + \l__tbl_tmpa_tl + { + \tl_remove_once:Nn \l__tbl_tmpa_tl {[} + \tl_remove_once:Nn \l__tbl_tmpa_tl {]} + \__tag_struct_prop_gput:one{ \l__tbl_tmpb_tl } + {C} + {[/rowspan-\int_eval:n{#1}~\l__tbl_tmpa_tl]} + } + { + \__tag_struct_prop_gput:one{ \l__tbl_tmpb_tl } + {C} + {[/rowspan-\int_eval:n{#1}]} + } + \__tbl_gset_untagged_row_cells:nn {#1-1}{\g__tbl_span_tl} + } +\keys_define:nn{ __tag / setup } + { table/multirow .code:n = {\__tbl_multirow:n {#1} } + ,table/multirow .default:n = 1 + } +\cs_new_protected:Npn \__tbl_gset_untagged_row_cells:nn #1 #2 % #1 number of rows, #2 number of columns + { + \int_step_inline:nn {#1} + { + \int_step_inline:nn {#2} + { + \prop_gput:Nee \g__tbl_untagged_cells_prop + { \int_eval:n {\g__tbl_row_int + ##1},\int_eval:n{\g__tbl_col_int + ####1 -1 } }{} + } + } + } +\prg_new_protected_conditional:Npnn\__tbl_if_tag_cell:nn #1 #2 %#1 row, #2 col + { T,TF } + { + \prop_get:NeNTF \g__tbl_untagged_cells_prop + {\int_eval:n{#1},\int_eval:n{#2}}\l__tbl_tmpa_tl + { \prg_return_false:} + { \prg_return_true: } + } \cs_new_protected:Npn \__tbl_show_curr_cell_data: { \__tbl_trace:n { ==>~ current~cell~data:~ \int_use:N \g__tbl_row_int , @@ -451,10 +596,6 @@ \g__tbl_span_tl } } -\NewSocket{tbl/celldata/missingcount}{1} -\NewSocketPlug{tbl/celldata/missingcount}{code}{\tbl_count_missing_cells:n{#1}} -\AssignSocketPlug{tbl/celldata/missingcount}{code} - \cs_new:Npn \__tbl_add_missing_cells: { \int_compare:nNnT \g__tbl_missing_cells_int > 0 @@ -464,6 +605,7 @@ additional~cell(s)~into~previous~row:} \int_step_inline:nn { \g__tbl_missing_cells_int } { + \int_gincr:N\g__tbl_col_int \UseTaggingSocket{tbl/cell/begin} \UseTaggingSocket{tbl/cell/end} } @@ -505,9 +647,9 @@ } \hbox to\z@{\hss\parbox[t]\LTcapwidth{% \reset@font - \tag_stop:n{caption} + \tag_suspend:n{caption} \sbox\@tempboxa{#1{#2:~}#3}% - \tag_start:n{caption} + \tag_resume:n{caption} \ifdim\wd\@tempboxa>\hsize #1{#2:~}#3% \else diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-text.sty b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-text.sty index 749ab3aa08a..2eea229b6d5 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-text.sty +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-text.sty @@ -33,8 +33,8 @@ %% %% %% File: latex-lab-text.dtx (C) Copyright 2023-2024 LaTeX Project -\def\ltlabtextdate{2023-07-20} -\def\ltlabtextversion{0.85a} +\def\ltlabtextdate{2024-09-18} +\def\ltlabtextversion{0.85b} \ProvidesExplPackage {latex-lab-testphase-text} {\ltlabtextdate} {\ltlabtextversion} {Code related to the tagging of various small text commands} @@ -45,11 +45,11 @@ \tag_mc_end_push: \tag_struct_begin:n{tag=Span,actualtext=LaTeX} \tag_mc_begin:n{} - \tag_stop:n{LaTeX} + \tag_suspend:n{LaTeX} } \AddToHook{cmd/LaTeX/after} { - \tag_start:n{LaTeX} + \tag_resume:n{LaTeX} \tag_mc_end: \tag_struct_end: \tag_mc_begin_pop:n{} diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-toc.sty b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-toc.sty index e4cb035ba10..558041fccc4 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-toc.sty +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-toc.sty @@ -36,35 +36,41 @@ %% %% %% File: latex-lab-toc.dtx (C) Copyright 2022-2024 LaTeX Project -\def\ltlabtocdate{2023-10-16} -\def\ltlabtocversion{0.85b} +\def\ltlabtocdate{2024-09-26} +\def\ltlabtocversion{0.85e} \ProvidesExplPackage {latex-lab-testphase-toc} {\ltlabtocdate} {\ltlabtocversion} { Code related to the tagging of toc-like lists} %% File: latex-lab-toc-kernel-changes.dtx (C) Copyright 2022-2024 LaTeX Project -\def\ltlabkerneldate{2024-02-12} -\def\ltlabkernelversion{0.85c} +\def\ltlabkerneldate{2024-07-11} +\def\ltlabkernelversion{0.85d} \RequirePackage{latex-lab-kernel-changes} -\def\@contentsline@cfgpoint@before#1#2#3#4{} -\def\@contentsline@cfgpoint@after#1#2#3#4{} +\str_if_exist:cF { l__socket_tagsupport/toc/contentsline/before_plug_str } + { + \NewSocket{tagsupport/toc/contentsline/before}{1} + \NewSocket{tagsupport/toc/contentsline/after}{1} + } \def\contentsline#1#2#3#4% {% - \@contentsline@cfgpoint@before{#1}{#2}{#3}{#4}% + \UseTaggingSocket{toc/contentsline/before}{{#1}{#2}{#3}{#4}}% \gdef\@contentsline@destination{#4}% \csname l@#1\endcsname{#2}{#3}% - \@contentsline@cfgpoint@after{#1}{#2}{#3}{#4}% + \UseTaggingSocket{toc/contentsline/after}{{#1}{#2}{#3}{#4}}% } \def\addcontentsline#1#2#3{% #1=toc extension, #2= heading type, tag \addtocontents{#1}{% \protect\contentsline{#2}{#3}{\thepage}{\@currentHref}\protected@file@percent }} -\def\@starttoc@cfgpoint@before#1{} -\def\@starttoc@cfgpoint@after#1{} +\str_if_exist:cF { l__socket_tagsupport/toc/starttoc/before_plug_str } + { + \NewSocket{tagsupport/toc/starttoc/before}{1} + \NewSocket{tagsupport/toc/starttoc/after}{1} + } \def\@starttoc#1{% \begingroup \makeatletter - \@starttoc@cfgpoint@before{#1}% + \UseTaggingSocket{toc/starttoc/before}{#1}% \@input{\jobname.#1}% - \@starttoc@cfgpoint@after{#1}% + \UseTaggingSocket{toc/starttoc/after}{#1}% \if@filesw \expandafter\newwrite\csname tf@#1\endcsname \immediate\openout \csname tf@#1\endcsname \jobname.#1\relax @@ -74,8 +80,11 @@ \NewMirroredHookPairWithArguments{contentsline/number/before}{contentsline/number/after}{1}% \NewMirroredHookPairWithArguments{contentsline/text/before}{contentsline/text/after}{4}% \NewMirroredHookPairWithArguments{contentsline/page/before}{contentsline/page/after}{4}% -\def\@dottedtocline@cfgpoint@leaders#1{#1} - +\str_if_exist:cF { l__socket_tagsupport/toc/leaders/before_plug_str } + { + \NewSocket{tagsupport/toc/leaders/before}{0} + \NewSocket{tagsupport/toc/leaders/after}{0} + } \def\@dottedtocline#1#2#3#4#5{% \ifnum #1>\c@tocdepth \else \vskip \z@ \@plus.2\p@ @@ -89,10 +98,11 @@ \csname contentsline@text@#1@format\endcsname{#4}% \UseHookWithArguments{contentsline/text/after}{4}{#1}{#4}{#5}{\@contentsline@destination}% \nobreak - \@dottedtocline@cfgpoint@leaders{% + \UseTaggingSocket{toc/leaders/before}\SuspendTagging{toc/leaders}% \leaders\hbox{$\m@th \mkern \@dotsep mu\hbox{.}\mkern \@dotsep - mu$}\hfill}% + mu$}\hfill + \ResumeTagging{toc/leaders}\UseTaggingSocket{toc/leaders/after}% \nobreak \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor \UseHookWithArguments{contentsline/page/before}{4}{#1}{#4}{#5}{\@contentsline@destination}% @@ -276,45 +286,26 @@ \fi} } %% File: latex-lab-toc.dtx (C) Copyright 2022-2024 LaTeX Project -\def\ltlabtocdate{2023-10-16} -\def\ltlabtocversion{0.85b} +\def\ltlabtocdate{2024-09-26} +\def\ltlabtocversion{0.85e} \tl_new:N \l__tag_toc_tmpa_tl -\AddToHook{cmd/refstepcounter/after} - { - \tl_if_blank:VF \@currentHref - { - \prop_gput:Nee \g__tag_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}} - } - } -\AddToHook{cmd/H@refstepcounter/after} - { - \tl_if_blank:VF \@currentHref - { - \prop_gput:Nee \g__tag_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}} - } - } -\msg_new:nnn { tag } {struct-dest-unknown} - { - Destination~#1~has~no~related~structure.\\ - /Ref~for~structure~#2~not~updated - } - -\cs_new_protected:Npn \g__tag_struct_ref_by_dest: +\str_if_exist:cF { l__socket_tagsupport/recordtarget_plug_str } { - \prop_map_inline:Nn\g__tag_struct_ref_by_dest_prop - { - \prop_get:NnNTF \g__tag_struct_dest_num_prop {##2} \l__tag_tmpa_tl - { - \__tag_struct_gput_data_ref:ee - { ##1 } - { \tag_struct_object_ref:e{ \l__tag_tmpa_tl }} - } - { - \msg_warning:nnnn {tag}{struct-dest-unknown}{##2}{ ##1} - } - } - } -\hook_gput_code:nnn {tagpdf/finish/before}{tagpdf/struct/Ref}{\g__tag_struct_ref_by_dest:} + \AddToHook{cmd/refstepcounter/after} + { + \tl_if_blank:VF \@currentHref + { + \prop_gput:Nee \g__tag_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}} + } + } + \AddToHook{cmd/H@refstepcounter/after} + { + \tl_if_blank:VF \@currentHref + { + \prop_gput:Nee \g__tag_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}} + } + } + } \int_new:N \g__tag_toc_level_int \seq_new:N \g__tag_toc_stack_seq @@ -325,10 +316,11 @@ \int_gset:Nn \g__tag_toc_level_int {-100} \tag_struct_begin:n{tag=TOC,title=#1} } -\cs_set_protected:Npn\@starttoc@cfgpoint@before#1 - { - \__tag_toc_starttoc_init:n{#1} - } +\NewSocketPlug{tagsupport/toc/starttoc/before}{default} + { + \__tag_toc_starttoc_init:n{#1} + } +\AssignSocketPlug{tagsupport/toc/starttoc/before}{default} \cs_new_protected:Npn \__tag_toc_starttoc_finalize: { \int_step_inline:nn @@ -337,11 +329,11 @@ \tag_struct_end: \seq_gclear:N \g__tag_toc_stack_seq } -\cs_set_protected:Npn\@starttoc@cfgpoint@after#1 - { - \__tag_toc_starttoc_finalize: - } - +\NewSocketPlug{tagsupport/toc/starttoc/after}{default} + { + \__tag_toc_starttoc_finalize: + } +\AssignSocketPlug{tagsupport/toc/starttoc/after}{default} \cs_new_protected:Npn \__tag_toc_end:n #1 { \seq_get:NNT\g__tag_toc_stack_seq \l__tag_toc_tmpa_tl @@ -361,7 +353,8 @@ } } \cs_generate_variant:Nn \__tag_toc_end:n {e} -\cs_new_protected:Npn \__tag_toc_contentsline_begin:nnn #1 #2 #3 %#1 level, #2 content, #3 destination +\cs_new_protected:Npn \__tag_toc_contentsline_begin:nnnn #1 #2 #3 #4 + %#1 level, #2 content, #3 page number (unused) #4 destination { \tag_if_active:T { @@ -383,21 +376,22 @@ \int_gset:Nn \g__tag_toc_level_int { \use:c{toclevel@#1} } \group_begin: \text_declare_expand_equivalent:Nn \numberline \use_none:n - \exp_args:Ne \tag_struct_begin:n{tag=TOCI,title={\text_purify:n {#2}}} - \prop_gput:Nee \g__tag_struct_ref_by_dest_prop - { \tag_get:n {struct_num} }{#3} + \exp_args:Ne + \tag_struct_begin:n{tag=TOCI,title={\text_purify:n {#2}}} + \tag_struct_gput:nnn { \tag_get:n {struct_num} }{ref_dest}{#4} \seq_gpush:Ne \g__tag_toc_stack_seq {{TOCI}\use:c{toclevel@#1}} \group_end: } } } -\cs_set_protected:Npn\@contentsline@cfgpoint@before#1#2#3#4 +\NewSocketPlug{tagsupport/toc/contentsline/before}{default} { - \__tag_toc_contentsline_begin:nnn {#1}{#2}{#4} + \__tag_toc_contentsline_begin:nnnn #1 } +\AssignSocketPlug{tagsupport/toc/contentsline/before}{default} \msg_new:nnn {tag}{toc-no-TOCI}{Missing~TOCI~structure~on~toc~stack} -\cs_new_protected:Npn \__tag_toc_contentsline_end:n #1 %#1 level name +\cs_new_protected:Npn \__tag_toc_contentsline_end:nnnn #1 #2 #3 #4 { \int_compare:nNnF { \use:c{toclevel@#1} } > {\use:c{c@tocdepth}} { @@ -413,10 +407,11 @@ } } } -\cs_set_protected:Npn \@contentsline@cfgpoint@after #1#2#3#4 - { - \__tag_toc_contentsline_end:n {#1} - } +\NewSocketPlug{tagsupport/toc/contentsline/after}{default} + { + \__tag_toc_contentsline_end:nnnn #1 + } +\AssignSocketPlug{tagsupport/toc/contentsline/after}{default} \AddToHook{contentsline/text/before}[tagpdf]{% \tag_struct_begin:n{tag=Reference}% \tag_mc_begin:n{tag=Reference}} @@ -435,9 +430,12 @@ \tag_mc_end: \tag_struct_end: \tag_mc_begin:n{tag=Reference}} -\def\@dottedtocline@cfgpoint@leaders#1{% - \tag_mc_begin:n{artifact}\tag_stop:n{leaders}\nobreak#1\nobreak\tag_start:n{leaders}\tag_mc_end:} - +\NewSocketPlug{tagsupport/toc/leaders/before}{artifact} + {\tag_mc_begin:n{artifact}\nobreak} +\NewSocketPlug{tagsupport/toc/leaders/after}{artifact} + {\nobreak\tag_mc_end:} +\AssignSocketPlug{tagsupport/toc/leaders/before}{artifact} +\AssignSocketPlug{tagsupport/toc/leaders/after}{artifact} %% File: latex-lab-toc-hyperref-changes.dtx (C) Copyright 2022-2024 LaTeX Project \def\ltlabtochyperdate{2023-07-20} \def\ltlabtochyperversion{0.85a} diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/marginpar-latex-lab-testphase.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/marginpar-latex-lab-testphase.ltx index a74a5f65ef3..0c55110f9d5 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/marginpar-latex-lab-testphase.ltx +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/marginpar-latex-lab-testphase.ltx @@ -34,8 +34,8 @@ %% %% File: latex-lab-marginpar.dtx %% -\def\ltlabmarginpardate{2024-02-12} -\def\ltlabmarginparversion{0.85b} +\def\ltlabmarginpardate{2024-09-18} +\def\ltlabmarginparversion{0.85d} \ProvidesFile{marginpar-latex-lab-testphase.ltx} [\ltlabmarginpardate\space v\ltlabmarginparversion\space diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/minipage-latex-lab-testphase.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/minipage-latex-lab-testphase.ltx index 0cf1da13360..b11a23987c1 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/minipage-latex-lab-testphase.ltx +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/minipage-latex-lab-testphase.ltx @@ -34,8 +34,8 @@ %% %% File: latex-lab-minipage.dtx %% -\def\ltlabminipagedate{2023-10-30} -\def\ltlabminipageversion{0.81c} +\def\ltlabminipagedate{2024-09-18} +\def\ltlabminipageversion{0.81e} \ProvidesFile{minipage-latex-lab-testphase.ltx} [\ltlabminipagedate\space v\ltlabminipageversion diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/new-or-1-latex-lab-testphase.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/new-or-1-latex-lab-testphase.ltx index 915a065c5e5..b4e311b2e2a 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/new-or-1-latex-lab-testphase.ltx +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/new-or-1-latex-lab-testphase.ltx @@ -33,8 +33,8 @@ %% %% %% File: latex-lab-new-or-1.dtx (C) Copyright 2020-2024 Frank Mittelbach -\def\ltlabneworIdate{2023-07-20} -\def\ltlabneworIversion{0.85a} +\def\ltlabneworIdate{2024-11-12} +\def\ltlabneworIversion{0.85b} \ProvidesFile{new-or-1-latex-lab-testphase.ltx} [\ltlabneworIdate\space v\ltlabneworIversion\space latex-lab wrapper new-or-1] diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/sec-latex-lab-testphase.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/sec-latex-lab-testphase.ltx index 5cd6edae269..fa037aca3bf 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/sec-latex-lab-testphase.ltx +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/sec-latex-lab-testphase.ltx @@ -33,8 +33,8 @@ %% %% %% File: latex-lab-sec.dtx (C) Copyright 2022-2024 LaTeX Project -\def\ltlabsecdate{2024-02-12} -\def\ltlabsecversion{0.84c} +\def\ltlabsecdate{2024-10-04} +\def\ltlabsecversion{0.84f} \ProvidesFile{sec-latex-lab-testphase.ltx} [\ltlabsecdate\space v\ltlabsecversion\space latex-lab wrapper sec] diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/table-latex-lab-testphase.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/table-latex-lab-testphase.ltx index b01da95717e..eee19904436 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/table-latex-lab-testphase.ltx +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/table-latex-lab-testphase.ltx @@ -33,8 +33,8 @@ %% %% %% File: latex-lab-table.dtx (C) Copyright 2023-2024 LaTeX Project -\def\ltlabtbldate{2024-05-25} -\def\ltlabtblversion{0.85i} +\def\ltlabtbldate{2024-09-18} +\def\ltlabtblversion{0.85n} \ProvidesFile{table-latex-lab-testphase.ltx} [\ltlabtbldate\space v\ltlabtblversion\space latex-lab wrapper table] \RequirePackage{latex-lab-testphase-table} diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/tabular-latex-lab-testphase.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/tabular-latex-lab-testphase.ltx index 67a80c992ab..093b38ef924 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/tabular-latex-lab-testphase.ltx +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/tabular-latex-lab-testphase.ltx @@ -33,8 +33,8 @@ %% %% %% File: latex-lab-table.dtx (C) Copyright 2023-2024 LaTeX Project -\def\ltlabtbldate{2024-05-25} -\def\ltlabtblversion{0.85i} +\def\ltlabtbldate{2024-09-18} +\def\ltlabtblversion{0.85n} \ProvidesFile{tabular-latex-lab-testphase.ltx} [\ltlabtbldate\space v\ltlabtblversion\space latex-lab wrapper tabular] diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/text-latex-lab-testphase.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/text-latex-lab-testphase.ltx index 2615850378c..290c185f0d2 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/text-latex-lab-testphase.ltx +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/text-latex-lab-testphase.ltx @@ -33,8 +33,8 @@ %% %% %% File: latex-lab-text.dtx (C) Copyright 2023-2024 LaTeX Project -\def\ltlabtextdate{2023-07-20} -\def\ltlabtextversion{0.85a} +\def\ltlabtextdate{2024-09-18} +\def\ltlabtextversion{0.85b} \ProvidesFile{text-latex-lab-testphase.ltx} [\ltlabtextdate\space v\ltlabtextversion\space diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/toc-latex-lab-testphase.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/toc-latex-lab-testphase.ltx index 8b2c05d329c..8985e57bc7b 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/toc-latex-lab-testphase.ltx +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/toc-latex-lab-testphase.ltx @@ -33,8 +33,8 @@ %% %% %% File: latex-lab-toc.dtx (C) Copyright 2022-2024 LaTeX Project -\def\ltlabtocdate{2023-10-16} -\def\ltlabtocversion{0.85b} +\def\ltlabtocdate{2024-09-26} +\def\ltlabtocversion{0.85e} \ProvidesFile{toc-latex-lab-testphase.ltx} [\ltlabtocdate\space v\ltlabtocversion latex-lab wrapper toc] diff --git a/Master/texmf-dist/tex/latex-dev/tools/.tex b/Master/texmf-dist/tex/latex-dev/tools/.tex index ff0d77e6fc4..a6b7144e01d 100644 --- a/Master/texmf-dist/tex/latex-dev/tools/.tex +++ b/Master/texmf-dist/tex/latex-dev/tools/.tex @@ -1,5 +1,5 @@ %% -%% This is file `.tex', +%% This is file `rename-to-empty-base.tex', %% generated with the docstrip utility. %% %% The original source files were: @@ -38,4 +38,4 @@ \message{File ignored} \endinput %% -%% End of file `.tex'. +%% End of file `rename-to-empty-base.tex'. diff --git a/Master/texmf-dist/tex/latex-dev/tools/array.sty b/Master/texmf-dist/tex/latex-dev/tools/array.sty index 5010b2f1b43..a190c9f7714 100644 --- a/Master/texmf-dist/tex/latex-dev/tools/array.sty +++ b/Master/texmf-dist/tex/latex-dev/tools/array.sty @@ -47,7 +47,7 @@ \NeedsTeXFormat{LaTeX2e}[2024/06/01] \ProvidesPackage{array} - [2024/05/23 v2.6c Tabular extension package (FMi)] + [2024/10/17 v2.6g Tabular extension package (FMi)] %% \ExplSyntaxOn @@ -96,15 +96,16 @@ \def\save@decl{\toks\count@ \expandafter{\@nextchar}} \def\insert@column{% \UseTaggingSocket{tbl/cell/begin}% - \the@toks \the \@tempcnta - \ignorespaces \@sharp \textonly@unskip + \@protected@firstofone { \the@toks \the \@tempcnta \ignorespaces } + \@sharp \textonly@unskip \the@toks \the \count@ \relax \UseTaggingSocket{tbl/cell/end}% } \protected\def\textonly@unskip{\ifhmode\unskip\fi} +\protected\long\def\@protected@firstofone#1{#1} \def\insert@pcolumn{% \UseTaggingSocket{tbl/pcell/begin}% - \the@toks \the \@tempcnta + \the@toks \the \@tempcnta \relax \ignorespaces \@sharp \unskip \the@toks \the \count@ \relax \UseTaggingSocket{tbl/pcell/end}% @@ -286,6 +287,7 @@ \let\@arrayacol=\relax \let\@tabacol=\relax \let\@tabularcr=\relax \let\@@endpbox=\relax \let\@argtabularcr=\relax \let\@xtabularcr=\relax +\ExplSyntaxOff \def\@preamerr#1{\def\@tempd{{..} at wrong position: }% \PackageError{array}{% \ifcase #1 Illegal pream-token (\@nextchar): `c' used\or %0 @@ -294,7 +296,6 @@ >\@tempd token ignored\or %3 <\@tempd changed to !{..}\or %4 Only one column-spec. allowed.\fi}\@ehc} %5 -\ExplSyntaxOff % this is really oldstyle using \@tfor := \def\newcolumntype#1{% \edef\NC@char{\string#1}% \@ifundefined{NC@find@\NC@char}% @@ -432,6 +433,23 @@ <{\d@llarend\end{lrbox}% \let\hss\hfil \makebox[#2][#1]{\unhbox\ar@cellbox}}} +\ExplSyntaxOn +\def\@cline#1-#2\@nil{ + \omit + \@multicnt#1 + \advance\@multispan\m@ne + \ifnum\@multicnt=\@ne\@firstofone{&\omit}\fi + \@multicnt#2 + \advance\@multicnt-#1 + \advance\@multispan\@ne + \UseTaggingSocket{tbl/leaders/begin} + \leaders\hrule\@height\arrayrulewidth\hfill + \UseTaggingSocket{tbl/leaders/end} + \tbl_gdecr_row_count: + \cr + \noalign{\vskip-\arrayrulewidth} +} +\ExplSyntaxOff \ExplSyntaxOff \endinput %% diff --git a/Master/texmf-dist/tex/latex-dev/tools/calc.sty b/Master/texmf-dist/tex/latex-dev/tools/calc.sty index 42526027853..dfb61a5b942 100644 --- a/Master/texmf-dist/tex/latex-dev/tools/calc.sty +++ b/Master/texmf-dist/tex/latex-dev/tools/calc.sty @@ -47,7 +47,7 @@ %% the normal LaTeX bug report address. \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{calc} - [2023/07/08 v4.3 Infix arithmetic (KKT,FJ)] + [2024/11/03 v4.3a Infix arithmetic (KKT,FJ)] \def\calc@assign@generic#1#2#3#4{\let\calc@A#1\let\calc@B#2% \calc@open(#4!% \global\calc@A\calc@B\endgroup#3\calc@B} @@ -277,7 +277,8 @@ {`#1' invalid at this point}% {I expected to see one of: + - * / )}} \def\@settodim#1#2#3{% - \setbox\@tempboxa\hbox{{#3}}% + \setbox\@tempboxa\hbox + {{\SuspendTagging{\@settodim}#3\ResumeTagging{\@settodim}}}% \dimen@ii=\z@ \@tf@r\reserved@a #1\do{% \advance\dimen@ii\reserved@a\@tempboxa}% diff --git a/Master/texmf-dist/tex/latex-dev/tools/longtable.sty b/Master/texmf-dist/tex/latex-dev/tools/longtable.sty index aa19b28096a..0bc422eb465 100644 --- a/Master/texmf-dist/tex/latex-dev/tools/longtable.sty +++ b/Master/texmf-dist/tex/latex-dev/tools/longtable.sty @@ -43,7 +43,7 @@ \DeclareCurrentRelease{}{2020-02-07} \ProvidesPackage{longtable} - [2024-04-26 v4.20 Multi-page Table package (DPC)] + [2024-10-27 v4.22 Multi-page Table package (DPC)] \def\LT@err{\PackageError{longtable}} \def\LT@warn{\PackageWarning{longtable}} \def\LT@final@warn{% @@ -65,6 +65,7 @@ \newcount\LTchunksize \LTchunksize=200 \let\c@LTchunksize\LTchunksize \newdimen\LTcapwidth \LTcapwidth=4in +\providecommand\LTcaptype{table} \newbox\LT@head \newbox\LT@firsthead \newbox\LT@foot @@ -73,6 +74,7 @@ \newcount\LT@cols \newcount\LT@rows \newcounter{LT@tables} +\providecommand\theHLT@tables{\theLT@tables} \newcounter{LT@chunks}[LT@tables] \ifx\c@table\undefined \newcounter{table} @@ -105,8 +107,14 @@ \ExplSyntaxOn \def\LT@array[#1]#2{% \UseTaggingSocket{tbl/init} - \@kernel@refstepcounter{table}\stepcounter{LT@tables} - \tl_gset:Ne \@currentHref {table.\cs_if_exist_use:N\theHtable} + \tl_if_empty:eTF { \LTcaptype } + { + \tl_gset:Ne \@currentHref {LT@tables.\theHLT@tables} + } + { + \@kernel@refstepcounter{\LTcaptype}\stepcounter{LT@tables} + \tl_gset:Ne \@currentHref {\LTcaptype.\cs_if_exist_use:c {theH\LTcaptype}} + } \tbl_gzero_row_count: \UseTaggingSocket{tbl/longtable/init} \if l#1% @@ -220,7 +228,13 @@ \dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@ \maxdepth\z@ \fi - \MakeLinkTarget{table} + \tl_if_empty:eTF{\LTcaptype} + { + \MakeLinkTarget{LT@tables} + } + { + \MakeLinkTarget{\LTcaptype} + } \ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi\nobreak \UseTaggingSocket{tbl/longtable/head} \output{\LT@output}} @@ -245,14 +259,20 @@ \ifx\LT@save@row\LT@@save@row \else \LT@warn{Column~ widths~ have~ changed\MessageBreak - in~ table~ \thetable}% + in~ + \tl_if_empty:eTF{\LTcaptype} + {longtable~ \theLT@tables} + {\LTcaptype\c_space_tl\use:c{the\LTcaptype}} + } \LT@final@warn \fi \endgraf\penalty -\LT@end@pen \ifvoid\LT@foot\else \global\advance\vsize\ht\LT@foot \global\advance\@colroom\ht\LT@foot - \dimen@\pagegoal\advance\dimen@\ht\LT@foot\pagegoal\dimen@ + \ifdim\pagegoal<\maxdimen + \dimen@\pagegoal\advance\dimen@\ht\LT@foot\pagegoal\dimen@ + \fi \fi \endgroup \global\@mparbottom\z@ @@ -431,17 +451,22 @@ \tbl_gdecr_row_count: \penalty\@M} \@gtempa} -\ExplSyntaxOff \def\LT@caption{% \noalign\bgroup \@ifnextchar[{\egroup\LT@c@ption\@firstofone}\LT@capti@n} -\def\LT@c@ption#1[#2]#3{% - \LT@makecaption#1\fnum@table{#3}% - \def\@tempa{#2}% - \ifx\@tempa\@empty\else - {\let\\\space - \addcontentsline{\ext@table}{table}{\protect\numberline{\thetable}{#2}}}% - \fi} +\def\LT@c@ption#1[#2]#3{ + \tl_if_empty:eTF{\LTcaptype} + {\LT@makecaption\@gobble{}{#3}} + {\LT@makecaption#1{\csname fnum@\LTcaptype\endcsname}{#3} + \def\@tempa{#2} + \ifx\@tempa\@empty\else + {\let\\\space + \addcontentsline + {\@nameuse{ext@\LTcaptype}} + {\LTcaptype} + {\protect\numberline{\@nameuse{the\LTcaptype}}{#2}}} + \fi}} +\ExplSyntaxOff \def\LT@capti@n{% \@ifstar {\egroup\LT@c@ption\@gobble[]}% @@ -506,6 +531,13 @@ { \crcr \noalign{ + \int_step_inline:nn + { \LT@rows } + { + \seq_gput_left:ce + {g__tbl_\cs_to_str:N #1 _rows_seq } + { \int_eval:n {\g__tbl_row_int - ##1 } } + } \tbl_gdecr_row_count: % undo the increment \int_gset:Nn \LT@rows { \LTchunksize } } diff --git a/Master/texmf-dist/tex/latex-dev/tools/multicol-2024-05-23.sty b/Master/texmf-dist/tex/latex-dev/tools/multicol-2024-05-23.sty new file mode 100644 index 00000000000..ebe9ea853a8 --- /dev/null +++ b/Master/texmf-dist/tex/latex-dev/tools/multicol-2024-05-23.sty @@ -0,0 +1,1144 @@ +%% +%% This is file `multicol.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% multicol.dtx (with options: `package,badness,check,marktrace,nobalance') +%% +%% This is a generated file. +%% +%% The source is maintained by the LaTeX Project team and bug +%% reports for it can be opened at https://latex-project.org/bugs/ +%% (but please observe conditions on bug reports sent to that address!) +%% +%% Copyright (C) 1993-2024 +%% The LaTeX Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file was generated from file(s) of the Standard LaTeX `Tools Bundle'. +%% -------------------------------------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% https://www.latex-project.org/lppl.txt +%% and version 1.3c or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This file may only be distributed together with a copy of the LaTeX +%% `Tools Bundle'. You may however distribute the LaTeX `Tools Bundle' +%% without such generated files. +%% +%% The list of all files belonging to the LaTeX `Tools Bundle' is +%% given in the file `manifest.txt'. +%% +%% Package `multicol' to use with LaTeX2e +%% Copyright 1989-2023 Frank Mittelbach +%% +%% In addition to the terms of LPPL any distributed version +%% (unchanged or modified) of multicol has to keep the statement +%% about the moral obligation for using multicol. In case of major +%% changes where this would not be appropriate the author of the +%% changed version should contact the copyright holder. +%% +%% +%% Moral obligation for using multicol: +%% ------------------------------------ +%% +%% Users of multicol who wish to include or use multicol or a modified +%% version in a proprietary and commercially market product are asked +%% under certain conditions (see below) for the payment of a license +%% fee. The size of this fee is to be determined, in each instance, +%% by the commercial user, depending on his/her judgment of the value of +%% multicol for his/her product. +%% +%% +%% The conditions for this are as follows: +%% +%% The producer of a proprietary and commercially market product +%% that involves typesetting using multicol is asked to determine +%% the value of a license fee for using multicol if +%% +%% - the product is a document and the producer has decided to +%% include multicol to typeset (parts of) the document or has +%% directed the author of the document to include multicol (for +%% example, by providing a class file to be used by the author) +%% +%% - the product is a LaTeX class or package that includes multicol +%% +%% +%% There is no moral obligation in case +%% +%% - the product is a document but producer has not directed +%% the author to include multicol (in that case the moral obligation +%% lies with the author of the document) +%% +%% - the product does not involve typesetting, e.g., consists, for +%% example, of distributing multicol and its documentation. +%% +%% - the product is not proprietary, i.e., is made available as free +%% software itself (which doesn't prohibit its commercial marketing) +%% +%% - multicol is used for non-commercial purposes +%% +%% +%% Determining a license fee might result in a license fee of zero +%% (i.e., no payment) in case a producer has determined that the use +%% of multicol has no enhancing effect on the product. This is a +%% plausible scenario, i.e., in the above two cases the producer is +%% only asked to evaluate the value of multicol for the product +%% not for the payment of a license fee per se (which might or might +%% not follow from this evaluation). +%% +%% The license fee, if any, can be payed either to the LaTeX fund +%% (see ltx3info.txt in the base LaTeX distribution) or to the author of +%% the program who can be contacted at +%% +%% Frank.Mittelbach@latex-project.org +%% + +\DeclareRelease{}{1994-06-01}{multicol-2017-04-11.sty} +\DeclareRelease{}{2017-04-11}{multicol-2017-04-11.sty} +\DeclareRelease{v1.8}{2019-10-01}{multicol-2019-10-01.sty} +\DeclareCurrentRelease{}{2021-11-15} + +\ProvidesPackage{multicol} + [2024/05/23 v1.9h multicolumn formatting (FMi)] +\DeclareOption{twocolumn} + {\PackageWarning{multicol}{May not work + with the twocolumn option}} +\newcount\c@tracingmulticols +\DeclareOption{errorshow} + {\c@tracingmulticols\z@} +\DeclareOption{infoshow} + {\c@tracingmulticols\@ne} +\DeclareOption{balancingshow} + {\c@tracingmulticols\tw@} +\DeclareOption{markshow} + {\c@tracingmulticols\thr@@} +\DeclareOption{debugshow} + {\c@tracingmulticols5\relax} +\let\mc@gridwarn\maxdimen +\DeclareOption{grid} + {\def\mc@gridwarn{\@maxdepth}} +\DeclareOption{colaction}{% + \def\mc@col@status@write{% + \protected@write\@auxout{}% + {\string\mc@col@status + {\ifmc@firstcol 1\else 2\fi}}% + \mc@firstcolfalse}% + \def\mc@lastcol@status@write{% + \protected@write\@auxout{}% + {\string\mc@col@status{3}}}% +} +\let\mc@col@status@write\relax +\let\mc@lastcol@status@write\relax +\ProcessOptions +\def\multicols#1{\col@number#1\relax + \ifnum\col@number<\tw@ + \PackageWarning{multicol}% + {Using `\number\col@number' + columns doesn't seem a good idea.^^J + I therefore use two columns instead}% + \col@number\tw@ \fi + \ifnum\col@number>20 + \PackageError{multicol}% + {Too many columns}% + {Current implementation doesn't + support more than 20 columns.% + \MessageBreak + I therefore use 20 columns instead}% + \col@number20 \fi + \ifx\@footnotetext\mult@footnotetext + \else + \let\orig@footnotetext\@footnotetext + \let\@footnotetext\mult@footnotetext + \fi + \@ifnextchar[\mult@cols{\mult@cols[]}} +\long\def\mult@footnotetext#1{\begingroup + \columnwidth\textwidth + \orig@footnotetext{#1}\endgroup} +\def\mult@cols[#1]{\@ifnextchar[% + {\mult@@cols{#1}}% + {\mult@@cols{#1}[\premulticols]}} +\def\mult@@cols#1[#2]{% + \par + \ifinner \@boxedmulticolstrue + \else + \ifnum \doublecol@number>\z@ + \@boxedmulticolstrue + \fi + \fi + \mult@info\z@ + {Starting environment with + \the\col@number\space columns% + \if@boxedmulticols\MessageBreak + (boxed mode)\fi + }% + \enough@room{#2}% + #1\par\addvspace\multicolsep + \ifdim \prevdepth = -\@m\p@ + \else + \@tempcnta\prevdepth + \@tempcntb\baselineskip + \divide\@tempcnta\@tempcntb + \advance\@tempcnta\@ne + \dimen@\prevdepth + \advance\dimen@ -\@tempcnta\baselineskip + \advance\dimen@ \topskip + \kern-\dimen@ + \fi + \begingroup + \prepare@multicols + \if@boxedmulticols + \setbox\mult@box\vbox\bgroup + \color@setgroup + \fi + \ignorespaces} +\newif\if@boxedmulticols +\@boxedmulticolsfalse +\newbox\mult@box +\def\enough@room#1{% + \if@boxedmulticols\else + \par + \bgroup\@nobreakfalse\addpenalty\z@\egroup + \page@free \pagegoal + \advance \page@free -\pagetotal + \@tempskipa#1\relax + \mult@info\z@ + {Current page:\MessageBreak + height=% + \the\pagegoal: used \the\pagetotal + \space -> free=\the\page@free + \MessageBreak + needed \the\@tempskipa + \space(for #1)}% + \ifdim \page@free <#1\newpage \fi + \fi} +\def\prepare@multicols{% + \multicol@leftmargin\@totalleftmargin + \@totalleftmargin\z@ + \parshape\z@ + \doublecol@number\col@number + \multiply\doublecol@number\tw@ + \advance\doublecol@number\mult@rightbox + \if@boxedmulticols + \let\l@kept@firstmark\kept@firstmark + \let\l@kept@botmark\kept@botmark + \global\let\kept@firstmark\@empty + \global\let\kept@botmark\@empty + \else + \nointerlineskip {\topskip\z@\null}% + \output{% + \global\setbox\partial@page\vbox + {% + \ifvoid\partial@page\else + \PackageError{multicol}% + {Error saving partial page}% + {The part of the page before + the multicols environment was + nearly full with^^Jthe result + that starting the environment + will produce an overfull + page. Some^^Jtext may be lost! + Please increase \premulticols + either generally or for this% + ^^Jenvironment by specifying a + suitable value in the second + optional argument to^^Jthe + multicols environment.} + \unvbox\partial@page + \box\last@line + \fi + \unvbox\@cclv + \global\setbox\last@line\lastbox + }% + \prep@keptmarks + \global\let\kept@topmark\firstmark + }\eject + \advance\@colroom-\ht\partial@page + \set@mult@vsize\relax + \output{\multi@column@out}% + \init@mult@footins + \reinsert@footnotes + \def\clearpage{% + \ifx\@deferlist\@empty\else + \PackageError{multicol}% + {Deferred floats not cleared}% + {A \string\clearpage\space inside + multicols acts like + \string\newpage\space and doesn't + clear floats.\MessageBreak + Move it before the multicols + environment if you need it.}% + \fi + \newpage}% + \fi + \vbadness\@Mi \hbadness5000 + \tolerance\multicoltolerance + \pretolerance\multicolpretolerance + \setemergencystretch\col@number\hsize + \set@floatcmds + \advance\baselineskip\multicolbaselineskip + \hsize\linewidth \advance\hsize\columnsep + \advance\hsize-\col@number\columnsep + \divide\hsize\col@number + \full@width\linewidth + \linewidth\hsize + \columnwidth\hsize +} +\def\init@mult@footins{% + \multiply\count\footins\col@number + \multiply\skip \footins\col@number +} +\def\set@mult@vsize#1{% + \vsize\@colroom + \@tempdima\baselineskip + \advance\@tempdima-\topskip + \advance\vsize\@tempdima + \vsize\col@number\vsize + \advance\vsize-\@tempdima + \advance\vsize\col@number\baselineskip + #1\advance\vsize + \c@collectmore\baselineskip} +\newdimen\multicol@leftmargin +\mathchardef\@Mvi=10006 % 10005 is + % \columnbreak +\def\endmulticols{\par + \if@boxedmulticols + \remove@discardable@items + \color@endgroup\egroup + \balance@columns + \return@nonemptymark{first}% + \kept@firstmark + \return@nonemptymark{bot}% + \kept@botmark + \global\setbox\mc@boxedresult\vbox{% + \page@sofar + \global\let\kept@firstmark + \l@kept@firstmark + \global\let\kept@botmark + \l@kept@botmark + }% + \mult@info\tw@ + {Restore kept marks to\MessageBreak + first: \meaning\kept@firstmark + \MessageBreak bot\space\space: + \meaning\kept@botmark }% + \else + \ifdim\pagegoal=\maxdimen + \ifvoid\colbreak@box\else + \mult@info\@ne{Re-adding forced + break(s) for splitting}% + \unvbox\colbreak@box\fi + \fi + \penalty\z@ + \penalty-\@Mvi + \ifvbox\partial@page + \unvbox\partial@page\fi + \global\let\kept@firstmark\@empty + \global\let\kept@botmark\@empty + \mult@info\tw@ + {Make kept marks empty}% + \fi + \@checkend{multicols}% + \endgroup + \global\c@unbalance\z@ + \if@boxedmulticols + \unvbox\mc@boxedresult + \mc@col@status@write + \else + \reinsert@footnotes + \ifdim \pagegoal=\maxdimen + \global\vsize\@colroom + \else + \enough@room\postmulticols + \fi + \fi + \addvspace\multicolsep + \prevdepth\z@ + \mult@info\z@ + {Ending environment + \if@boxedmulticols + \space(boxed mode)\fi + }} +\newcount\c@unbalance +\newcount\c@collectmore +\newcount\doublecol@number +\newcount\multicoltolerance +\newcount\multicolpretolerance +\newdimen\full@width +\newdimen\page@free +\newdimen\premulticols +\newdimen\postmulticols +\newskip\multicolsep +\newskip\multicolbaselineskip +\newbox\partial@page +\newbox\last@line +\newbox\mc@boxedresult +\c@unbalance = 0 +\c@collectmore = 0 +\multicoltolerance = 9999 +\multicolpretolerance = -1 +\premulticols = 50pt +\postmulticols= 20pt +\multicolsep = 12pt plus 4pt minus 3pt +\multicolbaselineskip=0pt +\def\process@cols#1#2{\count@#1\relax + \loop + #2% + \advance\count@\tw@ + \ifnum\count@<\doublecol@number + \repeat} +\def\page@sofar{% + \process@cols\mult@rightbox + {\ifvoid\count@ + \setbox\count@\hbox to\hsize{}% + \else + \wd\count@\hsize + \fi}% + \count@\col@number \advance\count@\m@ne + \mult@info\z@ + {Column spec: \the\full@width\space = indent + + columns + sep =\MessageBreak + \the\multicol@leftmargin\space + + \the\col@number\space + x \the\hsize\space + + \the\count@\space + x \the\columnsep + }% +\ifvmode\else\errmessage{Multicol Error}\fi + \nointerlineskip + \setbox\z@\hbox{\multicolmindepthstring}\global\dimen\tw@\dp\z@ + \moveright\multicol@leftmargin + \hbox to\full@width{% + \mc@align@columns + \rlap{\phantom \multicolmindepthstring}% + }% + \prevdepth\z@ + \kern-\dimen\tw@ + \ifdim\dimen\tw@ > \mc@gridwarn + \PackageWarning{multicol}% + {Very deep columns!\MessageBreak + Grid alignment might be broken}% + \fi +} +\def\multicolmindepthstring{p} +\def\columnseprulecolor{\normalcolor} +\def\reinsert@footnotes{\ifvoid\footins\else + \insert\footins{}\fi} +\def\vfilmaxdepth{\vskip \z@ \@plus .0001fil + \@minus \@maxdepth} +\def\multi@column@out{% + \ifnum\outputpenalty <-\@M + \speci@ls \else + \ifvoid\colbreak@box\else + \mult@info\@ne{Re-adding forced + break(s) for splitting}% + \setbox\@cclv\vbox{% + \unvbox\colbreak@box + \penalty-\@Mv + \unvbox\@cclv}% + \fi + \splittopskip\topskip + \splitmaxdepth\@maxdepth + \boxmaxdepth\@maxdepth + \dimen@\@colroom + \divide\skip\footins\col@number + \ifvoid\footins \else + \leave@mult@footins + \fi + \ifvbox \@kludgeins + \advance \dimen@ -\ht\@kludgeins + \ifdim \wd\@kludgeins>\z@ + \shr@nkingtrue + \fi + \fi + \process@cols\mult@firstbox{% + \setbox\count@ + \vsplit\@cclv to\dimen@ + \set@keptmarks + \setbox\count@ + \vbox to\dimen@ + {\unvbox\count@ + \ifshr@nking + \vfilmaxdepth\fi}% + }% + \setbox\mult@rightbox + \vsplit\@cclv to\dimen@ + \set@keptmarks + \setbox\mult@rightbox\vbox to\dimen@ + {\unvbox\mult@rightbox + \ifshr@nking\vfilmaxdepth\fi}% + \ifvoid\@cclv \else + \unvbox\@cclv + \ifnum\outputpenalty=\@M + \else + \penalty\outputpenalty + \fi + \ifvoid\footins\else + \PackageWarning{multicol}% + {I moved some lines to + the next page.\MessageBreak + Footnotes on page + \thepage\space might be wrong}% + \fi + \ifnum \c@tracingmulticols>\thr@@ + \hrule\allowbreak \fi + \fi + \ifx\@empty\kept@firstmark + \let\firstmark\kept@topmark + \let\botmark\kept@topmark + \else + \let\firstmark\kept@firstmark + \let\botmark\kept@botmark + \fi + \let\topmark\kept@topmark + \mult@info\tw@ + {Use kept top mark:\MessageBreak + \meaning\kept@topmark + \MessageBreak + Use kept first mark:\MessageBreak + \meaning\kept@firstmark + \MessageBreak + Use kept bot mark:\MessageBreak + \meaning\kept@botmark + \MessageBreak + Produce first mark:\MessageBreak + \meaning\firstmark + \MessageBreak + Produce bot mark:\MessageBreak + \meaning\botmark + \@gobbletwo}% + \boxmaxdepth\maxdimen + \setbox\@cclv\vbox{\unvbox\partial@page + \page@sofar}% + \@makecol\@outputpage + \global\let\kept@topmark\botmark + \global\let\kept@firstmark\@empty + \global\let\kept@botmark\@empty + \mult@info\tw@ + {(Re)Init top mark:\MessageBreak + \meaning\kept@topmark + \@gobbletwo}% + \global\@colroom\@colht + \global \@mparbottom \z@ + \global \@textfloatsheight \z@ + \process@deferreds + \@whilesw\if@fcolmade\fi{\@outputpage + \global\@colroom\@colht + \process@deferreds}% + \mult@info\@ne + {Colroom:\MessageBreak + \the\@colht\space + after float space removed + = \the\@colroom \@gobble}% + \set@mult@vsize \global + \fi} +\def\leave@mult@footins{% + \advance\dimen@-\skip\footins + \advance\dimen@-\ht\footins +} +\def\speci@ls{% + \ifnum\outputpenalty <-\@Mi + \ifnum \outputpenalty<-\@MM + \PackageError{multicol}{Document end + inside multicols environment}\@ehd + \@specialoutput + \else + \ifnum\outputpenalty = -\@Mv + \mult@info\@ne{Forced column + break seen}% + \global\advance\vsize-\pagetotal + \global\setbox\colbreak@box + \vbox{% + \ifvoid\colbreak@box + \else + \unvbox\colbreak@box + \penalty-\@Mv + \fi + \boxmaxdepth\@maxdepth + \setbox\@cclv\vbox{% + \unvbox\@cclv + \remove@discardable@items}% + \dimen@\dp\@cclv + \unvbox\@cclv + \kern-\dimen@ + }% + \reinsert@footnotes + \else + \ifnum\outputpenalty = -\@Mvi + \mult@info\@ne{End penalty of + multicols seen}% + \outputpenalty\@M % pretend we had + % a natural + % forced break + \balance@columns@out + \else + \PackageWarningNoLine{multicol}% + {Floats and marginpars not + allowed inside `multicols' + environment!}% + \unvbox\@cclv\reinsert@footnotes + \xdef\@freelist{\@freelist + \@currlist}% + \gdef\@currlist{}% + \fi + \fi + \fi + \else \@doclearpage \fi +} +\def\process@deferreds{% + \@floatplacement + \@tryfcolumn\@deferlist + \if@fcolmade\else + \begingroup + \let\@tempb\@deferlist + \gdef\@deferlist{}% + \let\@elt\@scolelt + \@tempb \endgroup + \fi} +\newif\ifshr@nking +\def\raggedcolumns{% + \@bsphack\shr@nkingtrue\@esphack} +\def\flushcolumns{% + \@bsphack\shr@nkingfalse\@esphack} +\def\balance@columns@out{% + \setbox\mult@box\vbox{% + \ifvoid\colbreak@box\else + \unvbox\colbreak@box + \penalty-\@Mv + \mult@info\@ne{Re-adding + forced break(s) in balancing}% + \fi + \unvbox\@cclv + \remove@discardable@items + }% + \balance@columns + \iftoo@bad + \mult@info\@ne + {Balancing failed ... + cut a normal page}% + \setbox\@cclv\vbox + {\vskip\topskip + \vskip-\splittopskip + \unvbox\mult@box + \penalty-\@Mvi + }% + \multi@column@out + \else + \global\vsize\@colroom + \global\advance\vsize\ht\partial@page + \ifvbox\@kludgeins + \insert\@kludgeins + {\unvbox\@kludgeins}\fi + \unvbox\partial@page + \return@nonemptymark{first}% + \kept@firstmark + \return@nonemptymark{bot}\kept@botmark + \page@sofar + \penalty\z@ + \fi +} +\def\balance@columns{% + \get@keptmarks\mult@box + \setbox\mult@box\vbox{% + \penalty-\@M + \unvbox\mult@box + }% + \@tempdima\topskip + \splittopskip\@tempdima + \@plus\multicolundershoot + \@minus\multicolovershoot + \splitmaxdepth\@maxdepth + \boxmaxdepth\@maxdepth + \setbox\@tempboxa\vsplit\mult@box to\z@ + \@tempdima\ht\mult@box + \advance\@tempdima\dp\mult@box + \divide\@tempdima\col@number + \count@\@tempdima + \divide\count@\baselineskip + \dimen@\count@\baselineskip + \advance\dimen@\topskip + \ifdim \dimen@ >\@tempdima + \advance\dimen@-\baselineskip + \fi + \@tempdima\dimexpr + \topskip +\c@minrows\baselineskip + -\baselineskip\relax + \ifnum\dimen@<\@tempdima + \mult@info\@ne + {Start value + \the\dimen@ \space -> + \the\@tempdima \space + (corrected for minrows)}% + \dimen@\@tempdima + \fi + \advance\dimen@\c@unbalance\baselineskip + \mult@info\@ne + {Balance columns\on@line: + \ifnum\c@unbalance=\z@\else + (off balance=\number\c@unbalance)\fi + \@gobbletwo}% + \ifnum\dimen@<\topskip + \mult@info\@ne + {Start value + \the\dimen@ \space -> + \the\topskip \space (corrected)}% + \dimen@\topskip + \fi + \vbadness\@M + \vfuzz \maxdimen + \last@try-\p@ + \loop + {\process@cols\mult@grightbox + {\global\setbox\count@ + \box\voidb@x}}% + \global\setbox\mult@grightbox + \copy\mult@box + \too@badfalse + \forcedbreak@leftoverfalse + {\process@cols\mult@gfirstbox{% + \global\setbox\count@ + \vsplit\mult@grightbox to\dimen@ + \global\setbox\count@ + \vbox to\dimen@ + {\unvbox\count@}% + \ifnum\c@tracingmulticols>\@ne + \@tempcnta\count@ + \advance\@tempcnta-\mult@grightbox + \divide\@tempcnta \tw@ + \message{^^JColumn + \number\@tempcnta\space + badness: \the\badness\space}% + \fi + \ifnum\badness>\c@columnbadness + \ifnum\c@tracingmulticols>\@ne + \message{too bad + (>\the\c@columnbadness)}% + \fi + \too@badtrue + \fi + }}% + \global\setbox\mult@grightbox + \vbox{\unvbox\mult@grightbox}% + \setbox\mult@nat@firstbox + \vbox{\unvcopy\mult@gfirstbox}% + \ifnum\c@tracingmulticols>\@ne + \message{^^JFirst column + = \the\dimen@\space + (\the\ht\mult@nat@firstbox)}\fi + \ifnum\c@tracingmulticols>\@ne + \message{<> last column = + \the\ht\mult@grightbox^^J}% + \fi + \ifdim\ht\mult@grightbox >\dimen@ + \too@badtrue + \ifnum\c@tracingmulticols>\@ne + \typeout{Rejected: last + column too large!}% + \fi + \else + \setbox\@tempboxa + \copy\mult@grightbox + \setbox\z@\vsplit\@tempboxa to\maxdimen + \ifvoid\@tempboxa + \global\setbox\mult@grightbox + \vbox to\dimen@ + {\unvbox\mult@grightbox}% + \ifnum\c@tracingmulticols>\@ne + \message{Final badness: + \the\badness}% + \fi + \ifnum\badness>\c@finalcolumnbadness + \global\setbox\mult@grightbox + \vbox to\dimen@ + {\unvbox\mult@grightbox\vfil}% + \ifnum\c@tracingmulticols>\@ne + \message{ setting natural + (> \the\c@finalcolumnbadness)}% + \fi + \fi + \else + \@tempdima\@colroom + \advance\@tempdima \maxbalancingoverflow + \ifdim \dimen@ < \@tempdima + \too@badtrue + \ifnum\c@tracingmulticols>\@ne + \typeout{Rejected: unprocessed + forced break(s) in last column!}% + \fi + \else + \forcedbreak@leftovertrue + \ifnum\c@tracingmulticols>\@ne + \typeout{Failed: columns too large + with unprocessed forced break(s)!}% + \fi + \fi + \fi + \fi + \ifdim\ht\mult@nat@firstbox<\dimen@ + \ifdim\ht\mult@nat@firstbox>\last@try + \too@badtrue + \ifnum\c@tracingmulticols>\@ne + \typeout{Retry: using natural + height of first column!}% + \fi + \dimen@\ht\mult@nat@firstbox + \last@try\dimen@ + \advance\dimen@-\p@ + \fi + \fi + \iftoo@bad + \advance\dimen@\p@ + \repeat + \ifforcedbreak@leftover + \too@badtrue + \else + \if@boxedmulticols\else + \ifdim\dimen@>\@colroom + \dimen@\@colroom + \fi + \fi + \process@cols\mult@rightbox + {\@tempcnta\count@ + \advance\@tempcnta\@ne + \vfuzz\z@ + \setbox\count@\vbox to\dimen@ + {% + \vskip \z@ + \@plus-\multicolundershoot + \@minus-\multicolovershoot + \unvbox\@tempcnta + \ifshr@nking\vfilmaxdepth\fi + }% + \ifnum\badness>\@M + \vfuzz\maxdimen % no overfull warning + \setbox\@tempboxa \vbox to\dimen@ + {\vskip-\maxbalancingoverflow + \unvcopy\count@}% + \ifnum\badness>\@M + \mult@info\@ne + {Balanced column more than + \the\maxbalancingoverflow\space + too large}% + \too@badtrue + \else + \mult@info\@ne + {Balanced column + too large, but less than + \the\maxbalancingoverflow}% + \fi + \fi + }% + \fi +} +\newdimen\maxbalancingoverflow +\maxbalancingoverflow=12pt + +\ifnum\numexpr + \count20-\count14-1<40 + % this is = 2 * 20 + \count14=\@cclv +\fi +\newbox\mult@rightbox +\newbox\mult@grightbox +\newbox\mult@firstbox +\newbox\mult@gfirstbox +\newbox\@tempa\newbox\@tempa +\newbox\@tempa\newbox\@tempa +\newbox\@tempa\newbox\@tempa +\newbox\@tempa\newbox\@tempa +\newbox\@tempa\newbox\@tempa +\newbox\@tempa\newbox\@tempa +\newbox\@tempa\newbox\@tempa +\newbox\@tempa\newbox\@tempa +\newbox\@tempa\newbox\@tempa +\newbox\@tempa\newbox\@tempa +\newbox\@tempa\newbox\@tempa +\newbox\@tempa\newbox\@tempa +\newbox\@tempa\newbox\@tempa +\newbox\@tempa\newbox\@tempa +\newbox\@tempa\newbox\@tempa +\newbox\@tempa\newbox\@tempa +\newbox\@tempa\newbox\@tempa +\newbox\@tempa\newbox\@tempa +\let\@tempa\relax +\@ifundefined{emergencystretch} + {\newdimen\emergencystretch}{} +\def\setemergencystretch#1#2{% + \emergencystretch 4pt + \multiply\emergencystretch#1} + +\def\set@floatcmds{% + \let\@dblfloat\@dbflt + \def\end@dblfloat{\@endfloatbox + \@largefloatcheck + \outer@nobreak + \ifnum\@floatpenalty<\z@ + \@cons\@deferlist\@currbox + \fi + \ifnum\@floatpenalty=-\@Mii + \@Esphack + \fi}} +\def\kept@topmark{{}{}} +\let\kept@firstmark\@empty +\let\kept@botmark\@empty +\def\return@nonemptymark#1#2{% + \ifx#2\@empty + \else + \mult@info\tw@ + {Returned #1 mark:\MessageBreak + \meaning#2}% + \toks@\expandafter{#2}% + \mark{\the\toks@}% + \nobreak + \fi} +\def\get@keptmarks#1{% + \begingroup + \vbadness\@M + \setbox#1\copy#1% + \mc@get@all@box@marks #1% + \set@keptmarks + \endgroup +} +\def\mc@get@all@box@marks #1{% + \setbox\@tempboxa\vsplit#1to\maxdimen + \ifvoid#1\else + \setbox#1\vbox{\unvbox\@tempboxa \unvbox#1}% + \mc@get@all@box@marks #1% + \fi +} +\def\set@keptmarks{% + \ifx\kept@firstmark\@empty + \expandafter\gdef\expandafter + \kept@firstmark + \expandafter{\splitfirstmark}% + \ifx\kept@firstmark\@empty\else + \mult@info\tw@ + {Set kept first mark:\MessageBreak + \meaning\kept@firstmark% + \@gobbletwo}% + \fi + \fi + \expandafter\def\expandafter\@tempa + \expandafter{\splitbotmark}% + \ifx\@tempa\@empty\else + \global\let\kept@botmark\@tempa + \mult@info\tw@ + {Set kept bot mark:\MessageBreak + \meaning\kept@botmark% + \@gobbletwo}% + \fi}% +\def\prep@keptmarks{% + \if@boxedmulticols \else + \get@keptmarks\partial@page + \fi} +\skip0=0pt +\edef\the@zero@skip{\the\skip0} +\def\remove@discardable@items{% + \unpenalty + \edef\@tempa{\the\lastskip}% + \unskip + \ifx\@tempa\the@zero@skip + \edef\@tempb{\the\lastskip}% + \ifx\@tempb\the@zero@skip + \else + \unskip + \ifnum \lastpenalty=\@M + \vskip\@tempb\vskip\@tempa\relax + \else + \remove@discardable@items + \fi + \fi + \else + \remove@discardable@items + \fi +} +\newif\iftoo@bad +\def\too@badtrue{\global\let\iftoo@bad\iftrue} +\def\too@badfalse{\global\let\iftoo@bad\iffalse} +\newif\ifforcedbreak@leftover +\newcount\c@minrows +\c@minrows=1 +\newcount\c@columnbadness +\c@columnbadness=10000 +\newcount\c@finalcolumnbadness +\c@finalcolumnbadness=9999 + +\newdimen\last@try + +\newdimen\multicolovershoot +\newdimen\multicolundershoot +\multicolovershoot=0pt +\multicolundershoot=2pt +\newbox\mult@nat@firstbox +\def\mult@info#1#2{% + \ifnum\c@tracingmulticols>#1% + \GenericWarning + {(multicol)\@spaces\@spaces}% + {Package multicol: #2}% + \fi +} + \@namedef{multicols*}{% + \ifinner + \PackageWarning{multicol}% + {multicols* inside a box does + not make sense.\MessageBreak + Going to balance anyway}% + \else + \def\balance@columns@out + {\multi@column@out \penalty-\@Mvi }% + \fi + \begin{multicols} +} +\@namedef{endmulticols*}{% + \par + \ifdim\lastskip>\z@ \vskip-\lastskip \fi + \ifdim \prevdepth>\z@ + \vskip-\ifdim\prevdepth>\boxmaxdepth + \boxmaxdepth + \else \prevdepth \fi + \fi + \ifshr@nking\else + \vfil + \fi + \end{multicols}} +\mathchardef\@Mv=10005 +\newcommand\columnbreak[1][4]{% + \ifnum\col@number<\tw@ + \PackageError{multicol}% + {\noexpand\columnbreak outside multicols}% + {This command can only be used within + a multicols or multicols* environment.}% + \else + \edef\mc@break@pen +{-\ifcase#1\@m\or 3333\or 6666\or 9999\else\@Mv\fi\relax}% + \ifvmode + \penalty \mc@break@pen + \else + \@bsphack + \vadjust{\penalty \mc@break@pen}% + \@esphack + \fi + \fi} +\newcommand\newcolumn{% + \ifnum\col@number<\tw@ + \PackageError{multicol}% + {\noexpand\newcolumn outside multicols}% + {This command can only be used within + a multicols or multicols* environment.}% + \else + \ifvmode + \nobreak\vfill\kern\z@\penalty -\@Mv\relax + \else + \@bsphack + \vadjust{\nobreak\vfill\kern\z@\penalty -\@Mv\relax}% + \@esphack + \fi + \fi} +\newbox\colbreak@box +\def\LR@column@boxes{% + \process@cols\mult@firstbox{% + \ifdim\dp\count@>\dimen\tw@ + \global\dimen\tw@\dp\count@ \fi + \mc@col@status@write + \box\count@ + \hss{\columnseprulecolor\vrule + \@width\columnseprule}\hss}% + \ifdim\dp\mult@rightbox>\dimen\tw@ + \global\dimen\tw@\dp\mult@rightbox \fi + \mc@lastcol@status@write + \box\mult@rightbox +} + +\def\RL@column@boxes{% + \process@cols\mult@firstbox{% + \hskip\hsize + \hss{\columnseprulecolor\vrule + \@width\columnseprule}\hss + }% + \hskip\hsize + \process@cols\mult@firstbox{% + \ifdim\dp\count@>\dimen\tw@ + \global\dimen\tw@\dp\count@ \fi + \hskip-\hsize + \mc@col@status@write + \box\count@ + \hskip-\hsize + \hskip-\columnsep + }% + \ifdim\dp\mult@rightbox>\dimen\tw@ + \global\dimen\tw@\dp\mult@rightbox \fi + \hskip-\hsize + \mc@lastcol@status@write + \box\mult@rightbox + \hskip-\hsize + \hskip\full@width + } +\newcommand\RLmulticolcolumns + {\let\mc@align@columns + \RL@column@boxes} +\newcommand\LRmulticolcolumns + {\let\mc@align@columns + \LR@column@boxes} +\LRmulticolcolumns +\newcount\mc@col@check@num + +\newcommand\docolaction{% + \ifx\mc@col@status@write\relax + \PackageError{multicol}% + {Option 'colaction' not selected}% + {\string\docolaction\space + requires the use of the 'colaction' + option on the package}% + \fi + \global\advance\mc@col@check@num\@ne + \edef\mc@col@type{\expandafter\ifx + \csname mc@col-\the\mc@col@check@num + \endcsname\relax + 0\else + \csname mc@col-\the\mc@col@check@num + \endcsname + \fi}% + \@ifstar + {\@docolactionstartrue \@docolaction}% + {\@docolactionstarfalse\@docolaction}% +} +\newcommand\@docolaction[4][1]{% + \edef\@docolactioncheck{\write\@auxout + {\string\mc@set@col@status + {mc@col-\the\mc@col@check@num}% + {\mc@col@type}}}% + \if@docolactionstar \@docolactioncheck \fi + \ifcase \mc@col@type\relax + \ifcase #1\or #2\or#3\or#4\fi + \or + #2% % 1 First col + \or + #3% % 2 any middle col + \or + #4% % 3 last col + \else + \ERRORwrongdefaultgiven + \fi + \if@docolactionstar \else \@docolactioncheck \fi +} +\newif\if@docolactionstar +\def\mc@col@status#1{% + \gdef\mc@curr@col@status{#1}} +\def\mc@set@col@status#1#2{% + \global\expandafter\let\csname #1\endcsname + \mc@curr@col@status} +\AtEndDocument{\def\mc@set@col@status#1#2{% + \ifnum #2=\mc@curr@col@status\else + \@tempswatrue + \fi}% +} +\newif\ifmc@firstcol +\mc@firstcoltrue +\endinput +%% +%% End of file `multicol.sty'. diff --git a/Master/texmf-dist/tex/latex-dev/tools/multicol.sty b/Master/texmf-dist/tex/latex-dev/tools/multicol.sty index ebe9ea853a8..3cc9d82e039 100644 --- a/Master/texmf-dist/tex/latex-dev/tools/multicol.sty +++ b/Master/texmf-dist/tex/latex-dev/tools/multicol.sty @@ -35,7 +35,7 @@ %% given in the file `manifest.txt'. %% %% Package `multicol' to use with LaTeX2e -%% Copyright 1989-2023 Frank Mittelbach +%% Copyright 1989-2024 Frank Mittelbach %% %% In addition to the terms of LPPL any distributed version %% (unchanged or modified) of multicol has to keep the statement @@ -92,7 +92,7 @@ %% not for the payment of a license fee per se (which might or might %% not follow from this evaluation). %% -%% The license fee, if any, can be payed either to the LaTeX fund +%% The license fee, if any, can be paid either to the LaTeX fund %% (see ltx3info.txt in the base LaTeX distribution) or to the author of %% the program who can be contacted at %% @@ -102,10 +102,12 @@ \DeclareRelease{}{1994-06-01}{multicol-2017-04-11.sty} \DeclareRelease{}{2017-04-11}{multicol-2017-04-11.sty} \DeclareRelease{v1.8}{2019-10-01}{multicol-2019-10-01.sty} +\DeclareRelease{v1.9}{2021-11-15}{multicol-2024-05-23.sty} \DeclareCurrentRelease{}{2021-11-15} \ProvidesPackage{multicol} - [2024/05/23 v1.9h multicolumn formatting (FMi)] + [2024/11/21 v2.0a multicolumn formatting (FMi)] + \DeclareOption{twocolumn} {\PackageWarning{multicol}{May not work with the twocolumn option}} @@ -117,9 +119,13 @@ \DeclareOption{balancingshow} {\c@tracingmulticols\tw@} \DeclareOption{markshow} - {\c@tracingmulticols\thr@@} + {\c@tracingmulticols\thr@@ + \DebugMarksOn + } \DeclareOption{debugshow} - {\c@tracingmulticols5\relax} + {\c@tracingmulticols5\relax + \DebugMarksOn + } \let\mc@gridwarn\maxdimen \DeclareOption{grid} {\def\mc@gridwarn{\@maxdepth}} @@ -224,11 +230,8 @@ \doublecol@number\col@number \multiply\doublecol@number\tw@ \advance\doublecol@number\mult@rightbox + \mc@prepare@mark@regions \if@boxedmulticols - \let\l@kept@firstmark\kept@firstmark - \let\l@kept@botmark\kept@botmark - \global\let\kept@firstmark\@empty - \global\let\kept@botmark\@empty \else \nointerlineskip {\topskip\z@\null}% \output{% @@ -255,9 +258,7 @@ \unvbox\@cclv \global\setbox\last@line\lastbox }% - \prep@keptmarks - \global\let\kept@topmark\firstmark - }\eject + }\eject \advance\@colroom-\ht\partial@page \set@mult@vsize\relax \output{\multi@column@out}% @@ -311,22 +312,12 @@ \remove@discardable@items \color@endgroup\egroup \balance@columns - \return@nonemptymark{first}% - \kept@firstmark - \return@nonemptymark{bot}% - \kept@botmark \global\setbox\mc@boxedresult\vbox{% + \mc@handle@marks@and@reinserts + {in multicol (boxed mode)}% \page@sofar - \global\let\kept@firstmark - \l@kept@firstmark - \global\let\kept@botmark - \l@kept@botmark + \mc@reinsert@marks }% - \mult@info\tw@ - {Restore kept marks to\MessageBreak - first: \meaning\kept@firstmark - \MessageBreak bot\space\space: - \meaning\kept@botmark }% \else \ifdim\pagegoal=\maxdimen \ifvoid\colbreak@box\else @@ -338,11 +329,7 @@ \penalty-\@Mvi \ifvbox\partial@page \unvbox\partial@page\fi - \global\let\kept@firstmark\@empty - \global\let\kept@botmark\@empty - \mult@info\tw@ - {Make kept marks empty}% - \fi + \fi \@checkend{multicols}% \endgroup \global\c@unbalance\z@ @@ -412,6 +399,7 @@ \ifvmode\else\errmessage{Multicol Error}\fi \nointerlineskip \setbox\z@\hbox{\multicolmindepthstring}\global\dimen\tw@\dp\z@ + \UseTaggingSocket{page@sofar}% \moveright\multicol@leftmargin \hbox to\full@width{% \mc@align@columns @@ -459,16 +447,14 @@ \process@cols\mult@firstbox{% \setbox\count@ \vsplit\@cclv to\dimen@ - \set@keptmarks - \setbox\count@ - \vbox to\dimen@ - {\unvbox\count@ - \ifshr@nking - \vfilmaxdepth\fi}% - }% + \setbox\count@ + \vbox to\dimen@ + {\unvbox\count@ + \ifshr@nking + \vfilmaxdepth\fi}% + }% \setbox\mult@rightbox \vsplit\@cclv to\dimen@ - \set@keptmarks \setbox\mult@rightbox\vbox to\dimen@ {\unvbox\mult@rightbox \ifshr@nking\vfilmaxdepth\fi}% @@ -488,41 +474,15 @@ \ifnum \c@tracingmulticols>\thr@@ \hrule\allowbreak \fi \fi - \ifx\@empty\kept@firstmark - \let\firstmark\kept@topmark - \let\botmark\kept@topmark - \else - \let\firstmark\kept@firstmark - \let\botmark\kept@botmark - \fi - \let\topmark\kept@topmark - \mult@info\tw@ - {Use kept top mark:\MessageBreak - \meaning\kept@topmark - \MessageBreak - Use kept first mark:\MessageBreak - \meaning\kept@firstmark - \MessageBreak - Use kept bot mark:\MessageBreak - \meaning\kept@botmark - \MessageBreak - Produce first mark:\MessageBreak - \meaning\firstmark - \MessageBreak - Produce bot mark:\MessageBreak - \meaning\botmark - \@gobbletwo}% \boxmaxdepth\maxdimen - \setbox\@cclv\vbox{\unvbox\partial@page - \page@sofar}% + \setbox\@cclv\vbox + {% + \mc@handle@col@andpage@marks + {in multicol OR (full page)}% + \unvbox\partial@page + \page@sofar + }% \@makecol\@outputpage - \global\let\kept@topmark\botmark - \global\let\kept@firstmark\@empty - \global\let\kept@botmark\@empty - \mult@info\tw@ - {(Re)Init top mark:\MessageBreak - \meaning\kept@topmark - \@gobbletwo}% \global\@colroom\@colht \global \@mparbottom \z@ \global \@textfloatsheight \z@ @@ -635,15 +595,15 @@ \insert\@kludgeins {\unvbox\@kludgeins}\fi \unvbox\partial@page - \return@nonemptymark{first}% - \kept@firstmark - \return@nonemptymark{bot}\kept@botmark + % \begin{macrocode} + \mc@handle@marks@and@reinserts + {in multicol OR (balancing)}% \page@sofar + \mc@reinsert@marks \penalty\z@ \fi } \def\balance@columns{% - \get@keptmarks\mult@box \setbox\mult@box\vbox{% \penalty-\@M \unvbox\mult@box @@ -875,6 +835,7 @@ \def\set@floatcmds{% \let\@dblfloat\@dbflt \def\end@dblfloat{\@endfloatbox + \UseTaggingSocket{float/end}% \@largefloatcheck \outer@nobreak \ifnum\@floatpenalty<\z@ @@ -882,60 +843,8 @@ \fi \ifnum\@floatpenalty=-\@Mii \@Esphack + \UseTaggingSocket{float/hmode/end}% \fi}} -\def\kept@topmark{{}{}} -\let\kept@firstmark\@empty -\let\kept@botmark\@empty -\def\return@nonemptymark#1#2{% - \ifx#2\@empty - \else - \mult@info\tw@ - {Returned #1 mark:\MessageBreak - \meaning#2}% - \toks@\expandafter{#2}% - \mark{\the\toks@}% - \nobreak - \fi} -\def\get@keptmarks#1{% - \begingroup - \vbadness\@M - \setbox#1\copy#1% - \mc@get@all@box@marks #1% - \set@keptmarks - \endgroup -} -\def\mc@get@all@box@marks #1{% - \setbox\@tempboxa\vsplit#1to\maxdimen - \ifvoid#1\else - \setbox#1\vbox{\unvbox\@tempboxa \unvbox#1}% - \mc@get@all@box@marks #1% - \fi -} -\def\set@keptmarks{% - \ifx\kept@firstmark\@empty - \expandafter\gdef\expandafter - \kept@firstmark - \expandafter{\splitfirstmark}% - \ifx\kept@firstmark\@empty\else - \mult@info\tw@ - {Set kept first mark:\MessageBreak - \meaning\kept@firstmark% - \@gobbletwo}% - \fi - \fi - \expandafter\def\expandafter\@tempa - \expandafter{\splitbotmark}% - \ifx\@tempa\@empty\else - \global\let\kept@botmark\@tempa - \mult@info\tw@ - {Set kept bot mark:\MessageBreak - \meaning\kept@botmark% - \@gobbletwo}% - \fi}% -\def\prep@keptmarks{% - \if@boxedmulticols \else - \get@keptmarks\partial@page - \fi} \skip0=0pt \edef\the@zero@skip{\the\skip0} \def\remove@discardable@items{% @@ -1139,6 +1048,102 @@ } \newif\ifmc@firstcol \mc@firstcoltrue +\ExplSyntaxOn +\int_new:N \g__mc_curr_col_int +\cs_new:Npn \__mc_debug_marks:n #1 { \__mark_debug:n {#1} } +\cs_new_protected:Npn \__mc_update_mcol_structures: { + \__mc_debug_marks:n + { \typeout{Marks:~ update~ mcol~ structures~ (multicol)} } + \int_step_inline:nnn {\col@number + 1} { \g__mc_curr_col_int } + { \mark_set_structure_to_err:n { mcol - ##1 } } + \int_gset:Nn \g__mc_curr_col_int {1} + \process@cols\mult@firstbox + { + \mark_update_structure_from_material:nn + {column} + {\unvcopy\count@} + \mark_copy_structure:nn + {mcol - \int_use:N\g__mc_curr_col_int } + {column} + \int_gincr:N \g__mc_curr_col_int + } + \mark_update_structure_from_material:nn + {column} + {\unvcopy\mult@rightbox} + \mark_copy_structure:nn + { mcol - \int_use:N\g__mc_curr_col_int } + {column} + \mark_copy_structure:nn{first-column}{mcol-1} + \mark_copy_structure:nn{last-column} {column} +} + +\cs_new_protected:Npn \__mc_update_page_structures: { + \__mc_debug_marks:n + { + \typeout{Marks:~ update~ page~ structure~ (multicol)} + } + \mark_update_structure_from_material:nn + {page} + { + \unvcopy\partial@page + \process@cols \mult@firstbox { \unvcopy\count@ } + \unvcopy\mult@rightbox + } +} + +\cs_new_protected:Npn \__mc_prepare_mark_reinserts: { + \__mc_debug_marks:n + { \typeout{Marks:~ prepare~ for~ reinserting~ marks~ (multicol)} } + \mark_get_marks_for_reinsertion:nNN + { + \process@cols \mult@firstbox { \unvcopy\count@ } + \unvcopy\mult@rightbox + } + \l__mc_first_marks_tl + \l__mc_last_marks_tl +} +\tl_new:N \l__mc_first_marks_tl +\tl_new:N \l__mc_last_marks_tl +\cs_new_protected:Npn \mc@reinsert@marks{ + \__mc_debug_marks:n + { \typeout{Marks:~ --~ reinsert~ marks~ (multicol)} } + \l__mc_first_marks_tl \l__mc_last_marks_tl + \__mc_debug_marks:n + { \typeout{Marks:~ --~ finished~ reinserting~ marks~ (multicol)} } +} +\cs_new_protected:Npn \mc@prepare@mark@regions { + \legacy_if:nT { @boxedmulticols } + { \mark_copy_structure:nn{saved-column}{column} } + \__mc_debug_marks:n + { \typeout{Marks:~ empty~ mcol~ regions~ (multicol)} } + \mark_clear_structure:n {column} +} +\cs_new_protected:Npn \mc@handle@marks@and@reinserts #1 { + \__mc_update_mcol_structures: + \__mc_debug_marks:n { \__mark_status:nn {#1} {\the\col@number} } + \__mc_prepare_mark_reinserts: + \legacy_if:nT { @boxedmulticols } + { \mark_copy_structure:nn {column}{saved-column} } +} + +\cs_new_protected:Npn \mc@handle@col@andpage@marks #1 { + \__mc_update_mcol_structures: + \__mc_update_page_structures: + \__mc_debug_marks:n { \__mark_status:nn {#1} {\the\col@number} } +} +\cs_set:Npn \leftmark {\mark_use_last:nn{page}{2e-left}} +\cs_set:Npn \rightmark {\mark_use_first:nn{page}{2e-right}} +\NewSocket{tagsupport/page@sofar}{0} +\NewSocketPlug {tagsupport/page@sofar}{default} + { + \process@cols\mult@firstbox + { \tag_mc_add_missing_to_stream:Nn \count@ {multicol} } + \tag_mc_add_missing_to_stream:Nn \mult@rightbox {multicol} + } +\sys_if_engine_luatex:TF + { \AssignSocketPlug{tagsupport/page@sofar}{noop} } + { \AssignSocketPlug{tagsupport/page@sofar}{default} } +\ExplSyntaxOff \endinput %% %% End of file `multicol.sty'. diff --git a/Master/texmf-dist/tex/latex-dev/tools/thb.sty b/Master/texmf-dist/tex/latex-dev/tools/thb.sty index 7d78943b773..c7c01d6d8f8 100644 --- a/Master/texmf-dist/tex/latex-dev/tools/thb.sty +++ b/Master/texmf-dist/tex/latex-dev/tools/thb.sty @@ -36,7 +36,7 @@ %% given in the file `manifest.txt'. %% %% -\def\FMithmInfo{2023/07/05 v2.2c Theorem extension package (FMi)} +\def\FMithmInfo{2024/08/06 v2.2c Theorem extension package (FMi)} %% %% Package `theorem' to use with LaTeX2e %% Copyright (C) 1989-1995 Frank Mittelbach, all rights reserved. diff --git a/Master/texmf-dist/tex/latex-dev/tools/thc.sty b/Master/texmf-dist/tex/latex-dev/tools/thc.sty index 7819ee2f44f..77b0c88c478 100644 --- a/Master/texmf-dist/tex/latex-dev/tools/thc.sty +++ b/Master/texmf-dist/tex/latex-dev/tools/thc.sty @@ -36,7 +36,7 @@ %% given in the file `manifest.txt'. %% %% -\def\FMithmInfo{2023/07/05 v2.2c Theorem extension package (FMi)} +\def\FMithmInfo{2024/08/06 v2.2c Theorem extension package (FMi)} %% %% Package `theorem' to use with LaTeX2e %% Copyright (C) 1989-1995 Frank Mittelbach, all rights reserved. diff --git a/Master/texmf-dist/tex/latex-dev/tools/thcb.sty b/Master/texmf-dist/tex/latex-dev/tools/thcb.sty index d05f9459ae2..e02fb365d80 100644 --- a/Master/texmf-dist/tex/latex-dev/tools/thcb.sty +++ b/Master/texmf-dist/tex/latex-dev/tools/thcb.sty @@ -36,7 +36,7 @@ %% given in the file `manifest.txt'. %% %% -\def\FMithmInfo{2023/07/05 v2.2c Theorem extension package (FMi)} +\def\FMithmInfo{2024/08/06 v2.2c Theorem extension package (FMi)} %% %% Package `theorem' to use with LaTeX2e %% Copyright (C) 1989-1995 Frank Mittelbach, all rights reserved. diff --git a/Master/texmf-dist/tex/latex-dev/tools/theorem.sty b/Master/texmf-dist/tex/latex-dev/tools/theorem.sty index 565fe7344b0..474a44eacca 100644 --- a/Master/texmf-dist/tex/latex-dev/tools/theorem.sty +++ b/Master/texmf-dist/tex/latex-dev/tools/theorem.sty @@ -36,7 +36,7 @@ %% given in the file `manifest.txt'. %% %% -\def\FMithmInfo{2023/07/05 v2.2c Theorem extension package (FMi)} +\def\FMithmInfo{2024/08/06 v2.2c Theorem extension package (FMi)} %% %% Package `theorem' to use with LaTeX2e %% Copyright (C) 1989-1995 Frank Mittelbach, all rights reserved. diff --git a/Master/texmf-dist/tex/latex-dev/tools/thm.sty b/Master/texmf-dist/tex/latex-dev/tools/thm.sty index 26474e89142..18837285335 100644 --- a/Master/texmf-dist/tex/latex-dev/tools/thm.sty +++ b/Master/texmf-dist/tex/latex-dev/tools/thm.sty @@ -36,7 +36,7 @@ %% given in the file `manifest.txt'. %% %% -\def\FMithmInfo{2023/07/05 v2.2c Theorem extension package (FMi)} +\def\FMithmInfo{2024/08/06 v2.2c Theorem extension package (FMi)} %% %% Package `theorem' to use with LaTeX2e %% Copyright (C) 1989-1995 Frank Mittelbach, all rights reserved. diff --git a/Master/texmf-dist/tex/latex-dev/tools/thmb.sty b/Master/texmf-dist/tex/latex-dev/tools/thmb.sty index eb8cdc7e396..d5f9b089190 100644 --- a/Master/texmf-dist/tex/latex-dev/tools/thmb.sty +++ b/Master/texmf-dist/tex/latex-dev/tools/thmb.sty @@ -36,7 +36,7 @@ %% given in the file `manifest.txt'. %% %% -\def\FMithmInfo{2023/07/05 v2.2c Theorem extension package (FMi)} +\def\FMithmInfo{2024/08/06 v2.2c Theorem extension package (FMi)} %% %% Package `theorem' to use with LaTeX2e %% Copyright (C) 1989-1995 Frank Mittelbach, all rights reserved. diff --git a/Master/texmf-dist/tex/latex-dev/tools/thp.sty b/Master/texmf-dist/tex/latex-dev/tools/thp.sty index 1fc19ff5a99..16f97840d6a 100644 --- a/Master/texmf-dist/tex/latex-dev/tools/thp.sty +++ b/Master/texmf-dist/tex/latex-dev/tools/thp.sty @@ -36,7 +36,7 @@ %% given in the file `manifest.txt'. %% %% -\def\FMithmInfo{2023/07/05 v2.2c Theorem extension package (FMi)} +\def\FMithmInfo{2024/08/06 v2.2c Theorem extension package (FMi)} %% %% Package `theorem' to use with LaTeX2e %% Copyright (C) 1989-1995 Frank Mittelbach, all rights reserved. |