summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex-dev/base/latexrelease.sty')
-rw-r--r--Master/texmf-dist/tex/latex-dev/base/latexrelease.sty746
1 files changed, 633 insertions, 113 deletions
diff --git a/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty b/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty
index 9ada4b71c40..c8776b66f93 100644
--- a/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty
+++ b/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty
@@ -15,6 +15,7 @@
%% ltcmd.dtx (with options: `latexrelease')
%% lthooks.dtx (with options: `latexrelease')
%% ltcmdhooks.dtx (with options: `latexrelease')
+%% ltsockets.dtx (with options: `latexrelease')
%% ltalloc.dtx (with options: `latexrelease')
%% ltcntrl.dtx (with options: `latexrelease')
%% lterror.dtx (with options: `latexrelease')
@@ -37,6 +38,7 @@
%% lttextcomp.dtx (with options: `latexrelease')
%% ltpageno.dtx (with options: `latexrelease')
%% ltxref.dtx (with options: `latexrelease')
+%% ltproperties.dtx (with options: `latexrelease')
%% ltmiscen.dtx (with options: `latexrelease')
%% ltmath.dtx (with options: `latexrelease')
%% ltlists.dtx (with options: `latexrelease')
@@ -1986,8 +1988,8 @@ of this package available from CTAN}
\EndIncludeInRelease
%%% From File: ltcmd.dtx
-\def\ltcmdversion{v1.1e}
-\def\ltcmddate{2023-05-26}
+\def\ltcmdversion{v1.2a}
+\def\ltcmddate{2023-08-19}
\edef\@latexrelease@catcode@null{\the\catcode`\^^@ }
\catcode`\^^@=12
\ExplSyntaxOn
@@ -4248,68 +4250,6 @@ of this package available from CTAN}
\exp_after:wN #1 \exp_after:wN #2 \exp_after:wN { \if_false: } \fi:
}
-\cs_new_protected:Npn \__cmd_get_arg_spec_error:N #1
- {
- \bool_set_false:N \l__cmd_environment_bool
- \tl_set:Nn \l__cmd_fn_tl {#1}
- \__cmd_get_arg_spec_error_aux:n { \cs_if_exist:NTF #1 }
- }
-\cs_new_protected:Npn \__cmd_get_arg_spec_error:n #1
- {
- \bool_set_true:N \l__cmd_environment_bool
- \str_set:Nx \l__cmd_environment_str {#1}
- \__cmd_get_arg_spec_error_aux:n
- { \cs_if_exist:cTF { \l__cmd_environment_str } }
- }
-\cs_new_protected:Npn \__cmd_get_arg_spec_error_aux:n #1
- {
- #1
- {
- \msg_error:nnx { cmd } { non-xparse }
- { \__cmd_environment_or_command: }
- }
- {
- \msg_error:nnx { cmd } { unknown }
- { \__cmd_environment_or_command: }
- }
- }
-\cs_new_protected:Npn \__cmd_get_arg_spec:NTF #1#2#3
- {
- \__kernel_cmd_if_xparse:NTF #1
- {
- \tl_set:Nx \ArgumentSpecification { \tl_item:Nn #1 { 2 } }
- #2
- }
- {#3}
- }
-\cs_new_eq:NN \__cmd_chk_if_free_cs:N \__kernel_chk_if_free_cs:N
-\cs_gset_eq:NN \__kernel_chk_if_free_cs:N \use_none:n
-\tl_new:N \ArgumentSpecification
-\cs_new_protected:Npn \__cmd_get_arg_spec:N #1
- {
- \__cmd_get_arg_spec:NTF #1 { }
- { \__cmd_get_arg_spec_error:N #1 }
- }
-\cs_new_protected:Npn \__cmd_get_arg_spec:n #1
- {
- \exp_args:Nc \__cmd_get_arg_spec:NTF
- { environment~ \tl_to_str:n {#1} }
- { }
- { \__cmd_get_arg_spec_error:n {#1} }
- }
-\cs_new_protected:Npn \__cmd_show_arg_spec:N #1
- {
- \__cmd_get_arg_spec:NTF #1
- { \tl_show:N \ArgumentSpecification }
- { \__cmd_get_arg_spec_error:N #1 }
- }
-\cs_new_protected:Npn \__cmd_show_arg_spec:n #1
- {
- \exp_args:Nc \__cmd_get_arg_spec:NTF
- { environment~ \tl_to_str:n {#1} }
- { \tl_show:N \ArgumentSpecification }
- { \__cmd_get_arg_spec_error:n {#1} }
- }
\cs_new_protected:Npn \__cmd_check_definable:nNT #1
{ \tl_trim_spaces_apply:nN {#1} \__cmd_check_definable_aux:nN }
\group_begin:
@@ -4641,12 +4581,6 @@ of this package available from CTAN}
LaTeX~did~not~find~this~argument~and~will~insert~a~default~value~
for~further~processing.
}
-\msg_new:nnnn { cmd } { non-xparse }
- { \str_uppercase:n #1~not~defined~using~xparse. }
- {
- You~have~asked~for~the~argument~specification~for~the~#1,~
- but~this~was~not~defined~using~xparse.
- }
\msg_new:nnnn { cmd } { arg-split }
{ Too~many~'#1'~separators~in~argument. }
{
@@ -4654,12 +4588,6 @@ of this package available from CTAN}
at~each~occurrence~of~the~separator~'#1'~into~#2~parts.~
Too~many~separators~were~found.
}
-\msg_new:nnnn { cmd } { unknown }
- { Unknown~document~#1. }
- {
- You~have~asked~for~the~argument~specification~for~the~#1,~
- but~it~is~not~defined.
- }
\msg_new:nnnn { cmd } { verbatim-nl }
{ Verbatim-like~#1~ended~by~end~of~line. }
{
@@ -4860,18 +4788,6 @@ of this package available from CTAN}
\cs_new_eq:NN \SplitList \__cmd_split_list:nn
\cs_new_eq:NN \TrimSpaces \__cmd_trim_spaces:n
\cs_new_eq:NN \ProcessList \tl_map_function:nN
-\cs_new_protected:Npn \GetDocumentCommandArgSpec #1
- {
- \__cmd_check_definable:nNT {#1} \GetDocumentCommandArgSpec
- { \__cmd_get_arg_spec:N #1 }
- }
-\cs_new_eq:NN \GetDocumentEnvironmentArgSpec \__cmd_get_arg_spec:n
-\cs_new_protected:Npn \ShowDocumentCommandArgSpec #1
- {
- \__cmd_check_definable:nNT {#1} \ShowDocumentCommandArgSpec
- { \__cmd_show_arg_spec:N #1 }
- }
-\cs_new_eq:NN \ShowDocumentEnvironmentArgSpec \__cmd_show_arg_spec:n
\cs_gset_eq:NN \__kernel_chk_if_free_cs:N \__cmd_chk_if_free_cs:N
\cs_undefine:N \__cmd_chk_if_free_cs:N
@@ -4884,8 +4800,8 @@ of this package available from CTAN}
\catcode`\^^@=\@latexrelease@catcode@null\relax
%%% From File: lthooks.dtx
-\def\lthooksversion{v1.1e}
-\def\lthooksdate{2023/06/06}
+\def\lthooksversion{v1.1f}
+\def\lthooksdate{2023/08/11}
\ExplSyntaxOn
\NewModuleRelease{2020/10/01}{lthooks}
{The~hook~management~system}
@@ -5367,7 +5283,7 @@ of this package available from CTAN}
}
{ \tl_gset:Nn \g__hook_hook_curr_name_tl {#1} }
}
-\IncludeInRelease{2023/06/01}{\hook_gput_code_with_args:nnn}
+\IncludeInRelease{2023/06/01}{\hook_gput_code:nnn}
{Hooks~with~args}
\cs_new_protected:Npn \hook_gput_code:nnn #1 #2 #3
{
@@ -5844,7 +5760,7 @@ of this package available from CTAN}
}
}
\EndIncludeInRelease
-\IncludeInRelease{2023/06/01}{\hook_gremove_code:nn}
+\IncludeInRelease{2020/10/01}{\hook_gremove_code:nn}
{Hooks~with~args}
\cs_new_protected:Npn \__hook_gremove_code:nn #1 #2
{
@@ -6302,6 +6218,8 @@ of this package available from CTAN}
\cs_gset_eq:NN \hook_use:n \__hook_use_initialized:n
\cs_gset_eq:NN \__hook_preamble_hook:n \use_none:n
}
+\cs_gset_eq:NN \@expl@@@initialize@all@@
+ \__hook_initialize_all:
\EndIncludeInRelease
\IncludeInRelease{2023/06/01}{\__hook_initialize_hook_code:n}
{Hooks~with~args}
@@ -7511,7 +7429,7 @@ of this package available from CTAN}
\NewDocumentCommand \NewMirroredHookPairWithArguments { mmm }
{ \hook_new_pair_with_args:nnn {#1} {#2} {#3} }
\EndIncludeInRelease
-\IncludeInRelease{2023/06/01}{\NewHookWithArguments}
+\IncludeInRelease{2020/10/01}{\NewHookWithArguments}
{Hooks~with~args}
\cs_new_protected:Npn \NewHookWithArguments #1 #2 { }
\cs_new_protected:Npn \NewReversedHookWithArguments #1 #2 { }
@@ -7736,8 +7654,8 @@ of this package available from CTAN}
%% Copyright (C) 2020-2023
%% Frank Mittelbach, Phelype Oleinik, The LaTeX Project
%%% From File: ltcmdhooks.dtx
-\def\ltcmdhooksversion{v1.0h}
-\def\ltcmdhooksdate{2023/05/21}
+\def\ltcmdhooksversion{v1.0i}
+\def\ltcmdhooksdate{2023/06/16}
\ExplSyntaxOn
\NewModuleRelease{2021/06/01}{ltcmdhooks}
{The~hook~management~system~for~commands}
@@ -8305,10 +8223,10 @@ of this package available from CTAN}
\cs_gset_eq:NN #1 \kerneltmpDoNotUse
}
\EndIncludeInRelease
-\IncludeInRelease{2021/11/15}{wrong-cmd-hook}%
+\IncludeInRelease{2023/06/01}{wrong-cmd-hook}%
{Standardise~generic~hook~names}
\EndIncludeInRelease
-\IncludeInRelease{2021/11/15}{wrong-cmd-hook}%
+\IncludeInRelease{2021/06/01}{wrong-cmd-hook}%
{Standardise~generic~hook~names}
\msg_new:nnnn { hooks } { wrong-cmd-hook }
{
@@ -8346,6 +8264,198 @@ of this package available from CTAN}
\EndModuleRelease
\ExplSyntaxOff
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% From File: ltsockets.dtx
+\def\ltsocketsversion{0.9a}
+\def\ltsocketsdate{2023-08-21}
+\ExplSyntaxOn
+\NewModuleRelease{2023/11/01}{ltsockets}
+ {The~socket~management~system}
+\bool_new:N \g__socket_debug_bool
+\cs_new_eq:NN \__socket_debug:n \use_none:n
+\cs_new_eq:NN \__socket_debug_term:n \use_none:n
+\cs_new_protected:Npn \socket_debug_on:
+ {
+ \bool_gset_true:N \g__socket_debug_bool
+ \__socket_debug_gset:
+ }
+\cs_new_protected:Npn \socket_debug_off:
+ {
+ \bool_gset_false:N \g__socket_debug_bool
+ \__socket_debug_gset:
+ }
+\cs_new_protected:Npn \__socket_debug_gset:
+ {
+ \cs_gset_protected:Npx \__socket_debug:n ##1
+ { \bool_if:NT \g__socket_debug_bool {##1} }
+ \cs_gset_protected:Npx \__socket_debug_term:n ##1
+ { \bool_if:NT \g__socket_debug_bool
+ { \iow_term:x { ^^J [Sockets]~ ==>~ ##1} } }
+ }
+\cs_new_protected:Npn \socket_new:nn #1 #2 {
+ \str_if_exist:cTF { l__socket_#1_plug_str }
+ {
+ \msg_error:nnn { socket } { already-declared } {#1}
+ }
+ {
+ \int_if_zero:nTF \tex_currentgrouplevel:D
+ {
+ \str_new:c { l__socket_#1_plug_str }
+ \seq_new:c { l__socket_#1_plugs_seq }
+ \int_const:cn { c__socket_#1_args_int } {#2}
+ \socket_new_plug:nnn {#1} { noop } {}
+ \int_compare:nNnTF {#2} = 1
+ {
+ \socket_new_plug:nnn {#1} { identity } {##1}
+ \socket_assign_plug:nn {#1} { identity }
+ }
+ { \socket_assign_plug:nn {#1} { noop } }
+ \__socket_debug_term:n
+ { Socket~ '#1'~ declared~ with~ #2~ input(s) }
+ }
+ {
+ \msg_error:nn { socket } { not-top-level }
+ }
+ }
+}
+\cs_new_protected:Npn \socket_log:n #1 {
+ \typeout{ Socket~ #1:}
+ \str_if_exist:cTF { l__socket_#1_plug_str }
+ {
+ \typeout{ \@spaces number~ of~ inputs~ =~
+ \int_use:c { c__socket_#1_args_int } }
+ \typeout{ \@spaces available~plugs~ =~
+ \seq_use:cnnn { l__socket_#1_plugs_seq }{,~}{,~}{,~} }
+ \typeout{ \@spaces current~ plug~ =~
+ \str_use:c { l__socket_#1_plug_str } }
+ \typeout{ \@spaces definition~ =~
+ \cs_meaning:c
+ { __socket_#1_plug_ \str_use:c { l__socket_#1_plug_str } :w } }
+ \typeout{}
+ }
+ {
+ \typeout { Socket~ is~ not~ declared! }
+ }
+}
+\cs_new_protected:Npn \socket_show:n #1 {\socket_log:n {#1} \errmessage{}}
+\cs_new_protected:Npn \socket_new_plug:nnn #1#2#3 {
+ \str_if_exist:cTF { l__socket_#1_plug_str }
+ {
+ \cs_if_exist:cTF { __socket_#1_plug_#2:w }
+ {
+ \msg_error:nnnn { socket } { plug-already-declared } {#1} {#2}
+ }
+ {
+ \cs_generate_from_arg_count:cNnn
+ { __socket_#1_plug_#2:w }
+ \cs_new_protected:Npn
+ { \int_use:c { c__socket_#1_args_int } }
+ {#3}
+ \seq_put_right:cn { l__socket_#1_plugs_seq } {#2}
+ \__socket_debug_term:n
+ { Plug~ '#2'~ for~ socket~ '#1'~ declared. }
+ }
+ }
+ {
+ \msg_error:nnn { socket } { undeclared } {#1}
+ }
+}
+\cs_new_protected:Npn \socket_set_plug:nnn #1#2#3 {
+ \str_if_exist:cTF { l__socket_#1_plug_str }
+ {
+ \cs_if_exist:cTF { __socket_#1_plug_#2:w }
+ {
+ \cs_generate_from_arg_count:cNnn
+ { __socket_#1_plug_#2:w }
+ \cs_set_protected:Npn
+ { \int_use:c { c__socket_#1_args_int } }
+ {#3}
+ \__socket_debug_term:n
+ { Plug~ '#2'~ for~ socket~ '#1'~ changed. }
+ }
+ {
+ \msg_error:nnnn { socket } { plug-undeclared } {#1} {#2}
+ }
+ }
+ {
+ \msg_error:nnn { socket } { undeclared } {#1}
+ }
+}
+\cs_new_protected:Npn \socket_assign_plug:nn #1 #2 {
+ \str_if_exist:cTF { l__socket_#1_plug_str }
+ {
+ \cs_if_exist:cTF { __socket_#1_plug_#2:w }
+ {
+ \__socket_debug_term:n
+ { Replacing~ plug~ '\str_use:c { l__socket_#1_plug_str }'~
+ with~ '#2'~ in~ socket~ '#1'. }
+ \str_set:cn { l__socket_#1_plug_str } {#2}
+ }
+ {
+ \msg_error:nnnn { socket } { plug-undeclared } {#1} {#2}
+ }
+ }
+ { \msg_error:nnn { socket } { undeclared } {#1} }
+}
+\cs_new_protected:Npn \socket_use:nw #1 {
+ \__socket_debug_term:n
+ { Socket~ '#1'~ containing~ plug~
+ '\str_use:c { l__socket_#1_plug_str }'~ used. }
+ \use:c { __socket_#1_plug_ \str_use:c { l__socket_#1_plug_str } :w }
+}
+\cs_new_eq:NN \socket_use:n \socket_use:nw % socket with no inputs
+\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
+
+\msg_new:nnnn { socket } { already-declared }
+ { Socket~ '#1'~ already~ declared! }
+ { A~ socket~ can~ only~ be~ declared~ once.~ The~ name~ '#1'~ is~
+ already~ taken.~ Use~ \ShowSocket{#1}~ to~ see~ its~ definition. }
+
+\msg_new:nnnn { socket } { undeclared }
+ { Socket~ '#1'~ undeclared! }
+ { You~ tried~ to~ use~ a~ socket~ that~ was~ not~ declared~ before. }
+
+\msg_new:nnnn { socket } { not-top-level }
+ { Sockets~ can~ only~ be~ declared~ at~ top-level! }
+ { It~ is~ not~ allowed~ to~ declare~ sockets~ inside~ a~
+ group.~ Move~ the~ declaration~ to~ the~ top-level. }
+\msg_new:nnnn { socket } { plug-already-declared }
+ { Plug~ '#2'~ for~ socket~ '#1'~ already~ declared! }
+ { You~ can't~ change~ an~ existing~ plug~ with~ \NewSocketPlug~ and~ it~
+ is~ normally~ not~ sensible~ to~ do~ so.~ Use~ the~ L3~ programming~
+ layer~ function~ \socket_set_plug:nnn~ if~ you~ really~ have~ to. }
+
+\msg_new:nnnn { socket } { plug-undeclared }
+ { Plug~ '#2'~ for~ socket~ '#1'~ undeclared! }
+ { The~ plug~ name~ is~ unknown.~ Is~ the~ name~ misspelled~ or~ did~ you~
+ intend~ to~ assign~ it~ to~ a~ different~ socket? }
+\prop_gput:Nnn \g_msg_module_type_prop { socket } { LaTeX }
+\cs_new_eq:NN \NewSocket \socket_new:nn
+\cs_new_eq:NN \ShowSocket \socket_show:n
+\cs_new_eq:NN \LogSocket \socket_log:n
+\cs_new_eq:NN \NewSocketPlug \socket_new_plug:nnn
+\cs_new_eq:NN \AssignSocketPlug \socket_assign_plug:nn
+\cs_new_eq:NN \UseSocket \socket_use:nw
+\cs_new_eq:NN \DebugSocketsOn \socket_debug_on:
+\cs_new_eq:NN \DebugSocketsOff \socket_debug_off:
+\IncludeInRelease{0000/00/00}{ltsockets}
+ {The~socket~management~(undo)}%
+
+\let \NewSocket \@undefined
+\let \ShowSocket \@undefined
+\let \LogSocket \@undefined
+
+\let \NewSocketPlug \@undefined
+\let \AssignSocketPlug \@undefined
+\let \UseSocket \@undefined
+
+\let \DebugSocketsOn \@undefined
+\let \DebugSocketsOff \@undefined
+
+\EndModuleRelease
+\ExplSyntaxOff
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% From File: ltalloc.dtx
%%% From File: ltcntrl.dtx
%%% From File: lterror.dtx
@@ -8920,6 +9030,14 @@ of this package available from CTAN}
\@esphack
\fi}
\EndIncludeInRelease
+\IncludeInRelease{2023/11/01}%
+ {\@xobeytab}{Obeyed tabs}%
+\let\@xobeytab\@xobeysp
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+ {\@xobeytab}{Obeyed tabs}%
+\let\@xobeytab\@undefined
+\EndIncludeInRelease
\IncludeInRelease{2015/01/01}%
{\@}{Space after \@}%
\def\@{\spacefactor\@m{}}%
@@ -9371,7 +9489,7 @@ of this package available from CTAN}
\reserved@a}
\EndIncludeInRelease
-\IncludeInRelease{2023/05/01}%
+\IncludeInRelease{2023/06/01}%
{\IfFileExists@}{IfFileExists}
\long\def \IfFileExists@#1#2#3{%
\edef\@filef@und{\IfFileExists@@{#1}}%
@@ -9390,7 +9508,16 @@ of this package available from CTAN}
\expandafter{\reserved@a{#2}{#3}}%
\reserved@a}
\ExplSyntaxOn
-\cs_new_eq:NN \IfFileExists@@ \file_full_name:n
+\cs_new:Npn \IfFileExists@@ #1
+ {
+ \tl_if_blank:nF {#1}
+ {
+ \tl_if_head_eq_charcode:oNTF { \use:n #1 } |
+ {#1}
+ { \file_full_name:n {#1} }
+ }
+ }
+\cs_generate_variant:Nn \tl_if_head_eq_charcode:nNTF { o }
\ExplSyntaxOff
\EndIncludeInRelease
\IncludeInRelease{2021/06/01}%
@@ -13111,7 +13238,344 @@ of this package available from CTAN}
\let\Ref\@undefined
\EndIncludeInRelease
+%% File: ltproperties.dtx
+\def\ltpropertiesversion{1.0b}
+\def\ltpropertiesdate{2023-09-13}
+
+
+
+\ExplSyntaxOn
+\NewModuleRelease{2023/11/01}{ltproperties}
+ {Cross-referencing~properties}
+\cs_new_protected:Npn \property_new:nnnn #1#2#3#4
+ {
+ \cs_if_free:cTF { __property_code_ #1 : }
+ {
+ \exp_args:Nx \__property_gset:nnnn { \tl_to_str:n {#1} }
+ {#2} {#3} {#4}
+ }
+ {
+ \msg_error:nn { property }{ exists }{#1}
+ }
+ }
+\cs_new_protected:Npn \property_gset:nnnn #1#2#3#4
+ {
+ \__property_gset:xnnn { \tl_to_str:n {#1} }
+ {#2} {#3} {#4}
+ }
+\cs_new_protected:Npn \__property_gset:nnnn #1#2#3#4
+ {
+ \cs_gset:cpn { __property_code_ #1 : } {#4}
+ \tl_gclear_new:c { g__property_default_ #1 _tl }
+ \tl_gset:cn { g__property_default_ #1 _tl } {#3}
+ \bool_if_exist:cF { g__property_shipout_ #1 _tl }
+ { \bool_new:c { g__property_shipout_ #1 _tl } }
+ \str_case:nnF {#2}
+ {
+ { now } { { \bool_gset_false:c { g__property_shipout_ #1 _tl } } }
+ { shipout }
+ { \bool_gset_true:c { g__property_shipout_ #1 _tl } }
+ }
+ { \msg_error:nnnn { property } { unknown-setpoint } {#1} {#2} }
+ }
+\cs_generate_variant:Nn \__property_gset:nnnn {xnnn}
+\cs_new_protected:Npn \NewProperty #1#2#3#4
+ {
+ \exp_args:Nx \property_new:nnnn {#1}{#2}{#3}{#4}
+ }
+\cs_new_protected:Npn \SetProperty #1#2#3#4
+ {
+ \exp_args:Nx \property_gset:nnnn {#1}{#2}{#3}{#4}
+ }
+\cs_new_protected:Npn \property_record:nN #1#2
+ { \property_record:nV {#1} #2 }
+\cs_new_protected:Npn \property_record:nn #1#2
+ { \__property_record:xn { \tl_to_str:n {#1} } {#2} }
+\cs_generate_variant:Nn \property_record:nn { nV , xx }
+\cs_new_protected:Npn \__property_record:nn #1#2
+ {
+ \legacy_if:nT { @filesw }
+ {
+ \iow_shipout_x:Nx \@auxout
+ {
+ \token_to_str:N \new@label@record
+ {#1}
+ { \clist_map_function:nN {#2} \__property_record_value:n }
+ }
+ }
+ }
+\cs_generate_variant:Nn \__property_record:nn { x }
+\cs_new:Npn \__property_record_value:n #1
+ { \__property_record_value_aux:e { \tl_to_str:n {#1} } }
+\cs_new:Npn \__property_record_value_aux:n #1
+ {
+ \cs_if_exist:cTF { __property_code_ #1 : }
+ {
+ {#1}
+ {
+ \bool_if:cTF { g__property_shipout_ #1 _tl }
+ { \exp_not:c }
+ { \use:c }
+ { __property_code_ #1 : }
+ }
+ }
+ { \msg_expandable_error:nnn { property } { not-declared } {#1} }
+ }
+\cs_generate_variant:Nn \__property_record_value_aux:n { e }
+\NewDocumentCommand\RecordProperties { m m }
+ {
+ \@bsphack
+ \property_record:xx {#1}{#2}
+ \@esphack
+ }
+\flag_new:n { l__property_ref_flag }
+\cs_new:Npn \property_ref:nn #1#2
+ {
+ \__property_ref:een
+ { \tl_to_str:n {#1} }
+ { \tl_to_str:n {#2} }
+ { \tl_use:c { g__property_default_ #2 _tl } }
+ }
+\cs_generate_variant:Nn \property_ref:nn {ee}
+\cs_new:Npn \property_ref:nnn #1#2#3
+ {
+ \__property_ref:een
+ { \tl_to_str:n {#1} }
+ { \tl_to_str:n {#2} }
+ {#3}
+ }
+\cs_new:Npn \__property_ref:nnn #1#2#3
+ {
+ \tl_if_exist:cTF { g__property_label_ #1 _ #2 _tl }
+ { \tl_use:c { g__property_label_ #1 _ #2 _tl } }
+ {
+ \flag_if_raised:nF
+ { l__property_ref_flag } { \flag_raise:n { l__property_ref_flag } }
+ \tl_if_exist:cTF { g__property_default_ #2 _tl }
+ { #3 }
+ { \msg_expandable_error:nnn { property } { not-declared } {#2} }
+ }
+ }
+\cs_generate_variant:Nn \__property_ref:nnn { ee }
+\cs_generate_variant:Nn \property_ref:nnn {een}
+\NewExpandableDocumentCommand \RefProperty { o m m }
+ {
+ \IfNoValueTF {#1}
+ {
+ \property_ref:ee {#2}{#3}
+ }
+ {
+ \property_ref:een {#2}{#3}{#1}
+ }
+ }
+\cs_new_protected:Npn \new@label@record #1#2
+ {
+ \tl_if_exist:cTF { r@#1 }
+ {
+ \gdef \@multiplelabels
+ { \@latex@warning@no@line { There~were~multiply-defined~labels } }
+ \@latex@warning@no@line { Label~`#1'~multiply~defined }
+ }
+ {
+ \tl_new:c { r@#1 }
+ \tl_gset:cn { r@#1 }{#2}
+ }
+ \__property_data:nnn {#1} #2 { \q_recursion_tail } { ? } \q_recursion_stop
+ }
+\cs_new_protected:Npn \__property_data:nnn #1#2#3
+ {
+ \quark_if_recursion_tail_stop:n {#2}
+ \tl_gclear_new:c { g__property_label_ \tl_to_str:n {#1} _ \tl_to_str:n {#2} _tl }
+ \tl_gset:cn { g__property_label_ \tl_to_str:n {#1} _ \tl_to_str:n {#2} _tl } {#3}
+ \__property_data:nnn {#1}
+ }
+\cs_new_protected:Npn \@kernel@new@label@record@testdef #1 #2
+ {
+ \tl_if_eq:cnF { r@#1 } {#2}
+ { \@tempswatrue }
+ }
+\prg_new_conditional:Npnn \property_if_exist:n #1 { p , T , F, TF }
+ % #1 property
+ {
+ \cs_if_exist:cTF { __property_code_ #1 : }
+ {
+ \prg_return_true:
+ }
+ {
+ \prg_return_false:
+ }
+ }
+\prg_generate_conditional_variant:Nnn \property_if_exist:n {e} {TF}
+\cs_new_eq:NN \IfPropertyExistTF \property_if_exist:eTF
+\prg_new_conditional:Npnn \property_if_recorded:n #1 { p , T , F, TF }
+ % #1 label
+ {
+ \tl_if_exist:cTF { r@#1 }
+ {
+ \prg_return_true:
+ }
+ {
+ \prg_return_false:
+ }
+ }
+\prg_generate_conditional_variant:Nnn \property_if_recorded:n {e} {TF}
+\cs_new_eq:NN \IfLabelExistTF \property_if_recorded:eTF
+\prg_new_conditional:Npnn \property_if_recorded:nn #1#2 { p , T , F, TF }
+ % #1 label #2 property
+ {
+ \tl_if_exist:cTF { g__property_label_ \tl_to_str:n {#1} _ \tl_to_str:n {#2} _tl }
+ {
+ \prg_return_true:
+ }
+ {
+ \prg_return_false:
+ }
+ }
+\prg_generate_conditional_variant:Nnn \property_if_recorded:nn {ee} {TF}
+\cs_new_eq:NN \IfPropertyRecordedTF \property_if_recorded:eeTF
+\cs_new_protected:Npn \property_ref_undefined_warn:
+ {
+ \flag_if_raised:nT { l__property_ref_flag }
+ {
+ \G@refundefinedtrue
+ }
+ }
+\cs_new_protected:Npn \property_ref_undefined_warn:n #1 %#1 label
+ {
+ \property_if_recorded:nF {#1}
+ {
+ \G@refundefinedtrue
+ \@latex@warning{Reference~`#1'~on~page~\thepage\space undefined}%
+ }
+ }
+\cs_new_protected:Npn \property_ref_undefined_warn:nn #1#2 %#1 label, #2 property
+ {
+ \property_if_recorded:nTF {#1}
+ {
+ \property_if_recorded:nnF {#1}{#2}
+ {
+ \G@refundefinedtrue
+ \@latex@warning
+ { Property~`#2'~undefined~for~reference~`#1'~on~page~\thepage }
+ }
+ }
+ {
+ \G@refundefinedtrue
+ \@latex@warning { Reference~`#1'~on~page~\thepage\space undefined }%
+ }
+ }
+\cs_generate_variant:Nn \property_ref_undefined_warn:nn {xx}
+\cs_set_eq:NN \RefUndefinedWarn \property_ref_undefined_warn:xx
+\property_new:nnnn { abspage } { shipout }
+ { 0 } { \int_use:N \g_shipout_readonly_int }
+\property_new:nnnn { page } { shipout } { 0 } { \thepage }
+\property_new:nnnn { pagenum } { shipout } { 0 } { \the \value { page } }
+\property_new:nnnn { currentlabel } { now } { ?? } { \@currentlabel }
+\property_new:nnnn { title } { now }
+ { \exp_not:n { \textbf { ?? } } } { \@currentlabelname }
+\property_new:nnnn { target } { now } { } { \@currentHref }
+\property_new:nnnn { counter } { now } { } { \@currentcounter }
+\property_new:nnnn { xpos } { shipout } { 0} { \int_use:N \tex_lastxpos:D }
+\property_new:nnnn { ypos } { shipout } { 0} { \int_use:N \tex_lastypos:D }
+\msg_new:nnnn { property } { exists }
+ { Property~'#1'~ has~ already~ been~ declared. }
+ { There~ already~ exists~ a~ property~ declaration~ with~ this~
+ name.\\
+ Please~ use~ a~ different~ name~ for~ your~ property.}
+
+\msg_new:nnnn { property } { not-declared }
+ { Property~'#1'~not~declared. }
+ {
+ LaTeX~has~been~asked~to~use~property~'#1',~but~this~
+ name~has~not~been~declared.
+ }
+\msg_new:nnnn { property } { unknown-setpoint }
+ { Unknown~keyword~'#2'~for~setting~property~'#1'. }
+ {
+ LaTeX~has~been~asked~to~set~the~property~'#1',~but~the~keyword~
+ '#2'~is~not~one~of~the~two~known~values:~'now'~or~'shipout'.
+ }
+\IncludeInRelease{0000/00/00}{ltproperties}
+ {cross-referencing~properties~(undo)}%
+
+\let \NewProperty \@undefined
+\let \SetProperty \@undefined
+
+\let \RecordProperties \@undefined
+\let \RefProperty \@undefined
+\let \RefUndefinedWarn \@undefined
+
+\let \IfPropertyExistTF \@undefined
+\let \IfLabelExistTF \@undefined
+\let \IfPropertyRecordedTF \@undefined
+
+\let\new@label@record \@undefined
+\let\@kernel@new@label@record@testdef\@undefined
+\EndModuleRelease
+\ExplSyntaxOff
%%% From File: ltmiscen.dtx
+\IncludeInRelease{2023/11/01}%
+ {\enddocument}{check property labels}%
+\def\enddocument{%
+ \@kernel@before@enddocument
+ \UseOneTimeHook{enddocument}%
+ \@kernel@after@enddocument
+ \@checkend{document}%
+ \clearpage
+ \UseOneTimeHook{enddocument/afterlastpage}%
+ \@kernel@after@enddocument@afterlastpage
+ \begingroup
+ \if@filesw
+ \immediate\closeout\@mainaux
+ \let\@setckpt\@gobbletwo
+ \let\@newl@bel\@testdef
+ \let\new@label@record\@kernel@new@label@record@testdef
+ \@tempswafalse
+ \makeatletter \@@input\jobname.aux
+ \fi
+ \UseOneTimeHook{enddocument/afteraux}%
+ \UseOneTimeHook{enddocument/info}%
+ \endgroup
+ \UseOneTimeHook{enddocument/end}%
+ \deadcycles\z@\@@end}
+\NewHook{enddocument}
+\NewHook{enddocument/afterlastpage}
+\NewHook{enddocument/afteraux}
+\NewHook{enddocument/info}
+\NewHook{enddocument/end}
+\AddToHook{enddocument/info}[kernel/filelist]{\@dofilelist}
+\AddToHook{enddocument/info}[kernel/warnings]{\@enddocument@kernel@warnings}
+\AddToHook{enddocument/info}[kernel/release]{%
+ \let\show@release@info\wlog
+ \show@release@info{ ***********}%
+ \the\LaTeXReleaseInfo
+ \show@release@info{ ***********}}
+
+\DeclareHookRule{enddocument/info}{kernel/release}{before}{kernel/filelist}
+\DeclareHookRule{enddocument/info}{kernel/filelist}{before}{kernel/warnings}
+\def\@enddocument@kernel@warnings{%
+ \ifdim \font@submax >\fontsubfuzz\relax
+ \@font@warning{Size substitutions with differences\MessageBreak
+ up to \font@submax\space have occurred.\@gobbletwo}%
+ \fi
+ \@defaultsubs
+ \@refundefined
+ \if@filesw
+ \ifx \@multiplelabels \relax
+ \if@tempswa
+ \@latex@warning@no@line{Label(s) may have changed.
+ Rerun to get cross-references right}%
+ \fi
+ \else
+ \@multiplelabels
+ \fi
+ \ifx \@extra@page@added \relax
+ \@latex@warning@no@line{Temporary extra page added at the end.
+ Rerun to get it removed}%
+ \fi
+ \fi
+}
+\EndIncludeInRelease
\IncludeInRelease{2020/10/01}%
{\enddocument}{Use Hooks}%
\def\enddocument{%
@@ -13225,7 +13689,6 @@ of this package available from CTAN}
\IncludeInRelease{2018/12/01}%
{\protected@file@percent}{Mask line endings}%
\protected\def\protected@file@percent{}
-
\catcode`\^^A=9
\long\gdef\add@percent@to@temptokena
#1\protected@file@percent#2\add@percent@to@temptokena
@@ -13443,6 +13906,21 @@ of this package available from CTAN}
\kernel@make@fragile\raggedleft
\EndIncludeInRelease
+\IncludeInRelease{2023/11/01}%
+ {\@vobeytabs}{Obeyed tabs}%
+{\catcode`\ =\active%
+\gdef\@vobeyspaces{\catcode`\ \active\let \@xobeysp\@vobeytabs}}
+{\catcode`\^^I=\active
+\gdef\@vobeytabs{\catcode`\^^I\active\let^^I\@xobeytab}%
+\global\let^^I=\space
+}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+ {\@vobeytabs}{Obeyed tabs}%
+{\catcode`\ =\active%
+\gdef\@vobeyspaces{\catcode`\ \active\let \@xobeysp}}
+\let\@vobeytabs\@undefined
+\EndIncludeInRelease
\IncludeInRelease{2017-04-15}{\@verbatim}%
{Disable hyphenation in verbatim}%
\def\@verbatim{\trivlist \item\relax
@@ -13494,17 +13972,6 @@ of this package available from CTAN}
\DeclareRobustCommand\verbvisiblespace
{\leavevmode{\usefont{OT1}{cmtt}{m}{n}\asciispace}} % xetex/luatex version
\fi
-
-\def\@setupverbvisiblespace{%
- \ifx\verbvisiblespace\asciispace
- \let\@xobeysp\asciispace
- \else
- \setbox\z@\hbox{x}%
- \setbox\@verbvisiblespacebox\hbox to\wd\z@{\hss\verbvisiblespace\hss}%
- \def\@xobeysp{\leavevmode\copy\@verbvisiblespacebox}%
- \fi
-}
-
\newbox\@verbvisiblespacebox
\@namedef{verbatim*}{\@verbatim
\@setupverbvisiblespace
@@ -13521,9 +13988,62 @@ of this package available from CTAN}
\let\@setupverbvisiblespace\@undefined
\let\@verbvisiblespacebox \@undefined
\EndIncludeInRelease
+\IncludeInRelease{2023/11/01}%
+ {\@setupverbvisiblespace}{Setup visible tab for \verb}%
+\def\@setupverbvisiblespace{%
+ \ifx\verbvisiblespace\asciispace
+ \let\@xobeysp\asciispace
+ \else
+ \setbox\z@\hbox{x}%
+ \setbox\@verbvisiblespacebox\hbox to\wd\z@{\hss\verbvisiblespace\hss}%
+ \def\@xobeysp{\leavevmode\copy\@verbvisiblespacebox}%
+ \fi
+ \@setupverbvisibletab
+}
+\EndIncludeInRelease
+\IncludeInRelease{2018/12/01}%
+ {\@setupverbvisiblespace}{Setup visible space for \verb}%
+\def\@setupverbvisiblespace{%
+ \ifx\verbvisiblespace\asciispace
+ \let\@xobeysp\asciispace
+ \else
+ \setbox\z@\hbox{x}%
+ \setbox\@verbvisiblespacebox\hbox to\wd\z@{\hss\verbvisiblespace\hss}%
+ \def\@xobeysp{\leavevmode\copy\@verbvisiblespacebox}%
+ \fi
+}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+ {\@setupverbvisiblespace}{Setup visible space for \verb}%
+\let\@setupverbvisiblespace\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2023/11/01}%
+ {\@setupverbvisibletab}{Setup visible tab for \verb}%
+\def\@setupverbvisibletab{\let\@xobeytab\@xobeysp}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+ {\@setupverbvisibletab}{Setup visible tab for \verb}%
+\let\@setupverbvisibletab\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2023/11/01}%
+ {\@sverb}{Support visible tabs}%
+\def\@sverb#1{\if\noexpand#1 \expandafter\@sverb\else\@@sverb{#1}\fi}
+\def\@@sverb#1{%
+ \catcode`#1\active
+ \lccode`\~`#1%
+ \gdef\verb@balance@group{\verb@egroup
+ \@latex@error{\noexpand\verb illegal in argument}\@ehc}%
+ \aftergroup\verb@balance@group
+ \lowercase{\let~\verb@egroup}%
+ \ifnum0%
+ \ifnum\catcode`\ =\active\else 1\fi
+ \ifnum\catcode`\^^I=\active\else 1\fi
+ =0 %
+ \else \@setupverbvisiblespace \@vobeyspaces \fi
+}
+\EndIncludeInRelease
\IncludeInRelease{2020/10/01}%
{\@sverb}{Drop spaces before \verb delimiter}%
-\def\@sverb#1{\if\noexpand#1 \expandafter\@sverb\else\@@sverb{#1}\fi}
\def\@@sverb#1{%
\catcode`#1\active
\lccode`\~`#1%
@@ -16609,7 +17129,7 @@ of this package available from CTAN}
\EndIncludeInRelease
%%% From File: ltfilehook.dtx
\providecommand\ltfilehookversion{v1.0o}
-\providecommand\ltfilehookdate{2023/04/02}
+\providecommand\ltfilehookdate{2023/07/10}
\IncludeInRelease{2020/10/01}%
{\CurrentFile}{Hook management file}%
\ExplSyntaxOn