summaryrefslogtreecommitdiff
path: root/macros/latex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2024-06-06 03:01:40 +0000
committerNorbert Preining <norbert@preining.info>2024-06-06 03:01:40 +0000
commit271b6f0a476c7be030051dff4c4aaa0caad9f0fd (patch)
tree4edac3d175454f5a96e62ce70b4222cd39447548 /macros/latex
parentbbc449894843271d26c329a7613672033538160a (diff)
CTAN sync 202406060301
Diffstat (limited to 'macros/latex')
-rw-r--r--macros/latex/contrib/xint-regression/README.md7
-rw-r--r--macros/latex/contrib/xint-regression/doc/xint-regression-doc.pdfbin0 -> 360019 bytes
-rw-r--r--macros/latex/contrib/xint-regression/doc/xint-regression-doc.tex447
-rw-r--r--macros/latex/contrib/xint-regression/tex/xint-regression.sty662
-rw-r--r--macros/latex/required/l3kernel/CHANGELOG.md13
-rw-r--r--macros/latex/required/l3kernel/README.md2
-rw-r--r--macros/latex/required/l3kernel/expl3.dtx4
-rw-r--r--macros/latex/required/l3kernel/expl3.pdfbin610545 -> 610409 bytes
-rw-r--r--macros/latex/required/l3kernel/interface3.pdfbin1803277 -> 1800435 bytes
-rw-r--r--macros/latex/required/l3kernel/interface3.tex2
-rw-r--r--macros/latex/required/l3kernel/l3basics.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3bitset.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3bootstrap.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3box.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3cctab.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3clist.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3coffins.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3color.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3debug.dtx4
-rw-r--r--macros/latex/required/l3kernel/l3deprecation.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3doc.dtx4
-rw-r--r--macros/latex/required/l3kernel/l3doc.pdfbin565744 -> 565557 bytes
-rw-r--r--macros/latex/required/l3kernel/l3docstrip.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3docstrip.pdfbin151414 -> 151323 bytes
-rw-r--r--macros/latex/required/l3kernel/l3expan.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3file.dtx6
-rw-r--r--macros/latex/required/l3kernel/l3flag.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-assign.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-aux.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-basics.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-convert.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-expo.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-extended.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-functions.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-logic.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-parse.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-random.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-round.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-symbolic.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-traps.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-trig.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp-types.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fp.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3fparray.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3int.dtx42
-rw-r--r--macros/latex/required/l3kernel/l3intarray.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3kernel-functions.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3keys.dtx143
-rw-r--r--macros/latex/required/l3kernel/l3legacy.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3luatex.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3msg.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3names.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3news.pdfbin396223 -> 396223 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news01.pdfbin122959 -> 122959 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news02.pdfbin150919 -> 150919 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news03.pdfbin148747 -> 148747 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news04.pdfbin114754 -> 114754 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news05.pdfbin112524 -> 112524 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news06.pdfbin151591 -> 151591 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news07.pdfbin128344 -> 128344 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news08.pdfbin163484 -> 163484 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news09.pdfbin250161 -> 250161 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news10.pdfbin150302 -> 150302 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news11.pdfbin170102 -> 170102 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news12.pdfbin205020 -> 205020 bytes
-rw-r--r--macros/latex/required/l3kernel/l3pdf.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3prefixes.csv1
-rw-r--r--macros/latex/required/l3kernel/l3prefixes.pdfbin82856 -> 82843 bytes
-rw-r--r--macros/latex/required/l3kernel/l3prg.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3prop.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3quark.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3regex.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3seq.dtx3
-rw-r--r--macros/latex/required/l3kernel/l3skip.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3sort.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3str-convert.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3str.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3styleguide.pdfbin296746 -> 296602 bytes
-rw-r--r--macros/latex/required/l3kernel/l3styleguide.tex2
-rw-r--r--macros/latex/required/l3kernel/l3syntax-changes.pdfbin231577 -> 231447 bytes
-rw-r--r--macros/latex/required/l3kernel/l3syntax-changes.tex2
-rw-r--r--macros/latex/required/l3kernel/l3sys.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3term-glossary.pdfbin242381 -> 242247 bytes
-rw-r--r--macros/latex/required/l3kernel/l3term-glossary.tex2
-rw-r--r--macros/latex/required/l3kernel/l3text-case.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3text-map.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3text-purify.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3text.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3tl-analysis.dtx42
-rw-r--r--macros/latex/required/l3kernel/l3tl-build.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3tl.dtx3
-rw-r--r--macros/latex/required/l3kernel/l3token.dtx2
-rw-r--r--macros/latex/required/l3kernel/l3unicode.dtx2
-rw-r--r--macros/latex/required/l3kernel/source3.pdfbin7620398 -> 7618338 bytes
-rw-r--r--macros/latex/required/l3kernel/source3.tex2
95 files changed, 1299 insertions, 198 deletions
diff --git a/macros/latex/contrib/xint-regression/README.md b/macros/latex/contrib/xint-regression/README.md
new file mode 100644
index 0000000000..4b2977a59b
--- /dev/null
+++ b/macros/latex/contrib/xint-regression/README.md
@@ -0,0 +1,7 @@
+xint-regression is a package to work with classic regressions, with xint.
+-----------------------------------------------------------------------------------------
+xint-regression est un package pour travailler avec des régressions classiques, avec xint.
+------------------------------------------------------------------------------------------
+Author.......: Cédric Pierquet
+email........: cpierquet@outlook.fr
+Licence......: Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt \ No newline at end of file
diff --git a/macros/latex/contrib/xint-regression/doc/xint-regression-doc.pdf b/macros/latex/contrib/xint-regression/doc/xint-regression-doc.pdf
new file mode 100644
index 0000000000..744ccda47f
--- /dev/null
+++ b/macros/latex/contrib/xint-regression/doc/xint-regression-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/xint-regression/doc/xint-regression-doc.tex b/macros/latex/contrib/xint-regression/doc/xint-regression-doc.tex
new file mode 100644
index 0000000000..b42f725cdf
--- /dev/null
+++ b/macros/latex/contrib/xint-regression/doc/xint-regression-doc.tex
@@ -0,0 +1,447 @@
+% !TeX TXS-program:compile = txs:///arara
+% arara: pdflatex: {shell: yes, synctex: no, interaction: batchmode}
+% arara: pdflatex: {shell: yes, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)')
+
+\documentclass[11pt,a4paper]{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage{xint-regression}
+\usepackage{fancyvrb}
+\usepackage{fancyhdr}
+\usepackage{hyperref}
+\usepackage{tkz-grapheur}
+\usepackage{tcolorbox}
+\tcbuselibrary{skins,minted}
+\fancyhf{}
+\renewcommand{\headrulewidth}{0pt}
+\lfoot{\sffamily\small [xint-regression]}
+\rfoot{\sffamily\small - \thepage{} -}
+\usepackage{hologo}
+\providecommand\tikzlogo{Ti\textit{k}Z}
+\providecommand\TeXLive{\TeX{}Live\xspace}
+\providecommand\PSTricks{\textsf{PSTricks}\xspace}
+\let\pstricks\PSTricks
+\let\TikZ\tikzlogo
+
+\urlstyle{same}
+\hypersetup{pdfborder=0 0 0}
+\usepackage[margin=2cm]{geometry}
+\setlength{\parindent}{0pt}
+\def\TPversion{0.1.0}
+\def\TPdate{05/06/2024}
+\usepackage{soul}
+\usepackage{tabularray}
+\sethlcolor{lightgray!25}
+\NewDocumentCommand\MontreCode{ m }{%
+ \hl{\vphantom{\texttt{pf}}\texttt{#1}}%
+}
+\usepackage{babel}
+
+\renewcommand{\footnoterule}{\vfill\kern -3pt \hrule width 0.4\columnwidth \kern 2.6pt}
+
+\begin{document}
+
+\pagestyle{fancy}
+
+\thispagestyle{empty}
+
+\begin{center}
+ \begin{minipage}{0.88\linewidth}
+ \begin{tcolorbox}[colframe=yellow,colback=yellow!15]
+ \begin{center}
+ \begin{tabular}{c}
+ {\Huge \texttt{xint-regression}}\\
+ \\
+ {\LARGE Classic regressions, with \textsf{xint}.}\\
+ \\
+ {\small \texttt{Version \TPversion{} -- \TPdate}}
+ \end{tabular}
+ \end{center}
+ \end{tcolorbox}
+\end{minipage}
+\end{center}
+
+\begin{center}
+ \begin{tabular}{c}
+ \texttt{Cédric Pierquet}\\
+ {\ttfamily c pierquet -- at -- outlook . fr}\\
+ \texttt{\url{https://forge.apps.education.fr/pierquetcedric/package-latex-xintreg}} \\
+\end{tabular}
+\end{center}
+
+\hrule
+
+\vfill
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\def\LISTEX{1,2,3,4,5,6}
+\def\LISTEY{8.74,8.80,9.52,10.42,11.83,14.62}
+
+\xintexpreg[Alt]{\LISTEX}{\LISTEY} %raw results
+$a \approx \exprega$ and $b \approx \expregb$
+
+\xintexpreg[Alt,round=2]{\LISTEX}{\LISTEY} %rounded results
+$a \approx \exprega$ and $b \approx \expregb$\\
+
+So $y \approx \exprega x+\expregb$.
+\end{tcblisting}
+
+\vspace*{5mm}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\def\LISTEXX{0,50,100,140}
+\def\LISTEYY{275,290,315,350}
+
+\xintexpoffreg[offset=250]{\LISTEXX}{\LISTEYY} %raw results
+$a \approx \expregoffa$ and $b \approx \expregoffb$
+
+\xintexpoffreg[offset=250,round=2/1]{\LISTEXX}{\LISTEYY} %rounded results
+$a \approx \expregoffa$ and $b \approx \expregoffb$\\
+
+So $y \approx 250+\expregoffb e^{\expregoffa x}$
+\end{tcblisting}
+
+\vfill
+
+\vspace*{5mm}
+
+\pagebreak
+
+\phantomsection
+
+\hypertarget{matoc}{}
+
+\tableofcontents
+
+\vspace*{5mm}
+
+\hrule
+
+\vspace*{5mm}
+
+\pagebreak
+
+\section{Introduction}
+
+\subsection{Global usage}
+
+This package offers \textsf{xint}-based commands for working with classical regressions :
+
+\begin{itemize}
+ \item linear regression $ax+b$ ;
+ \item quadratic regression $ax^2+bx+c$ ;
+ \item cubic regression $ax^3+bx^2+cx+d$ ;
+ \item power regression $ax^b$ ;
+ \item exponential regression $ab^x$ or $e^{ax+b}$ or $be^{ax}$ or $C + be^{ax}$ ;
+ \item logarithmic regression $a+b\log(x)$ ;
+ \item hyperbolic regression $a+\displaystyle\frac{b}{x}$.
+\end{itemize}
+
+For each type of regression, results can be stored in macros, either raw or with rounding (with individuals \MontreCode{[optional keys]}).
+
+\subsection{Packages used}
+
+This package uses \MontreCode{simplekv}, \MontreCode{xintexpr}, \MontreCode{listofitems} and \MontreCode{xstring}.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%loading
+\usepackage{xint-regression}
+\end{tcblisting}
+
+\subsection{Warnings}
+
+The precision of the (determination) results seems to be good, which should normally guarantee satisfactory calculations and plots.
+
+Nevertheless, it is advisable to be cautious about the results obtained and those expected.
+
+\pagebreak
+
+\section{The commands}
+
+\subsection{Linear regression}
+
+The equation is \fbox{$ax+b$}.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+\xintlinreg[coeffa=...,coeffa=...,round=...]{xlist}{ylist}
+\end{tcblisting}
+
+By default, \MontreCode{coeffa=linrega} ; \MontreCode{coeffb=linregb} and \MontreCode{round} is empty.
+
+\MontreCode{round=...} can be given within \MontreCode{round=global} or \MontreCode{round=a/b/...}.
+
+\def\LLX{83,71,64,69,69,64,68,59,81,91,57,65,58,62}%
+\def\LLY{183,168,171,178,176,172,165,158,183,182,163,175,164,175}%
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+\def\LLX{83,71,64,69,69,64,68,59,81,91,57,65,58,62}%
+\def\LLY{183,168,171,178,176,172,165,158,183,182,163,175,164,175}%
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+%default output
+\xintlinreg{\LLX}{\LLY}%
+$a \approx \linrega$ and $b \approx \linregb$
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+%personal macros + global rounding
+\xintlinreg[coeffa=LINa,coeffb=LINb,round=2]{\LLX}{\LLY}%
+$a \approx \LINa$ and $b \approx \LINb$
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+%personal macros + individual rounding
+\xintlinreg[coeffa=LINEARa,coeffb=LINEARb,round=2/0]{\LLX}{\LLY}%
+$a \approx \LINEARa$ and $b \approx \LINEARb$
+\end{tcblisting}
+
+\subsection{Quadratic regression}
+
+The equation is \fbox{$ax^2+bx+c$}.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+\xintquadreg[coeffa=...,coeffb=...,coeffc=...,round=...]{xlist}{ylist}
+\end{tcblisting}
+
+By default, \MontreCode{coeffa=quadrega} ; \MontreCode{coeffb=quadregb}, \MontreCode{coeffc=quadrega} and \MontreCode{round} is empty.
+
+\MontreCode{round=...} can be given within \MontreCode{round=global} or \MontreCode{round=a/b/...}.
+
+\def\LLX{83,71,64,69,69,64,68,59,81,91,57,65,58,62}%
+\def\LLY{183,168,171,178,176,172,165,158,183,182,163,175,164,175}%
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+\def\LLX{83,71,64,69,69,64,68,59,81,91,57,65,58,62}%
+\def\LLY{183,168,171,178,176,172,165,158,183,182,163,175,164,175}%
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+%default output
+\xintquadreg{\LLX}{\LLY}%
+$a \approx \quadrega$ ; $b \approx \quadregb$ and $c \approx \quadregc$
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+%personal macros + global rounding
+\xintquadreg[coeffa=QUADa,coeffb=QUADb,coeffc=QUADc,round=2]{\LLX}{\LLY}%
+$a \approx \QUADa$ ; $b \approx \QUADb$ and $c \approx \QUADc$
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+%personal macros + individual rounding
+\xintquadreg[coeffa=QUADRAa,coeffb=QUADRAb,coeffc=QUADRAc,round=4/3/2]{\LLX}{\LLY}%
+$a \approx \QUADRAa$ ; $b \approx \QUADRAb$ and $c \approx \QUADRAc$
+\end{tcblisting}
+
+\subsection{Cubic regression}%, hyperbolic and logarithmic regression}
+
+The equation for cubic is \fbox{$ax^3+bx^2+cx+d$}.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+\xintcubreg[coeffa=...,coeffb=...,coeffc=...,coeffd=...,round=...]{xlist}{ylist}
+\end{tcblisting}
+
+By default, \MontreCode{coeffa=cubrega} ; \MontreCode{coeffb=cubregb} ; \MontreCode{coeffc=cubregc} and \MontreCode{coeffd=cubregd}.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+\def\LLX{83,71,64,69,69,64,68,59,81,91,57,65,58,62}%
+\def\LLY{183,168,171,178,176,172,165,158,183,182,163,175,164,175}%
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+%individual roudings
+\xintcubreg[round=5/3/2/1]{\LLX}{\LLY}%
+$a \approx \cubrega$ ; $b \approx \cubregb$ ; $c \approx \cubregc$ and $d \approx \cubregd$
+\end{tcblisting}
+
+\subsection{Hyperbolic regression}
+
+The equation for hyperbolic is \fbox{$a+\displaystyle\frac{b}{x}$}.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+\xinthypreg[coeffa=...,coeffb=...,round=...]{xlist}{ylist}
+\end{tcblisting}
+
+By default, \MontreCode{coeffa=hyprega} and \MontreCode{coeffb=hypregb}.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+\def\LLX{83,71,64,69,69,64,68,59,81,91,57,65,58,62}%
+\def\LLY{183,168,171,178,176,172,165,158,183,182,163,175,164,175}%
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+%global roudings
+\xinthypreg[round=2]{\LLX}{\LLY}%
+$a \approx \hyprega$ and $b \approx \hypregb$
+\end{tcblisting}
+
+\subsection{Logarithmic regression}
+
+The equation for logarithmic is \fbox{$a+b\,\log(x)$}.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+\xintlogreg[coeffa=...,coeffb=...,round=...]{xlist}{ylist}
+\end{tcblisting}
+
+By default, \MontreCode{coeffa=logrega} and \MontreCode{coeffb=logregb}.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+\def\LLX{83,71,64,69,69,64,68,59,81,91,57,65,58,62}%
+\def\LLY{183,168,171,178,176,172,165,158,183,182,163,175,164,175}%
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+%individual roudings
+\xintlogreg[round=1/4]{\LLX}{\LLY}%
+$a \approx \logrega$ and $b \approx \logregb$
+\end{tcblisting}
+
+\subsection{Power regression}
+
+The equation for power is \fbox{$a \times x^{b}$}.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+\xintpowreg[coeffa=...,coeffb=...,round=...]{xlist}{ylist}
+\end{tcblisting}
+
+By default, \MontreCode{coeffa=powrega} and \MontreCode{coeffb=powregb}.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+\def\LLX{83,71,64,69,69,64,68,59,81,91,57,65,58,62}%
+\def\LLY{183,168,171,178,176,172,165,158,183,182,163,175,164,175}%
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+%default output
+\xintpowreg{\LLX}{\LLY}%
+$a \approx \powrega$ and $b \approx \powregb$
+\end{tcblisting}
+
+\subsection{Exponential regression}
+
+Available regressions are :
+
+\begin{itemize}
+ \item \fbox{$a \times b^{x}$} ;
+ \item \fbox{$e^{ax+b}$} ;
+ \item \fbox{$b\,e^{ax}$} ;
+ \item \fbox{$C+b\,e^{ax}$}.
+\end{itemize}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%a*b^x
+\xintexpabreg[coeffa=...,coeffb=...,round=...]{xlist}{ylist}
+\end{tcblisting}
+
+By default, \MontreCode{coeffa=expabrega} and \MontreCode{coeffb=expabregb}.
+
+\smallskip
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%e^(ax+b)
+\xintexpreg[coeffa=...,coeffb=...,round=...]{xlist}{ylist}
+\end{tcblisting}
+
+By default, \MontreCode{coeffa=exprega} and \MontreCode{coeffb=expregb}.
+
+\smallskip
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%b*e^(ax)
+\xintexpreg[Alt,coeffa=...,coeffb=...,round=...]{xlist}{ylist}
+\end{tcblisting}
+
+By default, \MontreCode{coeffa=exprega} and \MontreCode{coeffb=expregb}.
+
+\smallskip
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%C+b*e^(ax)
+\xintexpoffreg[offset=C,coeffa=...,coeffb=...,round=...]{xlist}{ylist}
+\end{tcblisting}
+
+By default, \MontreCode{coeffa=expregoffa} and \MontreCode{coeffb=expregoffb}.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+\def\LLX{83,71,64,69,69,64,68,59,81,91,57,65,58,62}%
+\def\LLY{183,168,171,178,176,172,165,158,183,182,163,175,164,175}%
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+%a*b^x
+\xintexpabreg{\LLX}{\LLY}
+$a \approx \expabrega$ and $b \approx \expabregb$
+
+%e^(ax+b)
+\xintexpreg{\LLX}{\LLY}
+$a \approx \exprega$ and $b \approx \expregb$
+
+%b*e^(ax)
+\xintexpreg[Alt]{\LLX}{\LLY}
+$a \approx \exprega$ and $b \approx \expregb$
+
+%C+b*e^(ax)
+\xintexpoffreg[offset=50]{\LLX}{\LLY}
+$a \approx \expregoffa$ and $b \approx \expregoffb$
+\end{tcblisting}
+
+\pagebreak
+
+\section{Integration with other packages}
+
+\subsection{Number formatting}
+
+It is possible to format the results, according to locale rules, for example with \textsf{sinuitx}.
+
+\smallskip
+
+With \MontreCode{[locale=FR]} :
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+%a*b^x
+\xintexpabreg[round=1/3]{\LLX}{\LLY}%
+So we obtain $y \approx \num{\expabrega} \times e^{\num{\expabregb}\times x}$
+\end{tcblisting}
+
+\subsection{Plotting}
+
+It is also possible to integrate the package's commands into a plotting environment, such as \textsf{tikz} or \textsf{pgfplots}.
+
+\smallskip
+
+For example, with \textsf{tkz-grapheur} package :
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\def\LISTEXX{0,50,100,140}%
+\def\LISTEYY{275,290,315,350}%
+
+\begin{GraphiqueTikz}
+ [x=0.05cm,y=0.04cm,Xmin=0,Xmax=160,Xgrille=20,Xgrilles=10,
+ Origy=250,Ymin=250,Ymax=400,Ygrille=25,Ygrilles=5]
+ %window
+ \TracerAxesGrilles[Elargir=2.5mm,Police=\footnotesize]{auto}{auto}
+ %points
+ \TracerNuage[Style=o,CouleurNuage=red]{\LISTEXX}{\LISTEYY}
+ %regression expoffset C+b*epx(ax)
+ \xintexpoffreg[offset=250]{\LISTEXX}{\LISTEYY}
+ \DefinirCourbe[Nom=ajust,Couleur=blue,Trace]
+ <ajust>
+ {250+\expregoffb*exp(\expregoffa*x)}
+ %constructions
+ \PlacerImages[Couleurs=cyan/magenta,Traits]{ajust}{80}
+ \PlacerAntecedents[Style=x,Couleurs=blue/green!50!black,Traits]{ajust}{325}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\pagebreak
+
+\section{History}
+
+\begin{quote}
+\begin{verbatim}
+0.1.0 : Initial version
+\end{verbatim}
+\end{quote}
+
+\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/xint-regression/tex/xint-regression.sty b/macros/latex/contrib/xint-regression/tex/xint-regression.sty
new file mode 100644
index 0000000000..71413005aa
--- /dev/null
+++ b/macros/latex/contrib/xint-regression/tex/xint-regression.sty
@@ -0,0 +1,662 @@
+% Author : C. Pierquet
+% licence : Released under the LaTeX Project Public License v1.3c
+% or later, see http://www.latex-project.org/lppl.txtf
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{xint-regression}[2024/06/05 0.1.0 Some classic regressions, with xint]
+%0.1.0 Initial version
+
+%------Packages utiles
+\RequirePackage{simplekv}
+\RequirePackage{xintexpr}
+\RequirePackage{listofitems}
+\RequirePackage{xstring}
+
+%régression linéaire
+\defKV[CoefRegLin]{%
+ coeffa=\def\RegLinCoefa{#1},%
+ coeffb=\def\RegLinCoefb{#1},%
+ round=\def\RegLinRound{#1}
+}
+
+\setKVdefault[CoefRegLin]{%
+ coeffa=linrega,%
+ coeffb=linregb,%
+ round={}
+}
+
+\newcommand\xintlinreg[3][]{%
+ \useKVdefault[CoefRegLin]%
+ \setKV[CoefRegLin]{#1}% on paramètres les nouvelles clés et on les simplifie
+ %listes des données
+ \def\xliste{#2}%
+ \def\yliste{#3}%
+ \readlist*\LX{\xliste}%
+ \readlist*\LY{\yliste}%
+ %taille des listes
+ \def\LNB{\inteval{\LXlen}}%
+ %somme des LX et des LY OK
+ \xdef\LXSomme{0}%
+ \xdef\LYSomme{0}%
+ \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{%
+ \xdef\LXSomme{\xintfloateval{\LXSomme+(\LX[##1])}}%
+ \xdef\LYSomme{\xintfloateval{\LYSomme+(\LY[##1])}}%
+ }%
+ %moyenne des LX et des LY OK
+ \xdef\LXmoy{\xintfloateval{\LXSomme/\LNB}}%
+ \xdef\LYmoy{\xintfloateval{\LYSomme/\LNB}}%
+ %variance des LX et des LY OK
+ \xdef\LXvar{0}%
+ \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{%
+ \xdef\LXvar{\xintfloateval{\LXvar+(\LX[##1]-(\LXmoy))*(\LX[##1]-(\LXmoy))}}%
+ }
+ \xdef\LXvar{\xintfloateval{\LXvar/\LNB}}%
+ \xdef\LYvar{0}%
+ \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{%
+ \xdef\LYvar{\xintfloateval{\LYvar+(\LY[##1]-(\LYmoy))*(\LY[##1]-(\LYmoy))}}%
+ }%
+ \xdef\LYvar{\xintfloateval{\LYvar/\LNB}}%
+ %covariance des XY OK
+ \xdef\LXYvar{0}%
+ \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{%
+ \xdef\LXYvar{\xintfloateval{\LXYvar+(\LX[##1]-(\LXmoy))*(\LY[##1]-(\LYmoy))}}%
+ }%
+ \xdef\LXYvar{\xintfloateval{\LXYvar/\LNB}}%
+ %COEFFS TEMPORAIRES OK
+ \xdef\tmp@reg@lin@a{\xintfloateval{\LXYvar/\LXvar}}%
+ \xdef\tmp@reg@lin@b{\xintfloateval{\LYmoy-(\tmp@reg@lin@a)*(\LXmoy)}}%
+ %STOCKAGE
+ \IfStrEq{\RegLinRound}{}%
+ {%
+ \expandafter\def\csname\RegLinCoefa\endcsname{\tmp@reg@lin@a}%
+ \expandafter\def\csname\RegLinCoefb\endcsname{\tmp@reg@lin@b}%
+ }%
+ {%
+ \IfSubStr{\RegLinRound}{/}%
+ {%
+ \StrCut{\RegLinRound}{/}{\xintarrondisreglina}{\xintarrondisreglinb}%
+ }%
+ {%
+ \xdef\xintarrondisreglina{\RegLinRound}\xdef\xintarrondisreglinb{\RegLinRound}%
+ }%
+ \expandafter\def\csname\RegLinCoefa\endcsname{\xintfloateval{round(\tmp@reg@lin@a,\xintarrondisreglina)}}%
+ \expandafter\def\csname\RegLinCoefb\endcsname{\xintfloateval{round(\tmp@reg@lin@b,\xintarrondisreglinb)}}%
+ }%
+}
+
+
+
+%régression quadratique
+\defKV[CoeffRegQuad]{%
+ coeffa=\def\RegQuadCoefa{#1},%
+ coeffb=\def\RegQuadCoefb{#1},%
+ coeffc=\def\RegQuadCoefc{#1},%
+ round=\def\RegQuadRound{#1}
+}
+
+\setKVdefault[CoeffRegQuad]{%
+ coeffa=quadrega,%
+ coeffb=quadregb,%
+ coeffc=quadregc,%
+ round={}
+}
+
+\newcommand\xintquadreg[3][]{%
+ \useKVdefault[CoeffRegQuad]%
+ \setKV[CoeffRegQuad]{#1}% on paramètres les nouvelles clés et on les simplifie
+ %listes des données
+ \def\xliste{#2}%
+ \def\yliste{#3}%
+ \readlist*\LX{\xliste}%
+ \readlist*\LY{\yliste}%
+ %taille des listes
+ \def\LNB{\inteval{\LXlen}}%
+ %somme importantes
+ \xdef\LXSomme{0}%
+ \xdef\LXCSomme{0}%
+ \xdef\LYSomme{0}%
+ \xdef\LXXSomme{0}%
+ \xdef\LXYSomme{0}%
+ \xdef\LXXCSomme{0}%
+ \xdef\LXCXCSomme{0}%
+ \xdef\LXCYSomme{0}%
+ %calculs
+ \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{%
+ \xdef\LXSomme{\xintfloateval{\LXSomme+(\LX[##1])}}%
+ \xdef\LXCSomme{\xintfloateval{\LXCSomme+(\LX[##1])^2}}%
+ }%
+ \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{%
+ \xdef\LYSomme{\xintfloateval{\LYSomme+(\LY[##1])}}%
+ }%
+ \xdef\LXmoy{\xintfloateval{\LXSomme/\LNB}}%
+ \xdef\LYmoy{\xintfloateval{\LYSomme/\LNB}}%
+ \xdef\LXCmoy{\xintfloateval{\LXCSomme/\LNB}}%
+ %calculs suites
+ \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{%
+ \xdef\LXXSomme{\xintfloateval{\LXXSomme+(\LX[##1]-\LXmoy)^2}}%
+ \xdef\LXYSomme{\xintfloateval{\LXYSomme+(\LX[##1]-\LXmoy)*(\LY[##1]-\LYmoy)}}%
+ \xdef\LXXCSomme{\xintfloateval{\LXXCSomme+(\LX[##1]-\LXmoy)*((\LX[##1])*(\LX[##1])-\LXCmoy)}}%
+ \xdef\LXCXCSomme{\xintfloateval{\LXCXCSomme+((\LX[##1])^2-\LXCmoy)^2}}%
+ \xdef\LXCYSomme{\xintfloateval{\LXCYSomme+((\LX[##1])^2-\LXCmoy)*(\LY[##1]-\LYmoy)}}%
+ }%
+ %COEFFS TEMPORAIRES OK
+ \xdef\tmp@reg@quad@b{\xintfloateval{(\LXYSomme*\LXCXCSomme-\LXCYSomme*\LXXCSomme)/(\LXXSomme*\LXCXCSomme-(\LXXCSomme)^2)}}%
+ \xdef\tmp@reg@quad@a{\xintfloateval{(\LXCYSomme*\LXXSomme-\LXYSomme*\LXXCSomme)/(\LXXSomme*\LXCXCSomme-(\LXXCSomme)^2)}}%
+ \xdef\tmp@reg@quad@c{\xintfloateval{\LYmoy-(\tmp@reg@quad@b)*\LXmoy-(\tmp@reg@quad@a)*\LXCmoy}}%
+ %STOCKAGE
+ \IfStrEq{\RegQuadRound}{}%
+ {%
+ \expandafter\def\csname\RegQuadCoefb\endcsname{\tmp@reg@quad@b}%
+ \expandafter\def\csname\RegQuadCoefa\endcsname{\tmp@reg@quad@a}%
+ \expandafter\def\csname\RegQuadCoefc\endcsname{\tmp@reg@quad@c}%
+ }%
+ {%
+ \IfSubStr{\RegQuadRound}{/}%
+ {%
+ \StrBefore[1]{\RegQuadRound}{/}[\xintarrondisregquada]%
+ \StrBetween[1,2]{\RegQuadRound}{/}{/}[\xintarrondisregquadb]%
+ \StrBehind[2]{\RegQuadRound}{/}[\xintarrondisregquadc]%
+ }%
+ {%
+ \xdef\xintarrondisregquada{\RegQuadRound}%
+ \xdef\xintarrondisregquadb{\RegQuadRound}%
+ \xdef\xintarrondisregquadc{\RegQuadRound}%
+
+ }%
+ \expandafter\def\csname\RegQuadCoefb\endcsname{\xintfloateval{round(\tmp@reg@quad@b,\xintarrondisregquadb)}}%
+ \expandafter\def\csname\RegQuadCoefa\endcsname{\xintfloateval{round(\tmp@reg@quad@a,\xintarrondisregquada)}}%
+ \expandafter\def\csname\RegQuadCoefc\endcsname{\xintfloateval{round(\tmp@reg@quad@c,\xintarrondisregquadc)}}%
+ }%
+}
+
+%régression puissance a*x^b
+\defKV[CoeffRegPuiss]{%
+ coeffa=\def\RegPuissCoefa{#1},%
+ coeffb=\def\RegPuissCoefb{#1},%
+ round=\def\RegPuissRound{#1}
+}
+
+\setKVdefault[CoeffRegPuiss]{%
+ coeffa=powrega,%
+ coeffb=powregb,%
+ round={}
+}
+
+\newcommand\xintpowreg[3][]{%
+ \useKVdefault[CoeffRegPuiss]%
+ \setKV[CoeffRegPuiss]{#1}% on paramètres les nouvelles clés et on les simplifie
+ %listes des données
+ \def\xliste{#2}%
+ \def\yliste{#3}%
+ \readlist*\LX{\xliste}%
+ \readlist*\LY{\yliste}%
+ %taille des listes
+ \def\LNB{\inteval{\LXlen}}%
+ %somme importantes
+ \xdef\LlnXSomme{0}%
+ \xdef\LlnYSomme{0}%
+ \xdef\LlnXlnYSomme{0}%
+ \xdef\LlncXSomme{0}%
+ %calculs
+ \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{%
+ \xdef\LlnXSomme{\xintfloateval{\LlnXSomme+log(\LX[##1])}}%
+ \xdef\LlnYSomme{\xintfloateval{\LlnYSomme+log(\LY[##1])}}%
+ \xdef\LlnXlnYSomme{\xintfloateval{\LlnXlnYSomme+log(\LX[##1])*log(\LY[##1])}}%
+ \xdef\LlncXSomme{\xintfloateval{\LlncXSomme+(log(\LX[##1]))^2}}%
+ }%
+ %COEFFS TEMPORAIRES OK
+ \xdef\tmp@reg@pow@b{\xintfloateval{(\LNB*\LlnXlnYSomme-\LlnXSomme*\LlnYSomme)/(\LNB*\LlncXSomme-(\LlnXSomme)^2)}}%
+ \xdef\tmp@reg@pow@a{\xintfloateval{exp(1/\LNB*\LlnYSomme-(\tmp@reg@pow@b)/\LNB*\LlnXSomme)}}%
+ %STOCKAGE
+ \IfStrEq{\RegPuissRound}{}%
+ {%
+ \expandafter\def\csname\RegPuissCoefb\endcsname{\xintfloateval{\tmp@reg@pow@b}}%
+ \expandafter\def\csname\RegPuissCoefa\endcsname{\xintfloateval{\tmp@reg@pow@a}}%
+ }%
+ {%
+ \IfSubStr{\RegPuissRound}{/}%
+ {%
+ \StrCut{\RegPuissRound}{/}{\xintarrondisregpowa}{\xintarrondisregpowb}%
+ }%
+ {%
+ \xdef\xintarrondisregpowa{\RegPuissRound}\xdef\xintrrondisregpowb{\RegPuissRound}%
+ }%
+ \expandafter\def\csname\RegPuissCoefb\endcsname{\xintfloateval{round(\tmp@reg@pow@b,\xintarrondisregpowb)}}%
+ \expandafter\def\csname\RegPuissCoefa\endcsname{\xintfloateval{round(\tmp@reg@pow@a,\xintarrondisregpowa)}}%
+ }%
+}
+
+%régression a*b^x
+\defKV[CoeffRegExpoAB]{%
+ coeffa=\def\RegExpoCoefa{#1},%
+ coeffb=\def\RegExpoCoefb{#1},%
+ round=\def\RegExpoRound{#1}
+}
+
+\setKVdefault[CoeffRegExpoAB]{%
+ coeffa=expabrega,%
+ coeffb=expabregb,%
+ round={}
+}
+
+\newcommand\xintexpabreg[3][]{%
+ \useKVdefault[CoeffRegExpoAB]%
+ \setKV[CoeffRegExpoAB]{#1}% on paramètres les nouvelles clés et on les simplifie
+ %listes des données
+ \def\xliste{#2}%
+ \def\yliste{#3}%
+ \readlist*\LX{\xliste}%
+ \readlist*\LY{\yliste}%
+ %taille des listes
+ \def\LNB{\inteval{\LXlen}}%
+ %somme importantes
+ \xdef\LXlnYSomme{0}%
+ \xdef\LXSomme{0}%
+ \xdef\LlnYSomme{0}%
+ \xdef\LXcSomme{0}%
+ %calculs
+ \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{%
+ \xdef\LXlnYSomme{\xintfloateval{\LXlnYSomme+\LX[##1]*log(\LY[##1])}}%
+ \xdef\LXSomme{\xintfloateval{\LXSomme+\LX[##1]}}%
+ \xdef\LlnYSomme{\xintfloateval{\LlnYSomme+log(\LY[##1])}}%
+ \xdef\LXcSomme{\xintfloateval{\LXcSomme+(\LX[##1])^2}}%
+ }%
+ %COEFFS TEMPORAIRES OK
+ \xdef\tmp@reg@expab@b{\xintfloateval{exp((\LNB*\LXlnYSomme-\LXSomme*\LlnYSomme)/(\LNB*\LXcSomme-(\LXSomme)^2))}}%
+ \xdef\tmp@reg@expab@a{\xintfloateval{exp(1/\LNB*\LlnYSomme-log(\tmp@reg@expab@b)/\LNB*\LXSomme)}}%
+ %STOCKAGE
+ \IfStrEq{\RegExpoRound}{}%
+ {%
+ \expandafter\def\csname\RegExpoCoefb\endcsname{\tmp@reg@expab@b}%
+ \expandafter\def\csname\RegExpoCoefa\endcsname{\tmp@reg@expab@a}%
+ }%
+ {%
+ \IfSubStr{\RegExpoRound}{/}%
+ {%
+ \StrCut{\RegExpoRound}{/}{\xintarrondisregexpoaba}{\xintarrondisregexpoabb}%
+ }%
+ {%
+ \xdef\xintarrondisregexpoaba{\RegExpoRound}\xdef\xintarrondisregexpoabb{\RegExpoRound}%
+ }%
+ \expandafter\def\csname\RegExpoCoefb\endcsname{\xintfloateval{round(\tmp@reg@expab@b,\xintarrondisregexpoabb)}}%
+ \expandafter\def\csname\RegExpoCoefa\endcsname{\xintfloateval{round(\tmp@reg@expab@a,\xintarrondisregexpoaba)}}%
+ }%
+}
+
+%régression a+b/x
+\defKV[CoeffRegHyperb]{%
+ coeffa=\def\RegHyperbCoefa{#1},%
+ coeffb=\def\RegHyperbCoefb{#1},%
+ round=\def\RegHyperbRound{#1}
+}
+
+\setKVdefault[CoeffRegHyperb]{%
+ coeffa=hyprega,%
+ coeffb=hypregb,%
+ round={}
+}
+
+\newcommand\xinthypreg[3][]{%
+ \useKVdefault[CoeffRegHyperb]%
+ \setKV[CoeffRegHyperb]{#1}% on paramètres les nouvelles clés et on les simplifie
+ %listes des données
+ \def\xliste{#2}%
+ \def\yliste{#3}%
+ \readlist*\LX{\xliste}%
+ \readlist*\LY{\yliste}%
+ %taille des listes
+ \def\LNB{\inteval{\LXlen}}%
+ %somme importantes
+ \xdef\LinvXSomme{0}%
+ \xdef\LYdivXSomme{0}%
+ \xdef\LYSomme{0}%
+ \xdef\LinvXcSomme{0}%
+ %calculs
+ \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{%
+ \xdef\LinvXSomme{\xintfloateval{\LinvXSomme+1/\LX[##1]}}%
+ \xdef\LYdivXSomme{\xintfloateval{\LYdivXSomme+\LY[##1]/\LX[##1]}}%
+ \xdef\LYSomme{\xintfloateval{\LYSomme+\LY[##1]}}%
+ \xdef\LinvXcSomme{\xintfloateval{\LinvXcSomme+1/(\LX[##1])^2}}%
+ }%
+ %COEFFS TEMPORAIRES OK
+ \xdef\tmp@reg@hyp@b{\xintfloateval{(\LNB*\LYdivXSomme-\LinvXSomme*\LYSomme)/(\LNB*\LinvXcSomme-(\LinvXSomme)^2)}}%
+ \xdef\tmp@reg@hyp@a{\xintfloateval{1/\LNB*\LYSomme-(\tmp@reg@hyp@b)/\LNB*\LinvXSomme}}%
+ %STOCKAGE
+ \IfStrEq{\RegHyperbRound}{}%
+ {%
+ \expandafter\def\csname\RegHyperbCoefb\endcsname{\tmp@reg@hyp@b}%
+ \expandafter\def\csname\RegHyperbCoefa\endcsname{\tmp@reg@hyp@a}%
+ }%
+ {%
+ \IfSubStr{\RegHyperbRound}{/}%
+ {%
+ \StrCut{\RegHyperbRound}{/}{\xintarrondisreghypa}{\xintarrondisreghypb}%
+ }%
+ {%
+ \xdef\xintarrondisreghypa{\RegHyperbRound}\xdef\xintarrondisreghypb{\RegHyperbRound}%
+ }%
+ \expandafter\def\csname\RegHyperbCoefb\endcsname{\xintfloateval{round(\tmp@reg@hyp@b,\xintarrondisreghypb)}}%
+ \expandafter\def\csname\RegHyperbCoefa\endcsname{\xintfloateval{round(\tmp@reg@hyp@a,\xintarrondisreghypa)}}%
+ }%
+}
+
+%régression a+b*ln(x)
+\defKV[CoeffRegLog]{%
+ coeffa=\def\RegLogCoefa{#1},%
+ coeffb=\def\RegLogCoefb{#1},%
+ round=\def\RegLogRound{#1}
+}
+
+\setKVdefault[CoeffRegLog]{%
+ coeffa=logrega,%
+ coeffb=logregb,%
+ round={}
+}
+
+\newcommand\xintlogreg[3][]{%
+ \useKVdefault[CoeffRegLog]%
+ \setKV[CoeffRegLog]{#1}% on paramètres les nouvelles clés et on les simplifie
+ %listes des données
+ \def\xliste{#2}%
+ \def\yliste{#3}%
+ \readlist*\LX{\xliste}%
+ \readlist*\LY{\yliste}%
+ %taille des listes
+ \def\LNB{\inteval{\LXlen}}%
+ %somme importantes
+ \xdef\LYlnXSomme{0}%
+ \xdef\LlnXSomme{0}%
+ \xdef\LYSomme{0}%
+ \xdef\LYlncXSomme{0}%
+ %calculs
+ \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{%
+ \xdef\LYlnXSomme{\xintfloateval{\LYlnXSomme+\LY[##1]*log(\LX[##1])}}%
+ \xdef\LlnXSomme{\xintfloateval{\LlnXSomme+log(\LX[##1])}}%
+ \xdef\LYSomme{\xintfloateval{\LYSomme+\LY[##1]}}%
+ \xdef\LYlncXSomme{\xintfloateval{\LYlncXSomme+log(\LX[##1])^2}}%
+ }%
+ %COEFFS TEMPORAIRES OK
+ \xdef\tmp@reg@log@b{\xintfloateval{(\LNB*\LYlnXSomme-\LlnXSomme*\LYSomme)/(\LNB*\LYlncXSomme-(\LlnXSomme)^2)}}%
+ \xdef\tmp@reg@log@a{\xintfloateval{1/\LNB*\LYSomme-(\tmp@reg@log@b)/\LNB*\LlnXSomme}}%
+ %STOCKAGE
+ \IfStrEq{\RegLogRound}{}%
+ {%
+ \expandafter\def\csname\RegLogCoefb\endcsname{\tmp@reg@log@b}%
+ \expandafter\def\csname\RegLogCoefa\endcsname{\tmp@reg@log@a}%
+ }%
+ {%
+ \IfSubStr{\RegLogRound}{/}%
+ {%
+ \StrCut{\RegLogRound}{/}{\xintarrondisregloga}{\xintarrondisreglogb}%
+ }%
+ {%
+ \xdef\xintarrondisregloga{\RegLogRound}\xdef\xintarrondisreglogb{\RegLogRound}%
+ }%
+ \expandafter\def\csname\RegLogCoefb\endcsname{\xintfloateval{round(\tmp@reg@log@b,\xintarrondisreglogb)}}%
+ \expandafter\def\csname\RegLogCoefa\endcsname{\xintfloateval{round(\tmp@reg@log@a,\xintarrondisregloga)}}%
+ }%
+}
+
+%régression e^(ax+b)
+\defKV[CoeffRegExpo]{%
+ coeffa=\def\RegExpoNCoefa{#1},%
+ coeffb=\def\RegExpoNCoefb{#1},%
+ round=\def\RegExpoNRound{#1}
+}
+
+\setKVdefault[CoeffRegExpo]{%
+ coeffa=exprega,%
+ coeffb=expregb,%
+ Alt=false,%
+ round={}
+}
+
+\newcommand\xintexpreg[3][]{%
+ \useKVdefault[CoeffRegExpo]%
+ \setKV[CoeffRegExpo]{#1}% on paramètres les nouvelles clés et on les simplifie
+ %listes des données
+ \def\xliste{#2}%
+ \def\yliste{#3}%
+ \readlist*\LX{\xliste}%
+ \readlist*\LY{\yliste}%
+ %taille des listes
+ \def\LNB{\inteval{\LXlen}}%
+ %somme importantes
+ \xdef\LXlnYSomme{0}%
+ \xdef\LXSomme{0}%
+ \xdef\LlnYSomme{0}%
+ \xdef\LXcSomme{0}%
+ %calculs
+ \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{%
+ \xdef\LXlnYSomme{\xintfloateval{\LXlnYSomme+\LX[##1]*log(\LY[##1])}}%
+ \xdef\LXSomme{\xintfloateval{\LXSomme+\LX[##1]}}%
+ \xdef\LlnYSomme{\xintfloateval{\LlnYSomme+log(\LY[##1])}}%
+ \xdef\LXcSomme{\xintfloateval{\LXcSomme+(\LX[##1])^2}}%
+ }%
+ %COEFFS TEMPORAIRES
+ \xdef\TmpCoeffExpoA{\xintfloateval{(\LNB*\LXlnYSomme-\LXSomme*\LlnYSomme)/(\LNB*\LXcSomme-(\LXSomme)^2)}}%
+ \xdef\TmpCoeffExpoB{\xintfloateval{1/\LNB*\LlnYSomme-(\TmpCoeffExpoA)/\LNB*\LXSomme}}%
+ \ifboolKV[CoeffRegExpo]{Alt}%
+ {%
+ %STOCKAGE
+ \IfStrEq{\RegExpoNRound}{}%
+ {%
+ \expandafter\def\csname\RegExpoNCoefb\endcsname{\xintfloateval{exp(\TmpCoeffExpoB)}}%
+ \expandafter\def\csname\RegExpoNCoefa\endcsname{\TmpCoeffExpoA}%
+ }%
+ {%
+ \IfSubStr{\RegExpoNRound}{/}%
+ {%
+ \StrCut{\RegExpoNRound}{/}{\xintarrondisregexpoa}{\xintarrondisregexpob}%
+ }%
+ {%
+ \xdef\xintarrondisregexpoa{\RegExpoNRound}\xdef\xintarrondisregexpob{\RegExpoNRound}%
+ }%
+ \expandafter\def\csname\RegExpoNCoefb\endcsname{\xintfloateval{round(exp(\TmpCoeffExpoB),\xintarrondisregexpob)}}%
+ \expandafter\def\csname\RegExpoNCoefa\endcsname{\xintfloateval{round(\TmpCoeffExpoA,\xintarrondisregexpoa)}}%
+ }%
+ }%
+ {%
+ %STOCKAGE
+ \IfStrEq{\RegExpoNRound}{}%
+ {%
+ \expandafter\def\csname\RegExpoNCoefb\endcsname{\TmpCoeffExpoB}%
+ \expandafter\def\csname\RegExpoNCoefa\endcsname{\TmpCoeffExpoA}%
+ }%
+ {%
+ \IfSubStr{\RegExpoNRound}{/}%
+ {%
+ \StrCut{\RegExpoNRound}{/}{\xintarrondisregexpoa}{\xintarrondisregexpob}%
+ }%
+ {%
+ \xdef\xintarrondisregexpoa{\RegExpoNRound}\xdef\xintarrondisregexpob{\RegExpoNRound}%
+ }%
+ \expandafter\def\csname\RegExpoNCoefb\endcsname{\xintfloateval{round(\TmpCoeffExpoB,\xintarrondisregexpob)}}%
+ \expandafter\def\csname\RegExpoNCoefa\endcsname{\xintfloateval{round(\TmpCoeffExpoA,\xintarrondisregexpoa)}}%
+ }%
+ }%
+}
+
+%régression C + b*e^(ax)
+\defKV[CoeffRegExpoOff]{%
+ coeffa=\def\RegExpoOffCoefa{#1},%
+ coeffb=\def\RegExpoOffCoefb{#1},%
+ offset=\def\RegExpoOffset{#1},%
+ round=\def\RegExpoOffRound{#1}
+}
+
+\setKVdefault[CoeffRegExpoOff]{%
+ coeffa=expregoffa,%
+ coeffb=expregoffb,%
+ offset=0,%
+ round={}
+}
+
+\newcommand\xintexpoffreg[3][]{%
+ \useKVdefault[CoeffRegExpoOff]%
+ \setKV[CoeffRegExpoOff]{#1}% on paramètres les nouvelles clés et on les simplifie
+ %listes des données
+ \def\xliste{#2}%
+ \def\yliste{#3}%
+ \readlist*\LX{\xliste}%
+ \readlist*\LY{\yliste}%
+ %taille des listes
+ \def\LNB{\inteval{\LXlen}}%
+ %somme importantes
+ \xdef\LXlnYSomme{0}%
+ \xdef\LXSomme{0}%
+ \xdef\LlnYSomme{0}%
+ \xdef\LXcSomme{0}%
+ %calculs
+ \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{%
+ \xdef\LXlnYSomme{\xintfloateval{\LXlnYSomme+\LX[##1]*log(\LY[##1]-\RegExpoOffset)}}%
+ \xdef\LXSomme{\xintfloateval{\LXSomme+\LX[##1]}}%
+ \xdef\LlnYSomme{\xintfloateval{\LlnYSomme+log(\LY[##1]-\RegExpoOffset)}}%
+ \xdef\LXcSomme{\xintfloateval{\LXcSomme+(\LX[##1])^2}}%
+ }%
+ %COEFFS TEMPORAIRES
+ \xdef\TmpCoeffExpoA{\xintfloateval{(\LNB*\LXlnYSomme-\LXSomme*\LlnYSomme)/(\LNB*\LXcSomme-(\LXSomme)^2)}}%
+ \xdef\TmpCoeffExpoB{\xintfloateval{1/\LNB*\LlnYSomme-(\TmpCoeffExpoA)/\LNB*\LXSomme}}%
+ %STOCKAGE
+ \IfStrEq{\RegExpoOffRound}{}%
+ {%
+ \expandafter\def\csname\RegExpoOffCoefb\endcsname{\xintfloateval{exp(\TmpCoeffExpoB)}}%
+ \expandafter\def\csname\RegExpoOffCoefa\endcsname{\xintfloateval{\TmpCoeffExpoA}}%
+ }%
+ {%
+ \IfSubStr{\RegExpoOffRound}{/}%
+ {%
+ \StrCut{\RegExpoOffRound}{/}{\xintarrondisregexpoffa}{\xintarrondisregexpoffb}%
+ }%
+ {%
+ \xdef\xintarrondisregexpoffa{\RegExpoOffRound}\xdef\xintarrondisregexpoffb{\RegExpoOffRound}%
+ }%
+ \expandafter\def\csname\RegExpoOffCoefb\endcsname{\xintfloateval{round(exp(\TmpCoeffExpoB),\xintarrondisregexpoffb)}}%
+ \expandafter\def\csname\RegExpoOffCoefa\endcsname{\xintfloateval{round(\TmpCoeffExpoA,\xintarrondisregexpoffa)}}%
+ }%
+}
+
+%régression cubique
+\defKV[CoeffRegCubic]{%
+ coeffa=\def\RegCubicCoefa{#1},%
+ coeffb=\def\RegCubicCoefb{#1},%
+ coeffc=\def\RegCubicCoefc{#1},%
+ coeffd=\def\RegCubicCoefd{#1},%
+ round=\def\RegCubicRound{#1}
+}
+
+\setKVdefault[CoeffRegCubic]{%
+ coeffa=cubrega,%
+ coeffb=cubregb,%
+ coeffc=cubregc,%
+ coeffd=cubregd,%
+ round={}
+}
+
+\newcommand\xintcubreg[3][]{%
+ \useKVdefault[CoeffRegCubic]%
+ \setKV[CoeffRegCubic]{#1}% on paramètres les nouvelles clés et on les simplifie
+ %listes des données
+ \def\xliste{#2}%
+ \def\yliste{#3}%
+ \readlist*\LX{\xliste}%
+ \readlist*\LY{\yliste}%
+ %taille des listes
+ \def\LNB{\inteval{\LXlen}}%
+ %somme importantes
+ \xdef\LXSomme{0}%
+ \xdef\LXdSomme{0}%
+ \xdef\LXtSomme{0}%
+ \xdef\LXqSomme{0}%
+ \xdef\LXcSomme{0}%
+ \xdef\LXsSomme{0}%
+ \xdef\LYSomme{0}%
+ \xdef\LXYSomme{0}%
+ \xdef\LXdYSomme{0}%
+ \xdef\LXtYSomme{0}%
+ %calculs
+ \xintFor* ##1 in {\xintSeq{1}{\LNB}}\do{%
+ \xdef\LXSomme{\xintfloateval{\LXSomme+\LX[##1]}}%
+ \xdef\LXdSomme{\xintfloateval{\LXdSomme+(\LX[##1])^2}}%
+ \xdef\LXtSomme{\xintfloateval{\LXtSomme+(\LX[##1])^3}}%
+ \xdef\LXqSomme{\xintfloateval{\LXqSomme+(\LX[##1])^4}}%
+ \xdef\LXcSomme{\xintfloateval{\LXcSomme+(\LX[##1])^5}}%
+ \xdef\LXsSomme{\xintfloateval{\LXsSomme+(\LX[##1])^6}}%
+ \xdef\LYSomme{\xintfloateval{\LYSomme+\LY[##1]}}%
+ \xdef\LXYSomme{\xintfloateval{\LXYSomme+\LX[##1]*\LY[##1]}}%
+ \xdef\LXdYSomme{\xintfloateval{\LXdYSomme+(\LX[##1])^2*\LY[##1]}}%
+ \xdef\LXtYSomme{\xintfloateval{\LXtYSomme+(\LX[##1])^3*\LY[##1]}}%
+ }%
+ %calculs suites, avec des matrices !!
+ \def\MatA{\LXtSomme}%
+ \def\MatB{\LXdSomme}%
+ \def\MatC{\LXSomme}%
+ \def\MatD{\LNB}%
+ \def\MatE{\LXqSomme}%
+ \def\MatF{\LXtSomme}%
+ \def\MatG{\LXdSomme}%
+ \def\MatH{\LXSomme}%
+ \def\MatI{\LXcSomme}%
+ \def\MatJ{\LXqSomme}%
+ \def\MatK{\LXtSomme}%
+ \def\MatL{\LXdSomme}%
+ \def\MatM{\LXsSomme}%
+ \def\MatN{\LXcSomme}%
+ \def\MatO{\LXqSomme}%
+ \def\MatP{\LXtSomme}%
+ \def\MatBA{\LYSomme}%
+ \def\MatBB{\LXYSomme}%
+ \def\MatBC{\LXdYSomme}%
+ \def\MatBD{\LXtYSomme}%
+ \def\DETMATRICE{\xintfloateval{\MatA*\MatF*\MatK*\MatP-\MatA*\MatF*\MatL*\MatO-\MatA*\MatG*\MatJ*\MatP+\MatA*\MatG*\MatL*\MatN+\MatA*\MatH*\MatJ*\MatO-\MatA*\MatH*\MatK*\MatN-\MatB*\MatE*\MatK*\MatP+\MatB*\MatE*\MatL*\MatO+\MatB*\MatG*\MatI*\MatP-\MatB*\MatG*\MatL*\MatM-\MatB*\MatH*\MatI*\MatO+\MatB*\MatH*\MatK*\MatM+\MatC*\MatE*\MatJ*\MatP-\MatC*\MatE*\MatL*\MatN-\MatC*\MatF*\MatI*\MatP+\MatC*\MatF*\MatL*\MatM+\MatC*\MatH*\MatI*\MatN-\MatC*\MatH*\MatJ*\MatM-\MatD*\MatE*\MatJ*\MatO+\MatD*\MatE*\MatK*\MatN+\MatD*\MatF*\MatI*\MatO-\MatD*\MatF*\MatK*\MatM-\MatD*\MatG*\MatI*\MatN+\MatD*\MatG*\MatJ*\MatM}}%
+ \def\MatInvA{(\MatF*\MatK*\MatP-\MatF*\MatL*\MatO-\MatG*\MatJ*\MatP+\MatG*\MatL*\MatN+\MatH*\MatJ*\MatO-\MatH*\MatK*\MatN)/\DETMATRICE}%
+ \def\MatInvB{(-\MatB*\MatK*\MatP+\MatB*\MatL*\MatO+\MatC*\MatJ*\MatP-\MatC*\MatL*\MatN-\MatD*\MatJ*\MatO+\MatD*\MatK*\MatN)/\DETMATRICE}%
+ \def\MatInvC{(\MatB*\MatG*\MatP-\MatB*\MatH*\MatO-\MatC*\MatF*\MatP+\MatC*\MatH*\MatN+\MatD*\MatF*\MatO-\MatD*\MatG*\MatN)/\DETMATRICE}%
+ \def\MatInvD{(-\MatB*\MatG*\MatL+\MatB*\MatH*\MatK+\MatC*\MatF*\MatL-\MatC*\MatH*\MatJ-\MatD*\MatF*\MatK+\MatD*\MatG*\MatJ)/\DETMATRICE}%
+ \def\MatInvE{(-\MatE*\MatK*\MatP+\MatE*\MatL*\MatO+\MatG*\MatI*\MatP-\MatG*\MatL*\MatM-\MatH*\MatI*\MatO+\MatH*\MatK*\MatM)/\DETMATRICE}%
+ \def\MatInvF{(\MatA*\MatK*\MatP-\MatA*\MatL*\MatO-\MatC*\MatI*\MatP+\MatC*\MatL*\MatM+\MatD*\MatI*\MatO-\MatD*\MatK*\MatM)/\DETMATRICE}%
+ \def\MatInvG{(-\MatA*\MatG*\MatP+\MatA*\MatH*\MatO+\MatC*\MatE*\MatP-\MatC*\MatH*\MatM-\MatD*\MatE*\MatO+\MatD*\MatG*\MatM)/\DETMATRICE}%
+ \def\MatInvH{(\MatA*\MatG*\MatL-\MatA*\MatH*\MatK-\MatC*\MatE*\MatL+\MatC*\MatH*\MatI+\MatD*\MatE*\MatK-\MatD*\MatG*\MatI)/\DETMATRICE}%
+ \def\MatInvI{(\MatE*\MatJ*\MatP-\MatE*\MatL*\MatN-\MatF*\MatI*\MatP+\MatF*\MatL*\MatM+\MatH*\MatI*\MatN-\MatH*\MatJ*\MatM)/\DETMATRICE}%
+ \def\MatInvJ{(-\MatA*\MatJ*\MatP+\MatA*\MatL*\MatN+\MatB*\MatI*\MatP-\MatB*\MatL*\MatM-\MatD*\MatI*\MatN+\MatD*\MatJ*\MatM)/\DETMATRICE}%
+ \def\MatInvK{(\MatA*\MatF*\MatP-\MatA*\MatH*\MatN-\MatB*\MatE*\MatP+\MatB*\MatH*\MatM+\MatD*\MatE*\MatN-\MatD*\MatF*\MatM)/\DETMATRICE}%
+ \def\MatInvL{(-\MatA*\MatF*\MatL+\MatA*\MatH*\MatJ+\MatB*\MatE*\MatL-\MatB*\MatH*\MatI-\MatD*\MatE*\MatJ+\MatD*\MatF*\MatI)/\DETMATRICE}%
+ \def\MatInvM{(-\MatE*\MatJ*\MatO+\MatE*\MatK*\MatN+\MatF*\MatI*\MatO-\MatF*\MatK*\MatM-\MatG*\MatI*\MatN+\MatG*\MatJ*\MatM)/\DETMATRICE}%
+ \def\MatInvN{(\MatA*\MatJ*\MatO-\MatA*\MatK*\MatN-\MatB*\MatI*\MatO+\MatB*\MatK*\MatM+\MatC*\MatI*\MatN-\MatC*\MatJ*\MatM)/\DETMATRICE}%
+ \def\MatInvO{(-\MatA*\MatF*\MatO+\MatA*\MatG*\MatN+\MatB*\MatE*\MatO-\MatB*\MatG*\MatM-\MatC*\MatE*\MatN+\MatC*\MatF*\MatM)/\DETMATRICE}%
+ \def\MatInvP{(\MatA*\MatF*\MatK-\MatA*\MatG*\MatJ-\MatB*\MatE*\MatK+\MatB*\MatG*\MatI+\MatC*\MatE*\MatJ-\MatC*\MatF*\MatI)/\DETMATRICE}%
+ %COEFFS TEMPORAIRES OK
+ \xdef\tmp@reg@cub@a{\xintfloateval{\MatInvA*\MatBA+\MatInvB*\MatBB+\MatInvC*\MatBC+\MatInvD*\MatBD}}%
+ \xdef\tmp@reg@cub@b{\xintfloateval{\MatInvE*\MatBA+\MatInvF*\MatBB+\MatInvG*\MatBC+\MatInvH*\MatBD}}%
+ \xdef\tmp@reg@cub@c{\xintfloateval{\MatInvI*\MatBA+\MatInvJ*\MatBB+\MatInvK*\MatBC+\MatInvL*\MatBD}}%
+ \xdef\tmp@reg@cub@d{\xintfloateval{\MatInvM*\MatBA+\MatInvN*\MatBB+\MatInvO*\MatBC+\MatInvP*\MatBD}}%
+ %STOCKAGE
+ \IfStrEq{\RegCubicRound}{}%
+ {%
+ \expandafter\def\csname\RegCubicCoefa\endcsname{\tmp@reg@cub@a}%
+ \expandafter\def\csname\RegCubicCoefb\endcsname{\tmp@reg@cub@b}%
+ \expandafter\def\csname\RegCubicCoefc\endcsname{\tmp@reg@cub@c}%
+ \expandafter\def\csname\RegCubicCoefd\endcsname{\tmp@reg@cub@d}%
+ }%
+ {%
+ \IfSubStr{\RegCubicRound}{/}%
+ {%
+ \StrBefore[1]{\RegCubicRound}{/}[\xintarrondisregcuba]%
+ \StrBetween[1,2]{\RegCubicRound}{/}{/}[\xintarrondisregcubb]%
+ \StrBetween[2,3]{\RegCubicRound}{/}{/}[\xintarrondisregcubc]%
+ \StrBehind[3]{\RegCubicRound}{/}[\xintarrondisregcubd]%
+ }%
+ {%
+ \xdef\xintarrondisregcuba{\RegCubicRound}%
+ \xdef\xintarrondisregcubb{\RegCubicRound}%
+ \xdef\xintarrondisregcubc{\RegCubicRound}%
+ \xdef\xintarrondisregcubd{\RegCubicRound}%
+ }%
+ \expandafter\def\csname\RegCubicCoefa\endcsname{\xintfloateval{round(\tmp@reg@cub@a,\xintarrondisregcuba)}}%
+ \expandafter\def\csname\RegCubicCoefb\endcsname{\xintfloateval{round(\tmp@reg@cub@b,\xintarrondisregcubb)}}%
+ \expandafter\def\csname\RegCubicCoefc\endcsname{\xintfloateval{round(\tmp@reg@cub@c,\xintarrondisregcubc)}}%
+ \expandafter\def\csname\RegCubicCoefd\endcsname{\xintfloateval{round(\tmp@reg@cub@d,\xintarrondisregcubd)}}%
+ }%
+}
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/required/l3kernel/CHANGELOG.md b/macros/latex/required/l3kernel/CHANGELOG.md
index 82eb45806a..c58c1a6188 100644
--- a/macros/latex/required/l3kernel/CHANGELOG.md
+++ b/macros/latex/required/l3kernel/CHANGELOG.md
@@ -7,11 +7,19 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2024-05-27]
+
+### Added
+- Syntax entries of `\keys_set_groups:nnn(n)N`
+
+### Fixed
+- `\peek_analysis_map_inline:n` with active spaces (issue \#1539)
+
## [2024-05-08]
### Added
- Full set of variants for `\prop_(g)put_if_not_in:Nnn`
-- `keys_set_groups:nnn(n)N` to match `keys_set_exclude_groups:nnn(n)N`
+- `\keys_set_groups:nnn(n)N` to match `\keys_set_exclude_groups:nnn(n)N`
### Fixed
- Implementation of deprecated `\pdf_object_write:nn`
@@ -1734,7 +1742,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/2024-05-08...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2024-05-27...HEAD
+[2024-05-27]: https://github.com/latex3/latex3/compare/2024-05-08...2024-05-27
[2024-05-08]: https://github.com/latex3/latex3/compare/2024-04-11...2024-05-08
[2024-04-11]: https://github.com/latex3/latex3/compare/2024-03-14...2024-04-11
[2024-03-14]: https://github.com/latex3/latex3/compare/2024-02-20...2024-03-14
diff --git a/macros/latex/required/l3kernel/README.md b/macros/latex/required/l3kernel/README.md
index 0928ea46ce..8946af1293 100644
--- a/macros/latex/required/l3kernel/README.md
+++ b/macros/latex/required/l3kernel/README.md
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================
-Release 2024-05-08
+Release 2024-05-27
Overview
--------
diff --git a/macros/latex/required/l3kernel/expl3.dtx b/macros/latex/required/l3kernel/expl3.dtx
index f4129aeb02..4b4e61d3c8 100644
--- a/macros/latex/required/l3kernel/expl3.dtx
+++ b/macros/latex/required/l3kernel/expl3.dtx
@@ -24,7 +24,7 @@
%
%<*driver|generic|package|2ekernel>
%</driver|generic|package|2ekernel>
-\def\ExplFileDate{2024-05-08}%
+\def\ExplFileDate{2024-05-27}%
%<*driver>
\documentclass[full]{l3doc}
\usepackage{graphicx}
@@ -51,7 +51,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/expl3.pdf b/macros/latex/required/l3kernel/expl3.pdf
index dd4f07af68..a6eca24ce4 100644
--- a/macros/latex/required/l3kernel/expl3.pdf
+++ b/macros/latex/required/l3kernel/expl3.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/interface3.pdf b/macros/latex/required/l3kernel/interface3.pdf
index 309d9c92a7..5c72322e35 100644
--- a/macros/latex/required/l3kernel/interface3.pdf
+++ b/macros/latex/required/l3kernel/interface3.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/interface3.tex b/macros/latex/required/l3kernel/interface3.tex
index 613eb673b0..62501cfa53 100644
--- a/macros/latex/required/l3kernel/interface3.tex
+++ b/macros/latex/required/l3kernel/interface3.tex
@@ -58,7 +58,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2024-05-08}
+\date{Released 2024-05-27}
\pagenumbering{roman}
\maketitle
diff --git a/macros/latex/required/l3kernel/l3basics.dtx b/macros/latex/required/l3kernel/l3basics.dtx
index 4c00ec0032..69e4441580 100644
--- a/macros/latex/required/l3kernel/l3basics.dtx
+++ b/macros/latex/required/l3kernel/l3basics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3bitset.dtx b/macros/latex/required/l3kernel/l3bitset.dtx
index 22cf7dc1f7..4559b56fd3 100644
--- a/macros/latex/required/l3kernel/l3bitset.dtx
+++ b/macros/latex/required/l3kernel/l3bitset.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3bootstrap.dtx b/macros/latex/required/l3kernel/l3bootstrap.dtx
index e17c056909..861f0bb5a6 100644
--- a/macros/latex/required/l3kernel/l3bootstrap.dtx
+++ b/macros/latex/required/l3kernel/l3bootstrap.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3box.dtx b/macros/latex/required/l3kernel/l3box.dtx
index 5d5aa54027..808d22da23 100644
--- a/macros/latex/required/l3kernel/l3box.dtx
+++ b/macros/latex/required/l3kernel/l3box.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3cctab.dtx b/macros/latex/required/l3kernel/l3cctab.dtx
index a8c5232b3e..4bf8db41a6 100644
--- a/macros/latex/required/l3kernel/l3cctab.dtx
+++ b/macros/latex/required/l3kernel/l3cctab.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3clist.dtx b/macros/latex/required/l3kernel/l3clist.dtx
index ebbfa29ddc..5adb01cffb 100644
--- a/macros/latex/required/l3kernel/l3clist.dtx
+++ b/macros/latex/required/l3kernel/l3clist.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3coffins.dtx b/macros/latex/required/l3kernel/l3coffins.dtx
index 76bbc78d99..62dc5f92ad 100644
--- a/macros/latex/required/l3kernel/l3coffins.dtx
+++ b/macros/latex/required/l3kernel/l3coffins.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3color.dtx b/macros/latex/required/l3kernel/l3color.dtx
index f9383d0404..b56fb9e0ac 100644
--- a/macros/latex/required/l3kernel/l3color.dtx
+++ b/macros/latex/required/l3kernel/l3color.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3debug.dtx b/macros/latex/required/l3kernel/l3debug.dtx
index 7fb64a8c13..21e6747a84 100644
--- a/macros/latex/required/l3kernel/l3debug.dtx
+++ b/macros/latex/required/l3kernel/l3debug.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
@@ -69,7 +69,7 @@
%
% Standard file identification.
% \begin{macrocode}
-\ProvidesExplFile{l3debug.def}{2024-05-08}{}{L3 Debugging support}
+\ProvidesExplFile{l3debug.def}{2024-05-27}{}{L3 Debugging support}
% \end{macrocode}
%
% \begin{variable}{\s_@@_stop}
diff --git a/macros/latex/required/l3kernel/l3deprecation.dtx b/macros/latex/required/l3kernel/l3deprecation.dtx
index d947bb4599..5852205ddc 100644
--- a/macros/latex/required/l3kernel/l3deprecation.dtx
+++ b/macros/latex/required/l3kernel/l3deprecation.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3doc.dtx b/macros/latex/required/l3kernel/l3doc.dtx
index 24efea50c7..43b719ce59 100644
--- a/macros/latex/required/l3kernel/l3doc.dtx
+++ b/macros/latex/required/l3kernel/l3doc.dtx
@@ -71,7 +71,7 @@ and all files in that bundle must be distributed together.
% This isn't included in the typeset documentation because it's a bit
% ugly:
%<*class>
-\ProvidesExplClass{l3doc}{2024-05-08}{}
+\ProvidesExplClass{l3doc}{2024-05-27}{}
{L3 Experimental documentation class}
%</class>
% \fi
@@ -84,7 +84,7 @@ and all files in that bundle must be distributed together.
% require you to do updates, if the class changes.}}
%
% \author{\Team}
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
% \maketitle
% \tableofcontents
%
diff --git a/macros/latex/required/l3kernel/l3doc.pdf b/macros/latex/required/l3kernel/l3doc.pdf
index 9a856d8aed..42960f5e6f 100644
--- a/macros/latex/required/l3kernel/l3doc.pdf
+++ b/macros/latex/required/l3kernel/l3doc.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3docstrip.dtx b/macros/latex/required/l3kernel/l3docstrip.dtx
index a3b62db0af..fecb228324 100644
--- a/macros/latex/required/l3kernel/l3docstrip.dtx
+++ b/macros/latex/required/l3kernel/l3docstrip.dtx
@@ -63,7 +63,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3docstrip.pdf b/macros/latex/required/l3kernel/l3docstrip.pdf
index d2fe34a02b..efc8882c36 100644
--- a/macros/latex/required/l3kernel/l3docstrip.pdf
+++ b/macros/latex/required/l3kernel/l3docstrip.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3expan.dtx b/macros/latex/required/l3kernel/l3expan.dtx
index 7b859acaa5..d13578bde1 100644
--- a/macros/latex/required/l3kernel/l3expan.dtx
+++ b/macros/latex/required/l3kernel/l3expan.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3file.dtx b/macros/latex/required/l3kernel/l3file.dtx
index ba460e3fee..546222711e 100644
--- a/macros/latex/required/l3kernel/l3file.dtx
+++ b/macros/latex/required/l3kernel/l3file.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
@@ -809,7 +809,6 @@
% Sets the \meta{tl var} to the result of applying
% \cs{file_size:n} to the \meta{file}. If the file is not found,
% the \meta{tl var} will be set to \cs{q_no_value}.
-% This is not available in older versions of \XeTeX{}.
% \end{function}
%
% \begin{function}[rEXP, added = 2019-09-03]
@@ -825,7 +824,6 @@
% \meta{minute}\meta{second}\meta{offset}, where the latter may be |Z|
% (UTC) or \meta{plus-minus}\meta{hours}|'|\meta{minutes}|'|.
% When the file is not found, the result of expansion is empty.
-% This is not available in older versions of \XeTeX{}.
% \end{function}
%
% \begin{function}[noTF, added = 2017-07-09, updated = 2019-02-16]
@@ -836,7 +834,6 @@
% Sets the \meta{tl var} to the result of applying
% \cs{file_timestamp:n} to the \meta{file}. If the file is not found,
% the \meta{tl var} will be set to \cs{q_no_value}.
-% This is not available in older versions of \XeTeX{}.
% \end{function}
%
% \begin{function}[added = 2019-05-13, updated = 2019-09-20, pTF, EXP]
@@ -863,7 +860,6 @@
% \end{verbatim}
% to work when the derived file is entirely absent. The timestamp
% of two absent files is regarded as different.
-% This is not available in older versions of \XeTeX{}.
% \end{function}
%
% \begin{function}[noTF, updated = 2019-02-16]
diff --git a/macros/latex/required/l3kernel/l3flag.dtx b/macros/latex/required/l3kernel/l3flag.dtx
index bf7776f449..88e726df35 100644
--- a/macros/latex/required/l3kernel/l3flag.dtx
+++ b/macros/latex/required/l3kernel/l3flag.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-assign.dtx b/macros/latex/required/l3kernel/l3fp-assign.dtx
index 9ef1944a99..e6fa97423e 100644
--- a/macros/latex/required/l3kernel/l3fp-assign.dtx
+++ b/macros/latex/required/l3kernel/l3fp-assign.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/required/l3kernel/l3fp-aux.dtx b/macros/latex/required/l3kernel/l3fp-aux.dtx
index f788b85df9..1ad33e235e 100644
--- a/macros/latex/required/l3kernel/l3fp-aux.dtx
+++ b/macros/latex/required/l3kernel/l3fp-aux.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-basics.dtx b/macros/latex/required/l3kernel/l3fp-basics.dtx
index 83c9cc87fa..e2d93219b0 100644
--- a/macros/latex/required/l3kernel/l3fp-basics.dtx
+++ b/macros/latex/required/l3kernel/l3fp-basics.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-convert.dtx b/macros/latex/required/l3kernel/l3fp-convert.dtx
index e42fb383fe..4983a3dd1f 100644
--- a/macros/latex/required/l3kernel/l3fp-convert.dtx
+++ b/macros/latex/required/l3kernel/l3fp-convert.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-expo.dtx b/macros/latex/required/l3kernel/l3fp-expo.dtx
index 31eb49093d..7577f640d4 100644
--- a/macros/latex/required/l3kernel/l3fp-expo.dtx
+++ b/macros/latex/required/l3kernel/l3fp-expo.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-extended.dtx b/macros/latex/required/l3kernel/l3fp-extended.dtx
index e35f0ae55e..596dc86ef2 100644
--- a/macros/latex/required/l3kernel/l3fp-extended.dtx
+++ b/macros/latex/required/l3kernel/l3fp-extended.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-functions.dtx b/macros/latex/required/l3kernel/l3fp-functions.dtx
index e7667eaa9b..b9e269b988 100644
--- a/macros/latex/required/l3kernel/l3fp-functions.dtx
+++ b/macros/latex/required/l3kernel/l3fp-functions.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-logic.dtx b/macros/latex/required/l3kernel/l3fp-logic.dtx
index 49ad2b1c02..486a3bc579 100644
--- a/macros/latex/required/l3kernel/l3fp-logic.dtx
+++ b/macros/latex/required/l3kernel/l3fp-logic.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-parse.dtx b/macros/latex/required/l3kernel/l3fp-parse.dtx
index 7999be7966..7853c40132 100644
--- a/macros/latex/required/l3kernel/l3fp-parse.dtx
+++ b/macros/latex/required/l3kernel/l3fp-parse.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-random.dtx b/macros/latex/required/l3kernel/l3fp-random.dtx
index 2a3d00cb58..ff999926ab 100644
--- a/macros/latex/required/l3kernel/l3fp-random.dtx
+++ b/macros/latex/required/l3kernel/l3fp-random.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-round.dtx b/macros/latex/required/l3kernel/l3fp-round.dtx
index b96d496b22..0d39b8a26a 100644
--- a/macros/latex/required/l3kernel/l3fp-round.dtx
+++ b/macros/latex/required/l3kernel/l3fp-round.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-symbolic.dtx b/macros/latex/required/l3kernel/l3fp-symbolic.dtx
index cdb7383949..88e214f49e 100644
--- a/macros/latex/required/l3kernel/l3fp-symbolic.dtx
+++ b/macros/latex/required/l3kernel/l3fp-symbolic.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-traps.dtx b/macros/latex/required/l3kernel/l3fp-traps.dtx
index bca459effa..fec48bc163 100644
--- a/macros/latex/required/l3kernel/l3fp-traps.dtx
+++ b/macros/latex/required/l3kernel/l3fp-traps.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/required/l3kernel/l3fp-trig.dtx b/macros/latex/required/l3kernel/l3fp-trig.dtx
index 8e8bc1cbf8..7c40c6198f 100644
--- a/macros/latex/required/l3kernel/l3fp-trig.dtx
+++ b/macros/latex/required/l3kernel/l3fp-trig.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp-types.dtx b/macros/latex/required/l3kernel/l3fp-types.dtx
index 9764606e83..e9269e1f03 100644
--- a/macros/latex/required/l3kernel/l3fp-types.dtx
+++ b/macros/latex/required/l3kernel/l3fp-types.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fp.dtx b/macros/latex/required/l3kernel/l3fp.dtx
index d49d2431cb..d273b057ea 100644
--- a/macros/latex/required/l3kernel/l3fp.dtx
+++ b/macros/latex/required/l3kernel/l3fp.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3fparray.dtx b/macros/latex/required/l3kernel/l3fparray.dtx
index 8b8026a6b8..f48de27af3 100644
--- a/macros/latex/required/l3kernel/l3fparray.dtx
+++ b/macros/latex/required/l3kernel/l3fparray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3int.dtx b/macros/latex/required/l3kernel/l3int.dtx
index c4e8408af2..45050964de 100644
--- a/macros/latex/required/l3kernel/l3int.dtx
+++ b/macros/latex/required/l3kernel/l3int.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
@@ -124,43 +124,7 @@
% input stream as an integer denotation: for positive results an
% explicit sequence of decimal digits not starting with~\texttt{0},
% for negative results \texttt{-}~followed by such a sequence, and
-% \texttt{0}~for zero. The \meta{int expr} should consist,
-% after expansion, of \texttt{+}, \texttt{-}, \texttt{*}, \texttt{/},
-% \texttt{(}, \texttt{)} and of course integer operands. The result
-% is calculated by applying standard mathematical rules with the
-% following peculiarities:
-% \begin{itemize}
-% \item \texttt{/} denotes division rounded to the closest integer with
-% ties rounded away from zero;
-% \item there is an error and the overall expression evaluates to zero
-% whenever the absolute value of any intermediate result exceeds
-% $2^{31}-1$, except in the case of scaling operations
-% $a$\texttt{*}$b$\texttt{/}$c$, for which $a$\texttt{*}$b$ may be
-% arbitrarily large;
-% \item parentheses may not appear after unary \texttt{+} or
-% \texttt{-}, namely placing \texttt{+(} or \texttt{-(} at the start
-% of an expression or after \texttt{+}, \texttt{-}, \texttt{*},
-% \texttt{/} or~\texttt{(} leads to an error.
-% \end{itemize}
-% Each integer operand can be either an integer variable (with no need
-% for \cs{int_use:N}) or an integer denotation. For example both
-% \begin{verbatim}
-% \int_eval:n { 5 + 4 * 3 - ( 3 + 4 * 5 ) }
-% \end{verbatim}
-% and
-% \begin{verbatim}
-% \tl_new:N \l_my_tl
-% \tl_set:Nn \l_my_tl { 5 }
-% \int_new:N \l_my_int
-% \int_set:Nn \l_my_int { 4 }
-% \int_eval:n { \l_my_tl + \l_my_int * 3 - ( 3 + 4 * 5 ) }
-% \end{verbatim}
-% evaluate to $-6$ because \cs[no-index]{l_my_tl} expands to the
-% integer denotation~|5|. As the \meta{int expr} is fully
-% expanded from left to right during evaluation, fully expandable and
-% restricted-expandable functions can both be used, and \cs{exp_not:n}
-% and its variants have no effect while \cs{exp_not:N} may incorrectly
-% interrupt the expression.
+% \texttt{0}~for zero.
% \begin{texnote}
% Exactly two expansions are needed to evaluate \cs{int_eval:n}.
% The result is \emph{not} an \meta{internal integer}, and therefore
@@ -909,7 +873,6 @@
% \end{syntax}
% Evaluates the two \meta{int expr}s and produces a
% pseudo-random number between the two (with bounds included).
-% This is not available in older versions of \XeTeX{}.
% \end{function}
%
% \begin{function}[EXP, added = 2018-05-05]{\int_rand:n}
@@ -918,7 +881,6 @@
% \end{syntax}
% Evaluates the \meta{int expr} then produces a
% pseudo-random number between $1$ and the \meta{int expr} (included).
-% This is not available in older versions of \XeTeX{}.
% \end{function}
%
% \section{Viewing integers}
diff --git a/macros/latex/required/l3kernel/l3intarray.dtx b/macros/latex/required/l3kernel/l3intarray.dtx
index 20e6219ef8..aa49275e78 100644
--- a/macros/latex/required/l3kernel/l3intarray.dtx
+++ b/macros/latex/required/l3kernel/l3intarray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3kernel-functions.dtx b/macros/latex/required/l3kernel/l3kernel-functions.dtx
index 6779a3ca6c..c3bb838acf 100644
--- a/macros/latex/required/l3kernel/l3kernel-functions.dtx
+++ b/macros/latex/required/l3kernel/l3kernel-functions.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3keys.dtx b/macros/latex/required/l3kernel/l3keys.dtx
index f03c628a63..13772d1781 100644
--- a/macros/latex/required/l3kernel/l3keys.dtx
+++ b/macros/latex/required/l3kernel/l3keys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
@@ -792,36 +792,6 @@
% }
% \end{verbatim}
%
-% \begin{function}[added = 2011-08-23, updated = 2019-01-29]
-% {
-% \keys_set_known:nn, \keys_set_known:nV,
-% \keys_set_known:nv, \keys_set_known:ne,
-% \keys_set_known:no,
-% \keys_set_known:nnN, \keys_set_known:nVN,
-% \keys_set_known:nvN, \keys_set_known:neN,
-% \keys_set_known:noN,
-% \keys_set_known:nnnN, \keys_set_known:nVnN,
-% \keys_set_known:nvnN, \keys_set_known:nenN,
-% \keys_set_known:nonN
-% }
-% \begin{syntax}
-% \cs{keys_set_known:nn} \Arg{module} \Arg{keyval list}
-% \cs{keys_set_known:nnN} \Arg{module} \Arg{keyval list} \meta{tl}
-% \cs{keys_set_known:nnnN} \Arg{module} \Arg{keyval list} \Arg{root} \meta{tl}
-% \end{syntax}
-% These functions set keys which are known for the \meta{module}, and
-% simply ignore other keys. The \cs{keys_set_known:nn} function parses the
-% \meta{keyval list}, and sets those keys which are defined for
-% \meta{module}. Any keys which are unknown are not processed further by
-% the parser. In addition, \cs{keys_set_known:nnN} stores the key--value
-% pairs in the \meta{tl} in comma-separated form (\emph{i.e.}~an edited
-% version of the \meta{keyval list}). When a \meta{root} is given
-% (\cs{keys_set_known:nnnN}), the key--value entries are returned
-% relative to this point in the key tree. When it is absent, only the
-% key name and value are provided. The correct list is returned by
-% nested calls.
-% \end{function}
-%
% \section{Selective key setting}
% \label{sec:l3keys:selective}
%
@@ -862,33 +832,37 @@
% groups to be made \enquote{active}, or by marking one or more groups to
% be ignored in key setting.
%
-% \begin{function}[added = 2024-01-10]
+% \begin{function}[added = 2011-08-23, updated = 2019-01-29]
% {
-% \keys_set_exclude_groups:nnn, \keys_set_exclude_groups:nnV,
-% \keys_set_exclude_groups:nnv, \keys_set_exclude_groups:nno,
-% \keys_set_exclude_groups:nnnN, \keys_set_exclude_groups:nnVN,
-% \keys_set_exclude_groups:nnvN, \keys_set_exclude_groups:nnoN,
-% \keys_set_exclude_groups:nnnnN, \keys_set_exclude_groups:nnVnN,
-% \keys_set_exclude_groups:nnvnN, \keys_set_exclude_groups:nnonN,
+% \keys_set_known:nn, \keys_set_known:nV,
+% \keys_set_known:nv, \keys_set_known:ne,
+% \keys_set_known:no,
+% \keys_set_known:nnN, \keys_set_known:nVN,
+% \keys_set_known:nvN, \keys_set_known:neN,
+% \keys_set_known:noN,
+% \keys_set_known:nnnN, \keys_set_known:nVnN,
+% \keys_set_known:nvnN, \keys_set_known:nenN,
+% \keys_set_known:nonN
% }
% \begin{syntax}
-% \cs{keys_set_exclude_groups:nnn} \Arg{module} \Arg{groups} \Arg{keyval list}
-% \cs{keys_set_exclude_groups:nnnN} \Arg{module} \Arg{groups} \Arg{keyval list} \meta{tl}
-% \cs{keys_set_exclude_groups:nnnnN} \Arg{module} \Arg{groups} \Arg{keyval list} \meta{root} \meta{tl}
+% \cs{keys_set_known:nn} \Arg{module} \Arg{keyval list}
+% \cs{keys_set_known:nnN} \Arg{module} \Arg{keyval list} \meta{tl~var}
+% \cs{keys_set_known:nnnN} \Arg{module} \Arg{keyval list} \Arg{root} \meta{tl~var}
% \end{syntax}
-% Sets keys by excluding those in the specified \meta{groups}.
-% The \meta{groups} are
-% given as a comma-separated list. Unknown keys are not assigned to any
-% group and are thus always set. The key--value pairs for each
-% key which is filtered out are stored in the \meta{tl} in a
-% comma-separated form (\emph{i.e.}~an edited version of the \meta{keyval
-% list}). The \cs{keys_set_exclude_groups:nnn} version skips this stage.
-%
-% Use of \cs{keys_set_exclude_groups:nnnN} can be nested, with the correct residual
-% \meta{keyval list} returned at each stage. In the version which takes
-% a \meta{root} argument, the key list is returned relative to that point
-% in the key tree. In the cases without a \meta{root} argument, only
-% the key names and values are returned.
+% These functions set keys which are known for the \meta{module}, and
+% simply ignore other keys. The \cs{keys_set_known:nn} function parses the
+% \meta{keyval list}, and sets those keys which are defined for
+% \meta{module}. Any keys which are unknown are not processed further by
+% the parser.
+%
+% In addition, \cs{keys_set_known:nnN} and \cs{keys_set_known:nnnN}
+% store the key--value pairs for unknown keys in the \meta{tl~var}
+% in comma-separated form (\emph{i.e.}~an edited version of the
+% \meta{keyval list}). When a \meta{root} is given
+% (\cs{keys_set_known:nnnN}), the key--value entries are returned
+% relative to this point in the key tree. When it is absent, only the
+% key name and value are provided. The correct list is returned by
+% nested calls.
% \end{function}
%
% \begin{function}[added = 2013-07-14, updated = 2024-05-08]
@@ -902,25 +876,62 @@
% }
% \begin{syntax}
% \cs{keys_set_groups:nnn} \Arg{module} \Arg{groups} \Arg{keyval list}
+% \cs{keys_set_groups:nnnN} \Arg{module} \Arg{groups} \Arg{keyval list} \meta{tl~var}
+% \cs{keys_set_groups:nnnnN} \Arg{module} \Arg{groups} \Arg{keyval list} \Arg{root} \meta{tl~var}
+% \end{syntax}
+% These functions activate key selection in an \enquote{opt-in} sense:
+% only keys assigned to one or more of the \meta{groups} specified are set.
+% The \meta{groups} are given as a comma-separated list. Unknown keys are
+% not assigned to any group and are thus never set.
+%
+% In addition, \cs{keys_set_groups:nnnN} and \cs{keys_set_groups:nnnnN}
+% store the key--value pairs for skipped keys in the \meta{tl~var}
+% in comma-separated form (\emph{i.e.}~an edited version of the
+% \meta{keyval list}). When a \meta{root} is given
+% (\cs{keys_set_groups:nnnnN}), the key--value entries are returned
+% relative to this point in the key tree. When it is absent, only the
+% key name and value are provided. The correct list is returned by
+% nested calls.
+% \end{function}
+%
+% \begin{function}[added = 2024-01-10]
+% {
+% \keys_set_exclude_groups:nnn, \keys_set_exclude_groups:nnV,
+% \keys_set_exclude_groups:nnv, \keys_set_exclude_groups:nno,
+% \keys_set_exclude_groups:nnnN, \keys_set_exclude_groups:nnVN,
+% \keys_set_exclude_groups:nnvN, \keys_set_exclude_groups:nnoN,
+% \keys_set_exclude_groups:nnnnN, \keys_set_exclude_groups:nnVnN,
+% \keys_set_exclude_groups:nnvnN, \keys_set_exclude_groups:nnonN,
+% }
+% \begin{syntax}
+% \cs{keys_set_exclude_groups:nnn} \Arg{module} \Arg{groups} \Arg{keyval list}
+% \cs{keys_set_exclude_groups:nnnN} \Arg{module} \Arg{groups} \Arg{keyval list} \meta{tl~var}
+% \cs{keys_set_exclude_groups:nnnnN} \Arg{module} \Arg{groups} \Arg{keyval list} \Arg{root} \meta{tl~var}
% \end{syntax}
-% Activates key filtering in an \enquote{opt-in} sense: only keys assigned to
-% one or more of the \meta{groups} specified are set. The \meta{groups} are
-% given as a comma-separated list. Unknown keys are not assigned to any
-% group and are thus never set. The key--value pairs for each
-% key which is filtered out are stored in the \meta{tl} in a
-% comma-separated form (\emph{i.e.}~an edited version of the \meta{keyval
-% list}). The \cs{keys_set_groups:nnn} version skips this stage
+% These functions activate key selection in an \enquote{opt-out} sense:
+% keys assigned to one or more of the \meta{groups} specified are
+% \emph{not} set. The \meta{groups} are given as a comma-separated list.
+% Unknown keys are not assigned to any group and are thus always set.
+%
+% In addition, \cs{keys_set_exclude_groups:nnnN} and
+% \cs{keys_set_exclude_groups:nnnnN} store the key--value pairs for
+% skipped keys in the \meta{tl~var} in comma-separated form
+% (\emph{i.e.}~an edited version of the \meta{keyval list}). When a
+% \meta{root} is given (\cs{keys_set_exclude_groups:nnnnN}), the
+% key--value entries are returned relative to this point in the key
+% tree. When it is absent, only the key name and value are provided.
+% The correct list is returned by nested calls.
% \end{function}
%
% \section{Digesting keys}
%
% \begin{function}[added = 2022-03-09]{\keys_precompile:nnN}
% \begin{syntax}
-% \cs{keys_precompile:nnN} \Arg{module} \Arg{keyval list} \meta{tl}
+% \cs{keys_precompile:nnN} \Arg{module} \Arg{keyval list} \meta{tl~var}
% \end{syntax}
% Parses the \meta{keyval list} as for \cs{keys_set:nn}, placing the
% resulting code for those which set variables or functions into the
-% \meta{tl}. Thus this function \enquote{precompiles} the keyval list into
+% \meta{tl~var}. Thus this function \enquote{precompiles} the keyval list into
% a set of results which can be applied rapidly.
% \end{function}
%
@@ -1687,14 +1698,14 @@
% \begin{variable}{\l_@@_selective_clist}
% The list of key groups being filtered in or out during selective setting.
% \begin{macrocode}
-\seq_new:N \l_@@_selective_clist
+\clist_new:N \l_@@_selective_clist
% \end{macrocode}
% \end{variable}
%
% \begin{variable}{\l_@@_tmp_clist}
% Scratch space used as a data dump.
% \begin{macrocode}
-\seq_new:N \l_@@_tmp_clist
+\clist_new:N \l_@@_tmp_clist
% \end{macrocode}
% \end{variable}
%
@@ -2148,7 +2159,7 @@
%
% \begin{macro}{\@@_initialise:n}
% A set up for initialisation: just run the code if it exists.
-% We need to set the key string here, using the deprecated \texttt{tl}
+% We need to set the key string here, using the deprecated \texttt{tl~var}
% as a piece of scratch space.
% \begin{macrocode}
\cs_new_protected:Npn \@@_initialise:n #1
diff --git a/macros/latex/required/l3kernel/l3legacy.dtx b/macros/latex/required/l3kernel/l3legacy.dtx
index fd30799ea1..4cfce5c5f1 100644
--- a/macros/latex/required/l3kernel/l3legacy.dtx
+++ b/macros/latex/required/l3kernel/l3legacy.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3luatex.dtx b/macros/latex/required/l3kernel/l3luatex.dtx
index 19d92a1591..eb10d5aecc 100644
--- a/macros/latex/required/l3kernel/l3luatex.dtx
+++ b/macros/latex/required/l3kernel/l3luatex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3msg.dtx b/macros/latex/required/l3kernel/l3msg.dtx
index 96fc231193..e901b07c06 100644
--- a/macros/latex/required/l3kernel/l3msg.dtx
+++ b/macros/latex/required/l3kernel/l3msg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3names.dtx b/macros/latex/required/l3kernel/l3names.dtx
index c2af4697f2..5cdd1361e3 100644
--- a/macros/latex/required/l3kernel/l3names.dtx
+++ b/macros/latex/required/l3kernel/l3names.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3news.pdf b/macros/latex/required/l3kernel/l3news.pdf
index eeea0487e7..4b57ef41c8 100644
--- a/macros/latex/required/l3kernel/l3news.pdf
+++ b/macros/latex/required/l3kernel/l3news.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news01.pdf b/macros/latex/required/l3kernel/l3news01.pdf
index eed44515b5..b5f45059d3 100644
--- a/macros/latex/required/l3kernel/l3news01.pdf
+++ b/macros/latex/required/l3kernel/l3news01.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news02.pdf b/macros/latex/required/l3kernel/l3news02.pdf
index 34df11b4f6..0ee8ffaf96 100644
--- a/macros/latex/required/l3kernel/l3news02.pdf
+++ b/macros/latex/required/l3kernel/l3news02.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news03.pdf b/macros/latex/required/l3kernel/l3news03.pdf
index fa2fc3a7b9..fef9bf3a7b 100644
--- a/macros/latex/required/l3kernel/l3news03.pdf
+++ b/macros/latex/required/l3kernel/l3news03.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news04.pdf b/macros/latex/required/l3kernel/l3news04.pdf
index c1b5f0e555..0afbb9591e 100644
--- a/macros/latex/required/l3kernel/l3news04.pdf
+++ b/macros/latex/required/l3kernel/l3news04.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news05.pdf b/macros/latex/required/l3kernel/l3news05.pdf
index a3dc4d6e02..0a44ce6811 100644
--- a/macros/latex/required/l3kernel/l3news05.pdf
+++ b/macros/latex/required/l3kernel/l3news05.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news06.pdf b/macros/latex/required/l3kernel/l3news06.pdf
index 765174a222..10cec7c17f 100644
--- a/macros/latex/required/l3kernel/l3news06.pdf
+++ b/macros/latex/required/l3kernel/l3news06.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news07.pdf b/macros/latex/required/l3kernel/l3news07.pdf
index d9d2c2a281..6bfbab4d96 100644
--- a/macros/latex/required/l3kernel/l3news07.pdf
+++ b/macros/latex/required/l3kernel/l3news07.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news08.pdf b/macros/latex/required/l3kernel/l3news08.pdf
index 810cc505a0..a0130195cc 100644
--- a/macros/latex/required/l3kernel/l3news08.pdf
+++ b/macros/latex/required/l3kernel/l3news08.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news09.pdf b/macros/latex/required/l3kernel/l3news09.pdf
index 1491fdd32c..3616cc20ca 100644
--- a/macros/latex/required/l3kernel/l3news09.pdf
+++ b/macros/latex/required/l3kernel/l3news09.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news10.pdf b/macros/latex/required/l3kernel/l3news10.pdf
index 496795ff16..00ec553d1c 100644
--- a/macros/latex/required/l3kernel/l3news10.pdf
+++ b/macros/latex/required/l3kernel/l3news10.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news11.pdf b/macros/latex/required/l3kernel/l3news11.pdf
index 68a16e2539..59a672d339 100644
--- a/macros/latex/required/l3kernel/l3news11.pdf
+++ b/macros/latex/required/l3kernel/l3news11.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3news12.pdf b/macros/latex/required/l3kernel/l3news12.pdf
index f99bb21037..9c4f937b00 100644
--- a/macros/latex/required/l3kernel/l3news12.pdf
+++ b/macros/latex/required/l3kernel/l3news12.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3pdf.dtx b/macros/latex/required/l3kernel/l3pdf.dtx
index 007cb5b5ad..55f49476e3 100644
--- a/macros/latex/required/l3kernel/l3pdf.dtx
+++ b/macros/latex/required/l3kernel/l3pdf.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3prefixes.csv b/macros/latex/required/l3kernel/l3prefixes.csv
index 7baa984582..e85412b9d8 100644
--- a/macros/latex/required/l3kernel/l3prefixes.csv
+++ b/macros/latex/required/l3kernel/l3prefixes.csv
@@ -137,6 +137,7 @@ kgl,kantlipsum,Enrico Gregorio,,,,2013-03-16,2013-03-16,
kivitendo,"kiviletter, kivitables",Marei Peischl for Kivitendo,https://www.kivitendo.de/,https://github.com/kivitendo/kivitendo-erp,https://forum.kivitendo.de/,2021-05-28,2021-05-28,
langsci,langscibook,Language Science Press,https://langsci-press.org,https://github.com/langsci/langscibook,https://github.com/langsci/langscibook/issues,2021-07-20,2021-07-21,
left,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+liftarm,liftarm,Matthias Floré,,,,2024-05-25,2024-05-25,
lltxmath,lualatex-math,Philipp Stephani,https://github.com/phst/lualatex-math,https://github.com/phst/lualatex-math.git,https://github.com/phst/lualatex-math/issues,2012-11-07,2012-11-07,
log,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
lua,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
diff --git a/macros/latex/required/l3kernel/l3prefixes.pdf b/macros/latex/required/l3kernel/l3prefixes.pdf
index 0a721bca11..602ccaaa59 100644
--- a/macros/latex/required/l3kernel/l3prefixes.pdf
+++ b/macros/latex/required/l3kernel/l3prefixes.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3prg.dtx b/macros/latex/required/l3kernel/l3prg.dtx
index 96ef859b3f..bec4e3a712 100644
--- a/macros/latex/required/l3kernel/l3prg.dtx
+++ b/macros/latex/required/l3kernel/l3prg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3prop.dtx b/macros/latex/required/l3kernel/l3prop.dtx
index 3350b27792..21b8d03dd6 100644
--- a/macros/latex/required/l3kernel/l3prop.dtx
+++ b/macros/latex/required/l3kernel/l3prop.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3quark.dtx b/macros/latex/required/l3kernel/l3quark.dtx
index c989bd4024..136596a3fe 100644
--- a/macros/latex/required/l3kernel/l3quark.dtx
+++ b/macros/latex/required/l3kernel/l3quark.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3regex.dtx b/macros/latex/required/l3kernel/l3regex.dtx
index ad44b8c6f9..6ca9c8eeed 100644
--- a/macros/latex/required/l3kernel/l3regex.dtx
+++ b/macros/latex/required/l3kernel/l3regex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3seq.dtx b/macros/latex/required/l3kernel/l3seq.dtx
index 713e4a33b1..38fc9471a9 100644
--- a/macros/latex/required/l3kernel/l3seq.dtx
+++ b/macros/latex/required/l3kernel/l3seq.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
@@ -354,7 +354,6 @@
% \end{syntax}
% Selects a pseudo-random item of the \meta{seq~var}. If the
% \meta{seq~var} is empty the result is empty.
-% This is not available in older versions of \XeTeX{}.
% \begin{texnote}
% The result is returned within the \tn{unexpanded}
% primitive (\cs{exp_not:n}), which means that the \meta{item}
diff --git a/macros/latex/required/l3kernel/l3skip.dtx b/macros/latex/required/l3kernel/l3skip.dtx
index 3eeb891e3d..6e96b41326 100644
--- a/macros/latex/required/l3kernel/l3skip.dtx
+++ b/macros/latex/required/l3kernel/l3skip.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3sort.dtx b/macros/latex/required/l3kernel/l3sort.dtx
index 9ba8713244..47cebcad25 100644
--- a/macros/latex/required/l3kernel/l3sort.dtx
+++ b/macros/latex/required/l3kernel/l3sort.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3str-convert.dtx b/macros/latex/required/l3kernel/l3str-convert.dtx
index 0b280fb109..baf705fe0c 100644
--- a/macros/latex/required/l3kernel/l3str-convert.dtx
+++ b/macros/latex/required/l3kernel/l3str-convert.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3str.dtx b/macros/latex/required/l3kernel/l3str.dtx
index d4e08b2dd2..f4f7b94b88 100644
--- a/macros/latex/required/l3kernel/l3str.dtx
+++ b/macros/latex/required/l3kernel/l3str.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3styleguide.pdf b/macros/latex/required/l3kernel/l3styleguide.pdf
index 33333f832f..0113bac571 100644
--- a/macros/latex/required/l3kernel/l3styleguide.pdf
+++ b/macros/latex/required/l3kernel/l3styleguide.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3styleguide.tex b/macros/latex/required/l3kernel/l3styleguide.tex
index 2cffd774e3..bcea3de06e 100644
--- a/macros/latex/required/l3kernel/l3styleguide.tex
+++ b/macros/latex/required/l3kernel/l3styleguide.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2024-05-08}
+\date{Released 2024-05-27}
\begin{document}
diff --git a/macros/latex/required/l3kernel/l3syntax-changes.pdf b/macros/latex/required/l3kernel/l3syntax-changes.pdf
index 64bf0da4e8..99e93c2ccc 100644
--- a/macros/latex/required/l3kernel/l3syntax-changes.pdf
+++ b/macros/latex/required/l3kernel/l3syntax-changes.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3syntax-changes.tex b/macros/latex/required/l3kernel/l3syntax-changes.tex
index 0b21c09da0..30d8d47747 100644
--- a/macros/latex/required/l3kernel/l3syntax-changes.tex
+++ b/macros/latex/required/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 2024-05-08}
+\date{Released 2024-05-27}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex/required/l3kernel/l3sys.dtx b/macros/latex/required/l3kernel/l3sys.dtx
index 0417a963bc..b2228c7fd9 100644
--- a/macros/latex/required/l3kernel/l3sys.dtx
+++ b/macros/latex/required/l3kernel/l3sys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3term-glossary.pdf b/macros/latex/required/l3kernel/l3term-glossary.pdf
index b54a47f899..01598ca79a 100644
--- a/macros/latex/required/l3kernel/l3term-glossary.pdf
+++ b/macros/latex/required/l3kernel/l3term-glossary.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/l3term-glossary.tex b/macros/latex/required/l3kernel/l3term-glossary.tex
index 86ad15568a..141749aa6b 100644
--- a/macros/latex/required/l3kernel/l3term-glossary.tex
+++ b/macros/latex/required/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 2024-05-08}
+\date{Released 2024-05-27}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex/required/l3kernel/l3text-case.dtx b/macros/latex/required/l3kernel/l3text-case.dtx
index 888e6e97b9..89cdb9e2b1 100644
--- a/macros/latex/required/l3kernel/l3text-case.dtx
+++ b/macros/latex/required/l3kernel/l3text-case.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3text-map.dtx b/macros/latex/required/l3kernel/l3text-map.dtx
index ab4a6db91e..3573002244 100644
--- a/macros/latex/required/l3kernel/l3text-map.dtx
+++ b/macros/latex/required/l3kernel/l3text-map.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3text-purify.dtx b/macros/latex/required/l3kernel/l3text-purify.dtx
index ec85eb8be4..35390811aa 100644
--- a/macros/latex/required/l3kernel/l3text-purify.dtx
+++ b/macros/latex/required/l3kernel/l3text-purify.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3text.dtx b/macros/latex/required/l3kernel/l3text.dtx
index a59e047bd7..bcfd15cb62 100644
--- a/macros/latex/required/l3kernel/l3text.dtx
+++ b/macros/latex/required/l3kernel/l3text.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3tl-analysis.dtx b/macros/latex/required/l3kernel/l3tl-analysis.dtx
index 80a7d74cef..4df9ee68a3 100644
--- a/macros/latex/required/l3kernel/l3tl-analysis.dtx
+++ b/macros/latex/required/l3kernel/l3tl-analysis.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
@@ -1303,14 +1303,20 @@
% Expandable tokens (which are automatically |N|-type) can be
% \tn{outer} macros, hence the need for \cs{exp_after:wN} and
% \cs{exp_not:N} in the code above, which allows the next function to
-% safely grab the token as an argument. We run some code that is
-% expanded using the primitive \cs{cs_set_nopar:Npe} rather than
-% \cs{tl_set:Ne} to avoid grabbing it as an argument as |#1| may be
-% \tn{outer}. To allow~|#1| as an argument of the user's function
-% (stored in \cs{l_@@_peek_code_tl}), we set it equal to
-% \cs{scan_stop:}, but we do it at the last minute because |#1|
-% may be some pretty important function such as \cs{exp_after:wN}.
-% Then we put the user's function and the elaborate first argument
+% safely grab the token as an argument. To allow the
+% possibly-\tn{outer} token~|#1| as an argument of the \meta{user's
+% function} (which is protected and stored in \cs{l_@@_peek_code_tl}),
+% we set it equal to a harmless macro. This must be done at the very
+% last minute because |#1| may be some pretty important function such
+% as \cs{exp_after:wN}. Using a primitive \cs{cs_set_nopar:Npe}
+% expansion (to avoid \tn{outer} problems) we set up to run the code
+% \tn{let} |#1| \meta{user's function} \meta{user's function} followed
+% by arguments involving~|#1|. Regardless of~|#1| (including the
+% user's function itself), the user's function is run. It always
+% starts with \cs{group_end:}, which has not been redefined since |#1|
+% started out as expandable, and which restores the definition of~|#1|.
+%
+% Then we put the elaborate first argument
% \cs{__kernel_exp_not:w} \cs{exp_after:wN} |{| \cs{exp_not:N} |#1| |}|:
% indeed we cannot use \cs{exp_not:n} |{#1}| as this breaks for an
% \tn{outer} macro and we cannot use \cs{exp_not:N} |#1|, as
@@ -1323,29 +1329,31 @@
% the two cases is easy: since we have made the escape character
% printable, \cs{token_to_str:N} gives at least two characters for a
% control sequence versus a single one for an active character
-% (possibly being a space). Importantly, once we apply
-% \cs{token_to_str:N} we no longer need to worry about \tn{outer}
-% tokens.
+% (possibly being a space, in which case the trailing brace group is
+% taken as the first argument of \cs{@@_peek_analysis_exp_aux:Nw}).
+% Importantly, |#1| could be an \tn{outer} token (as it is only set to
+% \cs{scan_stop:} at the last minute) but once we apply
+% \cs{token_to_str:N} we no longer need to worry about it.
% \begin{macrocode}
\cs_new_protected:Npn \@@_peek_analysis_exp:N #1
{
\cs_set_nopar:Npe \l_@@_peek_code_tl
{
- \tex_let:D \exp_not:N #1 \scan_stop:
- \exp_not:o \l_@@_peek_code_tl
+ \tex_let:D \exp_not:N #1 \l_@@_peek_code_tl
+ \l_@@_peek_code_tl
{
\exp_not:n { \__kernel_exp_not:w \exp_after:wN }
{ \exp_not:N \exp_not:N \exp_not:N #1 }
}
\exp_after:wN \@@_peek_analysis_exp_aux:Nw
- \token_to_str:N #1 \prg_do_nothing: \s_@@
+ \token_to_str:N #1 { } \s_@@
}
\l_@@_peek_code_tl
}
\cs_new:Npe \@@_peek_analysis_exp_aux:Nw #1#2 \s_@@
{
- \exp_not:N \if:w \scan_stop: #2 \scan_stop:
- { \exp_not:N \int_value:w `#1 } \token_to_str:N D
+ \exp_not:N \if_meaning:w \scan_stop: #2 \scan_stop:
+ { \exp_not:N \int_value:w `#1 ~ } \token_to_str:N D
\exp_not:N \else:
{ -1 } 0
\exp_not:N \fi:
diff --git a/macros/latex/required/l3kernel/l3tl-build.dtx b/macros/latex/required/l3kernel/l3tl-build.dtx
index 708ea81680..6cd9822ad2 100644
--- a/macros/latex/required/l3kernel/l3tl-build.dtx
+++ b/macros/latex/required/l3kernel/l3tl-build.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3tl.dtx b/macros/latex/required/l3kernel/l3tl.dtx
index 940b3cb8d0..71d68d532c 100644
--- a/macros/latex/required/l3kernel/l3tl.dtx
+++ b/macros/latex/required/l3kernel/l3tl.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
@@ -994,7 +994,6 @@
% \end{syntax}
% Selects a pseudo-random item of the \meta{token list}. If the
% \meta{token list} is blank, the result is empty.
-% This is not available in older versions of \XeTeX{}.
% \begin{texnote}
% The result is returned within the \tn{unexpanded}
% primitive (\cs{exp_not:n}), which means that the \meta{item}
diff --git a/macros/latex/required/l3kernel/l3token.dtx b/macros/latex/required/l3kernel/l3token.dtx
index 5c31ab04e7..03bf46b101 100644
--- a/macros/latex/required/l3kernel/l3token.dtx
+++ b/macros/latex/required/l3kernel/l3token.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/l3unicode.dtx b/macros/latex/required/l3kernel/l3unicode.dtx
index 3b3bd007a4..179817d490 100644
--- a/macros/latex/required/l3kernel/l3unicode.dtx
+++ b/macros/latex/required/l3kernel/l3unicode.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-05-27}
%
% \maketitle
%
diff --git a/macros/latex/required/l3kernel/source3.pdf b/macros/latex/required/l3kernel/source3.pdf
index 77c8b81892..34279f9e00 100644
--- a/macros/latex/required/l3kernel/source3.pdf
+++ b/macros/latex/required/l3kernel/source3.pdf
Binary files differ
diff --git a/macros/latex/required/l3kernel/source3.tex b/macros/latex/required/l3kernel/source3.tex
index 623b9cc1a0..00095ad319 100644
--- a/macros/latex/required/l3kernel/source3.tex
+++ b/macros/latex/required/l3kernel/source3.tex
@@ -57,7 +57,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2024-05-08}
+\date{Released 2024-05-27}
\pagenumbering{roman}
\maketitle