summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/l3kernel
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-08-30 03:01:17 +0000
committerNorbert Preining <norbert@preining.info>2023-08-30 03:01:17 +0000
commit4fee29360f7566a474b6143951b0744fa151edc9 (patch)
tree1af77d3ca21368f054b09f30dd60e8028a91be62 /macros/latex/contrib/l3kernel
parent64e26532c685fd24d6983508c6239e3c268b810b (diff)
CTAN sync 202308300301
Diffstat (limited to 'macros/latex/contrib/l3kernel')
-rw-r--r--macros/latex/contrib/l3kernel/CHANGELOG.md11
-rw-r--r--macros/latex/contrib/l3kernel/README.md2
-rw-r--r--macros/latex/contrib/l3kernel/expl3.dtx4
-rw-r--r--macros/latex/contrib/l3kernel/expl3.pdfbin621772 -> 621883 bytes
-rw-r--r--macros/latex/contrib/l3kernel/interface3.pdfbin1717910 -> 1722092 bytes
-rw-r--r--macros/latex/contrib/l3kernel/interface3.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3basics.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3bootstrap.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3box.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3candidates.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3cctab.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3clist.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3coffins.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3color.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3debug.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3deprecation.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3doc.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3doc.pdfbin558218 -> 558289 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3docstrip.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3docstrip.pdfbin152023 -> 152101 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3expan.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3file.dtx32
-rw-r--r--macros/latex/contrib/l3kernel/l3flag.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-assign.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-aux.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-basics.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-convert.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-expo.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-extended.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-logic.dtx4
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-parse.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-random.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-round.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-traps.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-trig.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fparray.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3int.dtx7
-rw-r--r--macros/latex/contrib/l3kernel/l3intarray.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3kernel-functions.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3keys.dtx16
-rw-r--r--macros/latex/contrib/l3kernel/l3legacy.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3luatex.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3msg.dtx136
-rw-r--r--macros/latex/contrib/l3kernel/l3names.dtx4
-rw-r--r--macros/latex/contrib/l3kernel/l3news.pdfbin395889 -> 395889 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news01.pdfbin122711 -> 122711 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news02.pdfbin150675 -> 150675 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news03.pdfbin148704 -> 148704 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news04.pdfbin114591 -> 114591 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news05.pdfbin112487 -> 112487 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news06.pdfbin151569 -> 151569 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news07.pdfbin128317 -> 128317 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news08.pdfbin163456 -> 163456 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news09.pdfbin250127 -> 250127 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news10.pdfbin150282 -> 150282 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news11.pdfbin170069 -> 170069 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news12.pdfbin204992 -> 204992 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3pdf.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3prefixes.pdfbin81941 -> 81941 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3prg.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3prop.dtx68
-rw-r--r--macros/latex/contrib/l3kernel/l3quark.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3regex.dtx73
-rw-r--r--macros/latex/contrib/l3kernel/l3seq.dtx55
-rw-r--r--macros/latex/contrib/l3kernel/l3skip.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3sort.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3str-convert.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3str.dtx14
-rw-r--r--macros/latex/contrib/l3kernel/l3styleguide.pdfbin296516 -> 296645 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3styleguide.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3syntax-changes.pdfbin243162 -> 243279 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3syntax-changes.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3sys.dtx24
-rw-r--r--macros/latex/contrib/l3kernel/l3term-glossary.pdfbin218315 -> 218431 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3term-glossary.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3text-case.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3text-map.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3text-purify.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3text.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3tl-analysis.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3tl.dtx238
-rw-r--r--macros/latex/contrib/l3kernel/l3token.dtx3
-rw-r--r--macros/latex/contrib/l3kernel/l3unicode.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/source3.pdfbin7360498 -> 7369566 bytes
-rw-r--r--macros/latex/contrib/l3kernel/source3.tex2
86 files changed, 564 insertions, 223 deletions
diff --git a/macros/latex/contrib/l3kernel/CHANGELOG.md b/macros/latex/contrib/l3kernel/CHANGELOG.md
index 17d0940072..43e0dce339 100644
--- a/macros/latex/contrib/l3kernel/CHANGELOG.md
+++ b/macros/latex/contrib/l3kernel/CHANGELOG.md
@@ -7,6 +7,14 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2023-08-29]
+
+### Added
+- `\c_sys_timestamp_str`
+
+### Changed
+- Rename `\tex_pdfcreationdate:D` to `\tex_creationdate:D`
+
## [2023-08-11]
### Changed
@@ -1504,7 +1512,8 @@ this project uses date-based 'snapshot' version identifiers.
- Step functions have been added for dim variables,
e.g. `\dim_step_inline:nnnn`
-[Unreleased]: https://github.com/latex3/latex3/compare/2023-08-11...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2023-08-29...HEAD
+[2023-08-29]: https://github.com/latex3/latex3/compare/2023-08-11...2023-08-29
[2023-08-11]: https://github.com/latex3/latex3/compare/2023-08-03...2023-08-11
[2023-08-03]: https://github.com/latex3/latex3/compare/2023-06-30...2023-08-03
[2023-06-30]: https://github.com/latex3/latex3/compare/2023-06-16...2023-06-30
diff --git a/macros/latex/contrib/l3kernel/README.md b/macros/latex/contrib/l3kernel/README.md
index 6be76267b6..7afb055297 100644
--- a/macros/latex/contrib/l3kernel/README.md
+++ b/macros/latex/contrib/l3kernel/README.md
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================
-Release 2023-08-11
+Release 2023-08-29
Overview
--------
diff --git a/macros/latex/contrib/l3kernel/expl3.dtx b/macros/latex/contrib/l3kernel/expl3.dtx
index de20e5abe8..9adee097c5 100644
--- a/macros/latex/contrib/l3kernel/expl3.dtx
+++ b/macros/latex/contrib/l3kernel/expl3.dtx
@@ -24,7 +24,7 @@
%
%<*driver|generic|package|2ekernel>
%</driver|generic|package|2ekernel>
-\def\ExplFileDate{2023-08-11}%
+\def\ExplFileDate{2023-08-29}%
%<*driver>
\documentclass[full]{l3doc}
\usepackage{graphicx}
@@ -51,7 +51,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/expl3.pdf b/macros/latex/contrib/l3kernel/expl3.pdf
index dbcbdc76bd..33262bd828 100644
--- a/macros/latex/contrib/l3kernel/expl3.pdf
+++ b/macros/latex/contrib/l3kernel/expl3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/interface3.pdf b/macros/latex/contrib/l3kernel/interface3.pdf
index 25cec1c3cd..61d451cc9e 100644
--- a/macros/latex/contrib/l3kernel/interface3.pdf
+++ b/macros/latex/contrib/l3kernel/interface3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/interface3.tex b/macros/latex/contrib/l3kernel/interface3.tex
index 696f03d048..0198240396 100644
--- a/macros/latex/contrib/l3kernel/interface3.tex
+++ b/macros/latex/contrib/l3kernel/interface3.tex
@@ -62,7 +62,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2023-08-11}
+\date{Released 2023-08-29}
\pagenumbering{roman}
\maketitle
diff --git a/macros/latex/contrib/l3kernel/l3basics.dtx b/macros/latex/contrib/l3kernel/l3basics.dtx
index bc36340167..17cb2467bf 100644
--- a/macros/latex/contrib/l3kernel/l3basics.dtx
+++ b/macros/latex/contrib/l3kernel/l3basics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3bootstrap.dtx b/macros/latex/contrib/l3kernel/l3bootstrap.dtx
index bf51cb5527..aaa4333858 100644
--- a/macros/latex/contrib/l3kernel/l3bootstrap.dtx
+++ b/macros/latex/contrib/l3kernel/l3bootstrap.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3box.dtx b/macros/latex/contrib/l3kernel/l3box.dtx
index 0b4ae26892..34b6ca44ef 100644
--- a/macros/latex/contrib/l3kernel/l3box.dtx
+++ b/macros/latex/contrib/l3kernel/l3box.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3candidates.dtx b/macros/latex/contrib/l3kernel/l3candidates.dtx
index 978c6d95de..f3a5021425 100644
--- a/macros/latex/contrib/l3kernel/l3candidates.dtx
+++ b/macros/latex/contrib/l3kernel/l3candidates.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3cctab.dtx b/macros/latex/contrib/l3kernel/l3cctab.dtx
index e8804818f2..fc9cdd9e92 100644
--- a/macros/latex/contrib/l3kernel/l3cctab.dtx
+++ b/macros/latex/contrib/l3kernel/l3cctab.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3clist.dtx b/macros/latex/contrib/l3kernel/l3clist.dtx
index 88455b8472..0eaac6a532 100644
--- a/macros/latex/contrib/l3kernel/l3clist.dtx
+++ b/macros/latex/contrib/l3kernel/l3clist.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3coffins.dtx b/macros/latex/contrib/l3kernel/l3coffins.dtx
index cf1ed0ebc8..2269c6c686 100644
--- a/macros/latex/contrib/l3kernel/l3coffins.dtx
+++ b/macros/latex/contrib/l3kernel/l3coffins.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3color.dtx b/macros/latex/contrib/l3kernel/l3color.dtx
index 3597f0bc4e..1453001a2a 100644
--- a/macros/latex/contrib/l3kernel/l3color.dtx
+++ b/macros/latex/contrib/l3kernel/l3color.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3debug.dtx b/macros/latex/contrib/l3kernel/l3debug.dtx
index 36e5e8d313..d700a0f021 100644
--- a/macros/latex/contrib/l3kernel/l3debug.dtx
+++ b/macros/latex/contrib/l3kernel/l3debug.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3deprecation.dtx b/macros/latex/contrib/l3kernel/l3deprecation.dtx
index 14386a1430..a60fe16ff4 100644
--- a/macros/latex/contrib/l3kernel/l3deprecation.dtx
+++ b/macros/latex/contrib/l3kernel/l3deprecation.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3doc.dtx b/macros/latex/contrib/l3kernel/l3doc.dtx
index 43a3312231..b1744b9f7b 100644
--- a/macros/latex/contrib/l3kernel/l3doc.dtx
+++ b/macros/latex/contrib/l3kernel/l3doc.dtx
@@ -85,7 +85,7 @@ and all files in that bundle must be distributed together.
% require you to do updates, if the class changes.}}
%
% \author{\Team}
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
% \maketitle
% \tableofcontents
%
diff --git a/macros/latex/contrib/l3kernel/l3doc.pdf b/macros/latex/contrib/l3kernel/l3doc.pdf
index da3b5ed323..8ec07dcef3 100644
--- a/macros/latex/contrib/l3kernel/l3doc.pdf
+++ b/macros/latex/contrib/l3kernel/l3doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3docstrip.dtx b/macros/latex/contrib/l3kernel/l3docstrip.dtx
index 58c151045a..2b40c56fc5 100644
--- a/macros/latex/contrib/l3kernel/l3docstrip.dtx
+++ b/macros/latex/contrib/l3kernel/l3docstrip.dtx
@@ -63,7 +63,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3docstrip.pdf b/macros/latex/contrib/l3kernel/l3docstrip.pdf
index db1f297e26..d93d065c3b 100644
--- a/macros/latex/contrib/l3kernel/l3docstrip.pdf
+++ b/macros/latex/contrib/l3kernel/l3docstrip.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3expan.dtx b/macros/latex/contrib/l3kernel/l3expan.dtx
index 922e0315b2..0d7e3e877a 100644
--- a/macros/latex/contrib/l3kernel/l3expan.dtx
+++ b/macros/latex/contrib/l3kernel/l3expan.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3file.dtx b/macros/latex/contrib/l3kernel/l3file.dtx
index 8ef7950afa..1c1401e392 100644
--- a/macros/latex/contrib/l3kernel/l3file.dtx
+++ b/macros/latex/contrib/l3kernel/l3file.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -126,7 +126,8 @@
% the \meta{false code} is inserted into the input stream.
% \end{function}
%
-% \begin{function}[updated = 2012-02-09]{\iow_open:Nn, \iow_open:cn}
+% \begin{function}[updated = 2012-02-09]
+% {\iow_open:Nn, \iow_open:NV, \iow_open:cn, \iow_open:cV}
% \begin{syntax}
% \cs{iow_open:Nn} \meta{stream} \Arg{file name}
% \end{syntax}
@@ -446,7 +447,8 @@
%
% \subsection{Writing to files}
%
-% \begin{function}[updated = 2012-06-05]{\iow_now:Nn, \iow_now:Nx, \iow_now:cn, \iow_now:cx}
+% \begin{function}[updated = 2012-06-05]
+% {\iow_now:Nn, \iow_now:NV, \iow_now:Nx, \iow_now:cn, \iow_now:cV, \iow_now:cx}
% \begin{syntax}
% \cs{iow_now:Nn} \meta{stream} \Arg{tokens}
% \end{syntax}
@@ -703,7 +705,7 @@
% \end{texnote}
% \end{variable}
%
-% \begin{function}[TF, updated = 2012-02-10]{\file_if_exist:n}
+% \begin{function}[TF, updated = 2012-02-10]{\file_if_exist:n, \file_if_exist:V}
% \begin{syntax}
% \cs{file_if_exist:nTF} \Arg{file name} \Arg{true code} \Arg{false code}
% \end{syntax}
@@ -922,7 +924,7 @@
% \end{function}
%
%
-% \begin{function}[updated = 2017-06-26]{\file_input:n}
+% \begin{function}[updated = 2017-06-26]{\file_input:n, \file_input:V}
% \begin{syntax}
% \cs{file_input:n} \Arg{file name}
% \end{syntax}
@@ -1634,7 +1636,7 @@
% \end{macrocode}
% \end{variable}
%
-% \begin{macro}{\iow_open:Nn, \iow_open:cn}
+% \begin{macro}{\iow_open:Nn, \iow_open:NV, \iow_open:cn, \iow_open:cV}
% \begin{macro}{\@@_open_stream:Nn, \@@_open_stream:NV}
% The same idea as for reading, but without the path and without the need
% to allow for a conditional version.
@@ -1652,7 +1654,7 @@
\@@_open_stream:NV #1 \l_@@_file_name_tl
}
}
-\cs_generate_variant:Nn \iow_open:Nn { c }
+\cs_generate_variant:Nn \iow_open:Nn { NV , c , cV }
\cs_new_protected:Npn \@@_open_stream:Nn #1#2
{
\tex_global:D \tex_chardef:D #1 = \l_@@_stream_tl \scan_stop:
@@ -1798,7 +1800,11 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\iow_now:Nn, \iow_now:Nx, \iow_now:cn, \iow_now:cx}
+% \begin{macro}
+% {
+% \iow_now:Nn, \iow_now:NV, \iow_now:Nx,
+% \iow_now:cn, \iow_now:cV, \iow_now:cx
+% }
% This routine writes the second argument onto the output stream without
% expansion. If this stream isn't open, the output goes to the terminal
% instead. If the first argument is no output stream at all, we get an
@@ -1816,7 +1822,7 @@
\__kernel_iow_with:Nnn \tex_newlinechar:D { `\^^J }
{ \tex_immediate:D \tex_write:D #1 { \exp_not:n {#2} } }
}
-\cs_generate_variant:Nn \iow_now:Nn { c, Nx, cx }
+\cs_generate_variant:Nn \iow_now:Nn { NV , Nx , c , cV , cx }
% \end{macrocode}
% \end{macro}
%
@@ -3308,7 +3314,7 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}[TF]{\file_if_exist:n}
+% \begin{macro}[TF]{\file_if_exist:n, \file_if_exist:V}
% The test for the existence of a file is a wrapper around the function to
% add a path to a file. If the file was found, the path contains
% something, whereas if the file was not located then the return value
@@ -3320,6 +3326,7 @@
{ \prg_return_true: }
{ \prg_return_false: }
}
+\prg_generate_conditional_variant:Nnn \file_if_exist:n { V } { T , F , TF }
% \end{macrocode}
% \end{macro}
%
@@ -3360,7 +3367,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\file_input:n}
+% \begin{macro}{\file_input:n, \file_input:V}
% \begin{macro}{\@@_input:n, \@@_input:V}
% \begin{macro}{\@@_input_push:n, \__kernel_file_input_push:n}
% \begin{macro}{\@@_input_pop:, \__kernel_file_input_pop:}
@@ -3376,6 +3383,7 @@
{ \@@_input:V \l_@@_full_name_tl }
{ \__kernel_file_missing:n {#1} }
}
+\cs_generate_variant:Nn \file_input:n { V }
\cs_new_protected:Npx \@@_input:n #1
{
\exp_not:N \clist_if_exist:NTF \exp_not:N \@filelist
@@ -3751,7 +3759,7 @@
% \begin{macrocode}
\tex_endinput:D
}
-% \begin{macrocode}
+% \end{macrocode}
%
% Now define the actual error message:
% \begin{macrocode}
diff --git a/macros/latex/contrib/l3kernel/l3flag.dtx b/macros/latex/contrib/l3kernel/l3flag.dtx
index 16d7ad8cf4..3fb3930535 100644
--- a/macros/latex/contrib/l3kernel/l3flag.dtx
+++ b/macros/latex/contrib/l3kernel/l3flag.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-assign.dtx b/macros/latex/contrib/l3kernel/l3fp-assign.dtx
index fd74adbb30..ecdd6ea31c 100644
--- a/macros/latex/contrib/l3kernel/l3fp-assign.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-assign.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/contrib/l3kernel/l3fp-aux.dtx b/macros/latex/contrib/l3kernel/l3fp-aux.dtx
index b79d221f38..1f6b333761 100644
--- a/macros/latex/contrib/l3kernel/l3fp-aux.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-aux.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-basics.dtx b/macros/latex/contrib/l3kernel/l3fp-basics.dtx
index 2ce6f8c75a..6a8d6376fb 100644
--- a/macros/latex/contrib/l3kernel/l3fp-basics.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-basics.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-convert.dtx b/macros/latex/contrib/l3kernel/l3fp-convert.dtx
index 6b9443ce09..bce0ddc8fd 100644
--- a/macros/latex/contrib/l3kernel/l3fp-convert.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-convert.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-expo.dtx b/macros/latex/contrib/l3kernel/l3fp-expo.dtx
index 320c7ffa93..d9c8cf5685 100644
--- a/macros/latex/contrib/l3kernel/l3fp-expo.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-expo.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-extended.dtx b/macros/latex/contrib/l3kernel/l3fp-extended.dtx
index fbc59aa01f..0a5ac448aa 100644
--- a/macros/latex/contrib/l3kernel/l3fp-extended.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-extended.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-logic.dtx b/macros/latex/contrib/l3kernel/l3fp-logic.dtx
index ea21e32e9c..9f11464f29 100644
--- a/macros/latex/contrib/l3kernel/l3fp-logic.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-logic.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -404,7 +404,7 @@
\exp:w \exp_end_continue_f:w \@@_parse:n {#3}
}
\cs_generate_variant:Nn \fp_step_function:nnnN { nnnc }
-% \end{macrocode}
+% \end{macrocode}
% Only floating point numbers (not tuples) are allowed arguments.
% Only \enquote{normal} floating points (not $\pm 0$,
% $\pm\texttt{inf}$, \texttt{nan}) can be used as step; if positive,
diff --git a/macros/latex/contrib/l3kernel/l3fp-parse.dtx b/macros/latex/contrib/l3kernel/l3fp-parse.dtx
index 76e511868f..86e2366f2d 100644
--- a/macros/latex/contrib/l3kernel/l3fp-parse.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-parse.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-random.dtx b/macros/latex/contrib/l3kernel/l3fp-random.dtx
index 948b81b2cc..bb0e4b12f0 100644
--- a/macros/latex/contrib/l3kernel/l3fp-random.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-random.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-round.dtx b/macros/latex/contrib/l3kernel/l3fp-round.dtx
index d52675b87b..c0c656189f 100644
--- a/macros/latex/contrib/l3kernel/l3fp-round.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-round.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-traps.dtx b/macros/latex/contrib/l3kernel/l3fp-traps.dtx
index 725674b62c..9b59b1759d 100644
--- a/macros/latex/contrib/l3kernel/l3fp-traps.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-traps.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/contrib/l3kernel/l3fp-trig.dtx b/macros/latex/contrib/l3kernel/l3fp-trig.dtx
index aef546549a..f4cc0513ad 100644
--- a/macros/latex/contrib/l3kernel/l3fp-trig.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-trig.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp.dtx b/macros/latex/contrib/l3kernel/l3fp.dtx
index 9966e983e5..17193dd8af 100644
--- a/macros/latex/contrib/l3kernel/l3fp.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fparray.dtx b/macros/latex/contrib/l3kernel/l3fparray.dtx
index 75a307ea9d..e3693f0a41 100644
--- a/macros/latex/contrib/l3kernel/l3fparray.dtx
+++ b/macros/latex/contrib/l3kernel/l3fparray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3int.dtx b/macros/latex/contrib/l3kernel/l3int.dtx
index 64919d9e46..5bb880ead3 100644
--- a/macros/latex/contrib/l3kernel/l3int.dtx
+++ b/macros/latex/contrib/l3kernel/l3int.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -688,7 +688,7 @@
% Integers can be placed into the output stream with formatting. These
% conversions apply to any integer expressions.
%
-% \begin{function}[updated = 2011-10-22, EXP]{\int_to_arabic:n}
+% \begin{function}[updated = 2011-10-22, EXP]{\int_to_arabic:n, \int_to_arabic:v}
% \begin{syntax}
% \cs{int_to_arabic:n} \Arg{int expr}
% \end{syntax}
@@ -2024,11 +2024,12 @@
%
% \subsection{Formatting integers}
%
-% \begin{macro}{\int_to_arabic:n}
+% \begin{macro}{\int_to_arabic:n, \int_to_arabic:v}
% \UnitTested
% Nothing exciting here.
% \begin{macrocode}
\cs_new_eq:NN \int_to_arabic:n \int_eval:n
+\cs_generate_variant:Nn \int_to_arabic:n { v }
% \end{macrocode}
% \end{macro}
%
diff --git a/macros/latex/contrib/l3kernel/l3intarray.dtx b/macros/latex/contrib/l3kernel/l3intarray.dtx
index c9f97c6304..cdbf71784c 100644
--- a/macros/latex/contrib/l3kernel/l3intarray.dtx
+++ b/macros/latex/contrib/l3kernel/l3intarray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
index 876aabdddd..c2d442f183 100644
--- a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
+++ b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3keys.dtx b/macros/latex/contrib/l3kernel/l3keys.dtx
index d84b56eee0..8a78f8cd7c 100644
--- a/macros/latex/contrib/l3kernel/l3keys.dtx
+++ b/macros/latex/contrib/l3kernel/l3keys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -985,7 +985,8 @@
% \end{verbatim}
% are treated identically.
%
-% \begin{function}[rEXP, added=2020-12-19, updated = 2021-05-10]{\keyval_parse:nnn}
+% \begin{function}[rEXP, added=2020-12-19, updated = 2021-05-10]
+% {\keyval_parse:nnn, \keyval_parse:nnV, \keyval_parse:nnv}
% \begin{syntax}
% \cs{keyval_parse:nnn} \Arg{code_1} \Arg{code_2} \Arg{key--value list}
% \end{syntax}
@@ -1023,7 +1024,8 @@
% \end{texnote}
% \end{function}
%
-% \begin{function}[rEXP, updated = 2021-05-10]{\keyval_parse:NNn}
+% \begin{function}[rEXP, updated = 2021-05-10]
+% {\keyval_parse:NNn, \keyval_parse:NNV, \keyval_parse:NNv}
% \begin{syntax}
% \cs{keyval_parse:NNn} \meta{function_1} \meta{function_2} \Arg{key--value list}
% \end{syntax}
@@ -1114,7 +1116,11 @@
{
% \end{macrocode}
%
-% \begin{macro}[EXP]{\keyval_parse:nnn, \keyval_parse:NNn}
+% \begin{macro}[EXP]
+% {
+% \keyval_parse:nnn, \keyval_parse:nnV, \keyval_parse:nnv,
+% \keyval_parse:NNn, \keyval_parse:NNV, \keyval_parse:NNv
+% }
% The main function starts the first of two loops. The outer loop splits the
% key--value list at active commas, the inner loop will do so at other commas.
% The use of \cs{s_@@_mark} here prevents loss of braces from the key
@@ -1379,6 +1385,8 @@
\char_set_catcode_active:n { `\= }
\@@_tmp:w , =
\group_end:
+\cs_generate_variant:Nn \keyval_parse:NNn { NNV , NNv }
+\cs_generate_variant:Nn \keyval_parse:nnn { nnV , nnv }
% \end{macrocode}
%
% \begin{macro}[EXP]{\@@_pair:nnnn, \@@_key:nn}
diff --git a/macros/latex/contrib/l3kernel/l3legacy.dtx b/macros/latex/contrib/l3kernel/l3legacy.dtx
index acb2ad3cbd..4142ac4658 100644
--- a/macros/latex/contrib/l3kernel/l3legacy.dtx
+++ b/macros/latex/contrib/l3kernel/l3legacy.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3luatex.dtx b/macros/latex/contrib/l3kernel/l3luatex.dtx
index 079f23e3c1..4e1f6a5bb8 100644
--- a/macros/latex/contrib/l3kernel/l3luatex.dtx
+++ b/macros/latex/contrib/l3kernel/l3luatex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3msg.dtx b/macros/latex/contrib/l3kernel/l3msg.dtx
index 7e80cf5665..82092523fa 100644
--- a/macros/latex/contrib/l3kernel/l3msg.dtx
+++ b/macros/latex/contrib/l3kernel/l3msg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -103,7 +103,11 @@
% although in general this may be confusing; simply writing the messages
% using |~| characters is the method favored by the team.
%
-% \begin{function}[updated = 2011-08-16]{\msg_new:nnnn, \msg_new:nnn}
+% \begin{function}[updated = 2011-08-16]
+% {
+% \msg_new:nnnn, \msg_new:nnxx,
+% \msg_new:nnn, \msg_new:nnx
+% }
% \begin{syntax}
% \cs{msg_new:nnnn} \Arg{module} \Arg{message} \Arg{text} \Arg{more text}
% \end{syntax}
@@ -312,9 +316,15 @@
% \msg_fatal:nnnn ,
% \msg_fatal:nnn ,
% \msg_fatal:nn ,
+% \msg_fatal:nnVV ,
+% \msg_fatal:nnVn ,
+% \msg_fatal:nnnV ,
+% \msg_fatal:nnV ,
% \msg_fatal:nnxxxx ,
% \msg_fatal:nnxxx ,
+% \msg_fatal:nnnxx ,
% \msg_fatal:nnxx ,
+% \msg_fatal:nnnx ,
% \msg_fatal:nnx
% }
% \begin{syntax}
@@ -333,9 +343,15 @@
% \msg_critical:nnnn ,
% \msg_critical:nnn ,
% \msg_critical:nn ,
+% \msg_critical:nnVV ,
+% \msg_critical:nnVn ,
+% \msg_critical:nnnV ,
+% \msg_critical:nnV ,
% \msg_critical:nnxxxx ,
% \msg_critical:nnxxx ,
+% \msg_critical:nnnxx ,
% \msg_critical:nnxx ,
+% \msg_critical:nnnx ,
% \msg_critical:nnx
% }
% \begin{syntax}
@@ -360,9 +376,15 @@
% \msg_error:nnnn ,
% \msg_error:nnn ,
% \msg_error:nn ,
+% \msg_error:nnVV ,
+% \msg_error:nnVn ,
+% \msg_error:nnnV ,
+% \msg_error:nnV ,
% \msg_error:nnxxxx ,
% \msg_error:nnxxx ,
+% \msg_error:nnnxx ,
% \msg_error:nnxx ,
+% \msg_error:nnnx ,
% \msg_error:nnx
% }
% \begin{syntax}
@@ -380,10 +402,17 @@
% \msg_warning:nnnnn ,
% \msg_warning:nnnn ,
% \msg_warning:nnn ,
+% \msg_warning:nnn ,
% \msg_warning:nn ,
+% \msg_warning:nnVV ,
+% \msg_warning:nnVn ,
+% \msg_warning:nnnV ,
+% \msg_warning:nnV ,
% \msg_warning:nnxxxx ,
% \msg_warning:nnxxx ,
+% \msg_warning:nnnxx ,
% \msg_warning:nnxx ,
+% \msg_warning:nnnx ,
% \msg_warning:nnx
% }
% \begin{syntax}
@@ -402,18 +431,30 @@
% \msg_note:nnnn ,
% \msg_note:nnn ,
% \msg_note:nn ,
+% \msg_note:nnVV ,
+% \msg_note:nnVn ,
+% \msg_note:nnnV ,
+% \msg_note:nnV ,
% \msg_note:nnxxxx ,
% \msg_note:nnxxx ,
+% \msg_note:nnnxx ,
% \msg_note:nnxx ,
+% \msg_note:nnnx ,
% \msg_note:nnx ,
% \msg_info:nnnnnn ,
% \msg_info:nnnnn ,
% \msg_info:nnnn ,
% \msg_info:nnn ,
% \msg_info:nn ,
+% \msg_info:nnVV ,
+% \msg_info:nnVn ,
+% \msg_info:nnnV ,
+% \msg_info:nnV ,
% \msg_info:nnxxxx ,
% \msg_info:nnxxx ,
+% \msg_info:nnnxx ,
% \msg_info:nnxx ,
+% \msg_info:nnnx ,
% \msg_info:nnx
% }
% \begin{syntax}
@@ -435,18 +476,30 @@
% \msg_term:nnnn ,
% \msg_term:nnn ,
% \msg_term:nn ,
+% \msg_term:nnVV ,
+% \msg_term:nnVn ,
+% \msg_term:nnnV ,
+% \msg_term:nnV ,
% \msg_term:nnxxxx ,
% \msg_term:nnxxx ,
+% \msg_term:nnnxx ,
% \msg_term:nnxx ,
+% \msg_term:nnnx ,
% \msg_term:nnx ,
% \msg_log:nnnnnn ,
% \msg_log:nnnnn ,
% \msg_log:nnnn ,
% \msg_log:nnn ,
% \msg_log:nn ,
+% \msg_log:nnVV ,
+% \msg_log:nnVn ,
+% \msg_log:nnnV ,
+% \msg_log:nnV ,
% \msg_log:nnxxxx ,
% \msg_log:nnxxx ,
+% \msg_log:nnnxx ,
% \msg_log:nnxx ,
+% \msg_log:nnnx ,
% \msg_log:nnx
% }
% \begin{syntax}
@@ -468,9 +521,15 @@
% \msg_none:nnnn ,
% \msg_none:nnn ,
% \msg_none:nn ,
+% \msg_none:nnVV ,
+% \msg_none:nnVn ,
+% \msg_none:nnnV ,
+% \msg_none:nnV ,
% \msg_none:nnxxxx ,
% \msg_none:nnxxx ,
+% \msg_none:nnnxx ,
% \msg_none:nnxx ,
+% \msg_none:nnnx ,
% \msg_none:nnx
% }
% \begin{syntax}
@@ -489,9 +548,15 @@
% \msg_show:nnnn ,
% \msg_show:nnn ,
% \msg_show:nn ,
+% \msg_show:nnVV ,
+% \msg_show:nnVn ,
+% \msg_show:nnnV ,
+% \msg_show:nnV ,
% \msg_show:nnxxxx ,
% \msg_show:nnxxx ,
+% \msg_show:nnnxx ,
% \msg_show:nnxx ,
+% \msg_show:nnnx ,
% \msg_show:nnx
% }
% \begin{syntax}
@@ -740,7 +805,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\msg_new:nnnn, \msg_new:nnn}
+% \begin{macro}{\msg_new:nnnn, \msg_new:nnxx, \msg_new:nnn, \msg_new:nnx}
% \begin{macro}{\msg_gset:nnnn, \msg_gset:nnn}
% \begin{macro}{\msg_set:nnnn, \msg_set:nnn}
% Setting a message simply means saving the appropriate text
@@ -751,8 +816,10 @@
\@@_chk_free:nn {#1} {#2}
\msg_gset:nnnn {#1} {#2}
}
+\cs_generate_variant:Nn \msg_new:nnnn { nnxx }
\cs_new_protected:Npn \msg_new:nnn #1#2#3
{ \msg_new:nnnn {#1} {#2} {#3} { } }
+\cs_generate_variant:Nn \msg_new:nnn { nnx }
\cs_new_protected:Npn \msg_set:nnnn #1#2#3#4
{
\cs_set:cpn { \c_@@_text_prefix_tl #1 / #2 }
@@ -1113,6 +1180,9 @@
{ \exp_not:c { msg_ #1 :nnnnnn } {##1} {##2} {##3} { } { } { } }
\cs_new_protected:cpx { msg_ #1 :nn } ##1##2
{ \exp_not:c { msg_ #1 :nnnnnn } {##1} {##2} { } { } { } { } }
+ \cs_generate_variant:cn { msg_ #1 :nnn } { nnV }
+ \cs_generate_variant:cn { msg_ #1 :nnnn } { nnVV , nnVn , nnnV , nnnx }
+ \cs_generate_variant:cn { msg_ #1 :nnnnn } { nnnxx }
\cs_new_protected:cpx { msg_ #1 :nnxxxx } ##1##2##3##4##5##6
{
\use:x
@@ -1139,9 +1209,15 @@
% \msg_fatal:nnnn ,
% \msg_fatal:nnn ,
% \msg_fatal:nn ,
+% \msg_fatal:nnVV ,
+% \msg_fatal:nnVn ,
+% \msg_fatal:nnnV ,
+% \msg_fatal:nnV ,
% \msg_fatal:nnxxxx ,
% \msg_fatal:nnxxx ,
+% \msg_fatal:nnnxx ,
% \msg_fatal:nnxx ,
+% \msg_fatal:nnnx ,
% \msg_fatal:nnx
% }
% \begin{macro}{\@@_fatal_exit:}
@@ -1173,9 +1249,15 @@
% \msg_critical:nnnn ,
% \msg_critical:nnn ,
% \msg_critical:nn ,
+% \msg_critical:nnVV ,
+% \msg_critical:nnVn ,
+% \msg_critical:nnnV ,
+% \msg_critical:nnV ,
% \msg_critical:nnxxxx ,
% \msg_critical:nnxxx ,
+% \msg_critical:nnnxx ,
% \msg_critical:nnxx ,
+% \msg_critical:nnnx ,
% \msg_critical:nnx
% }
% Not quite so bad: just end the current file.
@@ -1198,9 +1280,15 @@
% \msg_error:nnnn ,
% \msg_error:nnn ,
% \msg_error:nn ,
+% \msg_error:nnVV ,
+% \msg_error:nnVn ,
+% \msg_error:nnnV ,
+% \msg_error:nnV ,
% \msg_error:nnxxxx ,
% \msg_error:nnxxx ,
+% \msg_error:nnnxx ,
% \msg_error:nnxx ,
+% \msg_error:nnnx ,
% \msg_error:nnx
% }
% For an error, the interrupt routine is called. We check if there is
@@ -1229,27 +1317,45 @@
% \msg_warning:nnnn ,
% \msg_warning:nnn ,
% \msg_warning:nn ,
+% \msg_warning:nnVV ,
+% \msg_warning:nnVn ,
+% \msg_warning:nnnV ,
+% \msg_warning:nnV ,
% \msg_warning:nnxxxx ,
% \msg_warning:nnxxx ,
+% \msg_warning:nnnxx ,
% \msg_warning:nnxx ,
+% \msg_warning:nnnx ,
% \msg_warning:nnx ,
% \msg_note:nnnnnn ,
% \msg_note:nnnnn ,
% \msg_note:nnnn ,
% \msg_note:nnn ,
% \msg_note:nn ,
+% \msg_note:nnVV ,
+% \msg_note:nnVn ,
+% \msg_note:nnnV ,
+% \msg_note:nnV ,
% \msg_note:nnxxxx ,
% \msg_note:nnxxx ,
+% \msg_note:nnnxx ,
% \msg_note:nnxx ,
+% \msg_note:nnnx ,
% \msg_note:nnx ,
% \msg_info:nnnnnn ,
% \msg_info:nnnnn ,
% \msg_info:nnnn ,
% \msg_info:nnn ,
% \msg_info:nn ,
+% \msg_info:nnVV ,
+% \msg_info:nnVn ,
+% \msg_info:nnnV ,
+% \msg_info:nnV ,
% \msg_info:nnxxxx ,
% \msg_info:nnxxx ,
+% \msg_info:nnnxx ,
% \msg_info:nnxx ,
+% \msg_info:nnnx ,
% \msg_info:nnx ,
% }
% Warnings and information messages have no decoration. Warnings are
@@ -1303,18 +1409,30 @@
% \msg_log:nnnn ,
% \msg_log:nnn ,
% \msg_log:nn ,
+% \msg_log:nnVV ,
+% \msg_log:nnVn ,
+% \msg_log:nnnV ,
+% \msg_log:nnV ,
% \msg_log:nnxxxx ,
% \msg_log:nnxxx ,
+% \msg_log:nnnxx ,
% \msg_log:nnxx ,
+% \msg_log:nnnx ,
% \msg_log:nnx ,
% \msg_term:nnnnnn ,
% \msg_term:nnnnn ,
% \msg_term:nnnn ,
% \msg_term:nnn ,
% \msg_term:nn ,
+% \msg_term:nnVV ,
+% \msg_term:nnVn ,
+% \msg_term:nnnV ,
+% \msg_term:nnV ,
% \msg_term:nnxxxx ,
% \msg_term:nnxxx ,
+% \msg_term:nnnxx ,
% \msg_term:nnxx ,
+% \msg_term:nnnx ,
% \msg_term:nnx ,
% }
% \enquote{Log} data is very similar to information, but with no extras
@@ -1345,9 +1463,15 @@
% \msg_none:nnnn ,
% \msg_none:nnn ,
% \msg_none:nn ,
+% \msg_none:nnVV ,
+% \msg_none:nnVn ,
+% \msg_none:nnnV ,
+% \msg_none:nnV ,
% \msg_none:nnxxxx ,
% \msg_none:nnxxx ,
+% \msg_none:nnnxx ,
% \msg_none:nnxx ,
+% \msg_none:nnnx ,
% \msg_none:nnx
% }
% The \texttt{none} message type is needed so that input can be gobbled.
@@ -1363,9 +1487,15 @@
% \msg_show:nnnn ,
% \msg_show:nnn ,
% \msg_show:nn ,
+% \msg_show:nnVV ,
+% \msg_show:nnVn ,
+% \msg_show:nnnV ,
+% \msg_show:nnV ,
% \msg_show:nnxxxx ,
% \msg_show:nnxxx ,
+% \msg_show:nnnxx ,
% \msg_show:nnxx ,
+% \msg_show:nnx ,
% \msg_show:nnx
% }
% \begin{macro}{\@@_show:n, \@@_show:w, \@@_show_dot:w, \@@_show:nn}
diff --git a/macros/latex/contrib/l3kernel/l3names.dtx b/macros/latex/contrib/l3kernel/l3names.dtx
index 1db4aaa806..f3f56f7f72 100644
--- a/macros/latex/contrib/l3kernel/l3names.dtx
+++ b/macros/latex/contrib/l3kernel/l3names.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -533,7 +533,6 @@
\@@_primitive:NN \pdfcompresslevel \tex_pdfcompresslevel:D
\@@_primitive:NN \pdfcolorstack \tex_pdfcolorstack:D
\@@_primitive:NN \pdfcolorstackinit \tex_pdfcolorstackinit:D
- \@@_primitive:NN \pdfcreationdate \tex_pdfcreationdate:D
\@@_primitive:NN \pdfdecimaldigits \tex_pdfdecimaldigits:D
\@@_primitive:NN \pdfdest \tex_pdfdest:D
\@@_primitive:NN \pdfdestmargin \tex_pdfdestmargin:D
@@ -627,6 +626,7 @@
\@@_primitive:NN \pdfadjustspacing \tex_adjustspacing:D
\@@_primitive:NN \pdfappendkern \tex_appendkern:D
\@@_primitive:NN \pdfcopyfont \tex_copyfont:D
+ \@@_primitive:NN \pdfcreationdate \tex_creationdate:D
\@@_primitive:NN \pdfdraftmode \tex_draftmode:D
\@@_primitive:NN \pdfeachlinedepth \tex_eachlinedepth:D
\@@_primitive:NN \pdfeachlineheight \tex_eachlineheight:D
diff --git a/macros/latex/contrib/l3kernel/l3news.pdf b/macros/latex/contrib/l3kernel/l3news.pdf
index 5a24e8b46e..7ebec4848a 100644
--- a/macros/latex/contrib/l3kernel/l3news.pdf
+++ b/macros/latex/contrib/l3kernel/l3news.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news01.pdf b/macros/latex/contrib/l3kernel/l3news01.pdf
index 9951afa47d..fe4f64501c 100644
--- a/macros/latex/contrib/l3kernel/l3news01.pdf
+++ b/macros/latex/contrib/l3kernel/l3news01.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news02.pdf b/macros/latex/contrib/l3kernel/l3news02.pdf
index 1b78bf3492..3b36d8a341 100644
--- a/macros/latex/contrib/l3kernel/l3news02.pdf
+++ b/macros/latex/contrib/l3kernel/l3news02.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news03.pdf b/macros/latex/contrib/l3kernel/l3news03.pdf
index a05ce9a5a9..f3031cb0d8 100644
--- a/macros/latex/contrib/l3kernel/l3news03.pdf
+++ b/macros/latex/contrib/l3kernel/l3news03.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news04.pdf b/macros/latex/contrib/l3kernel/l3news04.pdf
index e75b8011f3..d7155a9049 100644
--- a/macros/latex/contrib/l3kernel/l3news04.pdf
+++ b/macros/latex/contrib/l3kernel/l3news04.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news05.pdf b/macros/latex/contrib/l3kernel/l3news05.pdf
index a17cb861b5..788ded7ff1 100644
--- a/macros/latex/contrib/l3kernel/l3news05.pdf
+++ b/macros/latex/contrib/l3kernel/l3news05.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news06.pdf b/macros/latex/contrib/l3kernel/l3news06.pdf
index 5d30d5f234..9778f1dd95 100644
--- a/macros/latex/contrib/l3kernel/l3news06.pdf
+++ b/macros/latex/contrib/l3kernel/l3news06.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news07.pdf b/macros/latex/contrib/l3kernel/l3news07.pdf
index a6990b3d02..84e2f2c9f2 100644
--- a/macros/latex/contrib/l3kernel/l3news07.pdf
+++ b/macros/latex/contrib/l3kernel/l3news07.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news08.pdf b/macros/latex/contrib/l3kernel/l3news08.pdf
index fe9cbd8b2c..e91e2d344b 100644
--- a/macros/latex/contrib/l3kernel/l3news08.pdf
+++ b/macros/latex/contrib/l3kernel/l3news08.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news09.pdf b/macros/latex/contrib/l3kernel/l3news09.pdf
index 9e20ff1ab4..83832c3237 100644
--- a/macros/latex/contrib/l3kernel/l3news09.pdf
+++ b/macros/latex/contrib/l3kernel/l3news09.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news10.pdf b/macros/latex/contrib/l3kernel/l3news10.pdf
index 62699d7546..acbefc90b5 100644
--- a/macros/latex/contrib/l3kernel/l3news10.pdf
+++ b/macros/latex/contrib/l3kernel/l3news10.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news11.pdf b/macros/latex/contrib/l3kernel/l3news11.pdf
index 39a7cdb5a6..132979c8a7 100644
--- a/macros/latex/contrib/l3kernel/l3news11.pdf
+++ b/macros/latex/contrib/l3kernel/l3news11.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news12.pdf b/macros/latex/contrib/l3kernel/l3news12.pdf
index 7b96788d94..c1ed0ffaca 100644
--- a/macros/latex/contrib/l3kernel/l3news12.pdf
+++ b/macros/latex/contrib/l3kernel/l3news12.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3pdf.dtx b/macros/latex/contrib/l3kernel/l3pdf.dtx
index dd275751db..ebfdc9115b 100644
--- a/macros/latex/contrib/l3kernel/l3pdf.dtx
+++ b/macros/latex/contrib/l3kernel/l3pdf.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3prefixes.pdf b/macros/latex/contrib/l3kernel/l3prefixes.pdf
index b733ee4921..89ba420517 100644
--- a/macros/latex/contrib/l3kernel/l3prefixes.pdf
+++ b/macros/latex/contrib/l3kernel/l3prefixes.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3prg.dtx b/macros/latex/contrib/l3kernel/l3prg.dtx
index fe88bac05d..ec778817d3 100644
--- a/macros/latex/contrib/l3kernel/l3prg.dtx
+++ b/macros/latex/contrib/l3kernel/l3prg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3prop.dtx b/macros/latex/contrib/l3kernel/l3prop.dtx
index e7ef6d11f8..2d5fc3edcc 100644
--- a/macros/latex/contrib/l3kernel/l3prop.dtx
+++ b/macros/latex/contrib/l3kernel/l3prop.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -167,16 +167,16 @@
% {
% \prop_put:Nnn, \prop_put:NnV, \prop_put:Nno, \prop_put:Nne, \prop_put:Nnx,
% \prop_put:NVn, \prop_put:NVV, \prop_put:NVx, \prop_put:Nvx,
-% \prop_put:Non, \prop_put:Noo, \prop_put:Nxx,
+% \prop_put:Non, \prop_put:Nxn, \prop_put:NxV, \prop_put:Noo, \prop_put:Nxx,
% \prop_put:cnn, \prop_put:cnV, \prop_put:cno, \prop_put:cne, \prop_put:cnx,
% \prop_put:cVn, \prop_put:cVV, \prop_put:cVx, \prop_put:cvx,
-% \prop_put:con, \prop_put:coo, \prop_put:cxx,
+% \prop_put:con, \prop_put:cxn, \prop_put:cxV, \prop_put:coo, \prop_put:cxx,
% \prop_gput:Nnn, \prop_gput:NnV, \prop_gput:Nno, \prop_gput:Nne, \prop_gput:Nnx,
% \prop_gput:NVn, \prop_gput:NVV, \prop_gput:NVx, \prop_gput:Nvx,
-% \prop_gput:Non, \prop_gput:Noo, \prop_gput:Nxx,
+% \prop_gput:Non, \prop_gput:Nxn, \prop_gput:NxV, \prop_gput:Noo, \prop_gput:Nxx,
% \prop_gput:cnn, \prop_gput:cnV, \prop_gput:cno, \prop_gput:cne, \prop_gput:cnx,
% \prop_gput:cVn, \prop_gput:cVV, \prop_gput:cVx, \prop_gput:cvx,
-% \prop_gput:con, \prop_gput:coo, \prop_gput:cxx
+% \prop_gput:con, \prop_gput:cxn, \prop_gput:cxV, \prop_gput:coo, \prop_gput:cxx
% }
% \begin{syntax}
% \cs{prop_put:Nnn} \meta{property list} \Arg{key} \Arg{value}
@@ -250,8 +250,9 @@
%
% \begin{function}[updated = 2011-08-28]
% {
-% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN,
-% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN,
+% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN, \prop_get:NxN,
+% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN, \prop_get:cxN,
+% \prop_get:cnc
% }
% \begin{syntax}
% \cs{prop_get:NnN} \meta{property list} \Arg{key} \meta{tl var}
@@ -294,7 +295,11 @@
% the \meta{token list variable} is local. See also \cs{prop_gpop:NnNTF}.
% \end{function}
%
-% \begin{function}[added = 2014-07-17, EXP]{\prop_item:Nn, \prop_item:cn}
+% \begin{function}[added = 2014-07-17, EXP]
+% {
+% \prop_item:Nn, \prop_item:NV, \prop_item:No, \prop_item:Ne,
+% \prop_item:cn, \prop_item:cV, \prop_item:co, \prop_item:ce
+% }
% \begin{syntax}
% \cs{prop_item:Nn} \meta{property list} \Arg{key}
% \end{syntax}
@@ -399,8 +404,9 @@
%
% \begin{function}[updated = 2012-05-19, TF]
% {
-% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN,
-% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN
+% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN, \prop_get:NxN,
+% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN, \prop_get:cxN,
+% \prop_get:cnc
% }
% \begin{syntax}
% \cs{prop_get:NnNTF} \meta{property list} \Arg{key} \meta{token list variable} \\
@@ -982,8 +988,9 @@
%
% \begin{macro}[tested = m3prop002]
% {
-% \prop_get:NnN, \prop_get:NVN, \prop_get:NoN,
-% \prop_get:cnN, \prop_get:cVN, \prop_get:coN
+% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN, \prop_get:NxN,
+% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN, \prop_get:cxN,
+% \prop_get:cnc
% }
% Getting an item from a list is very easy: after splitting,
% if the key is in the property list, just set the token list variable
@@ -995,8 +1002,8 @@
{ \tl_set:Nn #3 {##2} }
{ \tl_set:Nn #3 { \q_no_value } }
}
-\cs_generate_variant:Nn \prop_get:NnN { NV , Nv , No }
-\cs_generate_variant:Nn \prop_get:NnN { c , cV , cv , co }
+\cs_generate_variant:Nn \prop_get:NnN { NV , Nv , No , Nx }
+\cs_generate_variant:Nn \prop_get:NnN { c , cV , cv , co , cx , cnc }
% \end{macrocode}
% \end{macro}
%
@@ -1035,7 +1042,11 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}[EXP]{\prop_item:Nn, \prop_item:cn}
+% \begin{macro}[EXP]
+% {
+% \prop_item:Nn, \prop_item:NV, \prop_item:No, \prop_item:Ne,
+% \prop_item:cn, \prop_item:cV, \prop_item:co, \prop_item:ce
+% }
% \begin{macro}[EXP]{\@@_item:nnn}
% Getting the value corresponding to a key in a property list in an
% expandable fashion simply uses \cs{prop_map_tokens:Nn} to go through
@@ -1053,7 +1064,7 @@
\str_if_eq:eeT {#1} {#2}
{ \prop_map_break:n { \exp_not:n {#3} } }
}
-\cs_generate_variant:Nn \prop_item:Nn { c }
+\cs_generate_variant:Nn \prop_item:Nn { NV , No , Ne , c , cV , co , ce }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1154,19 +1165,19 @@
% {
% \prop_put:Nnn, \prop_put:NnV, \prop_put:Nno, \prop_put:Nne, \prop_put:Nnx,
% \prop_put:NVn, \prop_put:NVV, \prop_put:NVx, \prop_put:Nvx,
-% \prop_put:Non, \prop_put:Noo, \prop_put:Nxx,
+% \prop_put:Non, \prop_put:Nxn, \prop_put:NxV, \prop_put:Noo, \prop_put:Nxx,
% \prop_put:cnn, \prop_put:cnV, \prop_put:cno, \prop_put:cne, \prop_put:cnx,
% \prop_put:cVn, \prop_put:cVV, \prop_put:cVx, \prop_put:cvx,
-% \prop_put:con, \prop_put:coo, \prop_put:cxx
+% \prop_put:con, \prop_put:cxn, \prop_put:cxV, \prop_put:coo, \prop_put:cxx
% }
% \begin{macro}[tested = m3prop002]
% {
% \prop_gput:Nnn, \prop_gput:NnV, \prop_gput:Nno, \prop_gput:Nne, \prop_gput:Nnx,
-% \prop_gput:NVn, \prop_gput:NVV, \prop_hput:NVx, \prop_hput:Nvx,
-% \prop_gput:Non, \prop_gput:Noo, \prop_gput:Nxx,
+% \prop_gput:NVn, \prop_gput:NVV, \prop_gput:NVx, \prop_hput:Nvx,
+% \prop_gput:Non, \prop_gput:Nxn, \prop_pgut:NxV, \prop_gput:Noo, \prop_gput:Nxx,
% \prop_gput:cnn, \prop_gput:cnV, \prop_gput:cno, \prop_gput:cne, \prop_gput:cnx,
% \prop_gput:cVn, \prop_gput:cVV, \prop_gput:cVx, \prop_gput:cvx,
-% \prop_gput:con, \prop_gput:coo, \prop_gput:cxx
+% \prop_gput:con, \prop_gput:cxn, \prop_gput:cxV, \prop_gput:coo, \prop_gput:cxx
% }
% \begin{macro}{\@@_put:NNnn}
% Since the branches of \cs{@@_split:NnTF} are used as the replacement
@@ -1196,13 +1207,13 @@
{ #1 #2 { \exp_not:o {#2} \l_@@_internal_tl } }
}
\cs_generate_variant:Nn \prop_put:Nnn
- { NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Noo , Nxx }
+ { NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Nx , NxV , Noo , Nxx }
\cs_generate_variant:Nn \prop_put:Nnn
- { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , coo , cxx }
+ { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , cx , cxV , coo , cxx }
\cs_generate_variant:Nn \prop_gput:Nnn
- { NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Noo , Nxx }
+ { NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Nx , NxV , Noo , Nxx }
\cs_generate_variant:Nn \prop_gput:Nnn
- { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , coo , cxx }
+ { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , cx , cxV , coo , cxx }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1307,8 +1318,9 @@
%
% \begin{macro}[TF, tested = m3prop004]
% {
-% \prop_get:NnN, \prop_get:NVN, \prop_get:NoN,
-% \prop_get:cnN, \prop_get:cVN, \prop_get:coN
+% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN, \prop_get:NxN,
+% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN, \prop_get:cxN,
+% \prop_get:cnc
% }
% Getting the value corresponding to a key, keeping track of whether
% the key was present or not, is implemented as a conditional (with
@@ -1324,7 +1336,7 @@
{ \prg_return_false: }
}
\prg_generate_conditional_variant:Nnn \prop_get:NnN
- { NV , Nv , No , c , cV , cv , co } { T , F , TF }
+ { NV , Nv , No , Nx , c , cV , cv , co , cx , cnc } { T , F , TF }
% \end{macrocode}
% \end{macro}
%
diff --git a/macros/latex/contrib/l3kernel/l3quark.dtx b/macros/latex/contrib/l3kernel/l3quark.dtx
index 41c61be838..e05b5369e1 100644
--- a/macros/latex/contrib/l3kernel/l3quark.dtx
+++ b/macros/latex/contrib/l3kernel/l3quark.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3regex.dtx b/macros/latex/contrib/l3kernel/l3regex.dtx
index 6aef0742a0..3d342960ac 100644
--- a/macros/latex/contrib/l3kernel/l3regex.dtx
+++ b/macros/latex/contrib/l3kernel/l3regex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -587,7 +587,11 @@
% while the later require a compiled expression as generated by
% \cs{regex_set:Nn}.
%
-% \begin{function}[TF, added = 2017-05-26]{\regex_match:nn, \regex_match:Nn}
+% \begin{function}[TF, added = 2017-05-26]
+% {
+% \regex_match:nn, \regex_match:nV,
+% \regex_match:Nn, \regex_match:NV
+% }
% \begin{syntax}
% \cs{regex_match:nnTF} \Arg{regex} \Arg{token list} \Arg{true code} \Arg{false code}
% \end{syntax}
@@ -600,7 +604,11 @@
% leaves \texttt{TRUE} then \texttt{FALSE} in the input stream.
% \end{function}
%
-% \begin{function}[added = 2017-05-26]{\regex_count:nnN, \regex_count:NnN}
+% \begin{function}[added = 2017-05-26]
+% {
+% \regex_count:nnN, \regex_count:nVN,
+% \regex_count:NnN, \regex_count:NVN
+% }
% \begin{syntax}
% \cs{regex_count:nnN} \Arg{regex} \Arg{token list} \meta{int var}
% \end{syntax}
@@ -657,7 +665,10 @@
% \section{Submatch extraction}
%
% \begin{function}[noTF, added = 2017-05-26]
-% {\regex_extract_once:nnN, \regex_extract_once:NnN}
+% {
+% \regex_extract_once:nnN, \regex_extract_once:nVN,
+% \regex_extract_once:NVN, \regex_extract_once:NVN
+% }
% \begin{syntax}
% \cs{regex_extract_once:nnN} \Arg{regex} \Arg{token list} \meta{seq~var}
% \cs{regex_extract_once:nnNTF} \Arg{regex} \Arg{token list} \meta{seq~var} \Arg{true code} \Arg{false code}
@@ -688,7 +699,10 @@
% \end{function}
%
% \begin{function}[noTF, added = 2017-05-26]
-% {\regex_extract_all:nnN, \regex_extract_all:NnN}
+% {
+% \regex_extract_all:nnN, \regex_extract_all:nVN,
+% \regex_extract_all:NnN, \regex_extract_all:NVN
+% }
% \begin{syntax}
% \cs{regex_extract_all:nnN} \Arg{regex} \Arg{token list} \meta{seq~var}
% \cs{regex_extract_all:nnNTF} \Arg{regex} \Arg{token list} \meta{seq~var} \Arg{true code} \Arg{false code}
@@ -711,7 +725,11 @@
% and the \texttt{true} branch is left in the input stream.
% \end{function}
%
-% \begin{function}[noTF, added = 2017-05-26]{\regex_split:nnN, \regex_split:NnN}
+% \begin{function}[noTF, added = 2017-05-26]
+% {
+% \regex_split:nnN, \regex_split:nVN,
+% \regex_split:NnN, \regex_split:NVN,
+% }
% \begin{syntax}
% \cs{regex_split:nnN} \Arg{regular expression} \Arg{token list} \meta{seq~var}
% \cs{regex_split:nnNTF} \Arg{regular expression} \Arg{token list} \meta{seq~var} \Arg{true code} \Arg{false code}
@@ -740,7 +758,10 @@
% \section{Replacement}
%
% \begin{function}[noTF, added = 2017-05-26]
-% {\regex_replace_once:nnN,\regex_replace_once:NnN}
+% {
+% \regex_replace_once:nnN,\regex_replace_once:nVN,
+% \regex_replace_once:NnN,\regex_replace_once:NVN
+% }
% \begin{syntax}
% \cs{regex_replace_once:nnN} \Arg{regular expression} \Arg{replacement} \meta{tl~var}
% \cs{regex_replace_once:nnNTF} \Arg{regular expression} \Arg{replacement} \meta{tl~var} \Arg{true code} \Arg{false code}
@@ -754,7 +775,10 @@
% \end{function}
%
% \begin{function}[noTF, added = 2017-05-26]
-% {\regex_replace_all:nnN, \regex_replace_all:NnN}
+% {
+% \regex_replace_all:nnN,\regex_replace_all:nVN,
+% \regex_replace_all:NnN,\regex_replace_all:NVN
+% }
% \begin{syntax}
% \cs{regex_replace_all:nnN} \Arg{regular expression} \Arg{replacement} \meta{tl~var}
% \cs{regex_replace_all:nnNTF} \Arg{regular expression} \Arg{replacement} \meta{tl~var} \Arg{true code} \Arg{false code}
@@ -6518,7 +6542,11 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[TF]{\regex_match:nn, \regex_match:Nn}
+% \begin{macro}[TF]
+% {
+% \regex_match:nn, \regex_match:nV,
+% \regex_match:Nn, \regex_match:NV
+% }
% Those conditionals are based on a common auxiliary defined
% later. Its first argument builds the \textsc{nfa} corresponding to
% the regex, and the second argument is the query token list. Once we
@@ -6530,21 +6558,26 @@
\@@_if_match:nn { \@@_build:n {#1} } {#2}
\@@_return:
}
+\prg_generate_conditional_variant:Nnn \regex_match:nn { nV } { T , F , TF }
\prg_new_protected_conditional:Npnn \regex_match:Nn #1#2 { T , F , TF }
{
\@@_if_match:nn { \@@_build:N #1 } {#2}
\@@_return:
}
+\prg_generate_conditional_variant:Nnn \regex_match:Nn { NV } { T , F , TF }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\regex_count:nnN, \regex_count:NnN}
+% \begin{macro}
+% {\regex_count:nnN, \regex_count:nVN, \regex_count:NnN, \regex_count:NVN}
% Again, use an auxiliary whose first argument builds the \textsc{nfa}.
% \begin{macrocode}
\cs_new_protected:Npn \regex_count:nnN #1
{ \@@_count:nnN { \@@_build:n {#1} } }
\cs_new_protected:Npn \regex_count:NnN #1
{ \@@_count:nnN { \@@_build:N #1 } }
+\cs_generate_variant:Nn \regex_count:nnN { nV }
+\cs_generate_variant:Nn \regex_count:NnN { NV }
% \end{macrocode}
% \end{macro}
%
@@ -6573,11 +6606,16 @@
%
% \begin{macro}[noTF]
% {
-% \regex_extract_once:nnN, \regex_extract_once:NnN,
-% \regex_extract_all:nnN, \regex_extract_all:NnN,
-% \regex_replace_once:nnN, \regex_replace_once:NnN,
-% \regex_replace_all:nnN, \regex_replace_all:NnN,
-% \regex_split:nnN, \regex_split:NnN
+% \regex_extract_once:nnN, \regex_extract_once:nVN,
+% \regex_extract_once:NnN, \regex_extract_once:NVN,
+% \regex_extract_all:nnN, \regex_extract_all:nVN,
+% \regex_extract_all:NnN, \regex_extract_all:NVN,
+% \regex_replace_once:nnN, \regex_replace_once:nVN,
+% \regex_replace_once:NnN, \regex_replace_once:NVN,
+% \regex_replace_all:nnN, \regex_replace_all:nVN,
+% \regex_replace_all:NnN, \regex_replace_all:NVN,
+% \regex_split:NnN, \regex_split:NVN,
+% \regex_split:nnN, \regex_split:nVN
% }
% We define here $40$ user functions, following a common pattern in
% terms of \texttt{:nnN} auxiliaries, defined in the coming
@@ -6595,6 +6633,11 @@
{ #1 { \@@_build:n {##1} } {##2} ##3 \@@_return: }
\prg_new_protected_conditional:Npnn #3 ##1##2##3 { T , F , TF }
{ #1 { \@@_build:N ##1 } {##2} ##3 \@@_return: }
+ \cs_generate_variant:Nn #2 { nV }
+ \prg_generate_conditional_variant:Nnn #2 { nV } { T , F , TF }
+ \cs_generate_variant:Nn #3 { NV }
+ \prg_generate_conditional_variant:Nnn #3 { NV } { T , F , TF }
+
}
\@@_tmp:w \@@_extract_once:nnN
\regex_extract_once:nnN \regex_extract_once:NnN
diff --git a/macros/latex/contrib/l3kernel/l3seq.dtx b/macros/latex/contrib/l3kernel/l3seq.dtx
index ad14896d42..d523320f4e 100644
--- a/macros/latex/contrib/l3kernel/l3seq.dtx
+++ b/macros/latex/contrib/l3kernel/l3seq.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -126,8 +126,12 @@
%
% \begin{function}[added = 2011-08-15, updated = 2012-07-02]
% {
-% \seq_set_split:Nnn , \seq_set_split:NnV ,
-% \seq_gset_split:Nnn, \seq_gset_split:NnV
+% \seq_set_split:Nnn ,
+% \seq_set_split:NVn , \seq_set_split:NnV , \seq_set_split:NVV ,
+% \seq_set_split:Nnx , \seq_set_split:Nxx ,
+% \seq_gset_split:Nnn,
+% \seq_gset_split:NVn , \seq_gset_split:NnV, \seq_gset_split:NVV,
+% \seq_gset_split:Nnx , \seq_gset_split:Nxx
% }
% \begin{syntax}
% \cs{seq_set_split:Nnn} \meta{seq~var} \Arg{delimiter} \Arg{token list}
@@ -304,7 +308,11 @@
% the special marker \cs{q_no_value}.
% \end{function}
%
-% \begin{function}[added = 2014-07-17, EXP]{\seq_item:Nn, \seq_item:cn}
+% \begin{function}[added = 2014-07-17, EXP]
+% {
+% \seq_item:Nn, \seq_item:NV, \seq_item:Ne,
+% \seq_item:cn, \seq_item:cV, \seq_item:ce
+% }
% \begin{syntax}
% \cs{seq_item:Nn} \meta{seq~var} \Arg{integer expression}
% \end{syntax}
@@ -463,8 +471,10 @@
%
% \begin{function}
% {
-% \seq_remove_all:Nn , \seq_remove_all:cn,
-% \seq_gremove_all:Nn, \seq_gremove_all:cn
+% \seq_remove_all:Nn, \seq_remove_all:NV, \seq_remove_all:Nx,
+% \seq_remove_all:cn, \seq_remove_all:cV, \seq_remove_all:cx,
+% \seq_gremove_all:Nn, \seq_gremove_all:NV, \seq_gremove_all:Nx,
+% \seq_gremove_all:cn, \seq_gremove_all:cV, \seq_gremove_all:cx
% }
% \begin{syntax}
% \cs{seq_remove_all:Nn} \meta{seq~var} \Arg{item}
@@ -1266,8 +1276,12 @@
%
% \begin{macro}
% {
-% \seq_set_split:Nnn , \seq_set_split:NnV ,
-% \seq_gset_split:Nnn, \seq_gset_split:NnV
+% \seq_set_split:Nnn ,
+% \seq_set_split:NVn , \seq_set_split:NnV , \seq_set_split:NVV ,
+% \seq_set_split:Nnx , \seq_set_split:Nxx ,
+% \seq_gset_split:Nnn,
+% \seq_gset_split:NVn , \seq_gset_split:NnV, \seq_gset_split:NVV,
+% \seq_gset_split:Nnx, \seq_gset_split:Nxx
% }
% \begin{macro}
% {
@@ -1340,8 +1354,8 @@
}
\cs_new:Npn \@@_set_split:w #1 \@@_set_split_end:
{ \@@_wrap_item:n {#1} }
-\cs_generate_variant:Nn \seq_set_split:Nnn { NnV }
-\cs_generate_variant:Nn \seq_gset_split:Nnn { NnV }
+\cs_generate_variant:Nn \seq_set_split:Nnn { NV , NnV , NVV , Nnx , Nxx }
+\cs_generate_variant:Nn \seq_gset_split:Nnn { NV , NnV , NVV , Nnx , Nxx }
\cs_generate_variant:Nn \seq_set_split_keep_spaces:Nnn { NnV }
\cs_generate_variant:Nn \seq_gset_split_keep_spaces:Nnn { NnV }
% \end{macrocode}
@@ -1499,9 +1513,17 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\seq_remove_all:Nn, \seq_remove_all:cn}
+% \begin{macro}
+% {
+% \seq_remove_all:Nn, \seq_remove_all:NV, \seq_remove_all:Nx,
+% \seq_remove_all:cn, \seq_remove_all:cV, \seq_remove_all:cx
+% }
% \UnitTested
-% \begin{macro}{\seq_gremove_all:Nn, \seq_gremove_all:cn}
+% \begin{macro}
+% {
+% \seq_gremove_all:Nn, \seq_gremove_all:NV, \seq_gremove_all:Nx,
+% \seq_gremove_all:cn, \seq_gremove_all:cV, \seq_gremove_all:cx
+% }
% \UnitTested
% \begin{macro}{\@@_remove_all_aux:NNn}
% The idea of the code here is to avoid a relatively expensive addition of
@@ -1542,8 +1564,8 @@
#1 #2 {#2}
\@@_pop_item_def:
}
-\cs_generate_variant:Nn \seq_remove_all:Nn { c }
-\cs_generate_variant:Nn \seq_gremove_all:Nn { c }
+\cs_generate_variant:Nn \seq_remove_all:Nn { NV , Nx , c , cV , cx }
+\cs_generate_variant:Nn \seq_gremove_all:Nn { NV , Nx , c , cV , cx }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -2047,7 +2069,8 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\seq_item:Nn, \seq_item:cn}
+% \begin{macro}
+% {\seq_item:Nn, \seq_item:NV, \seq_item:Ne, \seq_item:cn, \seq_item:cV, \seq_item:ce}
% \begin{macro}{\@@_item:wNn, \@@_item:nN, \@@_item:nwn}
% The idea here is to find the offset of the item from the left, then use
% a loop to grab the correct item. If the resulting offset is too large,
@@ -2077,7 +2100,7 @@
{ \prg_break:n { \exp_not:n {#3} } }
{ \exp_args:Nf \@@_item:nwn { \int_eval:n { #1 - 1 } } }
}
-\cs_generate_variant:Nn \seq_item:Nn { c }
+\cs_generate_variant:Nn \seq_item:Nn { NV , Ne , c , cV , ce }
% \end{macrocode}
% \end{macro}
% \end{macro}
diff --git a/macros/latex/contrib/l3kernel/l3skip.dtx b/macros/latex/contrib/l3kernel/l3skip.dtx
index 35d380e58b..7ce22afb7e 100644
--- a/macros/latex/contrib/l3kernel/l3skip.dtx
+++ b/macros/latex/contrib/l3kernel/l3skip.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3sort.dtx b/macros/latex/contrib/l3kernel/l3sort.dtx
index 99efb3e9c2..b92eddbb35 100644
--- a/macros/latex/contrib/l3kernel/l3sort.dtx
+++ b/macros/latex/contrib/l3kernel/l3sort.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3str-convert.dtx b/macros/latex/contrib/l3kernel/l3str-convert.dtx
index 6bb0b39f85..6c0b2145e2 100644
--- a/macros/latex/contrib/l3kernel/l3str-convert.dtx
+++ b/macros/latex/contrib/l3kernel/l3str-convert.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3str.dtx b/macros/latex/contrib/l3kernel/l3str.dtx
index ed7e39d816..c2498436cb 100644
--- a/macros/latex/contrib/l3kernel/l3str.dtx
+++ b/macros/latex/contrib/l3kernel/l3str.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -283,7 +283,10 @@
% \end{function}
%
% \begin{function}[added = 2013-07-24, updated = 2022-03-21, EXP, noTF]
-% {\str_case:nn, \str_case:Vn, \str_case:Nn, \str_case:on, \str_case:nV, \str_case:nv}
+% {
+% \str_case:nn, \str_case:Vn, \str_case:Nn, \str_case:on, \str_case:en,
+% \str_case:nV, \str_case:nv
+% }
% \begin{syntax}
% \cs{str_case:nnTF} \Arg{test string} \\
% ~~|{| \\
@@ -1228,7 +1231,10 @@
% \end{macro}
%
% \begin{macro}[EXP, noTF]
-% {\str_case:nn, \str_case:Vn, \str_case:Nn, \str_case:on, \str_case:nV, \str_case:nv, \str_case_e:nn}
+% {
+% \str_case:nn, \str_case:Vn, \str_case:Nn, \str_case:on, \str_case:en, \str_case:nV, \str_case:nv,
+% \str_case_e:nn
+% }
% \begin{macro}[EXP]{\@@_case:nnTF, \@@_case_e:nnTF}
% \begin{macro}[EXP]
% {\@@_case:nw, \@@_case_e:nw, \@@_case_end:nw}
@@ -1257,7 +1263,7 @@
}
\cs_new:Npn \@@_case:nnTF #1#2#3#4
{ \@@_case:nw {#1} #2 {#1} { } \s_@@_mark {#3} \s_@@_mark {#4} \s_@@_stop }
-\cs_generate_variant:Nn \str_case:nn { V , o , nV , nv }
+\cs_generate_variant:Nn \str_case:nn { V , o , e , nV , nv }
\prg_generate_conditional_variant:Nnn \str_case:nn
{ V , o , nV , nv } { T , F , TF }
\cs_new_eq:NN \str_case:Nn \str_case:Vn
diff --git a/macros/latex/contrib/l3kernel/l3styleguide.pdf b/macros/latex/contrib/l3kernel/l3styleguide.pdf
index a8a44d7cfc..c3025741c6 100644
--- a/macros/latex/contrib/l3kernel/l3styleguide.pdf
+++ b/macros/latex/contrib/l3kernel/l3styleguide.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3styleguide.tex b/macros/latex/contrib/l3kernel/l3styleguide.tex
index dbb84004aa..d241392fb9 100644
--- a/macros/latex/contrib/l3kernel/l3styleguide.tex
+++ b/macros/latex/contrib/l3kernel/l3styleguide.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2023-08-11}
+\date{Released 2023-08-29}
\begin{document}
diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
index dbf641ceaf..ebc9bcab2a 100644
--- a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
+++ b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.tex b/macros/latex/contrib/l3kernel/l3syntax-changes.tex
index 18a715e578..42e1b4c263 100644
--- a/macros/latex/contrib/l3kernel/l3syntax-changes.tex
+++ b/macros/latex/contrib/l3kernel/l3syntax-changes.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2023-08-11}
+\date{Released 2023-08-29}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex/contrib/l3kernel/l3sys.dtx b/macros/latex/contrib/l3kernel/l3sys.dtx
index 5ff23b4775..5717e60e73 100644
--- a/macros/latex/contrib/l3kernel/l3sys.dtx
+++ b/macros/latex/contrib/l3kernel/l3sys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -79,6 +79,11 @@
% \end{texnote}
% \end{variable}
%
+% \begin{variable}[added = 2023-08-27]{\c_sys_timestamp_str}
+% The timestamp for the current job: the format is as described for
+% \cs{file_timestamp:n}.
+% \end{variable}
+%
% \section{Engine}
%
% \begin{function}[added = 2015-09-07, EXP, pTF]
@@ -928,6 +933,23 @@ end
% \end{macrocode}
% \end{variable}
%
+% \begin{variable}{\c_sys_timestamp_str}
+% A simple expansion: Lua\TeX{} chokes if we use \tn{pdffeedback} here,
+% hence the direct use of Lua. Notice that the function there is in the
+% \texttt{pdf} library but isn actually tied to PDF.
+% \begin{macrocode}
+\@@_everyjob:n
+ {
+ \str_const:Nx \c_sys_timestamp_str
+ {
+ \cs_if_exist:NTF \tex_directlua:D
+ { \tex_directlua:D { tex.print(pdf.getcreationdate()) } }
+ { \tex_creationdate:D }
+ }
+ }
+% \end{macrocode}
+% \end{variable}
+%
% \subsubsection{Random numbers}
%
% \begin{macro}[EXP]{\sys_rand_seed:}
diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.pdf b/macros/latex/contrib/l3kernel/l3term-glossary.pdf
index 23f7fa7394..c34ddb6bd8 100644
--- a/macros/latex/contrib/l3kernel/l3term-glossary.pdf
+++ b/macros/latex/contrib/l3kernel/l3term-glossary.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.tex b/macros/latex/contrib/l3kernel/l3term-glossary.tex
index 9258e215a0..e0a5780cb8 100644
--- a/macros/latex/contrib/l3kernel/l3term-glossary.tex
+++ b/macros/latex/contrib/l3kernel/l3term-glossary.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2023-08-11}
+\date{Released 2023-08-29}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex/contrib/l3kernel/l3text-case.dtx b/macros/latex/contrib/l3kernel/l3text-case.dtx
index 245ea5b4fa..07a79e2bb0 100644
--- a/macros/latex/contrib/l3kernel/l3text-case.dtx
+++ b/macros/latex/contrib/l3kernel/l3text-case.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3text-map.dtx b/macros/latex/contrib/l3kernel/l3text-map.dtx
index 9d083adf04..b2372d446f 100644
--- a/macros/latex/contrib/l3kernel/l3text-map.dtx
+++ b/macros/latex/contrib/l3kernel/l3text-map.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3text-purify.dtx b/macros/latex/contrib/l3kernel/l3text-purify.dtx
index 450c5b748f..35d180d042 100644
--- a/macros/latex/contrib/l3kernel/l3text-purify.dtx
+++ b/macros/latex/contrib/l3kernel/l3text-purify.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3text.dtx b/macros/latex/contrib/l3kernel/l3text.dtx
index a946fad845..016c5579a1 100644
--- a/macros/latex/contrib/l3kernel/l3text.dtx
+++ b/macros/latex/contrib/l3kernel/l3text.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
index 1a484457db..385b3db8ac 100644
--- a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
+++ b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3tl.dtx b/macros/latex/contrib/l3kernel/l3tl.dtx
index 08ed9216ef..06226fd7ba 100644
--- a/macros/latex/contrib/l3kernel/l3tl.dtx
+++ b/macros/latex/contrib/l3kernel/l3tl.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -177,10 +177,10 @@
%
% \begin{function}
% {
-% \tl_put_left:Nn, \tl_put_left:NV, \tl_put_left:No, \tl_put_left:Nx,
-% \tl_put_left:cn, \tl_put_left:cV, \tl_put_left:co, \tl_put_left:cx,
-% \tl_gput_left:Nn, \tl_gput_left:NV, \tl_gput_left:No, \tl_gput_left:Nx,
-% \tl_gput_left:cn, \tl_gput_left:cV, \tl_gput_left:co, \tl_gput_left:cx
+% \tl_put_left:Nn, \tl_put_left:NV, \tl_put_left:Nv, \tl_put_left:No, \tl_put_left:Nx,
+% \tl_put_left:cn, \tl_put_left:cV, \tl_put_left:cv, \tl_put_left:co, \tl_put_left:cx,
+% \tl_gput_left:Nn, \tl_gput_left:NV, \tl_gput_left:Nv, \tl_gput_left:No, \tl_gput_left:Nx,
+% \tl_gput_left:cn, \tl_gput_left:cV, \tl_gput_left:cv, \tl_gput_left:co, \tl_gput_left:cx
% }
% \begin{syntax}
% \cs{tl_put_left:Nn} \meta{tl~var} \Arg{tokens}
@@ -191,12 +191,10 @@
%
% \begin{function}
% {
-% \tl_put_right:Nn, \tl_put_right:NV, \tl_put_right:No, \tl_put_right:Nx,
-% \tl_put_right:cn, \tl_put_right:cV, \tl_put_right:co, \tl_put_right:cx,
-% \tl_gput_right:Nn, \tl_gput_right:NV, \tl_gput_right:No,
-% \tl_gput_right:Nx,
-% \tl_gput_right:cn, \tl_gput_right:cV, \tl_gput_right:co,
-% \tl_gput_right:cx
+% \tl_put_right:Nn, \tl_put_right:NV, \tl_put_right:Nv, \tl_put_right:No, \tl_put_right:Nx,
+% \tl_put_right:cn, \tl_put_right:cV, \tl_put_right:cv, \tl_put_right:co, \tl_put_right:cx,
+% \tl_gput_right:Nn, \tl_gput_right:NV, \tl_gput_right:Nv, \tl_gput_right:No, \tl_gput_right:Nx,
+% \tl_gput_right:cn, \tl_gput_right:cV, \tl_gput_right:cv, \tl_gput_right:co, \tl_gput_right:cx
% }
% \begin{syntax}
% \cs{tl_put_right:Nn} \meta{tl~var} \Arg{tokens}
@@ -230,7 +228,7 @@
% \end{function}
%
% \begin{function}[added = 2012-05-24, updated = 2012-06-05, EXP,pTF]
-% {\tl_if_empty:n, \tl_if_empty:V, \tl_if_empty:o}
+% {\tl_if_empty:n, \tl_if_empty:V, \tl_if_empty:o, \tl_if_empty:e}
% \begin{syntax}
% \cs{tl_if_empty_p:n} \Arg{token list}
% \cs{tl_if_empty:nTF} \Arg{token list} \Arg{true code} \Arg{false code}
@@ -270,7 +268,8 @@
% category codes are not important.
% \end{function}
%
-% \begin{function}[TF]{\tl_if_eq:nn}
+% \begin{function}[TF]
+% {\tl_if_eq:nn, \tl_if_eq:Vn, \tl_if_eq:nV, \tl_if_eq:xn, \tl_if_eq:nx}
% \begin{syntax}
% \cs{tl_if_eq:nnTF} \Arg{token list_1} \Arg{token list_2} \Arg{true code} \Arg{false code}
% \end{syntax}
@@ -281,7 +280,7 @@
% or \cs{str_if_eq:nnTF} if category codes are not important.
% \end{function}
%
-% \begin{function}[TF]{\tl_if_in:Nn, \tl_if_in:cn}
+% \begin{function}[TF]{\tl_if_in:Nn, \tl_if_in:NV, \tl_if_in:cn, \tl_if_in:cV}
% \begin{syntax}
% \cs{tl_if_in:NnTF} \meta{tl~var} \Arg{token list} \Arg{true code} \Arg{false code}
% \end{syntax}
@@ -293,7 +292,7 @@
% \end{function}
%
% \begin{function}[TF]
-% {\tl_if_in:nn, \tl_if_in:Vn, \tl_if_in:on, \tl_if_in:no}
+% {\tl_if_in:nn, \tl_if_in:Vn, \tl_if_in:nV, \tl_if_in:on, \tl_if_in:no}
% \begin{syntax}
% \cs{tl_if_in:nnTF} \Arg{token list_1} \Arg{token list_2} \Arg{true code} \Arg{false code}
% \end{syntax}
@@ -438,7 +437,8 @@
%
% \subsection{Using token lists}
%
-% \begin{function}[EXP]{\tl_to_str:n, \tl_to_str:o, \tl_to_str:V, \tl_to_str:v}
+% \begin{function}[EXP]
+% {\tl_to_str:n, \tl_to_str:o, \tl_to_str:V, \tl_to_str:v, \tl_to_str:e}
% \begin{syntax}
% \cs{tl_to_str:n} \Arg{token list}
% \end{syntax}
@@ -536,7 +536,7 @@
% \end{function}
%
% \begin{function}[updated = 2012-01-08, EXP]
-% {\tl_reverse:n, \tl_reverse:V, \tl_reverse:o}
+% {\tl_reverse:n, \tl_reverse:V, \tl_reverse:o, \tl_reverse:f, \tl_reverse:e}
% \begin{syntax}
% \cs{tl_reverse:n} \Arg{token list}
% \end{syntax}
@@ -1073,10 +1073,14 @@
%
% \begin{function}[updated = 2011-08-11]
% {
-% \tl_replace_once:Nnn, \tl_replace_once:Nxx,
-% \tl_replace_once:cnn, \tl_replace_once:cxx,
-% \tl_greplace_once:Nnn, \tl_greplace_once:Nxx
-% \tl_greplace_once:cnn, \tl_greplace_once:cxx
+% \tl_replace_once:Nnn, \tl_replace_once:NVn, \tl_replace_once:NnV,
+% \tl_replace_once:Nxn, \tl_replace_once:Nnx, \tl_replace_once:Nxx,
+% \tl_replace_once:cnn, \tl_replace_once:cVn, \tl_replace_once:cnV,
+% \tl_replace_once:cxn, \tl_replace_once:cnx, \tl_replace_once:cxx,
+% \tl_greplace_once:Nnn, \tl_greplace_once:NVn, \tl_rgeplace_once:NnV,
+% \tl_greplace_once:Nxn, \tl_greplace_once:Nnx, \tl_greplace_once:Nxx,
+% \tl_greplace_once:cnn, \tl_greplace_once:cVn, \tl_greplace_once:cnV,
+% \tl_greplace_once:cxn, \tl_greplace_once:cnx, \tl_greplace_once:cxx
% }
% \begin{syntax}
% \cs{tl_replace_once:Nnn} \meta{tl~var} \Arg{old tokens} \Arg{new tokens}
@@ -1090,10 +1094,14 @@
%
% \begin{function}[updated = 2011-08-11]
% {
-% \tl_replace_all:Nnn, \tl_replace_all:Nxx,
-% \tl_replace_all:cnn, \tl_replace_all:cxx
-% \tl_greplace_all:Nnn, \tl_greplace_all:Nxx,
-% \tl_greplace_all:cnn, \tl_greplace_all:cxx
+% \tl_replace_all:Nnn, \tl_replace_all:NVn, \tl_replace_all:NnV,
+% \tl_replace_all:Nxn, \tl_replace_all:Nnx, \tl_replace_all:Nxx,
+% \tl_replace_all:cnn, \tl_replace_all:cVn, \tl_replace_all:cnV,
+% \tl_replace_all:cxn, \tl_replace_all:cnx, \tl_replace_all:cxx,
+% \tl_greplace_all:Nnn, \tl_greplace_all:NVn, \tl_greplace_all:cnV,
+% \tl_greplace_all:Nxn, \tl_greplace_all:Nnx, \tl_greplace_all:Nxx,
+% \tl_greplace_all:cnn, \tl_greplace_all:cVn, \tl_greplace_all:cnV,
+% \tl_greplace_all:cxn, \tl_greplace_all:cnx, \tl_greplace_all:cxx
% }
% \begin{syntax}
% \cs{tl_replace_all:Nnn} \meta{tl~var} \Arg{old tokens} \Arg{new tokens}
@@ -1111,10 +1119,10 @@
%
% \begin{function}[updated = 2011-08-11]
% {
-% \tl_remove_once:Nn, \tl_remove_once:Nx,
-% \tl_remove_once:cn, \tl_remove_once:cx,
-% \tl_gremove_once:Nn, \tl_gremove_once:Nx
-% \tl_gremove_once:cn, \tl_gremove_once:cx
+% \tl_remove_once:Nn, \tl_remove_once:NV, \tl_remove_once:Nx,
+% \tl_remove_once:cn, \tl_remove_once:cV, \tl_remove_once:cx,
+% \tl_gremove_once:Nn, \tl_gremove_once:NV, \tl_gremove_once:Nx
+% \tl_gremove_once:cn, \tl_gremove_once:cV, \tl_gremove_once:cx
% }
% \begin{syntax}
% \cs{tl_remove_once:Nn} \meta{tl~var} \Arg{tokens}
@@ -1127,10 +1135,10 @@
%
% \begin{function}[updated = 2011-08-11]
% {
-% \tl_remove_all:Nn, \tl_remove_all:Nx,
-% \tl_remove_all:cn, \tl_remove_all:cx,
-% \tl_gremove_all:Nn, \tl_gremove_all:Nx
-% \tl_gremove_all:cn, \tl_gremove_all:cx
+% \tl_remove_all:Nn, \tl_remove_all:NV, \tl_remove_all:Nx,
+% \tl_remove_all:cn, \tl_remove_all:cV, \tl_remove_all:cx,
+% \tl_gremove_all:Nn, \tl_gremove_all:NV, \tl_gremove_all:Nx
+% \tl_gremove_all:cn, \tl_gremove_all:cV, \tl_gremove_all:cx
% }
% \begin{syntax}
% \cs{tl_remove_all:Nn} \meta{tl~var} \Arg{tokens}
@@ -1161,10 +1169,10 @@
%
% \begin{function}[updated = 2015-08-11]
% {
-% \tl_set_rescan:Nnn, \tl_set_rescan:Nno, \tl_set_rescan:Nnx,
-% \tl_set_rescan:cnn, \tl_set_rescan:cno, \tl_set_rescan:cnx,
-% \tl_gset_rescan:Nnn, \tl_gset_rescan:Nno, \tl_gset_rescan:Nnx,
-% \tl_gset_rescan:cnn, \tl_gset_rescan:cno, \tl_gset_rescan:cnx
+% \tl_set_rescan:Nnn, \tl_set_rescan:NnV, \tl_set_rescan:Nno, \tl_set_rescan:Nnx,
+% \tl_set_rescan:cnn, \tl_set_rescan:cnV, \tl_set_rescan:cno, \tl_set_rescan:cnx,
+% \tl_gset_rescan:Nnn, \tl_gset_rescan:NnV, \tl_gset_rescan:Nno, \tl_gset_rescan:Nnx,
+% \tl_gset_rescan:cnn, \tl_gset_rescan:cnV, \tl_gset_rescan:cno, \tl_gset_rescan:cnx
% }
% \begin{syntax}
% \cs{tl_set_rescan:Nnn} \meta{tl~var} \Arg{setup} \Arg{tokens}
@@ -1488,13 +1496,13 @@
%
% \begin{macro}
% {
-% \tl_put_left:Nn, \tl_put_left:NV, \tl_put_left:No, \tl_put_left:Nx,
-% \tl_put_left:cn, \tl_put_left:cV, \tl_put_left:co, \tl_put_left:cx
+% \tl_put_left:Nn, \tl_put_left:NV, \tl_put_left:Nv, \tl_put_left:No, \tl_put_left:Nx,
+% \tl_put_left:cn, \tl_put_left:cV, \tl_put_left:cv, \tl_put_left:co, \tl_put_left:cx
% }
% \begin{macro}
% {
-% \tl_gput_left:Nn, \tl_gput_left:NV, \tl_gput_left:No, \tl_gput_left:Nx,
-% \tl_gput_left:cn, \tl_gput_left:cV, \tl_gput_left:co, \tl_gput_left:cx
+% \tl_gput_left:Nn, \tl_gput_left:NV, \tl_gput_left:Nv, \tl_gput_left:No, \tl_gput_left:Nx,
+% \tl_gput_left:cn, \tl_gput_left:cV, \tl_gput_left:cv, \tl_gput_left:co, \tl_gput_left:cx
% }
% Adding to the left is done directly to gain a little performance.
% \begin{macrocode}
@@ -1508,6 +1516,11 @@
\__kernel_tl_set:Nx #1
{ \exp_not:V #2 \__kernel_exp_not:w \exp_after:wN {#1} }
}
+\cs_new_protected:Npn \tl_put_left:Nv #1#2
+ {
+ \__kernel_tl_set:Nx #1
+ { \exp_not:v {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
+ }
\cs_new_protected:Npn \tl_put_left:No #1#2
{
\__kernel_tl_set:Nx #1
@@ -1528,6 +1541,11 @@
\__kernel_tl_gset:Nx #1
{ \exp_not:V #2 \__kernel_exp_not:w \exp_after:wN {#1} }
}
+\cs_new_protected:Npn \tl_gput_left:Nv #1#2
+ {
+ \__kernel_tl_gset:Nx #1
+ { \exp_not:v {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
+ }
\cs_new_protected:Npn \tl_gput_left:No #1#2
{
\__kernel_tl_gset:Nx #1
@@ -1540,10 +1558,12 @@
{ \__kernel_tl_gset:Nx #1 { #2 \__kernel_exp_not:w \exp_after:wN {#1} } }
\cs_generate_variant:Nn \tl_put_left:Nn { c }
\cs_generate_variant:Nn \tl_put_left:NV { c }
+\cs_generate_variant:Nn \tl_put_left:Nv { c }
\cs_generate_variant:Nn \tl_put_left:No { c }
\cs_generate_variant:Nn \tl_put_left:Nx { c }
\cs_generate_variant:Nn \tl_gput_left:Nn { c }
\cs_generate_variant:Nn \tl_gput_left:NV { c }
+\cs_generate_variant:Nn \tl_gput_left:NV { c }
\cs_generate_variant:Nn \tl_gput_left:No { c }
\cs_generate_variant:Nn \tl_gput_left:Nx { c }
% \end{macrocode}
@@ -1552,14 +1572,14 @@
%
% \begin{macro}
% {
-% \tl_put_right:Nn, \tl_put_right:NV, \tl_put_right:No, \tl_put_right:Nx,
-% \tl_put_right:cn, \tl_put_right:cV, \tl_put_right:co, \tl_put_right:cx
+% \tl_put_right:Nn, \tl_put_right:NV, \tl_put_right:Nv, \tl_put_right:No, \tl_put_right:Nx,
+% \tl_put_right:cn, \tl_put_right:cV, \tl_put_right:cv, \tl_put_right:co, \tl_put_right:cx
% }
% \begin{macro}
% {
-% \tl_gput_right:Nn, \tl_gput_right:NV, \tl_gput_right:No,
+% \tl_gput_right:Nn, \tl_gput_right:NV, \tl_gput_right:Nv, \tl_gput_right:No,
% \tl_gput_right:Nx,
-% \tl_gput_right:cn, \tl_gput_right:cV, \tl_gput_right:co,
+% \tl_gput_right:cn, \tl_gput_right:cV, \tl_gput_right:cv, \tl_gput_right:co,
% \tl_gput_right:cx
% }
% The same on the right.
@@ -1571,6 +1591,11 @@
\__kernel_tl_set:Nx #1
{ \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:V #2 }
}
+\cs_new_protected:Npn \tl_put_right:Nv #1#2
+ {
+ \__kernel_tl_set:Nx #1
+ { \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:v {#2} }
+ }
\cs_new_protected:Npn \tl_put_right:No #1#2
{
\__kernel_tl_set:Nx #1
@@ -1588,6 +1613,11 @@
\__kernel_tl_gset:Nx #1
{ \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:V #2 }
}
+\cs_new_protected:Npn \tl_gput_right:Nv #1#2
+ {
+ \__kernel_tl_gset:Nx #1
+ { \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:v {#2} }
+ }
\cs_new_protected:Npn \tl_gput_right:No #1#2
{
\__kernel_tl_gset:Nx #1
@@ -1600,10 +1630,12 @@
{ \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#1} #2 } }
\cs_generate_variant:Nn \tl_put_right:Nn { c }
\cs_generate_variant:Nn \tl_put_right:NV { c }
+\cs_generate_variant:Nn \tl_put_right:Nv { c }
\cs_generate_variant:Nn \tl_put_right:No { c }
\cs_generate_variant:Nn \tl_put_right:Nx { c }
\cs_generate_variant:Nn \tl_gput_right:Nn { c }
\cs_generate_variant:Nn \tl_gput_right:NV { c }
+\cs_generate_variant:Nn \tl_gput_right:Nv { c }
\cs_generate_variant:Nn \tl_gput_right:No { c }
\cs_generate_variant:Nn \tl_gput_right:Nx { c }
% \end{macrocode}
@@ -1653,13 +1685,13 @@
%
% \begin{macro}
% {
-% \tl_set_rescan:Nnn, \tl_set_rescan:Nno, \tl_set_rescan:Nnx,
-% \tl_set_rescan:cnn, \tl_set_rescan:cno, \tl_set_rescan:cnx
+% \tl_set_rescan:Nnn, \tl_set_rescan:NnV, \tl_set_rescan:Nno, \tl_set_rescan:Nnx,
+% \tl_set_rescan:cnn, \tl_set_rescan:cnV, \tl_set_rescan:cno, \tl_set_rescan:cnx
% }
% \begin{macro}
% {
-% \tl_gset_rescan:Nnn, \tl_gset_rescan:Nno, \tl_gset_rescan:Nnx,
-% \tl_gset_rescan:cnn, \tl_gset_rescan:cno, \tl_gset_rescan:cnx
+% \tl_gset_rescan:Nnn, \tl_gset_rescan:NnV, \tl_gset_rescan:Nno, \tl_gset_rescan:Nnx,
+% \tl_gset_rescan:cnn, \tl_gset_rescan:cnV, \tl_gset_rescan:cno, \tl_gset_rescan:cnx
% }
% \begin{macro}{\tl_rescan:nn, \tl_rescan:nV}
% \begin{macro}{\@@_rescan_aux:}
@@ -1758,10 +1790,10 @@
\group_end:
#1 #2 {#3}
}
-\cs_generate_variant:Nn \tl_set_rescan:Nnn { Nno , Nnx }
-\cs_generate_variant:Nn \tl_set_rescan:Nnn { c , cno , cnx }
-\cs_generate_variant:Nn \tl_gset_rescan:Nnn { Nno , Nnx }
-\cs_generate_variant:Nn \tl_gset_rescan:Nnn { c , cno }
+\cs_generate_variant:Nn \tl_set_rescan:Nnn { NnV , Nno , Nnx }
+\cs_generate_variant:Nn \tl_set_rescan:Nnn { c , cnV , cno , cnx }
+\cs_generate_variant:Nn \tl_gset_rescan:Nnn { NnV , Nno , Nnx }
+\cs_generate_variant:Nn \tl_gset_rescan:Nnn { c , cnV , cno , cnx }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1879,10 +1911,34 @@
%
% \subsection{Modifying token list variables}
%
-% \begin{macro}{\tl_replace_all:Nnn, \tl_replace_all:cnn}
-% \begin{macro}{\tl_greplace_all:Nnn, \tl_greplace_all:cnn}
-% \begin{macro}{\tl_replace_once:Nnn, \tl_replace_once:cnn}
-% \begin{macro}{\tl_greplace_once:Nnn, \tl_greplace_once:cnn}
+% \begin{macro}
+% {
+% \tl_replace_all:Nnn, \tl_replace_all:NVn, \tl_replace_all:NnV,
+% \tl_replace_all:Nxn, \tl_replace_all:Nnx, \tl_replace_all:Nxx,
+% \tl_replace_all:cnn, \tl_replace_all:cVn, \tl_replace_all:cnV,
+% \tl_replace_all:cxn, \tl_replace_all:cnx, \tl_replace_all:cxx
+% }
+% \begin{macro}
+% {
+% \tl_greplace_all:Nnn, \tl_greplace_all:NVn, \tl_greplace_all:NnV,
+% \tl_greplace_all:Nxn, \tl_greplace_all:Nnx, \tl_greplace_all:Nxx,
+% \tl_greplace_all:cnn, \tl_greplace_all:cVn, \tl_greplace_all:cnV,
+% \tl_greplace_all:cxn, \tl_greplace_all:cnx, \tl_greplace_all:cxx
+% }
+% \begin{macro}
+% {
+% \tl_replace_once:Nnn, \tl_replace_once:NVn, \tl_replace_once:NnV,
+% \tl_replace_once:Nxn, \tl_replace_once:Nnx, \tl_replace_once:Nxx,
+% \tl_replace_once:cnn, \tl_replace_once:cVn, \tl_replace_once:cnV,
+% \tl_replace_once:cxn, \tl_replace_once:cnx, \tl_replace_once:cxx
+% }
+% \begin{macro}
+% {
+% \tl_greplace_once:Nnn, \tl_greplace_once:NVn, \tl_replace_once:NnV,
+% \tl_greplace_once:Nxn, \tl_greplace_once:Nnx, \tl_greplace_once:Nxx,
+% \tl_greplace_once:cnn, \tl_greplace_once:cVn, \tl_replace_once:cnV,
+% \tl_greplace_once:cxn, \tl_greplace_once:cnx, \tl_greplace_once:cxx
+% }
% All of the \texttt{replace} functions call \cs{@@_replace:NnNNNnn}
% with appropriate arguments. The first two arguments are explained
% later. The next controls whether the replacement function calls
@@ -1902,10 +1958,14 @@
{ \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_next:w \__kernel_tl_set:Nx }
\cs_new_protected:Npn \tl_greplace_all:Nnn
{ \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_next:w \__kernel_tl_gset:Nx }
-\cs_generate_variant:Nn \tl_replace_once:Nnn { Nxx , c , cxx }
-\cs_generate_variant:Nn \tl_greplace_once:Nnn { Nxx , c , cxx }
-\cs_generate_variant:Nn \tl_replace_all:Nnn { Nxx , c , cxx }
-\cs_generate_variant:Nn \tl_greplace_all:Nnn { Nxx , c , cxx }
+\cs_generate_variant:Nn \tl_replace_once:Nnn
+ { NV , NnV , Nx , Nnx , Nxx , c , cV , cnV , cx , cnx , cxx }
+\cs_generate_variant:Nn \tl_greplace_once:Nnn
+ { NV , NnV , Nx , Nnx , Nxx , c , cV , cnV , cx , cnx , cxx }
+\cs_generate_variant:Nn \tl_replace_all:Nnn
+ { NV , NnV , Nx , Nnx , Nxx , c , cV , cnV , cx , cnx , cxx }
+\cs_generate_variant:Nn \tl_greplace_all:Nnn
+ { NV , NnV , Nx , Nnx , Nxx , c , cV , cnV , cx , cnx , cxx }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -2090,30 +2150,46 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\tl_remove_once:Nn, \tl_remove_once:cn}
-% \begin{macro}{\tl_gremove_once:Nn, \tl_gremove_once:cn}
+% \begin{macro}
+% {
+% \tl_remove_once:Nn, \tl_remove_once:NV, \tl_remove_once:Nx,
+% \tl_remove_once:cn, \tl_remove_once:cV, \tl_remove_once:cx
+% }
+% \begin{macro}
+% {
+% \tl_gremove_once:Nn, \tl_gremove_once:NV, \tl_gremove_once:Nx,
+% \tl_gremove_once:cn, \tl_gremove_once:cV, \tl_gremove_once:cx
+% }
% Removal is just a special case of replacement.
% \begin{macrocode}
\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
{ \tl_greplace_once:Nnn #1 {#2} { } }
-\cs_generate_variant:Nn \tl_remove_once:Nn { Nx , c , cx }
-\cs_generate_variant:Nn \tl_gremove_once:Nn { Nx , c , cx }
+\cs_generate_variant:Nn \tl_remove_once:Nn { NV , Nx , c , cV , cx }
+\cs_generate_variant:Nn \tl_gremove_once:Nn { NV , Nx , c , cV , cx }
% \end{macrocode}
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\tl_remove_all:Nn, \tl_remove_all:cn}
-% \begin{macro}{\tl_gremove_all:Nn, \tl_gremove_all:cn}
+% \begin{macro}
+% {
+% \tl_remove_all:Nn, \tl_remove_all:NV, \tl_remove_all:Nx,
+% \tl_remove_all:cn, \tl_remove_all:cV, \tl_remove_all:cx
+% }
+% \begin{macro}
+% {
+% \tl_gremove_all:Nn, \tl_gremove_all:NV, \tl_gremove_all:Nx,
+% \tl_gremove_all:cn, \tl_gremove_all:cV, \tl_gremove_all:cx
+% }
% Removal is just a special case of replacement.
% \begin{macrocode}
\cs_new_protected:Npn \tl_remove_all:Nn #1#2
{ \tl_replace_all:Nnn #1 {#2} { } }
\cs_new_protected:Npn \tl_gremove_all:Nn #1#2
{ \tl_greplace_all:Nnn #1 {#2} { } }
-\cs_generate_variant:Nn \tl_remove_all:Nn { Nx , c , cx }
-\cs_generate_variant:Nn \tl_gremove_all:Nn { Nx , c , cx }
+\cs_generate_variant:Nn \tl_remove_all:Nn { NV , Nx , c , cV , cx }
+\cs_generate_variant:Nn \tl_gremove_all:Nn { NV , Nx , c , cV , cx }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -2137,7 +2213,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[pTF]{\tl_if_empty:n, \tl_if_empty:V}
+% \begin{macro}[pTF]{\tl_if_empty:n, \tl_if_empty:V, \tl_if_empty:e}
% The \cs{if:w} triggers the expansion of \cs{tl_to_str:n} which converts the
% argument to a string: this is empty if and only if the argument is. Then
% |\if:w \scan_stop: ... \scan_stop:| is \texttt{true} if and only if the
@@ -2155,7 +2231,7 @@
\fi:
}
\prg_generate_conditional_variant:Nnn \tl_if_empty:n
- { V } { p , TF , T , F }
+ { V , e } { p , TF , T , F }
% \end{macrocode}
% \end{macro}
%
@@ -2252,7 +2328,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[TF]{\tl_if_eq:nn}
+% \begin{macro}[TF]{\tl_if_eq:nn, \tl_if_eq:Vn, \tl_if_eq:nV, \tl_if_eq:xn, \tl_if_eq:nx}
% A simple store and compare routine.
% \begin{macrocode}
\prg_new_protected_conditional:Npnn \tl_if_eq:nn #1#2 { T , F , TF }
@@ -2268,10 +2344,11 @@
\prg_return_false:
\fi:
}
+\prg_generate_conditional_variant:Nnn \tl_if_eq:nn { V , nV , x , nx } { TF , T , F }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[TF]{\tl_if_in:Nn, \tl_if_in:cn}
+% \begin{macro}[TF]{\tl_if_in:Nn, \tl_if_in:NV, \tl_if_in:cn, \tl_if_in:cV}
% See \cs{tl_if_in:nnTF} for further comments. Here we simply
% expand the token list variable and pass it to \cs{tl_if_in:nnTF}.
% \begin{macrocode}
@@ -2279,11 +2356,11 @@
\cs_new_protected:Npn \tl_if_in:NnF { \exp_args:No \tl_if_in:nnF }
\cs_new_protected:Npn \tl_if_in:NnTF { \exp_args:No \tl_if_in:nnTF }
\prg_generate_conditional_variant:Nnn \tl_if_in:Nn
- { c } { T , F , TF }
+ { NV , c , cV } { T , F , TF }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[TF]{\tl_if_in:nn, \tl_if_in:Vn, \tl_if_in:on, \tl_if_in:no}
+% \begin{macro}[TF]{\tl_if_in:nn, \tl_if_in:Vn, \tl_if_in:on, \tl_if_in:nV, \tl_if_in:no}
% Once more, the test relies on the emptiness test for robustness.
% The function \cs{@@_tmp:w} removes tokens until the first occurrence
% of |#2|. If this does not appear in |#1|, then the final |#2| is removed,
@@ -2313,7 +2390,7 @@
\if_false: } \fi:
}
\prg_generate_conditional_variant:Nnn \tl_if_in:nn
- { V , o , no } { T , F , TF }
+ { V , o , nV , no } { T , F , TF }
% \end{macrocode}
% \end{macro}
%
@@ -2557,10 +2634,10 @@
%
% \subsection{Using token lists}
%
-% \begin{macro}{\tl_to_str:n, \tl_to_str:o, \tl_to_str:V, \tl_to_str:v}
+% \begin{macro}{\tl_to_str:n, \tl_to_str:o, \tl_to_str:V, \tl_to_str:v, \tl_to_str:e}
% Another name for a primitive: defined in \pkg{l3basics}.
% \begin{macrocode}
-\cs_generate_variant:Nn \tl_to_str:n { o , V , v }
+\cs_generate_variant:Nn \tl_to_str:n { o , V , v , e }
% \end{macrocode}
% \end{macro}
%
@@ -3228,7 +3305,8 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}[EXP]{\tl_reverse:n, \tl_reverse:o, \tl_reverse:V}
+% \begin{macro}[EXP]
+% {\tl_reverse:n, \tl_reverse:o, \tl_reverse:V, \tl_reverse:f, \tl_reverse:e}
% \begin{macro}[EXP]{\@@_reverse_normal:nN}
% \begin{macro}[EXP]{\@@_reverse_group_preserve:nn}
% \begin{macro}[EXP]{\@@_reverse_space:n}
@@ -3250,7 +3328,7 @@
{#1}
}
}
-\cs_generate_variant:Nn \tl_reverse:n { o , V }
+\cs_generate_variant:Nn \tl_reverse:n { o , V , f , e }
\cs_new:Npn \@@_reverse_normal:N
{ \@@_act_reverse_output:n }
\cs_new:Npn \@@_reverse_group_preserve:n #1
diff --git a/macros/latex/contrib/l3kernel/l3token.dtx b/macros/latex/contrib/l3kernel/l3token.dtx
index 832205cd70..ce274f9583 100644
--- a/macros/latex/contrib/l3kernel/l3token.dtx
+++ b/macros/latex/contrib/l3kernel/l3token.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -1603,6 +1603,7 @@
\tl_put_right:Nn \l_@@_tmp_tl { ^^@ \exp_not:N \or: }
\char_set_catcode_letter:n { 0 }
\tl_put_right:Nn \l_@@_tmp_tl { ^^@ \exp_not:N \or: }
+% \end{macrocode}
% For making spaces, there needs to be an |o|-type expansion of a |\use:n|
% (or some other tokenization) to avoid dropping the space.
% \begin{macrocode}
diff --git a/macros/latex/contrib/l3kernel/l3unicode.dtx b/macros/latex/contrib/l3kernel/l3unicode.dtx
index dc95aad698..f79fc63e5a 100644
--- a/macros/latex/contrib/l3kernel/l3unicode.dtx
+++ b/macros/latex/contrib/l3kernel/l3unicode.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/source3.pdf b/macros/latex/contrib/l3kernel/source3.pdf
index 31040f07f5..458c832be3 100644
--- a/macros/latex/contrib/l3kernel/source3.pdf
+++ b/macros/latex/contrib/l3kernel/source3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/source3.tex b/macros/latex/contrib/l3kernel/source3.tex
index 97bb54971a..ee6efdcc7a 100644
--- a/macros/latex/contrib/l3kernel/source3.tex
+++ b/macros/latex/contrib/l3kernel/source3.tex
@@ -53,7 +53,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2023-08-11}
+\date{Released 2023-08-29}
\pagenumbering{roman}
\maketitle